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;
}
}