Делаем оповещение пользователя о получении нового статуса

Делаем оповещение для пользователя после того как администратор назначил ему новый статус.

Открываем ActionBlog.class.php и находим EventAdminBlog().

После:

switch ($sRank) {
	...
}


Вставляем:


/**
 * Отправляем сообщение о получении нового статуса в блоге
 */
$oUser = $this->User_GetUserById($sUserId);
$this->Notify_SendUserNewRole($oUser,$oBlog,$sRank);


Далее идем в модуль Notify (Notify.class.php) и создаем там новую функцию:

/**
 * Отправляет оповещение участнику блога о том, что администратор изменил его статус
 */
public function SendUserNewRole(UserEntity_User $oUserTo, BlogEntity_Blog $oBlog, $status) {
	/**
	 * Проверяем можно ли юзеру рассылать уведомление
	 */
	// Здесь можно сделать проверку настройки пользователя об уведомлении

	/**
	 * Определяем сообщения и заголовки
	 */
	switch ($status) {
		case 'administrator':
			$title = 'Вы стали администратором сообщества «' . $oBlog->getTitle() . '»';
			$status = 'Вы получили статус Администратора.';
			break;
		case 'moderator':
			$title = 'Вы стали модератором сообщества «' . $oBlog->getTitle() . '»';
			$status = 'Вы получили статус Модератора.';
			break;
	}
		
	/**
	 * Передаём в шаблон переменные
	 */
	$this->oViewerLocal->Assign('oUserTo',$oUserTo);
	$this->oViewerLocal->Assign('oBlog',$oBlog);
	$this->oViewerLocal->Assign('status',$status);
	/**
	 * Формируем шаблон
	 */
	$sBody=$this->oViewerLocal->Fetch("notify.blog_status_changed.tpl");
	/**
	 * Отправляем мыло
	 */
	$this->Mail_SetAdress($oUserTo->getMail(),$oUserTo->getLogin());
	$this->Mail_SetSubject($title);
	$this->Mail_SetBody($sBody);
	$this->Mail_setHTML();
	$this->Mail_Send();
}


И разумеется создаем шаблон письма с именем notify.blog_status_changed.tpl. Текст можно сделать например такой:

<b>Администратор блога <b>«{$oBlog->getTitle()|escape:'html'}»</b> изменил ваш статус.


{$status}



С уважением, администрация сайта <a href="{$DIR_WEB_ROOT}">{$SITE_NAME}</a></b>

9 комментариев

avatar
Статус в каком плане?
Когда администратор делает их модераторами в каком-то коллективном блоге?
avatar
сообщение уходит на e-mail?

в личку не дублируется?
  • sova
  • 0
avatar
Да, сообщения идут только на email. Я тоже несколько раз задумывался, что здорово было бы вообще в личку это дело дублировать.
avatar
в личку ничего не приходит

и еще, после того как выводишь из модераторов, выскакивает вверхк страницы вот такое:
Notice: Undefined variable: title in /home/sovana/public_html/classes/modules/notify/Notify.class.php on line 351
  • sova
  • 0
avatar
Мои поправки, раз уж столкнулся:
switch ($status) {
                case 'administrator':
                        $title = 'Вы стали администратором сообщества «' . $oBlog->getTitle() . '»';
                        $status = 'Вы получили статус Администратора.';
                        break;
                case 'moderator':
                        $title = 'Вы стали модератором сообщества «' . $oBlog->getTitle() . '»';
                        $status = 'Вы получили статус Модератора.';
                        break;
                default:
                        $title = 'Вы стали участником сообщества «' . $oBlog->getTitle() . '»';
                        $status = 'Вы получили статус Участника.';
        }

и
$sBody=$this->oViewerLocal->Fetch('notify/'.$this->Lang_GetLang()./notify.blog_status_changed.tpl');

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.