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/Frontend/Processors/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/old/vendor/amasty/base/Model/AmastyMenu/Frontend/Processors/Extension.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\Frontend\Processors;

use Amasty\Base\Block\Adminhtml\System\Config\Information;
use Amasty\Base\Model\AmastyMenu\Frontend\ItemsProvider;
use Amasty\Base\Model\AmastyMenu\MenuItemsProvider;
use Amasty\Base\Model\Feed\ExtensionsProvider;
use Magento\Backend\Model\Menu;
use Magento\Backend\Model\Menu\Config;
use Magento\Backend\Model\Menu\Item;
use Magento\Backend\Model\UrlInterface;

class Extension
{
    public const USER_GUIDE_SEO_CAMPAIGN = 'main_menu_to_user_guide';

    /**
     * @var ExtensionsProvider
     */
    private $extensionsProvider;

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

    /**
     * @var MenuItemsProvider
     */
    private $menuItemsProvider;

    /**
     * @var UrlInterface
     */
    private $url;

    public function __construct(
        ExtensionsProvider $extensionsProvider,
        Config $menuConfig,
        MenuItemsProvider $menuItemsProvider,
        UrlInterface $url
    ) {
        $this->extensionsProvider = $extensionsProvider;
        $this->defaultMenu = $menuConfig->getMenu();
        $this->menuItemsProvider = $menuItemsProvider;
        $this->url = $url;
    }

    /**
     * Process extension for menu output
     *
     * @param string $moduleCode
     * @param string $title
     * @return array|null
     */
    public function process(string $moduleCode, string $title): ?array
    {
        $item = [
            ItemsProvider::LABEL => $title,
            ItemsProvider::ID => $moduleCode . '::container',
            ItemsProvider::TYPE => ItemsProvider::TYPE_SIMPLE,
            ItemsProvider::URL => ''
        ];

        $childItems = $this->getFormattedModuleMenuItems($moduleCode);
        if (!empty($childItems)) {
            $item[ItemsProvider::ITEMS] = $childItems;

            return $item;
        }

        return null;
    }

    /**
     * Get menu items to retrieve correct urls and check action existence and ACLs and then format
     *
     * @param string $moduleCode
     * @return array
     */
    private function getFormattedModuleMenuItems(string $moduleCode): array
    {
        $items = [];
        $moduleLinks = $this->menuItemsProvider->getByModuleCode($moduleCode)
            ? $this->menuItemsProvider->getByModuleCode($moduleCode)->getResources()
            : [];

        foreach ($moduleLinks as $link) {
            if (($item = $this->defaultMenu->get($link)) && $item->isAllowed()) {
                $itemData = $item->toArray();
                if (isset($itemData['id'], $itemData['resource'], $itemData['title'], $itemData['action'])) {
                    $items[] = $this->convertMenuItem($item);
                }
            }
        }
        $this->addCommonMenuItems($items, $moduleCode);

        return array_filter($items);
    }

    /**
     * Add config and user guide links to module items
     *
     * @param array $items
     * @param string $moduleCode
     * @return void
     */
    private function addCommonMenuItems(array &$items, string $moduleCode): void
    {
        $configId = $this->menuItemsProvider->getByModuleCode($moduleCode)
            ? $this->menuItemsProvider->getByModuleCode($moduleCode)->getConfigByKey('id')
            : '';

        if ($configId) { //add config
            $items[] = [
                ItemsProvider::LABEL => __('Configuration')->render(),
                ItemsProvider::ID => $moduleCode . '::menuconfig',
                ItemsProvider::TYPE => ItemsProvider::TYPE_SIMPLE,
                ItemsProvider::URL => $this->url->getUrl(
                    'adminhtml/system_config/edit/section/' . $configId,
                    ['_cache_secret_key' => true]
                )
            ];
        }

        $moduleInfo = $this->extensionsProvider->getFeedModuleData($moduleCode);
        if (!empty($moduleInfo['guide'])) { //add user guide
            $url = $moduleInfo['guide'];
            $seoParams = Information::SEO_PARAMS;
            if (strpos($url, '?') !== false) {
                $seoParams = str_replace('?', '&', $seoParams);
            }
            $url .= $seoParams . self::USER_GUIDE_SEO_CAMPAIGN;

            $items[] = [
                ItemsProvider::LABEL => __('User Guide')->render(),
                ItemsProvider::ID => $moduleCode . '::menuguide',
                ItemsProvider::TYPE => ItemsProvider::TYPE_SIMPLE,
                ItemsProvider::URL => $url
            ];
        }
    }

    /**
     * Convert Menu\Item to common output
     *
     * @param Item $menuItem
     * @return array
     */
    private function convertMenuItem(Item $menuItem): array
    {
        return [
            ItemsProvider::LABEL => __((string)$menuItem->getTitle())->render(),
            ItemsProvider::ID => $menuItem->getId(),
            ItemsProvider::TYPE => ItemsProvider::TYPE_SIMPLE,
            ItemsProvider::URL => $menuItem->getUrl() === '#' ? '' : $menuItem->getUrl()
        ];
    }
}

Spamworldpro Mini