Пример #1
0
 /**
  * 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;
 }
Пример #2
0
 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;
 }
Пример #3
0
 /**
  * <p>Метод возвращает список обработчиков автоматизированных служб доставки, для которых установлены настройки в БД. Метод статический.</p>
  *
  *
  * @param array $arrayarSort = array("SORT" => "ASC") Массив, в соответствии с которым сортируются результирующие
  * записи. Массив имеет вид: <pre class="syntax">array("<i>параметр_сортировки</i>"
  * =&gt; "<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" =&gt; "ASC") - означает, что результат будет отсортирован
  * по возрастанию.
  *
  * @param array $arrayarFilter = array() Массив, в соответствии с которым фильтруются записи службы
  * доставки.<br>Массив имеет вид: <pre
  * class="syntax">array("<i>фильтруемое_поле</i>"=&gt;"<i>значения_фильтра</i>" [,
  * ...])</pre>"<i>фильтруемое_поле</i>" может принимать значения: <ul> <li>
  * <b>ACTIVE</b> - фильтр по активности (Y|N); передача значения
  * <code>"ACTIVE"=&gt;"ALL"</code> выводит все элементы без учета их состояния;
  * <br>по умолчанию выводятся только активные элементы; </li> <li> <b>SITE_ID</b>
  * - по сайту; ; передача значения <code>"SITE_ID"=&gt;"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>" =&gt; Array ( "TITLE" =&gt;
  * "<i>название_профиля</i>", "DESCRIPTION" =&gt; "<i>описание_профиля</i>",
  * "RESTRICTIONS_WEIGHT" =&gt; Array ( //< ограничения обработчика по весу >// ),
  * "RESTRICTIONS_SUM" =&gt; Array ( //< ограничения обработчика по стоимости >// ),
  * "ACTIVE" =&gt; "<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' =&gt; 'ASC', 
  *     'NAME' =&gt; 'ASC'
  *   ), 
  *   array(
  *     'ACTIVE' =&gt; 'Y'
  *   )
  * );
  * echo '&lt;ul&gt;';
  * while ($arResult = $dbResult-&gt;GetNext())
  * {
  *   echo '&lt;li&gt;('.$arResult['SID'].') &lt;b&gt;'.$arResult['NAME'].'&lt;/b&gt;&lt;br /&gt;'; 
  *   echo '&lt;small&gt;'.$arResult['DESCRIPTION'].'&lt;/small&gt;&lt;/li&gt;';
  * }
  * echo '&lt;/ul&gt;';
  * </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;
 }