Если в таблице настроек уведомлений нет записи для транспорта то такие уведомления считаются включенными для этого транспорта


#1

CS-Cart 4.13.3

Суть проблемы: Если добавить свой транспорт уведомлений для текущих событий то записи настроек в таблице notification_settings не создаются. При этом на странице настроек уведомлений для нового транспорта все уведомления включены. Соответственно транспорт не отправляет уведомления так как в настройках он не включен (вызывает ошибку отправки сообщения)

Как воспроизвести проблему: Заходим в таблицу notification_settings и удаляем запись для event_id == order.status_changed.o и reciver == C Потом пробуем для заказа изменить статус на Открыт с уведомлением покупателя
Или можно проверить на модуле Центр сообщений. Удалите модуль, в таблице БД notification_settings удалите 2 строки с event_id == vendor_communication.order_message_received и event_id == vendor_communication.message_received. Потом установите модуль. Сообщения по событиям удаленных event_id будут вызывать ошибку, но если зайти в раздел управления уведомлениями для администраторов то для транспорта “Центр уведомлений” все доступные события включены (на самом деле значения allow в notification_settings не установлены, т.к. отсутствуют соответствующие записи)

Как решить проблему: class EventDispatcherProvider строка 147
$callback = isset($stored_notification_settings[$event_id][$receiver_id][$transport_id])
? $stored_notification_settings[$event_id][$receiver_id][$transport_id]
: true;
$callback возвращает true если в таблице настроек нет записи для текущего транспорта и события, а должен возвращать false (логично же если записи указывающей на то что включен нет)