%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/sale/lib/services/company/restrictions/ |
Current File : //home/bitrix/www/bitrix/modules/sale/lib/services/company/restrictions/location.php |
<?php namespace Bitrix\Sale\Services\Company\Restrictions; use Bitrix\Main\Localization\Loc; use Bitrix\Sale\Internals\CollectableEntity; use Bitrix\Sale\Internals\CompanyLocationTable; use Bitrix\Sale\Internals\Entity; use Bitrix\Sale\Location\Tree\NodeNotFoundException; use Bitrix\Sale\Order; use Bitrix\Sale\Services\Base; Loc::loadMessages(__FILE__); /** * Class Location * @package Bitrix\Sale\Services\Company\Restrictions */ class Location extends Base\Restriction { public static $easeSort = 200; /** * @return string */ public static function getClassTitle() { return Loc::getMessage("SALE_COMPANY_RULES_BY_LOCATION_TITLE"); } /** * @return string */ public static function getClassDescription() { return Loc::getMessage("SALE_COMPANY_RULES_BY_LOCATION_DESC"); } /** * @param $params * @param array $restrictionParams * @param int $serviceId * @return bool */ public static function check($params, array $restrictionParams, $serviceId = 0) { if ((int)$serviceId <= 0) return true; if (!$params) return false; try { return CompanyLocationTable::checkConnectionExists( intval($serviceId), $params, array( 'LOCATION_LINK_TYPE' => 'AUTO' ) ); } catch (NodeNotFoundException $e) { return false; } } /** * @param Entity $entity * * @return null|string */ protected static function extractParams(Entity $entity) { if ($entity instanceof CollectableEntity) { /** @var \Bitrix\Sale\Order $order */ $order = $entity->getCollection()->getOrder(); } elseif ($entity instanceof Order) { /** @var \Bitrix\Sale\Order $order */ $order = $entity; } if (!$order) return ''; if(!$props = $order->getPropertyCollection()) return ''; if(!$locationProp = $props->getDeliveryLocation()) return ''; if(!$locationCode = $locationProp->getValue()) return ''; return $locationCode; } /** * @param array $params * @param int $companyId * @return array */ protected static function prepareParamsForSaving(array $params = array(), $companyId = 0) { if($companyId > 0) { $arLocation = array(); if(!!\CSaleLocation::isLocationProEnabled()) { if(strlen($params["LOCATION"]['L'])) $LOCATION1 = explode(':', $params["LOCATION"]['L']); if(strlen($params["LOCATION"]['G'])) $LOCATION2 = explode(':', $params["LOCATION"]['G']); } if (isset($LOCATION1) && is_array($LOCATION1) && count($LOCATION1) > 0) { $arLocation["L"] = array(); $locationCount = count($LOCATION1); for ($i = 0; $i<$locationCount; $i++) if (strlen($LOCATION1[$i])) $arLocation["L"][] = $LOCATION1[$i]; } if (isset($LOCATION2) && is_array($LOCATION2) && count($LOCATION2) > 0) { $arLocation["G"] = array(); $locationCount = count($LOCATION2); for ($i = 0; $i<$locationCount; $i++) if (strlen($LOCATION2[$i])) $arLocation["G"][] = $LOCATION2[$i]; } CompanyLocationTable::resetMultipleForOwner($companyId, $arLocation); } return array(); } /** * @param int $entityId * @return array */ public static function getParamsStructure($entityId = 0) { $result = array( "LOCATION" => array( "TYPE" => "COMPANY_LOCATION_MULTI" ) ); if($entityId > 0 ) $result["LOCATION"]["COMPANY_ID"] = $entityId; return $result; } /** * @param array $fields * @param int $restrictionId * @return \Bitrix\Main\Entity\AddResult|\Bitrix\Main\Entity\UpdateResult */ public static function save(array $fields, $restrictionId = 0) { $fields["PARAMS"] = self::prepareParamsForSaving($fields["PARAMS"], $fields["SERVICE_ID"]); return parent::save($fields, $restrictionId); } /** * @param $restrictionId * @param int $entityId * @return \Bitrix\Main\Entity\DeleteResult */ public static function delete($restrictionId, $entityId = 0) { CompanyLocationTable::resetMultipleForOwner($entityId); return parent::delete($restrictionId); } }