Пример #1
0
 function GetList(&$by, &$order, $arFilter = array(), &$isFiltered)
 {
     $err_mess = CTicketDictionary::err_mess() . "<br>Function: GetList<br>Line: ";
     global $DB;
     $arSqlSearch = array();
     $strSqlSearch = "";
     $leftJoinSite = "";
     $leftJoinUser = "";
     if (is_array($arFilter)) {
         $filterKeys = array_keys($arFilter);
         for ($i = 0; $i < count($filterKeys); $i++) {
             $key = $filterKeys[$i];
             $val = $arFilter[$filterKeys[$i]];
             if (is_array($val) && count($val) <= 0 || !is_array($val) && (strlen($val) <= 0 || $val === 'NOT_REF')) {
                 continue;
             }
             $match_value_set = in_array($key . "_EXACT_MATCH", $filterKeys) ? true : false;
             $key = strtoupper($key);
             switch ($key) {
                 case "ID":
                 case "SID":
                     if (is_array($val)) {
                         $val = implode(" | ", $val);
                     }
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("D." . $key, $val, $match);
                     break;
                 case "SITE":
                     if (is_array($val)) {
                         $val = implode(" | ", $val);
                     }
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("DS.SITE_ID", $val, $match);
                     $leftJoinSite .= "LEFT JOIN b_ticket_dictionary_2_site DS ON (D.ID = DS.DICTIONARY_ID)";
                     $select_user = "******";
                     break;
                 case "TYPE":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("D.C_TYPE", $val, $match);
                     break;
                 case "NAME":
                 case "DESCR":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("D." . $key, $val, $match);
                     break;
                 case "RESPONSIBLE_ID":
                     if (intval($val) > 0) {
                         $arSqlSearch[] = "D.RESPONSIBLE_USER_ID = '" . intval($val) . "'";
                     } elseif ($val == 0) {
                         $arSqlSearch[] = "(D.RESPONSIBLE_USER_ID is null or D.RESPONSIBLE_USER_ID=0)";
                     }
                     break;
                 case "RESPONSIBLE":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("D.RESPONSIBLE_USER_ID, U.LOGIN, U.LAST_NAME, U.NAME", $val, $match);
                     $select_user = "******";
                     $leftJoinUser = "******";
                     break;
                 case "DEFAULT":
                     $arSqlSearch[] = $val == "Y" ? "D.SET_AS_DEFAULT='Y'" : "D.SET_AS_DEFAULT='N'";
                     break;
                 case "LID":
                 case "FIRST_SITE_ID":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("D.FIRST_SITE_ID", $val, $match);
                     break;
             }
         }
     }
     if ($by == "s_id") {
         $strSqlOrder = "D.ID";
     } elseif ($by == "s_c_sort") {
         $strSqlOrder = "D.C_SORT";
     } elseif ($by == "s_sid") {
         $strSqlOrder = "D.SID";
     } elseif ($by == "s_lid") {
         $strSqlOrder = "D.FIRST_SITE_ID";
     } elseif ($by == "s_name") {
         $strSqlOrder = "D.NAME";
     } elseif ($by == "s_responsible") {
         $strSqlOrder = "D.RESPONSIBLE_USER_ID";
     } elseif ($by == "s_dropdown") {
         $strSqlOrder = "D.C_SORT, D.ID, D.NAME";
     } else {
         $by = "s_c_sort";
         $strSqlOrder = "D.C_SORT";
     }
     if ($order != "desc") {
         $strSqlOrder .= " asc ";
         $order = "asc";
     } else {
         $strSqlOrder .= " desc ";
         $order = "desc";
     }
     $strSqlSearch = GetFilterSqlSearch($arSqlSearch);
     $strSql = "\n\t\t\tSELECT\n\t\t\t\tD.*,\n\t\t\t\tD.FIRST_SITE_ID\t\t\t\t\t\tLID,\n\t\t\t\tD.ID\t\t\t\t\t\t\t\tREFERENCE_ID,\n\t\t\t\tD.NAME\t\t\t\t\t\t\t\tREFERENCE\n\t\t\t\t{$select_user}\n\t\t\tFROM\n\t\t\t\tb_ticket_dictionary D\n\t\t\t{$leftJoinUser}\n\t\t\t{$leftJoinSite}\n\t\t\tWHERE\n\t\t\t{$strSqlSearch}\n\t\t\tGROUP BY\n\t\t\t\tD.ID\n\t\t\tORDER BY\n\t\t\t\tcase D.C_TYPE\n\t\t\t\t\twhen 'C'\tthen '1'\n\t\t\t\t\twhen 'F'\tthen '2'\n\t\t\t\t\twhen 'S'\tthen '3'\n\t\t\t\t\twhen 'M'\tthen '4'\n\t\t\t\t\twhen 'K'\tthen '5'\n\t\t\t\t\twhen 'SR'\tthen '6'\n\t\t\t\t\twhen 'D'\tthen '7'\n\t\t\t\t\telse ''\tend,\n\t\t\t{$strSqlOrder}\n\t\t\t";
     $res = $DB->Query($strSql, false, $err_mess . __LINE__);
     $isFiltered = IsFiltered($strSqlSearch);
     return $res;
 }