/** * <p>Функция изменяет параметры валюты <b>currency</b> на параметры, указанные в массиве <i>arFields</i>. Языкозависимые параметры (название, формат и прочее) обновляются отдельно, через класс <a href="http://dev.1c-bitrix.ru/api_help/currency/developer/ccurrencylang/ccurrencylang__update.8a1e7a7b.php">CCurrencyLang</a></p> <p>Сбрасывает кеш <b>currency_currency_list</b> и <b>currency_base_currency</b> в случае успешного обновления (только если произошел запрос к базе). Так же сбросит тегированный кеш <b>currency_id_КОД_ВАЛЮТЫ</b>.</p> * * * * * @param string $currency Код валюты, параметры которой нужно изменить. * * * * @param array $arFields Массив новых параметров валюты. <ul> <li>CURRENCY - трехсимвольный код * валюты (обязательный). Должно совпадать с кодом <b>currency</b> * изменяемой валюты;</li> <li>AMOUNT_CNT - количество единиц валюты * по-умолчанию, которое участвует в задании курса валюты (например, * если 10 Датских крон стоят 48.7 рублей, то 10 - это количество * единиц);</li> <li>AMOUNT - курс валюты по-умолчанию (одна из валют сайта * должна иметь курс 1, она называется базовой, остальные валюты * имеют курс относительно базовой валюты);</li> <li>SORT - порядок * сортировки;</li> <p>Если в массиве нет ни одного из полей, то * обращения к базе данных не будет, но вернет код валюты.</p> </ul> * * * * @return bool <p>Код валюты, параметры которой изменили, или <i>false</i> в случае * ошибки (текст получается через <code>$APPLICATION->GetException()</code>).</p><br><br> * * @static * @link http://dev.1c-bitrix.ru/api_help/currency/developer/ccurrency/ccurrency__update.16586d51.php * @author Bitrix */ public static function Update($currency, $arFields) { global $DB; global $CACHE_MANAGER; if (!CCurrency::CheckFields('UPDATE', $arFields, $currency)) return false; $strCurrencyID = substr($currency, 0, 3); if (is_set($arFields, 'CURRENCY')) unset($arFields['CURRENCY']); $strUpdate = $DB->PrepareUpdate("b_catalog_currency", $arFields); if (!empty($strUpdate)) { $strSql = "UPDATE b_catalog_currency SET ".$strUpdate.", DATE_UPDATE = ".$DB->GetNowFunction()." WHERE CURRENCY = '".$DB->ForSql($strCurrencyID)."' "; $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__); $CACHE_MANAGER->Clean("currency_base_currency"); $CACHE_MANAGER->Clean("currency_currency_list"); $rsLangs = CLanguage::GetList(($by="lid"), ($order="asc")); while ($arLang = $rsLangs->Fetch()) { $CACHE_MANAGER->Clean("currency_currency_list_".$arLang['LID']); } if (defined("BX_COMP_MANAGED_CACHE")) $CACHE_MANAGER->ClearByTag("currency_id_".$strCurrencyID); } return $strCurrencyID; }
public static function Update($currency, $arFields) { global $DB; foreach (GetModuleEvents("currency", "OnBeforeCurrencyUpdate", true) as $arEvent) { if (ExecuteModuleEventEx($arEvent, array($currency, &$arFields)) === false) { return false; } } $currency = Currency\CurrencyManager::checkCurrencyID($currency); if (!CCurrency::CheckFields('UPDATE', $arFields, $currency)) { return false; } $strUpdate = $DB->PrepareUpdate("b_catalog_currency", $arFields); if (!empty($strUpdate)) { $strSql = "update b_catalog_currency set " . $strUpdate . " where CURRENCY = '" . $DB->ForSql($currency) . "'"; $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); Currency\CurrencyManager::updateBaseRates($currency); Currency\CurrencyManager::clearTagCache($currency); if (isset(self::$currencyCache[$currency])) { unset(self::$currencyCache[$currency]); } } if (isset($arFields['LANG'])) { foreach ($arFields['LANG'] as $lang => $settings) { if ($settings['IS_EXIST'] == 'N') { CCurrencyLang::Add($settings); } else { CCurrencyLang::Update($currency, $lang, $settings); } } unset($settings, $lang); } if (!empty($strUpdate) || isset($arFields['LANG'])) { Currency\CurrencyManager::clearCurrencyCache(); } foreach (GetModuleEvents("currency", "OnCurrencyUpdate", true) as $arEvent) { ExecuteModuleEventEx($arEvent, array($currency, $arFields)); } return $currency; }
$db_result_lang = CLangAdmin::GetList($by = "sort", $order = "asc"); $iCount = 0; while ($db_result_lang_array = $db_result_lang->Fetch()) { $arLangsLID[$iCount] = $db_result_lang_array["LID"]; $arLangNamesLID[$iCount] = htmlspecialcharsbx($db_result_lang_array["NAME"]); $iCount++; } $aTabs = array(array("DIV" => "edit1", "TAB" => GetMessage("currency_curr"), "ICON" => "main_user_edit", "TITLE" => GetMessage("currency_curr_settings"))); $tabControl = new CAdminTabControl("tabControl", $aTabs); if ($_SERVER["REQUEST_METHOD"] == "POST" && $CURRENCY_RIGHT == "W" && strlen($Update) > 0 && check_bitrix_sessid()) { $arFields = array("AMOUNT" => $_POST['AMOUNT'], "AMOUNT_CNT" => $_POST['AMOUNT_CNT'], "SORT" => $_POST['SORT']); if (isset($_POST['CURRENCY'])) { $arFields["CURRENCY"] = $_POST['CURRENCY']; } $strAction = $ID ? 'UPDATE' : 'ADD'; $bVarsFromForm = !CCurrency::CheckFields($strAction, $arFields, $ID); if (!$bVarsFromForm) { $arMsg = array(); for ($i = 0; $i < $iCount; $i++) { if (!isset(${"FORMAT_STRING_" . $arLangsLID[$i]}) || strlen(${"FORMAT_STRING_" . $arLangsLID[$i]}) <= 0) { $arMsg[] = array("id" => "FORMAT_STRING_" . $arLangsLID[$i], "text" => GetMessage("currency_format_string", array("#LANG#" => $arLangNamesLID[$i]))); continue; } } if (!empty($arMsg)) { $bVarsFromForm = true; $e = new CAdminException($arMsg); $APPLICATION->ThrowException($e); $e = $APPLICATION->GetException(); $message = new CAdminMessage(GetMessage("currency_error"), $e); } else {