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