Уведомление по почте создателя темы на форуме о том, что в его теме появилось сообщение

Материал из Umicms
Перейти к:навигация, поиск

Актуально для версии 2.9.1

Необходимо реализовать уведомление по почте пользователей о том, что в их теме на форуме появилось новое сообщение. Данный функционал можно реализовать, создав кастомный обработчик события forum_message_post_do, по этому событию узнавать тему, в которой было это сообщение, и отправлять письмо на почту создателя темы форума. Теперь рассмотрим собственно реализацию.

Для начала создайте файл /classes/modules/forum/custom_events.php с содержанием

<?php
    new UmiEventListener("forum_message_post_do", "forum", "ownerTopicMail");
?>

Далее необходимо предоставить необходимые права, создайте файл /classes/modules/forum/permissions.custom.php с содержанием

<?php
    $permissions = Array(

        "view" => Array(
        ),

        "last_messages" => Array(
            'ownerTopicMail'
        )

    );
?>

После этого осталось в файле /classes/modules/forum/_custom.php после строчки //TODO: Write here your own macroses написать следующий код:

public function ownerTopicMail (umiEventPoint $event) {
       
            $message_id  = $event->getParam('message_id');
            $topic_id  = $event->getParam('topic_id');
           
            $name = "Администрация ваш_домен.ru";
            $email = "no-reply@ваш_домен.ru";
            $hierarchy = umiHierarchy::getInstance();
            $topic = $hierarchy->getElement($topic_id);
            $owner_id = $topic->getObject()->getOwnerId();
            $recipient = umiObjectsCollection::getInstance()->getObject($owner_id)->getValue('e-mail');
            $message = $hierarchy->getElement($message_id);
            $email_body = "На форум было добавлено новое сообщение в Вашу тему \"".$topic->getName()."\". Ссылка на сообщение -  http://ваш_домен.ru".$message->link.".";
            $subject = "Новое сообщение на форуме в Вашей теме";
            $header = "From: ". $name . " <" . $email . ">\r\n";
         
            if(mail($recipient, $subject, $email_body, $header)){
                return true;
            } else {
                return false;
            }
        }

Осталось вместо ваш_домен.ru подставить адрес Вашего сайта, и теперь пользователю, который создал тему на форуме будет присылаться уведомление о новых сообщениях в его теме.