112 $managedCache = Application::getInstance()->getManagedCache();
115 $cacheId = self::CACHE_CURRENCY_SHORT_LIST_ID.LANGUAGE_ID;
117 if ($managedCache->read($cacheTime, $cacheId, $currencyTableName))
119 $currencyList = $managedCache->get($cacheId);
127 'FULL_NAME' =>
'CURRENT_LANG_FORMAT.FULL_NAME',
135 while (
$currency = $currencyIterator->fetch())
143 $managedCache->set($cacheId, $currencyList);
146 return $currencyList;
157 $managedCache = Application::getInstance()->getManagedCache();
160 $cacheId = self::CACHE_CURRENCY_SYMBOL_LIST_ID.LANGUAGE_ID;
162 if ($managedCache->read($cacheTime, $cacheId, $currencyTableName))
164 $currencyList = $managedCache->get($cacheId);
168 $sanitizer = new \CBXSanitizer();
170 $sanitizer->ApplyDoubleEncode(
false);
176 'FORMAT_STRING' =>
'CURRENT_LANG_FORMAT.FORMAT_STRING',
184 while (
$currency = $currencyIterator->fetch())
191 if (is_string($symbol))
193 $symbol = trim($symbol);
196 $showValue = $symbol;
200 $currencyList[
$currency[
'CURRENCY']] = $sanitizer->SanitizeHtml($showValue);
203 $managedCache->set($cacheId, $currencyList);
206 return $currencyList;
217 $managedCache = Application::getInstance()->getManagedCache();
220 $cacheId = self::CACHE_CURRENCY_NAME_LIST_ID.LANGUAGE_ID;
222 if ($managedCache->read($cacheTime, $cacheId, $currencyTableName))
224 $currencyList = $managedCache->get($cacheId);
232 'FULL_NAME' =>
'CURRENT_LANG_FORMAT.FULL_NAME',
240 while (
$currency = $currencyIterator->fetch())
242 $fullName = (string)
$currency[
'FULL_NAME'];
243 if ($fullName ===
'')
248 $currencyList[
$currency[
'CURRENCY']] = $fullName;
251 $managedCache->set($cacheId, $currencyList);
254 return $currencyList;
282 $installedCurrencies = Option::get(
'currency',
'installed_currencies');
283 if ($installedCurrencies ===
'')
298 'cache' => [
'ttl' => 86400],
303 $languageID = (string)
$site[
'LANGUAGE_ID'];
307 if ($languageID ===
'')
312 if (!$bitrix24 && $languageID ===
'ru')
315 $languageIterator = LanguageTable::getList([
328 while ($language = $languageIterator->fetch())
330 $languageList[$language[
'ID']] = $language[
'ID'];
332 unset($language, $languageIterator);
333 if (isset($languageList[
'kz']))
337 elseif (isset($languageList[
'by']))
341 elseif (isset($languageList[
'ua']))
345 unset($languageList);
400 Option::set(
'currency',
'installed_currencies', implode(
',', $currencyList),
'');
402 return $currencyList;
406 return explode(
',', $installedCurrencies);
418 $language = static::checkLanguage($language);
421 $managedCache = Application::getInstance()->getManagedCache();
422 $managedCache->clean(self::CACHE_CURRENCY_LIST_ID, $currencyTableName);
423 if (empty($language))
425 $languageIterator = LanguageTable::getList([
428 while ($oneLanguage = $languageIterator->fetch())
430 $managedCache->clean(self::CACHE_CURRENCY_LIST_ID.
'_'.$oneLanguage[
'ID'], $currencyTableName);
431 $managedCache->clean(self::CACHE_CURRENCY_SHORT_LIST_ID.$oneLanguage[
'ID'], $currencyTableName);
432 $managedCache->clean(self::CACHE_CURRENCY_SYMBOL_LIST_ID.$oneLanguage[
'ID'], $currencyTableName);
433 $managedCache->clean(self::CACHE_CURRENCY_NAME_LIST_ID.$oneLanguage[
'ID'], $currencyTableName);
435 unset($oneLanguage, $languageIterator);
439 $managedCache->clean(self::CACHE_CURRENCY_LIST_ID.
'_'.$language, $currencyTableName);
440 $managedCache->clean(self::CACHE_CURRENCY_SHORT_LIST_ID.$language, $currencyTableName);
441 $managedCache->clean(self::CACHE_CURRENCY_SYMBOL_LIST_ID.$language, $currencyTableName);
442 $managedCache->clean(self::CACHE_CURRENCY_NAME_LIST_ID.$language, $currencyTableName);
444 $managedCache->clean(self::CACHE_BASE_CURRENCY_ID, $currencyTableName);
447 global $stackCacheManager;
448 $stackCacheManager->clear(
'currency_rate');
449 $stackCacheManager->clear(
'currency_currency_lang');
499 'filter' => ($updateCurrency ==
'' ? [] : [
'=CURRENCY' => $updateCurrency])
501 while ($existCurrency = $currencyIterator->fetch())
503 $baseRate = ($existCurrency[
'CURRENCY'] !=
$currency
504 ? \CCurrencyRates::getConvertFactorEx($existCurrency[
'CURRENCY'],
$currency)
508 if ($updateResult->isSuccess())
512 self::EVENT_ON_AFTER_UPDATE_BASE_RATE,
514 'OLD_BASE_RATE' => (
float)$existCurrency[
'CURRENT_BASE_RATE'],
515 'CURRENT_BASE_RATE' => $baseRate,
517 'CURRENCY' => $existCurrency[
'CURRENCY'],
522 unset($updateResult);
525 unset($existCurrency, $currencyIterator);
544 self::EVENT_ON_UPDATE_BASE_CURRENCY,
553 $helper = $conn->getSqlHelper();
555 $userID = (isset(
$USER) &&
$USER instanceof \CUser ? (int)
$USER->getID() : 0);
558 $baseField = $helper->quote(
'BASE');
559 $dateUpdateField = $helper->quote(
'DATE_UPDATE');
560 $modifiedByField = $helper->quote(
'MODIFIED_BY');
561 $amountField = $helper->quote(
'AMOUNT');
562 $amountCntField = $helper->quote(
'AMOUNT_CNT');
563 $currencyField = $helper->quote(
'CURRENCY');
564 $query =
'update '.$tableName.
' set '.$baseField.
' = \'N\', '.
565 $dateUpdateField.
' = '.$helper->getCurrentDateTimeFunction().
', '.
566 $modifiedByField.
' = '.($userID == 0 ?
'NULL' : $userID).
567 ' where '.$currencyField.
' <> \''.$helper->forSql(
$currency).
'\' and
'.$baseField.' = \
'Y\'';
568 $conn->queryExecute(
$query);
569 $query =
'update '.$tableName.
' set '.$baseField.
' = \'Y\', '.
570 $dateUpdateField.
' = '.$helper->getCurrentDateTimeFunction().
', '.
571 $modifiedByField.
' = '.($userID == 0 ?
'NULL' : $userID).
', '.
572 $amountField.
' = 1, '.$amountCntField.
' = 1 where '.$currencyField.
' = \''.$helper->forSql(
$currency).
'\'';
573 $conn->queryExecute(
$query);
575 static::updateBaseRates();
579 self::EVENT_ON_AFTER_UPDATE_BASE_CURRENCY,
586 self::$baseCurrency =
null;