%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/sale/lib/delivery/restrictions/ |
Current File : //home/bitrix/www/bitrix/modules/sale/lib/delivery/restrictions/byproductcategory.php |
<?php namespace Bitrix\Sale\Delivery\Restrictions; use Bitrix\Main\Localization\Loc; use Bitrix\Sale\Internals\Entity; use Bitrix\Sale\Shipment; Loc::loadMessages(__FILE__); /** * Class ByProductCategory * Restricts delivery by product category * @package Bitrix\Sale\Delivery\Restrictions */ class ByProductCategory extends Base { public static $easeSort = 400; public static function getClassTitle() { return Loc::getMessage("SALE_DLVR_RSTR_BY_PC_NAME"); } public static function getClassDescription() { return Loc::getMessage("SALE_DLVR_RSTR_BY_PC_DESCRIPT"); } public static function check($categoriesList, array $restrictionParams, $deliveryId = 0) { if( empty($categoriesList) || !is_array($categoriesList) || empty($restrictionParams["CATEGORIES"]) || !is_array($restrictionParams["CATEGORIES"])) { return true; } foreach($categoriesList as $productId => $productCategories) { if(!is_array($productCategories) || empty($productCategories)) continue; $isProductFromCategory = false; foreach($productCategories as $categoryId) { $categoryPath = self::getCategoriesPath($categoryId); if(array_intersect($categoryPath, $restrictionParams["CATEGORIES"])) { $isProductFromCategory = true; break; } } if(!$isProductFromCategory) return false; } return true; } protected static function getCategoriesPath($categoryId) { $result = array($categoryId); $nav = \CIBlockSection::GetNavChain(false, $categoryId); while($arSectionPath = $nav->GetNext()) if(!in_array($arSectionPath['ID'], $result)) $result[] = $arSectionPath['ID']; return $result; } public static function extractParams(Entity $entity) { if (!$entity instanceof Shipment) { return array(); } if(!\Bitrix\Main\Loader::includeModule('iblock')) return array(); if(!\Bitrix\Main\Loader::includeModule('catalog')) return array(); $productIds = array(); /** @var \Bitrix\Sale\ShipmentItem $shipmentItem */ foreach($entity->getShipmentItemCollection() as $shipmentItem) { /** @var \Bitrix\Sale\BasketItem $basketItem */ $basketItem = $shipmentItem->getBasketItem(); if(!$basketItem) continue; if($basketItem->getField('MODULE') != 'catalog') continue; $productId = intval($basketItem->getField('PRODUCT_ID')); $iblockId = (int)\CIBlockElement::getIBlockByID($productId); $info = \CCatalogSKU::getProductInfo($productId, $iblockId); if(!empty($info['ID'])) $candidate = $info['ID']; else $candidate = $productId; if(!in_array($candidate, $productIds)) $productIds[] = $candidate; } return self::getGroupsIds($productIds); } protected static function getGroupsIds(array $productIds) { $groupsIds = array(); $res = \CIBlockElement::GetElementGroups($productIds, true, array('ID', 'IBLOCK_ELEMENT_ID')); while($group = $res->Fetch()) { if(!is_array($groupsIds[$group['IBLOCK_ELEMENT_ID']])) $groupsIds[$group['IBLOCK_ELEMENT_ID']] = array(); if(!in_array($group['ID'], $groupsIds[$group['IBLOCK_ELEMENT_ID']])) $groupsIds[$group['IBLOCK_ELEMENT_ID']][] = $group['ID']; } return $groupsIds; } public static function getParamsStructure($deliveryId = 0) { $result = array( "CATEGORIES" => array( "TYPE" => "DELIVERY_PRODUCT_CATEGORIES", "URL" => "cat_section_search.php?lang=ru&m=y&n=SECTIONS_IDS", "SCRIPT" => "window.InS".md5('SECTIONS_IDS')."=function(id, name){BX.Sale.Delivery.addRestrictionProductSection(id, name, this);};", "LABEL" => Loc::getMessage("SALE_DLVR_RSTR_BY_PC_CATEGORIES"), "ID" => 'sale-admin-delivery-restriction-cat-add' ) ); return $result; } }