Оповещение о новых мнениях (плагин "Opinion")

Исходя из темы был добавлен минимум функционал для плагина «Мнения». А именно: уведомление пользователя о новых «мнениях». Сам плагин.



Шаг1. HookOpinion.class.php
Находим
public function VotingInfo($oUserProfile) {
        $oUserCurrent = $this->User_GetUserCurrent();
        if ($oUserCurrent && $oUserProfile['oUserProfile']->getId() == $oUserCurrent->getId()) {
            return $this->Viewer_Fetch(Plugin::GetTemplatePath(__CLASS__) . 'voting_info_menu.tpl');
        }
    }


Меняем на
public function VotingInfo($oUserProfile) {
        $oUserCurrent = $this->User_GetUserCurrent();
        if ($oUserCurrent && $oUserProfile['oUserProfile']->getId() == $oUserCurrent->getId()) {
	    $iCountNewOpinion = $this->PluginOpinion_User_GetNewOpinionId();
	    $this->Viewer_Assign('iCountNewOpinion',count($iCountNewOpinion));
	    return $this->Viewer_Fetch(Plugin::GetTemplatePath(__CLASS__) . 'voting_info_menu.tpl');
        }
    }


Шаг2. ActionProfile.class.php
В методе EventVotingInfo() находим
$this->Viewer_Assign('aPaging', $aPaging);
$this->Viewer_Assign('aVotes', $aVotes);


после, добавляем
$aNewOpinion = $this->PluginOpinion_User_GetNewOpinionId();
if ($aNewOpinion){
	$this->Viewer_Assign('aNewOpinion', $aNewOpinion);
	$this->PluginOpinion_User_SetReadOpinion($aNewOpinion);
}


Шаг3. User.class.php
В самом низу, перед
}


добавляем
public function GetNewOpinionId(){
    return $this->oMapper->GetNewOpinionId($this->oUserCurrent->getId());
}
	
public function SetReadOpinion($aOpinionId){
    return $this->oMapper->SetReadOpinion($aOpinionId);
}


Шаг4. User.mapper.class.php
В самом низу, перед
}


Добавляем
/* COUNT new opinion */
	
public function GetNewOpinionId($iUserId){
    $sql = "SELECT `id` 
        	FROM " . Config::Get('db.table.opinion') . " 
             WHERE 
		`user_id` = ?d
	     AND
		`comment_new` = 1
    ";
    $aResult = array();
    if ($aRows = $this->oDb->select($sql, $iUserId)) {
        foreach($aRows as $aRow){
	    $aResult[] = $aRow['id'];
	} 
        return $aResult;
    }
    return null;
}
	
/* SET comment_new 0 (readed) */
	
public function SetReadOpinion($aOpinionId){
    if (!is_array($aOpinionId)){
        return false;
    }
    $sql = "UPDATE " . Config::Get('db.table.opinion') . "
	    SET 
		`comment_new` = 0
	    WHERE
		`id` IN (?a)
	";
    if ($this->oDb->query($sql,$aOpinionId)) {
	    return true;
    }
    return false;
}


Шаг5. voting_info_menu.tpl
Добавляем
{if $iCountNewOpinion}<span title="New opinion">+{$iCountNewOpinion}</span>{/if}


Шаг6. voting_info.tpl
Добавляем
{if $aNewOpinion and $oVote['id']|in_array:$aNewOpinion}
    <sup style="color: green;">new</sup>
{/if}


Шаг7. DB
ALTER TABLE `prefix_opinion` ADD `comment_new` INT(1) NOT NULL DEFAULT 1

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

avatar
Супер, все работает, автор молодец =)
avatar
уважаемый автор — будет ли сие исправлено в новой версии плагина?
avatar
Автор плагина был уведомлен в ПМ о данном дополнении. Ждем ответа.
avatar
Мне идея понравилась, как только стану посвободнее, опробую и скорее всего добавлю, скорее всего опционально, настройкой из конфига.
avatar
Отлично! Плагин супер! А с этой фишкой — ваще класс!
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.