diff options
Diffstat (limited to 'includes/controller/angeltypes_controller.php')
-rw-r--r-- | includes/controller/angeltypes_controller.php | 469 |
1 files changed, 300 insertions, 169 deletions
diff --git a/includes/controller/angeltypes_controller.php b/includes/controller/angeltypes_controller.php index cd2aa3e4..a47c1340 100644 --- a/includes/controller/angeltypes_controller.php +++ b/includes/controller/angeltypes_controller.php @@ -1,226 +1,357 @@ <?php +use Engelsystem\ShiftsFilter; +use Engelsystem\ShiftsFilterRenderer; /** * Text for Angeltype related links. + * + * @return string */ -function angeltypes_title() { - return _("Angeltypes"); +function angeltypes_title() +{ + return _('Angeltypes'); } /** * Route angeltype actions. + * + * @return array */ -function angeltypes_controller() { - $action = strip_request_item('action', 'list'); - - switch ($action) { - default: - case 'list': - return angeltypes_list_controller(); - case 'view': - return angeltype_controller(); - case 'edit': - return angeltype_edit_controller(); - case 'delete': - return angeltype_delete_controller(); - case 'about': - return angeltypes_about_controller(); - } +function angeltypes_controller() +{ + $action = strip_request_item('action', 'list'); + + switch ($action) { + case 'view': + return angeltype_controller(); + case 'edit': + return angeltype_edit_controller(); + case 'delete': + return angeltype_delete_controller(); + case 'about': + return angeltypes_about_controller(); + case 'list': + default: + return angeltypes_list_controller(); + } } /** * Path to angeltype view. * - * @param AngelType $angeltype_id + * @param int $angeltype_id AngelType id + * @return string */ -function angeltype_link($angeltype_id) { - return page_link_to('angeltypes') . '&action=view&angeltype_id=' . $angeltype_id; +function angeltype_link($angeltype_id) +{ + return page_link_to('angeltypes', ['action' => 'view', 'angeltype_id' => $angeltype_id]); } /** * Job description for all angeltypes (public to everyone) + * + * @return array */ -function angeltypes_about_controller() { - global $user; - - if (isset($user)) { - $angeltypes = AngelTypes_with_user($user); - } else { - $angeltypes = AngelTypes(); - } - - return [ - _("Teams/Job description"), - AngelTypes_about_view($angeltypes, isset($user)) - ]; +function angeltypes_about_controller() +{ + global $user; + + if (isset($user)) { + $angeltypes = AngelTypes_with_user($user); + } else { + $angeltypes = AngelTypes(); + } + + return [ + _('Teams/Job description'), + AngelTypes_about_view($angeltypes, isset($user)) + ]; } /** * Delete an Angeltype. + * + * @return array */ -function angeltype_delete_controller() { - global $privileges; - - if (! in_array('admin_angel_types', $privileges)) { - redirect(page_link_to('angeltypes')); - } - - $angeltype = load_angeltype(); - - if (isset($_REQUEST['confirmed'])) { - AngelType_delete($angeltype); - success(sprintf(_("Angeltype %s deleted."), AngelType_name_render($angeltype))); - redirect(page_link_to('angeltypes')); - } - - return [ - sprintf(_("Delete angeltype %s"), $angeltype['name']), - AngelType_delete_view($angeltype) - ]; +function angeltype_delete_controller() +{ + global $privileges; + + if (!in_array('admin_angel_types', $privileges)) { + redirect(page_link_to('angeltypes')); + } + + $angeltype = load_angeltype(); + + if (request()->has('confirmed')) { + AngelType_delete($angeltype); + success(sprintf(_('Angeltype %s deleted.'), AngelType_name_render($angeltype))); + redirect(page_link_to('angeltypes')); + } + + return [ + sprintf(_('Delete angeltype %s'), $angeltype['name']), + AngelType_delete_view($angeltype) + ]; } /** * Change an Angeltype. + * + * @return array */ -function angeltype_edit_controller() { - global $privileges, $user; - - // In supporter mode only allow to modify description - $supporter_mode = ! in_array('admin_angel_types', $privileges); - - if (isset($_REQUEST['angeltype_id'])) { - // Edit existing angeltype - $angeltype = load_angeltype(); - - if (! User_is_AngelType_supporter($user, $angeltype)) { - redirect(page_link_to('angeltypes')); - } - } else { - // New angeltype - if ($supporter_mode) { - // Supporters aren't allowed to create new angeltypes. - redirect(page_link_to('angeltypes')); +function angeltype_edit_controller() +{ + global $privileges, $user; + + // In supporter mode only allow to modify description + $supporter_mode = !in_array('admin_angel_types', $privileges); + $request = request(); + + if ($request->has('angeltype_id')) { + // Edit existing angeltype + $angeltype = load_angeltype(); + + if (!User_is_AngelType_supporter($user, $angeltype)) { + redirect(page_link_to('angeltypes')); + } + } else { + // New angeltype + if ($supporter_mode) { + // Supporters aren't allowed to create new angeltypes. + redirect(page_link_to('angeltypes')); + } + $angeltype = AngelType_new(); } - $angeltype = AngelType_new(); - } - - if (isset($_REQUEST['submit'])) { - $valid = true; - - if (! $supporter_mode) { - if (isset($_REQUEST['name'])) { - $result = AngelType_validate_name($_REQUEST['name'], $angeltype); - $angeltype['name'] = $result->getValue(); - if (! $result->isValid()) { - $valid = false; - error(_("Please check the name. Maybe it already exists.")); + + if ($request->has('submit')) { + $valid = true; + + if (!$supporter_mode) { + if ($request->has('name')) { + $result = AngelType_validate_name($request->postData('name'), $angeltype); + $angeltype['name'] = $result->getValue(); + if (!$result->isValid()) { + $valid = false; + error(_('Please check the name. Maybe it already exists.')); + } + } + + $angeltype['restricted'] = $request->has('restricted'); + $angeltype['no_self_signup'] = $request->has('no_self_signup'); + + $angeltype['requires_driver_license'] = $request->has('requires_driver_license'); } - } - - $angeltype['restricted'] = isset($_REQUEST['restricted']); - $angeltype['no_self_signup'] = isset($_REQUEST['no_self_signup']); - $angeltype['requires_driver_license'] = isset($_REQUEST['requires_driver_license']); + $angeltype['description'] = strip_request_item_nl('description', $angeltype['description']); + + $angeltype['contact_name'] = strip_request_item('contact_name', $angeltype['contact_name']); + $angeltype['contact_dect'] = strip_request_item('contact_dect', $angeltype['contact_dect']); + $angeltype['contact_email'] = strip_request_item('contact_email', $angeltype['contact_email']); + + if ($valid) { + if ($angeltype['id'] != null) { + AngelType_update($angeltype); + } else { + $angeltype = AngelType_create($angeltype); + } + + success('Angel type saved.'); + redirect(angeltype_link($angeltype['id'])); + } } + + return [ + sprintf(_('Edit %s'), $angeltype['name']), + AngelType_edit_view($angeltype, $supporter_mode) + ]; +} + +/** + * View details of a given angeltype. + * + * @return array + */ +function angeltype_controller() +{ + global $privileges, $user; + + if (!in_array('angeltypes', $privileges)) { + redirect(page_link_to('/')); + } + + $angeltype = load_angeltype(); + $user_angeltype = UserAngelType_by_User_and_AngelType($user, $angeltype); + $user_driver_license = UserDriverLicense($user['UID']); + $members = Users_by_angeltype($angeltype); + + $days = angeltype_controller_shiftsFilterDays($angeltype); + $shiftsFilter = angeltype_controller_shiftsFilter($angeltype, $days); - $angeltype['description'] = strip_request_item_nl('description', $angeltype['description']); + $shiftsFilterRenderer = new ShiftsFilterRenderer($shiftsFilter); + $shiftsFilterRenderer->enableDaySelection($days); - if ($valid) { - if ($angeltype['id'] != null) { - AngelType_update($angeltype); - } else { - $angeltype = AngelType_create($angeltype); - } - - success("Angel type saved."); - redirect(angeltype_link($angeltype['id'])); + $shiftCalendarRenderer = shiftCalendarRendererByShiftFilter($shiftsFilter); + $request = request(); + $tab = 0; + if($request->has('shifts_filter_day')) { + $tab = 1; } - } - - return [ - sprintf(_("Edit %s"), $angeltype['name']), - AngelType_edit_view($angeltype, $supporter_mode) - ]; + + return [ + sprintf(_('Team %s'), $angeltype['name']), + AngelType_view( + $angeltype, + $members, + $user_angeltype, + in_array('admin_user_angeltypes', $privileges) || $user_angeltype['supporter'], + in_array('admin_angel_types', $privileges), + $user_angeltype['supporter'], + $user_driver_license, + $user, + $shiftsFilterRenderer, + $shiftCalendarRenderer, + $tab + ) + ]; } /** - * View details of a given angeltype. + * On which days do shifts for this angeltype occur? Needed for shiftCalendar. + * + * @param Angeltype $angeltype + * @return array */ -function angeltype_controller() { - global $privileges, $user; - - if (! in_array('angeltypes', $privileges)) { - redirect('?'); - } - - $angeltype = load_angeltype(); - $user_angeltype = UserAngelType_by_User_and_AngelType($user, $angeltype); - $user_driver_license = UserDriverLicense($user['UID']); - $members = Users_by_angeltype($angeltype); - - return [ - sprintf(_("Team %s"), $angeltype['name']), - AngelType_view($angeltype, $members, $user_angeltype, in_array('admin_user_angeltypes', $privileges) || $user_angeltype['supporter'], in_array('admin_angel_types', $privileges), $user_angeltype['supporter'], $user_driver_license, $user) - ]; +function angeltype_controller_shiftsFilterDays($angeltype) { + $all_shifts = Shifts_by_angeltype($angeltype); + $days = []; + foreach ($all_shifts as $shift) { + $day = date('Y-m-d', $shift['start']); + if (!in_array($day, $days)) { + $days[] = $day; + } + } + return $days; } /** - * View a list of all angeltypes. + * Sets up the shift filter for the angeltype. + * + * @param Angeltype $angeltype + * @param array $days + * @return ShiftsFilter */ -function angeltypes_list_controller() { - global $privileges, $user; - - if (! in_array('angeltypes', $privileges)) { - redirect('?'); - } - - $angeltypes = AngelTypes_with_user($user); - - foreach ($angeltypes as &$angeltype) { - $actions = [ - button(page_link_to('angeltypes') . '&action=view&angeltype_id=' . $angeltype['id'], _("view"), "btn-xs") - ]; +function angeltype_controller_shiftsFilter($angeltype, $days) { + global $privileges; - if (in_array('admin_angel_types', $privileges)) { - $actions[] = button(page_link_to('angeltypes') . '&action=edit&angeltype_id=' . $angeltype['id'], _("edit"), "btn-xs"); - $actions[] = button(page_link_to('angeltypes') . '&action=delete&angeltype_id=' . $angeltype['id'], _("delete"), "btn-xs"); + $request = request(); + $shiftsFilter = new ShiftsFilter( + in_array('user_shifts_admin', $privileges), + Room_ids(), + [$angeltype['id']] + ); + $selected_day = date('Y-m-d'); + if (!empty($days)) { + $selected_day = $days[0]; } - - $angeltype['membership'] = AngelType_render_membership($angeltype); - if ($angeltype['user_angeltype_id'] != null) { - $actions[] = button(page_link_to('user_angeltypes') . '&action=delete&user_angeltype_id=' . $angeltype['user_angeltype_id'], _("leave"), "btn-xs"); - } else { - $actions[] = button(page_link_to('user_angeltypes') . '&action=add&angeltype_id=' . $angeltype['id'], _("join"), "btn-xs"); + if ($request->has('shifts_filter_day')) { + $selected_day = $request->input('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')); - $angeltype['restricted'] = $angeltype['restricted'] ? glyph('lock') : ''; - $angeltype['no_self_signup'] = $angeltype['no_self_signup'] ? '' : glyph('share'); + return $shiftsFilter; +} - $angeltype['name'] = '<a href="' . page_link_to('angeltypes') . '&action=view&angeltype_id=' . $angeltype['id'] . '">' . $angeltype['name'] . '</a>'; - - $angeltype['actions'] = table_buttons($actions); - } - - return [ - angeltypes_title(), - AngelTypes_list_view($angeltypes, in_array('admin_angel_types', $privileges)) - ]; +/** + * View a list of all angeltypes. + * + * @return array + */ +function angeltypes_list_controller() +{ + global $privileges, $user; + + if (!in_array('angeltypes', $privileges)) { + redirect(page_link_to('/')); + } + + $angeltypes = AngelTypes_with_user($user); + + foreach ($angeltypes as &$angeltype) { + $actions = [ + button( + page_link_to('angeltypes', ['action' => 'view', 'angeltype_id' => $angeltype['id']]), + _('view'), + 'btn-xs' + ) + ]; + + if (in_array('admin_angel_types', $privileges)) { + $actions[] = button( + page_link_to('angeltypes', ['action' => 'edit', 'angeltype_id' => $angeltype['id']]), + _('edit'), + 'btn-xs' + ); + $actions[] = button( + page_link_to('angeltypes', ['action' => 'delete', 'angeltype_id' => $angeltype['id']]), + _('delete'), + 'btn-xs' + ); + } + + $angeltype['membership'] = AngelType_render_membership($angeltype); + if ($angeltype['user_angeltype_id'] != null) { + $actions[] = button( + page_link_to('user_angeltypes', + ['action' => 'delete', 'user_angeltype_id' => $angeltype['user_angeltype_id']] + ), + _('leave'), + 'btn-xs' + ); + } else { + $actions[] = button( + page_link_to('user_angeltypes', ['action' => 'add', 'angeltype_id' => $angeltype['id']]), + _('join'), + 'btn-xs' + ); + } + + $angeltype['restricted'] = $angeltype['restricted'] ? glyph('lock') : ''; + $angeltype['no_self_signup'] = $angeltype['no_self_signup'] ? '' : glyph('share'); + + $angeltype['name'] = '<a href="' + . page_link_to('angeltypes', ['action' => 'view', 'angeltype_id' => $angeltype['id']]) + . '">' + . $angeltype['name'] + . '</a>'; + + $angeltype['actions'] = table_buttons($actions); + } + + return [ + angeltypes_title(), + AngelTypes_list_view($angeltypes, in_array('admin_angel_types', $privileges)) + ]; } /** * Loads an angeltype from given angeltype_id request param. + * + * @return array */ -function load_angeltype() { - if (! isset($_REQUEST['angeltype_id'])) { - redirect(page_link_to('angeltypes')); - } - - $angeltype = AngelType($_REQUEST['angeltype_id']); - if ($angeltype == null) { - error(_("Angeltype doesn't exist.")); - redirect(page_link_to('angeltypes')); - } - - return $angeltype; +function load_angeltype() +{ + $request = request(); + if (!$request->has('angeltype_id')) { + redirect(page_link_to('angeltypes')); + } + + $angeltype = AngelType($request->input('angeltype_id')); + if ($angeltype == null) { + error(_('Angeltype doesn\'t exist . ')); + redirect(page_link_to('angeltypes')); + } + + return $angeltype; } -?> |