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 BrestDate: 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();