![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/cartforge.co/vendor/magento/module-customer/Model/Address/Validator/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Customer\Model\Address\Validator; use Magento\Customer\Model\Address\AbstractAddress; use Magento\Customer\Model\Address\ValidatorInterface; use Magento\Directory\Helper\Data; use Magento\Directory\Model\AllowedCountries; use Magento\Framework\Escaper; use Magento\Framework\App\ObjectManager; use Magento\Framework\Validator\NotEmpty; use Magento\Framework\Validator\ValidateException; use Magento\Framework\Validator\ValidatorChain; use Magento\Store\Model\ScopeInterface; /** * Address country and region validator. */ class Country implements ValidatorInterface { /** * @var Escaper */ private $escaper; /** * @var Data */ private $directoryData; /** * @var AllowedCountries */ private $allowedCountriesReader; /** * @param Data $directoryData * @param AllowedCountries $allowedCountriesReader * @param Escaper|null $escaper */ public function __construct( Data $directoryData, AllowedCountries $allowedCountriesReader, Escaper $escaper = null ) { $this->directoryData = $directoryData; $this->allowedCountriesReader = $allowedCountriesReader; $this->escaper = $escaper ?? ObjectManager::getInstance()->get( Escaper::class ); } /** * @inheritdoc */ public function validate(AbstractAddress $address) { $errors = $this->validateCountry($address); if (empty($errors)) { $errors = $this->validateRegion($address); } return $errors; } /** * Validate country existence. * * @param AbstractAddress $address * @return array */ private function validateCountry(AbstractAddress $address) { $countryId = $address->getCountryId(); $errors = []; if (!ValidatorChain::is($countryId, NotEmpty::class)) { $errors[] = __('"%fieldName" is required. Enter and try again.', ['fieldName' => 'countryId']); } elseif (!in_array($countryId, $this->getWebsiteAllowedCountries($address), true)) { //Checking if such country exists. $errors[] = __( 'Invalid value of "%value" provided for the %fieldName field.', ['fieldName' => 'countryId', 'value' => $this->escaper->escapeHtml($countryId)] ); } return $errors; } /** * Validate region existence. * * @param AbstractAddress $address * @return array * @throws ValidateException * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ private function validateRegion(AbstractAddress $address) { $errors = []; $countryId = $address->getCountryId(); $countryModel = $address->getCountryModel(); $regionCollection = $countryModel->getRegionCollection(); $region = $address->getRegion(); $regionId = (string)$address->getRegionId(); $allowedRegions = $regionCollection->getAllIds(); $isRegionRequired = $this->directoryData->isRegionRequired($countryId); if ($isRegionRequired && empty($allowedRegions) && !ValidatorChain::is($region, NotEmpty::class)) { //If region is required for country and country doesn't provide regions list //region must be provided. $errors[] = __('"%fieldName" is required. Enter and try again.', ['fieldName' => 'region']); } elseif ($allowedRegions && !ValidatorChain::is($regionId, NotEmpty::class) && $isRegionRequired) { //If country actually has regions and requires you to //select one then it must be selected. $errors[] = __('"%fieldName" is required. Enter and try again.', ['fieldName' => 'regionId']); } elseif ($allowedRegions && $regionId && !in_array($regionId, $allowedRegions, true)) { //If a region is selected then checking if it exists. $errors[] = __( 'Invalid value of "%value" provided for the %fieldName field.', ['fieldName' => 'regionId', 'value' => $this->escaper->escapeHtml($regionId)] ); } return $errors; } /** * Return allowed counties per website. * * @param AbstractAddress $address * @return array */ private function getWebsiteAllowedCountries(AbstractAddress $address): array { $storeId = $address->getData('store_id'); return $this->allowedCountriesReader->getAllowedCountries(ScopeInterface::SCOPE_STORE, $storeId); } }