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