Вопрос. Голосование за топик без регистрации

Пытаюсь осуществить голосование за топик без регистрации по этому принципу livestreet.ru/blog/paidorders/7468.html#comment109039.

Повозившись некторое время, вот таким получился файл voteTopic.php


<?php
/**
 * Голосование за топик
 */

set_include_path(get_include_path().PATH_SEPARATOR.dirname(dirname(dirname(__FILE__))));
$sDirRoot=dirname(dirname(dirname(__FILE__)));
require_once($sDirRoot."/config/config.ajax.php");

$iValue=getRequest('value',null,'post');
$bStateError=true;
$sMsg='';
$sMsgTitle='';
$iRating=0;
if ($oEngine->User_IsAuthorization()) {
	if ($oTopic=$oEngine->Topic_GetTopicById(getRequest('idTopic',null,'post'))) {
		$oUserCurrent=$oEngine->User_GetUserCurrent();
		if ($oTopic->getUserId()!=$oUserCurrent->getId()) {
			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) or $iValue==0) {
						if (in_array($iValue,array('1','-1','0'))) {
							$oTopicVote=Engine::GetEntity('Vote');
							$oTopicVote->setTargetId($oTopic->getId());
							$oTopicVote->setTargetType('topic');
							$oTopicVote->setVoterId($oUserCurrent->getId());
							$oTopicVote->setDirection($iValue);
							$oTopicVote->setDate(date("Y-m-d H:i:s"));
							$iVal=0;
							if ($iValue!=0) {
								$iVal=(float)$oEngine->Rating_VoteTopic($oUserCurrent,$oTopic,$iValue);
							}
							$oTopicVote->setValue($iVal);
							$oTopic->setCountVote($oTopic->getCountVote()+1);
							if ($oEngine->Vote_AddVote($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('system_error');
						}
					} else {
						$sMsgTitle=$oEngine->Lang_Get('attention');
						$sMsg=$oEngine->Lang_Get('topic_vote_error_acl');
					}
				} else {
					$sMsgTitle=$oEngine->Lang_Get('attention');
					$sMsg=$oEngine->Lang_Get('topic_vote_error_time');
				}
			} else {
				$sMsgTitle=$oEngine->Lang_Get('attention');
				$sMsg=$oEngine->Lang_Get('topic_vote_error_already');
			}
		} else {
			$sMsgTitle=$oEngine->Lang_Get('attention');
			$sMsg=$oEngine->Lang_Get('topic_vote_error_self');
		}
	} else {
		$sMsgTitle=$oEngine->Lang_Get('error');
		$sMsg=$oEngine->Lang_Get('system_error');
	}
} else {
	$sMsgTitle=$oEngine->Lang_Get('error');
	$sMsg=$oEngine->Lang_Get('need_authorization');


} else {
	


	if ($oTopic=$oEngine->Topic_GetTopicById(getRequest('idTopic',null,'post'))) {
			if (!isset($_SESSION['voted_'.$oTopic->getId()])) {
				if (strtotime($oTopic->getDateAdd())>time()-Config::Get('acl.vote.topic.limit_time')) {
					if ($oEngine->ACL_CanVoteTopic($oTopic) or $iValue==0) {
						if (in_array($iValue,array('1','-1','0'))) {
							
							/*$oTopicVote=Engine::GetEntity('Vote');
							$oTopicVote->setTargetId($oTopic->getId());
							$oTopicVote->setTargetType('topic');
							$oTopicVote->setVoterId($oUserCurrent->getId());*/
							
							
							
							$oTopicVote->setDirection($iValue);
							$oTopicVote->setDate(date("Y-m-d H:i:s"));
							$iVal=0;
							if ($iValue!=0) {
								$iVal=(float)$oEngine->Rating_VoteTopic($oTopic,$iValue);
							}
							$oTopicVote->setValue($iVal);
							$oTopic->setCountVote($oTopic->getCountVote()+1);
							
							if (/*$oEngine->Vote_AddVote($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('system_error');
						}
					} else {
						$sMsgTitle=$oEngine->Lang_Get('attention');
						$sMsg=$oEngine->Lang_Get('topic_vote_error_acl');
					}
				} else {
					$sMsgTitle=$oEngine->Lang_Get('attention');
					$sMsg=$oEngine->Lang_Get('topic_vote_error_time');
				}
			} else {
				$sMsgTitle=$oEngine->Lang_Get('attention');
				$sMsg=$oEngine->Lang_Get('topic_vote_error_already');
			}
		} else {
			$sMsgTitle=$oEngine->Lang_Get('attention');
			$sMsg=$oEngine->Lang_Get('topic_vote_error_self');
		}


	
	
	
}


$GLOBALS['_RESULT'] = array(
"bStateError"     => $bStateError,
"iRating"   => $iRating,
"sMsgTitle"   => $sMsgTitle,
"sMsg"   => $sMsg,
);

?>


только при голосовании ничего не происходит, ни ошибок, ни положительного результата.
что нужно еще убрать, добавить, изменить? помогите пожалуйста.

22 комментария

avatar
пункт 2 из моего комментария сделали?
avatar
да вот что получилось

 {assign var="iTopicId" value=$oTopic->getId()} 
                {assign var="voted" value="voted_`$iTopicId`"}
	
				<ul class="voting {if $oVote || ($oUserCurrent && $oTopic->getUserId()==$oUserCurrent->getId()) || (!$oUserCurrent && (!$smarty.session.$voted))}	
				{if $oTopic->getRating()>0}positive{elseif $oTopic->getRating()<0}negative{/if}{/if} {if !$oUserCurrent || $oTopic->getUserId()==$oUserCurrent->getId() || (!$oUserCurrent && (!$smarty.session.$voted))}guest{/if} {if $oVote} voted {if $oVote->getDirection()>0}plus{elseif $oVote->getDirection()<0}minus{/if}{/if}">
					<li class="plus"><a href="#" onclick="lsVote.vote({$oTopic->getId()},this,1,'topic'); return false;"></a></li>
					<li class="total" title="{$aLang.topic_vote_count}: {$oTopic->getCountVote()}">{if $oVote || ($oUserCurrent && $oTopic->getUserId()==$oUserCurrent->getId()) || (!$oUserCurrent && (!$smarty.session.$voted))} {if $oTopic->getRating()>0}+{/if}{$oTopic->getRating()} {else} <a href="#" onclick="lsVote.vote({$oTopic->getId()},this,0,'topic'); return false;">—</a> {/if}</li>
					<li class="minus"><a href="#" onclick="lsVote.vote({$oTopic->getId()},this,-1,'topic'); return false;"></a></li>
avatar
я понимаю, что наверно здесь возможно какая-нибудь очевидная ошиба, но в связи малыми знаниями кода, вожусь достаточно долго
avatar
ни у кого мыслей не появилось?
avatar
а, я понял
вы думаете, что мой код позволит голосовать без регистрации за топики, а он позволяет лишь голосовать в опросах (question)
avatar
а голосование за топики это более комплексное решение?
avatar
это просто по-другому будет
avatar
Можно хотя бы примерно подсказать, если не трудно?
avatar
У Вас получилось?
avatar
Подскажите как это можно осуществить?
avatar
А это не опасно делать такую задумку? Ведь много тролей в интернете и минуса будут сыпаться как из мешка.
avatar
Сайт ориентирован на анонимную публику, отзывы про компании и работодателей. Пусть сыпятся, в такой теме не интересно троллить.
avatar
Как не интересно… а конкуренты? :)
avatar
Та пусть хоть поубивают там друг друга. Сначала набрать аудиторию нужно, а потом можно и закрыть срач.
avatar
Это зависит от того, для кого ты сайт делаешь. Если для компаний, которые тебе платят деньги за рекламу или размещение, то им будет совсем не интересно получать в репу минусы и в коменты оскорблен ия. Плюнут и уйдут. И останешься с нищебродами, которые твой сайт в дерьмо превратят. Чем меньше у юзера прав, тем лучше сайт.
avatar
Компании размещаю сам, сайт ориентирован именно на отзывы юзеров которым воблом регистрироваться, чтобы написать, что ему на кассе обвесили… или работник, которому по его мнению мало платят — сто процентов не будет регистрировать аккаунт, из за боязни быть вычисленным руководством компании. А анонимно напишет и отзыв и проголосует.
avatar
Одни негативы будут. Если юзера компашка устраивает, он писать ничего не будет, лень. Пишут только те, которые обижены.
avatar
Так и будет, к примеру bestportal.com.ua/

И все таки как на счет открытого голосования? Это возможно?
avatar
А почему нет? Если есть открытое комментирование, то может быть и открытое голосование. По тому же принципу.
avatar
Осталось понять как это реализовать.
avatar
Ну так у тебя же уже есть юзер-гость со своим ID, он для открытых комментов заведен, вот от него и голосовалка может быть.
avatar
Моих знаний не хватит для реализации данной идеи.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.