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/beat-the-barn.komma.nl/app/Composers/SidebarMenuComposer.php
<?php namespace App\Composers;

use App\Buttons\Models\Button;
use App\Servicepoints\Models\Servicepoint;
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()));

        //Create regular menu items.

        $kmsMenu->push((new KmsMenuItem())
            ->setName('Blog')
            ->setSubItems(collect([
                (new KmsMenuItem())
                    ->setModelSlug('posts')
                    ->setUrl(route('posts.index'))
                    ->setName(__('KMS::sidebarMenu.posts')),
                (new KmsMenuItem())
                    ->setModelSlug('authors')
                    ->setUrl(route('authors.index'))
                    ->setName(__('KMS::sidebarMenu.authors')),
            ]))
        );


        $kmsMenu->push((new KmsMenuItem())
            ->setModelSlug('services')
            ->setUrl(route('services.index'))
            ->setName(__('KMS::sidebarMenu.services')));

        $kmsMenu->push((new KmsMenuItem())
            ->setModelSlug('projects')
            ->setUrl(route('projects.index'))
            ->setName(__('KMS::sidebarMenu.projects')));

        $kmsMenu->push((new KmsMenuItem())
            ->setModelSlug('dcv_arrangements')
            ->setUrl(route('dcv_arrangements.index'))
            ->setName(__('KMS::sidebarMenu.dcv_arrangements')));

        $kmsMenu->push((new KmsMenuItem())
            ->setName(__('KMS::sidebarMenu.facilities'))
            ->setSubItems(collect([
                (new KmsMenuItem())
                    ->setModelSlug('meals')
                    ->setUrl(route('meals.index'))
                    ->setName(__('KMS::sidebarMenu.meals')),
                (new KmsMenuItem())
                    ->setModelSlug('overnights')
                    ->setUrl(route('overnights.index'))
                    ->setName(__('KMS::sidebarMenu.overnights')),
            ]))
        );

        $kmsMenu->push((new KmsMenuItem())
            ->setModelSlug('testimonials')
            ->setUrl(route('testimonials.index'))
            ->setName(__('KMS::sidebarMenu.testimonials')));

        $kmsMenu->push((new KmsMenuItem())
            ->setModelSlug('partners')
            ->setUrl(route('partners.index'))
            ->setName(__('KMS::sidebarMenu.partners')));

        $kmsMenu->push((new KmsMenuItem())
            ->setModelSlug('team_members')
            ->setUrl(route('team_members.index'))
            ->setName(__('KMS::sidebarMenu.team_members')));

        $kmsMenu->push((new KmsMenuItem())
            ->setModelSlug('vacancies')
            ->setUrl(route('vacancies.index'))
            ->setName(__('KMS::sidebarMenu.vacancies')));

        $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())
            ->setIsSeparator(true));

        if(Auth::user()->can('index', WebsiteConfig::class)) {
            $kmsMenu->push((new KmsMenuItem())
                ->setModelSlug('websiteconfig')
                ->setUrl(route('websiteconfig.index'))
                ->setName(__('KMS::sidebarMenu.websiteconfig')));
        }

        if (Auth::user()->can('index', Button::class)) {
            $kmsMenu->push((new KmsMenuItem())
                ->setModelSlug('buttons')
                ->setUrl(route('buttons.index'))
                ->setName(__('KMS::sidebarMenu.buttons')));
        }

        if (Auth::user()->can('index', Servicepoint::class)) {
            $kmsMenu->push((new KmsMenuItem())
                ->setModelSlug('servicepoints')
                ->setUrl(route('servicepoints.index'))
                ->setName(__('KMS::sidebarMenu.servicepoints')));
        }

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