Вопрос. Голосование за юзера раз в сутки.
Пытаюсь осуществить возможность голосование за юзера раз в сутки. Пока безуспешно. Может кто на скорую руку подскажет?
Вот код voteUser.php редактированный под данную задачу
Из всего этого я понял, что проблема только в этом условии:
Я так понял "$oUser->getId()" это за кого голосуют, "$oUserCurrent->getId()" кто голосует. Правильно? Если да, правильно ли я получаю дату голосования голосующего и ставлю занчок меньше и дату?
Как правильно его прописать чтобы все зароботало?
Вот код voteUser.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;
$iSkill=0;
$iCountVote=0;
if ($oEngine->User_IsAuthorization()) {
if ($oUser=$oEngine->User_GetUserById(getRequest('idUser',null,'post'))) {
$oUserCurrent=$oEngine->User_GetUserCurrent();
if ($oUser->getId()!=$oUserCurrent->getId()) {
if (!($oUserVote=$oEngine->Vote_GetVote($oUser->getId(),'user',$oUserCurrent->getId()->getVote_date())<time()-60*60*24*1)))) {
if ($oEngine->ACL_CanVoteUser($oUserCurrent,$oUser)) {
if (in_array($iValue,array('1','-1'))) {
$oUserVote=Engine::GetEntity('Vote');
$oUserVote->setTargetId($oUser->getId());
$oUserVote->setTargetType('user');
$oUserVote->setVoterId($oUserCurrent->getId());
$oUserVote->setDirection($iValue);
$oUserVote->setDate(date("Y-m-d H:i:s"));
$iVal=(float)$oEngine->Rating_VoteUser($oUserCurrent,$oUser,$iValue);
$oUserVote->setValue($iVal);
//$oUser->setRating($oUser->getRating()+$iValue);
$oUser->setCountVote($oUser->getCountVote()+1);
if ($oEngine->Vote_AddVote($oUserVote) and $oEngine->User_Update($oUser)) {
$bStateError=false;
$sMsgTitle=$oEngine->Lang_Get('attention');
$sMsg=$oEngine->Lang_Get('user_vote_ok');
$iRating=$oUser->getRating();
$iSkill=$oUser->getSkill();
$iCountVote=$oUser->getCountVote();
} 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('user_vote_error_acl');
}
} else {
$sMsgTitle=$oEngine->Lang_Get('attention');
$sMsg=$oEngine->Lang_Get('user_vote_error_already');
}
} else {
$sMsgTitle=$oEngine->Lang_Get('attention');
$sMsg=$oEngine->Lang_Get('user_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');
}
$GLOBALS['_RESULT'] = array(
"bStateError" => $bStateError,
"iRating" => $iRating,
"iSkill" => $iSkill,
"iCountVote" => $iCountVote,
"sMsgTitle" => $sMsgTitle,
"sMsg" => $sMsg,
);
?>
Из всего этого я понял, что проблема только в этом условии:
if (!($oUserVote=$oEngine->Vote_GetVote($oUser->getId(),'user',$oUserCurrent->getId()->getVote_date())<time()-60*60*24*1)))) {
Я так понял "$oUser->getId()" это за кого голосуют, "$oUserCurrent->getId()" кто голосует. Правильно? Если да, правильно ли я получаю дату голосования голосующего и ставлю занчок меньше и дату?
Как правильно его прописать чтобы все зароботало?
12 комментариев
Скажите, я праильно делаю что дублирую одно и тоже вместо изадминистратор, проверка даты голоса?
Заменить на это:
Работоспособность не гарантирую, но грубую ошибку исправит.
заменил как вы сказали в редактируемом мной ранее userVote.php(где брал код от голосования админа скокахошь раз) та же ошибка.взял нулевый userVote.php(какой есть в движке) заменил строчку
На
время для проверки поставил 1 минуту(60*1*1*1). первый раз голосует уже прогресс!!! но второй раз, через минуту выдает опять выдает Please try again later. Что еще нужно добавить, изменить?
Есть связка «Кто голосовал» — «За кого голосовал» — вот это и надо ковырять после замены проверки.
И это 60*1*1*1 — вообще ни в какие ворота не лезет =D
Я это уже понял. Но я думал, что именно «Кто голосовал» добавить тогда то и через сколько он будет голосовать еще раз, то это как раз решается вот этой строчкой
Хорошо, одним voteUser.php хотя бы можно обойтись?
Я очень плохо разбираюсь в программировании и попросил помощи, не потому, что мне лень самому делать, а потому что я не знаю как уже можно сделать так, чтобы приблизить желаемый результат.
Можете посмотреть функцию GetVote в этом классе.
1. Лучше копаться не в voteUser.php, а Vote.class.php
2. Сообрази, что делать со строчкой
Вот функция на которую мне указали в Vote.class.php
но там нет того самого Voter'a.
я понимаю, TargetId за кого голосуют, TargetType тип голоса, VoterId голосоующий. Вот как этому вотеру разрешить еще раз голосовать через сутки? Просто я не совсем понимаю как правильно их поставить и что добавить.