• Модуль: vote
  • Путь к файлу: ~/bitrix/modules/vote/classes/mysql/vote.php
  • Класс: CVote
  • Вызов: CVote::GetPublicList
static function GetPublicList($arFilter=Array(), $strSqlOrder="ORDER BY C.C_SORT, C.ID, V.DATE_START desc", $params = array())
{
	global $DB, $USER;
	$err_mess = (CVote::err_mess())."
Function: GetPublicList
Line: "; $arSqlSearch = array(); $arFilter = (is_array($arFilter) ? $arFilter : array()); $params = (is_array($params) ? $params : array()); $left_join = ""; foreach ($arFilter as $key => $val) { if (empty($val) || (is_string($val) && $val === "NOT_REF")) continue; $key = mb_strtoupper($key); switch($key) { case "SITE": $val = (is_array($val) ? implode(" | ", $val) : $val); $match = ($arFilter[$key."_EXACT_MATCH"] == "N" ? "Y" : "N"); $arSqlSearch[] = GetFilterQuery("CS.SITE_ID", $val, $match); $left_join = "LEFT JOIN b_vote_channel_2_site CS ON (C.ID = CS.CHANNEL_ID)"; break; case "CHANNEL": $match = ($arFilter[$key."_EXACT_MATCH"] == "N" ? "Y" : "N"); if (is_array($val)): $arr = array(); foreach ($val as $v): $v = trim($v); if (!empty($v)) { $arr[] = GetFilterQuery("C.SYMBOLIC_NAME", $v, $match); } endforeach; if (!empty($arr)): $arSqlSearch[] = "((".implode(") OR (", $arr)."))"; endif; else: $arSqlSearch[] = GetFilterQuery("C.SYMBOLIC_NAME", $val, $match); endif; break; case "FIRST_SITE_ID": case "LID": $match = ($arFilter[$key."_EXACT_MATCH"] == "N" ? "Y" : "N"); $arSqlSearch[] = GetFilterQuery("C.FIRST_SITE_ID",$val,$match); break; } } $strSqlSearch = GetFilterSqlSearch($arSqlSearch); $is_admin = in_array(1, $USER->GetUserGroupArray()); $groups = $USER->GetGroups(); $iCnt = 0; if (array_key_exists("bDescPageNumbering", $params) && $params["nTopCount"] <= 0 || $params["bCount"] === true) { $strSql = "SELECT COUNT(V1.ID) CNT FROM ( SELECT V.CHANNEL_ID, V.ID, ".($is_admin ? "2" : "max(G.PERMISSION)")." as MAX_PERMISSION FROM b_vote V INNER JOIN b_vote_channel C ON (C.ACTIVE = 'Y' AND C.HIDDEN = 'N' AND V.CHANNEL_ID = C.ID) LEFT JOIN b_vote_channel_2_group G ON (G.CHANNEL_ID = C.ID and G.GROUP_ID in ($groups)) $left_join WHERE $strSqlSearch AND V.ACTIVE = 'Y' AND V.DATE_START <= NOW() GROUP BY V.CHANNEL_ID, V.ID ".($is_admin ? "" : " HAVING MAX_PERMISSION > 0")." ) V1"; $db_res = $DB->Query($strSql, false, $err_mess.__LINE__); if ($db_res && ($res = $db_res->Fetch())) $iCnt = intval($res["CNT"]); if ($params["bCount"] === true) return $iCnt; } $strSql = " SELECT C.TITLE CHANNEL_TITLE, V.*, V.KEEP_IP_SEC as DELAY, 'S' as DELAY_TYPE, ".$DB->DateToCharFunction("V.DATE_START")." DATE_START, ".$DB->DateToCharFunction("V.DATE_END")." DATE_END, V4.MAX_PERMISSION, V4.LAMP FROM ( SELECT V.CHANNEL_ID, V.ID, ".($is_admin ? "2" : "max(G.PERMISSION)")." as MAX_PERMISSION, IF((C.VOTE_SINGLE = 'Y'), (IF(V.ID = VV.ACTIVE_VOTE_ID, 'green', 'red')), (IF(V.ACTIVE = 'Y' AND V.DATE_START <= NOW() AND NOW() <= V.DATE_END, 'green', 'red'))) LAMP FROM b_vote V INNER JOIN b_vote_channel C ON (C.ACTIVE = 'Y' AND C.HIDDEN = 'N' AND V.CHANNEL_ID = C.ID) LEFT JOIN ( SELECT VVV.CHANNEL_ID, MAX(VVV.ID) AS ACTIVE_VOTE_ID FROM b_vote VVV, b_vote_channel CCC WHERE VVV.CHANNEL_ID = CCC.ID AND CCC.VOTE_SINGLE='Y' AND VVV.ACTIVE = 'Y' AND NOW() >= VVV.DATE_START AND VVV.DATE_END >= NOW() GROUP BY VVV.CHANNEL_ID) VV ON (VV.CHANNEL_ID = V.CHANNEL_ID) LEFT JOIN b_vote_channel_2_group G ON (G.CHANNEL_ID = C.ID and G.GROUP_ID in ($groups)) $left_join WHERE $strSqlSearch AND V.ACTIVE = 'Y' AND V.DATE_START <= NOW() GROUP BY V.CHANNEL_ID, V.ID ".($is_admin ? "" : " HAVING MAX_PERMISSION > 0")." ) V4 INNER JOIN b_vote V ON (V4.ID = V.ID) INNER JOIN b_vote_channel C ON (V4.CHANNEL_ID = C.ID) ".$DB->ForSql($strSqlOrder); if (array_key_exists("bDescPageNumbering", $params) && $params["nTopCount"] <= 0) { $db_res = new CDBResult(); $db_res->NavQuery($strSql, $iCnt, $params); } else { if ($params["nTopCount"] > 0) $strSql .= " LIMIT 0,".intval($params["nTopCount"]); $db_res = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__); } return $db_res; }