diff options
Diffstat (limited to 'includes/controller/shifts_controller.php')
-rw-r--r-- | includes/controller/shifts_controller.php | 401 |
1 files changed, 205 insertions, 196 deletions
diff --git a/includes/controller/shifts_controller.php b/includes/controller/shifts_controller.php index 9ac8a766..69d0de1f 100644 --- a/includes/controller/shifts_controller.php +++ b/includes/controller/shifts_controller.php @@ -1,136 +1,140 @@ <?php use Engelsystem\ShiftSignupState; -function shift_link($shift) { - return page_link_to('shifts') . '&action=view&shift_id=' . $shift['SID']; +function shift_link($shift) +{ + return page_link_to('shifts') . '&action=view&shift_id=' . $shift['SID']; } -function shift_delete_link($shift) { - return page_link_to('user_shifts') . '&delete_shift=' . $shift['SID']; +function shift_delete_link($shift) +{ + return page_link_to('user_shifts') . '&delete_shift=' . $shift['SID']; } -function shift_edit_link($shift) { - return page_link_to('user_shifts') . '&edit_shift=' . $shift['SID']; +function shift_edit_link($shift) +{ + return page_link_to('user_shifts') . '&edit_shift=' . $shift['SID']; } /** * Edit a single shift. */ -function shift_edit_controller() { - global $privileges; +function shift_edit_controller() +{ + global $privileges; // Schicht bearbeiten $msg = ""; - $valid = true; + $valid = true; - if (! in_array('admin_shifts', $privileges)) { - redirect(page_link_to('user_shifts')); - } + if (! in_array('admin_shifts', $privileges)) { + redirect(page_link_to('user_shifts')); + } - if (! isset($_REQUEST['edit_shift']) || ! test_request_int('edit_shift')) { - redirect(page_link_to('user_shifts')); - } - $shift_id = $_REQUEST['edit_shift']; + if (! isset($_REQUEST['edit_shift']) || ! test_request_int('edit_shift')) { + redirect(page_link_to('user_shifts')); + } + $shift_id = $_REQUEST['edit_shift']; - $shift = Shift($shift_id); + $shift = Shift($shift_id); - $room = select_array(Rooms(), 'RID', 'Name'); - $angeltypes = select_array(AngelTypes(), 'id', 'name'); - $shifttypes = select_array(ShiftTypes(), 'id', 'name'); + $room = select_array(Rooms(), 'RID', 'Name'); + $angeltypes = select_array(AngelTypes(), 'id', 'name'); + $shifttypes = select_array(ShiftTypes(), 'id', 'name'); - $needed_angel_types = select_array(NeededAngelTypes_by_shift($shift_id), 'id', 'count'); - foreach (array_keys($angeltypes) as $angeltype_id) { - if (! isset($needed_angel_types[$angeltype_id])) { - $needed_angel_types[$angeltype_id] = 0; + $needed_angel_types = select_array(NeededAngelTypes_by_shift($shift_id), 'id', 'count'); + foreach (array_keys($angeltypes) as $angeltype_id) { + if (! isset($needed_angel_types[$angeltype_id])) { + $needed_angel_types[$angeltype_id] = 0; + } } - } - $shifttype_id = $shift['shifttype_id']; - $title = $shift['title']; - $rid = $shift['RID']; - $start = $shift['start']; - $end = $shift['end']; + $shifttype_id = $shift['shifttype_id']; + $title = $shift['title']; + $rid = $shift['RID']; + $start = $shift['start']; + $end = $shift['end']; - if (isset($_REQUEST['submit'])) { - // Name/Bezeichnung der Schicht, darf leer sein + if (isset($_REQUEST['submit'])) { + // Name/Bezeichnung der Schicht, darf leer sein $title = strip_request_item('title'); // Auswahl der sichtbaren Locations für die Schichten if (isset($_REQUEST['rid']) && preg_match("/^[0-9]+$/", $_REQUEST['rid']) && isset($room[$_REQUEST['rid']])) { - $rid = $_REQUEST['rid']; + $rid = $_REQUEST['rid']; } else { - $valid = false; - $msg .= error(_("Please select a room."), true); + $valid = false; + $msg .= error(_("Please select a room."), true); } - if (isset($_REQUEST['shifttype_id']) && isset($shifttypes[$_REQUEST['shifttype_id']])) { - $shifttype_id = $_REQUEST['shifttype_id']; - } else { - $valid = false; - $msg .= error(_('Please select a shifttype.'), true); - } + if (isset($_REQUEST['shifttype_id']) && isset($shifttypes[$_REQUEST['shifttype_id']])) { + $shifttype_id = $_REQUEST['shifttype_id']; + } else { + $valid = false; + $msg .= error(_('Please select a shifttype.'), true); + } - if (isset($_REQUEST['start']) && $tmp = parse_date("Y-m-d H:i", $_REQUEST['start'])) { - $start = $tmp; - } else { - $valid = false; - $msg .= error(_("Please enter a valid starting time for the shifts."), true); - } + if (isset($_REQUEST['start']) && $tmp = parse_date("Y-m-d H:i", $_REQUEST['start'])) { + $start = $tmp; + } else { + $valid = false; + $msg .= error(_("Please enter a valid starting time for the shifts."), true); + } - if (isset($_REQUEST['end']) && $tmp = parse_date("Y-m-d H:i", $_REQUEST['end'])) { - $end = $tmp; - } else { - $valid = false; - $msg .= error(_("Please enter a valid ending time for the shifts."), true); - } + if (isset($_REQUEST['end']) && $tmp = parse_date("Y-m-d H:i", $_REQUEST['end'])) { + $end = $tmp; + } else { + $valid = false; + $msg .= error(_("Please enter a valid ending time for the shifts."), true); + } - if ($start >= $end) { - $valid = false; - $msg .= error(_("The ending time has to be after the starting time."), true); - } + if ($start >= $end) { + $valid = false; + $msg .= error(_("The ending time has to be after the starting time."), true); + } - foreach ($needed_angel_types as $needed_angeltype_id => $needed_angeltype_name) { - if (isset($_REQUEST['type_' . $needed_angeltype_id]) && test_request_int('type_' . $needed_angeltype_id)) { - $needed_angel_types[$needed_angeltype_id] = trim($_REQUEST['type_' . $needed_angeltype_id]); - } else { - $valid = false; - $msg .= error(sprintf(_("Please check your input for needed angels of type %s."), $needed_angeltype_name), true); - } - } + foreach ($needed_angel_types as $needed_angeltype_id => $needed_angeltype_name) { + if (isset($_REQUEST['type_' . $needed_angeltype_id]) && test_request_int('type_' . $needed_angeltype_id)) { + $needed_angel_types[$needed_angeltype_id] = trim($_REQUEST['type_' . $needed_angeltype_id]); + } else { + $valid = false; + $msg .= error(sprintf(_("Please check your input for needed angels of type %s."), $needed_angeltype_name), true); + } + } - if ($valid) { - $shift['shifttype_id'] = $shifttype_id; - $shift['title'] = $title; - $shift['RID'] = $rid; - $shift['start'] = $start; - $shift['end'] = $end; + if ($valid) { + $shift['shifttype_id'] = $shifttype_id; + $shift['title'] = $title; + $shift['RID'] = $rid; + $shift['start'] = $start; + $shift['end'] = $end; - $result = Shift_update($shift); - if ($result === false) { - engelsystem_error('Unable to update shift.'); - } - NeededAngelTypes_delete_by_shift($shift_id); - $needed_angel_types_info = []; - foreach ($needed_angel_types as $type_id => $count) { - NeededAngelType_add($shift_id, $type_id, null, $count); - $needed_angel_types_info[] = $angeltypes[$type_id] . ": " . $count; - } + $result = Shift_update($shift); + if ($result === false) { + engelsystem_error('Unable to update shift.'); + } + NeededAngelTypes_delete_by_shift($shift_id); + $needed_angel_types_info = []; + foreach ($needed_angel_types as $type_id => $count) { + NeededAngelType_add($shift_id, $type_id, null, $count); + $needed_angel_types_info[] = $angeltypes[$type_id] . ": " . $count; + } - engelsystem_log("Updated shift '" . $shifttypes[$shifttype_id] . ", " . $title . "' from " . date("Y-m-d H:i", $start) . " to " . date("Y-m-d H:i", $end) . " with angel types " . join(", ", $needed_angel_types_info)); - success(_("Shift updated.")); + engelsystem_log("Updated shift '" . $shifttypes[$shifttype_id] . ", " . $title . "' from " . date("Y-m-d H:i", $start) . " to " . date("Y-m-d H:i", $end) . " with angel types " . join(", ", $needed_angel_types_info)); + success(_("Shift updated.")); - redirect(shift_link([ - 'SID' => $shift_id + redirect(shift_link([ + 'SID' => $shift_id ])); + } } - } - $angel_types_spinner = ""; - foreach ($angeltypes as $angeltype_id => $angeltype_name) { - $angel_types_spinner .= form_spinner('type_' . $angeltype_id, $angeltype_name, $needed_angel_types[$angeltype_id]); - } + $angel_types_spinner = ""; + foreach ($angeltypes as $angeltype_id => $angeltype_name) { + $angel_types_spinner .= form_spinner('type_' . $angeltype_id, $angeltype_name, $needed_angel_types[$angeltype_id]); + } - return page_with_title(shifts_title(), [ + return page_with_title(shifts_title(), [ msg(), '<noscript>' . info(_("This page is much more comfortable with javascript."), true) . '</noscript>', form([ @@ -141,92 +145,95 @@ function shift_edit_controller() { form_text('end', _("End:"), date("Y-m-d H:i", $end)), '<h2>' . _("Needed angels") . '</h2>', $angel_types_spinner, - form_submit('submit', _("Save")) - ]) + form_submit('submit', _("Save")) + ]) ]); } -function shift_delete_controller() { - global $privileges; +function shift_delete_controller() +{ + global $privileges; - if (! in_array('user_shifts_admin', $privileges)) { - redirect(page_link_to('user_shifts')); - } + if (! in_array('user_shifts_admin', $privileges)) { + redirect(page_link_to('user_shifts')); + } // Schicht komplett löschen (nur für admins/user mit user_shifts_admin privileg) if (! isset($_REQUEST['delete_shift']) || ! preg_match("/^[0-9]*$/", $_REQUEST['delete_shift'])) { - redirect(page_link_to('user_shifts')); + redirect(page_link_to('user_shifts')); } - $shift_id = $_REQUEST['delete_shift']; + $shift_id = $_REQUEST['delete_shift']; - $shift = Shift($shift_id); - if ($shift == null) { - redirect(page_link_to('user_shifts')); - } + $shift = Shift($shift_id); + if ($shift == null) { + redirect(page_link_to('user_shifts')); + } // Schicht löschen bestätigt if (isset($_REQUEST['delete'])) { - Shift_delete($shift_id); + Shift_delete($shift_id); - engelsystem_log("Deleted shift " . $shift['name'] . " from " . date("Y-m-d H:i", $shift['start']) . " to " . date("Y-m-d H:i", $shift['end'])); - success(_("Shift deleted.")); - redirect(page_link_to('user_shifts')); + engelsystem_log("Deleted shift " . $shift['name'] . " from " . date("Y-m-d H:i", $shift['start']) . " to " . date("Y-m-d H:i", $shift['end'])); + success(_("Shift deleted.")); + redirect(page_link_to('user_shifts')); } - return page_with_title(shifts_title(), [ + return page_with_title(shifts_title(), [ error(sprintf(_("Do you want to delete the shift %s from %s to %s?"), $shift['name'], date("Y-m-d H:i", $shift['start']), date("H:i", $shift['end'])), true), - '<a class="button" href="?p=user_shifts&delete_shift=' . $shift_id . '&delete">' . _("delete") . '</a>' + '<a class="button" href="?p=user_shifts&delete_shift=' . $shift_id . '&delete">' . _("delete") . '</a>' ]); } -function shift_controller() { - global $user, $privileges; +function shift_controller() +{ + global $user, $privileges; - if (! in_array('user_shifts', $privileges)) { - redirect(page_link_to('?')); - } + if (! in_array('user_shifts', $privileges)) { + redirect(page_link_to('?')); + } - if (! isset($_REQUEST['shift_id'])) { - redirect(page_link_to('user_shifts')); - } + if (! isset($_REQUEST['shift_id'])) { + redirect(page_link_to('user_shifts')); + } - $shift = Shift($_REQUEST['shift_id']); - if ($shift == null) { - error(_("Shift could not be found.")); - redirect(page_link_to('user_shifts')); - } + $shift = Shift($_REQUEST['shift_id']); + if ($shift == null) { + error(_("Shift could not be found.")); + redirect(page_link_to('user_shifts')); + } - $shifttype = ShiftType($shift['shifttype_id']); - $room = Room($shift['RID']); - $angeltypes = AngelTypes(); - $user_shifts = Shifts_by_user($user); + $shifttype = ShiftType($shift['shifttype_id']); + $room = Room($shift['RID']); + $angeltypes = AngelTypes(); + $user_shifts = Shifts_by_user($user); - $shift_signup_state = new ShiftSignupState(ShiftSignupState::OCCUPIED, 0); - foreach ($angeltypes as &$angeltype) { - $needed_angeltype = NeededAngeltype_by_Shift_and_Angeltype($shift, $angeltype); - $shift_entries = ShiftEntries_by_shift_and_angeltype($shift['SID'], $angeltype['id']); + $shift_signup_state = new ShiftSignupState(ShiftSignupState::OCCUPIED, 0); + foreach ($angeltypes as &$angeltype) { + $needed_angeltype = NeededAngeltype_by_Shift_and_Angeltype($shift, $angeltype); + $shift_entries = ShiftEntries_by_shift_and_angeltype($shift['SID'], $angeltype['id']); - $angeltype_signup_state = Shift_signup_allowed($user, $shift, $angeltype, null, $user_shifts, $needed_angeltype, $shift_entries); - if ($shift_signup_state == null) { - $shift_signup_state = $angeltype_signup_state; - } else { - $shift_signup_state->combineWith($angeltype_signup_state); + $angeltype_signup_state = Shift_signup_allowed($user, $shift, $angeltype, null, $user_shifts, $needed_angeltype, $shift_entries); + if ($shift_signup_state == null) { + $shift_signup_state = $angeltype_signup_state; + } else { + $shift_signup_state->combineWith($angeltype_signup_state); + } + $angeltype['shift_signup_state'] = $angeltype_signup_state; } - $angeltype['shift_signup_state'] = $angeltype_signup_state; - } - return [ + return [ $shift['name'], - Shift_view($shift, $shifttype, $room, $angeltypes, $shift_signup_state) + Shift_view($shift, $shifttype, $room, $angeltypes, $shift_signup_state) ]; } -function shifts_controller() { - if (! isset($_REQUEST['action'])) { - redirect(page_link_to('user_shifts')); - } +function shifts_controller() +{ + if (! isset($_REQUEST['action'])) { + redirect(page_link_to('user_shifts')); + } - switch ($_REQUEST['action']) { + switch ($_REQUEST['action']) { default: redirect(page_link_to('?')); case 'view': @@ -239,86 +246,88 @@ function shifts_controller() { /** * Redirects the user to his next shift. */ -function shift_next_controller() { - global $user, $privileges; +function shift_next_controller() +{ + global $user, $privileges; - if (! in_array('user_shifts', $privileges)) { - redirect(page_link_to('?')); - } + if (! in_array('user_shifts', $privileges)) { + redirect(page_link_to('?')); + } - $upcoming_shifts = ShiftEntries_upcoming_for_user($user); - if ($upcoming_shifts === false) { - return false; - } + $upcoming_shifts = ShiftEntries_upcoming_for_user($user); + if ($upcoming_shifts === false) { + return false; + } - if (count($upcoming_shifts) > 0) { - redirect(shift_link($upcoming_shifts[0])); - } + if (count($upcoming_shifts) > 0) { + redirect(shift_link($upcoming_shifts[0])); + } - redirect(page_link_to('user_shifts')); + redirect(page_link_to('user_shifts')); } /** * Export all shifts using api-key. */ -function shifts_json_export_all_controller() { - global $api_key; +function shifts_json_export_all_controller() +{ + global $api_key; - if ($api_key == "") { - engelsystem_error("Config contains empty apikey."); - } + if ($api_key == "") { + engelsystem_error("Config contains empty apikey."); + } - if (! isset($_REQUEST['api_key'])) { - engelsystem_error("Missing parameter api_key."); - } + if (! isset($_REQUEST['api_key'])) { + engelsystem_error("Missing parameter api_key."); + } - if ($_REQUEST['api_key'] != $api_key) { - engelsystem_error("Invalid api_key."); - } + if ($_REQUEST['api_key'] != $api_key) { + engelsystem_error("Invalid api_key."); + } - $shifts_source = Shifts(); - if ($shifts_source === false) { - engelsystem_error("Unable to load shifts."); - } + $shifts_source = Shifts(); + if ($shifts_source === false) { + engelsystem_error("Unable to load shifts."); + } - header("Content-Type: application/json; charset=utf-8"); - raw_output(json_encode($shifts_source)); + header("Content-Type: application/json; charset=utf-8"); + raw_output(json_encode($shifts_source)); } /** * Export filtered shifts via JSON. * (Like iCal Export or shifts view) */ -function shifts_json_export_controller() { - global $user; +function shifts_json_export_controller() +{ + global $user; - if (! isset($_REQUEST['key']) || ! preg_match("/^[0-9a-f]{32}$/", $_REQUEST['key'])) { - engelsystem_error("Missing key."); - } + if (! isset($_REQUEST['key']) || ! preg_match("/^[0-9a-f]{32}$/", $_REQUEST['key'])) { + engelsystem_error("Missing key."); + } - $key = $_REQUEST['key']; + $key = $_REQUEST['key']; - $user = User_by_api_key($key); - if ($user == null) { - engelsystem_error("Key invalid."); - } - if (! in_array('shifts_json_export', privileges_for_user($user['UID']))) { - engelsystem_error("No privilege for shifts_json_export."); - } + $user = User_by_api_key($key); + if ($user == null) { + engelsystem_error("Key invalid."); + } + if (! in_array('shifts_json_export', privileges_for_user($user['UID']))) { + engelsystem_error("No privilege for shifts_json_export."); + } - $shifts = load_ical_shifts(); + $shifts = load_ical_shifts(); - header("Content-Type: application/json; charset=utf-8"); - raw_output(json_encode($shifts)); + header("Content-Type: application/json; charset=utf-8"); + raw_output(json_encode($shifts)); } /** * Returns users shifts to export. */ -function load_ical_shifts() { - global $user; +function load_ical_shifts() +{ + global $user; - return Shifts_by_user($user); + return Shifts_by_user($user); } - -?>
\ No newline at end of file |