- Модуль: vote
- Путь к файлу: ~/bitrix/modules/vote/classes/general/answer.php
- Класс: CAllVoteAnswer
- Вызов: CAllVoteAnswer::GetListEx
static function GetListEx($arOrder = array("ID" => "ASC"), $arFilter=array())
{
global $DB;
$arSqlSearch = Array();
$strSqlSearch = "";
$arSqlOrder = Array();
$strSqlOrder = "";
$arFilter = (is_array($arFilter) ? $arFilter : array());
foreach ($arFilter as $key => $val)
{
if ($val === "NOT_REF")
continue;
$key_res = VoteGetFilterOperation($key);
$strNegative = $key_res["NEGATIVE"];
$strOperation = $key_res["OPERATION"];
$key = mb_strtoupper($key_res["FIELD"]);
switch($key)
{
case "ID":
case "QUESTION_ID":
$str = ($strNegative=="Y"?"NOT":"")."(VA.".$key." IS NULL OR VA.".$key."<=0)";
if (!empty($val))
{
$str = ($strNegative=="Y"?" VA.".$key." IS NULL OR NOT ":"")."(VA.".$key." ".$strOperation." ".intval($val).")";
if ($strOperation == "IN")
{
$val = array_unique(array_map("intval", (is_array($val) ? $val : explode(",", $val))), SORT_NUMERIC);
if (!empty($val))
{
$str = ($strNegative=="Y"?" NOT ":"")."(VA.".$key." IN (".implode(",", $val)."))";
}
}
}
$arSqlSearch[] = $str;
break;
case "VOTE_ID":
$str = ($strNegative=="Y"?"NOT":"")."(VQ.".$key." IS NULL OR VQ.".$key."<=0)";
if (!empty($val))
{
$str = ($strNegative=="Y"?" VQ.".$key." IS NULL OR NOT ":"")."(VQ.".$key." ".$strOperation." ".intval($val).")";
if ($strOperation == "IN")
{
$val = array_unique(array_map("intval", (is_array($val) ? $val : explode(",", $val))), SORT_NUMERIC);
if (!empty($val))
{
$str = ($strNegative=="Y"?" NOT ":"")."(VQ.".$key." IN (".implode(",", $val)."))";
}
}
}
$arSqlSearch[] = $str;
break;
case "CHANNEL_ID":
$str = ($strNegative=="Y"?"NOT":"")."(V.".$key." IS NULL OR V.".$key."<=0)";
if (!empty($val))
{
$str = ($strNegative=="Y"?" V.".$key." IS NULL OR NOT ":"")."(V.".$key." ".$strOperation." ".intval($val).")";
if ($strOperation == "IN")
{
$val = array_unique(array_map("intval", (is_array($val) ? $val : explode(",", $val))), SORT_NUMERIC);
if (!empty($val))
{
$str = ($strNegative=="Y"?" NOT ":"")."(V.".$key." IN (".implode(",", $val)."))";
}
}
}
$arSqlSearch[] = $str;
break;
case "ACTIVE":
if (empty($val))
$arSqlSearch[] = ($strNegative=="Y"?"NOT":"")."(VA.".$key." IS NULL OR ".($DB->type == "MSSQL" ? "LEN" : "LENGTH")."(VA.".$key.")<=0)";
else
$arSqlSearch[] = ($strNegative=="Y"?" VA.".$key." IS NULL OR NOT ":"")."(VA.".$key." ".$strOperation." '".$DB->ForSql($val)."')";
break;
}
}
if (count($arSqlSearch) > 0)
$strSqlSearch = " AND (".implode(") AND (", $arSqlSearch).") ";
foreach ($arOrder as $by => $order)
{
$by = mb_strtoupper($by);
$order = mb_strtoupper($order);
$by = (in_array($by, array("ACTIVE", "QUESTION_ID", "C_SORT", "COUNTER")) ? $by : "ID");
if ($order!="ASC") $order = "DESC";
if ($by == "ACTIVE") $arSqlOrder[] = " VA.ACTIVE ".$order." ";
elseif ($by == "QUESTION_ID") $arSqlOrder[] = " VA.QUESTION_ID ".$order." ";
elseif ($by == "C_SORT") $arSqlOrder[] = " VA.C_SORT ".$order." ";
elseif ($by == "COUNTER") $arSqlOrder[] = " VA.COUNTER ".$order." ";
else $arSqlOrder[] = " VA.ID ".$order." ";
}
DelDuplicateSort($arSqlOrder);
if (count($arSqlOrder) > 0)
$strSqlOrder = " ORDER BY ".implode(", ", $arSqlOrder);
$strSql = "
SELECT V.CHANNEL_ID, VQ.VOTE_ID, VA.*
FROM b_vote_answer VA
INNER JOIN b_vote_question VQ ON (VA.QUESTION_ID = VQ.ID)
INNER JOIN b_vote V ON (VQ.VOTE_ID = V.ID)
WHERE 1=1 ".$strSqlSearch." ".$strSqlOrder;
return $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__);
}