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/amasty/base/Model/AmastyMenu/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/old/vendor/amasty/base/Model/AmastyMenu/MenuItemsProvider.php
<?php

declare(strict_types=1);

/**
 * @author Amasty Team
 * @copyright Copyright (c) Amasty (https://www.amasty.com)
 * @package Magento 2 Base Package
 */

namespace Amasty\Base\Model\AmastyMenu;

use Magento\Backend\Model\Menu;
use Magento\Backend\Model\Menu\Config;
use Magento\Backend\Model\Menu\Filter\Iterator;
use Magento\Backend\Model\Menu\Filter\IteratorFactory;
use Magento\Backend\Model\Menu\Item;

class MenuItemsProvider
{
    /**
     * @var IteratorFactory
     */
    private $iteratorFactory;

    /**
     * @var AmastyConfigItemsProvider
     */
    private $configItemsProvider;

    /**
     * @var MenuItemFactory
     */
    private $menuItemFactory;

    /**
     * @var Menu
     */
    private $defaultMenu;

    /**
     * Storage for generated items
     *
     * @var MenuItem[]
     */
    private $amastyItems = [];

    public function __construct(
        IteratorFactory $iteratorFactory,
        AmastyConfigItemsProvider $configItemsProvider,
        MenuItemFactory $menuItemFactory,
        Config $menuConfig
    ) {
        $this->iteratorFactory = $iteratorFactory;
        $this->menuItemFactory = $menuItemFactory;
        $this->defaultMenu = $menuConfig->getMenu();
        $this->configItemsProvider = $configItemsProvider;
    }

    /**
     * Get all available Amasty Menu Items
     *
     * @return MenuItem[]
     */
    public function get(): array
    {
        if (!$this->amastyItems) {
            $resources = $this->getAmastyResources($this->defaultMenu);
            $itemsData = [];

            foreach ($resources as $resource) {
                $moduleCode = current(explode('::', $resource));
                if (!isset($itemsData[$moduleCode])) {
                    $itemsData[$moduleCode][MenuItem::RESOURCES] = [];
                }
                $itemsData[$moduleCode][MenuItem::RESOURCES][] = $resource;
            }

            $configItems = $this->configItemsProvider->getConfigItems();
            foreach ($configItems as $moduleCode => $configData) {
                $itemsData[$moduleCode][MenuItem::CONFIG] = $configData;
            }

            foreach ($itemsData as $moduleCode => $itemData) {
                $this->amastyItems[$moduleCode] = $this->menuItemFactory->create(['data' => $itemData]);
            }
        }

        return $this->amastyItems;
    }

    /**
     * Get Amasty Menu Item by module code
     *
     * @param string $moduleCode
     * @return MenuItem|null
     */
    public function getByModuleCode(string $moduleCode): ?MenuItem
    {
        return $this->get()[$moduleCode] ?? null;
    }

    /**
     * @param Menu $menu
     * @return array
     */
    private function getAmastyResources(Menu $menu): array
    {
        $items = [];

        foreach ($this->getMenuIterator($menu) as $menuItem) {
            if ($this->isCollectableNode($menuItem)) {
                $items[] = $menuItem->getId();
            }
            if ($menuItem->hasChildren()) {
                foreach ($this->getAmastyResources($menuItem->getChildren()) as $menuChild) {
                    $items[] = $menuChild;
                }
            }
        }

        return $items;
    }

    /**
     * @param Item $menuItem
     * @return bool
     */
    private function isCollectableNode(Item $menuItem): bool
    {
        if (strpos($menuItem->getId(), 'Amasty') === false
            || strpos($menuItem->getId(), 'Amasty_Base') !== false
        ) {
            return false;
        }

        if (empty($menuItem->getAction())
            || strpos($menuItem->getAction(), 'system_config') === false
        ) {
            return true;
        }

        return false;
    }

    /**
     * @param Menu $menu
     * @return Iterator
     */
    private function getMenuIterator(Menu $menu): Iterator
    {
        return $this->iteratorFactory->create(['iterator' => $menu->getIterator()]);
    }
}

Spamworldpro Mini