Beispiel #1
0
 /**
  *
  * @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;
 }