Уведомление модератора о новом сообщении на форуме — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
(Проверка и обновление статьи)
 
(не показана 1 промежуточная версия 1 участника)
Строка 1: Строка 1:
Актуально для версии 2.9.6
+
'''Актуально для версии 20'''
  
----
+
== Задача ==
'''Задача:''' уведомлять модератора о новом сообщении в форуме.
 
  
'''Решение:'''
+
Уведомлять администратора о новом сообщении на форуме.
В настройках модуля Форум существует настройка, позволяющая запретить публикацию сообщений модерации модератором. Однако, в стандартном функционале системы не предусмотрена возможность автоматического уведомления модератора о новом сообщении.
+
 
 +
== Решение ==
 +
 
 +
В настройках модуля Форум существует настройка '''Не публиковать без модерирования''', которая запрещает публикацию сообщений без проверки модератором. Однако, в стандартном функционале системы не предусмотрена возможность автоматического уведомления модератора о новом сообщении.
  
 
Для реализации данной задачи потребуется написать несложный кастомный макрос.
 
Для реализации данной задачи потребуется написать несложный кастомный макрос.
  
 +
В файл '''/classes/components/forum/customMacros.php''' необходимо добавить функцию onAddCommentForum, которая будет срабатывать при получении новых сообщений на форуме и отправлять письмо администратору.
  
В файл '''~classes/modules/forum/__custom.php''' необходимо добавить следующий код:
+
Если в этот файл ранее не добавляли ни каких кастомов файл должен получиться такой:
  
 
<source lang="php">
 
<source lang="php">
public function onAddCommentForum(iUmiEventPoint $oEventPoint) {
+
<?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();
 +
}
 +
}
  
// берем необходимые параметры
 
$iCommentId = $oEventPoint->getParam("message_id");
 
 
 
  $recipient = regedit::getInstance()->getVal('//settings/admin_email');
 
$subject = 'Добавлено новое сообщение в форум';
 
$from = 'UMI.CMS';
 
$from_mail  = "no_replay@example.com";
 
//Формируем сообщение
 
$content = "
 
<html>
 
<body>
 
<div>
 
<p> В форуме появилось новое сообщение. </p>
 
<div>
 
<p> <b>Для редактирования сообщения, перейдите по ссылке:</b> </p>
 
                                http://ВАШ_ДОМЕН.ru/admin/forum/edit/$iCommentId
 
</div>
 
</div>
 
</body>
 
</html>
 
";
 
//Формируем письмо                       
 
$mail = new umiMail();
 
$mail->addRecipient($email);
 
$mail->setFrom($from_mail,$from);
 
$mail->setSubject($subject);
 
$mail->setContent($content);
 
$mail->commit();
 
$mail->send();
 
}
 
 
</source>
 
</source>
  
 +
Для подключения функции к событию получения новых сообщений нужно создать файл '''/classes/components/forum/custom_events.php''' если его еще нет и добавить в него наш обработчик события.
  
А также в файл '''~classes\modules\forum\custom_events.php''' добавить:
+
В итоге файл должен получиться таким:
  
 
<source lang="php">
 
<source lang="php">
$oAddCommentListener = new umiEventListener("forum_message_post_do", "forum", "onAddCommentForum");
+
<?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