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/ehbo.today/app/KommaApp/Dashboard/DashboardController.php
<?php


namespace App\KommaApp\Dashboard;


use App\Http\Controllers\Controller;
use App\KommaApp\Competences\Models\Competence;
use App\KommaApp\Courses\Kms\CourseService;
use App\KommaApp\Courses\Models\Course;
use App\KommaApp\Events\Kms\EventService;
use App\KommaApp\Forms\Models\Request;
use App\KommaApp\Pages\Models\Page;
use App\KommaApp\Users\Models\Role;
use App\KommaApp\Users\Roles;

class DashboardController extends Controller
{
    /**
     * @var CourseService
     */
    private $courseService;
    private $eventService;

    public function __construct(CourseService $courseService, EventService $eventService)
    {
        $this->courseService = $courseService;
        $this->eventService = $eventService;
        parent::__construct();
    }

    /**
     * Show courses
     *
     * @param Request $request
     * @param string $filter
     * @param int $competenceId
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function courses(Request $request, string $filter = null, int $competenceId = null)
    {
        //Only allow competence filtering for the recommended courses
//        if ($filter !== strtolower(__('kms/courses.filter.' . Course::FilterRecommended)) && $competenceId !== null) {
//            $filter = strtolower(__('kms/courses.filter.' . Course::FilterRecommended));
//        }

        //Determine wheter or not to show the presence manager
        /** @var Role $role */
        $role = \Auth::user()->mostPrivilegedRole();
        $showPresenceManager = ($role && $role->value == Roles::CheckInScreenMember) ? true : false;

        setlocale(LC_TIME, 'nl_NL.utf8');
        setlocale(LC_TIME, 'Dutch');

        //Get all competences to include in the course competences we return
        $missing_competences = $this->courseService->getMissingCompetences(\Auth::user());
        $expired_competences = $this->courseService->getExpiredCompetences(\Auth::user());
        $almost_expired_competences = $this->courseService->getAlmostExpiredCompetences(\Auth::user());
        $valid_competences = $this->courseService->getValidCompetences(\Auth::user());

        //Merge them together in a new collection
        $all_competences = collect();
        $all_competences = $all_competences->merge($valid_competences);
        $all_competences = $all_competences->merge($almost_expired_competences);
        $all_competences = $all_competences->merge($expired_competences);
        $all_competences = $all_competences->merge($missing_competences);

        $all_competences = $this->courseService->includeUserCompetenceStatusesForCompetences($all_competences,
            \Auth::user());

        switch ($filter) {
            case strtolower(__('kms/courses.filter.' . Course::FilterSubscribed)):
                $courses = $this->courseService->subscribedCourses(\Auth::user());
                break;
            case strtolower(__('kms/courses.filter.' . Course::FilterCompleted)):
                $courses = $this->courseService->completedCourses(\Auth::user());
                break;
            case strtolower(__('kms/courses.filter.' . Course::FilterRecommended)):
                $courses = $this->courseService->recommendedCourses(\Auth::user());
                break;
            case strtolower(__('kms/courses.filter.' . Course::FilterAll)):
            default:
                $filter = strtolower(__('kms/courses.filter.' . Course::FilterAll));
                $courses = Course::whereDate('date', '>=', \Carbon\Carbon::now()->startOfDay())->orderBy('date')->get();
                break;
        }

        //Only show courses which have the specified competence id
        if ($competenceId) {
            $competence = Competence::find($competenceId);
            if ($competence) {
                $courses = $courses->filter(function (Course $course) use ($competence) {
                    return $course->competences->contains($competence);
                });
            }
        }

//        $general_notice = '';
//        $general_notice_page = Page::find(2);
//        if($general_notice_page->active && !empty($general_notice_page->general_notice)) {
//            $general_notice = $general_notice_page->general_notice;
//        }

        $data = [
            'show_presence_manager_link' => $showPresenceManager,
            'recommended_courses' => $this->courseService->recommendedCourses(\Auth::user()),
            'courses' => $this->courseService->includeUserCompetenceStatusesForCourses($courses, \Auth::user()),
            'subscribed_courses' => $this->courseService->subscribedCourses(\Auth::user()),
            'completed_courses' => $this->courseService->completedCourses(\Auth::user()),
            'all_competences' => $all_competences->sortBy(
                function (Competence $competence) {
                    return $competence::sortOrder[$competence->authUserCompetenceStatus];
                })->sortBy(
                function (Competence $competence) {
                    return $competence->translation->name;
                }, SORT_NUMERIC)->all(),
            'filter' => $filter,
            'links' => $this->links,
            'competence_id_filter' => $competenceId,
            'competence_filter' => $competenceId ? $competence->load('translation') : null,
//            'general_notice' => $general_notice
        ];

        return view('site.pages.courses')->with($data);
    }

    /**
     * Show the authenticated users data
     *
     * @param Request $request
     * @param string $filter
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function events(Request $request, string $filter = null)
    {
        $role = \Auth::user()->mostPrivilegedRole();
        if ($role && $role->value == Roles::CheckInScreenMember) {
            return redirect(route('dashboard.courses'));
        }
        $events = $this->eventService->getAllEvents();

        switch ($filter) {
            case strtolower(__('kms/courses.filter.' . Course::FilterSubscribed)):
                $events = $this->eventService->subscribedEvents(\Auth::user());
                break;
            case strtolower(__('kms/courses.filter.' . Course::FilterCompleted)):
                $events = $this->eventService->completedEvents(\Auth::user());
                break;
            case strtolower(__('kms/courses.filter.' . Course::FilterAll)):
            default:
                $filter = strtolower(__('kms/courses.filter.' . Course::FilterAll));
                break;
        }

        $data = [
            'events' => $events,
            'filter' => $filter,
        ];

        return view('site.pages.events')->with($data);
    }

    /**
     * Show the authenticated users data
     *
     * @param Request $request
     * @param string $filter
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function competences(Request $request, string $filter = null)
    {
        //Get all competences to include in the course competences we return
        $missing_competences = $this->courseService->getMissingCompetences(\Auth::user());
        $expired_competences = $this->courseService->getExpiredCompetences(\Auth::user());
        $almost_expired_competences = $this->courseService->getAlmostExpiredCompetences(\Auth::user());
        $valid_competences = $this->courseService->getValidCompetences(\Auth::user());

        //Merge them together in a new collection
        $all_competences = collect();

        $role = \Auth::user()->mostPrivilegedRole();
        if ($role && $role->value == Roles::CheckInScreenMember) {
            return redirect(route('dashboard.courses'));
        }

        switch ($filter) {
            case strtolower(__('kms/competences.' . Competence::StatusAlmostExpired)):
                $all_competences = $almost_expired_competences;
                break;
            case strtolower(__('kms/competences.' . Competence::StatusExpired)):
                $all_competences = $almost_expired_competences;
                break;
            case strtolower(__('kms/competences.' . Course::FilterRecommended)):
                $all_competences = $almost_expired_competences;
                break;
            case strtolower(__('kms/courses.filter.' . Course::FilterAll)):
            default:
                $filter = strtolower(__('kms/courses.filter.' . Course::FilterAll));
                $all_competences = $all_competences->merge($valid_competences);
                $all_competences = $all_competences->merge($almost_expired_competences);
                $all_competences = $all_competences->merge($expired_competences);
                $all_competences = $all_competences->merge($missing_competences);
                break;
        }
        $all_competences = $this->courseService->includeUserCompetenceStatusesForCompetences($all_competences,
            \Auth::user());

        return view('site.pages.competences')->with([
                'filter' => $filter,
                'all_competences' => $all_competences->sortBy(
                    function (Competence $competence) {
                        return $competence::sortOrder[$competence->authUserCompetenceStatus];
                    })->sortBy(
                    function (Competence $competence) {
                        return $competence->translation->name;
                    }, SORT_NUMERIC)->all(),
            ]
        );
    }

    /**
     * Show the authenticated users data
     *
     * @param Request $request
     * @param string $filter
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function personal(Request $request)
    {
        $role = \Auth::user()->mostPrivilegedRole();
        if ($role && $role->value == Roles::CheckInScreenMember) {
            return redirect(route('dashboard.courses'));
        }

        return view('site.pages.personal');
    }
}