File: D:/HostingSpaces/Neopoints/momsecurity.be/app/Composers/SidebarMenuComposer.php
<?php namespace App\Composers;
use App\Buttons\Models\Button;
use App\WebsiteConfig\Model\WebsiteConfig;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Auth;
use Komma\KMS\ActionLog\Models\ActionLog;
use Komma\KMS\Menu\KmsMenuItem;
use Komma\KMS\Sites\Models\Site;
use Komma\KMS\Sites\SiteServiceInterface;
use Komma\KMS\Users\Models\KmsUser;
class SidebarMenuComposer
{
private SiteServiceInterface $siteService;
public function __construct()
{
$this->siteService = app(SiteServiceInterface::class);
}
public function compose($view)
{
$kmsMenu = collect();
$kmsMenu->push((new KmsMenuItem())
->setName(__('KMS::sidebarMenu.welcome'))
->setUrl(route('dashboard.index'))
->setModelSlug('dashboard'));
// If we have multiple site load get the siteMenus, else add the items directly
if(config('app.multipleSites')) $kmsMenu = $kmsMenu->merge($this->getSiteMenus());
else $kmsMenu = $kmsMenu->merge($this->getSiteSubItems($this->siteService->getSite()));
$kmsMenu->push((new KmsMenuItem())
->setModelSlug('services')
->setUrl(route('services.index'))
->setName(__('KMS::sidebarMenu.services')));
$kmsMenu->push((new KmsMenuItem())
->setName('Blog')
->setSubItems(collect([
(new KmsMenuItem())
->setModelSlug('post_labels')
->setUrl(route('post_labels.index'))
->setName(__('KMS::sidebarMenu.post_labels')),
(new KmsMenuItem())
->setModelSlug('posts')
->setUrl(route('posts.index'))
->setName(__('KMS::sidebarMenu.posts')),
])));
$kmsMenu->push((new KmsMenuItem())
->setName(__('KMS::sidebarMenu.questions_group'))
->setSubItems(collect([
(new KmsMenuItem())
->setModelSlug('questions')
->setUrl(route('questions.index'))
->setName(__('KMS::sidebarMenu.questions')),
(new KmsMenuItem())
->setModelSlug('question_categories')
->setUrl(route('question_categories.index'))
->setName(__('KMS::sidebarMenu.question_categories'))
]))
);
$kmsMenu->push((new KmsMenuItem())
->setModelSlug('testimonials')
->setUrl(route('testimonials.index'))
->setName(__('KMS::sidebarMenu.testimonials')));
$kmsMenu->push((new KmsMenuItem())
->setIsSeparator(true));
if(Auth::user()->can('index', WebsiteConfig::class)) {
$kmsMenu->push((new KmsMenuItem())
->setModelSlug('websiteconfig')
->setUrl(route('websiteconfig.index'))
->setName(__('KMS::sidebarMenu.websiteconfig')));
}
$kmsMenu->push(((new KmsMenuItem))
->setName(__('KMS::sidebarMenu.kms_users'))
->setUrl(route('kms_users.index'))
->setModelSlug('kms_users'));
// if (Auth::user() && Auth::user('kms')->can('editSites', KmsUser::class)) {
// $kmsMenu->push((new KmsMenuItem())->setName(__('KMS::sidebarMenu.sites'))
// ->setUrl(route('sites.index'))
// ->setModelSlug('sites'));
// }
if (Auth::user() && Auth::user('kms')->can('viewLogs', ActionLog::class)) {
$kmsMenu->push((new KmsMenuItem())->setName(__('KMS::actionlog.section.title'))
->setUrl(route('actionlog.index'))
->setModelSlug('actionlog'));
}
$view->with('kmsMenu', $kmsMenu);
}
/**
* Get the site menus
*
* @return Collection
*/
private function getSiteMenus(): Collection
{
$sites = $this->siteService->getSites();
// Else we create a site menu for each site
$siteMenus = collect();
/** @var Site $site */
foreach ($sites as $site) {
if(!$site->exists) continue;
$siteMenus->push((new KmsMenuItem())
->setName($site->name)
->setSubItems($this->getSiteSubItems($site)));
}
return $siteMenus;
}
/**
* This will return the site specific items
*
* @param Site $site
* @return Collection
*/
private function getSiteSubItems(Site $site): Collection
{
$siteMenuItems = collect();
$siteMenuItems->push((new KmsMenuItem())
->setName(__('KMS::sidebarMenu.pages'))
->setUrl(route('pages.index', ['siteSlug' => $site->slug]))
->setModelSlug('pages')
->setSiteSlug($site->slug));
return $siteMenuItems;
}
}