Cotonti / Cotonti

Fast, reliable and flexible PHP CMF/CMS
https://www.cotonti.com
BSD 3-Clause "New" or "Revised" License
92 stars 51 forks source link

Forum: notifications about new messages in the topic #1787

Open Alex300 opened 1 month ago

Alex300 commented 1 month ago

1) In the topic, show a drop-down list:
Receive notifications about new messages in this topic: none/in private messages/by email

2) There should be a text at the bottom of the letter: you received this letter because you subscribed to notifications in the topic... and the "unsubscribe" link

3) Perhaps for this we need to make a common MessageSender component, its sent method allows to send a message to the user using the specified transports

MessageSender::send($recipient, string $text, $transports)**

The subscription storage table should be shared across the entire site. It can store: id, user_id, subject (user id, subscription code). The second table contains a list of transports for subscription. So the user can be unsubscribed from all subscriptions with two requests.

[RU]

1) В теме форума вывести выпадающий список Получать уведомления о новых сообщениях в этой теме: нет/в личные сообщения/на email (Или, лучше, возможность выбора несколько вариантов)

2) Внизу письма должен быть текст: вы получили это письмо т.к. подписаны на уведомления в теме ... и ссылка "отписаться"

3) В личном кабинете пользователя вывести список активных подписок, чтобы он мог отписаться. Возможно на отдельной странице в модуле Users

4) Возможно для этого нужно сделать общий MessageSender, метод sent которого позволяет отправлять сообщение пользователю указанными транспортами

MessageSender::send($recipient, string $text, $transports)** 

и метод для рассылки сообщения множеству пользователей каким то одним транспортом:

MessageSender::sendToAll($recipients, string $text, $transport, $params)** 

(Текст может содержать плейсхолдеры {userName}, {someThingElse}. Массив $params - ключ id пользователя, значение - список для подстановки в плйсхолдеры)

Таблица для хранения подписок должна быть общая для всего сайта. В ней можно хранить: id, user_id, subject (id пользователя, код подписки). Вторая таблица содержит список транспортов для подписки. Так пользователя можно отписать от всех подписок двумя запросами.

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

Dayver commented 1 month ago

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

Тогда это по классификации больше похоже на очередь сообщений (MessageQueue), а транспорты как email, телеграм и т.д. это уже Сендеры. У себя использую похожую систему - модуль это очередь, а транспортеры это API плагины к разным сущностям - email, sms, мессенджеры, push-уведомления на телефон, а если это магазин или крупная торговая площадка или даже ERP\CRM система то еще и API интеграции к другим платформам. Есть даже примеры с еко-системами "умного дома". Добавление в очередь это как плагин подписки например, а другими плагинами реализуются другие триггеры добавления сообщений в очередь. По крону или кастомным сценариям происходит обработка очереди (или всей или отдельных частей).

Потому предлагаю переклассифицировать тикет, отвязавшись от Форума в заголовке и нацелится на платформу для более широкого использования. В рамках тикета - да, реализовать работу с модулями форума, личными сообщениям и страницами. А сендер предусмотреть дефолный в виде почты, а остальные уже как кастомные вне коробочные решения для тех кому нужно больше. Ну и небольшой плагин подписки тогда прийдеться тоже заточить под такую связку. В перспективе это даст большее широкое поле для манёвра.

Alex300 commented 3 weeks ago

Тут имею ввиду все таки Сендер, который будет предоставлять единый интерфейс остальным компонентам системы. Он, предположительно, должен выполнять 2 функции:

Но да - это надо продумать и сделать отдельный тикет. Этот же тикет про уведомления с форума.