![]() 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/amasty/shopby/Plugin/Aggregation/Category/ |
<?php /** * @author Amasty Team * @copyright Copyright (c) Amasty (https://www.amasty.com) * @package Improved Layered Navigation Base for Magento 2 */ namespace Amasty\Shopby\Plugin\Aggregation\Category; use Magento\Framework\App\ResourceConnection; use Magento\Framework\App\ScopeResolverInterface; use Magento\Framework\DB\Ddl\Table; use Magento\Framework\DB\Select; use Magento\Framework\Search\Request\BucketInterface; use Magento\Framework\Search\Request\Dimension; use Amasty\Shopby\Helper\Category as CategoryHelper; class DataProvider { /** * @var Resource */ protected $resource; /** * @var ScopeResolverInterface */ protected $scopeResolver; /** * @var CategoryHelper */ protected $categoryHelper; /** * DataProvider constructor. * * @param ResourceConnection $resource * @param ScopeResolverInterface $scopeResolver * @param CategoryHelper $categoryHelper */ public function __construct( ResourceConnection $resource, ScopeResolverInterface $scopeResolver, CategoryHelper $categoryHelper ) { $this->resource = $resource; $this->scopeResolver = $scopeResolver; $this->categoryHelper = $categoryHelper; } /** * * @param \Magento\CatalogSearch\Model\Adapter\Mysql\Aggregation\DataProvider $subject * @param callable|\Closure $proceed * @param BucketInterface $bucket * @param Dimension[] $dimensions * * @param Table $entityIdsTable * @return Select * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function aroundGetDataSet( \Magento\CatalogSearch\Model\Adapter\Mysql\Aggregation\DataProvider $subject, \Closure $proceed, BucketInterface $bucket, array $dimensions, Table $entityIdsTable ) { if ($bucket->getField() == CategoryHelper::ATTRIBUTE_CODE) { $currentScopeId = $this->scopeResolver->getScope($dimensions['scope']->getValue())->getId(); $currentCategory = $this->categoryHelper->getStartCategory(); $derivedTable = $this->resource->getConnection()->select(); $derivedTable->from( ['main_table' => $this->resource->getTableName('catalog_category_product_index')], [ 'value' => 'category_id' ] )->where('main_table.store_id = ?', $currentScopeId); $derivedTable->joinInner( ['entities' => $entityIdsTable->getName()], 'main_table.product_id = entities.entity_id', [] ); if (!empty($currentCategory)) { $derivedTable->join( ['category' => $this->resource->getTableName('catalog_category_entity')], 'main_table.category_id = category.entity_id', [] )->where('`category`.`path` LIKE ?', $currentCategory->getPath() . '%') ->where('`category`.`level` > ?', $currentCategory->getLevel()); } $select = $this->resource->getConnection()->select(); $select->from(['main_table' => $derivedTable]); return $select; } return $proceed($bucket, $dimensions, $entityIdsTable); } }