2 namespace Bitrix\Currency;
40 $currency = (string)$currency;
41 return ($currency ===
'' || mb_strlen($currency) > 3 ? false : $currency);
52 $language = (string)$language;
53 return ($language ===
'' || mb_strlen($language) > 2 ? false : $language);
63 if (self::$baseCurrency ===
'')
66 $skipCache = (defined(
'CURRENCY_SKIP_CACHE') && CURRENCY_SKIP_CACHE);
67 $currencyFound =
false;
68 $currencyFromCache =
false;
71 $cacheTime = (int)(defined(
'CURRENCY_CACHE_TIME') ? CURRENCY_CACHE_TIME : CURRENCY_CACHE_DEFAULT_TIME);
74 if ($currencyFromCache)
76 $currencyFound =
true;
77 self::$baseCurrency = (string)$managedCache->get(self::CACHE_BASE_CURRENCY_ID);
80 if ($skipCache || !$currencyFound)
82 $currencyIterator = CurrencyTable::getList(array(
83 'select' => array(
'CURRENCY'),
84 'filter' => array(
'=BASE' =>
'Y',
'=AMOUNT' => 1)
86 if ($currency = $currencyIterator->fetch())
88 $currencyFound =
true;
89 self::$baseCurrency = $currency[
'CURRENCY'];
91 unset($currency, $currencyIterator);
93 if (!$skipCache && $currencyFound && !$currencyFromCache)
95 $managedCache->set(self::CACHE_BASE_CURRENCY_ID, self::$baseCurrency);
112 $cacheTime = (int)(defined(
'CURRENCY_CACHE_TIME') ? CURRENCY_CACHE_TIME : CURRENCY_CACHE_DEFAULT_TIME);
113 $cacheId = self::CACHE_CURRENCY_SHORT_LIST_ID.LANGUAGE_ID;
115 if ($managedCache->read($cacheTime, $cacheId, $currencyTableName))
117 $currencyList = $managedCache->get($cacheId);
121 $currencyList = array();
122 $currencyIterator = CurrencyTable::getList(array(
123 'select' => array(
'CURRENCY',
'FULL_NAME' =>
'CURRENT_LANG_FORMAT.FULL_NAME',
'SORT'),
124 'order' => array(
'SORT' =>
'ASC',
'CURRENCY' =>
'ASC')
126 while ($currency = $currencyIterator->fetch())
128 $currency[
'FULL_NAME'] = (string)$currency[
'FULL_NAME'];
129 $currencyList[$currency[
'CURRENCY']] = $currency[
'CURRENCY'].($currency[
'FULL_NAME'] !=
'' ?
' ('.$currency[
'FULL_NAME'].
')' :
'');
131 unset($currency, $currencyIterator);
132 $managedCache->set($cacheId, $currencyList);
134 return $currencyList;
148 $cacheTime = defined(
'CURRENCY_CACHE_TIME') ? (int)CURRENCY_CACHE_TIME : CURRENCY_CACHE_DEFAULT_TIME;
149 $cacheId = self::CACHE_CURRENCY_SYMBOL_LIST_ID.LANGUAGE_ID;
151 if ($managedCache->read($cacheTime, $cacheId, $currencyTableName))
153 $currencyList = $managedCache->get($cacheId);
158 $currencyIterator = CurrencyTable::getList([
161 'FORMAT_STRING' =>
'CURRENT_LANG_FORMAT.FORMAT_STRING',
169 while ($currency = $currencyIterator->fetch())
171 $currencyFormat = (string)$currency[
'FORMAT_STRING'];
173 if ($currencyFormat !==
'')
175 $symbol = \CCurrencyLang::applyTemplate(
'', $currencyFormat);
176 if (is_string($symbol))
178 $symbol = trim($symbol);
181 $currencyList[$currency[
'CURRENCY']] = $symbol;
187 $managedCache->set($cacheId, $currencyList);
190 return $currencyList;
204 $cacheTime = defined(
'CURRENCY_CACHE_TIME') ? (int)CURRENCY_CACHE_TIME : CURRENCY_CACHE_DEFAULT_TIME;
205 $cacheId = self::CACHE_CURRENCY_NAME_LIST_ID.LANGUAGE_ID;
207 if ($managedCache->read($cacheTime, $cacheId, $currencyTableName))
209 $currencyList = $managedCache->get($cacheId);
214 $currencyIterator = CurrencyTable::getList([
217 'FULL_NAME' =>
'CURRENT_LANG_FORMAT.FULL_NAME',
225 while ($currency = $currencyIterator->fetch())
227 $fullName = (string)$currency[
'FULL_NAME'];
228 if ($fullName ===
'')
230 $fullName = $currency[
'CURRENCY'];
233 $currencyList[$currency[
'CURRENCY']] = $fullName;
236 $managedCache->set($cacheId, $currencyList);
239 return $currencyList;
250 $currency = static::checkCurrencyID($currency);
251 if ($currency ===
false)
253 $currencyList = static::getCurrencyList();
254 return isset($currencyList[$currency]);
264 $installedCurrencies = (string)
Option::get(
'currency',
'installed_currencies');
265 if ($installedCurrencies ===
'')
271 'select' => array(
'LID',
'LANGUAGE_ID'),
272 'filter' => array(
'=DEF' =>
'Y',
'=ACTIVE' =>
'Y')
274 if ($site = $siteIterator->fetch())
275 $languageID = (string)$site[
'LANGUAGE_ID'];
276 unset($site, $siteIterator);
278 if ($languageID ==
'')
281 if (!$bitrix24 && $languageID ==
'ru')
283 $languageList = array();
285 'select' => array(
'ID'),
286 'filter' => array(
'@ID' => array(
'kz',
'by',
'ua'),
'=ACTIVE' =>
'Y')
288 while ($language = $languageIterator->fetch())
289 $languageList[$language[
'ID']] = $language[
'ID'];
290 unset($language, $languageIterator);
291 if (isset($languageList[
'kz']))
293 elseif (isset($languageList[
'by']))
295 elseif (isset($languageList[
'ua']))
297 unset($languageList);
304 $currencyList = array(
'BYN',
'RUB',
'USD',
'EUR');
307 $currencyList = array(
'UAH',
'RUB',
'USD',
'EUR');
310 $currencyList = array(
'KZT',
'RUB',
'USD',
'EUR');
313 $currencyList = array(
'RUB',
'USD',
'EUR',
'UAH',
'BYN');
321 $currencyList = array(
'USD',
'EUR',
'CNY',
'BRL',
'INR');
325 Option::set(
'currency',
'installed_currencies', implode(
',', $currencyList),
'');
326 return $currencyList;
330 return explode(
',', $installedCurrencies);
342 $language = static::checkLanguage($language);
346 $managedCache->clean(self::CACHE_CURRENCY_LIST_ID, $currencyTableName);
347 if (empty($language))
350 'select' => array(
'ID')
352 while ($oneLanguage = $languageIterator->fetch())
354 $managedCache->clean(self::CACHE_CURRENCY_LIST_ID.
'_'.$oneLanguage[
'ID'], $currencyTableName);
355 $managedCache->clean(self::CACHE_CURRENCY_SHORT_LIST_ID.$oneLanguage[
'ID'], $currencyTableName);
356 $managedCache->clean(self::CACHE_CURRENCY_SYMBOL_LIST_ID.$oneLanguage[
'ID'], $currencyTableName);
357 $managedCache->clean(self::CACHE_CURRENCY_NAME_LIST_ID.$oneLanguage[
'ID'], $currencyTableName);
359 unset($oneLanguage, $languageIterator);
363 $managedCache->clean(self::CACHE_CURRENCY_LIST_ID.
'_'.$language, $currencyTableName);
364 $managedCache->clean(self::CACHE_CURRENCY_SHORT_LIST_ID.$language, $currencyTableName);
365 $managedCache->clean(self::CACHE_CURRENCY_SYMBOL_LIST_ID.$language, $currencyTableName);
366 $managedCache->clean(self::CACHE_CURRENCY_NAME_LIST_ID.$language, $currencyTableName);
368 $managedCache->clean(self::CACHE_BASE_CURRENCY_ID, $currencyTableName);
371 global $stackCacheManager;
372 $stackCacheManager->clear(
'currency_rate');
373 $stackCacheManager->clear(
'currency_currency_lang');
384 if (!defined(
'BX_COMP_MANAGED_CACHE'))
386 $currency = static::checkCurrencyID($currency);
387 if ($currency ===
false)
399 static::updateBaseRates();
400 return '\Bitrix\Currency\CurrencyManager::currencyBaseRateAgent();';
413 $currency = (string)static::getBaseCurrency();
414 if ($currency ===
'')
417 $currencyIterator = CurrencyTable::getList(array(
418 'select' => array(
'CURRENCY',
'CURRENT_BASE_RATE'),
419 'filter' => ($updateCurrency ==
'' ? array() : array(
'=CURRENCY' => $updateCurrency))
421 while ($existCurrency = $currencyIterator->fetch())
423 $baseRate = ($existCurrency[
'CURRENCY'] != $currency
424 ? \CCurrencyRates::getConvertFactorEx($existCurrency[
'CURRENCY'], $currency)
427 $updateResult = CurrencyTable::update($existCurrency[
'CURRENCY'], array(
'CURRENT_BASE_RATE' => $baseRate));
428 if ($updateResult->isSuccess())
432 self::EVENT_ON_AFTER_UPDATE_BASE_RATE,
434 'OLD_BASE_RATE' => (
float)$existCurrency[
'CURRENT_BASE_RATE'],
435 'CURRENT_BASE_RATE' => $baseRate,
436 'BASE_CURRENCY' => $currency,
437 'CURRENCY' => $existCurrency[
'CURRENCY']
442 unset($updateResult);
445 unset($existCurrency, $currencyIterator);
459 if ($currency ===
false)
464 self::EVENT_ON_UPDATE_BASE_CURRENCY,
466 'NEW_BASE_CURRENCY' => $currency
473 $helper = $conn->getSqlHelper();
475 $userID = (isset($USER) && $USER instanceof \CUser ? (int)$USER->getID() : 0);
478 $baseField = $helper->quote(
'BASE');
479 $dateUpdateField = $helper->quote(
'DATE_UPDATE');
480 $modifiedByField = $helper->quote(
'MODIFIED_BY');
481 $amountField = $helper->quote(
'AMOUNT');
482 $amountCntField = $helper->quote(
'AMOUNT_CNT');
483 $currencyField = $helper->quote(
'CURRENCY');
484 $query =
'update '.$tableName.
' set '.$baseField.
' = \'N\', '.
485 $dateUpdateField.
' = '.$helper->getCurrentDateTimeFunction().
', '.
486 $modifiedByField.
' = '.($userID == 0 ?
'NULL' : $userID).
487 ' where '.$currencyField.
' <> \''.$helper->forSql($currency).
'\' and
'.$baseField.' = \
'Y\'';
488 $conn->queryExecute($query);
489 $query =
'update '.$tableName.
' set '.$baseField.
' = \'Y\', '.
490 $dateUpdateField.
' = '.$helper->getCurrentDateTimeFunction().
', '.
491 $modifiedByField.
' = '.($userID == 0 ?
'NULL' : $userID).
', '.
492 $amountField.
' = 1, '.$amountCntField.
' = 1 where '.$currencyField.
' = \''.$helper->forSql($currency).
'\'';
493 $conn->queryExecute($query);
495 static::updateBaseRates();
499 self::EVENT_ON_AFTER_UPDATE_BASE_CURRENCY,
501 'NEW_BASE_CURRENCY' => $currency
506 self::$baseCurrency =
'';
const EVENT_ON_UPDATE_BASE_CURRENCY
static clearTagCache($currency)
Clear tag currency cache.
static clearCurrencyCache($language='')
Clear currency cache.
const EVENT_ON_AFTER_UPDATE_BASE_CURRENCY
static getCurrencyList()
Return currency short list.
static currencyBaseRateAgent()
Agent for update current currencies rates to base currency.
static updateBaseRates($updateCurrency='')
Update current currencies rates to base currency.
static isCurrencyExist($currency)
Verifying the existence of the currency by its code.
static getSymbolList()
Returns currency symbol list.
static updateBaseCurrency($currency)
Update base currency.
const EVENT_ON_AFTER_UPDATE_BASE_RATE
const CACHE_CURRENCY_SHORT_LIST_ID
const CACHE_CURRENCY_LIST_ID
const CACHE_CURRENCY_NAME_LIST_ID
const CACHE_BASE_CURRENCY_ID
static checkLanguage($language)
Check language id.
static getBaseCurrency()
Return base currency.
static getInstalledCurrencies()
Return currency list, create to install module.
static getNameList()
Returns currency name list.
const CACHE_CURRENCY_SYMBOL_LIST_ID
static checkCurrencyID($currency)
Check currency id.
static getTableName()
Returns DB table name for entity.
Base class for any application.
static getInstance()
Returns current instance of the Application.
static getConnection($name="")
Static method returns database connection for the specified name.
static get($moduleId, $name, $default="", $siteId=false)
Returns a value of an option.
static set($moduleId, $name, $value="", $siteId="")
Sets an option value and saves it into a DB.
static loadMessages($file)
Loads language messages for specified file in a lazy way.
static isModuleInstalled($moduleName)
static getList(array $parameters=array())
Executes the query and returns selection by parameters of the query.