• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/site.php
  • Класс: CAllSite
  • Вызов: CAllSite::GetList
static function GetList($by = "sort", $order = "asc", $arFilter=array())
{
	global $DB, $CACHE_MANAGER;

	if(CACHED_b_lang!==false)
	{
		$cacheId = "b_lang".md5($by.".".$order.".".serialize($arFilter));
		if($CACHE_MANAGER->Read(CACHED_b_lang, $cacheId, "b_lang"))
		{
			$arResult = $CACHE_MANAGER->Get($cacheId);

			$res = new CDBResult;
			$res->InitFromArray($arResult);
			$res = new _CLangDBResult($res);
			return $res;
		}
	}

	$strSqlSearch = "";
	$bIncDomain = false;
	if(is_array($arFilter))
	{
		foreach($arFilter as $key=>$val)
		{
			if((string)$val == '')
			{
				continue;
			}
			$val = $DB->ForSql($val);
			switch(strtoupper($key))
			{
				case "ACTIVE":
					if($val == "Y" || $val == "N")
					{
						$strSqlSearch .= " AND L.ACTIVE='".$val."'n";
					}
					break;
				case "DEFAULT":
					if($val == "Y" || $val == "N")
					{
						$strSqlSearch .= " AND L.DEF='".$val."'n";
					}
					break;
				case "NAME":
					$strSqlSearch .= " AND UPPER(L.NAME) LIKE UPPER('".$val."')n";
					break;
				case "DOMAIN":
					$bIncDomain = true;
					$strSqlSearch .= " AND UPPER(D.DOMAIN) LIKE UPPER('".$val."')n";
					break;
				case "IN_DIR":
					$strSqlSearch .= " AND UPPER('".$val."') LIKE ".$DB->Concat("UPPER(L.DIR)", "'%'")."n";
					break;
				case "ID":
				case "LID":
					$strSqlSearch .= " AND L.LID='".$val."'n";
					break;
				case "LANGUAGE_ID":
					$strSqlSearch .= " AND L.LANGUAGE_ID='".$val."'n";
					break;
			}
		}
	}

	$strSql = "
		SELECT ".($bIncDomain ? " DISTINCT " : "")."
			L.*,
			L.LID ID,
			L.LID SITE_ID,
			".$DB->Length("L.DIR").",
			".$DB->IsNull($DB->Length("L.DOC_ROOT"), "0").",
			C.FORMAT_DATE, C.FORMAT_DATETIME, C.FORMAT_NAME, C.WEEK_START, C.CHARSET, C.DIRECTION
		FROM
			b_culture C,
			b_lang L ".($bIncDomain? "LEFT JOIN b_lang_domain D ON D.LID=L.LID " : "")."
		WHERE
			C.ID=L.CULTURE_ID
			".$strSqlSearch."
		";

	$by = strtolower($by);
	$order = strtolower($order);

	if($by == "lid" || $by=="id")
	{
		$strSqlOrder = " ORDER BY L.LID ";
	}
	elseif($by == "active")
	{
		$strSqlOrder = " ORDER BY L.ACTIVE ";
	}
	elseif($by == "name")
	{
		$strSqlOrder = " ORDER BY L.NAME ";
	}
	elseif($by == "dir")
	{
		$strSqlOrder = " ORDER BY L.DIR ";
	}
	elseif($by == "lendir")
	{
		$strSqlOrder = " ORDER BY ".$DB->IsNull($DB->Length("L.DOC_ROOT"), "0").($order=="desc"? " desc":"").", ".$DB->Length("L.DIR");
	}
	elseif($by == "def")
	{
		$strSqlOrder = " ORDER BY L.DEF ";
	}
	elseif($by == "def_list")
	{
		$strSqlOrder = " ORDER BY L.DEF desc, L.SORT ";
	}
	else
	{
		$strSqlOrder = " ORDER BY L.SORT ";
	}

	if($order == "desc")
	{
		$strSqlOrder .= " desc ";
	}

	$strSql .= $strSqlOrder;
	if(CACHED_b_lang===false)
	{
		$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); } $res = new _CLangDBResult($res); return $res; }