/** * * @param $arOrder * @param $arFilter * @return __CLDAPServerDBResult */ public static function GetList($arOrder = array(), $arFilter = array()) { global $USER, $DB, $APPLICATION; $strSql = "SELECT ls.*, " . "\t" . $DB->DateToCharFunction("ls.TIMESTAMP_X") . "\tas TIMESTAMP_X, " . "\t" . $DB->DateToCharFunction("ls.SYNC_LAST") . "\tas 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 = 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": $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 (strlen($arSqlSearch[$i]) > 0) { $is_filtered = true; $strSqlSearch .= " AND (" . $arSqlSearch[$i] . ") "; } } $arSqlOrder = array(); foreach ($arOrder as $by => $order) { $order = strtolower($order); if ($order != "asc") { $order = "desc" . ($DB->type == "ORACLE" ? " NULLS LAST" : ""); } else { $order = "asc" . ($DB->type == "ORACLE" ? " NULLS FIRST" : ""); } switch (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": $arSqlOrder[] = " ls." . $by . " " . $order . " "; break; default: $arSqlOrder[] = " ls.TIMESTAMP_X " . $order . " "; } } $strSqlOrder = ""; DelDuplicateSort($arSqlOrder); for ($i = 0; $i < count($arSqlOrder); $i++) { if ($i == 0) { $strSqlOrder = " ORDER BY "; } else { $strSqlOrder .= ","; } $strSqlOrder .= strtolower($arSqlOrder[$i]); } $strSql .= " WHERE 1=1 " . $strSqlSearch . $strSqlOrder; $res = $DB->Query($strSql); $res = new __CLDAPServerDBResult($res); return $res; }