- Модуль: vote
- Путь к файлу: ~/bitrix/modules/vote/classes/general/vote.php
- Класс: CAllVote
- Вызов: CAllVote::UserAlreadyVote
static function UserAlreadyVote($voteId, $VOTE_USER_ID, $UNIQUE_TYPE, $delay, $USER_ID = false)
{
global $DB, $USER;
$err_mess = (CAllVote::err_mess())."
Function: UserAlreadyVote
Line: ";
$voteId = intval($voteId);
$UNIQUE_TYPE = intval($UNIQUE_TYPE);
$VOTE_USER_ID = intval($VOTE_USER_ID);
$USER_ID = intval($USER_ID);
if ($voteId <= 0 || $UNIQUE_TYPE <= 0)
return false;
//One session
if (($UNIQUE_TYPE & 1) && IsModuleInstalled('statistic') && array_key_exists($voteId, $_SESSION["VOTE"]["VOTES"]))
return 1;
$return = array();
$arSqlSearch = array();
$arSqlSelect = array("VE.ID");
//Same cookie
if ($UNIQUE_TYPE & 2 && ($VOTE_USER_ID > 0))
{
$arSqlSelect[] = "VE.VOTE_USER_ID";
$arSqlSearch[] = "VE.VOTE_USER_ID='".$VOTE_USER_ID."'";
}
// Same IP
if ($UNIQUE_TYPE & 4)
{
$tmp = CVote::CheckVotingIP($voteId, $_SERVER["REMOTE_ADDR"], $delay, array("RETURN_SEARCH_ARRAY" => "Y"));
$arSqlSelect[] = $tmp["select"];
$arSqlSearch[] = $tmp["search"];
}
// Same ID
if ($UNIQUE_TYPE & 8)
{
if ($USER_ID <= 0 || $USER_ID == $USER->GetID() && isset($_SESSION["VOTE"]["VOTES"][$voteId]))
{
$return[] = 8;
}
else
{
$arSqlSelect[] = "VU.AUTH_USER_ID";
$arSqlSearch[] = "VU.AUTH_USER_ID=".$USER_ID;
}
// Register date
if (($UNIQUE_TYPE & 16) &&
($arUser = CUser::GetByID($USER_ID)->fetch()) &&
is_array($arUser) &&
($userRegister = MakeTimeStamp($arUser['DATE_REGISTER'])) &&
($vote = CVote::GetByID($voteId)->Fetch()) &&
is_array($vote) &&
($voteStart = MakeTimeStamp($vote['DATE_START'])) &&
($userRegister > $voteStart)
)
{
$return[] = 16;
}
}
if (!empty($arSqlSearch))
{
$db_res = $DB->Query("SELECT ".implode(",", $arSqlSelect)."
FROM b_vote_event VE
LEFT JOIN b_vote_user VU ON (VE.VOTE_USER_ID = VU.ID)
WHERE VE.VOTE_ID=".$voteId." AND ((".implode(") OR (", $arSqlSearch)."))", false, $err_mess.__LINE__);
while ($res = $db_res->Fetch())
{
if ($USER_ID > 0 && $USER_ID == $USER->GetID())
$_SESSION["VOTE"]["VOTES"][$voteId] = $res["ID"];
// $UNIQUE_TYPE & 2
if (isset($res["VOTE_USER_ID"]) && $res["VOTE_USER_ID"] == $VOTE_USER_ID)
{
$return[] = 2;
}
//$UNIQUE_TYPE & 4
if (isset($res["IP"]) && $res["IP"] == $_SERVER["REMOTE_ADDR"]
&& ($delay <= 0 || !isset($res["KEEP_IP_SEC"]) || $delay > $res["KEEP_IP_SEC"]))
{
$return[] = 4;
}
// $UNIQUE_TYPE & 8
if (isset($res["AUTH_USER_ID"]) && $res["AUTH_USER_ID"] == $USER_ID)
{
$return[] = 8;
}
}
}
$return = empty($return) ? 0 : min($return);
return ($return > 0 ? $return : false);
}