Example #1
0
	/**
	 * <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-&gt;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;
	}
Example #2
0
 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 {