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/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

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

use Amasty\Base\Model\AmastyMenu\ActiveSolutionsProvider;
use Amasty\Base\Model\AmastyMenu\Frontend\Processors\Extension;
use Amasty\Base\Model\AmastyMenu\Frontend\Processors\Links;
use Amasty\Base\Model\AmastyMenu\Frontend\Processors\Solution;
use Amasty\Base\Model\AmastyMenu\ModuleTitlesResolver;
use Amasty\Base\Model\AmastyMenu\MenuItemsProvider;

class ItemsProvider
{
    /**
     * Const for item types
     */
    public const TYPE_SIMPLE = 'simple';
    public const TYPE_SOLUTION = 'solution';
    public const TYPE_UPGRADE_URL = 'upgrade_url';
    public const TYPE_LINK = 'link';

    /**
     * Const for array keys
     */
    public const ID = 'id';
    public const LABEL = 'label';
    public const TYPE = 'type';
    public const URL = 'url';
    public const PLAN_LABEL = 'plan_label';
    public const ADD_INFO = 'add_info';
    public const ITEMS = 'items';

    /**
     * @var ModuleTitlesResolver
     */
    private $moduleTitlesResolver;

    /**
     * @var Extension
     */
    private $extensionProcessor;

    /**
     * @var Solution
     */
    private $solutionProcessor;

    /**
     * @var Links
     */
    private $linksProcessor;

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

    /**
     * @var ActiveSolutionsProvider
     */
    private $activeSolutionsProvider;

    public function __construct(
        ModuleTitlesResolver $moduleTitlesResolver,
        MenuItemsProvider $menuItemsProvider,
        Extension $extensionProcessor,
        Solution $solutionProcessor,
        Links $linksProcessor,
        ActiveSolutionsProvider $activeSolutionsProvider
    ) {
        $this->moduleTitlesResolver = $moduleTitlesResolver;
        $this->extensionProcessor = $extensionProcessor;
        $this->solutionProcessor = $solutionProcessor;
        $this->linksProcessor = $linksProcessor;
        $this->menuItemsProvider = $menuItemsProvider;
        $this->activeSolutionsProvider = $activeSolutionsProvider;
    }

    /**
     * Retrieve formatted Amasty Menu Items for menu building

     * @return array
     */
    public function getItems(): array
    {
        $items = [];
        $installedSolutions = $this->activeSolutionsProvider->get();

        foreach (array_keys($installedSolutions) as $solutionCode) {
            $items[] = $this->solutionProcessor->process($solutionCode);
        }

        $availableModules = $this->getAvailableModules($installedSolutions);
        foreach ($availableModules as $moduleCode => $title) {
            $items[] = $this->extensionProcessor->process($moduleCode, $title);
        }

        $this->filterAndSortItems($items);
        $this->linksProcessor->process($items);

        return $items;
    }

    /**
     * Get available modules based on installed
     * and skip modules that have been added in solutions
     *
     * @param array $installedSolutions
     *
     * @return string[]
     */
    private function getAvailableModules(array $installedSolutions): array
    {
        $modulesToSkip = [];

        foreach ($installedSolutions as $installedSolution) {
            if (isset($installedSolution['additional_extensions'])
                && is_array($installedSolution['additional_extensions'])
            ) {
                // phpcs:ignore Magento2.Performance.ForeachArrayMerge.ForeachArrayMerge
                $modulesToSkip = array_merge($modulesToSkip, $installedSolution['additional_extensions']);
            }
        }

        return array_diff_key(
            $this->moduleTitlesResolver->getTitles($this->menuItemsProvider->get()),
            array_flip(array_unique($modulesToSkip))
        );
    }

    /**
     * Clean items from 'null' elements
     * and then filter them in alphabetical order
     *
     * @param array $items
     * @return void
     */
    private function filterAndSortItems(array &$items): void
    {
        $items = array_values(array_filter($items));
        usort($items, function ($a, $b) {
            return strcasecmp($a['label'], $b['label']);
        });
    }
}

Spamworldpro Mini