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/wyomind/framework/Plugin/Backend/Model/Menu/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/old/vendor/wyomind/framework/Plugin/Backend/Model/Menu/Builder.php
<?php

namespace Wyomind\Framework\Plugin\Backend\Model\Menu;

use Magento\Backend\Model\Menu;
use Magento\Backend\Model\Menu\ItemFactory;
use Wyomind\Framework\Helper\Module;

class Builder
{

    const MARKETPLACE = false;

    /**
     * @var Module
     */
    protected $module;
    /**
     * @var ItemFactory
     */
    private $menuItemFactory;

    /**
     * BuilderPlugin constructor.
     * @param ItemFactory $menuItemFactory
     * @param Module $module
     */
    public function __construct(
        ItemFactory $menuItemFactory,
        Module $module
    ) {
    
        $this->menuItemFactory = $menuItemFactory;
        $this->module = $module;
    }

    public function getOrphan(&$results, $children, $itemId)
    {
        $result = null;
        /** @var Item $item */
        foreach ($children as $item) {
            if (strpos($item->getId(), $itemId) === 0
                && strpos($item->getId(), "_copy") === false
                && strpos($item->getId(), "fwk_") === false
                && $item->getAction() != "") {
                $results[] = $item->getId();
                break;
            }
            if ($item->hasChildren() && ($result = $this->getOrphan($results, $item->getChildren(), $itemId))) {
                break;
            }
        }
        return $result;
    }

    public function copy($menu, $idFrom, $idTo, $idParent)
    {
        if ($menu->get($idTo)) {
            return;
        }
        $itemFrom = $menu->get($idFrom);
        $itemData = $itemFrom->toArray();

        $itemData['id'] = $idTo;
        $subMenu = $itemData['sub_menu'] ?? [];

        foreach ($subMenu as $k => &$sub) {
            $sub['id'] .= '_copy';
            if ($menu->get($sub['id'])) {
                unset($subMenu[$k]);
            }
        }
        $itemData['sub_menu'] = $subMenu;

        $item = $this->menuItemFactory->create([
            'data' => $itemData
        ]);
        $menu->add($item, $idParent, $itemData['sort_index']);
    }

    /**
     * @param Builder $subject
     * @param Menu $menu
     * @return Menu
     */
    public function afterGetResult($subject, Menu $menu)
    {

        $newMenu = clone $menu;
        $installedModules = [];

        $copy = $menu->getArrayCopy();

        if ($main = $menu->get('Wyomind_Framework::main')) {
            $allExtensions = $this->module->getAllExtensions();
            $modules = $this->module->getModuleListAll(true);

            foreach ($modules as $module) {
                try {
                    if (!$module['label']) {
                        continue;
                    }
                    $moduleName = $module['name'];
                    $installedModules[] = strtoupper($module['code']);


                    $copyMenu = null;
                    $parent = 'Wyomind_Framework::main';


                    // create main menu in Framework Menu
//                if (!$moduleMenu) {
                    if ($module['label']) {
                        $item = $this->menuItemFactory->create([
                            'data' => [
                                'parent_id' => $parent,
                                'id' => $moduleName . '::fwk_main',
                                'title' => $module['label'],
                                'resource' => $moduleName . '::fwk_main'
                            ]
                        ]);
                        $newMenu->add($item, $parent);
                        $copyMenu = $item;
                    }


                    // Original module menu
                    $moduleMenu = $menu->get($moduleName . '::main');
                    if (!$moduleMenu) {
                        $moduleMenu = $menu->get($moduleName . '::menu');
                    }
                    if (!$moduleMenu) {
                        $moduleMenu = $menu->get($moduleName . '::global');
                    }

                    $prefix = $this->module->getPrefix($moduleName);

                    // if original menu exists
                    if ($moduleMenu and $moduleMenu->getAction() == "") {
                        $this->copy($newMenu, $moduleMenu->getId(), $moduleMenu->getId() . '_copy', $copyMenu->getId());
                        $menuForOrphans = $moduleMenu->getId() . '_copy';
                    } else { // no original menu
                        $item = $this->menuItemFactory->create([
                            'data' => [
                                'parent_id' => $parent,
                                'id' => $moduleName . '::main_copy',
                                'title' => $module['label'],
                                'resource' => $moduleName . '::main_copy'
                            ]
                        ]);
                        $newMenu->add($item, $copyMenu->getId());
                        $menuForOrphans = $item->getId();
                    }

                    // adding module menu children
                    $results = [];
                    $this->getOrphan($results, $copy, $moduleName);

                    foreach ($results as $entry) {
                        if (!$newMenu->get($entry . '_copy')) {
                            $this->copy($newMenu, $entry, $entry . '_copy', $menuForOrphans);
                        } elseif (strpos($entry, '::main') !== false) {
                            $this->copy($newMenu, $entry, $entry . '_sub_copy', $menuForOrphans);
                        }
                    }


                    // module config
                    if (!$menu->get($moduleName . '::configuration') && !$menu->get($moduleName . '::config')) {
                        $item = $this->menuItemFactory->create([
                            'data' => [
                                'parent_id' => $menuForOrphans,
                                'id' => $moduleName . '::configuration_generated',
                                'title' => __('Configuration')->getText(),
                                'resource' => $moduleName . '::configuration_generated',
                                'sort_index' => 1,
                                'action' => 'adminhtml/system_config/edit/section/' . $prefix . str_replace('wyomind_', '', strtolower($moduleName))
                            ]
                        ]);
                        $newMenu->add($item, $menuForOrphans, 1);
                    }

                    // user guide
                    if (!self::MARKETPLACE && isset($allExtensions['by_code'][strtoupper($module['code'])])) {
                        /** @var Menu\Item $item */
                        $item = $this->menuItemFactory->create([
                            'data' => [
                                'parent_id' => $menuForOrphans,
                                'id' => $moduleName . '::userguide_' . $module['code'],
                                'title' => __('User Guide')->getText(),
                                'target' => '_blank',
                                'resource' => $moduleName . '::userguide',
                                'action' => 'userguide',
                                'sort_index' => 999999
                            ]
                        ]);

                        $newMenu->add($item, $menuForOrphans, 999999);
                    }
                } catch (\Exception $e) {
                }
            }


            $modules = $main->getChildren();
            foreach ($modules as $moduleName) {
                $entries = $moduleName->getChildren();
                foreach ($entries as $entry) {
                    // assigning a sort_order for entry not having one
                    $subEntries = $entry->getChildren();
                    foreach ($subEntries as $subEntry) {
                        if ($subEntry->toArray()['sort_index'] == null) {
                            $data = $subEntry->toArray();
                            $data['sort_index'] = 2;
                            $subEntry->populateFromArray($data);
                        }
                        //$subEntry->setTitle($subEntry->getTitle() . ' [' . $subEntry->toArray()['sort_index'] . ']');
                    }

                    // reodering module entries
                    $backup = [];
                    foreach ($entry->toArray()['sub_menu'] as $key => $subEntry) {
                        $newMenu->remove($subEntry['id']);
                        $subEntry['parent_id'] = $entry->getId();
                        $subEntry['id'] .= "_sorted";
                        $backup[] = $subEntry;
                    }
                    uasort($backup, function ($a, $b) {
                        return $a['sort_index'] < $b['sort_index'] ? 1 : -1;
                    });
                    foreach ($backup as $newEntry) {
                        $item = $this->menuItemFactory->create(['data' => $newEntry]);
                        $newMenu->add($item, $newEntry['parent_id'], $newEntry['sort_index']);
                    }
                }
            }

            if ($discover = $menu->get('Wyomind_Framework::discover')) {
                $position = 0;

                $keys = array_keys($allExtensions);
                shuffle($keys);
                $random = [];
                foreach ($keys as $key) {
                    $random[$key] = $allExtensions[$key];
                }

                foreach ($random as $groupTitle => $modules) {
                    if ($groupTitle == "by_code") {
                        continue;
                    }
                    $item = $this->menuItemFactory->create([
                        'data' => [
                            'parent_id' => $discover->getId(),
                            'id' => 'Wyomind_Framework::discover_group_' . $position,
                            'title' => $groupTitle,
                            'resource' => 'Wyomind_Framework::discover_group_' . $position,
                            'sort_index' => $position
                        ]
                    ]);
                    $newMenu->add($item, $discover->getId(), $position);
                    $subPosition = 0;
                    foreach ($modules as $code => $data) {
                        if (!in_array($code, $installedModules) && isset($allExtensions['by_code'][$code])) {
                            $item = $this->menuItemFactory->create([
                                'data' => [
                                    'parent_id' => 'Wyomind_Framework::discover_group_' . $position,
                                    'id' => 'Wyomind_Framework::discover_' . $code,
                                    'title' => $data['name'],
                                    'resource' => 'Wyomind_Framework::discover_' . $code,
                                    'sort_index' => $subPosition,
                                    'target' => '_blank'

                                ]
                            ]);
                            $newMenu->add($item, 'Wyomind_Framework::discover_group_' . $position, $subPosition);

                            $subPosition++;
                        }
                    }

                    if ($subPosition == 0) { // no extension added for the group
                        $newMenu->remove($item->getId());
                    }

                    $position++;
                }
            }
        }

        return $newMenu;
    }
}

Spamworldpro Mini