Уведомление по почте создателя темы на форуме о том, что в его теме появилось сообщение
Актуально для версии 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 подставить адрес Вашего сайта, и теперь пользователю, который создал тему на форуме будет присылаться уведомление о новых сообщениях в его теме.