- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/classes/general/userfieldenum.php
- Класс: CUserFieldEnum
- Вызов: CUserFieldEnum::GetList
static function GetList($aSort = array(), $aFilter = array())
{
global $DB, $CACHE_MANAGER;
if(CACHED_b_user_field_enum !== false)
{
$cacheId = "b_user_field_enum" . md5(serialize($aSort) . "." . serialize($aFilter));
if($CACHE_MANAGER->Read(CACHED_b_user_field_enum, $cacheId, "b_user_field_enum"))
{
$arResult = $CACHE_MANAGER->Get($cacheId);
$res = new CDBResult;
$res->InitFromArray($arResult);
return $res;
}
}
else
{
$cacheId = '';
}
$bJoinUFTable = false;
$arFilter = array();
foreach($aFilter as $key => $val)
{
if(is_array($val))
{
if(empty($val))
continue;
$val = array_map(array($DB, "ForSQL"), $val);
$val = "('" . implode("', '", $val) . "')";
}
else
{
if((string)$val == '')
continue;
$val = "('" . $DB->ForSql($val) . "')";
}
$key = mb_strtoupper($key);
switch($key)
{
case "ID":
case "USER_FIELD_ID":
case "VALUE":
case "DEF":
case "SORT":
case "XML_ID":
$arFilter[] = "UFE." . $key . " in " . $val;
break;
case "USER_FIELD_NAME":
$bJoinUFTable = true;
$arFilter[] = "UF.FIELD_NAME in " . $val;
break;
}
}
$arOrder = array();
foreach($aSort as $key => $val)
{
$key = mb_strtoupper($key);
$ord = (mb_strtoupper($val) <> "ASC" ? "DESC" : "ASC");
switch($key)
{
case "ID":
case "USER_FIELD_ID":
case "VALUE":
case "DEF":
case "SORT":
case "XML_ID":
$arOrder[] = "UFE." . $key . " " . $ord;
break;
}
}
if(empty($arOrder))
{
$arOrder[] = "UFE.SORT asc";
$arOrder[] = "UFE.ID asc";
}
DelDuplicateSort($arOrder);
$sOrder = "nORDER BY " . implode(", ", $arOrder);
if(empty($arFilter))
$sFilter = "";
else
$sFilter = "nWHERE " . implode("nAND ", $arFilter);
$strSql = "
SELECT
UFE.ID
,UFE.USER_FIELD_ID
,UFE.VALUE
,UFE.DEF
,UFE.SORT
,UFE.XML_ID
FROM
b_user_field_enum UFE
" . ($bJoinUFTable ? "INNER JOIN b_user_field UF ON UF.ID = UFE.USER_FIELD_ID" : "") . "
" . $sFilter . $sOrder;
if($cacheId == '')
{
$res = $DB->Query($strSql, false, "FILE: " . __FILE__ . "
LINE: " . __LINE__);
}
else
{
$arResult = array();
$res = $DB->Query($strSql, false, "FILE: " . __FILE__ . "
LINE: " . __LINE__);
while($ar = $res->Fetch())
$arResult[] = $ar;
$CACHE_MANAGER->Set($cacheId, $arResult);
$res = new CDBResult;
$res->InitFromArray($arResult);
}
return $res;
}