You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

111 lines
2.3 KiB
PHTML

<?php
4 years ago
use Engelsystem\Models\Room;
use Engelsystem\ShiftsFilter;
8 years ago
use Engelsystem\ShiftsFilterRenderer;
/**
* Room controllers for managing everything room related.
*/
/**
* View a room with its shifts.
*
* @return array
*/
function room_controller(): array
8 years ago
{
if (!auth()->can('view_rooms')) {
throw_redirect(page_link_to());
8 years ago
}
8 years ago
$request = request();
$room = load_room();
8 years ago
$all_shifts = Shifts_by_room($room);
$days = [];
foreach ($all_shifts as $shift) {
$day = date('Y-m-d', $shift['start']);
8 years ago
if (!in_array($day, $days)) {
8 years ago
$days[] = $day;
}
}
8 years ago
$shiftsFilter = new ShiftsFilter(
true,
4 years ago
[$room->id],
8 years ago
AngelType_ids()
);
$selected_day = date('Y-m-d');
if (!empty($days) && !in_array($selected_day, $days)) {
8 years ago
$selected_day = $days[0];
}
if ($request->has('shifts_filter_day')) {
$selected_day = $request->input('shifts_filter_day');
8 years ago
}
$shiftsFilter->setStartTime(parse_date('Y-m-d H:i', $selected_day . ' 00:00'));
$shiftsFilter->setEndTime(parse_date('Y-m-d H:i', $selected_day . ' 23:59'));
8 years ago
8 years ago
$shiftsFilterRenderer = new ShiftsFilterRenderer($shiftsFilter);
$shiftsFilterRenderer->enableDaySelection($days);
8 years ago
8 years ago
$shiftCalendarRenderer = shiftCalendarRendererByShiftFilter($shiftsFilter);
8 years ago
8 years ago
return [
4 years ago
$room->name,
8 years ago
Room_view($room, $shiftsFilterRenderer, $shiftCalendarRenderer)
];
}
/**
* Dispatch different room actions.
*
* @return array
*/
function rooms_controller(): array
8 years ago
{
$request = request();
$action = $request->input('action');
if (!$request->has('action')) {
$action = 'list';
8 years ago
}
8 years ago
switch ($action) {
8 years ago
case 'view':
return room_controller();
case 'list':
default:
throw_redirect(page_link_to('admin_rooms'));
8 years ago
}
return ['', ''];
}
/**
4 years ago
* @param Room $room
* @return string
*/
4 years ago
function room_link(Room $room)
8 years ago
{
4 years ago
return page_link_to('rooms', ['action' => 'view', 'room_id' => $room->id]);
}
/**
* Loads room by request param room_id
*
4 years ago
* @return Room
*/
function load_room()
8 years ago
{
8 years ago
if (!test_request_int('room_id')) {
throw_redirect(page_link_to());
8 years ago
}
8 years ago
4 years ago
$room = Room::find(request()->input('room_id'));
if (!$room) {
throw_redirect(page_link_to());
8 years ago
}
8 years ago
8 years ago
return $room;
}