3namespace Bitrix\Location\Infrastructure\Service;
5use Bitrix\Location\Common\BaseService;
6use Bitrix\Location\Entity\Area;
7use Bitrix\Location\Geometry\Type\Point;
8use Bitrix\Location\Infrastructure\Service\Config\Container;
9use Bitrix\Location\Infrastructure\Service\CustomFieldsService\CrimeaCustomFields;
10use Bitrix\Location\Infrastructure\Service\CustomFieldsService\CustomFields;
11use Bitrix\Location\Infrastructure\Service\CustomFieldsService\DonetskCustomFields;
12use Bitrix\Location\Infrastructure\Service\CustomFieldsService\KhersonCustomFields;
13use Bitrix\Location\Infrastructure\Service\CustomFieldsService\LuganskCustomFields;
14use Bitrix\Location\Infrastructure\Service\CustomFieldsService\SevastopolCustomFields;
15use Bitrix\Location\Infrastructure\Service\CustomFieldsService\ZaporozhyeCustomFields;
16use Bitrix\Location\Repository\AreaRepository;
23 private const TYPE_CUSTOM_FIELDS =
'CUSTOM_FIELDS';
24 private const CODE_CRIMEA =
'CRIMEA';
25 private const CODE_SEVASTOPOL =
'SEVASTOPOL';
26 private const CODE_DONETSK =
'DONETSK';
27 private const CODE_LUGANSK =
'LUGANSK';
28 private const CODE_ZAPOROZHYE =
'ZAPOROZHYE';
29 private const CODE_KHERSON =
'KHERSON';
32 private $areaRepository;
35 private $customFieldsAreas;
43 $this->loadAreasWithCustomFields();
45 foreach ($this->customFieldsAreas as $customFieldsArea)
47 if (!$customFieldsArea->containsPoint($point))
53 switch ($customFieldsArea->getCode())
55 case self::CODE_CRIMEA:
56 $className = CrimeaCustomFields::class;
58 case self::CODE_SEVASTOPOL:
59 $className = SevastopolCustomFields::class;
61 case self::CODE_DONETSK:
62 $className = DonetskCustomFields::class;
64 case self::CODE_LUGANSK:
65 $className = LuganskCustomFields::class;
67 case self::CODE_ZAPOROZHYE:
68 $className = ZaporozhyeCustomFields::class;
70 case self::CODE_KHERSON:
71 $className = KhersonCustomFields::class;
80 return new $className();
96 private function loadAreasWithCustomFields(): void
98 if (!is_null($this->customFieldsAreas))
103 $this->customFieldsAreas = $this->areaRepository->findByArguments([
105 '=TYPE' => self::TYPE_CUSTOM_FIELDS,
__construct(Container $config)
getCustomFieldsByPoint(Point $point)