public static function UserAlreadyVote($VOTE_ID, $VOTE_USER_ID, $UNIQUE_TYPE, $KEEP_IP_SEC, $USER_ID = false) { global $DB, $USER; $err_mess = CAllVote::err_mess() . "<br>Function: UserAlreadyVote<br>Line: "; $VOTE_ID = intval($VOTE_ID); $UNIQUE_TYPE = intval($UNIQUE_TYPE); $VOTE_USER_ID = intval($VOTE_USER_ID); $USER_ID = intval($USER_ID); if ($VOTE_ID <= 0) { return false; } if ($UNIQUE_TYPE <= 0) { return false; } if ($UNIQUE_TYPE > 4) { $UNIQUE_TYPE -= 5; } //No restrictions if ($UNIQUE_TYPE <= 0) { return false; } //One session if ($UNIQUE_TYPE & 1 && IsModuleInstalled('statistic') && is_array($_SESSION["VOTE_ARRAY"]) && in_array($VOTE_ID, $_SESSION["VOTE_ARRAY"])) { return 1; } $arSqlSearch = array(); $arSqlSelect = array("VE.ID"); //Same cookie if ($UNIQUE_TYPE & 2) { if ($VOTE_USER_ID > 0 && $UNIQUE_TYPE != 6) { $arSqlSelect[] = "VE.VOTE_USER_ID"; $arSqlSearch[] = "VE.VOTE_USER_ID='" . $VOTE_USER_ID . "'"; } } // Same IP if ($UNIQUE_TYPE & 4) { $tmp = CVote::CheckVotingIP($VOTE_ID, $_SERVER["REMOTE_ADDR"], $KEEP_IP_SEC, array("RETURN_SEARCH_ARRAY" => "Y")); if (is_array($tmp)) { $arSqlSelect[] = $tmp["select"]; $arSqlSearch[] = $tmp["search"]; } else { return 4; } } // Same ID if ($UNIQUE_TYPE & 8) { if ($USER_ID <= 0 || $USER_ID == $USER->GetID() && !!$_SESSION["VOTE"]["VOTES"][$VOTE_ID]) { return 8; } else { if ($UNIQUE_TYPE & 16) { $rUser = CUser::GetByID($USER_ID); if ($rUser && ($arUser = $rUser->Fetch())) { $userRegister = MakeTimeStamp($arUser['DATE_REGISTER']); $rVote = CVote::GetByID($VOTE_ID); if ($rVote && ($arVote = $rVote->Fetch())) { $voteStart = MakeTimeStamp($arVote['DATE_START']); if ($userRegister > $voteStart) { return 16; } } } } $arSqlSelect[] = "VU.AUTH_USER_ID"; $arSqlSearch[] = "VU.AUTH_USER_ID=" . $USER_ID; } } if (!empty($arSqlSearch)) { $strSql = "SELECT " . implode(",", $arSqlSelect) . "\n\t\t\t\tFROM b_vote_event VE\n\t\t\t\tLEFT JOIN b_vote_user VU ON (VE.VOTE_USER_ID = VU.ID)\n\t\t\t\tWHERE VE.VOTE_ID=" . $VOTE_ID . " AND ((" . implode(") OR (", $arSqlSearch) . "))"; $db_res = $DB->Query($strSql, false, $err_mess . __LINE__); if ($db_res && ($res = $db_res->Fetch())) { $return = 16; $event_id = 0; do { if ($UNIQUE_TYPE & 2 && $res["VOTE_USER_ID"] == $VOTE_USER_ID) { $return = min($return, 2); break; } elseif ($UNIQUE_TYPE & 4 && $res["IP"] == $_SERVER["REMOTE_ADDR"] && ($KEEP_IP_SEC <= 0 || $KEEP_IP_SEC > $res["KEEP_IP_SEC"])) { $return = min($return, 4); } elseif ($UNIQUE_TYPE & 8 && $res["AUTH_USER_ID"] == $USER_ID) { $return = min($return, 8); $event_id = $event_id > 0 && $USER_ID == $USER->GetID() ? $event_id : intval($res["ID"]); } } while ($res = $db_res->Fetch()); if ($event_id > 0) { $_SESSION["VOTE"]["VOTES"][$VOTE_ID] = $event_id; } return $return != 16 ? $return : true; } } return false; }