| Current Path : /home/rtorresani/www/vendor/magento/module-catalog-graph-ql/Model/Resolver/ |
| Current File : //home/rtorresani/www/vendor/magento/module-catalog-graph-ql/Model/Resolver/Aggregations.php |
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);
namespace Magento\CatalogGraphQl\Model\Resolver;
use Magento\CatalogGraphQl\DataProvider\Product\LayeredNavigation\LayerBuilder;
use Magento\CatalogGraphQl\DataProvider\Product\LayeredNavigation\Builder\Aggregations\Category;
use Magento\Directory\Model\PriceCurrency;
use Magento\Framework\App\ObjectManager;
use Magento\Framework\GraphQl\Config\Element\Field;
use Magento\Framework\GraphQl\Query\ResolverInterface;
use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
use Magento\Store\Api\Data\StoreInterface;
/**
* Layered navigation filters resolver, used for GraphQL request processing.
*/
class Aggregations implements ResolverInterface
{
/**
* @var Layer\DataProvider\Filters
*/
private $filtersDataProvider;
/**
* @var LayerBuilder
*/
private $layerBuilder;
/**
* @var PriceCurrency
*/
private $priceCurrency;
/**
* @var Category\IncludeDirectChildrenOnly
*/
private $includeDirectChildrenOnly;
/**
* @param \Magento\CatalogGraphQl\Model\Resolver\Layer\DataProvider\Filters $filtersDataProvider
* @param LayerBuilder $layerBuilder
* @param PriceCurrency $priceCurrency
* @param Category\IncludeDirectChildrenOnly $includeDirectChildrenOnly
*/
public function __construct(
\Magento\CatalogGraphQl\Model\Resolver\Layer\DataProvider\Filters $filtersDataProvider,
LayerBuilder $layerBuilder,
PriceCurrency $priceCurrency = null,
Category\IncludeDirectChildrenOnly $includeDirectChildrenOnly = null
) {
$this->filtersDataProvider = $filtersDataProvider;
$this->layerBuilder = $layerBuilder;
$this->priceCurrency = $priceCurrency ?: ObjectManager::getInstance()->get(PriceCurrency::class);
$this->includeDirectChildrenOnly = $includeDirectChildrenOnly
?: ObjectManager::getInstance()->get(Category\IncludeDirectChildrenOnly::class);
}
/**
* @inheritdoc
*/
public function resolve(
Field $field,
$context,
ResolveInfo $info,
array $value = null,
array $args = null
) {
if (!isset($value['layer_type']) || !isset($value['search_result'])) {
return null;
}
$aggregations = $value['search_result']->getSearchAggregation();
if ($aggregations) {
$categoryFilter = $value['categories'] ?? [];
$includeDirectChildrenOnly = $args['filter']['category']['includeDirectChildrenOnly'] ?? false;
if ($includeDirectChildrenOnly && !empty($categoryFilter)) {
$this->includeDirectChildrenOnly->setFilter(['category' => $categoryFilter]);
}
/** @var StoreInterface $store */
$store = $context->getExtensionAttributes()->getStore();
$storeId = (int)$store->getId();
$results = $this->layerBuilder->build($aggregations, $storeId);
if (isset($results['price_bucket'])) {
foreach ($results['price_bucket']['options'] as &$value) {
list($from, $to) = explode('-', $value['label']);
$newLabel = $this->priceCurrency->convertAndRound($from)
. '-'
. $this->priceCurrency->convertAndRound($to);
$value['label'] = $newLabel;
$value['value'] = str_replace('-', '_', $newLabel);
}
}
return $results;
} else {
return [];
}
}
}