• Модуль: vote
  • Путь к файлу: ~/bitrix/modules/vote/classes/mysql/vote.php
  • Класс: CVote
  • Вызов: CVote::GetList
static function GetList($by = 's_id', $order = 'desc', $arFilter = [])
{
	global $DB;
	$err_mess = (CVote::err_mess())."
Function: GetList
Line: "; $arSqlSearch = array(); $arFilter = (is_array($arFilter) ? $arFilter : array()); foreach ($arFilter as $key => $val) { if (is_string($val) && $val === "NOT_REF"): continue; endif; $key = strtoupper($key); switch($key) { case "ID": $match = ($arFilter[$key."_EXACT_MATCH"] == "N" ? "Y" : "N"); $arSqlSearch[] = GetFilterQuery("V.ID", $val, $match); break; case "ACTIVE": $arSqlSearch[] = "V.ACTIVE = '".($val == "Y" ? "Y" : "N")."'"; break; case "DATE_START_1": $arSqlSearch[] = "V.DATE_START >= ".$DB->CharToDateFunction($val, "SHORT"); break; case "DATE_START_2": $arSqlSearch[] = "V.DATE_START < ".$DB->CharToDateFunction($val, "SHORT")." + INTERVAL 1 DAY"; break; case "DATE_END_1": $arSqlSearch[] = "V.DATE_END >= ".$DB->CharToDateFunction($val, "SHORT"); break; case "DATE_END_2": $arSqlSearch[] = "V.DATE_END < ".$DB->CharToDateFunction($val, "SHORT")." + INTERVAL 1 DAY"; break; case "LAMP": if ($val == "red") $arSqlSearch[] = "(V.ACTIVE<>'Y' or now()V.DATE_END)"; elseif ($val == "green") $arSqlSearch[] = "(V.ACTIVE='Y' and now()>=V.DATE_START and now()<=V.DATE_END)"; break; case "CHANNEL": $match = ($arFilter[$key."_EXACT_MATCH"] == "Y" ? "N" : "Y"); $arSqlSearch[] = GetFilterQuery("C.ID, C.TITLE, C.SYMBOLIC_NAME", $val, $match); break; case "CHANNEL_ID": $match = ($arFilter[$key."_EXACT_MATCH"] == "N" ? "Y" : "N"); $arSqlSearch[] = GetFilterQuery("V.CHANNEL_ID", $val, $match); break; case "CHANNEL_ACTIVE": case "CHANNEL_HIDDEN": $arSqlSearch[] = "C.".str_replace("CHANNEL_", "", $key)." = '".($val == "Y" ? "Y" : "N")."'"; break; case "TITLE": case "DESCRIPTION": $match = ($arFilter[$key."_EXACT_MATCH"] == "Y" ? "N" : "Y"); $arSqlSearch[] = GetFilterQuery("V.".$key, $val, $match); break; case "COUNTER_1": $arSqlSearch[] = "V.COUNTER>='".intval($val)."'"; break; case "COUNTER_2": $arSqlSearch[] = "V.COUNTER<='".intval($val)."'"; break; } } if ($by == "s_id") $strSqlOrder = "ORDER BY V.ID"; elseif ($by == "s_title") $strSqlOrder = "ORDER BY V.TITLE"; elseif ($by == "s_date_start") $strSqlOrder = "ORDER BY V.DATE_START"; elseif ($by == "s_date_end") $strSqlOrder = "ORDER BY V.DATE_END"; elseif ($by == "s_lamp") $strSqlOrder = "ORDER BY LAMP"; elseif ($by == "s_counter") $strSqlOrder = "ORDER BY V.COUNTER"; elseif ($by == "s_active") $strSqlOrder = "ORDER BY V.ACTIVE"; elseif ($by == "s_c_sort") $strSqlOrder = "ORDER BY V.C_SORT"; elseif ($by == "s_channel") $strSqlOrder = "ORDER BY V.CHANNEL_ID"; else { $strSqlOrder = "ORDER BY V.ID"; } if ($order != "asc") { $strSqlOrder .= " desc "; } $strSqlSearch = GetFilterSqlSearch($arSqlSearch); $strSql = " SELECT VV.*, C.TITLE as CHANNEL_TITLE, C.ACTIVE as CHANNEL_ACTIVE, C.HIDDEN as CHANNEL_HIDDEN, V.*, V.KEEP_IP_SEC as DELAY, 'S' as DELAY_TYPE, CASE WHEN (C.ACTIVE = 'Y' AND V.ACTIVE = 'Y' AND V.DATE_START <= NOW() AND NOW() <= V.DATE_END) THEN IF (C.VOTE_SINGLE != 'Y', 'green', 'yellow') ELSE 'red' END AS LAMP, ".$DB->DateToCharFunction("V.TIMESTAMP_X")." TIMESTAMP_X, ".$DB->DateToCharFunction("V.DATE_START")." DATE_START, ".$DB->DateToCharFunction("V.DATE_END")." DATE_END, UNIX_TIMESTAMP(V.DATE_END) - UNIX_TIMESTAMP(V.DATE_START) PERIOD FROM ( SELECT V.ID, COUNT(Q.ID) QUESTIONS FROM b_vote V INNER JOIN b_vote_channel C ON (C.ID=V.CHANNEL_ID) LEFT JOIN b_vote_question Q ON (Q.VOTE_ID=V.ID) WHERE ".$strSqlSearch." GROUP BY V.ID ) VV INNER JOIN b_vote V ON (V.ID = VV.ID) INNER JOIN b_vote_channel C ON (C.ID = V.CHANNEL_ID) ". $strSqlOrder; $res = $DB->Query($strSql, false, $err_mess.__LINE__); $res = new _CVoteDBResult($res); return $res; }