public function executeComponent() { $this->IBLOCK_ID = $this->arParams["IBLOCK_ID"]; $this->SECTION_ID = $this->arParams["SECTION_ID"]; $this->FILTER_NAME = $this->arParams["FILTER_NAME"]; $this->SAFE_FILTER_NAME = htmlspecialcharsbx($this->FILTER_NAME); if ($this->arParams["CONVERT_CURRENCY"] && $this->arParams["CURRENCY_ID"] != "" && Loader::includeModule('currency')) { $currencyList = \Bitrix\Currency\CurrencyTable::getList(array('select' => array('CURRENCY'), 'filter' => array('=CURRENCY' => $this->arParams['CURRENCY_ID']))); if ($currency = $currencyList->fetch()) { $this->convertCurrencyId = $currency['CURRENCY']; } } if (self::$iblockIncluded === null) { self::$iblockIncluded = Loader::includeModule('iblock'); } if (!self::$iblockIncluded) { return ''; } if (self::$catalogIncluded === null) { self::$catalogIncluded = Loader::includeModule('catalog'); } if (self::$catalogIncluded) { $arCatalog = CCatalogSKU::GetInfoByProductIBlock($this->IBLOCK_ID); if (!empty($arCatalog)) { $this->SKU_IBLOCK_ID = $arCatalog["IBLOCK_ID"]; $this->SKU_PROPERTY_ID = $arCatalog["SKU_PROPERTY_ID"]; } } $this->facet = new \Bitrix\Iblock\PropertyIndex\Facet($this->IBLOCK_ID); return parent::executeComponent(); }
/** * <p>Метод позволяет указать, в какой валюте считать наименьшую цену в методе <a href="http://dev.1c-bitrix.ru/api_help/catalog/classes/ccatalogproduct/ccatalogproduct__getoptimalprice.7c16046d.php">CCatalogProduct::GetOptimalPrice</a>. По умолчанию считается в базовой валюте. Если указана несуществующая валюта - она будет проигнорирована. Используется в штатном провайдере (<b>CCatalogProvider</b>) в паре с <a href="http://dev.1c-bitrix.ru/api_help/catalog/classes/ccatalogproduct/getusedcurrency.php">CCatalogProduct::getUsedCurrency</a> для проведения всех расчетов в валюте магазина. Метод статический.</p> <p></p> <div class="note"> <b>Примечание:</b> метод действует в пределах одного хита.</div> * * * @param string $currency Код валюты. * * @return mixed <p>Нет.</p></bo<p>Внутри метода выполняется проверка на существование * указанной валюты.</p> <br><br> * * @static * @link http://dev.1c-bitrix.ru/api_help/catalog/classes/ccatalogproduct/setusedcurrency.php * @author Bitrix */ public static function setUsedCurrency($currency) { /** @var $oldCurrency string */ static $oldCurrency = null; if ($oldCurrency !== null && $oldCurrency === $currency) { self::$usedCurrency = $currency; return; } $currency = CCurrency::checkCurrencyID($currency); if ($currency === false) { return; } $currencyIterator = Currency\CurrencyTable::getList(array('select' => array('CURRENCY'), 'filter' => array('=CURRENCY' => $currency))); if ($result = $currencyIterator->fetch()) { self::$usedCurrency = $currency; $oldCurrency = $currency; } unset($result, $currencyIterator); }
'DEFAULT' => 'N', ); $arComponentParameters["PARAMETERS"]['CONVERT_CURRENCY'] = array( 'PARENT' => 'PRICES', 'NAME' => GetMessage('CP_BCCR_CONVERT_CURRENCY'), 'TYPE' => 'CHECKBOX', 'DEFAULT' => 'N', 'REFRESH' => 'Y', ); if (isset($arCurrentValues['CONVERT_CURRENCY']) && $arCurrentValues['CONVERT_CURRENCY'] == 'Y') { $arCurrencyList = array(); $currencyIterator = CurrencyTable::getList(array( 'select' => array('CURRENCY'), 'order' => array('SORT' => 'ASC') )); while ($currency = $currencyIterator->fetch()) { $arCurrencyList[$currency['CURRENCY']] = $currency['CURRENCY']; } unset($currency, $currencyIterator); $arComponentParameters['PARAMETERS']['CURRENCY_ID'] = array( 'PARENT' => 'PRICES', 'NAME' => GetMessage('CP_BCCR_CURRENCY_ID'), 'TYPE' => 'LIST', 'VALUES' => $arCurrencyList, 'DEFAULT' => CCurrency::GetBaseCurrency(), "ADDITIONAL_VALUES" => "Y", ); }
*************************************************************************/ if ($this->StartResultCache(false, array($arrFilter, $arParams["CACHE_GROUPS"] === "N" ? false : $USER->GetGroups(), $arNavigation, $pagerParameters))) { if (!Loader::includeModule("iblock")) { $this->AbortResultCache(); ShowError(GetMessage("IBLOCK_MODULE_NOT_INSTALLED")); return; } $arResultModules = array('iblock' => true, 'catalog' => false, 'currency' => false); $arConvertParams = array(); if ($arParams['CONVERT_CURRENCY'] == 'Y') { if (!Loader::includeModule('currency')) { $arParams['CONVERT_CURRENCY'] = 'N'; $arParams['CURRENCY_ID'] = ''; } else { $arResultModules['currency'] = true; $currencyIterator = CurrencyTable::getList(array('select' => array('CURRENCY'), 'filter' => array('=CURRENCY' => $arParams['CURRENCY_ID']))); if ($currency = $currencyIterator->fetch()) { $arParams['CURRENCY_ID'] = $currency['CURRENCY']; $arConvertParams['CURRENCY_ID'] = $currency['CURRENCY']; } else { $arParams['CONVERT_CURRENCY'] = 'N'; $arParams['CURRENCY_ID'] = ''; } unset($currency, $currencyIterator); } } $arSelect = array(); if (isset($arParams["SECTION_USER_FIELDS"]) && is_array($arParams["SECTION_USER_FIELDS"])) { foreach ($arParams["SECTION_USER_FIELDS"] as $field) { if (is_string($field) && preg_match("/^UF_/", $field)) { $arSelect[] = $field;
</td> </tr> <tr> <td width="40%" valign="top"><?echo Loc::getMessage("CO_PAR_DV1_CSV")?></td> <td width="60%" valign="top"> <? $arVal = array(); $strVal = (string)Option::get('catalog', 'allowed_currencies'); if ($strVal != '') { $arVal = array_fill_keys(explode(',', $strVal), true); } ?><select name="allowed_currencies[]" multiple size="5"><? $currencyIterator = CurrencyTable::getList(array( 'select' => array('CURRENCY', 'LANG_FORMAT.FULL_NAME'), 'filter' => array('=LANG_FORMAT.LID' => LANGUAGE_ID), 'order' => array('SORT' => 'ASC', 'CURRENCY' => 'ASC') )); while ($currency = $currencyIterator->fetch()) { $currency['FULL_NAME'] = (string)$currency['CURRENCY_CURRENCY_LANG_FORMAT_FULL_NAME']; ?><option value="<? echo $currency["CURRENCY"]; ?>"<? echo (isset($arVal[$currency["CURRENCY"]]) ? ' selected' : ''); ?>><? echo $currency['CURRENCY']; if ($currency['FULL_NAME'] != '') echo ' ('.htmlspecialcharsex($currency['FULL_NAME']).')'; ?></option><? } unset($currency, $currencyIterator); ?></select> </td> </tr> <?
'FORMAT' => array( 'FORMAT_STRING' => $currencyFormat['FORMAT_STRING'], 'DEC_POINT' => $currencyFormat['DEC_POINT'], 'THOUSANDS_SEP' => $currencyFormat['THOUSANDS_SEP'], 'DECIMALS' => $currencyFormat['DECIMALS'], 'THOUSANDS_VARIANT' => $currencyFormat['THOUSANDS_VARIANT'], 'HIDE_ZERO' => $currencyFormat['HIDE_ZERO'] ) ) ); unset($currencyFormat); } else { $currencyIterator = CurrencyTable::getList(array( 'select' => array('CURRENCY') )); while ($currency = $currencyIterator->fetch()) { $currencyFormat = CCurrencyLang::GetFormatDescription($currency['CURRENCY']); $arResult['CURRENCIES'][] = array( 'CURRENCY' => $currency['CURRENCY'], 'FORMAT' => array( 'FORMAT_STRING' => $currencyFormat['FORMAT_STRING'], 'DEC_POINT' => $currencyFormat['DEC_POINT'], 'THOUSANDS_SEP' => $currencyFormat['THOUSANDS_SEP'], 'DECIMALS' => $currencyFormat['DECIMALS'], 'THOUSANDS_VARIANT' => $currencyFormat['THOUSANDS_VARIANT'], 'HIDE_ZERO' => $currencyFormat['HIDE_ZERO'] ) );
</tr> <tr> <td width="40%" valign="top"><?php echo Loc::getMessage("CO_PAR_DV1_CSV"); ?> </td> <td width="60%" valign="top"> <?php $arVal = array(); $strVal = (string) Option::get('catalog', 'allowed_currencies'); if ($strVal != '') { $arVal = array_fill_keys(explode(',', $strVal), true); } ?> <select name="allowed_currencies[]" multiple size="5"><?php $currencyIterator = Currency\CurrencyTable::getList(array('select' => array('CURRENCY', 'FULL_NAME' => 'RT_LANG.FULL_NAME'), 'order' => array('SORT' => 'ASC', 'CURRENCY' => 'ASC'), 'runtime' => array('RT_LANG' => array('data_type' => 'Bitrix\\Currency\\CurrencyLang', 'reference' => array('=this.CURRENCY' => 'ref.CURRENCY', '=ref.LID' => new Main\DB\SqlExpression('?', LANGUAGE_ID)))))); while ($currency = $currencyIterator->fetch()) { $currency['FULL_NAME'] = (string) $currency['FULL_NAME']; ?> <option value="<?php echo $currency["CURRENCY"]; ?> "<?php echo isset($arVal[$currency["CURRENCY"]]) ? ' selected' : ''; ?> ><?php echo $currency['CURRENCY']; if ($currency['FULL_NAME'] != '') { echo ' (' . htmlspecialcharsex($currency['FULL_NAME']) . ')'; } ?>
/** * @return void */ public static function clearCurrencyCache() { $currencyTableName = CurrencyTable::getTableName(); $managedCache = Application::getInstance()->getManagedCache(); $managedCache->clean(self::CACHE_CURRENCY_LIST_ID, $currencyTableName); $languageIterator = LanguageTable::getList(array('select' => array('ID'))); while ($oneLanguage = $languageIterator->fetch()) { $managedCache->clean(self::CACHE_CURRENCY_LIST_ID . '_' . $oneLanguage['ID'], $currencyTableName); } unset($oneLanguage, $languageIterator); $managedCache->clean(self::CACHE_BASE_CURRENCY_ID, $currencyTableName); global $stackCacheManager; $stackCacheManager->Clear('currency_rate'); $stackCacheManager->Clear('currency_currency_lang'); }
function CheckFields($ACTION, &$arFields, $ID = 0) { global $APPLICATION; static $orderList = array(); $ACTION = strtoupper($ACTION); if (array_key_exists('ID', $arFields)) { unset($arFields['ID']); } if ($ACTION != "ADD" && (int) $ID <= 0) { $APPLICATION->ThrowException(Loc::getMessage('BT_MOD_SALE_BASKET_ERR_ID_ABSENT'), "ID"); return false; } if ('ADD' == $ACTION) { if (!array_key_exists('CUSTOM_PRICE', $arFields)) { $arFields['CUSTOM_PRICE'] = ''; } } if (array_key_exists('CUSTOM_PRICE', $arFields) && 'Y' != $arFields['CUSTOM_PRICE']) { $arFields['CUSTOM_PRICE'] = 'N'; } if (is_set($arFields, "PRODUCT_ID")) { $arFields["PRODUCT_ID"] = IntVal($arFields["PRODUCT_ID"]); } if ((is_set($arFields, "PRODUCT_ID") || $ACTION == "ADD") && IntVal($arFields["PRODUCT_ID"]) <= 0) { $APPLICATION->ThrowException(Loc::getMessage('BT_MOD_SALE_BASKET_ERR_PRODUCT_ID_ABSENT'), "PRODUCT_ID"); return false; } if (!array_key_exists('IGNORE_CALLBACK_FUNC', $arFields) || 'Y' != $arFields['IGNORE_CALLBACK_FUNC']) { if (array_key_exists("CALLBACK_FUNC", $arFields) && !empty($arFields["CALLBACK_FUNC"]) || array_key_exists("PRODUCT_PROVIDER_CLASS", $arFields) && !empty($arFields["PRODUCT_PROVIDER_CLASS"])) { /** @var $productProvider IBXSaleProductProvider */ if ($productProvider = CSaleBasket::GetProductProvider(array("MODULE" => $arFields["MODULE"], "PRODUCT_PROVIDER_CLASS" => $arFields["PRODUCT_PROVIDER_CLASS"]))) { $providerParams = array("PRODUCT_ID" => $arFields["PRODUCT_ID"], "QUANTITY" => $arFields["QUANTITY"], "RENEWAL" => $arFields["RENEWAL"], "USER_ID" => isset($arFields["USER_ID"]) ? $arFields["USER_ID"] : 0, "SITE_ID" => isset($arFields["LID"]) ? $arFields["LID"] : false, "BASKET_ID" => $ID); if (isset($arFields['NOTES'])) { $providerParams['NOTES'] = $arFields['NOTES']; } $arPrice = $productProvider::GetProductData($providerParams); unset($providerParams); } else { $arPrice = CSaleBasket::ExecuteCallbackFunction($arFields["CALLBACK_FUNC"], $arFields["MODULE"], $arFields["PRODUCT_ID"], $arFields["QUANTITY"], $arFields["RENEWAL"], $arFields["USER_ID"], $arFields["LID"]); } if (!empty($arPrice) && is_array($arPrice)) { $arFields["PRICE"] = $arPrice["PRICE"]; $arFields["CURRENCY"] = $arPrice["CURRENCY"]; $arFields["CAN_BUY"] = "Y"; $arFields["PRODUCT_PRICE_ID"] = $arPrice["PRODUCT_PRICE_ID"]; $arFields["NOTES"] = $arPrice["NOTES"]; if (!isset($arFields["NAME"])) { $arFields["NAME"] = $arPrice["NAME"]; } } else { $arFields["CAN_BUY"] = "N"; } } } if (is_set($arFields, "PRICE") || $ACTION == "ADD") { $arFields["PRICE"] = str_replace(",", ".", $arFields["PRICE"]); $arFields["PRICE"] = floatval($arFields["PRICE"]); } if (is_set($arFields, "DISCOUNT_PRICE") || $ACTION == "ADD") { $arFields["DISCOUNT_PRICE"] = str_replace(",", ".", $arFields["DISCOUNT_PRICE"]); $arFields["DISCOUNT_PRICE"] = floatval($arFields["DISCOUNT_PRICE"]); } if (is_set($arFields, "VAT_RATE") || $ACTION == "ADD") { $arFields["VAT_RATE"] = str_replace(",", ".", $arFields["VAT_RATE"]); $arFields["VAT_RATE"] = floatval($arFields["VAT_RATE"]); } if ((is_set($arFields, "CURRENCY") || $ACTION == "ADD") && strlen($arFields["CURRENCY"]) <= 0) { $APPLICATION->ThrowException(Loc::getMessage('BT_MOD_SALE_BASKET_ERR_CURRENCY_ABSENT'), "CURRENCY"); return false; } if ((is_set($arFields, "LID") || $ACTION == "ADD") && strlen($arFields["LID"]) <= 0) { $APPLICATION->ThrowException(Loc::getMessage('BT_MOD_SALE_BASKET_ERR_SITE_ID_ABSENT'), "LID"); return false; } if (is_set($arFields, "ORDER_ID")) { if (!isset($orderList[$arFields["ORDER_ID"]])) { $rsOrders = CSaleOrder::GetList(array(), array('ID' => $arFields["ORDER_ID"]), false, false, array('ID')); if ($arOrder = $rsOrders->Fetch()) { $orderList[$arFields["ORDER_ID"]] = true; } } if (!isset($orderList[$arFields["ORDER_ID"]])) { $APPLICATION->ThrowException(str_replace("#ID#", $arFields["ORDER_ID"], Loc::getMessage("SKGB_NO_ORDER")), "ORDER_ID"); return false; } } if (is_set($arFields, 'CURRENCY')) { $arFields['CURRENCY'] = (string) $arFields['CURRENCY']; if (empty($arFields['CURRENCY'])) { $APPLICATION->ThrowException(str_replace("#ID#", $arFields["CURRENCY"], Loc::getMessage("SKGB_NO_CURRENCY")), "CURRENCY"); return false; } else { if (empty(self::$currencyList)) { $currencyIterator = Currency\CurrencyTable::getList(array('select' => array('CURRENCY'))); while ($currency = $currencyIterator->fetch()) { self::$currencyList[$currency['CURRENCY']] = $currency['CURRENCY']; } } if (!isset(self::$currencyList[$arFields['CURRENCY']])) { $APPLICATION->ThrowException(str_replace("#ID#", $arFields["CURRENCY"], Loc::getMessage("SKGB_NO_CURRENCY")), "CURRENCY"); return false; } } } if (is_set($arFields, "LID")) { $dbSite = CSite::GetByID($arFields["LID"]); if (!$dbSite->Fetch()) { $APPLICATION->ThrowException(str_replace("#ID#", $arFields["LID"], Loc::getMessage("SKGB_NO_SITE")), "LID"); return false; } } if ($ACTION != 'ADD') { $existPrice = array_key_exists('PRICE', $arFields); $existCurrency = array_key_exists('CURRENCY', $arFields) && (string) $arFields['CURRENCY'] != ''; if (!$existPrice || !$existCurrency) { $existSiteId = isset($arFields['LID']) && (string) $arFields['LID'] != ''; if (!$existSiteId) { $select = array('ID', 'LID'); if (!$existPrice) { $select[] = 'PRICE'; } if (!$existCurrency) { $select[] = 'CURRENCY'; } $basketIterator = CSaleBasket::GetList(array(), array('ID' => $ID), false, false, $select); if ($basket = $basketIterator->Fetch()) { if (!$existSiteId) { $arFields['LID'] = $basket['LID']; } if (!$existPrice) { $arFields['PRICE'] = $basket['PRICE']; } if (!$existCurrency) { $arFields['CURRENCY'] = $basket['CURRENCY']; } } unset($basket, $basketIterator, $select); } unset($existSiteId); } unset($existCurrency, $existPrice); } if (!empty($arFields['LID']) && !empty($arFields['CURRENCY'])) { if (!isset(self::$currencySiteList[$arFields['LID']])) { self::$currencySiteList[$arFields['LID']] = CSaleLang::GetLangCurrency($arFields['LID']); } $siteCurrency = self::$currencySiteList[$arFields['LID']]; if ($siteCurrency != $arFields['CURRENCY']) { $arFields["PRICE"] = roundEx(CCurrencyRates::ConvertCurrency($arFields["PRICE"], $arFields["CURRENCY"], $siteCurrency), SALE_VALUE_PRECISION); if (is_set($arFields, "DISCOUNT_PRICE")) { $arFields["DISCOUNT_PRICE"] = roundEx(CCurrencyRates::ConvertCurrency($arFields["DISCOUNT_PRICE"], $arFields["CURRENCY"], $siteCurrency), SALE_VALUE_PRECISION); } $arFields["CURRENCY"] = $siteCurrency; } unset($siteCurrency); } // Changed by Sigurd, 2007-08-16 if (is_set($arFields, "QUANTITY")) { $arFields["QUANTITY"] = floatval($arFields["QUANTITY"]); } if ((is_set($arFields, "QUANTITY") || $ACTION == "ADD") && floatval($arFields["QUANTITY"]) <= 0) { $arFields["QUANTITY"] = 1; } if (is_set($arFields, "DELAY") && $arFields["DELAY"] != "Y") { $arFields["DELAY"] = "N"; } if (is_set($arFields, "CAN_BUY") && $arFields["CAN_BUY"] != "Y") { $arFields["CAN_BUY"] = "N"; } if ((is_set($arFields, "NAME") || $ACTION == "ADD") && strlen($arFields["NAME"]) <= 0) { $APPLICATION->ThrowException(Loc::getMessage('BT_MOD_SALE_BASKET_ERR_NAME_ABSENT'), "NAME"); return false; } if ($ACTION == "ADD" && !is_set($arFields, "FUSER_ID")) { $arFields["FUSER_ID"] = CSaleBasket::GetBasketUserID(false); } if ((is_set($arFields, "FUSER_ID") || $ACTION == "ADD") && IntVal($arFields["FUSER_ID"]) <= 0) { $APPLICATION->ThrowException(Loc::getMessage('BT_MOD_SALE_BASKET_ERR_FUSER_ID_ABSENT'), "FUSER_ID"); return false; } if (array_key_exists("TYPE", $arFields)) { $arFields["TYPE"] = (int) $arFields["TYPE"]; if ($arFields["TYPE"] != CSaleBasket::TYPE_SET) { unset($arFields["TYPE"]); } } if (array_key_exists('~TYPE', $arFields)) { unset($arFields['~TYPE']); } if (array_key_exists('CATALOG_XML_ID', $arFields)) { $arFields['CATALOG_XML_ID'] = (string) $arFields['CATALOG_XML_ID']; if ($arFields['CATALOG_XML_ID'] === '') { unset($arFields['CATALOG_XML_ID']); if (array_key_exists('~CATALOG_XML_ID', $arFields)) { unset($arFields['~CATALOG_XML_ID']); } } } if (array_key_exists('PROPS', $arFields)) { if (empty($arFields['PROPS']) || !is_array($arFields['PROPS'])) { unset($arFields['PROPS']); } else { $clearPropList = array(); foreach ($arFields['PROPS'] as $basketProperty) { if (empty($basketProperty) || !is_array($basketProperty) || !isset($basketProperty['NAME'])) { continue; } $basketProperty['NAME'] = (string) $basketProperty['NAME']; if ($basketProperty['NAME'] == '') { continue; } $propCode = isset($basketProperty['CODE']) ? (string) $basketProperty['CODE'] : ''; $propValue = isset($basketProperty['VALUE']) ? (string) $basketProperty['VALUE'] : ''; $clearProp = array('NAME' => $basketProperty['NAME'], 'SORT' => isset($basketProperty['SORT']) ? (int) $basketProperty['SORT'] : 100); if ($propCode != '') { $clearProp['CODE'] = $propCode; } if ($propValue != '') { $clearProp['VALUE'] = $propValue; } $clearPropList[] = $clearProp; unset($clearProp, $propValue, $propCode); } unset($basketProperty); if (!empty($clearPropList)) { $arFields['PROPS'] = $clearPropList; } else { unset($arFields['PROPS']); } unset($clearPropList); } } return true; }
public static function __GetList(&$by, &$order, $lang = LANGUAGE_ID) { $lang = substr((string) $lang, 0, 2); $normalBy = strtolower($by); if ($normalBy != 'currency' && $normalBy != 'name') { $normalBy = 'sort'; $by = 'sort'; } $normalOrder = strtoupper($order); if ($normalOrder != 'DESC') { $normalOrder = 'ASC'; $order = 'asc'; } switch ($normalBy) { case 'currency': $currencyOrder = array('CURRENCY' => $normalOrder); break; case 'name': $currencyOrder = array('FULL_NAME' => $normalOrder); break; case 'sort': default: $currencyOrder = array('SORT' => $normalOrder); break; } unset($normalOrder, $normalBy); $datetimeField = Currency\CurrencyManager::getDatetimeExpressionTemplate(); $currencyIterator = Currency\CurrencyTable::getList(array('select' => array('CURRENCY', 'AMOUNT_CNT', 'AMOUNT', 'SORT', 'BASE', 'NUMCODE', 'CREATED_BY', 'MODIFIED_BY', new Main\Entity\ExpressionField('DATE_UPDATE_FORMAT', $datetimeField, array('DATE_UPDATE'), array('data_type' => 'datetime')), new Main\Entity\ExpressionField('DATE_CREATE_FORMAT', $datetimeField, array('DATE_CREATE'), array('data_type' => 'datetime')), 'FULL_NAME' => 'RT_LANG.FULL_NAME', 'LID' => 'RT_LANG.LID', 'FORMAT_STRING' => 'RT_LANG.FORMAT_STRING', 'DEC_POINT' => 'RT_LANG.DEC_POINT', 'THOUSANDS_SEP' => 'RT_LANG.THOUSANDS_SEP', 'DECIMALS' => 'RT_LANG.DECIMALS', 'HIDE_ZERO' => 'RT_LANG.HIDE_ZERO'), 'order' => $currencyOrder, 'runtime' => array('RT_LANG' => array('data_type' => 'Bitrix\\Currency\\CurrencyLang', 'reference' => array('=this.CURRENCY' => 'ref.CURRENCY', '=ref.LID' => new Main\DB\SqlExpression('?', $lang)))))); unset($datetimeField); $currencyList = array(); while ($currency = $currencyIterator->fetch()) { $currency['DATE_UPDATE'] = $currency['DATE_UPDATE_FORMAT']; $currency['DATE_CREATE'] = $currency['DATE_CREATE_FORMAT']; $currencyList[] = $currency; } unset($currency, $currencyIterator); $result = new CDBResult(); $result->InitFromArray($currencyList); return $result; }
fwrite($fp, "\n<!DOCTYPE yml_catalog SYSTEM \"shops.dtd\">\n"); fwrite($fp, "<yml_catalog date=\"" . Date("Y-m-d H:i") . "\">\n"); fwrite($fp, "<shop>\n"); fwrite($fp, "<name>" . $APPLICATION->ConvertCharset(htmlspecialcharsbx(COption::GetOptionString("main", "site_name", "")), LANG_CHARSET, 'windows-1251') . "</name>\n"); fwrite($fp, "<company>" . $APPLICATION->ConvertCharset(htmlspecialcharsbx(COption::GetOptionString("main", "site_name", "")), LANG_CHARSET, 'windows-1251') . "</company>\n"); fwrite($fp, "<url>" . $usedProtocol . htmlspecialcharsbx(strlen($SETUP_SERVER_NAME) > 0 ? $SETUP_SERVER_NAME : COption::GetOptionString("main", "server_name", "")) . "</url>\n"); fwrite($fp, "<platform>1C-Bitrix</platform>\n"); $RUR = 'RUB'; $currencyIterator = Currency\CurrencyTable::getList(array('select' => array('CURRENCY'), 'filter' => array('=CURRENCY' => 'RUR'))); if ($currency = $currencyIterator->fetch()) { $RUR = 'RUR'; } unset($currency, $currencyIterator); $allowedCurrency = array('RUR', 'RUB', 'USD', 'EUR', 'UAH', 'BYR', 'KZT'); $strTmp = "<currencies>\n"; $currencyIterator = Currency\CurrencyTable::getList(array('select' => array('CURRENCY'), 'filter' => array('@CURRENCY' => $allowedCurrency), 'order' => array('SORT' => 'ASC', 'CURRENCY' => 'ASC'))); while ($currency = $currencyIterator->fetch()) { $strTmp .= '<currency id="' . $currency['CURRENCY'] . '" rate="' . CCurrencyRates::ConvertCurrency(1, $currency['CURRENCY'], $RUR) . '" />' . "\n"; } unset($currency, $currencyIterator, $allowedCurrency); $strTmp .= "</currencies>\n"; fwrite($fp, $strTmp); unset($strTmp); //*****************************************// $arSelect = array("ID", "IBLOCK_ID", "IBLOCK_SECTION_ID", "NAME", "PREVIEW_PICTURE", "PREVIEW_TEXT", "PREVIEW_TEXT_TYPE", "DETAIL_PICTURE", "DETAIL_PAGE_URL", 'CATALOG_AVAILABLE'); $db_res = CCatalogGroup::GetGroupsList(array("GROUP_ID" => 2)); $arPTypes = array(); while ($ar_res = $db_res->Fetch()) { if (!in_array($ar_res["CATALOG_GROUP_ID"], $arPTypes)) { $arPTypes[] = $ar_res["CATALOG_GROUP_ID"]; $arSelect[] = "CATALOG_GROUP_" . $ar_res["CATALOG_GROUP_ID"];
function InstallDB() { global $DB, $APPLICATION; global $stackCacheManager; global $CACHE_MANAGER; $this->errors = false; $bitrix24Path = $_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/bitrix24/'; $bitrix24 = file_exists($bitrix24Path) && is_dir($bitrix24Path); unset($bitrix24Path); if (!$DB->Query("SELECT COUNT(CURRENCY) FROM b_catalog_currency", true)): $this->errors = $DB->RunSQLBatch($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/currency/install/db/".strtolower($DB->type)."/install.sql"); endif; if ($this->errors !== false) { $APPLICATION->ThrowException(implode("", $this->errors)); return false; } RegisterModule("currency"); $stackCacheManager->Clear("currency_currency_lang"); $CACHE_MANAGER->Clean("currency_currency_list", 'b_catalog_currency'); $CACHE_MANAGER->Clean("currency_base_currency", 'b_catalog_currency'); $stackCacheManager->Clear("currency_rate"); if (Loader::includeModule("currency")) { $currencyIterator = CurrencyTable::getList(array( 'select' => array('CURRENCY'), 'limit' => 1 )); if (!($currency = $currencyIterator->fetch())) { $languageID = ''; $siteIterator = SiteTable::getList(array( 'select' => array('LID', 'LANGUAGE_ID'), 'filter' => array('DEF' => 'Y', 'ACTIVE' => 'Y') )); if ($site = $siteIterator->fetch()) { $languageID = (string)$site['LANGUAGE_ID']; } if (isset($site)) unset($site); unset($siteIterator); if ($languageID == '') $languageID = 'en'; $currencyList = array(); $currencySetID = ''; switch ($languageID) { case 'ua': case 'de': case 'en': $currencySetID = $languageID; break; case 'ru': if (!$bitrix24) { $languageIterator = LanguageTable::getList(array( 'select' => array('ID'), 'filter' => array('ID' => 'kz', 'ACTIVE' => 'Y') )); if ($existLanguage = $languageIterator->fetch()) { $currencySetID = $existLanguage['ID']; } if ($currencySetID == '') { $languageIterator = LanguageTable::getList(array( 'select' => array('ID'), 'filter' => array('ID' => 'ua', 'ACTIVE' => 'Y') )); if ($existLanguage = $languageIterator->fetch()) { $currencySetID = $existLanguage['ID']; } } } if ($currencySetID == '') { $currencySetID = $languageID; } break; default: $currencySetID = 'en'; break; } $datetimeEntity = new SqlExpression(Application::getConnection()->getSqlHelper()->getCurrentDateTimeFunction()); switch ($currencySetID) { case 'kz': $addCurrency = array( array('CURRENCY' => 'KZT', 'AMOUNT' => 1, 'AMOUNT_CNT' => 1, 'SORT' => 100, 'BASE' => 'Y', 'CURRENT_BASE_RATE' => 1), array('CURRENCY' => 'RUB', 'AMOUNT' => 1, 'AMOUNT_CNT' => 4.72, 'SORT' => 200, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 4.72), array('CURRENCY' => 'USD', 'AMOUNT' => 1, 'AMOUNT_CNT' => 154.52, 'SORT' => 300, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 154.52), array('CURRENCY' => 'EUR', 'AMOUNT' => 1, 'AMOUNT_CNT' => 212.73, 'SORT' => 400, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 212.73) ); break; case 'ua': $addCurrency = array( array('CURRENCY' => 'UAH', 'AMOUNT' => 1, 'AMOUNT_CNT' => 1, 'SORT' => 100, 'BASE' => 'Y', 'CURRENT_BASE_RATE' => 1), array('CURRENCY' => 'RUB', 'AMOUNT' => 2.54, 'AMOUNT_CNT' => 10, 'SORT' => 200, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 0.254), array('CURRENCY' => 'USD', 'AMOUNT' => 799.3, 'AMOUNT_CNT' => 100, 'SORT' => 300, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 7.993), array('CURRENCY' => 'EUR', 'AMOUNT' => 1083.37, 'AMOUNT_CNT' => 100, 'SORT' => 400, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 10.8337) ); break; case 'ru': $addCurrency = array( array('CURRENCY' => 'RUB', 'AMOUNT' => 1, 'AMOUNT_CNT' => 1, 'SORT' => 100, 'BASE' => 'Y', 'CURRENT_BASE_RATE' => 1), array('CURRENCY' => 'USD', 'AMOUNT' => 32.30, 'AMOUNT_CNT' => 1, 'SORT' => 200, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 32.30), array('CURRENCY' => 'EUR', 'AMOUNT' => 43.80, 'AMOUNT_CNT' => 1, 'SORT' => 300, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 43.80), array('CURRENCY' => 'UAH', 'AMOUNT' => 39.41, 'AMOUNT_CNT' => 10, 'SORT' => 400, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 3.941), array('CURRENCY' => 'BYR', 'AMOUNT' => 36.72, 'AMOUNT_CNT' => 10000, 'SORT' => 500, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 0.003672) ); break; case 'de': $addCurrency = array( array('CURRENCY' => 'EUR', 'AMOUNT' => 1, 'AMOUNT_CNT' => 1, 'SORT' => 100, 'BASE' => 'Y', 'CURRENT_BASE_RATE' => 1), array('CURRENCY' => 'USD', 'AMOUNT' => 0.74, 'AMOUNT_CNT' => 1, 'SORT' => 200, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 0.74) ); break; default: case 'en': $addCurrency = array( array('CURRENCY' => 'USD', 'AMOUNT' => 1, 'AMOUNT_CNT' => 1, 'SORT' => 100, 'BASE' => 'Y', 'CURRENT_BASE_RATE' => 1), array('CURRENCY' => 'EUR', 'AMOUNT' => 1.36, 'AMOUNT_CNT' => 1, 'SORT' => 200, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 1.36) ); break; } foreach ($addCurrency as &$fields) { $fields['CREATED_BY'] = null; $fields['MODIFIED_BY'] = null; $fields['DATE_CREATE'] = $datetimeEntity; $fields['DATE_UPDATE'] = $datetimeEntity; $currencyResult = CurrencyTable::add($fields); if ($currencyResult->isSuccess()) $currencyList[] = $fields['CURRENCY']; } unset($currencyResult, $fields); if (!empty($currencyList)) { Option::set('currency', 'installed_currencies', implode(',', $currencyList), ''); $languageIterator = LanguageTable::getList(array( 'select' => array('ID'), 'filter' => array('ACTIVE' => 'Y') )); while ($existLanguage = $languageIterator->fetch()) { $CACHE_MANAGER->Clean('currency_currency_list_'.$existLanguage['ID']); $messList = Loc::loadLanguageFile($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/currency/install_lang.php', $existLanguage['ID']); foreach($currencyList as &$oneCurrency) { $fields = array( 'LID' => $existLanguage['ID'], 'CURRENCY' => $oneCurrency, 'THOUSANDS_SEP' => false, 'DECIMALS' => 2, 'HIDE_ZERO' => 'Y', 'FORMAT_STRING' => $messList['CUR_INSTALL_'.$oneCurrency.'_FORMAT_STRING'], 'FULL_NAME' => $messList['CUR_INSTALL_'.$oneCurrency.'_FULL_NAME'], 'DEC_POINT' => $messList['CUR_INSTALL_'.$oneCurrency.'_DEC_POINT'], 'THOUSANDS_VARIANT' => $messList['CUR_INSTALL_'.$oneCurrency.'_THOUSANDS_SEP'], 'CREATED_BY' => null, 'MODIFIED_BY' => null, 'DATE_CREATE' => $datetimeEntity, 'TIMESTAMP_X' => $datetimeEntity ); $resultCurrencyLang = CurrencyLangTable::add($fields); } unset($oneCurrency); } unset($existLanguage, $languageIterator); if (!$bitrix24) { $checkDate = DateTime::createFromTimestamp(strtotime('tomorrow 00:01:00'));; CAgent::AddAgent('\Bitrix\Currency\CurrencyTable::currencyBaseRateAgent();', 'currency', 'Y', 86400, '', 'Y', $checkDate->toString(), 100, false, true); } } } } $stackCacheManager->Clear("currency_currency_lang"); $CACHE_MANAGER->Clean("currency_currency_list", 'b_catalog_currency'); $CACHE_MANAGER->Clean("currency_base_currency", 'b_catalog_currency'); $stackCacheManager->Clear("currency_rate"); return true; }
if ($totalCount > 0) { $totalPages = ceil($totalCount/$navyParams['SIZEN']); if ($navyParams['PAGEN'] > $totalPages) $navyParams['PAGEN'] = $totalPages; $getListParams['limit'] = $navyParams['SIZEN']; $getListParams['offset'] = $navyParams['SIZEN']*($navyParams['PAGEN']-1); } else { $navyParams['PAGEN'] = 1; $getListParams['limit'] = $navyParams['SIZEN']; $getListParams['offset'] = 0; } } $currencyIterator = new CAdminResult(Currency\CurrencyTable::getList($getListParams), $adminListTableID); if ($usePageNavigation) { $currencyIterator->NavStart($getListParams['limit'], $navyParams['SHOW_ALL'], $navyParams['PAGEN']); $currencyIterator->NavRecordCount = $totalCount; $currencyIterator->NavPageCount = $totalPages; $currencyIterator->NavPageNomer = $navyParams['PAGEN']; } else { $currencyIterator->NavStart(); } $adminList->NavText($currencyIterator->GetNavPrint(GetMessage('CURRENCY_TITLE'))); $userList = array();
protected function installCurrencies() { if (!Loader::includeModule('currency')) { return; } $bitrix24Path = $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/bitrix24/'; $bitrix24 = file_exists($bitrix24Path) && is_dir($bitrix24Path); unset($bitrix24Path); $currencyIterator = \Bitrix\Currency\CurrencyTable::getList(array('select' => array('CURRENCY'), 'limit' => 1)); $currency = $currencyIterator->fetch(); if (!empty($currency)) { return; } $languageID = ''; $siteIterator = SiteTable::getList(array('select' => array('LID', 'LANGUAGE_ID'), 'filter' => array('=DEF' => 'Y', '=ACTIVE' => 'Y'))); if ($site = $siteIterator->fetch()) { $languageID = (string) $site['LANGUAGE_ID']; } unset($site, $siteIterator); if ($languageID == '') { $languageID = 'en'; } $currencyList = array(); $currencySetID = ''; switch ($languageID) { case 'ua': case 'de': case 'en': case 'la': case 'tc': case 'sc': case 'in': $currencySetID = $languageID; break; case 'ru': if (!$bitrix24) { $languageIterator = LanguageTable::getList(array('select' => array('ID'), 'filter' => array('=ID' => 'kz', '=ACTIVE' => 'Y'))); if ($existLanguage = $languageIterator->fetch()) { $currencySetID = $existLanguage['ID']; } if ($currencySetID == '') { $languageIterator = LanguageTable::getList(array('select' => array('ID'), 'filter' => array('=ID' => 'ua', '=ACTIVE' => 'Y'))); if ($existLanguage = $languageIterator->fetch()) { $currencySetID = $existLanguage['ID']; } } unset($existLanguage, $languageIterator); } if ($currencySetID == '') { $currencySetID = $languageID; } break; default: $currencySetID = 'en'; break; } $datetimeEntity = new Main\DB\SqlExpression(Main\Application::getConnection()->getSqlHelper()->getCurrentDateTimeFunction()); switch ($currencySetID) { case 'kz': $addCurrency = array(array('CURRENCY' => 'KZT', 'NUMCODE' => '398', 'AMOUNT' => 1, 'AMOUNT_CNT' => 1, 'SORT' => 100, 'BASE' => 'Y', 'CURRENT_BASE_RATE' => 1), array('CURRENCY' => 'RUB', 'NUMCODE' => '643', 'AMOUNT' => 4.4, 'AMOUNT_CNT' => 1, 'SORT' => 200, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 4.4), array('CURRENCY' => 'USD', 'NUMCODE' => '840', 'AMOUNT' => 283.17, 'AMOUNT_CNT' => 1, 'SORT' => 300, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 283.17), array('CURRENCY' => 'EUR', 'NUMCODE' => '978', 'AMOUNT' => 310.78, 'AMOUNT_CNT' => 1, 'SORT' => 400, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 310.78)); break; case 'ua': $addCurrency = array(array('CURRENCY' => 'UAH', 'NUMCODE' => '980', 'AMOUNT' => 1, 'AMOUNT_CNT' => 1, 'SORT' => 100, 'BASE' => 'Y', 'CURRENT_BASE_RATE' => 1), array('CURRENCY' => 'RUB', 'NUMCODE' => '643', 'AMOUNT' => 3.61, 'AMOUNT_CNT' => 10, 'SORT' => 200, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 0.361), array('CURRENCY' => 'USD', 'NUMCODE' => '840', 'AMOUNT' => 2322.93, 'AMOUNT_CNT' => 100, 'SORT' => 300, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 23.2293), array('CURRENCY' => 'EUR', 'NUMCODE' => '978', 'AMOUNT' => 2548.19, 'AMOUNT_CNT' => 100, 'SORT' => 400, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 25.4819)); break; case 'ru': $addCurrency = array(array('CURRENCY' => 'RUB', 'NUMCODE' => '643', 'AMOUNT' => 1, 'AMOUNT_CNT' => 1, 'SORT' => 100, 'BASE' => 'Y', 'CURRENT_BASE_RATE' => 1), array('CURRENCY' => 'USD', 'NUMCODE' => '840', 'AMOUNT' => 64.36, 'AMOUNT_CNT' => 1, 'SORT' => 200, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 64.36), array('CURRENCY' => 'EUR', 'NUMCODE' => '978', 'AMOUNT' => 70.59999999999999, 'AMOUNT_CNT' => 1, 'SORT' => 300, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 70.59999999999999), array('CURRENCY' => 'UAH', 'NUMCODE' => '980', 'AMOUNT' => 27.69, 'AMOUNT_CNT' => 10, 'SORT' => 400, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 2.769), array('CURRENCY' => 'BYR', 'NUMCODE' => '974', 'AMOUNT' => 36.9, 'AMOUNT_CNT' => 10000, 'SORT' => 500, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 0.00369)); break; case 'de': case 'la': $addCurrency = array(array('CURRENCY' => 'EUR', 'NUMCODE' => '978', 'AMOUNT' => 1, 'AMOUNT_CNT' => 1, 'SORT' => 100, 'BASE' => 'Y', 'CURRENT_BASE_RATE' => 1), array('CURRENCY' => 'USD', 'NUMCODE' => '840', 'AMOUNT' => 0.91, 'AMOUNT_CNT' => 1, 'SORT' => 200, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 0.91), array('CURRENCY' => 'CNY', 'NUMCODE' => '156', 'AMOUNT' => 14.35, 'AMOUNT_CNT' => 100, 'SORT' => 300, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 0.1435), array('CURRENCY' => 'BRL', 'NUMCODE' => '986', 'AMOUNT' => 23.21, 'AMOUNT_CNT' => 100, 'SORT' => 400, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 0.2321), array('CURRENCY' => 'INR', 'NUMCODE' => '356', 'AMOUNT' => 13.97, 'AMOUNT_CNT' => 1000, 'SORT' => 500, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 0.01397)); break; case 'tc': case 'sc': $addCurrency = array(array('CURRENCY' => 'CNY', 'NUMCODE' => '156', 'AMOUNT' => 1, 'AMOUNT_CNT' => 1, 'SORT' => 100, 'BASE' => 'Y', 'CURRENT_BASE_RATE' => 1), array('CURRENCY' => 'USD', 'NUMCODE' => '840', 'AMOUNT' => 6.36, 'AMOUNT_CNT' => 1, 'SORT' => 200, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 6.36), array('CURRENCY' => 'EUR', 'NUMCODE' => '978', 'AMOUNT' => 6.97, 'AMOUNT_CNT' => 1, 'SORT' => 300, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 6.97), array('CURRENCY' => 'BRL', 'NUMCODE' => '986', 'AMOUNT' => 1.61, 'AMOUNT_CNT' => 1, 'SORT' => 400, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 1.61), array('CURRENCY' => 'INR', 'NUMCODE' => '356', 'AMOUNT' => 9.74, 'AMOUNT_CNT' => 100, 'SORT' => 500, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 0.09737)); break; case 'in': $addCurrency = array(array('CURRENCY' => 'INR', 'NUMCODE' => '356', 'AMOUNT' => 1, 'AMOUNT_CNT' => 1, 'SORT' => 100, 'BASE' => 'Y', 'CURRENT_BASE_RATE' => 1), array('CURRENCY' => 'USD', 'NUMCODE' => '840', 'AMOUNT' => 65.31, 'AMOUNT_CNT' => 1, 'SORT' => 200, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 65.31), array('CURRENCY' => 'EUR', 'NUMCODE' => '978', 'AMOUNT' => 71.56, 'AMOUNT_CNT' => 1, 'SORT' => 300, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 71.56), array('CURRENCY' => 'CNY', 'NUMCODE' => '156', 'AMOUNT' => 10.27, 'AMOUNT_CNT' => 1, 'SORT' => 400, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 10.27), array('CURRENCY' => 'BRL', 'NUMCODE' => '986', 'AMOUNT' => 16.56, 'AMOUNT_CNT' => 1, 'SORT' => 500, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 16.56)); break; case 'br': $addCurrency = array(array('CURRENCY' => 'BRL', 'NUMCODE' => '986', 'AMOUNT' => 1, 'AMOUNT_CNT' => 1, 'SORT' => 100, 'BASE' => 'Y', 'CURRENT_BASE_RATE' => 1), array('CURRENCY' => 'USD', 'NUMCODE' => '840', 'AMOUNT' => 3.9, 'AMOUNT_CNT' => 1, 'SORT' => 200, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 3.9), array('CURRENCY' => 'EUR', 'NUMCODE' => '978', 'AMOUNT' => 4.29, 'AMOUNT_CNT' => 1, 'SORT' => 300, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 4.29), array('CURRENCY' => 'CNY', 'NUMCODE' => '156', 'AMOUNT' => 61.44, 'AMOUNT_CNT' => 100, 'SORT' => 400, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 0.6143999999999999), array('CURRENCY' => 'INR', 'NUMCODE' => '356', 'AMOUNT' => 5.99, 'AMOUNT_CNT' => 100, 'SORT' => 500, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 0.0599)); break; default: case 'en': $addCurrency = array(array('CURRENCY' => 'USD', 'NUMCODE' => '840', 'AMOUNT' => 1, 'AMOUNT_CNT' => 1, 'SORT' => 100, 'BASE' => 'Y', 'CURRENT_BASE_RATE' => 1), array('CURRENCY' => 'EUR', 'NUMCODE' => '978', 'AMOUNT' => 1.1, 'AMOUNT_CNT' => 1, 'SORT' => 200, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 1.1), array('CURRENCY' => 'CNY', 'NUMCODE' => '156', 'AMOUNT' => 15.73, 'AMOUNT_CNT' => 100, 'SORT' => 300, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 0.1573), array('CURRENCY' => 'BRL', 'NUMCODE' => '986', 'AMOUNT' => 25.35, 'AMOUNT_CNT' => 100, 'SORT' => 400, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 0.2535), array('CURRENCY' => 'INR', 'NUMCODE' => '356', 'AMOUNT' => 15.31, 'AMOUNT_CNT' => 1000, 'SORT' => 500, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 0.01531)); break; } foreach ($addCurrency as &$fields) { $fields['CREATED_BY'] = null; $fields['MODIFIED_BY'] = null; $fields['DATE_CREATE'] = $datetimeEntity; $fields['DATE_UPDATE'] = $datetimeEntity; $currencyResult = \Bitrix\Currency\CurrencyTable::add($fields); if ($currencyResult->isSuccess()) { $currencyList[] = $fields['CURRENCY']; } } unset($currencyResult, $fields); if (!empty($currencyList)) { Option::set('currency', 'installed_currencies', implode(',', $currencyList), ''); $languageIterator = LanguageTable::getList(array('select' => array('ID'), 'filter' => array('=ACTIVE' => 'Y'))); while ($existLanguage = $languageIterator->fetch()) { $messList = Loc::loadLanguageFile($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/currency/install_lang.php', $existLanguage['ID']); foreach ($currencyList as &$oneCurrency) { $fields = array('LID' => $existLanguage['ID'], 'CURRENCY' => $oneCurrency, 'THOUSANDS_SEP' => false, 'DECIMALS' => 2, 'HIDE_ZERO' => 'Y', 'FORMAT_STRING' => $messList['CUR_INSTALL_' . $oneCurrency . '_FORMAT_STRING'], 'FULL_NAME' => $messList['CUR_INSTALL_' . $oneCurrency . '_FULL_NAME'], 'DEC_POINT' => $messList['CUR_INSTALL_' . $oneCurrency . '_DEC_POINT'], 'THOUSANDS_VARIANT' => $messList['CUR_INSTALL_' . $oneCurrency . '_THOUSANDS_SEP'], 'CREATED_BY' => null, 'MODIFIED_BY' => null, 'DATE_CREATE' => $datetimeEntity, 'TIMESTAMP_X' => $datetimeEntity); $resultCurrencyLang = \Bitrix\Currency\CurrencyLangTable::add($fields); unset($resultCurrencyLang); } unset($oneCurrency, $messList); } unset($existLanguage, $languageIterator); if (!$bitrix24) { $checkDate = Main\Type\DateTime::createFromTimestamp(strtotime('tomorrow 00:01:00')); CAgent::AddAgent('\\Bitrix\\Currency\\CurrencyTable::currencyBaseRateAgent();', 'currency', 'Y', 86400, '', 'Y', $checkDate->toString(), 100, false, true); unset($checkDate); } \Bitrix\Currency\CurrencyManager::clearCurrencyCache(); } unset($datetimeEntity); }
/** * Update base currency. * * @param string $currency Currency id. * @return bool */ public static function updateBaseCurrency($currency) { /** @global \CUser $USER */ global $USER; $currency = CurrencyManager::checkCurrencyID($currency); if ($currency === false) { return false; } $event = new Main\Event('currency', self::EVENT_ON_UPDATE_BASE_CURRENCY, array('NEW_BASE_CURRENCY' => $currency)); $event->send(); unset($event); $conn = Main\Application::getConnection(); $helper = $conn->getSqlHelper(); $userID = isset($USER) && $USER instanceof \CUser ? (int) $USER->getID() : 0; $tableName = $helper->quote(CurrencyTable::getTableName()); $baseField = $helper->quote('BASE'); $dateUpdateField = $helper->quote('DATE_UPDATE'); $modifiedByField = $helper->quote('MODIFIED_BY'); $amountField = $helper->quote('AMOUNT'); $amountCntField = $helper->quote('AMOUNT_CNT'); $currencyField = $helper->quote('CURRENCY'); $query = 'update ' . $tableName . ' set ' . $baseField . ' = \'N\', ' . $dateUpdateField . ' = ' . $helper->getCurrentDateTimeFunction() . ', ' . $modifiedByField . ' = ' . ($userID == 0 ? 'NULL' : $userID) . ' where ' . $currencyField . ' <> \'' . $helper->forSql($currency) . '\' and ' . $baseField . ' = \'Y\''; $conn->queryExecute($query); $query = 'update ' . $tableName . ' set ' . $baseField . ' = \'Y\', ' . $dateUpdateField . ' = ' . $helper->getCurrentDateTimeFunction() . ', ' . $modifiedByField . ' = ' . ($userID == 0 ? 'NULL' : $userID) . ', ' . $amountField . ' = 1, ' . $amountCntField . ' = 1 where ' . $currencyField . ' = \'' . $helper->forSql($currency) . '\''; $conn->queryExecute($query); static::updateBaseRates(); $event = new Main\Event('currency', self::EVENT_ON_AFTER_UPDATE_BASE_CURRENCY, array('NEW_BASE_CURRENCY' => $currency)); $event->send(); unset($event); self::$baseCurrency = ''; return true; }
protected function installCurrencies() { if (!Loader::includeModule('currency')) return; $bitrix24Path = $_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/bitrix24/'; $bitrix24 = file_exists($bitrix24Path) && is_dir($bitrix24Path); unset($bitrix24Path); $currencyIterator = \Bitrix\Currency\CurrencyTable::getList(array( 'select' => array('CURRENCY'), 'limit' => 1 )); $currency = $currencyIterator->fetch(); if (!empty($currency)) return; $languageID = ''; $siteIterator = SiteTable::getList(array( 'select' => array('LID', 'LANGUAGE_ID'), 'filter' => array('=DEF' => 'Y', '=ACTIVE' => 'Y') )); if ($site = $siteIterator->fetch()) $languageID = (string)$site['LANGUAGE_ID']; unset($site, $siteIterator); if ($languageID == '') $languageID = 'en'; $currencyList = array(); $currencySetID = ''; switch ($languageID) { case 'ua': case 'de': case 'en': case 'la': case 'tc': case 'sc': $currencySetID = $languageID; break; case 'ru': if (!$bitrix24) { $languageIterator = LanguageTable::getList(array( 'select' => array('ID'), 'filter' => array('=ID' => 'kz', '=ACTIVE' => 'Y') )); if ($existLanguage = $languageIterator->fetch()) $currencySetID = $existLanguage['ID']; if ($currencySetID == '') { $languageIterator = LanguageTable::getList(array( 'select' => array('ID'), 'filter' => array('=ID' => 'ua', '=ACTIVE' => 'Y') )); if ($existLanguage = $languageIterator->fetch()) $currencySetID = $existLanguage['ID']; } unset($existLanguage, $languageIterator); } if ($currencySetID == '') $currencySetID = $languageID; break; default: $currencySetID = 'en'; break; } $datetimeEntity = new Main\DB\SqlExpression(Main\Application::getConnection()->getSqlHelper()->getCurrentDateTimeFunction()); switch ($currencySetID) { case 'kz': $addCurrency = array( array('CURRENCY' => 'KZT', 'NUMCODE' => '398', 'AMOUNT' => 1, 'AMOUNT_CNT' => 1, 'SORT' => 100, 'BASE' => 'Y', 'CURRENT_BASE_RATE' => 1), array('CURRENCY' => 'RUB', 'NUMCODE' => '643', 'AMOUNT' => 1, 'AMOUNT_CNT' => 3.09, 'SORT' => 200, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 3.09), array('CURRENCY' => 'USD', 'NUMCODE' => '840', 'AMOUNT' => 1, 'AMOUNT_CNT' => 185.5, 'SORT' => 300, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 185.5), array('CURRENCY' => 'EUR', 'NUMCODE' => '978', 'AMOUNT' => 1, 'AMOUNT_CNT' => 198.13, 'SORT' => 400, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 198.13) ); break; case 'ua': $addCurrency = array( array('CURRENCY' => 'UAH', 'NUMCODE' => '980', 'AMOUNT' => 1, 'AMOUNT_CNT' => 1, 'SORT' => 100, 'BASE' => 'Y', 'CURRENT_BASE_RATE' => 1), array('CURRENCY' => 'RUB', 'NUMCODE' => '643', 'AMOUNT' => 4.00, 'AMOUNT_CNT' => 10, 'SORT' => 200, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 0.4), array('CURRENCY' => 'USD', 'NUMCODE' => '840', 'AMOUNT' => 2355.70, 'AMOUNT_CNT' => 100, 'SORT' => 300, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 23.557), array('CURRENCY' => 'EUR', 'NUMCODE' => '978', 'AMOUNT' => 2579.49, 'AMOUNT_CNT' => 100, 'SORT' => 400, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 25.7949) ); break; case 'ru': $addCurrency = array( array('CURRENCY' => 'RUB', 'NUMCODE' => '643', 'AMOUNT' => 1, 'AMOUNT_CNT' => 1, 'SORT' => 100, 'BASE' => 'Y', 'CURRENT_BASE_RATE' => 1), array('CURRENCY' => 'USD', 'NUMCODE' => '840', 'AMOUNT' => 57.39, 'AMOUNT_CNT' => 1, 'SORT' => 200, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 57.39), array('CURRENCY' => 'EUR', 'NUMCODE' => '978', 'AMOUNT' => 62.77, 'AMOUNT_CNT' => 1, 'SORT' => 300, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 62.77), array('CURRENCY' => 'UAH', 'NUMCODE' => '980', 'AMOUNT' => 24.53, 'AMOUNT_CNT' => 10, 'SORT' => 400, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 2.453), array('CURRENCY' => 'BYR', 'NUMCODE' => '974', 'AMOUNT' => 39.44, 'AMOUNT_CNT' => 10000, 'SORT' => 500, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 0.003944) ); break; case 'de': case 'la': $addCurrency = array( array('CURRENCY' => 'EUR', 'NUMCODE' => '978', 'AMOUNT' => 1, 'AMOUNT_CNT' => 1, 'SORT' => 100, 'BASE' => 'Y', 'CURRENT_BASE_RATE' => 1), array('CURRENCY' => 'USD', 'NUMCODE' => '840', 'AMOUNT' => 0.91, 'AMOUNT_CNT' => 1, 'SORT' => 200, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 0.91), array('CURRENCY' => 'CNY', 'NUMCODE' => '156', 'AMOUNT' => 14.65, 'AMOUNT_CNT' => 100, 'SORT' => 300, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 0.1465), array('CURRENCY' => 'BRL', 'NUMCODE' => '986', 'AMOUNT' => 29.12, 'AMOUNT_CNT' => 100, 'SORT' => 400, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 0.2912), array('CURRENCY' => 'INR', 'NUMCODE' => '356', 'AMOUNT' => 14.59, 'AMOUNT_CNT' => 1000, 'SORT' => 500, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 0.01459) ); break; case 'tc': case 'sc': $addCurrency = array( array('CURRENCY' => 'CNY', 'NUMCODE' => '156', 'AMOUNT' => 1, 'AMOUNT_CNT' => 1, 'SORT' => 100, 'BASE' => 'Y', 'CURRENT_BASE_RATE' => 1), array('CURRENCY' => 'USD', 'NUMCODE' => '840', 'AMOUNT' => 6.21, 'AMOUNT_CNT' => 1, 'SORT' => 200, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 0.1610), array('CURRENCY' => 'EUR', 'NUMCODE' => '978', 'AMOUNT' => 6.75, 'AMOUNT_CNT' => 1, 'SORT' => 300, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 0.1482), array('CURRENCY' => 'BRL', 'NUMCODE' => '986', 'AMOUNT' => 1.93, 'AMOUNT_CNT' => 1, 'SORT' => 400, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 0.5181), array('CURRENCY' => 'INR', 'NUMCODE' => '356', 'AMOUNT' => 9,94, 'AMOUNT_CNT' => 100, 'SORT' => 500, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 0.0994) ); break; default: case 'en': $addCurrency = array( array('CURRENCY' => 'USD', 'NUMCODE' => '840', 'AMOUNT' => 1, 'AMOUNT_CNT' => 1, 'SORT' => 100, 'BASE' => 'Y', 'CURRENT_BASE_RATE' => 1), array('CURRENCY' => 'EUR', 'NUMCODE' => '978', 'AMOUNT' => 1.09, 'AMOUNT_CNT' => 1, 'SORT' => 200, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 1.09), array('CURRENCY' => 'CNY', 'NUMCODE' => '156', 'AMOUNT' => 16.09, 'AMOUNT_CNT' => 100, 'SORT' => 300, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 0.1609), array('CURRENCY' => 'BRL', 'NUMCODE' => '986', 'AMOUNT' => 31.24, 'AMOUNT_CNT' => 100, 'SORT' => 400, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 0.3124), array('CURRENCY' => 'INR', 'NUMCODE' => '356', 'AMOUNT' => 16.02, 'AMOUNT_CNT' => 1000, 'SORT' => 500, 'BASE' => 'N', 'CURRENT_BASE_RATE' => 0.01602) ); break; } foreach ($addCurrency as &$fields) { $fields['CREATED_BY'] = null; $fields['MODIFIED_BY'] = null; $fields['DATE_CREATE'] = $datetimeEntity; $fields['DATE_UPDATE'] = $datetimeEntity; $currencyResult = \Bitrix\Currency\CurrencyTable::add($fields); if ($currencyResult->isSuccess()) $currencyList[] = $fields['CURRENCY']; } unset($currencyResult, $fields); if (!empty($currencyList)) { Option::set('currency', 'installed_currencies', implode(',', $currencyList), ''); $languageIterator = LanguageTable::getList(array( 'select' => array('ID'), 'filter' => array('=ACTIVE' => 'Y') )); while ($existLanguage = $languageIterator->fetch()) { $messList = Loc::loadLanguageFile($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/currency/install_lang.php', $existLanguage['ID']); foreach($currencyList as &$oneCurrency) { $fields = array( 'LID' => $existLanguage['ID'], 'CURRENCY' => $oneCurrency, 'THOUSANDS_SEP' => false, 'DECIMALS' => 2, 'HIDE_ZERO' => 'Y', 'FORMAT_STRING' => $messList['CUR_INSTALL_'.$oneCurrency.'_FORMAT_STRING'], 'FULL_NAME' => $messList['CUR_INSTALL_'.$oneCurrency.'_FULL_NAME'], 'DEC_POINT' => $messList['CUR_INSTALL_'.$oneCurrency.'_DEC_POINT'], 'THOUSANDS_VARIANT' => $messList['CUR_INSTALL_'.$oneCurrency.'_THOUSANDS_SEP'], 'CREATED_BY' => null, 'MODIFIED_BY' => null, 'DATE_CREATE' => $datetimeEntity, 'TIMESTAMP_X' => $datetimeEntity ); $resultCurrencyLang = \Bitrix\Currency\CurrencyLangTable::add($fields); unset($resultCurrencyLang); } unset($oneCurrency, $messList); } unset($existLanguage, $languageIterator); if (!$bitrix24) { $checkDate = Main\Type\DateTime::createFromTimestamp(strtotime('tomorrow 00:01:00'));; CAgent::AddAgent('\Bitrix\Currency\CurrencyTable::currencyBaseRateAgent();', 'currency', 'Y', 86400, '', 'Y', $checkDate->toString(), 100, false, true); unset($checkDate); } \Bitrix\Currency\CurrencyManager::clearCurrencyCache(); } unset($datetimeEntity); }