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