|
Apache/2.4.41 (Ubuntu) Linux vmi616275.contaboserver.net 5.4.0-84-generic #94-Ubuntu SMP Thu Aug 26 20:27:37 UTC 2021 x86_64 uid=33(www-data) gid=33(www-data) groups=33(www-data) server ip : 62.171.164.128 | your ip : 127.0.0.1 safemode OFF > / home / Mirasvit / SearchMysql / SearchAdapter / Aggregation / DataProvider / |
Filename | /home/Mirasvit/SearchMysql/SearchAdapter/Aggregation/DataProvider/DataProvider.php |
Size | 3.21 kb |
Permission | rw-r--r-- |
Owner | root : root |
Create time | 01-Jul-2024 20:52 |
Last modified | 06-Apr-2021 18:06 |
Last accessed | 22-Aug-2025 03:25 |
Actions | edit | rename | delete | download (gzip) |
View | text | code | image |
<?php
/**
* Mirasvit
*
* This source file is subject to the Mirasvit Software License, which is available at https://mirasvit.com/license/.
* Do not edit or add to this file if you wish to upgrade the to newer versions in the future.
* If you wish to customize this module for your needs.
* Please refer to http://www.magentocommerce.com for more information.
*
* @category Mirasvit
* @package mirasvit/module-search-ultimate
* @version 2.0.25
* @copyright Copyright (C) 2021 Mirasvit (https://mirasvit.com/)
*/
namespace Mirasvit\SearchMysql\SearchAdapter\Aggregation\DataProvider;
use Magento\Catalog\Model\Product;
use Magento\Eav\Model\Config;
use Magento\Framework\App\ObjectManager;
use Magento\Framework\App\ResourceConnection;
use Magento\Framework\App\ScopeResolverInterface;
use Magento\Framework\DB\Adapter\AdapterInterface;
use Magento\Framework\DB\Ddl\Table;
use Magento\Framework\DB\Select;
use Magento\Framework\Event\Manager;
use Magento\Framework\Search\Request\BucketInterface;
class DataProvider
{
/**
* @var Config
*/
private $eavConfig;
/**
* @var ScopeResolverInterface
*/
private $scopeResolver;
/**
* @var AdapterInterface
*/
private $connection;
/**
* @var SelectBuilderForAttribute
*/
private $selectBuilderForAttribute;
/**
* @var Manager
*/
private $eventManager;
public function __construct(
Config $eavConfig,
ResourceConnection $resource,
ScopeResolverInterface $scopeResolver,
SelectBuilderForAttribute $selectBuilderForAttribute = null,
Manager $eventManager = null
) {
$this->eavConfig = $eavConfig;
$this->connection = $resource->getConnection();
$this->scopeResolver = $scopeResolver;
$this->selectBuilderForAttribute = $selectBuilderForAttribute
? : ObjectManager::getInstance()->get(SelectBuilderForAttribute::class);
$this->eventManager = $eventManager ? : ObjectManager::getInstance()->get(Manager::class);
}
/**
* @inheritdoc
*/
public function getDataSet(
BucketInterface $bucket,
array $dimensions,
Table $entityIdsTable
) {
$currentScope = (int)$this->scopeResolver->getScope($dimensions['scope']->getValue())->getId();
$attribute = $this->eavConfig->getAttribute(Product::ENTITY, $bucket->getField());
$select = $this->getSelect();
$select->joinInner(
['entities' => $entityIdsTable->getName()],
'main_table.entity_id = entities.entity_id',
[]
);
$this->eventManager->dispatch(
'catalogsearch_query_add_filter_after',
['bucket' => $bucket, 'select' => $select]
);
$select = $this->selectBuilderForAttribute->build($select, $attribute, $currentScope);
return $select;
}
/**
* @inheritdoc
*/
public function execute(Select $select)
{
return $this->connection->fetchAssoc($select);
}
/**
* Get select.
* @return Select
*/
private function getSelect()
{
return $this->connection->select();
}
}
/**
* Mirasvit
*
* This source file is subject to the Mirasvit Software License, which is available at https://mirasvit.com/license/.
* Do not edit or add to this file if you wish to upgrade the to newer versions in the future.
* If you wish to customize this module for your needs.
* Please refer to http://www.magentocommerce.com for more information.
*
* @category Mirasvit
* @package mirasvit/module-search-ultimate
* @version 2.0.25
* @copyright Copyright (C) 2021 Mirasvit (https://mirasvit.com/)
*/
namespace Mirasvit\SearchMysql\SearchAdapter\Aggregation\DataProvider;
use Magento\Catalog\Model\Product;
use Magento\Eav\Model\Config;
use Magento\Framework\App\ObjectManager;
use Magento\Framework\App\ResourceConnection;
use Magento\Framework\App\ScopeResolverInterface;
use Magento\Framework\DB\Adapter\AdapterInterface;
use Magento\Framework\DB\Ddl\Table;
use Magento\Framework\DB\Select;
use Magento\Framework\Event\Manager;
use Magento\Framework\Search\Request\BucketInterface;
class DataProvider
{
/**
* @var Config
*/
private $eavConfig;
/**
* @var ScopeResolverInterface
*/
private $scopeResolver;
/**
* @var AdapterInterface
*/
private $connection;
/**
* @var SelectBuilderForAttribute
*/
private $selectBuilderForAttribute;
/**
* @var Manager
*/
private $eventManager;
public function __construct(
Config $eavConfig,
ResourceConnection $resource,
ScopeResolverInterface $scopeResolver,
SelectBuilderForAttribute $selectBuilderForAttribute = null,
Manager $eventManager = null
) {
$this->eavConfig = $eavConfig;
$this->connection = $resource->getConnection();
$this->scopeResolver = $scopeResolver;
$this->selectBuilderForAttribute = $selectBuilderForAttribute
? : ObjectManager::getInstance()->get(SelectBuilderForAttribute::class);
$this->eventManager = $eventManager ? : ObjectManager::getInstance()->get(Manager::class);
}
/**
* @inheritdoc
*/
public function getDataSet(
BucketInterface $bucket,
array $dimensions,
Table $entityIdsTable
) {
$currentScope = (int)$this->scopeResolver->getScope($dimensions['scope']->getValue())->getId();
$attribute = $this->eavConfig->getAttribute(Product::ENTITY, $bucket->getField());
$select = $this->getSelect();
$select->joinInner(
['entities' => $entityIdsTable->getName()],
'main_table.entity_id = entities.entity_id',
[]
);
$this->eventManager->dispatch(
'catalogsearch_query_add_filter_after',
['bucket' => $bucket, 'select' => $select]
);
$select = $this->selectBuilderForAttribute->build($select, $attribute, $currentScope);
return $select;
}
/**
* @inheritdoc
*/
public function execute(Select $select)
{
return $this->connection->fetchAssoc($select);
}
/**
* Get select.
* @return Select
*/
private function getSelect()
{
return $this->connection->select();
}
}