Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Yii

Создание вашего автозапуска: отправка уведомлений

by
Difficulty:IntermediateLength:MediumLanguages:
This post is part of a series called Building Your Startup With PHP.
Building Your Startup: Responsive Email for Gmail
Building Your Startup: Preparing for Reminders

Russian (Pусский) translation by Masha Kolesnikova (you can also view the original English article)

Final product image
What You'll Be Creating

Этот учебник является частью серии статей Пишем свой стартап на PHP на Envato Tuts +. В этой серии я направляю вас через запуск приложения от концепции до готового продукта, используя приложение Планировщик встреч в качестве реального приложения. На каждом шаге я делаю релиз кода планировщика собраний в качестве примеров с открытым исходным кодом, из которых вы можете узнать что-то новое. Я также рассмотрю связанные с запуском бизнес-вопросы по мере их возникновения.

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

Если вы еще не опробовали Планировщик собраний, запланируйте свою первую встречу. Как только вам ответят ваши коллеги и друзья, вы увидите уведомления в действии. Я участвую в комментариях ниже, поэтому, пожалуйста, поделитесь своими отзывами. Меня особенно интересует, если вы хотите предложить новые функции или темы для будущих учебников.

Напомним, что весь код Планировщика собраний написан на Yii2 Framework для PHP. Если вы хотите узнать больше о Yii2, ознакомьтесь с нашей параллельной серией Программирование с Yii2.

Мониторинг обновлений собрания

С MeetingLog из предыдущего эпизода мы будем регулярно отслеживать, когда изменения будут составлять несколько минут, чтобы затем объединить их в одно обновление для другого участника (участников) или организатора собрания.

Наш DaemonController в экшене actionFrequent будет проверять собрания со свежими обновлениями каждые несколько минут:

Выбор правильных людей для уведомления

Meeting::findFresh() просматривает журнал для записей, которые старше, чем MeetingLog::TIMELAPSE, в настоящее время - это пять минут. Когда он находит их, он смотрит на каждого из участников, участвующих в внесении изменений, и уведомляет их через Meeting::notify():

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

Создание сводки текста для логов собрания

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

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

Например, вот история действий MeetingLog. Обратите внимание на повторение действий Cloudster, которые отменяют друг друга в тех же местах и времени:

Meeting Planner Notifications - Example MeetingLog History of Actions

Основное текстовое представление гласит:

Cloudster добавила заметку Спасибо за напоминание. Я обязательно буду., Принял время Чт 9 июня в 12:00, принял время Пт Июн 10 в 12:00, отклонил время Пт Июн 10 в 12:00, отклонил время Чт 9 июня в 12:00 PM, отклонено время Wed Jun 8 at 12:30 PM, отклонено место Chaco Canyon Органическое кафе, принято место Chaco Canyon Органическое кафе, отклоненное место Chaco Canyon Органическое кафе, принятое место No Bones Beach Club и отклоненное место No Bones Beach Club.

Как мы создаем простое текстовое резюме полученных изменений для электронной почты уведомления, например, показано ниже:

Meeting Planner Notifications - The Final Email Notification with Text Summary

Внутри Meeting::notify() мы запрашиваем историю действий для этого собрания со времени последнего уведомления:

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

По сути, getHistory() является специфичным для каждого пользователя. Следующий запрос сортирует действия в обратном порядке, потому что в основном последнее изменение имеет доминирующее влияние:

В будущем будет много участников, чьи действия накладываются во времени, поэтому мы группируем историю с помощью actor_id.

Затем я отслеживаю $current_actor, когда мы создаем текстуализацию, поэтому мы упоминаем только одно имя, т. е. «Джефф сделал эти действия. Джон делал эти действия: «не« Джефф сделал это, Джон сделал это, Джефф сделал это, и Джон сделал это, и Джон сделал это ».

Точно так же я отслеживаю упоминание объектов в $items_mentioned и игнорирую более ранние события, предоставляя только последнее доминирующее действие на месте или времени, то есть «Jeff принял No Bones Beach Club», а не «Jeff отклонил No Bones Beach Club, Джефф принял No Bones Beach Club.

Код был замысловатым и забавным для написания. Получившаяся текстуализация (показанная выше) интересна для наблюдения.

Доставка уведомления по электронной почте

В учебном пособии по переработке почтовых шаблонов я описал переход на наши новые отзывчивые шаблоны от Oxygen. Это потребовало пересмотра шаблона notify-html.php и потребует постепенного его улучшения с течением времени.

Вот выдержка из шаблона:

Отправка электронной почты

Доставка электронной почты выполняется аналогично приглашениям на встречу с помощью расширения Yii2 SwiftMailer через нашу конфигурацию SMTP Mailgun.

Что дальше?

Надеюсь, вам понравились эти учебные пособия из двух частей. Я считаю создание журнала и текстового описания его истории сложным и интересным. И это оказалось полезным при отладке и обобщении обновлений собрания для уведомлений. Однако тестирование было непростым, так как всегда были отметки времени и фоновые задачи, которые необходимо было контролировать, чтобы проверить, работает ли код.

Попробуйте использовать функции уведомлений, планируя свою первую встречу. Вы должны получать регулярные уведомления, когда вам отвечают ваши приглашенные друзья или коллеги. Кроме того, я был бы признателен, если вы поделитесь своим опытом ниже в комментариях, меня всегда интересуют ваши предложения. Вы также можете связаться со мной в Twitter @reifman напрямую.

Я также начинаю экспериментировать с WeFunder, основываясь на реализации новых правил SEC. Пожалуйста, обратите внимание на наш профиль. Я могу написать об этом больше в этой нашей серии.

Следите за предстоящими учебными пособиями в разделе серии Пишем свой стартап на PHP. Впереди у нас есть еще несколько больших функций.

Ссылки по теме

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.