HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/SBogers10/wingssprayer.komma.pro/app/Composers/NavigationViewComposer.php
<?php declare(strict_types=1);


namespace App\Composers;

use App\Http\Middleware\WildcardResolver;
use App\Pages\Models\Page;
use Illuminate\View\View;

class NavigationViewComposer
{
    /**
     * NavigationViewComposer constructor.
     */
    public function __construct()
    {

    }

    /**
     * Bind data to the view.
     *
     * @param View $view
     * @return void
     */
    public function compose(View $view)
    {
        $viewData = $view->getData();
        /** @var Page $page */
        $page = isset($viewData['page']) ? $viewData['page'] : null;
        $siteNavigationConfig = config('site.navigation');

        if(isset($page->code_name)){
            foreach ($siteNavigationConfig as $menuItemName => $menuItemData) {
                $siteNavigationConfig[$menuItemName] = $this->checkIfActive($menuItemName, $menuItemData, $page->code_name);
            }
        }


        $view->with('siteNavigationConfig', $siteNavigationConfig);
        $view->with('productWildcardIndexRoute', WildcardResolver::getWildCardIndexRouteForPageWithCodeName('products'));
    }


    public function checkIfActive(string $currentMenuItemName, array $itemData, string $currentPageCodeName, &$hasActiveSubItems = false)
    {
        if (isset($itemData['subItems']) && count($itemData['subItems']) > 0) {
            foreach ($itemData['subItems'] as $subMenuItemName => $subItemData) {
                $itemData['subItems'][$subMenuItemName] = $this->checkIfActive($subMenuItemName, $subItemData, $currentPageCodeName, $hasActiveSubItems);
            }
        }

        if ($currentMenuItemName == $currentPageCodeName || $this->hasActiveSubItems($itemData)) $itemData['active'] = true;
        return $itemData;
    }


    public function hasActiveSubItems(array $itemData)
    {
        if($itemData['active'] == true) return true;

        if (isset($itemData['subItems']) && count($itemData['subItems']) > 0) {
            foreach ($itemData['subItems'] as $subMenuItemName => $subItemData) {
                $hasActiveSubItems = $this->hasActiveSubItems($subItemData);
                if($hasActiveSubItems) return true;
            }
        }
        return false;
    }
}