В любом веб-приложение происходит множество событий. Некоторые возникают непосредственно от действий пользователя (например, регистрация в системе, авторизация и т.п.) и не требуют дополнительного информирования. Другие же могут происходить в любой момент, даже когда приложение не используется.
В декларативном фреймворке Evado за информирование пользователей отвечает служба уведомлений. Служба оперирует несколькими базовыми сущностями, которые будут рассмотрены ниже. Настройка уведомлений происходит в модуле Администрирования.
Шаблон уведомления
Первая сущность - это шаблон уведомления (Notification), по которому создаются сообщения для отправки пользователям. Содержит следующие атрибуты:
- Флажок активности, отвечающий за то, что будут ли создаваться сообщения при вызове данного уведомления.
- Кодовое имя, по которому вызывается уведомление. Используется как идентификатор. Должно быть уникальным среди других.
- Тема сообщения.
- Содержание сообщения. Может содержать параметры, которые будут подставлены в момент генерации сообщения. Например,
Заказ от клиента {customerName} ожидает обработки. - Методы доставки. По умолчанию есть два метода - всплывающее сообщение, которое отображается в интерфейсе веб-приложения, и отправка электронного письма.
- Конфигурация шаблона сообщения позволяет использовать свой класс для динамического создания темы и содержания сообщения.
- Список получателей сообщений.
- Список фильтров получателей сообщений для определения получателей в момент вызова уведомления.
- Конфигурация фильтра пользователей позволяет использовать свой класс для получения списка получателей.
Сообщение
Сообщение (NotificationMessage) - это объект, создаваемый в момент отправки уведомления. Содержит тему, текст и ссылку на шаблон уведомления. После обработки сообщения службой доставки заполняется атрибут с датой отправки.
В модуле Администрирования можно создать сообщение напрямую, привязав его к нужному уведомлению, и отправить его. Кроме того, при необходимости можно переопределить список получателей, указав нужных пользователей.
Фильтр пользователей
Часто возникает необходимость оповещать некоторую группу пользователей, которая может динамически изменяться (например, тех у кого есть определенная роль). Для этого предназначен фильтр пользователей (UserFilter).
На уведомление можно назначить сразу несколько фильтров. Если пользователь пройдет хотя бы один, то он получит уведомление.
В фильтре можно задать назначения (роли, разрешения), по которым будут отобраны пользователи в момент вызова уведомления. Можно указать исключаемых пользователей или задать конфигурацию собственного класса фильтра, в котором отбор будет происходить по нужным вам критериям.
Всплывающий метод доставки
При отправке электронной почтой (используется компонент mailer), сообщения уходят в другую систему, и дальнейший контроль на ними теряется. Но всплывающие сообщения хранятся в самом приложении. Объекты класса PopupNotification содержат ссылки на уведомление, пользователя и флажок, прочитано данное сообщение или нет. Созданные всплывающие сообщения доступны в модуле Администрирования.
Во фреймворке Evado реализованы только два способа доставки уведомлений, но при необходимости вы можете реализовать собственный способ, расширив класс NotificationMessage.
Пример уведомления
Настроим уведомления для администраторов системы при появлении нового объекта класса Sample. Переходим в модуль Администрирования и в разделе Информирование -> Фильтры пользователей создаём фильтр администраторов приложения:
- Кодовое имя - administrators.
- Назначения - указываем роль Администратор.
В разделе Информирование -> Уведомления создаём шаблон уведомления:
- Активно - Да.
- Кодовое имя - newSample.
- Тема - Новый образец.
- Текст - Создан объект Sample: {model.getTitle}.
- Методы доставки - Всплывающее.
- Фильтры пользователей - administrators.
Далее необходимо привязать уведомление к событию создания объекта. Для этого переходим в раздел События -> Слушатели и создаем слушателя:
- Активно - Да.
- События - meta.base.create.sample.
- Уведомления - newSample.
Готово! Теперь при создании объектов Sample администраторы будут получать всплывающие сообщения.
В списке слушателей можно имитировать возникновения события с помощью кнопки "Вызвать событие".
Кроме вышеуказанного способа можно настроить уведомления через файл конфигурации, чтобы они применялись непосредственно при установке приложения. Пример подобной настройки есть в демо-приложении фреймворка Evado.
Создание уведомления в коде
Для создания уведомления непосредственно в коде используйте метод execute компонента notifier со следующими аргументами:
- notification - кодовое имя уведомления (обязательно).
- recipients - массив пользователей (необязательно). Если данный параметр указан, то он будет использован вместо получателей из уведомления.
- data - дополнительные данные (необязательно). Могут быть использованы при создании текста сообщения и разрешения списка получателей.
Пример можно найти в утилите приложения Exchange.
Модуль содержит метод-обертку для быстрого доступа к созданию уведомления - module.notify(notification, recipients, data).