PageRenderTime 72ms CodeModel.GetById 22ms RepoModel.GetById 1ms app.codeStats 0ms

/modules/currency/admin/currency_edit.php

https://gitlab.com/alexprowars/bitrix
PHP | 377 lines | 353 code | 21 blank | 3 comment | 48 complexity | 073c83cc366cc3104d879eb42199338d MD5 | raw file
  1. <?
  2. /** @global CMain $APPLICATION
  3. * @global CDatabase $DB
  4. */
  5. require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php");
  6. require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/currency/prolog.php");
  7. $CURRENCY_RIGHT = $APPLICATION->GetGroupRight("currency");
  8. if ($CURRENCY_RIGHT=="D")
  9. $APPLICATION->AuthForm(GetMessage("ACCESS_DENIED"));
  10. CModule::IncludeModule('currency');
  11. IncludeModuleLangFile(__FILE__);
  12. $errorMessage = array();
  13. $ID = '';
  14. if (isset($_REQUEST['ID']))
  15. $ID = trim((string)$_REQUEST['ID']);
  16. $aTabs = array(
  17. array("DIV" => "edit1", "TAB" => GetMessage("currency_curr"), "ICON"=>"", "TITLE"=>GetMessage("currency_curr_settings")),
  18. array("DIV" => "edit2", "TAB" => GetMessage("BT_CURRENCY_EDIT_TAB_NAME_LANGUAGE"), "ICON"=>"", "TITLE"=>GetMessage("BT_CURRENCY_EDIT_TAB_TITLE_LANGUAGE")),
  19. );
  20. $tabControl = new CAdminTabControl("tabControl", $aTabs);
  21. $arTemplates = CCurrencyLang::GetFormatTemplates();
  22. $separatorList = CCurrencyLang::GetSeparatorTypes(true);
  23. $langList = array();
  24. $langID = array();
  25. $langIterator = CLangAdmin::GetList();
  26. while ($oneLang = $langIterator->Fetch())
  27. {
  28. $langID[] = $oneLang['LID'];
  29. $langList[$oneLang['LID']] = $oneLang['NAME'];
  30. }
  31. unset($oneLang, $langIterator, $order, $by);
  32. $arFields = array();
  33. if ($_SERVER['REQUEST_METHOD'] == 'POST' && $CURRENCY_RIGHT=="W" && !empty($_POST['Update']) && check_bitrix_sessid())
  34. {
  35. if (!isset($_POST['BASE']) || $_POST['BASE'] != 'Y')
  36. {
  37. $arFields = array(
  38. 'AMOUNT' => (isset($_POST['AMOUNT']) ? $_POST['AMOUNT'] : ''),
  39. 'AMOUNT_CNT' => (isset($_POST['AMOUNT_CNT']) ? $_POST['AMOUNT_CNT'] : ''),
  40. 'SORT' => (isset($_POST['SORT']) ? $_POST['SORT'] : ''),
  41. 'NUMCODE' => (isset($_POST['NUMCODE']) ? $_POST['NUMCODE'] : '')
  42. );
  43. }
  44. else
  45. {
  46. $arFields = array(
  47. 'AMOUNT' => 1,
  48. 'AMOUNT_CNT' => 1,
  49. 'SORT' => (isset($_POST['SORT']) ? $_POST['SORT'] : ''),
  50. 'NUMCODE' => (isset($_POST['NUMCODE']) ? $_POST['NUMCODE'] : '')
  51. );
  52. }
  53. if (!$ID && isset($_POST['CURRENCY']))
  54. {
  55. $arFields['CURRENCY'] = $_POST['CURRENCY'];
  56. }
  57. $strAction = ($ID ? 'UPDATE' : 'ADD');
  58. $langSettings = array();
  59. foreach ($langID as $oneLang)
  60. {
  61. if (isset($_POST['LANG_'.$oneLang]))
  62. $langSettings[$oneLang] = $_POST['LANG_'.$oneLang];
  63. }
  64. unset($oneLang);
  65. $arFields['LANG'] = $langSettings;
  66. unset($langSettings);
  67. $DB->StartTransaction();
  68. if ($ID)
  69. {
  70. $res = CCurrency::Update($ID, $arFields);
  71. }
  72. else
  73. {
  74. $ID = (string)CCurrency::Add($arFields);
  75. $res = ($ID !== '');
  76. }
  77. if (!$res)
  78. {
  79. $DB->Rollback();
  80. if ($ex = $APPLICATION->GetException())
  81. $errorMessage[] = $ex->GetString();
  82. else
  83. $errorMessage[] = ($ID ? str_replace('#ID#', $ID, GetMessage('BT_CURRENCY_EDIT_ERR_UPDATE')) : GetMessage('BT_CURRENCY_EDIT_ERR_ADD'))."<br>";
  84. }
  85. else
  86. {
  87. $DB->Commit();
  88. if (empty($_POST['apply']))
  89. LocalRedirect('/bitrix/admin/currencies.php?lang='.LANGUAGE_ID);
  90. LocalRedirect('/bitrix/admin/currency_edit.php?ID='.$ID.'&lang='.LANGUAGE_ID.'&'.$tabControl->ActiveTabParam());
  91. }
  92. }
  93. $defaultValues = array(
  94. 'CURRENCY' => '',
  95. 'AMOUNT_CNT' => 1,
  96. 'AMOUNT' => 1,
  97. 'SORT' => 100,
  98. 'NUMCODE' => '',
  99. 'BASE' => 'N'
  100. );
  101. $defaultLangValues = array(
  102. 'FULL_NAME' => '',
  103. 'FORMAT_STRING' => '#',
  104. 'DEC_POINT' => '.',
  105. 'THOUSANDS_SEP' => '',
  106. 'DECIMALS' => 2,
  107. 'THOUSANDS_VARIANT' => CCurrencyLang::SEP_SPACE,
  108. 'HIDE_ZERO' => 'Y'
  109. );
  110. if ($ID != '')
  111. $APPLICATION->SetTitle(GetMessage("CURRENCY_EDIT_TITLE"));
  112. else
  113. $APPLICATION->SetTitle(GetMessage("CURRENCY_NEW_TITLE"));
  114. require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php");
  115. $currency = $defaultValues;
  116. $currencyLangs = array_fill_keys($langID, $defaultLangValues);
  117. if ($ID != '')
  118. {
  119. $currency = CCurrency::GetByID($ID);
  120. if (empty($currency))
  121. {
  122. $ID = '';
  123. $currency = $defaultValues;
  124. }
  125. else
  126. {
  127. $langIterator = CCurrencyLang::GetList('currency', 'asc', $ID);
  128. while ($language = $langIterator->Fetch())
  129. {
  130. $language['THOUSANDS_SEP'] = (string)$language['THOUSANDS_SEP'];
  131. $language['THOUSANDS_VARIANT'] = (string)$language['THOUSANDS_VARIANT'];
  132. $language['FULL_NAME'] = (string)$language['FULL_NAME'];
  133. if ($language['FULL_NAME'] === '')
  134. $language['FULL_NAME'] = $ID;
  135. $currencyLangs[$language['LID']] = $language;
  136. }
  137. unset($language, $langIterator, $order, $by);
  138. }
  139. }
  140. if (!empty($errorMessage))
  141. {
  142. $currency = $arFields;
  143. if (!isset($currency['CURRENCY']))
  144. $currency['CURRENCY'] = '';
  145. $currencyLangs = $arFields['LANG'];
  146. }
  147. $aContext = array(
  148. array(
  149. "ICON" => "btn_list",
  150. "TEXT" => GetMessage("MAIN_ADMIN_MENU_LIST"),
  151. "LINK" => "currencies.php?lang=".LANGUAGE_ID,
  152. "TITLE" => GetMessage("MAIN_ADMIN_MENU_LIST")
  153. ),
  154. );
  155. if ($ID != '')
  156. {
  157. $aContext[] = array(
  158. "ICON" => "btn_new",
  159. "TEXT" => GetMessage("MAIN_ADMIN_MENU_CREATE"),
  160. "LINK" => "currency_edit.php?lang=".LANGUAGE_ID,
  161. "TITLE" => GetMessage("MAIN_ADMIN_MENU_CREATE")
  162. );
  163. if ($CURRENCY_RIGHT == "W" && $currency['BASE'] != 'Y')
  164. {
  165. $aContext[] = array(
  166. "ICON" => "btn_delete",
  167. "TEXT" => GetMessage("MAIN_ADMIN_MENU_DELETE"),
  168. "ONCLICK" => "javascript:if(confirm('".GetMessageJS("CONFIRM_DEL_MESSAGE")."'))window.location='currencies.php?action=delete&ID[]=".CUtil::JSEscape($ID)."&lang=".LANGUAGE_ID."&".bitrix_sessid_get()."';",
  169. );
  170. }
  171. }
  172. $context = new CAdminContextMenu($aContext);
  173. $context->Show();
  174. if (!empty($errorMessage))
  175. CAdminMessage::ShowMessage(implode('<br>', $errorMessage));
  176. ?><script type="text/javascript">
  177. function setTemplate(lang)
  178. {
  179. var arFormat = [], arPoint = [], arThousand = [], arDecimals = [],
  180. sIndex, i;
  181. <?
  182. foreach ($arTemplates as $key => $ar)
  183. {
  184. echo "arFormat[".$key."] = '".$ar["FORMAT"]."';\n";
  185. echo "arPoint[".$key."] = '".$ar["DEC_POINT"]."';\n";
  186. echo "arThousand[".$key."] = '".$ar["THOUSANDS_VARIANT"]."';\n";
  187. echo "arDecimals[".$key."] = '".$ar["DECIMALS"]."';\n";
  188. }
  189. ?>
  190. sIndex = document.forms['form1'].elements['format_' + lang].selectedIndex;
  191. if (sIndex > 0)
  192. {
  193. document.forms['form1'].elements['LANG_' + lang + '[FORMAT_STRING]'].value = arFormat[sIndex-1];
  194. document.forms['form1'].elements['LANG_' + lang + '[DEC_POINT]'].value = arPoint[sIndex-1];
  195. for (i = 0; i < document.forms['form1'].elements['LANG_' + lang + '[THOUSANDS_VARIANT]'].options.length; i++)
  196. {
  197. if (document.forms['form1'].elements['LANG_' + lang + '[THOUSANDS_VARIANT]'].options[i].value === arThousand[sIndex-1])
  198. {
  199. document.forms['form1'].elements['LANG_' + lang + '[THOUSANDS_VARIANT]'].selectedIndex = i;
  200. setThousandsVariant(lang);
  201. break;
  202. }
  203. }
  204. document.forms['form1'].elements['LANG_' + lang + '[DECIMALS]'].value = arDecimals[sIndex-1];
  205. }
  206. }
  207. function setThousandsVariant(lang)
  208. {
  209. var value = document.forms['form1'].elements['LANG_' + lang + '[THOUSANDS_VARIANT]'].value;
  210. document.forms['form1'].elements['LANG_' + lang + '[THOUSANDS_SEP]'].disabled = (value.length > 0);
  211. }
  212. </script>
  213. <form method="post" action="<?$APPLICATION->GetCurPage()?>" name="form1">
  214. <? echo bitrix_sessid_post(); ?>
  215. <?echo GetFilterHiddens("filter_");?>
  216. <input type="hidden" name="ID" value="<?=htmlspecialcharsbx($ID); ?>">
  217. <input type="hidden" name="Update" value="Y">
  218. <input type="hidden" name="from" value="<?echo htmlspecialcharsbx($from)?>">
  219. <input type="hidden" name="BASE" value="<?echo htmlspecialcharsbx($currency['BASE']); ?>">
  220. <?
  221. if (isset($return_url) && $return_url != '')
  222. {
  223. ?><input type="hidden" name="return_url" value="<?=htmlspecialcharsbx($return_url)?>"><?
  224. }
  225. $tabControl->Begin();?>
  226. <?$tabControl->BeginNextTab();?>
  227. <tr class="adm-detail-required-field">
  228. <td width="40%"><?echo GetMessage("currency_curr")?>:</td>
  229. <td width="60%">
  230. <?if (!$ID):?>
  231. <input type="text" value="<?echo htmlspecialcharsbx($currency['CURRENCY']);?>" size="3" name="CURRENCY" maxlength="3">
  232. <?else:?>
  233. <?=htmlspecialcharsbx($ID); ?>
  234. <? endif?>
  235. </td>
  236. </tr>
  237. <tr class="adm-detail-required-field">
  238. <td width="40%"><? echo GetMessage("currency_base"); ?>:</td>
  239. <td width="60%"><? echo ($currency['BASE'] == 'Y' ? GetMessage('BASE_CURRENCY_YES') : GetMessage('BASE_CURRENCY_NO')); ?></td>
  240. </tr>
  241. <tr class="adm-detail-required-field">
  242. <td width="40%"><?echo GetMessage("currency_rate_cnt")?>: <span class="required" style="vertical-align: super; font-size: smaller;">1</span></td>
  243. <td width="60%">
  244. <input type="text" size="10" name="AMOUNT_CNT" value="<?=(int)$currency['AMOUNT_CNT']; ?>"<? echo ($currency['BASE'] == 'Y' ? ' disabled' : ''); ?>>
  245. </td>
  246. </tr>
  247. <tr class="adm-detail-required-field">
  248. <td width="40%"><?echo GetMessage("currency_rate")?>: <span class="required" style="vertical-align: super; font-size: smaller;">1</span></td>
  249. <td width="60%">
  250. <input type="text" size="20" name="AMOUNT" value="<?=htmlspecialcharsbx($currency['AMOUNT'])?>" maxlength="20"<? echo ($currency['BASE'] == 'Y' ? ' disabled' : ''); ?>>
  251. </td>
  252. </tr>
  253. <tr>
  254. <td width="40%"><?echo GetMessage("currency_numcode")?>:</td>
  255. <td width="60%">
  256. <input type="text" size="3" name="NUMCODE" value="<?echo htmlspecialcharsbx($currency['NUMCODE']); ?>" maxlength="3">
  257. </td>
  258. </tr>
  259. <tr>
  260. <td width="40%"><?echo GetMessage("currency_sort_ex")?>:</td>
  261. <td width="60%">
  262. <input type="text" size="10" name="SORT" value="<?echo (int)$currency['SORT']; ?>" maxlength="10">
  263. </td>
  264. </tr>
  265. <?$tabControl->BeginNextTab();
  266. foreach ($currencyLangs as $languageId => $settings)
  267. {
  268. $fieldPrefix = 'LANG_'.htmlspecialcharsbx($languageId);
  269. $scriptLanguageId = CUtil::JSEscape(htmlspecialcharsbx($languageId));
  270. ?><tr class="heading"><td colspan="2"><?=htmlspecialcharsbx($langList[$languageId]); ?></td></tr>
  271. <tr>
  272. <td width="40%"><?echo GetMessage("CURRENCY_FULL_NAME")?>:</td>
  273. <td width="60%"><input title="<?=htmlspecialcharsbx(GetMessage("CURRENCY_FULL_NAME_DESC")); ?>" type="text" maxlength="50" size="15" name="<?=$fieldPrefix; ?>[FULL_NAME]" value="<?=htmlspecialcharsbx($settings['FULL_NAME']);?>"></td>
  274. </tr>
  275. <tr>
  276. <td width="40%"><?echo GetMessage("CURRENCY_FORMAT_TEMPLATE")?>:</td>
  277. <td width="60%">
  278. <select name="format_<?=htmlspecialcharsbx($languageId); ?>" onchange="setTemplate('<?=$scriptLanguageId; ?>')">
  279. <option value="">-<?=htmlspecialcharsbx(GetMessage("CURRENCY_SELECT_TEMPLATE")); ?>-</option>
  280. <?foreach ($arTemplates as $key => $ar):?>
  281. <option value="<?=htmlspecialcharsbx($key); ?>"><?=htmlspecialcharsbx($ar["TEXT"]); ?></option>
  282. <?endforeach?>
  283. </select>
  284. </td>
  285. </tr>
  286. <tr class="adm-detail-required-field">
  287. <td width="40%"><?echo GetMessage("CURRENCY_FORMAT_DESC")?>:</td>
  288. <td width="60%"><input title="<?=htmlspecialcharsbx(GetMessage("CURRENCY_FORMAT_DESC")); ?>" type="text" maxlength="50" size="10" name="<?=$fieldPrefix; ?>[FORMAT_STRING]" value="<?=htmlspecialcharsbx($settings['FORMAT_STRING']); ?>"></td>
  289. </tr>
  290. <tr>
  291. <td width="40%"><?echo GetMessage("CURRENCY_DEC_POINT_DESC")?>:</td>
  292. <td width="60%"><input title="<?=htmlspecialcharsbx(GetMessage("CURRENCY_DEC_POINT_DESC")); ?>" type="text" maxlength="16" size="10" name="<?=$fieldPrefix; ?>[DEC_POINT]" value="<?=htmlspecialcharsbx($settings['DEC_POINT']); ?>"></td>
  293. </tr>
  294. <tr>
  295. <td width="40%"><?echo GetMessage("THOU_SEP_DESC")?>:</td>
  296. <td width="60%">
  297. <select name="<?=$fieldPrefix; ?>[THOUSANDS_VARIANT]" onchange="setThousandsVariant('<?=$scriptLanguageId; ?>')">
  298. <?
  299. foreach ($separatorList as $separatorID => $separatorTitle)
  300. {
  301. ?><option value="<?=htmlspecialcharsbx($separatorID); ?>"<?
  302. echo ($settings['THOUSANDS_VARIANT'] == $separatorID
  303. ? ' selected' : '');?>><?=htmlspecialcharsbx($separatorTitle); ?></option><?
  304. }
  305. unset($separatorID, $separatorTitle);
  306. ?>
  307. <option value=""<? echo ($settings['THOUSANDS_VARIANT'] == '' && $settings['THOUSANDS_SEP'] != '' ? ' selected' : '');?>><?=htmlspecialcharsbx(GetMessage("CURRENCY_THOUSANDS_VARIANT_O")); ?></option>
  308. </select>
  309. <input title="<?=htmlspecialcharsbx(GetMessage("THOU_SEP_DESC")); ?>" type="text" maxlength="16" size="10" name="<?=$fieldPrefix; ?>[THOUSANDS_SEP]" value="<?=htmlspecialcharsbx($settings['THOUSANDS_SEP']);?>">
  310. </td>
  311. </tr>
  312. <tr>
  313. <td width="40%"><?echo GetMessage("DECIMALS_DESC")?>: <span class="required" style="vertical-align: super; font-size: smaller;">2</span></td>
  314. <td width="60%"><input title="<?=htmlspecialcharsbx(GetMessage("DECIMALS_DESC")); ?>" type="text" maxlength="5" size="5" name="<?=$fieldPrefix; ?>[DECIMALS]" value="<?=htmlspecialcharsbx($settings['DECIMALS']);?>"></td>
  315. </tr>
  316. <tr>
  317. <td width="40%"><? echo GetMessage('HIDE_ZERO_DECIMALS'); ?>: <span class="required" style="vertical-align: super; font-size: smaller;">3</span></td>
  318. <td width="60%">
  319. <input type="hidden" name="<?=$fieldPrefix; ?>[HIDE_ZERO]" value="N">
  320. <input type="checkbox" name="<?=$fieldPrefix; ?>[HIDE_ZERO]" value="Y" <? echo ($settings['HIDE_ZERO'] == 'Y' ? 'checked' : ''); ?>>
  321. </td>
  322. </tr>
  323. <?
  324. unset($scriptLanguageId, $fieldPrefix);
  325. }
  326. $tabControl->EndTab();
  327. $tabControl->Buttons(array("disabled" => $CURRENCY_RIGHT < "W", "back_url" =>"/bitrix/admin/currencies.php?lang=".LANGUAGE_ID));
  328. $tabControl->End();?>
  329. </form>
  330. <?
  331. echo BeginNote();
  332. echo GetMessage('CURRENCY_CODES_ISO_STANDART', array('#ISO_LINK#' => CURRENCY_ISO_STANDART_URL));
  333. ?><br><br>
  334. <span class="required" style="vertical-align: super; font-size: smaller;">1</span> - <?
  335. echo GetMessage('BX_CURRENCY_EDIT_MESS_AMOUNT');
  336. ?><br><br>
  337. <span class="required" style="vertical-align: super; font-size: smaller;">2</span> - <?
  338. echo GetMessage('DECIMALS_COMMENTS');
  339. ?><br><br>
  340. <span class="required" style="vertical-align: super; font-size: smaller;">3</span> - <?
  341. echo GetMessage('HIDE_ZERO_DECIMALS_DESCR_EXT');
  342. echo EndNote();
  343. ?>
  344. <script type="text/javascript">
  345. BX.ready(function(){
  346. <?
  347. foreach ($langID as $index)
  348. {
  349. ?>setThousandsVariant('<?=CUtil::JSEscape(htmlspecialcharsbx($index)); ?>');
  350. <?
  351. }
  352. unset($index);
  353. ?>
  354. });
  355. </script>
  356. <?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php");