Your IP : 127.0.0.1


Current Path : /home/Mirasvit/SearchReport/Plugin/
Upload File :
Current File : /home/Mirasvit/SearchReport/Plugin/ResponsePlugin.php

<?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-report
 * @version   1.0.8
 * @copyright Copyright (C) 2020 Mirasvit (https://mirasvit.com/)
 */



namespace Mirasvit\SearchReport\Plugin;

use Magento\Framework\App\RequestInterface;
use Magento\Framework\App\ResponseInterface;
use Magento\Framework\Registry;
use Magento\Framework\Stdlib\CookieManagerInterface;
use Mirasvit\SearchReport\Api\Service\LogServiceInterface;
use Magento\Framework\Stdlib\Cookie\CookieMetadataFactory;

class ResponsePlugin
{
    const COOKIE_NAME = 'searchReport-log';

    /**
     * @var \Magento\Framework\App\Request\Http
     */
    private $request;

    /**
     * @var LogServiceInterface
     */
    private $logService;

    /**
     * @var CookieManagerInterface
     */
    private $cookieManager;

    /**
     * @var CookieMetadataFactory
     */
    private $cookieMetadataFactory;

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

    /**
     * ResponsePlugin constructor.
     * @param RequestInterface $request
     * @param LogServiceInterface $logService
     * @param CookieManagerInterface $cookieManager
     * @param CookieMetadataFactory $cookieMetadataFactory
     * @param Registry $registry
     */
    public function __construct(
        RequestInterface $request,
        LogServiceInterface $logService,
        CookieManagerInterface $cookieManager,
        CookieMetadataFactory $cookieMetadataFactory,
        Registry $registry
    ) {
        $this->request = $request;
        $this->logService = $logService;
        $this->cookieManager = $cookieManager;
        $this->cookieMetadataFactory = $cookieMetadataFactory;
        $this->registry = $registry;
    }

    /**
     * {@inheritdoc}
     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
     */
    public function beforeSendResponse(ResponseInterface $response)
    {
        /** @var \Magento\Framework\App\Response\Http $response */

        if ($this->request->getParam('q')) {
            $query = $this->request->getParam('q');
            $misspell = $this->request->getParam('o');
            $fallback = $this->request->getParam('f');
            $results = $this->registry->registry(SearchPlugin::REGISTRY_KEY);
            $source = $this->request->getFullActionName();

            if ($results === null) {
                return;
            }

            $log = $this->logService->logQuery($query, $results, $source, $misspell, $fallback);

            if ($log) {
                $this->setLogCookie($log->getId());
            }
        } elseif (in_array($this->request->getModuleName(), ['catalog', 'catalogsearch'])
            || in_array($this->request->getFullActionName(), ['cms_index_index','cms_page_view'])) {
            $logId = $this->cookieManager->getCookie(self::COOKIE_NAME);
            $this->logService->logClick($logId);

            $this->setLogCookie(0);
        }
    }

    /**
     * @param int $logId
     * @throws \Magento\Framework\Exception\InputException
     * @throws \Magento\Framework\Stdlib\Cookie\CookieSizeLimitReachedException
     * @throws \Magento\Framework\Stdlib\Cookie\FailureToSendException
     */
    private function setLogCookie($logId)
    {
        $metadata = $this->cookieMetadataFactory->createPublicCookieMetadata([
            'path' => '/',
        ]);

        /*
        * If enabled - allows subdomains
        */
        // $metadata->setDomain($_SERVER['HTTP_HOST']);
        $metadata->setSecure(isset($_SERVER['HTTPS']));
        $metadata->setHttpOnly(true);

        $this->cookieManager->setPublicCookie(self::COOKIE_NAME, $logId, $metadata);
    }
}