Уведомление модератора о новом сообщении на форуме — различия между версиями
Alexh (обсуждение | вклад) (Новая страница: «В настройках модуля Форум существует настройка, позволяющая запретить публикацию сообще…») |
Vitaliks (обсуждение | вклад) (Проверка и обновление статьи) |
||
(не показано 6 промежуточных версий 2 участников) | |||
Строка 1: | Строка 1: | ||
− | В настройках модуля Форум существует настройка, | + | '''Актуально для версии 20''' |
+ | |||
+ | == Задача == | ||
+ | |||
+ | Уведомлять администратора о новом сообщении на форуме. | ||
+ | |||
+ | == Решение == | ||
+ | |||
+ | В настройках модуля Форум существует настройка '''Не публиковать без модерирования''', которая запрещает публикацию сообщений без проверки модератором. Однако, в стандартном функционале системы не предусмотрена возможность автоматического уведомления модератора о новом сообщении. | ||
Для реализации данной задачи потребуется написать несложный кастомный макрос. | Для реализации данной задачи потребуется написать несложный кастомный макрос. | ||
+ | В файл '''/classes/components/forum/customMacros.php''' необходимо добавить функцию onAddCommentForum, которая будет срабатывать при получении новых сообщений на форуме и отправлять письмо администратору. | ||
− | + | Если в этот файл ранее не добавляли ни каких кастомов файл должен получиться такой: | |
<source lang="php"> | <source lang="php"> | ||
− | + | <?php | |
− | + | ||
− | + | use UmiCms\Service; | |
− | + | ||
− | + | /** Класс пользовательских методов административной панели */ | |
− | + | class ForumCustomMacros { | |
− | |||
− | |||
− | |||
− | |||
− | + | /** @var forum $module */ | |
− | + | public $module; | |
− | + | ||
− | + | public function onAddCommentForum(iUmiEventPoint $oEventPoint) { | |
+ | $registry = Service::Registry(); | ||
+ | |||
+ | // берем необходимые параметры | ||
+ | $iCommentId = $oEventPoint->getParam("message_id"); | ||
+ | $hostUrl = Service::DomainDetector()->detect()->getCurrentUrl(); | ||
+ | $recipient = $registry->get('//settings/admin_email'); | ||
+ | $from_mail = $registry->get('//settings/email_from'); | ||
+ | $from = $registry->get('//settings/fio_from'); | ||
+ | $subject = 'Добавлено новое сообщение в форум'; | ||
+ | //Формируем сообщение | ||
+ | $content = " | ||
+ | <html> | ||
+ | <body> | ||
+ | <div> | ||
+ | <p>На форуме появилось новое сообщение.</p> | ||
+ | <div> | ||
+ | <p><b>Для редактирования сообщения, перейдите по ссылке:</b></p> | ||
+ | $hostUrl/admin/forum/edit/$iCommentId | ||
+ | </div> | ||
+ | </div> | ||
+ | </body> | ||
+ | </html> | ||
+ | "; | ||
+ | //Формируем письмо | ||
+ | $mail = new umiMail(); | ||
+ | $mail->addRecipient($recipient); | ||
+ | $mail->setFrom($from_mail,$from); | ||
+ | $mail->setSubject($subject); | ||
+ | $mail->setContent($content); | ||
+ | $mail->commit(); | ||
+ | $mail->send(); | ||
+ | } | ||
} | } | ||
− | + | ||
</source> | </source> | ||
+ | Для подключения функции к событию получения новых сообщений нужно создать файл '''/classes/components/forum/custom_events.php''' если его еще нет и добавить в него наш обработчик события. | ||
− | + | В итоге файл должен получиться таким: | |
<source lang="php"> | <source lang="php"> | ||
− | + | <?php | |
+ | /** Уведомление администратора о новом сообщении */ | ||
+ | new umiEventListener("forum_message_post_do", "forum", "onAddCommentForum"); | ||
</source> | </source> | ||
+ | |||
+ | Теперь при получении нового сообщения на форуме администратору будет приходить примерно такое письмо: | ||
+ | |||
+ | На форуме появилось новое сообщение. <br> | ||
+ | '''Для редактирования сообщения, перейдите по ссылке:''' <br> | ||
+ | http://site.ru/admin/forum/edit/1254 | ||
+ | |||
+ | [[Категория:Модуль Форум]][[Категория:Написание кастомных макросов]] |
Текущая версия на 09:13, 18 мая 2019
Актуально для версии 20
Задача
Уведомлять администратора о новом сообщении на форуме.
Решение
В настройках модуля Форум существует настройка Не публиковать без модерирования, которая запрещает публикацию сообщений без проверки модератором. Однако, в стандартном функционале системы не предусмотрена возможность автоматического уведомления модератора о новом сообщении.
Для реализации данной задачи потребуется написать несложный кастомный макрос.
В файл /classes/components/forum/customMacros.php необходимо добавить функцию onAddCommentForum, которая будет срабатывать при получении новых сообщений на форуме и отправлять письмо администратору.
Если в этот файл ранее не добавляли ни каких кастомов файл должен получиться такой:
<?php
use UmiCms\Service;
/** Класс пользовательских методов административной панели */
class ForumCustomMacros {
/** @var forum $module */
public $module;
public function onAddCommentForum(iUmiEventPoint $oEventPoint) {
$registry = Service::Registry();
// берем необходимые параметры
$iCommentId = $oEventPoint->getParam("message_id");
$hostUrl = Service::DomainDetector()->detect()->getCurrentUrl();
$recipient = $registry->get('//settings/admin_email');
$from_mail = $registry->get('//settings/email_from');
$from = $registry->get('//settings/fio_from');
$subject = 'Добавлено новое сообщение в форум';
//Формируем сообщение
$content = "
<html>
<body>
<div>
<p>На форуме появилось новое сообщение.</p>
<div>
<p><b>Для редактирования сообщения, перейдите по ссылке:</b></p>
$hostUrl/admin/forum/edit/$iCommentId
</div>
</div>
</body>
</html>
";
//Формируем письмо
$mail = new umiMail();
$mail->addRecipient($recipient);
$mail->setFrom($from_mail,$from);
$mail->setSubject($subject);
$mail->setContent($content);
$mail->commit();
$mail->send();
}
}
Для подключения функции к событию получения новых сообщений нужно создать файл /classes/components/forum/custom_events.php если его еще нет и добавить в него наш обработчик события.
В итоге файл должен получиться таким:
<?php
/** Уведомление администратора о новом сообщении */
new umiEventListener("forum_message_post_do", "forum", "onAddCommentForum");
Теперь при получении нового сообщения на форуме администратору будет приходить примерно такое письмо:
На форуме появилось новое сообщение.
Для редактирования сообщения, перейдите по ссылке:
http://site.ru/admin/forum/edit/1254