Уведомление модератора о новом сообщении на форуме — различия между версиями
Velross (обсуждение | вклад)  | 
				Vitaliks (обсуждение | вклад)   (Проверка и обновление статьи)  | 
				||
| Строка 1: | Строка 1: | ||
| − | Актуально для версии   | + | '''Актуально для версии 20'''  | 
| − | + | == Задача ==   | |
| − | |||
| − | + | Уведомлять администратора о новом сообщении на форуме.  | |
| − | В настройках модуля Форум существует настройка,   | + | |
| + | == Решение ==  | ||
| + | |||
| + | В настройках модуля Форум существует настройка '''Не публиковать без модерирования''', которая запрещает публикацию сообщений без проверки модератором. Однако, в стандартном функционале системы не предусмотрена возможность автоматического уведомления модератора о новом сообщении.  | ||
Для реализации данной задачи потребуется написать несложный кастомный макрос.  | Для реализации данной задачи потребуется написать несложный кастомный макрос.  | ||
| + | В файл '''/classes/components/forum/customMacros.php''' необходимо добавить функцию onAddCommentForum, которая будет срабатывать при получении новых сообщений на форуме и отправлять письмо администратору.  | ||
| − | + | Если в этот файл ранее не добавляли ни каких кастомов файл должен получиться такой:  | |
<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();  | ||
| + | 		}  | ||
| + | 	}  | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
</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