Подписка на комментарии с региональным делением.

Всем привет!
Может кто сталкивался или знает решение такой задачи:
— пользователь Иванов указал в своем профиле город Москва.
— пользователь Иванов поставил галочку на согласие получать уведомления на почту о новых комментариях топика.
— пользователь Иванов должен получать письма о новых комментариях, но только те, которые оставлены его земляками, т.е. пользователями указавшие в профиле город Москва. а комментарии, оставленные пользователями из других городов Иванов на почту не получает.

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

avatar
В файле classes/modules/notify/Notify.class.php
в функции SendCommentNewToAuthorTopic и SendCommentReplyToAuthorParentComment добавить строки в самое начало функции

#Для одной страны
if($oUserTo->getProfileCountry() != $oUserComment->getProfileCountry()) return false;


#Для одного региона
if($oUserTo->getProfileRegion() != $oUserComment->getProfileRegion()) return false;


#Для одной деревни
if($oUserTo->getProfileCity() != $oUserComment->getProfileCity()) return false;


К примеру:
public function SendCommentReplyToAuthorParentComment(
	ModuleUser_EntityUser $oUserTo, ModuleTopic_EntityTopic $oTopic, ModuleComment_EntityComment $oComment,
	ModuleUser_EntityUser $oUserComment
) {
	/* Отправляем комментарии толко односельчанам */
	if($oUserTo->getProfileCity() != $oUserComment->getProfileCity()) return false;
=========================================================	
public function SendTopicNewToSubscribeBlog(
	ModuleUser_EntityUser $oUserTo, ModuleTopic_EntityTopic $oTopic, ModuleBlog_EntityBlog $oBlog,
	ModuleUser_EntityUser $oUserTopic
) {
	/* Отправляем комментарии толко односельчанам */
	if($oUserTo->getProfileCity() != $oUserComment->getProfileCity()) return false;
=========================================================


Не проверял, но должно работать.
  • ff00
  • 0
avatar
К сожалению не работает :(
avatar
Прошу прощения невнимательно написал вторую функцию вместо $oUserComment нужно было написать $oUserTopic

В общем должны получиться такие функции
public function SendCommentReplyToAuthorParentComment(
	ModuleUser_EntityUser $oUserTo, ModuleTopic_EntityTopic $oTopic, ModuleComment_EntityComment $oComment,
	ModuleUser_EntityUser $oUserComment
) {
	/* Отправляем комментарии толко односельчанам */
	if($oUserTo->getProfileCity() != $oUserComment->getProfileCity()) {
		return false;	
	}
	/**
	 * Проверяем можно ли юзеру рассылать уведомление
	 */
	if (!$oUserTo->getSettingsNoticeReplyComment()) {
		return false;
	}
	$this->Send(
		$oUserTo,
		'notify.comment_reply.tpl',
		$this->Lang_Get('notify_subject_comment_reply'),
		array(
			 'oUserTo'      => $oUserTo,
			 'oTopic'       => $oTopic,
			 'oComment'     => $oComment,
			 'oUserComment' => $oUserComment,
		)
	);
	return true;
}

/**
 * Отправляет юзеру уведомление о новом топике в блоге, в котором он состоит
 *
 * @param ModuleUser_EntityUser   $oUserTo       Объект пользователя кому отправляем
 * @param ModuleTopic_EntityTopic $oTopic        Объект топика
 * @param ModuleBlog_EntityBlog   $oBlog         Объект блога
 * @param ModuleUser_EntityUser   $oUserTopic    Объект пользователя, написавшего топик
 *
 * @return bool
 */
public function SendTopicNewToSubscribeBlog(
	ModuleUser_EntityUser $oUserTo, ModuleTopic_EntityTopic $oTopic, ModuleBlog_EntityBlog $oBlog,
	ModuleUser_EntityUser $oUserTopic
) {
	/* Отправляем комментарии толко односельчанам */
	if($oUserTo->getProfileCity() != $oUserTopic->getProfileCity()) {
		return false;	
	}
	/**
	 * Проверяем можно ли юзеру рассылать уведомление
	 */
	if (!$oUserTo->getSettingsNoticeNewTopic()) {
		return false;
	}
	$this->Send(
		$oUserTo,
		'notify.topic_new.tpl',
		$this->Lang_Get('notify_subject_topic_new') . ' «' . htmlspecialchars($oBlog->getTitle()) . '»',
		array(
			 'oUserTo'    => $oUserTo,
			 'oTopic'     => $oTopic,
			 'oBlog'      => $oBlog,
			 'oUserTopic' => $oUserTopic,
		)
	);
	return true;
}
avatar
никак не хочет работать.
мне нужно только чтобы заработала функция получения на почту уведомления о новом комментарии к топику.
о новом топике в блоге не нужно.
avatar
В файле classes/modules/subsribe/Subsribe.class/php замените функцию Send на:

public function Send($sTargetType,$iTargetId,$sTemplate,$sTitle,$aParams=array(),$aExcludeMail=array(),$sPluginName=null) {
	$iPage=1;
	$aSubscribes=$this->Subscribe_GetSubscribes(array('target_type'=>$sTargetType,'target_id'=>$iTargetId,'status'=>1,'exclude_mail'=>$aExcludeMail),array(),$iPage,20);
	while ($aSubscribes['collection']) {
		$iPage++;
		foreach ($aSubscribes['collection'] as $oSubscribe) {
			
			/* Отправляем только односельчанам */
			$toUser = $this->User_GetUserByMail($oSubscribe->getMail());
			if(!$toUser->getProfileCity() OR !$this->oUserCurrent->getProfileCity() OR $toUser->getProfileCity() != $this->oUserCurrent->getProfileCity()) continue;
			
			$aParams['sSubscribeKey']=$oSubscribe->getKey();
			$this->Notify_Send(
				$oSubscribe->getMail(),
				$sTemplate,
				$sTitle,
				$aParams,
				$sPluginName
			);
		}
		$aSubscribes=$this->Subscribe_GetSubscribes(array('target_type'=>$sTargetType,'target_id'=>$iTargetId,'status'=>1),array(),$iPage,20);
	}
}


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