Your IP : 216.73.216.86


Current Path : /var/www/homesaver/www/bitrix/modules/asd.currencyrate/
Upload File :
Current File : /var/www/homesaver/www/bitrix/modules/asd.currencyrate/include.php

<?php

//http://dev.1c-bitrix.ru/community/webdev/group/78/blog/1657/

IncludeModuleLangFile(__FILE__);

class CASDcurrencyrate
{
	public static function OnAdminListDisplayHandler(&$list)
	{
		if ($GLOBALS['APPLICATION']->GetCurPage()=='/bitrix/admin/currencies_rates.php') {
			$list->context->items[-2] = array(
										'ICON' => 'btn_refresh',
										'TEXT' => GetMessage('ASD_ACTION_GET'),
										'TITLE' => GetMessage('ASD_ACTION_GET_TITLE'),
										'LINK' => $GLOBALS['APPLICATION']->GetCurPageParam('asd_get_rate=Y', array('mode')),
									);
			$list->context->items[-1] = array('SEPARATOR' => 1);
			ksort($list->context->items);
		}
	}

	public static function OnBeforePrologHandler()
	{
		if ($GLOBALS['APPLICATION']->GetCurPage()=='/bitrix/admin/currencies_rates.php' && $_REQUEST['asd_get_rate']=='Y' &&
			$GLOBALS['APPLICATION']->GetGroupRight('currency')>'D'
		) {
			self::UpdateRates(false);
			LocalRedirect($GLOBALS['APPLICATION']->GetCurPageParam('', array('asd_get_rate')));
		}
	}

	public static function UpdateRates($bAgent=true)
	{
		if (CModule::IncludeModule('currency')) {

			$arCurr = array();
			$rsRate = CCurrency::GetList($by='currency', $order='asc');
			while ($arRate = $rsRate->Fetch()) {
				if ($arRate['CURRENCY']!='RUB' && $arRate['CURRENCY']!='RUR') {
					$arCurr[] = $arRate['CURRENCY'];
				}
			}

			if (!empty($arCurr)) {

				$percent = COption::GetOptionString('asd.currencyrate', 'percent');
				$useProxy = COption::GetOptionString('asd.currencyrate', 'use_proxy', 2) === 'Y';
				$useProxy = false;

				$percent = str_replace(',', '.', $percent);
				$percent = round((float)$percent, 2);

				$domain = $useProxy ? 'cbr.d-it.ru' : 'www.cbr.ru';
				$queryStr = 'date_req='.date('d.m.Y');
				$url = 'https://' . $domain . '/scripts/XML_daily.asp?' . $queryStr;
				// www.cbr.ru/scripts/XML_daily.asp?date_req=21.01.2015

				$http = new \Bitrix\Main\Web\HttpClient;
				$strQueryText = $http->get($url);

				$adminDate = date($GLOBALS['DB']->DateFormatToPHP(CLang::GetDateFormat('SHORT')));
				require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/classes/general/xml.php');

				$objXML = new CDataXML();
				if ($objXML->LoadString($strQueryText)) {
					$arData = $objXML->GetArray();
					if (!empty($arData) && is_array($arData)) {
						foreach ($arData['ValCurs']['#']['Valute'] as $arC) {
							if (in_array($arC["#"]["CharCode"][0]["#"], $arCurr)) {
								$rate = doubleval(str_replace(',', '.', $arC['#']['Value'][0]['#']));
								$val = $rate + (($rate * $percent) / 100);
								$arNewRate = array(
											'CURRENCY' => $arC["#"]["CharCode"][0]["#"],
											'RATE_CNT' => intval($arC['#']['Nominal'][0]['#']),
											'RATE' => $val,
											'DATE_RATE' => $adminDate,
										);
								if (!CCurrencyRates::GetList($by='id', $order='desc', $arNewRate)->Fetch()) {
									CCurrencyRates::Add($arNewRate);
								}
							}
						}
					}
				}
			}
		}
		if ($bAgent) {
			return 'CASDcurrencyrate::UpdateRates();';
		}
	}
}