![]() 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/app/code/Cnc/Catalog/Model/Attribute/Source/ |
<?php /** * Copyright (c) 2019 Kaliop Digital Commerce (https://digitalcommerce.kaliop.com) All Rights Reserved. * https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) * cnc_catalog_m2 * <[email protected]> */ namespace Cnc\Catalog\Model\Attribute\Source; use Amasty\ShopbyBase\Model\ResourceModel\OptionSetting\Collection as OptionCollection; use Amasty\ShopbyBase\Model\ResourceModel\OptionSetting\CollectionFactory as OptionCollectionFactory; use Amasty\ShopbyBase\Api\Data\OptionSettingInterface; use Amasty\ShopbyBase\Model\OptionSetting; use Cnc\Catalog\Model\Config; use Magento\Catalog\Model\ResourceModel\Product; use Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\CollectionFactory; use Magento\Eav\Model\Entity\Attribute\Option; use Magento\Framework\Data\OptionSourceInterface; use Magento\Store\Model\StoreManagerInterface; class AvailabilityIcon implements OptionSourceInterface { /** * @var array */ protected $options; /** * @var CollectionFactory */ private $collectionFactory; /** * @var Product */ private $product; /** * @var StoreManagerInterface */ private $storeManager; /** * @var OptionCollectionFactory */ private $optionCollectionFactory; /** * @var array */ private $optionData = []; /** * @param CollectionFactory $collectionFactory * @param Product $product * @param StoreManagerInterface $storeManager * @param OptionCollectionFactory $optionCollectionFactory */ public function __construct( CollectionFactory $collectionFactory, Product $product, StoreManagerInterface $storeManager, OptionCollectionFactory $optionCollectionFactory ) { $this->collectionFactory = $collectionFactory; $this->product = $product; $this->storeManager = $storeManager; $this->optionCollectionFactory = $optionCollectionFactory; } /** * @inheritDoc */ public function toOptionArray() { if (null == $this->options) { $this->options = $this->collectionFactory->create() ->setStoreFilter(0) ->setAttributeFilter( $this->product->getAttribute(Config::PRODUCT_ATTRIBUTE_CODE_AVAILABILITY_ICON) ->getAttributeId() ) ->toOptionArray(); array_walk( $this->options, function (&$option) { $option['__disableTmpl'] = true; $data = $this->getOptionData($option['value']); $option['image'] = count($data) && isset($data[array_key_first($data)]) && isset($data[array_key_first($data)][OptionSetting::SLIDER_IMAGE]) ? $data[array_key_first($data)][OptionSetting::SLIDER_IMAGE] : false; } ); } return $this->options; } private function getOptionData($optionId) { if (isset($this->optionData[$optionId])) { return $this->optionData[$optionId]; } $optionSettingCollection = $this->optionCollectionFactory->create() ->addTitleToCollection() ->addFieldToFilter('main_table.' . OptionSetting::VALUE, ['in' => $optionId]) ->addFieldToFilter( [OptionSetting::SLIDER_IMAGE, OptionSetting::IMAGE, OptionSetting::SMALL_IMAGE_ALT], [['neq' => ''], ['neq' => ''], ['neq' => '']] ) ->addFieldToFilter( 'main_table.' . OptionSettingInterface::STORE_ID, [$this->storeManager->getStore()->getId(), \Magento\Store\Model\Store::DEFAULT_STORE_ID] ); $data = []; $optionSettingCollection->getSelect()->order(['filter_code ASC', 'main_table.store_id ASC']); foreach ($optionSettingCollection as $optionSetting) { /** @var OptionSetting $optionSetting */ $data[$optionSetting->getValue()] = $this->getOptionSettingData($optionSetting); } $this->optionData[$optionId] = $data; return $this->optionData[$optionId]; } private function getOptionSettingData(OptionSetting $setting) { $data = [ OptionSetting::SLIDER_IMAGE => $setting->getSliderImageUrl() ]; return $data; } }