RequestCheckerComposite.php 1.98 KB
Newer Older
Ketan's avatar
Ketan committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
namespace Magento\CatalogSearch\Model\Adapter\Aggregation;

use Magento\Framework\Search\RequestInterface;
use Magento\Catalog\Api\CategoryRepositoryInterface;
use Magento\Store\Model\StoreManagerInterface;

/**
 * Composite request checker.
 */
class RequestCheckerComposite implements RequestCheckerInterface
{
    /**
     * @var CategoryRepositoryInterface
     */
    private $categoryRepository;

    /**
     * @var StoreManagerInterface
     */
    private $storeManager;

    /**
     * @var RequestCheckerInterface[]
     */
    private $queryCheckers;

    /**
     * @param CategoryRepositoryInterface $categoryRepository
     * @param StoreManagerInterface $storeManager
     * @param RequestCheckerInterface[] $queryCheckers
     * @throws \InvalidArgumentException
     */
    public function __construct(
        CategoryRepositoryInterface $categoryRepository,
        StoreManagerInterface $storeManager,
        array $queryCheckers
    ) {
        $this->categoryRepository = $categoryRepository;
        $this->storeManager = $storeManager;
        $this->queryCheckers = $queryCheckers;

        foreach ($this->queryCheckers as $queryChecker) {
            if (!$queryChecker instanceof RequestCheckerInterface) {
                throw new \InvalidArgumentException(
                    get_class($queryChecker) .
                    ' does not implement ' .
                    \Magento\CatalogSearch\Model\Adapter\Aggregation\RequestCheckerInterface::class
                );
            }
        }
    }

    /**
     * @inheritdoc
     */
    public function isApplicable(RequestInterface $request)
    {
        $result = true;

        foreach ($this->queryCheckers as $item) {
            /** @var RequestCheckerInterface $item */
            $result = $item->isApplicable($request);
            if (!$result) {
                break;
            }
        }

        return $result;
    }
}