summaryrefslogtreecommitdiff
path: root/includes/controller/rooms_controller.php
blob: 3082a28d7ef2370df75795a3a5660f741a7003f7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
<?php
use Engelsystem\ShiftsFilter;
use Engelsystem\ShiftsFilterRenderer;

/**
 * Room controllers for managing everything room related.
 */

/**
 * View a room with its shifts.
 *
 * @return array
 */
function room_controller()
{
    global $privileges;

    if (!in_array('view_rooms', $privileges)) {
        redirect(page_link_to());
    }

    $room = load_room(false);
    if ($room['show'] != 'Y' && !in_array('admin_rooms', $privileges)) {
        redirect(page_link_to());
    }

    $all_shifts = Shifts_by_room($room);
    $days = [];
    foreach ($all_shifts as $shift) {
        $day = date('Y-m-d', $shift['start']);
        if (!in_array($day, $days)) {
            $days[] = $day;
        }
    }

    $shiftsFilter = new ShiftsFilter(
        true,
        [$room['RID']],
        AngelType_ids()
    );
    $selected_day = date('Y-m-d');
    if (!empty($days)) {
        $selected_day = $days[0];
    }
    if (isset($_REQUEST['shifts_filter_day'])) {
        $selected_day = $_REQUEST['shifts_filter_day'];
    }
    $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'));

    $shiftsFilterRenderer = new ShiftsFilterRenderer($shiftsFilter);
    $shiftsFilterRenderer->enableDaySelection($days);

    $shiftCalendarRenderer = shiftCalendarRendererByShiftFilter($shiftsFilter);

    return [
        $room['Name'],
        Room_view($room, $shiftsFilterRenderer, $shiftCalendarRenderer)
    ];
}

/**
 * Dispatch different room actions.
 *
 * @return array
 */
function rooms_controller()
{
    if (!isset($_REQUEST['action'])) {
        $_REQUEST['action'] = 'list';
    }

    switch ($_REQUEST['action']) {
        case 'view':
            return room_controller();
        case 'list':
        default:
            redirect(page_link_to('admin_rooms'));
            break;
    }

    exit;
}

/**
 * @param array $room
 * @return string
 */
function room_link($room)
{
    return page_link_to('rooms') . '&action=view&room_id=' . $room['RID'];
}

/**
 * @param array $room
 * @return string
 */
function room_edit_link($room)
{
    return page_link_to('admin_rooms') . '&show=edit&id=' . $room['RID'];
}

/**
 * Loads room by request param room_id
 *
 * @param bool $onlyVisible
 * @return array
 */
function load_room($onlyVisible = true)
{
    if (!test_request_int('room_id')) {
        redirect(page_link_to());
    }

    $room = Room($_REQUEST['room_id'], $onlyVisible);
    if ($room == null) {
        redirect(page_link_to());
    }

    return $room;
}