From cdd0a6aaa9c338ae7a4e1f4804c684fd408b5011 Mon Sep 17 00:00:00 2001 From: kyrena <78410399+kyrena@users.noreply.github.com> Date: Fri, 27 Oct 2023 12:07:19 +0200 Subject: [PATCH 1/5] Log exception when importing currencies --- .../core/Mage/Directory/Model/Observer.php | 57 +++++++++++-------- 1 file changed, 32 insertions(+), 25 deletions(-) diff --git a/app/code/core/Mage/Directory/Model/Observer.php b/app/code/core/Mage/Directory/Model/Observer.php index b5503c34c28..d594189fa29 100644 --- a/app/code/core/Mage/Directory/Model/Observer.php +++ b/app/code/core/Mage/Directory/Model/Observer.php @@ -22,49 +22,56 @@ class Mage_Directory_Model_Observer { public const CRON_STRING_PATH = 'crontab/jobs/currency_rates_update/schedule/cron_expr'; - public const IMPORT_ENABLE = 'currency/import/enabled'; - public const IMPORT_SERVICE = 'currency/import/service'; + public const IMPORT_ENABLE = 'currency/import/enabled'; + public const IMPORT_SERVICE = 'currency/import/service'; - public const XML_PATH_ERROR_TEMPLATE = 'currency/import/error_email_template'; - public const XML_PATH_ERROR_IDENTITY = 'currency/import/error_email_identity'; + public const XML_PATH_ERROR_TEMPLATE = 'currency/import/error_email_template'; + public const XML_PATH_ERROR_IDENTITY = 'currency/import/error_email_identity'; public const XML_PATH_ERROR_RECIPIENT = 'currency/import/error_email'; /** + * @param Mage_Cron_Model_Schedule|null $cron * @throws Mage_Core_Exception */ - public function scheduledUpdateCurrencyRates() + public function scheduledUpdateCurrencyRates($cron = null) { - $importWarnings = []; if (!Mage::getStoreConfig(self::IMPORT_ENABLE) || !Mage::getStoreConfig(self::CRON_STRING_PATH)) { return; } - $service = Mage::getStoreConfig(self::IMPORT_SERVICE); - if (!$service) { - $importWarnings[] = Mage::helper('directory')->__('FATAL ERROR:') . ' ' . Mage::helper('directory')->__('Invalid Import Service specified.'); - } + $errors = []; + $service = (string)Mage::getStoreConfig(self::IMPORT_SERVICE); - try { - /** @var Mage_Directory_Model_Currency_Import_Abstract $importModel */ - $importModel = Mage::getModel(Mage::getConfig()->getNode('global/currency/import/services/' . $service . '/model')->asArray()); - } catch (Exception $e) { - $importWarnings[] = Mage::helper('directory')->__('FATAL ERROR:') . ' ' . Mage::throwException(Mage::helper('directory')->__('Unable to initialize the import model.')); + if ($service) { + try { + /** @var Mage_Directory_Model_Currency_Import_Abstract $importModel */ + $importModel = Mage::getModel(Mage::getConfig()->getNode('global/currency/import/services/' . $service . '/model')->asArray()); + } catch (Exception $e) { + $errors[] = 'FATAL ERROR: Unable to initialize the import model (' . $e->getMessage() . ').'; + } + } else { + $errors[] = 'FATAL ERROR: Invalid Import Service specified (' . $service . ').'; } - $rates = $importModel->fetchRates(); - $errors = $importModel->getMessages(); - - if (count($errors)) { - foreach ($errors as $error) { - $importWarnings[] = Mage::helper('directory')->__('WARNING:') . ' ' . $error; - } + if (is_object($importModel)) { + $rates = $importModel->fetchRates(); + $errors = $importModel->getMessages(); } - if (!count($importWarnings)) { + if (!count($errors)) { Mage::getModel('directory/currency')->saveRates($rates); } else { - $translate = Mage::getSingleton('core/translate'); + $errors = 'An error occured while importing currency rates, no rates updated.' . "\n- " . implode("\n- ", $errors); + + Mage::logException(new Exception($errors)); + if (is_object($cron)) { + /** @var Mage_Cron_Model_Schedule $cron */ + $cron->setMessages($errors); + $cron->setIsError(true); + } + /** @var Mage_Core_Model_Translate $translate */ + $translate = Mage::getSingleton('core/translate'); $translate->setTranslateInline(false); /** @var Mage_Core_Model_Email_Template $mailTemplate */ @@ -77,7 +84,7 @@ public function scheduledUpdateCurrencyRates() Mage::getStoreConfig(self::XML_PATH_ERROR_RECIPIENT), null, [ - 'warnings' => implode("\n", $importWarnings), + 'warnings' => $errors, ] ); From fbbddf406b4286ae47dbd0d92b6d159be334aeb3 Mon Sep 17 00:00:00 2001 From: kyrena <78410399+kyrena@users.noreply.github.com> Date: Fri, 27 Oct 2023 12:11:20 +0200 Subject: [PATCH 2/5] Remove unused translations --- app/locale/en_US/Mage_Directory.csv | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/locale/en_US/Mage_Directory.csv b/app/locale/en_US/Mage_Directory.csv index e2996a234cd..bea74fa9e53 100644 --- a/app/locale/en_US/Mage_Directory.csv +++ b/app/locale/en_US/Mage_Directory.csv @@ -25,7 +25,6 @@ "Error Email Recipient","Error Email Recipient" "Error Email Sender","Error Email Sender" "Error Email Template","Error Email Template" -"FATAL ERROR:","FATAL ERROR:" "Fixer.IO","Fixer.IO" "Frequency","Frequency" "Installed Currencies","Installed Currencies" @@ -52,9 +51,7 @@ "The account this API request is coming from is inactive.","The account this API request is coming from is inactive." "The current request did not return any results.","The current request did not return any results." "The maximum allowed API amount of monthly API requests has been reached.","The maximum allowed API amount of monthly API requests has been reached." -"Unable to initialize the import model.","Unable to initialize the import model." "Undefined rate from ""%s-%s"".","Undefined rate from ""%s-%s""." -"WARNING:","WARNING:" "We can't retrieve a rate from %s for %s.","We can't retrieve a rate from %s for %s." "Webservicex","Webservicex" "Your Currency","Your Currency" From 99c85dbd618fb3336e8cc5cf0cb21a88e43a8bd3 Mon Sep 17 00:00:00 2001 From: kyrena <78410399+kyrena@users.noreply.github.com> Date: Fri, 27 Oct 2023 12:22:12 +0200 Subject: [PATCH 3/5] Remove $importModel override --- phpstan.dist.baseline.neon | 5 ----- 1 file changed, 5 deletions(-) diff --git a/phpstan.dist.baseline.neon b/phpstan.dist.baseline.neon index 8a1e7f903af..6feaf2f9c6f 100644 --- a/phpstan.dist.baseline.neon +++ b/phpstan.dist.baseline.neon @@ -3020,11 +3020,6 @@ parameters: count: 1 path: app/code/core/Mage/Directory/Model/Currency/Import/Webservicex.php - - - message: "#^Variable \\$importModel might not be defined\\.$#" - count: 2 - path: app/code/core/Mage/Directory/Model/Observer.php - - message: "#^Left side of && is always true\\.$#" count: 1 From 826c418df6c389ec48e095db21c44527049a8bcb Mon Sep 17 00:00:00 2001 From: kyrena <78410399+kyrena@users.noreply.github.com> Date: Fri, 27 Oct 2023 12:24:54 +0200 Subject: [PATCH 4/5] Declare $importModel --- app/code/core/Mage/Directory/Model/Observer.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/code/core/Mage/Directory/Model/Observer.php b/app/code/core/Mage/Directory/Model/Observer.php index d594189fa29..4f5e06c0772 100644 --- a/app/code/core/Mage/Directory/Model/Observer.php +++ b/app/code/core/Mage/Directory/Model/Observer.php @@ -41,6 +41,7 @@ public function scheduledUpdateCurrencyRates($cron = null) $errors = []; $service = (string)Mage::getStoreConfig(self::IMPORT_SERVICE); + $importModel = null; if ($service) { try { From 4d6b64f70a16975a36a049ce4888e3613b7888c8 Mon Sep 17 00:00:00 2001 From: kyrena <78410399+kyrena@users.noreply.github.com> Date: Fri, 27 Oct 2023 12:31:34 +0200 Subject: [PATCH 5/5] Check $rates --- app/code/core/Mage/Directory/Model/Observer.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/core/Mage/Directory/Model/Observer.php b/app/code/core/Mage/Directory/Model/Observer.php index 4f5e06c0772..08f91efaf95 100644 --- a/app/code/core/Mage/Directory/Model/Observer.php +++ b/app/code/core/Mage/Directory/Model/Observer.php @@ -59,7 +59,7 @@ public function scheduledUpdateCurrencyRates($cron = null) $errors = $importModel->getMessages(); } - if (!count($errors)) { + if (isset($rates) && !count($errors)) { Mage::getModel('directory/currency')->saveRates($rates); } else { $errors = 'An error occured while importing currency rates, no rates updated.' . "\n- " . implode("\n- ", $errors);