DIR : /home/kozerus/public_html/zc/adam/includes/functions/localization.php
/home/kozerus/public_html/zc/adam/includes/functions
<?php
/**
* @copyright Copyright 2003-2020 Zen Cart Development Team
* @copyright Portions Copyright 2003 osCommerce
* @license http://www.zen-cart.com/license/2_0.txt GNU Public License V2.0
* @version $Id: DrByte 2020 Jun 16 Modified in v1.5.7 $
*/
/**
* Dependencies:
* - DB class must be instantiated as $db (done normally by application_top)
* - functions_general.php or general.php must be loaded (for zen_set_time_limit() and zen_not_null() to be available) (done normally by application_top)
* - if any additional currency-update plugins are installed, those plugins' functions must be loaded (done normally by admin application_top)
* NOTE: admin application_top cannot be loaded successfully without an admin login ID.
*/
function zen_update_currencies($cli_Output = FALSE)
{
global $db, $messageStack, $zco_notifier;
zen_set_time_limit(600);
$currency = $db->Execute("SELECT currencies_id, code, title, decimal_places FROM " . TABLE_CURRENCIES);
while (!$currency->EOF) {
$server_used = CURRENCY_SERVER_PRIMARY;
$rate = '';
$quote_function = 'quote_' . CURRENCY_SERVER_PRIMARY . '_currency';
if (function_exists($quote_function)) $rate = $quote_function($currency->fields['code']);
if (empty($rate) && (zen_not_null(CURRENCY_SERVER_BACKUP))) {
// failed to get currency quote from primary server - attempting to use backup server instead
$msg = sprintf(WARNING_PRIMARY_SERVER_FAILED, CURRENCY_SERVER_PRIMARY, $currency->fields['title'], $currency->fields['code']);
if (is_object($messageStack)) {
$messageStack->add_session($msg, 'warning');
} elseif ($cli_Output) {
echo "$msg\n";
}
$quote_function = 'quote_' . CURRENCY_SERVER_BACKUP . '_currency';
if (function_exists($quote_function)) $rate = $quote_function($currency->fields['code']);
$server_used = CURRENCY_SERVER_BACKUP;
}
if (zen_not_null($rate) && $rate > 0) {
/* Add currency uplift */
$multiplier = (defined('CURRENCY_UPLIFT_RATIO') && (int)CURRENCY_UPLIFT_RATIO != 0) ? CURRENCY_UPLIFT_RATIO : 0;
$zco_notifier->notify('ADMIN_CURRENCY_EXCHANGE_RATE_MULTIPLIER', $currency->fields['code'], $multiplier, $rate);
if ($rate != 1 && $multiplier > 0) {
$rate = (string)((float)$rate * (float)$multiplier);
}
// special handling for currencies which don't support decimal places
if ($currency->fields['decimal_places'] == '0') {
$rate = (int)$rate;
}
if (zen_not_null($rate) && $rate > 0) {
$zco_notifier->notify('ADMIN_CURRENCY_EXCHANGE_RATE_SINGLE', $currency->fields['code'], $rate);
$db->Execute("UPDATE " . TABLE_CURRENCIES . "
SET value = '" . round((float)$rate, 8) . "', last_updated = now()
WHERE currencies_id = '" . (int)$currency->fields['currencies_id'] . "'");
$msg = sprintf(TEXT_INFO_CURRENCY_UPDATED, $currency->fields['title'], $currency->fields['code'], round((float)$rate, 8), $server_used);
if (is_object($messageStack)) {
$messageStack->add_session($msg, 'success');
} elseif ($cli_Output) {
echo "$msg\n";
}
} else {
$msg = sprintf(ERROR_CURRENCY_INVALID, $currency->fields['title'], $currency->fields['code'], $server_used);
if (is_object($messageStack)) {
$messageStack->add_session($msg, 'error');
} elseif ($cli_Output) {
echo "$msg\n";
}
}
}
$currency->MoveNext();
}
if (function_exists('zen_record_admin_activity')) zen_record_admin_activity('Currency exchange rates updated: ' . $msg, 'info');
$zco_notifier->notify('ADMIN_CURRENCY_EXCHANGE_RATES_UPDATED', $msg);
}
/**
* ECB Rates - based on data format in July 2017
*
* @param string $currencyCode requested
* @param string $base currency code
* @return int|float
*/
function quote_ecb_currency($currencyCode = '', $base = DEFAULT_CURRENCY)
{
if ($currencyCode == $base) return 1;
static $XMLContent = array();
$url = 'https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml';
if (empty($XMLContent)) {
$XMLContent = @file($url);
if (empty($XMLContent) && function_exists('curl_init')) {
$XMLContent = doCurlCurrencyRequest('GET', $url);
$XMLContent = explode("\n", $XMLContent);
}
}
$currencyArray = array();
$currencyArray['EUR'] = 1; // quoting ECB bank, so EUR is always = 1
$rate = 1;
$line = '';
foreach ($XMLContent as $line) {
if (preg_match("/currency='([[:alpha:]]+)'/", $line, $reg)) {
if (preg_match("/rate='([[:graph:]]+)'/", $line, $rateVal)) {
$currencyArray[$reg[1]] = (float)$rateVal[1];
}
}
}
if (!isset($currencyArray[$base]) || 0 == $currencyArray[$base]) return ''; // no valid value, so abort
$rate = (string)((float)$currencyArray[$currencyCode] / $currencyArray[$base]);
return $rate;
}
/**
* BOC Rates - based on data format in July 2017
*
* @param string $currencyCode requested
* @param string $base currency code
* @return bool|float
*/
function quote_boc_currency($currencyCode = '', $base = DEFAULT_CURRENCY)
{
if ($currencyCode == $base) return 1;
$requested = $currencyCode;
$url = 'https://www.bankofcanada.ca/valet/observations/group/FX_RATES_DAILY/json';
static $BOCdata = array();
if (empty($BOCdata)) {
$result = doCurlCurrencyRequest('GET', $url);
// if still empty, abort
if (empty($result)) return false;
$BOCdata = json_decode($result, true);
if (empty($BOCdata) || empty($BOCdata['observations'])) return false; // no data means unable to continue with updates
}
// grab the last date data reported
$values = array_pop($BOCdata['observations']);
// if nothing found, attempt to get the next-last item
if (empty($values)) {
$values = array_pop($BOCdata['observations']);
}
if (empty($values) || !is_array($values)) return false;
$lookup = 'FX' . strtoupper($requested) . 'CAD';
$default = 'FX' . strtoupper($base) . 'CAD';
$values['FXCADCAD']['v'] = 1; // quoting BOC so CAD is always = 1
if (!empty($values[$default]['v']) && !empty($values[$lookup]['v'])) {
return (string)($values[$default]['v'] / $values[$lookup]['v']);
}
return false;
}
function doCurlCurrencyRequest($method, $url, $vars = '') {
//echo '-----------------<br />';
//echo 'URL: ' . $url . ' VARS: ' . $vars . '<br />';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_VERBOSE, 0);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_USERAGENT, empty($_SERVER['HTTP_USER_AGENT']) ? HTTP_CATALOG_SERVER . DIR_WS_CATALOG : $_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch, CURLOPT_REFERER, HTTP_CATALOG_SERVER . DIR_WS_CATALOG);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
if (strtoupper($method) == 'POST' && $vars != '') {
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);
}
if (CURL_PROXY_REQUIRED == 'True') {
$proxy_tunnel_flag = (defined('CURL_PROXY_TUNNEL_FLAG') && strtoupper(CURL_PROXY_TUNNEL_FLAG) == 'FALSE') ? false : true;
curl_setopt ($ch, CURLOPT_HTTPPROXYTUNNEL, $proxy_tunnel_flag);
curl_setopt ($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
curl_setopt ($ch, CURLOPT_PROXY, CURL_PROXY_SERVER_DETAILS);
}
$data = curl_exec($ch);
$error = curl_error($ch);
//$info=curl_getinfo($ch);
curl_close($ch);
if ($error != '') {
global $messageStack;
if (is_object($messageStack)) $messageStack->add_session('cURL communication ERROR: ' . $error, 'error');
}
//echo 'INFO: <pre>'; print_r($info); echo '</pre><br />';
//echo 'ERROR: ' . $error . '<br />';
//print_r($data) ;
if ($data != '') {
return $data;
}
return $error;
}
function zen_datepicker_format_full() {
// converts mm-dd-yy to MM-DD-YYYY
return str_replace("YY","YYYY", strtoupper(DATE_FORMAT_DATE_PICKER));
}
function zen_datepicker_format_fordate() {
// converts mm-dd-yy to m-d-Y
$date = DATE_FORMAT_DATE_PICKER;
$date = str_replace('mm','m', $date);
$date = str_replace('dd','d', $date);
$date = str_replace('yy','Y', $date);
return $date;
}
function zen_datepicker_format_forsql() {
// converts mm-dd-yy to %m-%d-%Y
$date = DATE_FORMAT_DATE_PICKER;
$date = str_replace('mm','%m', $date);
$date = str_replace('dd','%d', $date);
$date = str_replace('yy','%Y', $date);
return $date;
}
//
koh5_pano
Drag mouse to navigate.
Navigation
- Left/Right Mouse drag: Changes camera heading.
- Up/Sown Mouse drag: Changes camera pitch.
- Scroll wheel: Changes camera field of view.
- I-Key: Displays Info panel with canvas size, image size and FPS.
17.Aug.2010, Martin Wengenmayer