- Модуль: iblock
- Путь к файлу: ~/bitrix/modules/iblock/classes/general/iblockproperty.php
- Класс: CAllIBlockProperty
- Вызов: CAllIBlockProperty::GetList
static function GetList($arOrder=Array(), $arFilter=Array())
{
global $DB;
$strSql = "
SELECT BP.*
FROM b_iblock_property BP
";
$bJoinIBlock = false;
$arSqlSearch = array();
foreach($arFilter as $key => $val)
{
$val = $DB->ForSql($val);
$key = mb_strtoupper($key);
switch($key)
{
case "ACTIVE":
case "SEARCHABLE":
case "FILTRABLE":
case "IS_REQUIRED":
case "MULTIPLE":
if($val=="Y" || $val=="N")
$arSqlSearch[] = "BP.".$key." = '".$val."'";
break;
case "?CODE":
case "?NAME":
$arSqlSearch[] = CIBlock::FilterCreate("BP.".mb_substr($key, 1), $val, "string", "E");
break;
case "CODE":
case "NAME":
$arSqlSearch[] = "UPPER(BP.".$key.") LIKE UPPER('".$val."')";
break;
case "XML_ID":
case "EXTERNAL_ID":
$arSqlSearch[] = "BP.XML_ID LIKE '".$val."'";
break;
case "!XML_ID":
case "!EXTERNAL_ID":
$arSqlSearch[] = "(BP.XML_ID IS NULL OR NOT (BP.XML_ID LIKE '".$val."'))";
break;
case "TMP_ID":
$arSqlSearch[] = "BP.TMP_ID LIKE '".$val."'";
break;
case "!TMP_ID":
$arSqlSearch[] = "(BP.TMP_ID IS NULL OR NOT (BP.TMP_ID LIKE '".$val."'))";
break;
case "PROPERTY_TYPE":
$ar = explode(":", $val);
if (count($ar) == 2)
{
$val = $ar[0];
$arSqlSearch[] = "BP.USER_TYPE = '".$ar[1]."'";
}
$arSqlSearch[] = "BP.".$key." = '".$val."'";
break;
case "USER_TYPE":
$arSqlSearch[] = "BP.".$key." = '".$val."'";
break;
case "ID":
case "IBLOCK_ID":
case "LINK_IBLOCK_ID":
case "VERSION":
$arSqlSearch[] = "BP.".$key." = ".(int)$val;
break;
case "IBLOCK_CODE":
$arSqlSearch[] = "UPPER(B.CODE) = UPPER('".$val."')";
$bJoinIBlock = true;
break;
}
}
if($bJoinIBlock)
$strSql .= "
INNER JOIN b_iblock B ON B.ID = BP.IBLOCK_ID
";
if(!empty($arSqlSearch))
$strSql .= "
WHERE ".implode("nttttAND ", $arSqlSearch)."
";
$allowKeys = array(
"ID" => true,
"IBLOCK_ID" => true,
"NAME" => true,
"ACTIVE" => true,
"SORT" => true,
"FILTRABLE" => true,
"SEARCHABLE" => true
);
$orderKeys = array();
$arSqlOrder = array();
foreach($arOrder as $by => $order)
{
$by = mb_strtoupper($by);
if (!isset($allowKeys[$by]))
$by = "TIMESTAMP_X";
if (isset($orderKeys[$by]))
continue;
$orderKeys[$by] = true;
$order = mb_strtoupper($order) == "ASC"? "ASC": "DESC";
$arSqlOrder[] = "BP.".$by." ".$order;
}
if(!empty($arSqlOrder))
$strSql .= "
ORDER BY ".implode(", ", $arSqlOrder)."
";
$res = $DB->Query($strSql, false, "FILE: ".__FILE__."
LINE: ".__LINE__);
return new CIBlockPropertyResult($res);
}