Коллеги, помогите пожалуйста.
Есть модификатор, который источник обновления валют - ЦБРФ:
<?xml version="1.0" encoding="utf-8"?>
<modification>
<name><![CDATA[<b style='color:green;'>Курсы валют ЦБ РФ</b>]]></name>
<code>rf_currency.ocmod</code>
<version>0.1</version>
<author><![CDATA[<b style='color:green;'>Ruslan Kozub</b>]]></author>
<link>
[email protected]</link>
<file path="admin/model/localisation/currency.php">
<operation>
<search><![CDATA[public function refresh($force = false) {]]></search>
<add position="before">
<![CDATA[
// modification - rf_currency.ocmod - part #1 - Курсы фалют ЦБ РФ
public function refreshRF($force = false) {
$currenciesForUpdate = array();
$defaultCurrency = $this->config->get('config_currency');
if ($force) {
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "currency WHERE code != '" . $this->db->escape($defaultCurrency) . "'");
} else {
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "currency WHERE code != '" . $this->db->escape($defaultCurrency) . "' AND date_modified < '" . $this->db->escape(date('Y-m-d H:i:s', strtotime('-1 day'))) . "'");
}
/* Валют для обновления не нашли */
if (! $query->num_rows) {
return false;
}
$currenciesForUpdate[$defaultCurrency] = 1;
foreach ($query->rows as $result) {
$currenciesForUpdate[$result['code']] = 1;
}
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'http://www.cbr.ru/scripts/XML_daily.asp');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl, CURLOPT_TIMEOUT, 30);
$content = curl_exec($curl);
curl_close($curl);
/* Ошибка выходим */
if (! $content) {
return false;
}
$currenciesRF = simplexml_load_string($content);
/* Ошибка выходим */
if (! $currenciesRF || count($currenciesRF) == 0) {
return false;
}
foreach ($currenciesRF as $currency) {
if (isset($currenciesForUpdate[(string)$currency->CharCode]) && $currency->Nominal > 0) {
$currenciesForUpdate[(string)$currency->CharCode] = str_replace(',', '.', (string)$currency->Value) / $currency->Nominal;
}
}
foreach ($currenciesForUpdate as $code => $val) {
if ($code != $defaultCurrency) {
$currenciesForUpdate[$code] = $currenciesForUpdate[$defaultCurrency] / $val;
}
}
$currenciesForUpdate[$defaultCurrency] = 1;
foreach ($currenciesForUpdate as $code => $val) {
$this->db->query("UPDATE " . DB_PREFIX . "currency SET value = '" . (float)$val . "', date_modified = '" . $this->db->escape(date('Y-m-d H:i:s')) . "' WHERE code = '" . $this->db->escape($code) . "'");
}
$this->cache->delete('currency');
}
// end modification - rf_currency.ocmod - part #1 - Курсы фалют ЦБ РФ
]]>
</add>
</operation>
<operation>
<search><![CDATA[public function refresh($force = false) {]]></search>
<add position="replace" offset="2"><![CDATA[
// modification - rf_currency.ocmod - part #2 - Курсы фалют ЦБ РФ
public function refresh($force = false) {
$data = array();
return $this->refreshRF($force);
// end modification - rf_currency.ocmod - part #2 - Курсы фалют ЦБ РФ
]]></add>
</operation>
</file>
</modification>
Файл currency-updater.php :
<?php
require_once('config.php');
require_once(DIR_SYSTEM . 'startup.php');
$registry = new Registry();
$loader = new Loader($registry);
$cache = new Cache('file');
$registry->set('cache', $cache);
$registry->set('load', $loader);
$config = new Config();
$registry->set('config', $config);
$db = new DB(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE, DB_PORT);
$registry->set('db', $db);
global $loader, $registry;
$query = $db->query("SELECT * FROM " . DB_PREFIX . "setting WHERE store_id = '0'");
foreach ($query->rows as $setting) {
if (!$setting['serialized']) {
$config->set($setting['key'], $setting['value']);
} else {
$config->set($setting['key'], json_decode($setting['value'], true));
}
}
$loader->model('localisation/currency');
$model = $registry->get('model_localisation_currency');
$model->refresh(true);
$cache = new Cache('file');
$registry->set('cache', $cache);
?>
Ошибка CRON такая:
PHP Notice: Undefined index: SERVER_PORT in /home/ЛОГИН/domains/САЙТ/public_html/system/startup.php on line 40
PHP Fatal error: Call to a member function trigger() on null in /home/ЛОГИН/domains/САЙТ/public_html/system/storage/modification/system/engine/loader.php on line 42
Строки файлов:
startup.php on line 40
if ((isset($_SERVER['HTTPS']) && (($_SERVER['HTTPS'] == 'on') || ($_SERVER['HTTPS'] == '1'))) || $_SERVER['SERVER_PORT'] == 443) {
loader.php on line 42
$this->registry->get('event')->trigger('model/' . $route . '/before', array(&$route));
===
Сайт https. OcStore 2.3.0.2.3. Пробовал отключать модификатор для ЦБ - результат тот же.
Не могу решить задачу, заставить обновляться с ЦБ по крону...
Помогите, пожалуйста,..