![]() 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-swatches/Model/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Swatches\Model; use Magento\Framework\App\CacheInterface; use Magento\Framework\App\ResourceConnection; use Magento\Framework\DB\Select; /** * Class SwatchAttributeCodes for getting codes of swatch attributes. */ class SwatchAttributeCodes { /** * @var string */ private $cacheKey; /** * @var CacheInterface */ private $cache; /** * @var ResourceConnection */ private $resourceConnection; /** * Key is attribute_id, value is attribute_code * * @var array */ private $swatchAttributeCodes; /** * @var array */ private $cacheTags; /** * SwatchAttributeList constructor. * * @param CacheInterface $cache * @param ResourceConnection $resourceConnection * @param string $cacheKey * @param array $cacheTags */ public function __construct( CacheInterface $cache, ResourceConnection $resourceConnection, $cacheKey, array $cacheTags ) { $this->cache = $cache; $this->resourceConnection = $resourceConnection; $this->cacheKey = $cacheKey; $this->cacheTags = $cacheTags; } /** * Returns list of known swatch attribute codes. Check cache and database. * Key is attribute_id, value is attribute_code * * @return array */ public function getCodes() { if ($this->swatchAttributeCodes === null) { $swatchAttributeCodesCache = $this->cache->load($this->cacheKey); if (false === $swatchAttributeCodesCache) { $swatchAttributeCodes = $this->getSwatchAttributeCodes(); $this->cache->save(json_encode($swatchAttributeCodes), $this->cacheKey, $this->cacheTags); } else { $swatchAttributeCodes = json_decode($swatchAttributeCodesCache, true); } $this->swatchAttributeCodes = $swatchAttributeCodes; } return $this->swatchAttributeCodes; } /** * Returns list of known swatch attributes. * * Returns a map of id and code for all EAV attributes with swatches * * @return array */ private function getSwatchAttributeCodes() { $select = $this->resourceConnection->getConnection()->select() ->from( ['a' => $this->resourceConnection->getTableName('eav_attribute')], [ 'attribute_id' => 'a.attribute_id', 'attribute_code' => 'a.attribute_code', ] )->where( 'a.attribute_id IN (?)', new \Zend_Db_Expr($this->getAttributeIdsSelect()) ); $result = $this->resourceConnection->getConnection()->fetchPairs($select); return $result; } /** * Returns Select for attributes Ids. * * Builds a "Select" object which loads all EAV attributes that has "swatch" options * * @return Select */ private function getAttributeIdsSelect() { return $this->resourceConnection->getConnection()->select() ->from( ['o' => $this->resourceConnection->getTableName('eav_attribute_option')], ['attribute_id' => 'o.attribute_id'] )->join( ['s' => $this->resourceConnection->getTableName('eav_attribute_option_swatch')], 'o.option_id = s.option_id', [] ); } }