Page MenuHomeIn-Portal Phabricator

in-commerce
No OneTemporary

File Metadata

Created
Mon, Feb 24, 9:51 PM

in-commerce

Index: branches/5.2.x/units/helpers/currency_rates.php
===================================================================
--- branches/5.2.x/units/helpers/currency_rates.php (revision 15366)
+++ branches/5.2.x/units/helpers/currency_rates.php (revision 15367)
@@ -1,118 +1,153 @@
<?php
/**
* @version $Id$
* @package In-Commerce
* @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
* @license Commercial License
* This software is protected by copyright law and international treaties.
* Unauthorized reproduction or unlicensed usage of the code of this program,
* or any portion of it may result in severe civil and criminal penalties,
* and will be prosecuted to the maximum extent possible under the law
* See http://www.in-portal.org/commercial-license for copyright notices and details.
*/
defined('FULL_PATH') or die('restricted access!');
class CurrencyRates extends kBase {
var $RateSource;
var $ExchangeRates = Array();
/**
* Creates currency rate update class
*
* @access public
*/
public function __construct()
{
parent::__construct();
$this->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 AddCurrencySymbol($value, $iso, $decimal_tag = '')
+ {
+ static $decimal_separator = false;
+
+ $cache_key = 'iso_masks[%CurrSerial%]';
+ $iso_masks = $this->Application->getCache($cache_key);
+
+ if ( $iso_masks === false ) {
+ $this->Conn->nextQueryCachable = true;
+ $symbol_sql = 'IF(COALESCE(Symbol, "") = "", CONCAT(ISO, "&nbsp;"), Symbol)';
+
+ $sql = 'SELECT IF(SymbolPosition = 0, CONCAT(' . $symbol_sql . ', "%s"), CONCAT("%s", ' . $symbol_sql . ')), LOWER(ISO) AS ISO
+ FROM ' . $this->Application->getUnitOption('curr', 'TableName') . '
+ WHERE Status = ' . STATUS_ACTIVE;
+ $iso_masks = $this->Conn->GetCol($sql, 'ISO');
+ $this->Application->setCache($cache_key, $iso_masks);
+ }
+
+ if ( $decimal_tag ) {
+ if ( $decimal_separator === false ) {
+ $language = $this->Application->recallObject('lang.current');
+ /* @var $language LanguagesItem */
+
+ $decimal_separator = $language->GetDBField('DecimalPoint');
+ }
+
+ list ($integer_part, $decimal_part) = explode($decimal_separator, $value);
+ $value = $integer_part . $decimal_separator . '<' . $decimal_tag . '>' . $decimal_part . '</' . $decimal_tag . '>';
+ }
+
+ $iso = strtolower($iso);
+
+ return array_key_exists($iso, $iso_masks) ? sprintf($iso_masks[$iso], $value) : $value;
+ }
+
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();
}
}
}
}

Event Timeline