function GetList($arSort = array("SORT" => "ASC"), $arFilter = array()) { /* Filter: "ACTIVE" => Y (default); 'ALL' for full list without activity check; "SITE_ID" => SITE_ID (default); 'ALL' for full list without site check. Syn. SITE; "COMPABILITY" => "N" (default); arOrder for additional check inside this method "SID" => only with this SID. Syn: "ID"; "HANDLER" => check by part of handler path. Syn: "PATH" */ global $DB; if (!defined('SALE_DH_INITIALIZED')) { CSaleDeliveryHandler::Initialize(); } $arAllowedSort = array("SORT" => "SORT", "NAME" => "NAME", "SID" => "HID", "SITE_ID" => "LID", "HANDLER" => "HANDLER", "ACTIVE" => "ACTIVE"); foreach ($arSort as $SORT => $SORT_DIR) { if (array_key_exists($SORT, $arAllowedSort)) { unset($arSort[$SORT]); $arSort[$arAllowedSort[$SORT]] = $SORT_DIR == "DESC" ? "DESC" : "ASC"; } else { unset($arSort[$SORT]); } } // additional filter synonim check if (is_set($arFilter, "SITE") && !is_set($arFilter, "SITE_ID")) { $arFilter["SITE_ID"] = $arFilter["SITE"]; } unset($arFilter["SITE"]); $arFilterDefault = array("SITE_ID" => SITE_ID, "COMPABILITY" => "N", "ACTIVE" => "Y"); if (!is_array($arFilter)) { $arFilter = array(); } foreach ($arFilterDefault as $key => $value) { if (!is_set($arFilter, $key)) { $arFilter[$key] = $value; } } $bAllSite = false; if ($arFilter["SITE_ID"] == "ALL") { $bAllSite = true; unset($arFilter["SITE_ID"]); } if ($arFilter["ACTIVE"] == "ALL") { unset($arFilter["ACTIVE"]); } $arWhere = array(); $strWhere = ""; $arFilterKeys = array_keys($arFilter); foreach ($arFilter as $key => $value) { $match_value_set = in_array($key . "_EXACT_MATCH", $arFilterKeys) ? true : false; $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N"; $key = ToUpper($key); switch ($key) { // SITE_ID is unavailable for extended sorting! only direct selection; It's needed for after-select filtration. case "SITE_ID": if (strlen($value) > 0) { //$arWhere[] = GetFilterQuery("LID", $value, $match); $arWhere[] = "LID='" . $DB->ForSql($value) . "' OR LID='' OR LID IS NULL"; } break; case "ACTIVE": if (strlen($value) > 0) { $arWhere[] = "ACTIVE='" . ($value == 'N' ? 'N' : 'Y') . "'"; } break; case "SID": case "ID": if (strlen($value) > 0) { $arWhere[] = GetFilterQuery("HID", $DB->ForSql($value), $match); } break; case "HANDLER": case "PATH": if (strlen($value) > 0) { $arWhere[] = GetFilterQuery("HANDLER", $DB->ForSql($value), $match); } } } $strWhere = GetFilterSqlSearch($arWhere); $query = "\nSELECT HID AS SID\nFROM b_sale_delivery_handler\nWHERE\n" . $strWhere . "\n"; if (count($arSort) > 0) { $query .= "ORDER BY "; $bFirst = true; foreach ($arSort as $SORT => $SORT_DIR) { if ($bFirst) { $bFirst = false; } else { $query .= ", "; } $query .= $SORT . " " . $SORT_DIR; } } $dbRes = $DB->Query($query); $arLoadedHandlers = array(); $arLoadedHandlersMap = array(); while ($arRes = $dbRes->Fetch()) { $arLoadedHandlersMap[$arRes["SID"]] = $arRes; } $arHandlersList = CSaleDeliveryHandler::__getRegisteredHandlers(); if (is_array($arHandlersList)) { foreach ($arHandlersList as $key => $arHandler) { if (is_array($arLoadedHandlersMap) && !array_key_exists($arHandler["SID"], $arLoadedHandlersMap)) { unset($arHandlersList[$key]); } } $arHandlersList = array_values($arHandlersList); $arHandlersList = CSaleDeliveryHandler::__getHandlersData($arHandlersList); if ($arFilter["SITE_ID"] != "ALL" && is_array($arHandlersList)) { foreach ($arHandlersList as $key => $arHandler) { if (strlen($arHandler['LID']) > 0 && $arHandler['LID'] != $arFilter["SITE_ID"]) { unset($arHandlersList[$key]); } } } if (is_array($arFilter["COMPABILITY"]) && is_array($arHandlersList)) { foreach ($arHandlersList as $key => $arHandler) { $arProfiles = CSaleDeliveryHandler::GetHandlerCompability($arFilter["COMPABILITY"], $arHandler); if (!is_array($arProfiles) || count($arProfiles) <= 0) { unset($arHandlersList[$key]); } else { $arHandlersList[$key]["PROFILES"] = $arProfiles; } } } CSaleDeliveryHandler::__sortList($arHandlersList, $arSort); } $dbHandlers = new CDBResult(); if (is_array($arHandlersList)) { reset($arHandlersList); $dbHandlers->InitFromArray($arHandlersList); } else { $dbHandlers->InitFromArray(array()); } return $dbHandlers; }