Index: units/currencies/currencies_config.php =================================================================== --- units/currencies/currencies_config.php (revision 14835) +++ units/currencies/currencies_config.php (working copy) @@ -19,12 +19,6 @@ 'ListClass' => Array ('class' => 'kDBList', 'file' => '', 'build_event' => 'OnListBuild'), 'EventHandlerClass' => Array ('class' => 'CurrenciesEventHandler', 'file' => 'currencies_event_handler.php', 'build_event' => 'OnBuild'), 'TagProcessorClass' => Array ('class' => 'CurrenciesTagProcessor', 'file' => 'currencies_tag_processor.php', 'build_event' => 'OnBuild'), - 'RegisterClasses' => Array ( - Array ('pseudo' => 'kCurrencyRates', 'class' => 'kCurrencyRates', 'file' => 'currency_rates.php', 'build_event' => ''), - Array ('pseudo' => 'BankLVCurrencyRates', 'class' => 'kBankLVCurrencyRates', 'file' => 'currency_rates.php', 'require_classes' => 'kCurrencyRates', 'build_event' => ''), - Array ('pseudo' => 'ECBCurrencyRates', 'class' => 'kECBCurrencyRates', 'file' => 'currency_rates.php', 'require_classes' => 'kCurrencyRates', 'build_event' => ''), - Array ('pseudo' => 'FRNYCurrencyRates', 'class' => 'kFRNYCurrencyRates', 'file' => 'currency_rates.php', 'require_classes' => 'kCurrencyRates', 'build_event' => ''), - ), 'AutoLoad' => true, 'hooks' => Array (), 'QueryString' => Array ( Index: units/currencies/currency_rates.php =================================================================== --- units/currencies/currency_rates.php (revision 14835) +++ units/currencies/currency_rates.php (working copy) @@ -1,286 +0,0 @@ -GetRatesData(); - } - - function GetRatesData() - { - $cache_key = 'currency_rates[%CurrSerial%]'; - $rates = $this->Application->getCache($cache_key); - $primary = $this->Application->GetPrimaryCurrency(); - - if ($rates === false) { - $this->Conn->nextQueryCachable = true; - $sql = 'SELECT ISO, RateToPrimary - FROM ' . $this->Application->getUnitOption('curr', 'TableName') . ' - WHERE Status = ' . STATUS_ACTIVE; - $rates = $this->Conn->Query($sql); - - $this->Application->setCache($cache_key, $rates); - } - - foreach ($rates as $rate) { - $this->SetRate($primary, $rate['ISO'], $rate['RateToPrimary']); - } - } - - function GetRate($source_cur, $target_cur, $units = 1) - { - $source_cur = ($source_cur == 'PRIMARY') ? $this->Application->GetPrimaryCurrency() : $source_cur; - $target_cur = ($target_cur == 'PRIMARY') ? $this->Application->GetPrimaryCurrency() : $target_cur; - if($source_cur == $target_cur) - { - return 1; - } - - if($this->ExchangeRates[$target_cur]['TARGET'] == $source_cur) - { - $rate = ($this->ExchangeRates[$target_cur]['RATE'] == 0) ? false : 1 / $this->ExchangeRates[$target_cur]['RATE']; - } - elseif($this->ExchangeRates[$source_cur]['TARGET'] == $target_cur) - { - $rate = $this->ExchangeRates[$source_cur]['RATE']; - } - else - { - $rate = ($this->ExchangeRates[$target_cur]['RATE'] == 0) ? false : $this->ExchangeRates[$source_cur]['RATE'] / $this->ExchangeRates[$target_cur]['RATE']; - } - $rate *= $units; - return $rate; - } - - function Convert($amount, $source_cur, $target_cur) - { - return $amount * $this->GetRate($source_cur, $target_cur); - } - - function SetRate($source_cur, $target_cur, $rate, $units = 1) - { - $this->ExchangeRates[$target_cur]['TARGET'] = $source_cur; - $this->ExchangeRates[$target_cur]['ID'] = $target_cur; - $this->ExchangeRates[$target_cur]['RATE'] = $rate; - $this->ExchangeRates[$target_cur]['UNITS'] = $units; - } - - function StoreRates($currencies=null) - { - $curr_object =& $this->Application->recallObject('curr', null, Array ('skip_autoload' => true)); - /* @var $curr_object kDBItem */ - - if ($currencies) { - if (!is_array($currencies)) { - $currencies = explode(',', $currencies); - } - } - else { - $currencies = array_keys($this->ExchangeRates); - } - - foreach ($currencies as $id) { - $rate = $this->GetRate($id, 'PRIMARY'); - if ($rate) { - $curr_object->Clear(); - $curr_object->Load($id, 'ISO'); - $curr_object->SetDBField('RateToPrimary', $rate); - $curr_object->SetDBField('Modified_date', adodb_mktime()); - $curr_object->SetDBField('Modified_time', adodb_mktime()); - $curr_object->Update(); - } - } - } -} - - -class kBankLVCurrencyRates extends kCurrencyRates { - - public function __construct() - { - $this->RateSource = 'http://www.bank.lv/ValutuKursi/XML/xml.cfm'; - - parent::__construct(); - } - - function GetRatesData() - { - $xml_parser = xml_parser_create(); - - $curl_helper =& $this->Application->recallObject('CurlHelper'); - /* @var $curl_helper kCurlHelper */ - - $xml = $curl_helper->Send($this->RateSource); - - xml_parse_into_struct($xml_parser, $xml, $struct, $index); - $data_res = Array(); - $currency = ''; - foreach($struct as $element) - { - switch($element['tag']) - { - case 'ID': - $currency = $element['value']; - $data_res[$currency]['ID'] = $currency; - $data_res[$currency]['TARGET'] = 'LVL'; - break; - case 'UNITS': - $data_res[$currency]['UNITS'] = $element['value']; - break; - case 'RATE': - $data_res[$currency]['RATE'] = $element['value']; - break; - default: - } - } - - if(!$data_res['LVL']) - { - $data_res['LVL']['ID'] = 'LVL'; - $data_res['LVL']['UNITS'] = 1; - $data_res['LVL']['TARGET'] = 'LVL'; - $data_res['LVL']['RATE'] = 1; - } - $this->ExchangeRates = $data_res; - } -} - - -class kECBCurrencyRates extends kCurrencyRates { - - public function __construct() - { - $this->RateSource = 'http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml'; - - parent::__construct(); - } - - function GetRatesData() - { - $xml_parser = xml_parser_create(); - - $curl_helper =& $this->Application->recallObject('CurlHelper'); - /* @var $curl_helper kCurlHelper */ - - $xml = $curl_helper->Send($this->RateSource); - - xml_parse_into_struct($xml_parser, $xml, $struct, $index); - $data_res = Array(); - foreach($struct as $element) - { - if(isset($element['attributes']) && isset($element['attributes']['CURRENCY'])) - { - $currency = $element['attributes']['CURRENCY']; - $data_res[$currency]['ID'] = $currency; - $data_res[$currency]['TARGET'] = 'EUR'; - $data_res[$currency]['UNITS'] = 1; - $data_res[$currency]['RATE'] = ($element['attributes']['RATE'] == 0) ? 0 : 1 / $element['attributes']['RATE']; - } - } - if(!$data_res['EUR']) - { - $data_res['EUR']['ID'] = 'EUR'; - $data_res['EUR']['UNITS'] = 1; - $data_res['EUR']['TARGET'] = 'EUR'; - $data_res['EUR']['RATE'] = 1; - } - $this->ExchangeRates = $data_res; - } -} - - -class kFRNYCurrencyRates extends kCurrencyRates { - - public function __construct() - { - $this->RateSource = 'http://www.ny.frb.org/markets/fxrates/FXtoXML.cfm?FEXdate=%s&FEXtime=1200'; - - parent::__construct(); - } - - function GetRatesData() - { - $curl_helper =& $this->Application->recallObject('CurlHelper'); - /* @var $curl_helper kCurlHelper */ - - for($i = 0; $i < 10; $i++) - { - $time = adodb_mktime() - $i * 3600 * 24; - $source_file = sprintf($this->RateSource, adodb_date('Y-m-d', $time)); - $xml = $curl_helper->Send($source_file); - - $xml_parser = xml_parser_create(); - xml_parse_into_struct($xml_parser, $xml, $struct, $index); - foreach($struct as $element) - { - if($element['tag'] == 'FRBNY:DATASET') - { - break; - } - } - if($element['type'] == 'open') - { - break; - } - } - if($element['type'] != 'open') - { - return false; - } - - foreach($struct as $element) - { - switch($element['tag']) - { - case 'FRBNY:SERIES': - $currency = $element['attributes']['UNIT']; - if($currency) - { - $data_res[$currency]['ID'] = $currency; - $data_res[$currency]['UNITS'] = 1; - } - break; - case 'FRBNY:CURR': - $data_res[$currency]['TARGET'] = $element['value']; - break; - case 'FRBNY:OBS_VALUE': - $data_res[$currency]['RATE'] = ($element['value'] == 0) ? 0 : 1 / $element['value']; - break; - default: - } - } - if(!$data_res['USD']) - { - $data_res['USD']['ID'] = 'USD'; - $data_res['USD']['UNITS'] = 1; - $data_res['USD']['TARGET'] = 'USD'; - $data_res['USD']['RATE'] = 1; - } - $this->ExchangeRates = $data_res; - } - -} \ No newline at end of file Index: units/gateways/gw_classes/gw_base.php =================================================================== --- units/gateways/gw_classes/gw_base.php (revision 14835) +++ units/gateways/gw_classes/gw_base.php (working copy) @@ -152,7 +152,9 @@ */ function ConvertCurrency($value, $iso, $format_value = true) { - $converter =& $this->Application->recallObject('kCurrencyRates'); + $converter =& $this->Application->recallObject('CurrencyRates'); + /* @var $converter CurrencyRates */ + $value = $converter->Convert($value, 'PRIMARY', $iso); return $format_value ? sprintf('%.2f', $value) : $value; } Index: units/helpers/bank_lv_currency_rates.php =================================================================== --- units/helpers/bank_lv_currency_rates.php (revision 0) +++ units/helpers/bank_lv_currency_rates.php (revision 0) @@ -0,0 +1,65 @@ +RateSource = 'http://www.bank.lv/ValutuKursi/XML/xml.cfm'; + + parent::__construct(); + } + + function GetRatesData() + { + $xml_parser = xml_parser_create(); + + $curl_helper =& $this->Application->recallObject('CurlHelper'); + /* @var $curl_helper kCurlHelper */ + + $xml = $curl_helper->Send($this->RateSource); + + xml_parse_into_struct($xml_parser, $xml, $struct, $index); + $data_res = Array(); + $currency = ''; + foreach($struct as $element) + { + switch($element['tag']) + { + case 'ID': + $currency = $element['value']; + $data_res[$currency]['ID'] = $currency; + $data_res[$currency]['TARGET'] = 'LVL'; + break; + case 'UNITS': + $data_res[$currency]['UNITS'] = $element['value']; + break; + case 'RATE': + $data_res[$currency]['RATE'] = $element['value']; + break; + default: + } + } + + if(!$data_res['LVL']) + { + $data_res['LVL']['ID'] = 'LVL'; + $data_res['LVL']['UNITS'] = 1; + $data_res['LVL']['TARGET'] = 'LVL'; + $data_res['LVL']['RATE'] = 1; + } + $this->ExchangeRates = $data_res; + } +} \ No newline at end of file Index: units/helpers/currency_rates.php =================================================================== --- units/helpers/currency_rates.php (revision 0) +++ units/helpers/currency_rates.php (revision 0) @@ -0,0 +1,118 @@ +GetRatesData(); + } + + function GetRatesData() + { + $cache_key = 'currency_rates[%CurrSerial%]'; + $rates = $this->Application->getCache($cache_key); + $primary = $this->Application->GetPrimaryCurrency(); + + if ($rates === false) { + $this->Conn->nextQueryCachable = true; + $sql = 'SELECT ISO, RateToPrimary + FROM ' . $this->Application->getUnitOption('curr', 'TableName') . ' + WHERE Status = ' . STATUS_ACTIVE; + $rates = $this->Conn->Query($sql); + + $this->Application->setCache($cache_key, $rates); + } + + foreach ($rates as $rate) { + $this->SetRate($primary, $rate['ISO'], $rate['RateToPrimary']); + } + } + + function GetRate($source_cur, $target_cur, $units = 1) + { + $source_cur = ($source_cur == 'PRIMARY') ? $this->Application->GetPrimaryCurrency() : $source_cur; + $target_cur = ($target_cur == 'PRIMARY') ? $this->Application->GetPrimaryCurrency() : $target_cur; + if($source_cur == $target_cur) + { + return 1; + } + + if($this->ExchangeRates[$target_cur]['TARGET'] == $source_cur) + { + $rate = ($this->ExchangeRates[$target_cur]['RATE'] == 0) ? false : 1 / $this->ExchangeRates[$target_cur]['RATE']; + } + elseif($this->ExchangeRates[$source_cur]['TARGET'] == $target_cur) + { + $rate = $this->ExchangeRates[$source_cur]['RATE']; + } + else + { + $rate = ($this->ExchangeRates[$target_cur]['RATE'] == 0) ? false : $this->ExchangeRates[$source_cur]['RATE'] / $this->ExchangeRates[$target_cur]['RATE']; + } + $rate *= $units; + return $rate; + } + + function Convert($amount, $source_cur, $target_cur) + { + return $amount * $this->GetRate($source_cur, $target_cur); + } + + function SetRate($source_cur, $target_cur, $rate, $units = 1) + { + $this->ExchangeRates[$target_cur]['TARGET'] = $source_cur; + $this->ExchangeRates[$target_cur]['ID'] = $target_cur; + $this->ExchangeRates[$target_cur]['RATE'] = $rate; + $this->ExchangeRates[$target_cur]['UNITS'] = $units; + } + + function StoreRates($currencies=null) + { + $curr_object =& $this->Application->recallObject('curr', null, Array ('skip_autoload' => true)); + /* @var $curr_object kDBItem */ + + if ($currencies) { + if (!is_array($currencies)) { + $currencies = explode(',', $currencies); + } + } + else { + $currencies = array_keys($this->ExchangeRates); + } + + foreach ($currencies as $id) { + $rate = $this->GetRate($id, 'PRIMARY'); + if ($rate) { + $curr_object->Clear(); + $curr_object->Load($id, 'ISO'); + $curr_object->SetDBField('RateToPrimary', $rate); + $curr_object->SetDBField('Modified_date', adodb_mktime()); + $curr_object->SetDBField('Modified_time', adodb_mktime()); + $curr_object->Update(); + } + } + } +} \ No newline at end of file Index: units/helpers/ecb_currency_rates.php =================================================================== --- units/helpers/ecb_currency_rates.php (revision 0) +++ units/helpers/ecb_currency_rates.php (revision 0) @@ -0,0 +1,56 @@ +RateSource = 'http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml'; + + parent::__construct(); + } + + function GetRatesData() + { + $xml_parser = xml_parser_create(); + + $curl_helper =& $this->Application->recallObject('CurlHelper'); + /* @var $curl_helper kCurlHelper */ + + $xml = $curl_helper->Send($this->RateSource); + + xml_parse_into_struct($xml_parser, $xml, $struct, $index); + $data_res = Array(); + foreach($struct as $element) + { + if(isset($element['attributes']) && isset($element['attributes']['CURRENCY'])) + { + $currency = $element['attributes']['CURRENCY']; + $data_res[$currency]['ID'] = $currency; + $data_res[$currency]['TARGET'] = 'EUR'; + $data_res[$currency]['UNITS'] = 1; + $data_res[$currency]['RATE'] = ($element['attributes']['RATE'] == 0) ? 0 : 1 / $element['attributes']['RATE']; + } + } + if(!$data_res['EUR']) + { + $data_res['EUR']['ID'] = 'EUR'; + $data_res['EUR']['UNITS'] = 1; + $data_res['EUR']['TARGET'] = 'EUR'; + $data_res['EUR']['RATE'] = 1; + } + $this->ExchangeRates = $data_res; + } +} \ No newline at end of file Index: units/helpers/frny_currency_rates.php =================================================================== --- units/helpers/frny_currency_rates.php (revision 0) +++ units/helpers/frny_currency_rates.php (revision 0) @@ -0,0 +1,86 @@ +RateSource = 'http://www.ny.frb.org/markets/fxrates/FXtoXML.cfm?FEXdate=%s&FEXtime=1200'; + + parent::__construct(); + } + + function GetRatesData() + { + $curl_helper =& $this->Application->recallObject('CurlHelper'); + /* @var $curl_helper kCurlHelper */ + + for($i = 0; $i < 10; $i++) + { + $time = adodb_mktime() - $i * 3600 * 24; + $source_file = sprintf($this->RateSource, adodb_date('Y-m-d', $time)); + $xml = $curl_helper->Send($source_file); + + $xml_parser = xml_parser_create(); + xml_parse_into_struct($xml_parser, $xml, $struct, $index); + foreach($struct as $element) + { + if($element['tag'] == 'FRBNY:DATASET') + { + break; + } + } + if($element['type'] == 'open') + { + break; + } + } + if($element['type'] != 'open') + { + return false; + } + + foreach($struct as $element) + { + switch($element['tag']) + { + case 'FRBNY:SERIES': + $currency = $element['attributes']['UNIT']; + if($currency) + { + $data_res[$currency]['ID'] = $currency; + $data_res[$currency]['UNITS'] = 1; + } + break; + case 'FRBNY:CURR': + $data_res[$currency]['TARGET'] = $element['value']; + break; + case 'FRBNY:OBS_VALUE': + $data_res[$currency]['RATE'] = ($element['value'] == 0) ? 0 : 1 / $element['value']; + break; + default: + } + } + if(!$data_res['USD']) + { + $data_res['USD']['ID'] = 'USD'; + $data_res['USD']['UNITS'] = 1; + $data_res['USD']['TARGET'] = 'USD'; + $data_res['USD']['RATE'] = 1; + } + $this->ExchangeRates = $data_res; + } + +} \ No newline at end of file Index: units/helpers/helpers_config.php =================================================================== --- units/helpers/helpers_config.php (revision 14835) +++ units/helpers/helpers_config.php (working copy) @@ -10,5 +10,9 @@ 'RegisterClasses' => Array ( Array ('pseudo' => 'OrderHelper', 'class' => 'OrderHelper', 'file' => 'order_helper.php', 'build_event' => '', 'require_classes' => 'kHelper'), + Array ('pseudo' => 'CurrencyRates', 'class' => 'CurrencyRates', 'file' => 'currency_rates.php', 'build_event' => ''), + Array ('pseudo' => 'BankLVCurrencyRates', 'class' => 'BankLVCurrencyRates', 'file' => 'bank_lv_currency_rates.php', 'require_classes' => 'CurrencyRates', 'build_event' => ''), + Array ('pseudo' => 'ECBCurrencyRates', 'class' => 'ECBCurrencyRates', 'file' => 'ecb_currency_rates.php', 'require_classes' => 'CurrencyRates', 'build_event' => ''), + Array ('pseudo' => 'FRNYCurrencyRates', 'class' => 'FRNYCurrencyRates', 'file' => 'frny_currency_rates.php', 'require_classes' => 'CurrencyRates', 'build_event' => ''), ), ); Index: units/helpers/order_helper.php =================================================================== --- units/helpers/order_helper.php (revision 14835) +++ units/helpers/order_helper.php (working copy) @@ -109,8 +109,8 @@ function convertCurrency($amount, $currency) { - $converter =& $this->Application->recallObject('kCurrencyRates'); - /* @var $converter kCurrencyRates */ + $converter =& $this->Application->recallObject('CurrencyRates'); + /* @var $converter CurrencyRates */ // convert primary currency to selected (if they are the same, converter will just return) return (float)$converter->Convert($amount, 'PRIMARY', $this->getISO($currency)); Index: units/pricing/pricing_tag_processor.php =================================================================== --- units/pricing/pricing_tag_processor.php (revision 14835) +++ units/pricing/pricing_tag_processor.php (working copy) @@ -33,7 +33,9 @@ // convert primary currency to selected (if they are the same, converter will just return) - $converter =& $this->Application->recallObject('kCurrencyRates'); + $converter =& $this->Application->recallObject('CurrencyRates'); + /* @var $converter CurrencyRates */ + $price = $converter->Convert($price, 'PRIMARY', $iso); $currency =& $this->Application->recallObject('curr.-'.$iso, null, Array('skip_autoload' => true));