'view']; if (isset($shift['SID'])) { $parameters['shift_id'] = $shift['SID']; } return page_link_to('shifts', $parameters); } /** * @param array $shift * @return string */ function shift_delete_link($shift) { return page_link_to('user_shifts', ['delete_shift' => $shift['SID']]); } /** * @param array $shift * @return string */ function shift_edit_link($shift) { return page_link_to('user_shifts', ['edit_shift' => $shift['SID']]); } /** * Edit a single shift. * * @return string */ function shift_edit_controller() { $valid = true; $request = request(); if (!auth()->can('admin_shifts')) { throw_redirect(page_link_to('user_shifts')); } if (!$request->has('edit_shift') || !test_request_int('edit_shift')) { throw_redirect(page_link_to('user_shifts')); } $shift_id = $request->input('edit_shift'); $shift = Shift($shift_id); if (ScheduleShift::whereShiftId($shift['SID'])->first()) { warning(__( 'This shift was imported from a schedule so some changes will be overwritten with the next import.' )); } $rooms = []; foreach (Rooms() as $room) { $rooms[$room->id] = $room->name; } $angeltypes = select_array(AngelTypes(), 'id', 'name'); $shifttypes = select_array(ShiftType::all(), 'id', 'name'); $needed_angel_types = select_array( NeededAngelTypes_by_shift($shift_id), 'angel_type_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']; $description = $shift['description']; $rid = $shift['RID']; $start = $shift['start']; $end = $shift['end']; if ($request->hasPostData('submit')) { // Name/Bezeichnung der Schicht, darf leer sein $title = strip_request_item('title'); $description = strip_request_item_nl('description'); // Auswahl der sichtbaren Locations für die Schichten if ( $request->has('rid') && preg_match('/^\d+$/', $request->input('rid')) && isset($rooms[$request->input('rid')]) ) { $rid = $request->input('rid'); } else { $valid = false; error(__('Please select a room.'), true); } if ($request->has('shifttype_id') && isset($shifttypes[$request->input('shifttype_id')])) { $shifttype_id = $request->input('shifttype_id'); } else { $valid = false; error(__('Please select a shifttype.'), true); } if ($request->has('start') && $tmp = parse_date('Y-m-d H:i', $request->input('start'))) { $start = $tmp; } else { $valid = false; error(__('Please enter a valid starting time for the shifts.'), true); } if ($request->has('end') && $tmp = parse_date('Y-m-d H:i', $request->input('end'))) { $end = $tmp; } else { $valid = false; error(__('Please enter a valid ending time for the shifts.'), true); } if ($start >= $end) { $valid = false; error(__('The ending time has to be after the starting time.'), true); } foreach ($needed_angel_types as $needed_angeltype_id => $count) { $needed_angel_types[$needed_angeltype_id] = 0; $queryKey = 'type_' . $needed_angeltype_id; if ($request->has($queryKey)) { if (test_request_int($queryKey)) { $needed_angel_types[$needed_angeltype_id] = trim($request->input($queryKey)); } else { $valid = false; error(sprintf( __('Please check your input for needed angels of type %s.'), $angeltypes[$needed_angeltype_id] ), true); } } } if ($valid) { $shift['shifttype_id'] = $shifttype_id; $shift['title'] = $title; $shift['description'] = $description; $shift['RID'] = $rid; $shift['start'] = $start; $shift['end'] = $end; Shift_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); if ($count > 0) { $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) . ' and description ' . $description ); success(__('Shift updated.')); throw_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] ); } return page_with_title( shifts_title(), [ msg(), '', form([ form_select('shifttype_id', __('Shifttype'), $shifttypes, $shifttype_id), form_text('title', __('Title'), $title), form_select('rid', __('Room:'), $rooms, $rid), form_text('start', __('Start:'), date('Y-m-d H:i', $start)), form_text('end', __('End:'), date('Y-m-d H:i', $end)), form_textarea('description', __('Additional description'), $description), form_info('', __('This description is for single shifts, otherwise please use the description in shift type.')), '