/** * get handlers list based on DB data * @deprecated */ public static function GetList($arSort = array("SORT" => "ASC"), $arFilter = array()) { if (self::isFieldInFilter2("SITE", $arFilter)) { $arFilter["SITE_ID"] = self::getFilterValue("SITE", $arFilter); unset($arFilter["SITE"]); } if (isset($arFilter["SITE_ID"])) { if (is_string($arFilter["SITE_ID"]) && strlen($arFilter["SITE_ID"]) > 0) { if ($arFilter["SITE_ID"] == "ALL") { unset($arFilter["SITE_ID"]); } elseif (strpos($arFilter["SITE_ID"], ",") !== false) { $arFilter["SITE_ID"] = explode(",", $arFilter["SITE_ID"]); } else { $arFilter["SITE_ID"] = array($arFilter["SITE_ID"]); } } } else { $arFilter["SITE_ID"] = array(CSite::GetDefSite()); } if (!isset($arFilter["ACTIVE"])) { $arFilter["ACTIVE"] = "Y"; } elseif ($arFilter["ACTIVE"] == "ALL") { unset($arFilter["ACTIVE"]); } $params = array('order' => array_intersect_key($arSort, Bitrix\Sale\Delivery\Services\Table::getMap()), 'filter' => self::convertFilterOldToNew($arFilter)); $services = array(); $dbRes = \Bitrix\Sale\Delivery\Services\Table::getList($params); while ($service = $dbRes->fetch()) { $dbRstrRes = \Bitrix\Sale\Internals\ServiceRestrictionTable::getList(array('filter' => array("=SERVICE_ID" => $service["ID"], "=SERVICE_TYPE" => \Bitrix\Sale\Services\Base\RestrictionManager::SERVICE_TYPE_SHIPMENT))); while ($restr = $dbRstrRes->fetch()) { if (!self::checkRestrictionFilter($restr, $arFilter)) { continue 2; } if ($restr["CLASS_NAME"] == '\\Bitrix\\Sale\\Delivery\\Restrictions\\BySite' && !empty($restr["PARAMS"]["SITE_ID"])) { if (is_array($restr["PARAMS"]["SITE_ID"])) { reset($restr["PARAMS"]["SITE_ID"]); $service["LID"] = current($restr["PARAMS"]["SITE_ID"]); } elseif (is_string($restr["PARAMS"]["SITE_ID"])) { $service["LID"] = $restr["PARAMS"]["SITE_ID"]; } else { $service["LID"] = ""; } } } if (strlen($service['CODE']) > 0) { $srv = \Bitrix\Sale\Delivery\Services\Automatic::convertNewServiceToOld($service); } else { \Bitrix\Sale\Delivery\Services\Manager::getHandlersList(); if (get_parent_class($service['CLASS_NAME']) == 'Bitrix\\Sale\\Delivery\\Services\\Base') { if ($service['CLASS_NAME']::canHasProfiles()) { continue; } } $srv = \Bitrix\Sale\Delivery\Services\NewToAutomatic::convertNewServiceToOld($service); } if (empty($srv)) { continue; } if (is_array($arFilter["COMPABILITY"])) { $arProfiles = CSaleDeliveryHandler::GetHandlerCompability($arFilter["COMPABILITY"], $srv); if (!is_array($arProfiles) || count($arProfiles) <= 0) { continue; } else { $srv["PROFILES"] = $arProfiles; } } if ($srv) { $services[] = $srv; } } $result = new \CDBResult(); $result->InitFromArray($services); return $result; }
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; }
/** * <p>Метод возвращает список обработчиков автоматизированных служб доставки, для которых установлены настройки в БД. Метод статический.</p> * * * @param array $arrayarSort = array("SORT" => "ASC") Массив, в соответствии с которым сортируются результирующие * записи. Массив имеет вид: <pre class="syntax">array("<i>параметр_сортировки</i>" * => "<i>направление_сортировки</i>" [, ...])</pre> <p>В качестве параметра * сортировки может выступать одно из следующих значений:</p> <ul> <li> * <b>SORT</b> - параметр "сортировка"; </li> <li> <b>NAME</b> - наименования службы * доставки; </li> <li> <b>SID</b> - строковой идентификатор службы доставки; * </li> <li> <b>HANDLER</b> - путь к обработчику службы доставки; </li> <li> <b>ACTIVE</b> - * флаг активности службы доставки. </li> </ul> <p>В качестве * "направление_сортировки" могут быть значения "<i>ASC</i>" (по * возрастанию) и "<i>DESC</i>" (по убыванию).</p> Значение по умолчанию - * массив array("SORT" => "ASC") - означает, что результат будет отсортирован * по возрастанию. * * @param array $arrayarFilter = array() Массив, в соответствии с которым фильтруются записи службы * доставки.<br>Массив имеет вид: <pre * class="syntax">array("<i>фильтруемое_поле</i>"=>"<i>значения_фильтра</i>" [, * ...])</pre>"<i>фильтруемое_поле</i>" может принимать значения: <ul> <li> * <b>ACTIVE</b> - фильтр по активности (Y|N); передача значения * <code>"ACTIVE"=>"ALL"</code> выводит все элементы без учета их состояния; * <br>по умолчанию выводятся только активные элементы; </li> <li> <b>SITE_ID</b> * - по сайту; ; передача значения <code>"SITE_ID"=>"ALL"</code> выводит * настройки для всех сайтов; <br>по умолчанию получаются настройки * службы доставки только для текущего сайта; </li> <li> <b>SID</b> - по * строковому идентификатору обработчика; </li> <li> <b>HANDLER</b> - фильтр по * части пути к файлу обработчика. </li> <li> <b>COMPABILITY</b> - проверка * совместимости обработчика с параметрами заказа; <br>значение * должно быть массивом данных по заказу следующей структуры: <ul> <li> * <b>WEIGHT</b> - суммарный вес заказа; </li> <li> <b>PRICE</b> - суммарная стоимость * заказа; </li> <li> <b>LOCATION_FROM</b> - ID местоположения магазина * (устанавливается в настройках модуля); </li> <li> <b>LOCATION_TO</b> - ID * местоположения, указанному при оформлении заказа. </li> </ul> </li> * </ul>Значение по умолчанию - пустой массив array() - означает, что * результат отфильтрован не будет. * * @return CDBResult <p>Возвращается объект класса CDBResult, содержащий записи следующей * структуры:</p> <table class="tnormal" width="100%"> <tr> <th width="15%">Ключ</th> * <th>Описание</th> </tr> <tr> <td>SID</td> <td>Строковой идентификатор * обработчика доставки.</td> </tr> <tr> <td>NAME</td> <td>Наименование службы * доставки.</td> </tr> <tr> <td>DESCRIPTION</td> <td>Описание службы доставки.</td> </tr> * <tr> <td>DESCRIPTION_INNER</td> <td>"Внутреннее" описание функционала * обработчика службы доставки.</td> </tr> <tr> <td>LID</td> <td>Идентификатор * сайта, для которого установлены настройки.</td> </tr> <tr> <td>ACTIVE</td> * <td>Флаг активности службы доставки.</td> </tr> <tr> <td>SORT</td> <td>Значение * параметра сортировки для данной службы доставки.</td> </tr> <tr> * <td>BASE_CURRENCY</td> <td>Идентификатор валюты, в которой работает * обработчик службы доставки.</td> </tr> <tr> <td>TAX_RATE</td> <td>Значение * наценки, автоматически добавляемой к стоимости доставки (%).</td> </tr> * <tr> <td>HANDLER</td> <td>Путь к файлу обработчика доставки.</td> </tr> <tr> * <td>DBSETSETTINGS</td> <td>callback к методу обработчика, обеспечивающему * сохранение массива настроек в БД.</td> </tr> <tr> <td>DBGETSETTINGS</td> <td>callback к * методу обработчика, обеспечивающему получение массива настроек * из БД.</td> </tr> <tr> <td>GETCONFIG</td> <td>callback к методу обработчика, * возвращающему список настроек обработчика.</td> </tr> <tr> <td>COMPATIBILITY</td> * <td>callback к методу обработчика, осуществляющему проверку * применимости обработчика к заказу.</td> </tr> <tr> <td>CALCULATE</td> <td>callback к * методу обработчика, осуществляющему расчёт стоимости * доставки.</td> </tr> <tr> <td>PROFILES</td> <td>Массив профилей обработки * доставки. Представляет собой ассоциативный массив вида: <pre * class="syntax">Array ( "<i>строковый_идентификатор_профиля</i>" => Array ( "TITLE" => * "<i>название_профиля</i>", "DESCRIPTION" => "<i>описание_профиля</i>", * "RESTRICTIONS_WEIGHT" => Array ( //< ограничения обработчика по весу >// ), * "RESTRICTIONS_SUM" => Array ( //< ограничения обработчика по стоимости >// ), * "ACTIVE" => "<i>флаг_активности_профиля</i>", ), //< ................... >// ) </pre> </td> * </tr> <tr> <td>CONFIG</td> <td>Массив настроек обработчика доставки со * значениями. Подробнее см. <a * href="http://dev.1c-bitrix.ru/api_help/sale/delivery.php">Руководство по созданию * автоматизированных обработчиков доставки</a>.</td> </tr> <tr> * <td>PROFILE_USE_DEFAULT</td> <td>Значение флага "используются параметры * профилей по умолчанию" (Y|N).</td> </tr> </table> <a name="examples"></a> * * <h4>Example</h4> * <pre> * CModule::IncludeModule('sale'); * * $dbResult = CSaleDeliveryHandler::GetList( * array( * 'SORT' => 'ASC', * 'NAME' => 'ASC' * ), * array( * 'ACTIVE' => 'Y' * ) * ); * echo '<ul>'; * while ($arResult = $dbResult->GetNext()) * { * echo '<li>('.$arResult['SID'].') <b>'.$arResult['NAME'].'</b><br />'; * echo '<small>'.$arResult['DESCRIPTION'].'</small></li>'; * } * echo '</ul>'; * </pre> * * * @static * @link http://dev.1c-bitrix.ru/api_help/sale/classes/csaledeliveryhandler/csaledeliveryh_getlist.php * @author Bitrix * @deprecated */ public static function GetList($arSort = array("SORT" => "ASC"), $arFilter = array()) { if (self::isFieldInFilter2("SITE", $arFilter)) { $arFilter["SITE_ID"] = self::getFilterValue("SITE", $arFilter); unset($arFilter["SITE"]); } if (!isset($arFilter["SITE_ID"])) { $arFilter["SITE_ID"] = SITE_ID; } elseif ($arFilter["SITE_ID"] == "ALL") { unset($arFilter["SITE_ID"]); } if (!isset($arFilter["ACTIVE"])) { $arFilter["ACTIVE"] = "Y"; } elseif ($arFilter["ACTIVE"] == "ALL") { unset($arFilter["ACTIVE"]); } $params = array('order' => array_intersect_key($arSort, Bitrix\Sale\Delivery\Services\Table::getMap()), 'filter' => self::convertFilterOldToNew($arFilter)); $services = array(); $dbRes = \Bitrix\Sale\Delivery\Services\Table::getList($params); while ($service = $dbRes->fetch()) { $dbRstrRes = \Bitrix\Sale\Delivery\Restrictions\Table::getList(array('filter' => array("=DELIVERY_ID" => $service["ID"]))); while ($restr = $dbRstrRes->fetch()) { if (!self::checkRestrictionFilter($restr, $arFilter)) { continue 2; } if ($restr["CLASS_NAME"] == '\\Bitrix\\Sale\\Delivery\\Restrictions\\BySite') { $service["LID"] = $restr["PARAMS"]["SITE_ID"]; } } $srv = \Bitrix\Sale\Delivery\Services\Automatic::convertNewServiceToOld($service); if (is_array($arFilter["COMPABILITY"])) { $arProfiles = CSaleDeliveryHandler::GetHandlerCompability($arFilter["COMPABILITY"], $srv); if (!is_array($arProfiles) || count($arProfiles) <= 0) { continue; } else { $srv = $arProfiles; } } if ($srv) { $services[] = $srv; } } $result = new \CDBResult(); $result->InitFromArray($services); return $result; }