• Модуль: 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__); }