Opencart 2.0.1.1 bugfix: отправление отзывов к товару

Починил ошибку при отправлении email-уведомлений админу, когда покупатель оставляет отзыв к товару. Из-за неё скорей всего форма отзыва вела себя невнятно, не показывая покупателю, что всё уже случилось и жизнь прекрасна.

В результате было непонятно, что вообще произошло, пользователи отправляли по несколько отзывов (самые прилежные), а лог ошибок опенкарта заполнялся строчками, причину и место возникновения которых хрен угадаешь:

2014-12-30 18:44:07 - PHP Warning:  html_entity_decode() expects parameter 1 to be
string, array given in /..../system/library/mail.php on line 30
2014-12-30 18:44:07 - PHP Notice:  Error: E-Mail to required!
in /..../system/library/mail.php on line 63

Админ также не получал уведомлений о непроверенных отзывах, что тоже печально и грустно и не способствует повышению доверия между покупателем и магазином.

Лечится так

Простыми словами:

  • открываем catalog/model/catalog/review.php,
  • ищем строку $mail->setTo(array($this->config->get('config_email')));
  • и убираем `array(` с одной стороны и лишний `)` с другой.

Вторая добавка там же рядом, чуть ниже (см. diff) - чтобы избежать ошибок при отправке уведомлений по списку email-ов другим админам магазина. Уведомления отправляются на email владельца магазна (указывается в настройках магазина) и по списку дополнительных адресов в настройках, разделённому запятыми. Если у вас вокруг запятых затешутся пробелы - будут ошибки.

Цветными словами:

commit 870bb1469173e9ec28346408bc19838838c6fd17
Author: Ruslan Brest <rb@labtodo.com>
Date:   Sat Jan 10 20:47:00 2015 -0500
    [!] fix admin email notification sending when customer posts product review
diff --git a/catalog/model/catalog/review.php b/catalog/model/catalog/review.php
index 2eeab26..ae23828 100644
--- a/catalog/model/catalog/review.php
+++ b/catalog/model/catalog/review.php
@@ -22,7 +22,7 @@ class ModelCatalogReview extends Model {
                        $message .= $this->db->escape(strip_tags($data['text'])) . "\n\n";
 
                        $mail = new Mail($this->config->get('config_mail'));
-                       $mail->setTo(array($this->config->get('config_email')));
+                       $mail->setTo($this->config->get('config_email'));
                        $mail->setFrom($this->config->get('config_email'));
                        $mail->setSender($this->config->get('config_name'));
                        $mail->setSubject($subject);
@@ -33,6 +33,7 @@ class ModelCatalogReview extends Model {
                        $emails = explode(',', $this->config->get('config_mail_alert'));
 
                        foreach ($emails as $email) {
+                               $email = trim($email);
                                if ($email && preg_match('/^[^\@]+@.*.[a-z]{2,15}$/i', $email)) {
                                        $mail->setTo($email);
                                        $mail->send();