File: D:/HostingSpaces/SBogers47/leden.ehbocranendonck.nl/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\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;
public function __construct(CourseService $courseService)
{
$this->courseService = $courseService;
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 personal(Request $request)
{
$role = \Auth::user()->mostPrivilegedRole();
if($role && $role->value == Roles::CheckInScreenMember) {
return redirect(route('dashboard.courses'));
}
return view('site.pages.home');
}
}