Хак ReVote повторное голосование, изменение своего голоса.

В Tips&Tricks почему-то не пускает. тогда здесь наиболее уместно, пожалуй.
На примере топика, решил составить краткую инструкцию, как добавить пользователям возможность менять свой голос. Вообще, странно, что нет такой возможности по умолчанию
Сразу оговорюсь, должен быть установлен ACEAdminPanel!
Итак, нам потребуется файл /include/ajax/voteTopic.php;
Любое изменение начинаем с сохранения копии исходного файла.
находим код:

} else {
$sMsgTitle=$oEngine->Lang_Get('attention');
$sMsg=$oEngine->Lang_Get('topic_vote_error_already');
}

заменяем его на:

} else {
	//существует ли результат голосования?
	if ($oTopicVote=$oEngine->Vote_GetVote($oTopic->getId(),'topic',$oUserCurrent->getId())) {
	// лимит голосования п времени	
	if (strtotime($oTopic->getDateAdd())>time()-Config::Get('acl.vote.topic.limit_time')) {
	//можно ли голосовать?
	if ($oEngine->ACL_CanVoteTopic($oUserCurrent,$oTopic)) {
        //если голос =1 или -1
	if (in_array($iValue,array('1','-1'))) {
        // если голос поменялся, или голос был равен 0
if($oTopicVote->getDirection()==(-$iValue) or $oTopicVote->getDirection()==0){
//если голос был равен 0, ставим новое значение голоса	
if($oTopicVote->getDirection()==0){
	$oTopicVote->setDirection($iValue);
//иначе ставим голос равным 0
}else{
     $oTopicVote->setDirection(0);
}
//новая дата голосования
$oTopicVote->setDate(date("Y-m-d H:i:s"));
//вычисляем новый рейтинг топика
$iVal=(float)$oEngine->Rating_VoteTopic($oUserCurrent,$oTopic,$iValue);
//устанавливаем рейтинг топика
$oTopicVote->setValue($iVal);
// это внесет изменения в таблицу vote (регистрируем голос) именно для этого нужен ACEAdminPanel
if ($oEngine->Vote_UpdateVote($oTopicVote) and $oEngine->Topic_UpdateTopic($oTopic)) {
$bStateError=false;
$sMsgTitle=$oEngine->Lang_Get('attention');
$sMsg = $iValue==0 ? $oEngine->Lang_Get('topic_vote_ok_abstain') : $oEngine->Lang_Get('topic_vote_ok');
$iRating=$oTopic->getRating();
//если что-то пошло не так, выдаем ошибку 
} else {
$sMsgTitle=$oEngine->Lang_Get('error');
$sMsg=$oEngine->Lang_Get('system_error');
}
//если направление голосования было таким же, как новое, выдаем другую ошибку.
}else{
$sMsgTitle=$oEngine->Lang_Get('attention');
$sMsg=$oEngine->Lang_Get('topic_vote_error_already');
}}}}}}
//все, теперь можно менять голос

Нюанс:
После переголосования (до обновления страницы) обе стрелочки будут активны.

ЗЫ простите за форматирование.

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

avatar
avatar
Спасибо!
avatar
благодарности!
а с комментариями аналогично?
avatar
да, должно быть так же.
Если внимательно посмотреть на код, это весь стандартный код ЛС с некоторыми дополнениями и комментариями.
Принцип такой же, вместо Topic_UpdateTopic($oTopic)) будет что-то с comment, но суть не меняется.
avatar
а для 0.5.1 не могу найти решение.
avatar
вот, пишу плагин…
avatar
Как сделать так, чтоб голосовать за топик можно было столько раз сколько, сколько у тебя комментариев к топику?
avatar
Подскажите пожалуйста, как сделать переголосование на LS 1.0.3? ACEAdminPanel установлен.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.