EmicoEcommerce/Magento2Tweakwise

View on GitHub
Model/AjaxResultInitializer/CategoryInitializer.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace Tweakwise\Magento2Tweakwise\Model\AjaxResultInitializer;

use Tweakwise\Magento2Tweakwise\Model\AjaxNavigationResult;
use Magento\Catalog\Api\CategoryRepositoryInterface;
use Magento\Catalog\Model\Layer\Resolver;
use Magento\Framework\App\RequestInterface;
use Magento\Framework\Exception\NoSuchEntityException;
use Magento\Framework\Registry;

class CategoryInitializer implements InitializerInterface
{
    /**
     * @var Resolver
     */
    protected $layerResolver;

    /**
     * @var Registry
     */
    protected $registry;

    /**
     * @var CategoryRepositoryInterface
     */
    protected $categoryRepository;

    /**
     * AjaxResultCategoryInitializer constructor.
     * @param Resolver $layerResolver
     * @param Registry $registry
     * @param CategoryRepositoryInterface $categoryRepository
     */
    public function __construct(
        Resolver $layerResolver,
        Registry $registry,
        CategoryRepositoryInterface $categoryRepository
    ) {
        $this->layerResolver = $layerResolver;
        $this->registry = $registry;
        $this->categoryRepository = $categoryRepository;
    }

    /**
     * @inheritDoc
     * @throws NoSuchEntityException
     */
    public function initializeAjaxResult(
        AjaxNavigationResult $ajaxNavigationResult,
        RequestInterface $request
    ) {
        $this->initializeLayer();
        $this->initializeLayout($ajaxNavigationResult);
        $this->initializeRegistry($request);
    }

    /**
     * @param AjaxNavigationResult $ajaxNavigationResult
     */
    protected function initializeLayout(AjaxNavigationResult $ajaxNavigationResult)
    {
        $ajaxNavigationResult->addHandle(self::LAYOUT_HANDLE_CATEGORY);
    }

    /**
     * Create category layer
     */
    protected function initializeLayer()
    {
        $this->layerResolver->create(Resolver::CATALOG_LAYER_CATEGORY);
    }

    /**
     * @param RequestInterface $request
     * @throws NoSuchEntityException
     */
    protected function initializeRegistry(RequestInterface $request)
    {
        // Register the category, its needed while rendering filters and products
        if (!$this->registry->registry('current_category')) {
            $categoryId = (int)$request->getParam('__tw_object_id') ?: 2;
            $category = $this->categoryRepository->get($categoryId);
            $this->registry->register('current_category', $category);
        }
    }
}