Комплект задачи cron и плагина "Уведомление друзей именинника" для 1.10.6

+19
2.86K

Вниманию представляется комплект из задачи CRON и плагина «Уведомление друзей имениника» для версии Инстанта 1.10.6. Этот плагин может работать в паре с плагином «С днем рождения», который опубликован чуть ранее.



Постановка задачи

Читатели моего блога дружелюбно встретили разработку Комплект задачи cron и плагина «С днем рождения», который помещал открытку на стену именинника.
Однако многим захотелось, чтобы плагин так же уведомлял друзей именинника о знаменательном событии по почте. Мне почти удалось отвертеться от написания этого функционала, поскольку мой друг Pasha выложил аналогичный плагин.
Тем не менее, мне продолжали писать с требованием продолжить работу.
Пришлось мне впрячься в нелегкую работу программиста...

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

Если у вас на сайте уже установлен, настроен и работает один из моих плагинов (либо «С днем рождения!», либо «Уведомление о дне рождения», второй заработает сразу, как только вы его зальете на сайт, установите из админки и включите.

Как работает плагин

Все начинается от задачи cron, которая инициализирует системное событие HAPPY_BIRTHDAY. Это событие вызывает данный плагин (кстати, от этого события так же срабатывает ранее написанный мной плагин Комплект задачи cron и плагина «С днем рождения»). Данный плагин просматривает базу данных, и если находит в ней человека, у которого сегодня день рождения, получает из базы массив друзей именинника. Этим друзьям на e-mail (который они указали при регистрации) отправляется письмо с напоминанием, что у их друга сегодня день рождения. Поскольку Планировщик заданий на сервере может быть настроен на срабатывание несколько раз в сутки, плагин сам следит за тем, чтобы письма были разосланы только один раз. Если Вы настроите Планировщик, чтобы он срабатывал реже, чем раз в сутки (например, раз в месяц), корректную работу плагина я не гарантирую.

Установка плагина

1. Распакуйте архив в любое место и залейте его содержимое в корень сайта.

2. Установите плагин через админку (Админка->Дополнения->Установить плагины). Найдите мой плагин в списке плагинов, готовых к установке и установите его, щелкнув по названию.

3. Включите плагин. (Админка->Дополнения->Плагины). Нажать на красный крестик, чтобы появилась зеленая галка (плагин включен).

4. Если необходимо, настройте плагин:
4.1. Укажите примерное время дня, когда разослать уведомления. По умолчанию указано 8:00. Время указывается в формате час: минуты (и никак иначе). Имейте ввиду — это время сервера. Если сервер, где у вас хостинг, находится в часовом поясе Сан-Франциско, вы можете получить интересный эффект, когда друзья именинника получат уведомления, когда пора ложиться спать.
4.2. Укажите, следует ли уведомлять друзей, если именинник в своем профиле запретил показывать свой день рождения Если Вы в этой настройке укажете «Да», или «Yes» или 1, плагин разошлет письма друзьям все равно. Если Вы укажете «нет», «NO» или поставите любую цифру, кроме единицы, или оставите поле пустым, плагин будет проверять, разрешил ли пользователь показывать в свой день рождения в профиле. Если разрешил — плагин уведомления разошлет. Если нет — письма разосланы не будут.

5. Если Вы ставите плагин впервые, вам потребуется настроить Планировщик заданий на хостинге и задачу cron на Инстанте. Как это сделать — подробно (с картинками) расписано в записи, посвященной плагину «С днем рождения!»

6. Каждый друг именинника получит письмо примерно такого содержания:
Иллюстрация
Открыв файл languages/ru/letters/your_friend_birthday.txt, вы можете отредактировать тект письма.
Если Ваш сайт с английской (или другой) локализацией, Вам, естественно, придется озаботиться тем, чтобы в папке en (или в нужной Вам локализации) лежали аналогичные файлы (сейчас их нет).

Как скачать.

Скачать можно бесплатно, то есть даром, из моего профиля тут.

Куда говорить спасибо

Плюсиком в карму :)


Удачи в программировании.

+6
Странник Странник 8 лет назад #
Сразу хочу предупредить скачивающих, что этот плагин выкладывается для тестирования (поскольку проверить его в боевых условиях мне не дали). Надеюсь, при возникновении любых косяков Вы будете снисходительны. Естественно все ошибки будут исправлены, вам следует только сообщить о них, быстрее в личку.
Спасибо.
+2
Странник Странник 8 лет назад #
Я тоже продолжаю тестировать этот плагин. Сегодня протестировал в режиме, когда именинник разрешил показывать свой ДР в профиле - плагин письма друзьям разослал, в 8 утра, как и было задумано. Завтра выключу показ ДР в профиле, посмотрим, все ли правильно сработает.
+2
Странник Странник 8 лет назад #
Сегодня плагин письма разослал. Именинник выключил показ ДР в профиле, но плагин настроен на игнорирование этого выключения, то есть эта функция работает нормально.

Завтра посморю, что происходит, когда плагин учитывает желание юбиляра скрывать днюху.
0
Владимир Савенко ✝️ Владимир Савенко ✝️ 8 лет назад #
Трудяга ты наш smile Пора уже ник менять не "Труженик тыла" :)
Спасибо за проделанную работу.
0
Владимир Савенко ✝️ Владимир Савенко ✝️ 8 лет назад #
менять НА "Труженик тыла")))
0
Странник Странник 8 лет назад #
Хватит хихикать))) Просто я привык всегда делать свою работу качественно. В авиации приучили. Кста, при перебазировании по тревоге я по штатному расписанию в передовой команде был))) Так что тыловая крыса - не про меня!
+1
Владимир Савенко ✝️ Владимир Савенко ✝️ 8 лет назад #
Значит "Передовик")))
+1
Странник Странник 8 лет назад #
Сегодня плагин тестировался вот в таком режиме:

У юзеров, которые скрыли свою днюху в профиле, друзья соответственно письма НЕ получили.

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

Удачи в сайтостроении.
+1
Александр Александр 8 лет назад #
Спасибо большое вроде работает, точне не знаю письмо еще лично мне не приходило, единственно на фаил timer.log пришлось сменить права на 666
0
Александр Александр 8 лет назад #
да и когда повторно задачу запускаешь, то строчки в файле timer.log сразу становятся с пробелами между строк, это так задумано?
+1
Странник Странник 8 лет назад #
Пусть содержание timer.log вас не волнует))). Я уже писал, что плагин сам следит за тем, чтобы послать сообщение только один раз, несмотря на то, как настроен Планировщик заданий на на вашем хостинге. В этот лог плагин пишет себе заметку, что по сегодняшним именинникам уже "отбомбился", повторно посылать им оповещение не нужно. По происшествии суток лог со вчерашними именинникам очищается.

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

Я не стал в документации указывать, какие права выставлять на лог, поскольку на том хостинге, где я отлаживал плагин, по умолчанию права при создании выставились на папку timer - 0755, на файл timer.log - 0644, и сразу все заработало.
0
Александр Александр 8 лет назад #
Нет вы сделали все идеально, просто смутило, что например было так
1212 натя
1212 настя
1212 вася

а потом запускает когда повторно то сразу куча строк пустых появляется, вот и заинтересовался.
1212 натя

1212 настя

1212 вася

и там далее еще пустых снизу.

То, что в лог идея отличная, а вот вопрос у меня который не как не могу понять, если поставил 6 утра, то когда он его запустит после шести или строго до шести? просто например крон ладно я поставил запускаться вроде каждые 7 или 6 часов, а если у вас крон сработал в 5 утра и в 7, он когда запустит задачу в или в 7? при условии, что в плагине стоит предпочтение отправки в 6 утра в которое не было запущено.

PS у меня просто не хостинг и вот права походу иначе, заливал через фазиллу sftp он там сам ставит права по умолчанию вроде такие же как у вас. 644 и 755.
0
Странник Странник 8 лет назад #
Если у вас cron срабатывает не каждый час, а реже, например, в 0, 6, 12 и тд, то есть через каждые шесть часов, а плагин у вас настроен на 8:00, то сработает он в 12:00. В момент запуска от задачи cron он сравнивает текущее время с временем, установленным в админке плагина. Если текущее время больше времени админки, он проверяет лог. Если записей в логе нет, он отправляет сообщение и делает запись в лог. При следующем срабатывании cron, поскольку запись в логе уже есть, он сообщение НЕ отправляет. Таким образом он срабатывает только один раз.

Понятно, что если вы настроите cron один раз в сутки, на 0 часов, а плагин выставили на 8:00, то он может не сработать вообще (или сработать в 0:00 следующих суток). Поэтому, если cron выполняется раз в сутки, в 0:00, то ставте плагин на 0:00.
0
olegan olegan 6 лет назад #
Подскажите, кто может, поставил на 1-ю ветку модуль день рождения, а он на стену картинку не выдает и на почту ничего не высылает. А по Cron выдает такую ошибку PHP Fatal error: Class 'cmsUser' not found in /www/core/cms.php on line 1212 Посмотрел,что в этой строчке. Там } elseif(cmsUser::sessionGet($com.'_'.$search)) { В коде ничего не понимаю.Подскажите, как исправить.

Еще от автора

Адаптация компонента "Закладки" от 19 января 2011 к коробочной версии 1.10.7
На форуме появилась тема с пожеланиями адаптировать довольно старый компонент "Instant Bookmarks" Fuze к современным реалиям.
Утилита "Садовод" для версии InstantCMS 1.10.7.008
В этой краткой заметке описывается утилита "Садовод" для ремонта деревьев версии InstantCMS 1.10.7.008.
Изменение компонента "Баннеры" для будущей  версии 1.10.7.008
Данная статья рассказывает всем ждущим новую версию 008, что нового ожидается в будущем релизе версии 1.10.7.008.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.