- Модуль: ldap
- Путь к файлу: ~/bitrix/modules/ldap/classes/general/ldap_server.php
- Класс: CLdapServer
- Вызов: CLdapServer::GetList
static function GetList($arOrder=Array(), $arFilter=Array())
{
global $USER, $DB, $APPLICATION;
$strSql =
"SELECT ls.*, ".
" ".$DB->DateToCharFunction("ls.TIMESTAMP_X")." as TIMESTAMP_X, ".
" ".$DB->DateToCharFunction("ls.SYNC_LAST")." as SYNC_LAST ".
"FROM b_ldap_server ls ";
if(!is_array($arFilter))
$arFilter = Array();
$arSqlSearch = Array();
$filter_keys = array_keys($arFilter);
$fkCount = count($filter_keys);
for($i=0; $i<$fkCount; $i++)
{
$val = $arFilter[$filter_keys[$i]];
$key=$filter_keys[$i];
$res = CLdapUtil::MkOperationFilter($key);
$key = mb_strtoupper($res["FIELD"]);
$cOperationType = $res["OPERATION"];
switch($key)
{
case "ACTIVE":
case "SYNC":
case "CONVERT_UTF8":
case "USER_GROUP_ACCESSORY":
$arSqlSearch[] = CLdapUtil::FilterCreate("ls.".$key, $val, "string_equal", $cOperationType);
break;
case "ID":
case "PORT":
case "MAX_PAX_SIZE":
case "CONNECTION_TYPE":
$arSqlSearch[] = CLdapUtil::FilterCreate("ls.".$key, $val, "number", $cOperationType);
break;
case "TIMESTAMP_X":
$arSqlSearch[] = CLdapUtil::FilterCreate("ls.".$key, $val, "date", $cOperationType);
break;
case "SYNC_LAST":
$arSqlSearch[] = CLdapUtil::FilterCreate("ls.".$key, $val, "date", $cOperationType);
break;
case "CODE":
case "NAME":
case "DESCRIPTION":
case "SERVER":
case "ADMIN_LOGIN":
case "ADMIN_PASSWORD":
case "BASE_DN":
case "GROUP_FILTER":
case "GROUP_ID_ATTR":
case "GROUP_NAME_ATTR":
case "GROUP_MEMBERS_ATTR":
case "USER_FILTER":
case "USER_ID_ATTR":
case "USER_NAME_ATTR":
case "USER_LAST_NAME_ATTR":
case "USER_EMAIL_ATTR":
case "USER_GROUP_ATTR":
$arSqlSearch[] = CldapUtil::FilterCreate("ls.".$key, $val, "string", $cOperationType);
break;
}
}
$is_filtered = false;
$strSqlSearch = "";
for($i=0, $ssCount=count($arSqlSearch); $i<$ssCount; $i++)
{
if($arSqlSearch[$i] <> '')
{
$is_filtered = true;
$strSqlSearch .= " AND (".$arSqlSearch[$i].") ";
}
}
$arSqlOrder = Array();
foreach($arOrder as $by=>$order)
{
$order = mb_strtolower($order);
if ($order!="asc")
$order = "desc".($DB->type=="ORACLE"?" NULLS LAST":"");
else
$order = "asc".($DB->type=="ORACLE"?" NULLS FIRST":"");
switch(mb_strtoupper($by))
{
case "ID":
case "NAME":
case "CODE":
case "ACTIVE":
case "CONVERT_UTF8":
case "SERVER":
case "PORT":
case "ADMIN_LOGIN":
case "ADMIN_PASSWORD":
case "BASE_DN":
case "GROUP_FILTER":
case "SYNC":
case "SYNC_LAST":
case "GROUP_ID_ATTR":
case "GROUP_NAME_ATTR":
case "GROUP_MEMBERS_ATTR":
case "USER_FILTER":
case "USER_ID_ATTR":
case "USER_NAME_ATTR":
case "USER_LAST_NAME_ATTR":
case "USER_EMAIL_ATTR":
case "USER_GROUP_ATTR":
case "USER_GROUP_ACCESSORY":
case "MAX_PAX_SIZE":
case "CONNECTION_TYPE":
$arSqlOrder[] = " ls.".$by." ".$order." ";
break;
default:
$arSqlOrder[] = " ls.TIMESTAMP_X ".$order." ";
}
}
$strSqlOrder = "";
DelDuplicateSort($arSqlOrder);
for ($i=0, $c=count($arSqlOrder); $i < $c; $i++)
{
if($i==0)
$strSqlOrder = " ORDER BY ";
else
$strSqlOrder .= ",";
$strSqlOrder .= mb_strtolower($arSqlOrder[$i]);
}
$strSql .= " WHERE 1=1 ".$strSqlSearch.$strSqlOrder;
$res = $DB->Query($strSql);
$res = new __CLDAPServerDBResult($res);
return $res;
}