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/ModuleTitlesResolver.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 Amasty\Base\Model\Feed\ExtensionsProvider;
use Amasty\Base\Model\ModuleInfoProvider;
use Magento\Framework\Escaper;
use Magento\Framework\Module\ModuleListInterface;

class ModuleTitlesResolver
{
    /**
     * @var ModuleListInterface
     */
    private $moduleList;

    /**
     * @var ModuleInfoProvider
     */
    private $moduleInfoProvider;

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

    /**
     * @var Escaper
     */
    private $escaper;

    public function __construct(
        ModuleListInterface $moduleList,
        ModuleInfoProvider $moduleInfoProvider,
        ExtensionsProvider $extensionsProvider,
        Escaper $escaper
    ) {
        $this->moduleList = $moduleList;
        $this->moduleInfoProvider = $moduleInfoProvider;
        $this->extensionsProvider = $extensionsProvider;
        $this->escaper = $escaper;
    }

    /**
     * Get installed Amasty modules titles for menu building
     *
     * @param MenuItem[] $menuItems module data to intersect with
     * @return string[] [module_code => title]
     */
    public function getTitles(array $menuItems): array
    {
        $amastyModules = array_intersect($this->getAmastyModules(), array_keys($menuItems));

        $modules = [];
        foreach ($amastyModules as $moduleCode) {
            $title = $menuItems[$moduleCode]->getConfigByKey('label');
            if (!$title) {
                $title = $this->getModuleTitle($moduleCode);
            }
            $modules[$moduleCode] = __($title)->render();
        }

        return $modules;
    }

    /**
     * @param string $moduleCode
     * @return string
     */
    public function getModuleTitle(string $moduleCode): string
    {
        $module = $this->extensionsProvider->getFeedModuleData($moduleCode);
        if ($module && isset($module['name'])) {
            $title = $module['name'];
        } else {
            $title = str_replace('Amasty_', '', $moduleCode);
            $title = preg_replace('/([a-z0-9])([A-Z])/', '$1 $2', $title);
        }
        $extraWord = $module['solution_version'] ?? '';

        return $this->normalizeTitle($this->trimTitle($title, $extraWord));
    }

    /**
     * @param string $title
     * @param string $trimWord
     * @return string
     */
    public function trimTitle(string $title, string $trimWord = ''): string
    {
        $title = trim($title);
        $title = str_replace(' for Magento 2', '', $title);

        if ($trimWord) {
            $lastSpacePos = strrpos($title, ' ');
            $lastWord = substr($title, $lastSpacePos + 1);
            if (strcasecmp($trimWord, $lastWord) === 0) {
                $title = substr($title, 0, $lastSpacePos);
            }
        }

        return $this->escaper->escapeHtml($title);
    }

    /**
     * According to default validation rules, title can't be longer than 50 characters
     *
     * @param string $title
     * @return string
     */
    private function normalizeTitle(string $title): string
    {
        if (mb_strlen($title) > 50) {
            $title = mb_substr($title, 0, 47) . '...';
        }

        return $title;
    }

    /**
     * Retrieve all installed amasty module names
     *
     * @return array
     */
    private function getAmastyModules(): array
    {
        $restrictedModules = $this->moduleInfoProvider->getRestrictedModules();

        return array_filter($this->moduleList->getNames(), function ($moduleCode) use ($restrictedModules) {
            return $moduleCode !== 'Amasty_Base'
                && strpos($moduleCode, 'Amasty_') !== false
                && !in_array($moduleCode, $restrictedModules, true);
        });
    }
}

Spamworldpro Mini