use Bitrix\Main\Loader;
use Bitrix\Main\Web\Json;
use Bitrix\Main\Localization\Loc;
use Bitrix\Main\Localization\LanguageTable;
use Bitrix\Currency\CurrencyManager;
use Bitrix\Currency\CurrencyClassifier;
use Bitrix\Main\Text\HtmlFilter;
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php");
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/currency/prolog.php");
$currencyRights = $APPLICATION->GetGroupRight("currency");
if ($currencyRights == "D")
$APPLICATION->AuthForm(Loc::getMessage("ACCESS_DENIED"));
Loader::includeModule('currency');
Loc::loadMessages(__FILE__);
$APPLICATION->SetTitle(Loc::getMessage('ADMIN_CURRENCY_CLASSIFIER_FORM_TITLE'));
$tabs = array(
array(
"DIV" => "classifier_tab_1",
"TAB" => Loc::getMessage('ADMIN_CURRENCY_CLASSIFIER_FORM_TAB_SEARCH_AND_SETTINGS'),
"ICON"=>"",
"TITLE"=> Loc::getMessage('ADMIN_CURRENCY_CLASSIFIER_FORM_TAB_SEARCH_AND_SETTINGS_TITLE')
),
array(
"DIV" => "classifier_tab_2",
"TAB" => Loc::getMessage('ADMIN_CURRENCY_CLASSIFIER_FORM_TAB_LANGUAGE_SETTINGS'),
"ICON"=>"",
"TITLE"=> Loc::getMessage('ADMIN_CURRENCY_CLASSIFIER_FORM_TAB_LANGUAGE_SETTINGS_TITLE')
),
);
$aContext = array(
array(
"ICON" => "btn_list",
"TEXT" => Loc::getMessage('MAIN_ADMIN_MENU_LIST'),
"LINK" => "currencies.php?lang=".LANGUAGE_ID,
"TITLE" => Loc::getMessage('MAIN_ADMIN_MENU_LIST')
),
);
$tabControl = new CAdminTabControl("tabControl", $tabs);
$adminContext = new CAdminContextMenu($aContext);
$errorMessage = array();
$languages = array();
$languageIdList = array();
$languageList = LanguageTable::getList();
while ($language = $languageList->fetch())
{
$languageId = $language['LID'];
$languageIdList[] = $languageId;
$languages[$languageId] = $language['NAME'];
}
$classifier = CurrencyClassifier::get($languageIdList, LANGUAGE_ID);
$baseCurrencyId = CurrencyManager::getBaseCurrency();
$currentElement = current($classifier);
$lastValues = array(
'NEEDLE' => '',
'SELECTED_INDEX' => $currentElement['SYM_CODE'],
'NOMINAL' => 1,
'EXCHANGE_RATE' => '',
'SORT_INDEX' => 100
);
if ($_SERVER['REQUEST_METHOD'] == 'POST' && $currencyRights == "W" && (!empty($_POST['save']) || !empty($_POST['apply'])) && check_bitrix_sessid())
{
$needle = $_POST['admin_classifier_currency_needle'];
$selectedIndex = $_POST['sym_code'];
$nominal = $_POST['nominal'];
$exchangeRate = str_replace(',', '.', $_POST['exchange_rate']);
$sortIndex = $_POST['sort_index'];
$maxIntValue = 2147483647;
if (!preg_match('/^[1-9][0-9]{0,10}$/', $nominal) || ($nominal > $maxIntValue))
$errorMessage[] = Loc::getMessage('ADMIN_CURRENCY_CLASSIFIER_FIELDS_NOMINAL_ERROR');
if (!preg_match('/^[0-9]{0,14}[\.]{0,1}[0-9]{0,4}$/', $exchangeRate) ||
($exchangeRate <= 0) ||
($exchangeRate > 99999999999999))
{
$errorMessage[] = Loc::getMessage('ADMIN_CURRENCY_CLASSIFIER_FIELDS_EXCHANGE_RATE_ERROR');
}
if (!preg_match('/^[1-9][0-9]{0,10}$/', $sortIndex) || ($sortIndex > $maxIntValue))
$errorMessage[] = Loc::getMessage('ADMIN_CURRENCY_CLASSIFIER_FIELDS_SORT_INDEX_ERROR');
if (!empty($errorMessage))
{
$lastValues['NEEDLE'] = $needle;
$lastValues['SELECTED_INDEX'] = $selectedIndex;
$lastValues['NOMINAL'] = $nominal;
$lastValues['EXCHANGE_RATE'] = $exchangeRate;
$lastValues['SORT_INDEX'] = $sortIndex;
}
else
{
$currencyData = $classifier[$selectedIndex];
$fields = array();
$fields['NUMCODE'] = $currencyData['NUM_CODE'];
$fields['AMOUNT_CNT'] = $nominal;
$fields['AMOUNT'] = $exchangeRate;
$fields['SORT'] = $sortIndex;
$currencyId = $currencyData['SYM_CODE'];
if ($currencyId == $baseCurrencyId)
{
$fields['AMOUNT_CNT'] = 1;
$fields['AMOUNT'] = 1;
}
foreach ($languageIdList as $languageId)
{
$locFields = $currencyData[mb_strtoupper($languageId)];
$locFields['CURRENCY'] = $currencyId;
$locFields['HIDE_ZERO'] = $_POST['hide_zero_' . $languageId] ? 'Y' : 'N';
$locFields['FORMAT_STRING'] = str_replace('#VALUE#', '#', $locFields['FORMAT_STRING']);
$fields['LANG'][$languageId] = $locFields;
}
$DB->StartTransaction();
$fields['CURRENCY'] = $currencyId;
$currencyId = CCurrency::Add($fields);
$result = is_string($currencyId) && ($currencyId !== '');
if (!$result)
{
$exception = $APPLICATION->GetException();
$errorMessage[] = ($exception) ? $exception->GetString() : Loc::getMessage('ADMIN_CURRENCY_CLASSIFIER_UNKNOWN_ERROR_ADD');
}
if (!$result)
{
$DB->Rollback();
$lastValues['NEEDLE'] = $needle;
$lastValues['SELECTED_INDEX'] = $selectedIndex;
$lastValues['NOMINAL'] = $nominal;
$lastValues['EXCHANGE_RATE'] = $exchangeRate;
$lastValues['SORT_INDEX'] = $sortIndex;
}
else
{
$DB->Commit();
if ($_POST['apply'])
LocalRedirect('/bitrix/admin/currency_edit.php?ID=' . $currencyId . '&lang=' . LANGUAGE_ID . '&' . $tabControl->ActiveTabParam());
else
LocalRedirect('/bitrix/admin/currencies.php?lang=' . LANGUAGE_ID);
}
}
}
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php");
$adminContext->Show();
if (!empty($errorMessage))
CAdminMessage::ShowMessage(implode('
', $errorMessage));
?>