![]() 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/old/vendor/magento/module-checkout/Block/Checkout/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Checkout\Block\Checkout; use Magento\Directory\Helper\Data as DirectoryHelper; use Magento\Store\Model\StoreManagerInterface; use Magento\Store\Api\StoreResolverInterface; use Magento\Framework\App\ObjectManager; /** * Directory data processor. * * This class adds various country and region dictionaries to checkout page. * This data can be used by other UI components during checkout flow. */ class DirectoryDataProcessor implements \Magento\Checkout\Block\Checkout\LayoutProcessorInterface { /** * @var array */ private $countryOptions; /** * @var array */ private $regionOptions; /** * @var \Magento\Directory\Model\ResourceModel\Region\CollectionFactory */ private $regionCollectionFactory; /** * @var \Magento\Directory\Model\ResourceModel\Region\CollectionFactory */ private $countryCollectionFactory; /** * @var StoreManagerInterface */ private $storeManager; /** * @var DirectoryHelper */ private $directoryHelper; /** * @param \Magento\Directory\Model\ResourceModel\Country\CollectionFactory $countryCollection * @param \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionCollection * @param StoreResolverInterface $storeResolver @deprecated * @param DirectoryHelper $directoryHelper * @param StoreManagerInterface $storeManager * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function __construct( \Magento\Directory\Model\ResourceModel\Country\CollectionFactory $countryCollection, \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionCollection, StoreResolverInterface $storeResolver, DirectoryHelper $directoryHelper, StoreManagerInterface $storeManager = null ) { $this->countryCollectionFactory = $countryCollection; $this->regionCollectionFactory = $regionCollection; $this->directoryHelper = $directoryHelper; $this->storeManager = $storeManager ?: ObjectManager::getInstance()->get(StoreManagerInterface::class); } /** * Process js Layout of block * * @param array $jsLayout * @return array */ public function process($jsLayout) { if (!isset($jsLayout['components']['checkoutProvider']['dictionaries'])) { $jsLayout['components']['checkoutProvider']['dictionaries'] = [ 'country_id' => $this->getCountryOptions(), 'region_id' => $this->getRegionOptions(), ]; } return $jsLayout; } /** * Get country options list. * * @return array */ private function getCountryOptions() { if (!isset($this->countryOptions)) { $this->countryOptions = $this->countryCollectionFactory->create()->loadByStore( $this->storeManager->getStore()->getId() )->toOptionArray(); $this->countryOptions = $this->orderCountryOptions($this->countryOptions); } return $this->countryOptions; } /** * Get region options list. * * @return array */ private function getRegionOptions() { if (!isset($this->regionOptions)) { $this->regionOptions = $this->regionCollectionFactory->create()->addAllowedCountriesFilter( $this->storeManager->getStore()->getId() )->toOptionArray(); } return $this->regionOptions; } /** * Sort country options by top country codes. * * @param array $countryOptions * @return array */ private function orderCountryOptions(array $countryOptions) { $topCountryCodes = $this->directoryHelper->getTopCountryCodes(); if (empty($topCountryCodes)) { return $countryOptions; } $headOptions = []; $tailOptions = [[ 'value' => 'delimiter', 'label' => '──────────', 'disabled' => true, ]]; foreach ($countryOptions as $countryOption) { if (empty($countryOption['value']) || in_array($countryOption['value'], $topCountryCodes)) { $headOptions[] = $countryOption; } else { $tailOptions[] = $countryOption; } } return array_merge($headOptions, $tailOptions); } }