From 7313e15ce8236e19331fb6639a3a5b97c8f06ecd Mon Sep 17 00:00:00 2001 From: Bot Date: Mon, 2 Jan 2017 03:57:23 +0100 Subject: PSR-2 formatting --- includes/view/AngelTypes_view.php | 337 ++++++++++----------- includes/view/EventConfig_view.php | 105 +++---- includes/view/Questions_view.php | 33 +-- includes/view/Rooms_view.php | 20 +- includes/view/ShiftCalendarLane.php | 64 ++-- includes/view/ShiftCalendarRenderer.php | 277 ++++++++--------- includes/view/ShiftCalendarShiftRenderer.php | 162 +++++----- includes/view/ShiftEntry_view.php | 23 +- includes/view/ShiftTypes_view.php | 85 +++--- includes/view/ShiftsFilterRenderer.php | 47 +-- includes/view/Shifts_view.php | 187 ++++++------ includes/view/UserAngelTypes_view.php | 75 ++--- includes/view/UserDriverLicenses_view.php | 17 +- includes/view/UserHintsRenderer.php | 52 ++-- includes/view/User_view.php | 425 ++++++++++++++------------- 15 files changed, 987 insertions(+), 922 deletions(-) (limited to 'includes/view') diff --git a/includes/view/AngelTypes_view.php b/includes/view/AngelTypes_view.php index 7b20b7dd..bade3664 100644 --- a/includes/view/AngelTypes_view.php +++ b/includes/view/AngelTypes_view.php @@ -7,10 +7,11 @@ /** * Renders the angeltypes name as link. * - * @param AngelType $angeltype + * @param AngelType $angeltype */ -function AngelType_name_render($angeltype) { - return '' . ($angeltype['restricted'] ? glyph('lock') : '') . $angeltype['name'] . ''; +function AngelType_name_render($angeltype) +{ + return '' . ($angeltype['restricted'] ? glyph('lock') : '') . $angeltype['name'] . ''; } /** @@ -20,30 +21,32 @@ function AngelType_name_render($angeltype) { * UserAngelType and AngelType * @return string */ -function AngelType_render_membership($user_angeltype) { - if ($user_angeltype['user_angeltype_id'] != null) { - if ($user_angeltype['restricted']) { - if ($user_angeltype['confirm_user_id'] == null) { - return glyph('lock') . _("Unconfirmed"); - } elseif ($user_angeltype['supporter']) { - return glyph_bool(true) . _("supporter"); - } - return glyph_bool(true) . _("Member"); - } elseif ($user_angeltype['supporter']) { - return glyph_bool(true) . _("supporter"); +function AngelType_render_membership($user_angeltype) +{ + if ($user_angeltype['user_angeltype_id'] != null) { + if ($user_angeltype['restricted']) { + if ($user_angeltype['confirm_user_id'] == null) { + return glyph('lock') . _("Unconfirmed"); + } elseif ($user_angeltype['supporter']) { + return glyph_bool(true) . _("supporter"); + } + return glyph_bool(true) . _("Member"); + } elseif ($user_angeltype['supporter']) { + return glyph_bool(true) . _("supporter"); + } + return glyph_bool(true) . _("Member"); } - return glyph_bool(true) . _("Member"); - } - return glyph_bool(false); + return glyph_bool(false); } -function AngelType_delete_view($angeltype) { - return page_with_title(sprintf(_("Delete angeltype %s"), $angeltype['name']), [ +function AngelType_delete_view($angeltype) +{ + return page_with_title(sprintf(_("Delete angeltype %s"), $angeltype['name']), [ info(sprintf(_("Do you want to delete angeltype %s?"), $angeltype['name']), true), buttons([ button(page_link_to('angeltypes'), _("cancel"), 'cancel'), - button(page_link_to('angeltypes') . '&action=delete&angeltype_id=' . $angeltype['id'] . '&confirmed', _("delete"), 'ok') - ]) + button(page_link_to('angeltypes') . '&action=delete&angeltype_id=' . $angeltype['id'] . '&confirmed', _("delete"), 'ok') + ]) ]); } @@ -55,11 +58,12 @@ function AngelType_delete_view($angeltype) { * @param boolean $supporter_mode * Is the user a supporter of this angeltype? */ -function AngelType_edit_view($angeltype, $supporter_mode) { - $contact_info = AngelType_contact_info($angeltype); - return page_with_title(sprintf(_("Edit %s"), $angeltype['name']), [ +function AngelType_edit_view($angeltype, $supporter_mode) +{ + $contact_info = AngelType_contact_info($angeltype); + return page_with_title(sprintf(_("Edit %s"), $angeltype['name']), [ buttons([ - button(page_link_to('angeltypes'), _("Angeltypes"), 'back') + button(page_link_to('angeltypes'), _("Angeltypes"), 'back') ]), msg(), form([ @@ -73,44 +77,45 @@ function AngelType_edit_view($angeltype, $supporter_mode) { form_info("", _("Restricted angel types can only be used by an angel if enabled by a supporter (double opt-in).")), form_textarea('description', _("Description"), $angeltype['description']), form_info("", _("Please use markdown for the description.")), - form_submit('submit', _("Save")) - ]) + form_submit('submit', _("Save")) + ]) ]); } /** * Renders the buttons for the angeltype view. */ -function AngelType_view_buttons($angeltype, $user_angeltype, $admin_angeltypes, $supporter, $user_driver_license, $user) { - $buttons = [ - button(page_link_to('angeltypes'), _("Angeltypes"), 'back') +function AngelType_view_buttons($angeltype, $user_angeltype, $admin_angeltypes, $supporter, $user_driver_license, $user) +{ + $buttons = [ + button(page_link_to('angeltypes'), _("Angeltypes"), 'back') ]; - if ($angeltype['requires_driver_license']) { - $buttons[] = button(user_driver_license_edit_link($user), glyph("road") . _("my driving license")); - } - - if ($user_angeltype == null) { - $buttons[] = button(page_link_to('user_angeltypes') . '&action=add&angeltype_id=' . $angeltype['id'], _("join"), 'add'); - } else { - if ($angeltype['requires_driver_license'] && $user_driver_license == null) { - error(_("This angeltype requires a driver license. Please enter your driver license information!")); + if ($angeltype['requires_driver_license']) { + $buttons[] = button(user_driver_license_edit_link($user), glyph("road") . _("my driving license")); } + + if ($user_angeltype == null) { + $buttons[] = button(page_link_to('user_angeltypes') . '&action=add&angeltype_id=' . $angeltype['id'], _("join"), 'add'); + } else { + if ($angeltype['requires_driver_license'] && $user_driver_license == null) { + error(_("This angeltype requires a driver license. Please enter your driver license information!")); + } - if ($angeltype['restricted'] && $user_angeltype['confirm_user_id'] == null) { - error(sprintf(_("You are unconfirmed for this angeltype. Please go to the introduction for %s to get confirmed."), $angeltype['name'])); + if ($angeltype['restricted'] && $user_angeltype['confirm_user_id'] == null) { + error(sprintf(_("You are unconfirmed for this angeltype. Please go to the introduction for %s to get confirmed."), $angeltype['name'])); + } + $buttons[] = button(page_link_to('user_angeltypes') . '&action=delete&user_angeltype_id=' . $user_angeltype['id'], _("leave"), 'cancel'); } - $buttons[] = button(page_link_to('user_angeltypes') . '&action=delete&user_angeltype_id=' . $user_angeltype['id'], _("leave"), 'cancel'); - } - if ($admin_angeltypes || $supporter) { - $buttons[] = button(page_link_to('angeltypes') . '&action=edit&angeltype_id=' . $angeltype['id'], _("edit"), 'edit'); - } - if ($admin_angeltypes) { - $buttons[] = button(page_link_to('angeltypes') . '&action=delete&angeltype_id=' . $angeltype['id'], _("delete"), 'delete'); - } + if ($admin_angeltypes || $supporter) { + $buttons[] = button(page_link_to('angeltypes') . '&action=edit&angeltype_id=' . $angeltype['id'], _("edit"), 'edit'); + } + if ($admin_angeltypes) { + $buttons[] = button(page_link_to('angeltypes') . '&action=delete&angeltype_id=' . $angeltype['id'], _("delete"), 'delete'); + } - return buttons($buttons); + return buttons($buttons); } /** @@ -118,62 +123,64 @@ function AngelType_view_buttons($angeltype, $user_angeltype, $admin_angeltypes, * * @return [supporters, members, unconfirmed members] */ -function AngelType_view_members($angeltype, $members, $admin_user_angeltypes, $admin_angeltypes) { - $supporters = []; - $members_confirmed = []; - $members_unconfirmed = []; - foreach ($members as $member) { - $member['Nick'] = User_Nick_render($member); +function AngelType_view_members($angeltype, $members, $admin_user_angeltypes, $admin_angeltypes) +{ + $supporters = []; + $members_confirmed = []; + $members_unconfirmed = []; + foreach ($members as $member) { + $member['Nick'] = User_Nick_render($member); - if ($angeltype['requires_driver_license']) { - $member['wants_to_drive'] = glyph_bool($member['user_id']); - $member['has_car'] = glyph_bool($member['has_car']); - $member['has_license_car'] = glyph_bool($member['has_license_car']); - $member['has_license_3_5t_transporter'] = glyph_bool($member['has_license_3_5t_transporter']); - $member['has_license_7_5t_truck'] = glyph_bool($member['has_license_7_5t_truck']); - $member['has_license_12_5t_truck'] = glyph_bool($member['has_license_12_5t_truck']); - $member['has_license_forklift'] = glyph_bool($member['has_license_forklift']); - } + if ($angeltype['requires_driver_license']) { + $member['wants_to_drive'] = glyph_bool($member['user_id']); + $member['has_car'] = glyph_bool($member['has_car']); + $member['has_license_car'] = glyph_bool($member['has_license_car']); + $member['has_license_3_5t_transporter'] = glyph_bool($member['has_license_3_5t_transporter']); + $member['has_license_7_5t_truck'] = glyph_bool($member['has_license_7_5t_truck']); + $member['has_license_12_5t_truck'] = glyph_bool($member['has_license_12_5t_truck']); + $member['has_license_forklift'] = glyph_bool($member['has_license_forklift']); + } - if ($angeltype['restricted'] && $member['confirm_user_id'] == null) { - $member['actions'] = table_buttons([ + if ($angeltype['restricted'] && $member['confirm_user_id'] == null) { + $member['actions'] = table_buttons([ button(page_link_to('user_angeltypes') . '&action=confirm&user_angeltype_id=' . $member['user_angeltype_id'], _("confirm"), 'btn-xs'), - button(page_link_to('user_angeltypes') . '&action=delete&user_angeltype_id=' . $member['user_angeltype_id'], _("deny"), 'btn-xs') + button(page_link_to('user_angeltypes') . '&action=delete&user_angeltype_id=' . $member['user_angeltype_id'], _("deny"), 'btn-xs') ]); - $members_unconfirmed[] = $member; - } elseif ($member['supporter']) { - if ($admin_angeltypes) { - $member['actions'] = table_buttons([ - button(page_link_to('user_angeltypes') . '&action=update&user_angeltype_id=' . $member['user_angeltype_id'] . '&supporter=0', _("Remove supporter rights"), 'btn-xs') + $members_unconfirmed[] = $member; + } elseif ($member['supporter']) { + if ($admin_angeltypes) { + $member['actions'] = table_buttons([ + button(page_link_to('user_angeltypes') . '&action=update&user_angeltype_id=' . $member['user_angeltype_id'] . '&supporter=0', _("Remove supporter rights"), 'btn-xs') ]); - } else { - $member['actions'] = ''; - } - $supporters[] = $member; - } else { - if ($admin_user_angeltypes) { - $member['actions'] = table_buttons([ + } else { + $member['actions'] = ''; + } + $supporters[] = $member; + } else { + if ($admin_user_angeltypes) { + $member['actions'] = table_buttons([ $admin_angeltypes ? button(page_link_to('user_angeltypes') . '&action=update&user_angeltype_id=' . $member['user_angeltype_id'] . '&supporter=1', _("Add supporter rights"), 'btn-xs') : '', - button(page_link_to('user_angeltypes') . '&action=delete&user_angeltype_id=' . $member['user_angeltype_id'], _("remove"), 'btn-xs') + button(page_link_to('user_angeltypes') . '&action=delete&user_angeltype_id=' . $member['user_angeltype_id'], _("remove"), 'btn-xs') ]); - } - $members_confirmed[] = $member; + } + $members_confirmed[] = $member; + } } - } - return [ + return [ $supporters, $members_confirmed, - $members_unconfirmed + $members_unconfirmed ]; } /** * Creates the needed member table headers according to given rights and settings from the angeltype. */ -function AngelType_view_table_headers($angeltype, $supporter, $admin_angeltypes) { - if ($angeltype['requires_driver_license'] && ($supporter || $admin_angeltypes)) { - return [ +function AngelType_view_table_headers($angeltype, $supporter, $admin_angeltypes) +{ + if ($angeltype['requires_driver_license'] && ($supporter || $admin_angeltypes)) { + return [ 'Nick' => _("Nick"), 'DECT' => _("DECT"), 'wants_to_drive' => _("Driver"), @@ -183,147 +190,149 @@ function AngelType_view_table_headers($angeltype, $supporter, $admin_angeltypes) 'has_license_7_5t_truck' => _("7,5t Truck"), 'has_license_12_5t_truck' => _("12,5t Truck"), 'has_license_forklift' => _("Forklift"), - 'actions' => '' + 'actions' => '' ]; - } - return [ + } + return [ 'Nick' => _("Nick"), 'DECT' => _("DECT"), - 'actions' => '' + 'actions' => '' ]; } /** * Render an angeltype page containing the member lists. */ -function AngelType_view($angeltype, $members, $user_angeltype, $admin_user_angeltypes, $admin_angeltypes, $supporter, $user_driver_license, $user) { - $page = [ +function AngelType_view($angeltype, $members, $user_angeltype, $admin_user_angeltypes, $admin_angeltypes, $supporter, $user_driver_license, $user) +{ + $page = [ AngelType_view_buttons($angeltype, $user_angeltype, $admin_angeltypes, $supporter, $user_driver_license, $user), - msg() + msg() ]; - $page[] = '

' . _("Description") . '

'; - $parsedown = new Parsedown(); - if ($angeltype['description'] != "") { - $page[] = '
' . $parsedown->parse($angeltype['description']) . '
'; - } + $page[] = '

' . _("Description") . '

'; + $parsedown = new Parsedown(); + if ($angeltype['description'] != "") { + $page[] = '
' . $parsedown->parse($angeltype['description']) . '
'; + } - list($supporters, $members_confirmed, $members_unconfirmed) = AngelType_view_members($angeltype, $members, $admin_user_angeltypes, $admin_angeltypes); - $table_headers = AngelType_view_table_headers($angeltype, $supporter, $admin_angeltypes); + list($supporters, $members_confirmed, $members_unconfirmed) = AngelType_view_members($angeltype, $members, $admin_user_angeltypes, $admin_angeltypes); + $table_headers = AngelType_view_table_headers($angeltype, $supporter, $admin_angeltypes); - if (count($supporters) > 0) { - $page[] = '

' . _("supporters") . '

'; - $page[] = table($table_headers, $supporters); - } + if (count($supporters) > 0) { + $page[] = '

' . _("supporters") . '

'; + $page[] = table($table_headers, $supporters); + } - if (count($members_confirmed) > 0) { - $members_confirmed[] = [ + if (count($members_confirmed) > 0) { + $members_confirmed[] = [ 'Nick' => _('Sum'), 'DECT' => count($members_confirmed), - 'actions' => '' + 'actions' => '' ]; - } + } - if (count($members_unconfirmed) > 0) { - $members_unconfirmed[] = [ + if (count($members_unconfirmed) > 0) { + $members_unconfirmed[] = [ 'Nick' => _('Sum'), 'DECT' => count($members_unconfirmed), - 'actions' => '' + 'actions' => '' ]; - } + } - $page[] = '

' . _("Members") . '

'; - if ($admin_user_angeltypes) { - $page[] = buttons([ - button(page_link_to('user_angeltypes') . '&action=add&angeltype_id=' . $angeltype['id'], _("Add"), 'add') + $page[] = '

' . _("Members") . '

'; + if ($admin_user_angeltypes) { + $page[] = buttons([ + button(page_link_to('user_angeltypes') . '&action=add&angeltype_id=' . $angeltype['id'], _("Add"), 'add') ]); - } - $page[] = table($table_headers, $members_confirmed); + } + $page[] = table($table_headers, $members_confirmed); - if ($admin_user_angeltypes && $angeltype['restricted'] && count($members_unconfirmed) > 0) { - $page[] = '

' . _("Unconfirmed") . '

'; - $page[] = buttons([ + if ($admin_user_angeltypes && $angeltype['restricted'] && count($members_unconfirmed) > 0) { + $page[] = '

' . _("Unconfirmed") . '

'; + $page[] = buttons([ button(page_link_to('user_angeltypes') . '&action=confirm_all&angeltype_id=' . $angeltype['id'], _("confirm all"), 'ok'), - button(page_link_to('user_angeltypes') . '&action=delete_all&angeltype_id=' . $angeltype['id'], _("deny all"), 'cancel') + button(page_link_to('user_angeltypes') . '&action=delete_all&angeltype_id=' . $angeltype['id'], _("deny all"), 'cancel') ]); - $page[] = table($table_headers, $members_unconfirmed); - } + $page[] = table($table_headers, $members_unconfirmed); + } - return page_with_title(sprintf(_("Team %s"), $angeltype['name']), $page); + return page_with_title(sprintf(_("Team %s"), $angeltype['name']), $page); } /** * Display the list of angeltypes. * - * @param array $angeltypes + * @param array $angeltypes */ -function AngelTypes_list_view($angeltypes, $admin_angeltypes) { - return page_with_title(angeltypes_title(), [ +function AngelTypes_list_view($angeltypes, $admin_angeltypes) +{ + return page_with_title(angeltypes_title(), [ msg(), buttons([ $admin_angeltypes ? button(page_link_to('angeltypes') . '&action=edit', _("New angeltype"), 'add') : '', - button(page_link_to('angeltypes') . '&action=about', _("Teams/Job description")) + button(page_link_to('angeltypes') . '&action=about', _("Teams/Job description")) ]), table([ 'name' => _("Name"), 'restricted' => glyph('lock') . _("Restricted"), 'no_self_signup' => glyph('share') . _("Self Sign Up Allowed"), 'membership' => _("Membership"), - 'actions' => "" - ], $angeltypes) + 'actions' => "" + ], $angeltypes) ]); } /** * Renders the about info for an angeltype. */ -function AngelTypes_about_view_angeltype($angeltype) { - $parsedown = new Parsedown(); +function AngelTypes_about_view_angeltype($angeltype) +{ + $parsedown = new Parsedown(); - $html = '

' . $angeltype['name'] . '

'; + $html = '

' . $angeltype['name'] . '

'; - if (isset($angeltype['user_angeltype_id'])) { - $buttons = []; - if ($angeltype['user_angeltype_id'] != null) { - $buttons[] = button(page_link_to('user_angeltypes') . '&action=delete&user_angeltype_id=' . $angeltype['user_angeltype_id'], _("leave"), 'cancel'); - } else { - $buttons[] = button(page_link_to('user_angeltypes') . '&action=add&angeltype_id=' . $angeltype['id'], _("join"), 'add'); + if (isset($angeltype['user_angeltype_id'])) { + $buttons = []; + if ($angeltype['user_angeltype_id'] != null) { + $buttons[] = button(page_link_to('user_angeltypes') . '&action=delete&user_angeltype_id=' . $angeltype['user_angeltype_id'], _("leave"), 'cancel'); + } else { + $buttons[] = button(page_link_to('user_angeltypes') . '&action=add&angeltype_id=' . $angeltype['id'], _("join"), 'add'); + } + $html .= buttons($buttons); } - $html .= buttons($buttons); - } - if ($angeltype['restricted']) { - $html .= info(_("This angeltype is restricted by double-opt-in by a team supporter. Please show up at the according introduction meetings."), true); - } - if ($angeltype['description'] != "") { - $html .= '
' . $parsedown->parse($angeltype['description']) . '
'; - } - $html .= '
'; + if ($angeltype['restricted']) { + $html .= info(_("This angeltype is restricted by double-opt-in by a team supporter. Please show up at the according introduction meetings."), true); + } + if ($angeltype['description'] != "") { + $html .= '
' . $parsedown->parse($angeltype['description']) . '
'; + } + $html .= '
'; - return $html; + return $html; } /** * Renders a site that contains every angeltype and its description, basically as an overview of the needed help types. */ -function AngelTypes_about_view($angeltypes, $user_logged_in) { - global $faq_url; +function AngelTypes_about_view($angeltypes, $user_logged_in) +{ + global $faq_url; - $content = [ + $content = [ buttons([ ! $user_logged_in ? button(page_link_to('register'), register_title()) : '', ! $user_logged_in ? button(page_link_to('login'), login_title()) : '', $user_logged_in ? button(page_link_to('angeltypes'), angeltypes_title(), 'back') : '', - button($faq_url, _("FAQ"), "btn-primary") + button($faq_url, _("FAQ"), "btn-primary") ]), '

' . _("Here is the list of teams and their tasks. If you have questions, read the FAQ.") . '

', - '
' + '
' ]; - foreach ($angeltypes as $angeltype) { - $content[] = AngelTypes_about_view_angeltype($angeltype); - } + foreach ($angeltypes as $angeltype) { + $content[] = AngelTypes_about_view_angeltype($angeltype); + } - return page_with_title(_("Teams/Job description"), $content); + return page_with_title(_("Teams/Job description"), $content); } - -?> diff --git a/includes/view/EventConfig_view.php b/includes/view/EventConfig_view.php index 37a19839..87002399 100644 --- a/includes/view/EventConfig_view.php +++ b/includes/view/EventConfig_view.php @@ -4,85 +4,87 @@ * Shows basic event infos and countdowns. * @param EventConfig $event_config The event configuration */ -function EventConfig_countdown_page($event_config) { - if ($event_config == null) { - return div('col-md-12 text-center', [ - heading(sprintf(_("Welcome to the %s!"), ' ENGELSYSTEM'), 2) +function EventConfig_countdown_page($event_config) +{ + if ($event_config == null) { + return div('col-md-12 text-center', [ + heading(sprintf(_("Welcome to the %s!"), ' ENGELSYSTEM'), 2) ]); - } + } - $elements = []; + $elements = []; - if ($event_config['event_name'] != null) { - $elements[] = div('col-sm-12 text-center', [ - heading(sprintf(_("Welcome to the %s!"), $event_config['event_name'] . ' ENGELSYSTEM'), 2) + if ($event_config['event_name'] != null) { + $elements[] = div('col-sm-12 text-center', [ + heading(sprintf(_("Welcome to the %s!"), $event_config['event_name'] . ' ENGELSYSTEM'), 2) ]); - } + } - if ($event_config['buildup_start_date'] != null && time() < $event_config['buildup_start_date']) { - $elements[] = div('col-sm-3 text-center hidden-xs', [ + if ($event_config['buildup_start_date'] != null && time() < $event_config['buildup_start_date']) { + $elements[] = div('col-sm-3 text-center hidden-xs', [ heading(_("Buildup starts"), 4), '%c', - '' . date(_("Y-m-d"), $event_config['buildup_start_date']) . '' + '' . date(_("Y-m-d"), $event_config['buildup_start_date']) . '' ]); - } + } - if ($event_config['event_start_date'] != null && time() < $event_config['event_start_date']) { - $elements[] = div('col-sm-3 text-center hidden-xs', [ + if ($event_config['event_start_date'] != null && time() < $event_config['event_start_date']) { + $elements[] = div('col-sm-3 text-center hidden-xs', [ heading(_("Event starts"), 4), '%c', - '' . date(_("Y-m-d"), $event_config['event_start_date']) . '' + '' . date(_("Y-m-d"), $event_config['event_start_date']) . '' ]); - } + } - if ($event_config['event_end_date'] != null && time() < $event_config['event_end_date']) { - $elements[] = div('col-sm-3 text-center hidden-xs', [ + if ($event_config['event_end_date'] != null && time() < $event_config['event_end_date']) { + $elements[] = div('col-sm-3 text-center hidden-xs', [ heading(_("Event ends"), 4), '%c', - '' . date(_("Y-m-d"), $event_config['event_end_date']) . '' + '' . date(_("Y-m-d"), $event_config['event_end_date']) . '' ]); - } + } - if ($event_config['teardown_end_date'] != null && time() < $event_config['teardown_end_date']) { - $elements[] = div('col-sm-3 text-center hidden-xs', [ + if ($event_config['teardown_end_date'] != null && time() < $event_config['teardown_end_date']) { + $elements[] = div('col-sm-3 text-center hidden-xs', [ heading(_("Teardown ends"), 4), '%c', - '' . date(_("Y-m-d"), $event_config['teardown_end_date']) . '' + '' . date(_("Y-m-d"), $event_config['teardown_end_date']) . '' ]); - } + } - return join("", $elements); + return join("", $elements); } /** * Converts event name and start+end date into a line of text. */ -function EventConfig_info($event_config) { - if ($event_config == null) { - return ""; - } +function EventConfig_info($event_config) +{ + if ($event_config == null) { + return ""; + } // Event name, start+end date are set if ($event_config['event_name'] != null && $event_config['event_start_date'] != null && $event_config['event_end_date'] != null) { - return sprintf(_("%s, from %s to %s"), $event_config['event_name'], date(_("Y-m-d"), $event_config['event_start_date']), date(_("Y-m-d"), $event_config['event_end_date'])); + return sprintf(_("%s, from %s to %s"), $event_config['event_name'], date(_("Y-m-d"), $event_config['event_start_date']), date(_("Y-m-d"), $event_config['event_end_date'])); } // Event name, start date are set if ($event_config['event_name'] != null && $event_config['event_start_date'] != null) { - return sprintf(_("%s, starting %s"), $event_config['event_name'], date(_("Y-m-d"), $event_config['event_start_date'])); + return sprintf(_("%s, starting %s"), $event_config['event_name'], date(_("Y-m-d"), $event_config['event_start_date'])); } // Event start+end date are set if ($event_config['event_start_date'] != null && $event_config['event_end_date'] != null) { - return sprintf(_("Event from %s to %s"), date(_("Y-m-d"), $event_config['event_start_date']), date(_("Y-m-d"), $event_config['event_end_date'])); + return sprintf(_("Event from %s to %s"), date(_("Y-m-d"), $event_config['event_start_date']), date(_("Y-m-d"), $event_config['event_end_date'])); } // Only event name is set if ($event_config['event_name'] != null) { - return sprintf($event_config['event_name']); + return sprintf($event_config['event_name']); } - return ""; + return ""; } /** @@ -92,13 +94,14 @@ function EventConfig_info($event_config) { * The event name * @param string $event_welcome_msg * The welcome message - * @param date $buildup_start_date - * @param date $event_start_date - * @param date $event_end_date - * @param date $teardown_end_date + * @param date $buildup_start_date + * @param date $event_start_date + * @param date $event_end_date + * @param date $teardown_end_date */ -function EventConfig_edit_view($event_name, $event_welcome_msg, $buildup_start_date, $event_start_date, $event_end_date, $teardown_end_date) { - return page_with_title(event_config_title(), [ +function EventConfig_edit_view($event_name, $event_welcome_msg, $buildup_start_date, $event_start_date, $event_end_date, $teardown_end_date) +{ + return page_with_title(event_config_title(), [ msg(), form([ div('row', [ @@ -106,24 +109,22 @@ function EventConfig_edit_view($event_name, $event_welcome_msg, $buildup_start_d form_text('event_name', _("Event Name"), $event_name), form_info('', _("Event Name is shown on the start page.")), form_textarea('event_welcome_msg', _("Event Welcome Message"), $event_welcome_msg), - form_info('', _("Welcome message is shown after successful registration. You can use markdown.")) + form_info('', _("Welcome message is shown after successful registration. You can use markdown.")) ]), div('col-md-3 col-xs-6', [ form_date('buildup_start_date', _("Buildup date"), $buildup_start_date), - form_date('event_start_date', _("Event start date"), $event_start_date) + form_date('event_start_date', _("Event start date"), $event_start_date) ]), div('col-md-3 col-xs-6', [ form_date('teardown_end_date', _("Teardown end date"), $teardown_end_date), - form_date('event_end_date', _("Event end date"), $event_end_date) - ]) + form_date('event_end_date', _("Event end date"), $event_end_date) + ]) ]), div('row', [ div('col-md-6', [ - form_submit('submit', _("Save")) - ]) - ]) - ]) + form_submit('submit', _("Save")) + ]) + ]) + ]) ]); } - -?> \ No newline at end of file diff --git a/includes/view/Questions_view.php b/includes/view/Questions_view.php index a44a29d1..8446ad8b 100644 --- a/includes/view/Questions_view.php +++ b/includes/view/Questions_view.php @@ -1,37 +1,36 @@ ' . _("delete") . ''; - $question['Question'] = str_replace("\n", '
', $question['Question']); - } +function Questions_view($open_questions, $answered_questions, $ask_action) +{ + foreach ($open_questions as &$question) { + $question['actions'] = '' . _("delete") . ''; + $question['Question'] = str_replace("\n", '
', $question['Question']); + } - foreach ($answered_questions as &$question) { - $question['Question'] = str_replace("\n", '
', $question['Question']); - $question['Answer'] = str_replace("\n", '
', $question['Answer']); - $question['actions'] = '' . _("delete") . ''; - } + foreach ($answered_questions as &$question) { + $question['Question'] = str_replace("\n", '
', $question['Question']); + $question['Answer'] = str_replace("\n", '
', $question['Answer']); + $question['actions'] = '' . _("delete") . ''; + } - return page_with_title(questions_title(), [ + return page_with_title(questions_title(), [ msg(), heading(_("Open questions"), 2), table([ 'Question' => _("Question"), - 'actions' => "" + 'actions' => "" ], $open_questions), heading(_("Answered questions"), 2), table([ 'Question' => _("Question"), 'answer_user' => _("Answered by"), 'Answer' => _("Answer"), - 'actions' => "" + 'actions' => "" ], $answered_questions), heading(_("Ask the Heaven"), 2), form([ form_textarea('question', _("Your Question:"), ""), - form_submit('submit', _("Save")) - ], $ask_action) + form_submit('submit', _("Save")) + ], $ask_action) ]); } - -?> \ No newline at end of file diff --git a/includes/view/Rooms_view.php b/includes/view/Rooms_view.php index 7afdc67b..892c5968 100644 --- a/includes/view/Rooms_view.php +++ b/includes/view/Rooms_view.php @@ -2,19 +2,19 @@ use Engelsystem\ShiftsFilterRenderer; use Engelsystem\ShiftCalendarRenderer; -function Room_view($room, ShiftsFilterRenderer $shiftsFilterRenderer, ShiftCalendarRenderer $shiftCalendarRenderer) { - return page_with_title(glyph('map-marker') . $room['Name'], [ +function Room_view($room, ShiftsFilterRenderer $shiftsFilterRenderer, ShiftCalendarRenderer $shiftCalendarRenderer) +{ + return page_with_title(glyph('map-marker') . $room['Name'], [ $shiftsFilterRenderer->render(room_link($room)) , $shiftCalendarRenderer->render() ]); } -function Room_name_render($room) { - global $privileges; - if (in_array('view_rooms', $privileges)) { - return '' . glyph('map-marker') . $room['Name'] . ''; - } - return glyph('map-marker') . $room['Name']; +function Room_name_render($room) +{ + global $privileges; + if (in_array('view_rooms', $privileges)) { + return '' . glyph('map-marker') . $room['Name'] . ''; + } + return glyph('map-marker') . $room['Name']; } - -?> \ No newline at end of file diff --git a/includes/view/ShiftCalendarLane.php b/includes/view/ShiftCalendarLane.php index 33fccec3..af674671 100644 --- a/includes/view/ShiftCalendarLane.php +++ b/includes/view/ShiftCalendarLane.php @@ -5,21 +5,22 @@ namespace Engelsystem; /** * Represents a single lane in a shifts calendar. */ -class ShiftCalendarLane { +class ShiftCalendarLane +{ + private $firstBlockStartTime; - private $firstBlockStartTime; + private $blockCount; - private $blockCount; + private $header; - private $header; + private $shifts = []; - private $shifts = []; - - public function __construct($header, $firstBlockStartTime, $blockCount) { - $this->header = $header; - $this->firstBlockStartTime = $firstBlockStartTime; - $this->blockCount = $blockCount; - } + public function __construct($header, $firstBlockStartTime, $blockCount) + { + $this->header = $header; + $this->firstBlockStartTime = $firstBlockStartTime; + $this->blockCount = $blockCount; + } /** * Adds a shift to the lane, but only if it fits. @@ -29,12 +30,13 @@ class ShiftCalendarLane { * The shift to add * @return boolean true on success */ - public function addShift($shift) { - if ($this->shiftFits($shift)) { - $this->shifts[] = $shift; - return true; - } - return false; + public function addShift($shift) + { + if ($this->shiftFits($shift)) { + $this->shifts[] = $shift; + return true; + } + return false; } /** @@ -43,21 +45,23 @@ class ShiftCalendarLane { * @param Shift $shift * The shift to fit into this lane */ - public function shiftFits($newShift) { - foreach ($this->shifts as $laneShift) { - if (! ($newShift['start'] >= $laneShift['end'] || $newShift['end'] <= $laneShift['start'])) { - return false; + public function shiftFits($newShift) + { + foreach ($this->shifts as $laneShift) { + if (! ($newShift['start'] >= $laneShift['end'] || $newShift['end'] <= $laneShift['start'])) { + return false; + } } - } - return true; + return true; } - public function getHeader() { - return $this->header; - } + public function getHeader() + { + return $this->header; + } - public function getShifts() { - return $this->shifts; - } + public function getShifts() + { + return $this->shifts; + } } -?> \ No newline at end of file diff --git a/includes/view/ShiftCalendarRenderer.php b/includes/view/ShiftCalendarRenderer.php index 8c8e72a4..d40f63a1 100644 --- a/includes/view/ShiftCalendarRenderer.php +++ b/includes/view/ShiftCalendarRenderer.php @@ -2,7 +2,8 @@ namespace Engelsystem; -class ShiftCalendarRenderer { +class ShiftCalendarRenderer +{ /** * 15m * 60s/m = 900s @@ -25,116 +26,123 @@ class ShiftCalendarRenderer { */ const TIME_MARGIN = 1800; - private $lanes; + private $lanes; - private $shiftsFilter; + private $shiftsFilter; - private $firstBlockStartTime = null; + private $firstBlockStartTime = null; - private $lastBlockEndTime = null; + private $lastBlockEndTime = null; - private $blocksPerSlot = null; + private $blocksPerSlot = null; - private $needed_angeltypes = null; + private $needed_angeltypes = null; - private $shift_entries = null; + private $shift_entries = null; - public function __construct($shifts, $needed_angeltypes, $shift_entries, ShiftsFilter $shiftsFilter) { - $this->shiftsFilter = $shiftsFilter; - $this->firstBlockStartTime = $this->calcFirstBlockStartTime($shifts); - $this->lastBlockEndTime = $this->calcLastBlockEndTime($shifts); - $this->lanes = $this->assignShiftsToLanes($shifts); - $this->needed_angeltypes = $needed_angeltypes; - $this->shift_entries = $shift_entries; - } + public function __construct($shifts, $needed_angeltypes, $shift_entries, ShiftsFilter $shiftsFilter) + { + $this->shiftsFilter = $shiftsFilter; + $this->firstBlockStartTime = $this->calcFirstBlockStartTime($shifts); + $this->lastBlockEndTime = $this->calcLastBlockEndTime($shifts); + $this->lanes = $this->assignShiftsToLanes($shifts); + $this->needed_angeltypes = $needed_angeltypes; + $this->shift_entries = $shift_entries; + } /** * Assigns the shifts to different lanes per room if they collide * * @param Shift[] $shifts * The shifts to assign - * + * * @return Returns an array that assigns a room_id to an array of ShiftCalendarLane containing the shifts */ - private function assignShiftsToLanes($shifts) { - // array that assigns a room id to a list of lanes (per room) + private function assignShiftsToLanes($shifts) + { + // array that assigns a room id to a list of lanes (per room) $lanes = []; - foreach ($shifts as $shift) { - $room_id = $shift['RID']; - $header = Room_name_render([ + foreach ($shifts as $shift) { + $room_id = $shift['RID']; + $header = Room_name_render([ 'RID' => $room_id, - 'Name' => $shift['room_name'] + 'Name' => $shift['room_name'] ]); - if (! isset($lanes[$room_id])) { - // initialize room with one lane + if (! isset($lanes[$room_id])) { + // initialize room with one lane $lanes[$room_id] = [ - new ShiftCalendarLane($header, $this->getFirstBlockStartTime(), $this->getBlocksPerSlot()) + new ShiftCalendarLane($header, $this->getFirstBlockStartTime(), $this->getBlocksPerSlot()) ]; - } + } // Try to add the shift to the existing lanes for this room $shift_added = false; - foreach ($lanes[$room_id] as $lane) { - $shift_added = $lane->addShift($shift); - if ($shift_added == true) { - break; - } - } + foreach ($lanes[$room_id] as $lane) { + $shift_added = $lane->addShift($shift); + if ($shift_added == true) { + break; + } + } // If all lanes for this room are busy, create a new lane and add shift to it if ($shift_added == false) { - $newLane = new ShiftCalendarLane($header, $this->getFirstBlockStartTime(), $this->getBlocksPerSlot()); - if (! $newLane->addShift($shift)) { - engelsystem_error("Unable to add shift to new lane."); - } - $lanes[$room_id][] = $newLane; + $newLane = new ShiftCalendarLane($header, $this->getFirstBlockStartTime(), $this->getBlocksPerSlot()); + if (! $newLane->addShift($shift)) { + engelsystem_error("Unable to add shift to new lane."); + } + $lanes[$room_id][] = $newLane; + } } - } - return $lanes; + return $lanes; } - public function getFirstBlockStartTime() { - return $this->firstBlockStartTime; - } + public function getFirstBlockStartTime() + { + return $this->firstBlockStartTime; + } - public function getLastBlockEndTime() { - return $this->lastBlockEndTime; - } + public function getLastBlockEndTime() + { + return $this->lastBlockEndTime; + } - public function getBlocksPerSlot() { - if ($this->blocksPerSlot == null) { - $this->blocksPerSlot = $this->calcBlocksPerSlot(); + public function getBlocksPerSlot() + { + if ($this->blocksPerSlot == null) { + $this->blocksPerSlot = $this->calcBlocksPerSlot(); + } + return $this->blocksPerSlot; } - return $this->blocksPerSlot; - } /** * Renders the whole calendar * * @return the generated html */ - public function render() { - if (count($this->lanes) == 0) { - return ''; - } - return div('shift-calendar', [ + public function render() + { + if (count($this->lanes) == 0) { + return ''; + } + return div('shift-calendar', [ $this->renderTimeLane(), - $this->renderShiftLanes() + $this->renderShiftLanes() ]) . $this->renderLegend(); } /** * Renders the lanes containing the shifts */ - private function renderShiftLanes() { - $html = ""; - foreach ($this->lanes as $room_lanes) { - foreach ($room_lanes as $lane) { - $html .= $this->renderLane($lane); + private function renderShiftLanes() + { + $html = ""; + foreach ($this->lanes as $room_lanes) { + foreach ($room_lanes as $lane) { + $html .= $this->renderLane($lane); + } } - } - return $html; + return $html; } /** @@ -143,32 +151,33 @@ class ShiftCalendarRenderer { * @param ShiftCalendarLane $lane * The lane to render */ - private function renderLane(ShiftCalendarLane $lane) { - global $user; + private function renderLane(ShiftCalendarLane $lane) + { + global $user; - $shift_renderer = new ShiftCalendarShiftRenderer(); - $html = ""; - $rendered_until = $this->getFirstBlockStartTime(); + $shift_renderer = new ShiftCalendarShiftRenderer(); + $html = ""; + $rendered_until = $this->getFirstBlockStartTime(); - foreach ($lane->getShifts() as $shift) { - while ($rendered_until + ShiftCalendarRenderer::SECONDS_PER_ROW <= $shift['start']) { - $html .= $this->renderTick($rendered_until); - $rendered_until += ShiftCalendarRenderer::SECONDS_PER_ROW; - } + foreach ($lane->getShifts() as $shift) { + while ($rendered_until + ShiftCalendarRenderer::SECONDS_PER_ROW <= $shift['start']) { + $html .= $this->renderTick($rendered_until); + $rendered_until += ShiftCalendarRenderer::SECONDS_PER_ROW; + } - list($shift_height, $shift_html) = $shift_renderer->render($shift, $this->needed_angeltypes[$shift['SID']], $this->shift_entries[$shift['SID']], $user); - $html .= $shift_html; - $rendered_until += $shift_height * ShiftCalendarRenderer::SECONDS_PER_ROW; - } + list($shift_height, $shift_html) = $shift_renderer->render($shift, $this->needed_angeltypes[$shift['SID']], $this->shift_entries[$shift['SID']], $user); + $html .= $shift_html; + $rendered_until += $shift_height * ShiftCalendarRenderer::SECONDS_PER_ROW; + } - while ($rendered_until < $this->getLastBlockEndTime()) { - $html .= $this->renderTick($rendered_until); - $rendered_until += ShiftCalendarRenderer::SECONDS_PER_ROW; - } + while ($rendered_until < $this->getLastBlockEndTime()) { + $html .= $this->renderTick($rendered_until); + $rendered_until += ShiftCalendarRenderer::SECONDS_PER_ROW; + } - return div('lane', [ + return div('lane', [ div('header', $lane->getHeader()), - $html + $html ]); } @@ -181,77 +190,81 @@ class ShiftCalendarRenderer { * Should time labels be generated? * @return rendered tick html */ - private function renderTick($time, $label = false) { - if ($time % (24 * 60 * 60) == 23 * 60 * 60) { - if (! $label) { - return div('tick day'); - } - return div('tick day', [ - date('m-dH:i', $time) + private function renderTick($time, $label = false) + { + if ($time % (24 * 60 * 60) == 23 * 60 * 60) { + if (! $label) { + return div('tick day'); + } + return div('tick day', [ + date('m-dH:i', $time) ]); - } elseif ($time % (60 * 60) == 0) { - if (! $label) { - return div('tick hour'); - } - return div('tick hour', [ - date('m-dH:i', $time) + } elseif ($time % (60 * 60) == 0) { + if (! $label) { + return div('tick hour'); + } + return div('tick hour', [ + date('m-dH:i', $time) ]); - } - return div('tick'); + } + return div('tick'); } /** * Renders the left time lane including hour/day ticks */ - private function renderTimeLane() { - $time_slot = [ + private function renderTimeLane() + { + $time_slot = [ div('header', [ - _("Time") - ]) + _("Time") + ]) ]; - for ($block = 0; $block < $this->getBlocksPerSlot(); $block ++) { - $thistime = $this->getFirstBlockStartTime() + ($block * ShiftCalendarRenderer::SECONDS_PER_ROW); - $time_slot[] = $this->renderTick($thistime, true); - } - return div('lane time', $time_slot); + for ($block = 0; $block < $this->getBlocksPerSlot(); $block ++) { + $thistime = $this->getFirstBlockStartTime() + ($block * ShiftCalendarRenderer::SECONDS_PER_ROW); + $time_slot[] = $this->renderTick($thistime, true); + } + return div('lane time', $time_slot); } - private function calcFirstBlockStartTime($shifts) { - $start_time = $this->shiftsFilter->getEndTime(); - foreach ($shifts as $shift) { - if ($shift['start'] < $start_time) { - $start_time = $shift['start']; - } + private function calcFirstBlockStartTime($shifts) + { + $start_time = $this->shiftsFilter->getEndTime(); + foreach ($shifts as $shift) { + if ($shift['start'] < $start_time) { + $start_time = $shift['start']; + } + } + return ShiftCalendarRenderer::SECONDS_PER_ROW * floor(($start_time - ShiftCalendarRenderer::TIME_MARGIN) / ShiftCalendarRenderer::SECONDS_PER_ROW); } - return ShiftCalendarRenderer::SECONDS_PER_ROW * floor(($start_time - ShiftCalendarRenderer::TIME_MARGIN) / ShiftCalendarRenderer::SECONDS_PER_ROW); - } - private function calcLastBlockEndTime($shifts) { - $end_time = $this->shiftsFilter->getStartTime(); - foreach ($shifts as $shift) { - if ($shift['end'] > $end_time) { - $end_time = $shift['end']; - } + private function calcLastBlockEndTime($shifts) + { + $end_time = $this->shiftsFilter->getStartTime(); + foreach ($shifts as $shift) { + if ($shift['end'] > $end_time) { + $end_time = $shift['end']; + } + } + return ShiftCalendarRenderer::SECONDS_PER_ROW * ceil(($end_time + ShiftCalendarRenderer::TIME_MARGIN) / ShiftCalendarRenderer::SECONDS_PER_ROW); } - return ShiftCalendarRenderer::SECONDS_PER_ROW * ceil(($end_time + ShiftCalendarRenderer::TIME_MARGIN) / ShiftCalendarRenderer::SECONDS_PER_ROW); - } - private function calcBlocksPerSlot() { - return ceil(($this->getLastBlockEndTime() - $this->getFirstBlockStartTime()) / ShiftCalendarRenderer::SECONDS_PER_ROW); - } + private function calcBlocksPerSlot() + { + return ceil(($this->getLastBlockEndTime() - $this->getFirstBlockStartTime()) / ShiftCalendarRenderer::SECONDS_PER_ROW); + } /** * Renders a legend explaining the shift coloring */ - private function renderLegend() { - return div('legend', [ + private function renderLegend() + { + return div('legend', [ label(_('Your shift'), 'primary'), label(_('Help needed'), 'danger'), label(_('Other angeltype needed / collides with my shifts'), 'warning'), label(_('Shift is full'), 'success'), - label(_('Shift running/ended'), 'default') + label(_('Shift running/ended'), 'default') ]); } } - -?> \ No newline at end of file diff --git a/includes/view/ShiftCalendarShiftRenderer.php b/includes/view/ShiftCalendarShiftRenderer.php index fdfefcc2..6d6523c5 100644 --- a/includes/view/ShiftCalendarShiftRenderer.php +++ b/includes/view/ShiftCalendarShiftRenderer.php @@ -5,7 +5,8 @@ namespace Engelsystem; /** * Renders a single shift for the shift calendar */ -class ShiftCalendarShiftRenderer { +class ShiftCalendarShiftRenderer +{ /** * Renders a shift @@ -15,18 +16,19 @@ class ShiftCalendarShiftRenderer { * @param User $user * The user who is viewing the shift calendar */ - public function render($shift, $needed_angeltypes, $shift_entries, $user) { - $info_text = ""; - if ($shift['title'] != '') { - $info_text = glyph('info-sign') . $shift['title'] . '
'; - } - list($shift_signup_state, $shifts_row) = $this->renderShiftNeededAngeltypes($shift, $needed_angeltypes, $shift_entries, $user); + public function render($shift, $needed_angeltypes, $shift_entries, $user) + { + $info_text = ""; + if ($shift['title'] != '') { + $info_text = glyph('info-sign') . $shift['title'] . '
'; + } + list($shift_signup_state, $shifts_row) = $this->renderShiftNeededAngeltypes($shift, $needed_angeltypes, $shift_entries, $user); - $class = $this->classForSignupState($shift_signup_state); + $class = $this->classForSignupState($shift_signup_state); - $blocks = ceil(($shift["end"] - $shift["start"]) / ShiftCalendarRenderer::SECONDS_PER_ROW); - $blocks = max(1, $blocks); - return [ + $blocks = ceil(($shift["end"] - $shift["start"]) / ShiftCalendarRenderer::SECONDS_PER_ROW); + $blocks = max(1, $blocks); + return [ $blocks, div('shift panel panel-' . $class . '" style="height: ' . ($blocks * ShiftCalendarRenderer::BLOCK_HEIGHT - ShiftCalendarRenderer::MARGIN) . 'px"', [ $this->renderShiftHead($shift), @@ -34,17 +36,18 @@ class ShiftCalendarShiftRenderer { $info_text, Room_name_render([ 'RID' => $shift['RID'], - 'Name' => $shift['room_name'] - ]) + 'Name' => $shift['room_name'] + ]) ]), $shifts_row, - div('shift-spacer') + div('shift-spacer') ]) ]; } - private function classForSignupState(ShiftSignupState $shiftSignupState) { - switch ($shiftSignupState->getState()) { + private function classForSignupState(ShiftSignupState $shiftSignupState) + { + switch ($shiftSignupState->getState()) { case ShiftSignupState::ADMIN: case ShiftSignupState::OCCUPIED: return 'success'; @@ -62,50 +65,51 @@ class ShiftCalendarShiftRenderer { case ShiftSignupState::FREE: return 'danger'; } - } + } - private function renderShiftNeededAngeltypes($shift, $needed_angeltypes, $shift_entries, $user) { - global $privileges; + private function renderShiftNeededAngeltypes($shift, $needed_angeltypes, $shift_entries, $user) + { + global $privileges; - $shift_entries_filtered = []; - foreach ($needed_angeltypes as $needed_angeltype) { - $shift_entries_filtered[$needed_angeltype['id']] = []; - } - foreach ($shift_entries as $shift_entry) { - $shift_entries_filtered[$shift_entry['TID']][] = $shift_entry; - } + $shift_entries_filtered = []; + foreach ($needed_angeltypes as $needed_angeltype) { + $shift_entries_filtered[$needed_angeltype['id']] = []; + } + foreach ($shift_entries as $shift_entry) { + $shift_entries_filtered[$shift_entry['TID']][] = $shift_entry; + } - $html = ""; - $shift_signup_state = null; - foreach ($needed_angeltypes as $angeltype) { - if ($angeltype['count'] > 0 || count($shift_entries_filtered[$angeltype['id']]) > 0) { - list($angeltype_signup_state, $angeltype_html) = $this->renderShiftNeededAngeltype($shift, $shift_entries_filtered[$angeltype['id']], $angeltype, $user); + $html = ""; + $shift_signup_state = null; + foreach ($needed_angeltypes as $angeltype) { + if ($angeltype['count'] > 0 || count($shift_entries_filtered[$angeltype['id']]) > 0) { + list($angeltype_signup_state, $angeltype_html) = $this->renderShiftNeededAngeltype($shift, $shift_entries_filtered[$angeltype['id']], $angeltype, $user); + if ($shift_signup_state == null) { + $shift_signup_state = $angeltype_signup_state; + } else { + $shift_signup_state->combineWith($angeltype_signup_state); + } + $html .= $angeltype_html; + } + } if ($shift_signup_state == null) { - $shift_signup_state = $angeltype_signup_state; - } else { - $shift_signup_state->combineWith($angeltype_signup_state); + $shift_signup_state = new ShiftSignupState(ShiftSignupState::SHIFT_ENDED, 0); } - $html .= $angeltype_html; - } - } - if ($shift_signup_state == null) { - $shift_signup_state = new ShiftSignupState(ShiftSignupState::SHIFT_ENDED, 0); - } - if (in_array('user_shifts_admin', $privileges)) { - $html .= '
  • ' . button(page_link_to('user_shifts') . '&shift_id=' . $shift['SID'], _("Add more angels"), 'btn-xs') . '
  • '; - } - if ($html != '') { - return [ + if (in_array('user_shifts_admin', $privileges)) { + $html .= '
  • ' . button(page_link_to('user_shifts') . '&shift_id=' . $shift['SID'], _("Add more angels"), 'btn-xs') . '
  • '; + } + if ($html != '') { + return [ $shift_signup_state, - '
      ' . $html . '
    ' + '
      ' . $html . '
    ' ]; - } - return [ + } + return [ $shift_signup_state, - "" + "" ]; - } + } /** * Renders a list entry containing the needed angels for an angeltype @@ -117,15 +121,16 @@ class ShiftCalendarShiftRenderer { * @param User $user * The user who is viewing the shift calendar */ - private function renderShiftNeededAngeltype($shift, $shift_entries, $angeltype, $user) { - $entry_list = []; - foreach ($shift_entries as $entry) { - $style = $entry['freeloaded'] ? " text-decoration: line-through;" : ''; - $entry_list[] = "" . User_Nick_render($entry) . ""; - } - $shift_signup_state = Shift_signup_allowed($user, $shift, $angeltype, null, null, $angeltype, $shift_entries); - $inner_text = sprintf(ngettext("%d helper needed", "%d helpers needed", $shift_signup_state->getFreeEntries()), $shift_signup_state->getFreeEntries()); - switch ($shift_signup_state->getState()) { + private function renderShiftNeededAngeltype($shift, $shift_entries, $angeltype, $user) + { + $entry_list = []; + foreach ($shift_entries as $entry) { + $style = $entry['freeloaded'] ? " text-decoration: line-through;" : ''; + $entry_list[] = "" . User_Nick_render($entry) . ""; + } + $shift_signup_state = Shift_signup_allowed($user, $shift, $angeltype, null, null, $angeltype, $shift_entries); + $inner_text = sprintf(ngettext("%d helper needed", "%d helpers needed", $shift_signup_state->getFreeEntries()), $shift_signup_state->getFreeEntries()); + switch ($shift_signup_state->getState()) { case ShiftSignupState::ADMIN: case ShiftSignupState::FREE: // When admin or free display a link + button for sign up @@ -139,10 +144,10 @@ class ShiftCalendarShiftRenderer { case ShiftSignupState::ANGELTYPE: if ($angeltype['restricted'] == 1) { - // User has to be confirmed on the angeltype first + // User has to be confirmed on the angeltype first $entry_list[] = $inner_text . glyph('lock'); } else { - // Add link to join the angeltype first + // Add link to join the angeltype first $entry_list[] = $inner_text . '
    ' . button(page_link_to('user_angeltypes') . '&action=add&angeltype_id=' . $angeltype['id'], sprintf(_('Become %s'), $angeltype['name']), 'btn-xs'); } break; @@ -158,13 +163,13 @@ class ShiftCalendarShiftRenderer { break; } - $shifts_row = '
  • '; - $shifts_row .= '' . AngelType_name_render($angeltype) . ': '; - $shifts_row .= join(", ", $entry_list); - $shifts_row .= '
  • '; - return [ + $shifts_row = '
  • '; + $shifts_row .= '' . AngelType_name_render($angeltype) . ': '; + $shifts_row .= join(", ", $entry_list); + $shifts_row .= '
  • '; + return [ $shift_signup_state, - $shifts_row + $shifts_row ]; } @@ -174,22 +179,21 @@ class ShiftCalendarShiftRenderer { * @param Shift $shift * The shift */ - private function renderShiftHead($shift) { - global $privileges; + private function renderShiftHead($shift) + { + global $privileges; - $header_buttons = ""; - if (in_array('admin_shifts', $privileges)) { - $header_buttons = '
    ' . table_buttons([ + $header_buttons = ""; + if (in_array('admin_shifts', $privileges)) { + $header_buttons = '
    ' . table_buttons([ button(page_link_to('user_shifts') . '&edit_shift=' . $shift['SID'], glyph('edit'), 'btn-xs'), - button(page_link_to('user_shifts') . '&delete_shift=' . $shift['SID'], glyph('trash'), 'btn-xs') + button(page_link_to('user_shifts') . '&delete_shift=' . $shift['SID'], glyph('trash'), 'btn-xs') ]) . '
    '; - } - $shift_heading = date('H:i', $shift['start']) . ' ‐ ' . date('H:i', $shift['end']) . ' — ' . $shift['name']; - return div('panel-heading', [ + } + $shift_heading = date('H:i', $shift['start']) . ' ‐ ' . date('H:i', $shift['end']) . ' — ' . $shift['name']; + return div('panel-heading', [ '' . $shift_heading . '', - $header_buttons + $header_buttons ]); } } - -?> \ No newline at end of file diff --git a/includes/view/ShiftEntry_view.php b/includes/view/ShiftEntry_view.php index 5bf10a91..2c31805c 100644 --- a/includes/view/ShiftEntry_view.php +++ b/includes/view/ShiftEntry_view.php @@ -8,18 +8,19 @@ * @param string $title * @param string $type * @param string $comment - * + * * @return string */ -function ShiftEntry_edit_view($angel, $date, $location, $title, $type, $comment, $freeloaded, $freeload_comment, $user_admin_shifts = false) { - $freeload_form = []; - if ($user_admin_shifts) { - $freeload_form = [ +function ShiftEntry_edit_view($angel, $date, $location, $title, $type, $comment, $freeloaded, $freeload_comment, $user_admin_shifts = false) +{ + $freeload_form = []; + if ($user_admin_shifts) { + $freeload_form = [ form_checkbox('freeloaded', _("Freeloaded"), $freeloaded), - form_textarea('freeload_comment', _("Freeload comment (Only for shift coordination):"), $freeload_comment) + form_textarea('freeload_comment', _("Freeload comment (Only for shift coordination):"), $freeload_comment) ]; - } - return page_with_title(_("Edit shift entry"), [ + } + return page_with_title(_("Edit shift entry"), [ msg(), form([ form_info(_("Angel:"), $angel), @@ -29,9 +30,7 @@ function ShiftEntry_edit_view($angel, $date, $location, $title, $type, $comment, form_info(_("Type:"), $type), form_textarea('comment', _("Comment (for your eyes only):"), $comment), join("", $freeload_form), - form_submit('submit', _("Save")) - ]) + form_submit('submit', _("Save")) + ]) ]); } - -?> \ No newline at end of file diff --git a/includes/view/ShiftTypes_view.php b/includes/view/ShiftTypes_view.php index 3e4cccc6..e2850ab0 100644 --- a/includes/view/ShiftTypes_view.php +++ b/includes/view/ShiftTypes_view.php @@ -1,84 +1,87 @@ ' . $shifttype['name'] . ''; - } - return $shifttype['name']; +function ShiftType_name_render($shifttype) +{ + global $privileges; + if (in_array('shifttypes', $privileges)) { + return '' . $shifttype['name'] . ''; + } + return $shifttype['name']; } -function ShiftType_delete_view($shifttype) { - return page_with_title(sprintf(_("Delete shifttype %s"), $shifttype['name']), [ +function ShiftType_delete_view($shifttype) +{ + return page_with_title(sprintf(_("Delete shifttype %s"), $shifttype['name']), [ info(sprintf(_("Do you want to delete shifttype %s?"), $shifttype['name']), true), buttons([ button(page_link_to('shifttypes'), _("cancel"), 'cancel'), - button(page_link_to('shifttypes') . '&action=delete&shifttype_id=' . $shifttype['id'] . '&confirmed', _("delete"), 'ok') - ]) + button(page_link_to('shifttypes') . '&action=delete&shifttype_id=' . $shifttype['id'] . '&confirmed', _("delete"), 'ok') + ]) ]); } -function ShiftType_edit_view($name, $angeltype_id, $angeltypes, $description, $shifttype_id) { - $angeltypes_select = [ - '' => _('All') +function ShiftType_edit_view($name, $angeltype_id, $angeltypes, $description, $shifttype_id) +{ + $angeltypes_select = [ + '' => _('All') ]; - foreach ($angeltypes as $angeltype) { - $angeltypes_select[$angeltype['id']] = $angeltype['name']; - } + foreach ($angeltypes as $angeltype) { + $angeltypes_select[$angeltype['id']] = $angeltype['name']; + } - return page_with_title($shifttype_id ? _('Edit shifttype') : _('Create shifttype'), [ + return page_with_title($shifttype_id ? _('Edit shifttype') : _('Create shifttype'), [ msg(), buttons([ - button(page_link_to('shifttypes'), shifttypes_title(), 'back') + button(page_link_to('shifttypes'), shifttypes_title(), 'back') ]), form([ form_text('name', _('Name'), $name), form_select('angeltype_id', _('Angeltype'), $angeltypes_select, $angeltype_id), form_textarea('description', _('Description'), $description), form_info('', _('Please use markdown for the description.')), - form_submit('submit', _('Save')) - ]) + form_submit('submit', _('Save')) + ]) ]); } -function ShiftType_view($shifttype, $angeltype) { - $parsedown = new Parsedown(); - $title = $shifttype['name']; - if ($angeltype) { - $title .= ' ' . sprintf(_('for team %s'), $angeltype['name']) . ''; - } - return page_with_title($title, [ +function ShiftType_view($shifttype, $angeltype) +{ + $parsedown = new Parsedown(); + $title = $shifttype['name']; + if ($angeltype) { + $title .= ' ' . sprintf(_('for team %s'), $angeltype['name']) . ''; + } + return page_with_title($title, [ msg(), buttons([ button(page_link_to('shifttypes'), shifttypes_title(), 'back'), $angeltype ? button(page_link_to('angeltypes') . '&action=view&angeltype_id=' . $angeltype['id'], $angeltype['name']) : '', button(page_link_to('shifttypes') . '&action=edit&shifttype_id=' . $shifttype['id'], _('edit'), 'edit'), - button(page_link_to('shifttypes') . '&action=delete&shifttype_id=' . $shifttype['id'], _('delete'), 'delete') + button(page_link_to('shifttypes') . '&action=delete&shifttype_id=' . $shifttype['id'], _('delete'), 'delete') ]), heading(_("Description"), 2), - $parsedown->parse($shifttype['description']) + $parsedown->parse($shifttype['description']) ]); } -function ShiftTypes_list_view($shifttypes) { - foreach ($shifttypes as &$shifttype) { - $shifttype['name'] = '' . $shifttype['name'] . ''; - $shifttype['actions'] = table_buttons([ +function ShiftTypes_list_view($shifttypes) +{ + foreach ($shifttypes as &$shifttype) { + $shifttype['name'] = '' . $shifttype['name'] . ''; + $shifttype['actions'] = table_buttons([ button(page_link_to('shifttypes') . '&action=edit&shifttype_id=' . $shifttype['id'], _('edit'), 'btn-xs'), - button(page_link_to('shifttypes') . '&action=delete&shifttype_id=' . $shifttype['id'], _('delete'), 'btn-xs') + button(page_link_to('shifttypes') . '&action=delete&shifttype_id=' . $shifttype['id'], _('delete'), 'btn-xs') ]); - } + } - return page_with_title(shifttypes_title(), [ + return page_with_title(shifttypes_title(), [ msg(), buttons([ - button(page_link_to('shifttypes') . '&action=edit', _('New shifttype'), 'add') + button(page_link_to('shifttypes') . '&action=edit', _('New shifttype'), 'add') ]), table([ 'name' => _('Name'), - 'actions' => '' - ], $shifttypes) + 'actions' => '' + ], $shifttypes) ]); } - -?> \ No newline at end of file diff --git a/includes/view/ShiftsFilterRenderer.php b/includes/view/ShiftsFilterRenderer.php index 301f31a2..9b7df7cd 100644 --- a/includes/view/ShiftsFilterRenderer.php +++ b/includes/view/ShiftsFilterRenderer.php @@ -2,7 +2,8 @@ namespace Engelsystem; -class ShiftsFilterRenderer { +class ShiftsFilterRenderer +{ /** * The shiftFilter to render. @@ -26,44 +27,46 @@ class ShiftsFilterRenderer { */ private $days = []; - public function __construct(ShiftsFilter $shiftsFilter) { - $this->shiftsFilter = $shiftsFilter; - } + public function __construct(ShiftsFilter $shiftsFilter) + { + $this->shiftsFilter = $shiftsFilter; + } /** * Renders the filter. * * @return Generated HTML */ - public function render($link_base) { - $toolbar = []; - if ($this->daySelectionEnabled && ! empty($this->days)) { - $selected_day = date("Y-m-d", $this->shiftsFilter->getStartTime()); - $day_dropdown_items = []; - foreach ($this->days as $day) { - $day_dropdown_items[] = toolbar_item_link($link_base . '&shifts_filter_day=' . $day, '', $day); + public function render($link_base) + { + $toolbar = []; + if ($this->daySelectionEnabled && ! empty($this->days)) { + $selected_day = date("Y-m-d", $this->shiftsFilter->getStartTime()); + $day_dropdown_items = []; + foreach ($this->days as $day) { + $day_dropdown_items[] = toolbar_item_link($link_base . '&shifts_filter_day=' . $day, '', $day); + } + $toolbar[] = toolbar_dropdown('', $selected_day, $day_dropdown_items, 'active'); } - $toolbar[] = toolbar_dropdown('', $selected_day, $day_dropdown_items, 'active'); - } - return div('form-group', [ - toolbar_pills($toolbar) + return div('form-group', [ + toolbar_pills($toolbar) ]); } /** * Should the filter display a day selection. */ - public function enableDaySelection($days) { - $this->daySelectionEnabled = true; - $this->days = $days; + public function enableDaySelection($days) + { + $this->daySelectionEnabled = true; + $this->days = $days; } /** * Should the filter display a day selection. */ - public function isDaySelectionEnabled() { - return $this->daySelectionEnabled; + public function isDaySelectionEnabled() + { + return $this->daySelectionEnabled; } } - -?> \ No newline at end of file diff --git a/includes/view/Shifts_view.php b/includes/view/Shifts_view.php index 765a6f3b..5b73c218 100644 --- a/includes/view/Shifts_view.php +++ b/includes/view/Shifts_view.php @@ -1,53 +1,56 @@ ', $info); +function Shift_editor_info_render($shift) +{ + $info = []; + if ($shift['created_by_user_id'] != null) { + $info[] = sprintf(glyph('plus') . _("created at %s by %s"), date('Y-m-d H:i', $shift['created_at_timestamp']), User_Nick_render(User($shift['created_by_user_id']))); + } + if ($shift['edited_by_user_id'] != null) { + $info[] = sprintf(glyph('pencil') . _("edited at %s by %s"), date('Y-m-d H:i', $shift['edited_at_timestamp']), User_Nick_render(User($shift['edited_by_user_id']))); + } + return join('
    ', $info); } -function Shift_signup_button_render($shift, $angeltype, $user_angeltype = null) { - global $user; +function Shift_signup_button_render($shift, $angeltype, $user_angeltype = null) +{ + global $user; - if ($user_angeltype == null) { - $user_angeltype = UserAngelType_by_User_and_AngelType($user, $angeltype); - } + if ($user_angeltype == null) { + $user_angeltype = UserAngelType_by_User_and_AngelType($user, $angeltype); + } - if ($angeltype['shift_signup_state']->isSignupAllowed()) { - return button(page_link_to('user_shifts') . '&shift_id=' . $shift['SID'] . '&type_id=' . $angeltype['id'], _('Sign up')); - } elseif ($user_angeltype == null) { - return button(page_link_to('angeltypes') . '&action=view&angeltype_id=' . $angeltype['id'], sprintf(_('Become %s'), $angeltype['name'])); - } - return ''; + if ($angeltype['shift_signup_state']->isSignupAllowed()) { + return button(page_link_to('user_shifts') . '&shift_id=' . $shift['SID'] . '&type_id=' . $angeltype['id'], _('Sign up')); + } elseif ($user_angeltype == null) { + return button(page_link_to('angeltypes') . '&action=view&angeltype_id=' . $angeltype['id'], sprintf(_('Become %s'), $angeltype['name'])); + } + return ''; } -function Shift_view($shift, $shifttype, $room, $angeltypes_source, ShiftSignupState $shift_signup_state) { - global $privileges; +function Shift_view($shift, $shifttype, $room, $angeltypes_source, ShiftSignupState $shift_signup_state) +{ + global $privileges; - $shift_admin = in_array('admin_shifts', $privileges); - $user_shift_admin = in_array('user_shifts_admin', $privileges); - $admin_rooms = in_array('admin_rooms', $privileges); - $admin_shifttypes = in_array('shifttypes', $privileges); + $shift_admin = in_array('admin_shifts', $privileges); + $user_shift_admin = in_array('user_shifts_admin', $privileges); + $admin_rooms = in_array('admin_rooms', $privileges); + $admin_shifttypes = in_array('shifttypes', $privileges); - $parsedown = new Parsedown(); + $parsedown = new Parsedown(); - $angeltypes = []; - foreach ($angeltypes_source as $angeltype) { - $angeltypes[$angeltype['id']] = $angeltype; - } + $angeltypes = []; + foreach ($angeltypes_source as $angeltype) { + $angeltypes[$angeltype['id']] = $angeltype; + } - $needed_angels = ''; - foreach ($shift['NeedAngels'] as $needed_angeltype) { - $needed_angels .= Shift_view_render_needed_angeltype($needed_angeltype, $angeltypes, $shift, $user_shift_admin); - } + $needed_angels = ''; + foreach ($shift['NeedAngels'] as $needed_angeltype) { + $needed_angels .= Shift_view_render_needed_angeltype($needed_angeltype, $angeltypes, $shift, $user_shift_admin); + } - return page_with_title($shift['name'] . ' %c', [ + return page_with_title($shift['name'] . ' %c', [ msg(), $shift_signup_state->getState() == ShiftSignupState::COLLIDES ? info(_('This shift collides with one of your shifts.'), true) : '', $shift_signup_state->getState() == ShiftSignupState::SIGNED_UP ? info(_('You are signed up for this shift.'), true) : '', @@ -55,12 +58,12 @@ function Shift_view($shift, $shifttype, $room, $angeltypes_source, ShiftSignupSt $shift_admin ? button(shift_edit_link($shift), glyph('pencil') . _('edit')) : '', $shift_admin ? button(shift_delete_link($shift), glyph('trash') . _('delete')) : '', $admin_shifttypes ? button(shifttype_link($shifttype), $shifttype['name']) : '', - $admin_rooms ? button(room_link($room), glyph('map-marker') . $room['Name']) : '' + $admin_rooms ? button(room_link($room), glyph('map-marker') . $room['Name']) : '' ]) : '', div('row', [ div('col-sm-3 col-xs-6', [ '

    ' . _('Title') . '

    ', - '

    ' . ($shift['URL'] != '' ? '' . $shift['title'] . '' : $shift['title']) . '

    ' + '

    ' . ($shift['URL'] != '' ? '' . $shift['title'] . '' : $shift['title']) . '

    ' ]), div('col-sm-3 col-xs-6', [ '

    ' . _('Start') . '

    ', @@ -68,7 +71,7 @@ function Shift_view($shift, $shifttype, $room, $angeltypes_source, ShiftSignupSt glyph('calendar') . date(_('Y-m-d'), $shift['start']), '
    ', glyph('time') . date('H:i', $shift['start']), - '

    ' + '

    ' ]), div('col-sm-3 col-xs-6', [ '

    ' . _('End') . '

    ', @@ -76,88 +79,90 @@ function Shift_view($shift, $shifttype, $room, $angeltypes_source, ShiftSignupSt glyph('calendar') . date(_('Y-m-d'), $shift['end']), '
    ', glyph('time') . date('H:i', $shift['end']), - '

    ' + '

    ' ]), div('col-sm-3 col-xs-6', [ '

    ' . _('Location') . '

    ', - '

    ' . Room_name_render($room) . '

    ' - ]) + '

    ' . Room_name_render($room) . '

    ' + ]) ]), div('row', [ div('col-sm-6', [ '

    ' . _('Needed angels') . '

    ', - '
    ' . $needed_angels . '
    ' + '
    ' . $needed_angels . '
    ' ]), div('col-sm-6', [ '

    ' . _('Description') . '

    ', - $parsedown->parse($shifttype['description']) - ]) + $parsedown->parse($shifttype['description']) + ]) ]), - $shift_admin ? Shift_editor_info_render($shift) : '' + $shift_admin ? Shift_editor_info_render($shift) : '' ]); } -function Shift_view_render_needed_angeltype($needed_angeltype, $angeltypes, $shift, $user_shift_admin) { - global $user; +function Shift_view_render_needed_angeltype($needed_angeltype, $angeltypes, $shift, $user_shift_admin) +{ + global $user; - $angeltype = $angeltypes[$needed_angeltype['TID']]; - $angeltype_supporter = User_is_AngelType_supporter($user, $angeltype); + $angeltype = $angeltypes[$needed_angeltype['TID']]; + $angeltype_supporter = User_is_AngelType_supporter($user, $angeltype); - $needed_angels = ''; + $needed_angels = ''; - $class = 'progress-bar-warning'; - if ($needed_angeltype['taken'] == 0) { - $class = 'progress-bar-danger'; - } - if ($needed_angeltype['taken'] >= $needed_angeltype['count']) { - $class = 'progress-bar-success'; - } - $needed_angels .= '
    '; + $class = 'progress-bar-warning'; + if ($needed_angeltype['taken'] == 0) { + $class = 'progress-bar-danger'; + } + if ($needed_angeltype['taken'] >= $needed_angeltype['count']) { + $class = 'progress-bar-success'; + } + $needed_angels .= '
    '; - $needed_angels .= '
    ' . Shift_signup_button_render($shift, $angeltype) . '
    '; + $needed_angels .= '
    ' . Shift_signup_button_render($shift, $angeltype) . '
    '; - $needed_angels .= '

    ' . AngelType_name_render($angeltype) . '

    '; - $bar_max = max($needed_angeltype['count'] * 10, $needed_angeltype['taken'] * 10, 10); - $bar_value = max(1, $needed_angeltype['taken'] * 10); - $needed_angels .= progress_bar(0, $bar_max, $bar_value, $class, $needed_angeltype['taken'] . ' / ' . $needed_angeltype['count']); + $needed_angels .= '

    ' . AngelType_name_render($angeltype) . '

    '; + $bar_max = max($needed_angeltype['count'] * 10, $needed_angeltype['taken'] * 10, 10); + $bar_value = max(1, $needed_angeltype['taken'] * 10); + $needed_angels .= progress_bar(0, $bar_max, $bar_value, $class, $needed_angeltype['taken'] . ' / ' . $needed_angeltype['count']); - $angels = []; - foreach ($shift['ShiftEntry'] as $shift_entry) { - if ($shift_entry['TID'] == $needed_angeltype['TID']) { - $angels[] = Shift_view_render_shift_entry($shift_entry, $user_shift_admin, $angeltype_supporter); + $angels = []; + foreach ($shift['ShiftEntry'] as $shift_entry) { + if ($shift_entry['TID'] == $needed_angeltype['TID']) { + $angels[] = Shift_view_render_shift_entry($shift_entry, $user_shift_admin, $angeltype_supporter); + } } - } - $needed_angels .= join(', ', $angels); - $needed_angels .= '
    '; + $needed_angels .= join(', ', $angels); + $needed_angels .= '
    '; - return $needed_angels; + return $needed_angels; } -function Shift_view_render_shift_entry($shift_entry, $user_shift_admin, $angeltype_supporter) { - $entry = User_Nick_render(User($shift_entry['UID'])); - if ($shift_entry['freeloaded']) { - $entry = '' . $entry . ''; - } - if ($user_shift_admin || $angeltype_supporter) { - $entry .= '
    '; - if ($user_shift_admin) { - $entry .= button_glyph(page_link_to('user_myshifts') . '&edit=' . $shift_entry['id'] . '&id=' . $shift_entry['UID'], 'pencil', 'btn-xs'); +function Shift_view_render_shift_entry($shift_entry, $user_shift_admin, $angeltype_supporter) +{ + $entry = User_Nick_render(User($shift_entry['UID'])); + if ($shift_entry['freeloaded']) { + $entry = '' . $entry . ''; + } + if ($user_shift_admin || $angeltype_supporter) { + $entry .= '
    '; + if ($user_shift_admin) { + $entry .= button_glyph(page_link_to('user_myshifts') . '&edit=' . $shift_entry['id'] . '&id=' . $shift_entry['UID'], 'pencil', 'btn-xs'); + } + $entry .= button_glyph(page_link_to('user_shifts') . '&entry_id=' . $shift_entry['id'], 'trash', 'btn-xs'); + $entry .= '
    '; } - $entry .= button_glyph(page_link_to('user_shifts') . '&entry_id=' . $shift_entry['id'], 'trash', 'btn-xs'); - $entry .= '
    '; - } - return $entry; + return $entry; } /** * Calc shift length in format 12:23h. * - * @param Shift $shift + * @param Shift $shift */ -function shift_length($shift) { - $length = floor(($shift['end'] - $shift['start']) / (60 * 60)) . ":"; - $length .= str_pad((($shift['end'] - $shift['start']) % (60 * 60)) / 60, 2, "0", STR_PAD_LEFT) . "h"; - return $length; +function shift_length($shift) +{ + $length = floor(($shift['end'] - $shift['start']) / (60 * 60)) . ":"; + $length .= str_pad((($shift['end'] - $shift['start']) % (60 * 60)) / 60, 2, "0", STR_PAD_LEFT) . "h"; + return $length; } -?> diff --git a/includes/view/UserAngelTypes_view.php b/includes/view/UserAngelTypes_view.php index da4a2352..dcfff2b1 100644 --- a/includes/view/UserAngelTypes_view.php +++ b/includes/view/UserAngelTypes_view.php @@ -1,88 +1,93 @@ \ No newline at end of file diff --git a/includes/view/UserDriverLicenses_view.php b/includes/view/UserDriverLicenses_view.php index 5a3effeb..bd3393cc 100644 --- a/includes/view/UserDriverLicenses_view.php +++ b/includes/view/UserDriverLicenses_view.php @@ -11,10 +11,11 @@ * The user driver license * @return string */ -function UserDriverLicense_edit_view($user_source, $wants_to_drive, $user_driver_license) { - return page_with_title(sprintf(_("Edit %s driving license information"), User_Nick_render($user_source)), [ +function UserDriverLicense_edit_view($user_source, $wants_to_drive, $user_driver_license) +{ + return page_with_title(sprintf(_("Edit %s driving license information"), User_Nick_render($user_source)), [ buttons([ - button(user_link($user_source), _("Back to profile"), 'back') + button(user_link($user_source), _("Back to profile"), 'back') ]), msg(), form([ @@ -28,10 +29,10 @@ function UserDriverLicense_edit_view($user_source, $wants_to_drive, $user_driver form_checkbox('has_license_3_5t_transporter', _("Transporter 3,5t"), $user_driver_license['has_license_3_5t_transporter']), form_checkbox('has_license_7_5t_truck', _("Truck 7,5t"), $user_driver_license['has_license_7_5t_truck']), form_checkbox('has_license_12_5t_truck', _("Truck 12,5t"), $user_driver_license['has_license_12_5t_truck']), - form_checkbox('has_license_forklift', _("Forklift"), $user_driver_license['has_license_forklift']) - ]) + form_checkbox('has_license_forklift', _("Forklift"), $user_driver_license['has_license_forklift']) + ]) ], 'driving_license'), - form_submit('submit', _("Save")) + form_submit('submit', _("Save")) ]), '' + ' ]); } - -?> \ No newline at end of file diff --git a/includes/view/UserHintsRenderer.php b/includes/view/UserHintsRenderer.php index cf4b1414..30281ea0 100644 --- a/includes/view/UserHintsRenderer.php +++ b/includes/view/UserHintsRenderer.php @@ -2,24 +2,25 @@ namespace Engelsystem; -class UserHintsRenderer { +class UserHintsRenderer +{ + private $hints = []; - private $hints = []; - - private $important = false; + private $important = false; /** * Render the added hints to a popover for the toolbar. */ - public function render() { - if (count($this->hints) > 0) { - $hint_class = $this->important ? 'danger' : 'info'; - $glyphicon = $this->important ? 'warning-sign' : 'info-sign'; + public function render() + { + if (count($this->hints) > 0) { + $hint_class = $this->important ? 'danger' : 'info'; + $glyphicon = $this->important ? 'warning-sign' : 'info-sign'; - return toolbar_popover($glyphicon . ' text-' . $hint_class, '', $this->hints, 'bg-' . $hint_class); - } + return toolbar_popover($glyphicon . ' text-' . $hint_class, '', $this->hints, 'bg-' . $hint_class); + } - return ''; + return ''; } /** @@ -30,30 +31,31 @@ class UserHintsRenderer { * @param boolean $important * Is the hint important? */ - public function addHint($hint, $important = false) { - if ($hint != null && $hint != '') { - if ($important) { - $this->important = true; - $this->hints[] = error($hint, true); - } else { - $this->hints[] = info($hint, true); + public function addHint($hint, $important = false) + { + if ($hint != null && $hint != '') { + if ($important) { + $this->important = true; + $this->hints[] = error($hint, true); + } else { + $this->hints[] = info($hint, true); + } } - } } /** * Get all hints. */ - public function getHints() { - return $this->hints; + public function getHints() + { + return $this->hints; } /** * Are there important hints? This leads to a more intensive icon. */ - public function isImportant() { - return $this->important; + public function isImportant() + { + return $this->important; } } - -?> \ No newline at end of file diff --git a/includes/view/User_view.php b/includes/view/User_view.php index 65cb36b3..e28e2a36 100644 --- a/includes/view/User_view.php +++ b/includes/view/User_view.php @@ -16,7 +16,7 @@ $tshirt_sizes = [ 'S-G' => "S Girl", 'M-G' => "M Girl", 'L-G' => "L Girl", - 'XL-G' => "XL Girl" + 'XL-G' => "XL Girl" ]; /** @@ -29,8 +29,9 @@ $tshirt_sizes = [ * @param array $themes * Available themes */ -function User_settings_view($user_source, $locales, $themes, $buildup_start_date, $teardown_end_date, $enable_tshirt_size, $tshirt_sizes) { - return page_with_title(settings_title(), [ +function User_settings_view($user_source, $locales, $themes, $buildup_start_date, $teardown_end_date, $enable_tshirt_size, $tshirt_sizes) +{ + return page_with_title(settings_title(), [ msg(), div('row', [ div('col-md-6', [ @@ -53,8 +54,8 @@ function User_settings_view($user_source, $locales, $themes, $buildup_start_date form_text('hometown', _("Hometown"), $user_source['Hometown']), $enable_tshirt_size ? form_select('tshirt_size', _("Shirt size"), $tshirt_sizes, $user_source['Size']) : '', form_info('', _('Please visit the angeltypes page to manage your angeltypes.')), - form_submit('submit', _("Save")) - ]) + form_submit('submit', _("Save")) + ]) ]), div('col-md-6', [ form([ @@ -62,34 +63,35 @@ function User_settings_view($user_source, $locales, $themes, $buildup_start_date form_password('password', _("Old password:")), form_password('new_password', _("New password:")), form_password('new_password2', _("Password confirmation:")), - form_submit('submit_password', _("Save")) + form_submit('submit_password', _("Save")) ]), form([ form_info(_("Here you can choose your color settings:")), form_select('theme', _("Color settings:"), $themes, $user_source['color']), - form_submit('submit_theme', _("Save")) + form_submit('submit_theme', _("Save")) ]), form([ form_info(_("Here you can choose your language:")), form_select('language', _("Language:"), $locales, $user_source['Sprache']), - form_submit('submit_language', _("Save")) - ]) - ]) - ]) + form_submit('submit_language', _("Save")) + ]) + ]) + ]) ]); } /** * Displays the welcome message to the user and shows a login form. */ -function User_registration_success_view($event_welcome_message) { - $parsedown = new Parsedown(); - $event_welcome_message = $parsedown->text($event_welcome_message); - return page_with_title(_("Registration successful"), [ +function User_registration_success_view($event_welcome_message) +{ + $parsedown = new Parsedown(); + $event_welcome_message = $parsedown->text($event_welcome_message); + return page_with_title(_("Registration successful"), [ msg(), div('row', [ div('col-md-4', [ - $event_welcome_message + $event_welcome_message ]), div('col-md-4', [ '

    ' . _("Login") . '

    ', @@ -98,70 +100,73 @@ function User_registration_success_view($event_welcome_message) { form_password('password', _("Password")), form_submit('submit', _("Login")), buttons([ - button(page_link_to('user_password_recovery'), _("I forgot my password")) + button(page_link_to('user_password_recovery'), _("I forgot my password")) ]), - info(_("Please note: You have to activate cookies!"), true) - ], page_link_to('login')) + info(_("Please note: You have to activate cookies!"), true) + ], page_link_to('login')) ]), div('col-md-4', [ '

    ' . _("What can I do?") . '

    ', '

    ' . _("Please read about the jobs you can do to help us.") . '

    ', buttons([ - button(page_link_to('angeltypes') . '&action=about', _("Teams/Job description") . ' »') - ]) - ]) - ]) + button(page_link_to('angeltypes') . '&action=about', _("Teams/Job description") . ' »') + ]) + ]) + ]) ]); } /** * Gui for deleting user with password field. */ -function User_delete_view($user) { - return page_with_title(sprintf(_("Delete %s"), User_Nick_render($user)), [ +function User_delete_view($user) +{ + return page_with_title(sprintf(_("Delete %s"), User_Nick_render($user)), [ msg(), buttons([ - button(user_edit_link($user), glyph('chevron-left') . _("back")) + button(user_edit_link($user), glyph('chevron-left') . _("back")) ]), error(_("Do you really want to delete the user including all his shifts and every other piece of his data?"), true), form([ form_password('password', _("Your password")), - form_submit('submit', _("Delete")) - ]) + form_submit('submit', _("Delete")) + ]) ]); } /** * View for editing the number of given vouchers */ -function User_edit_vouchers_view($user) { - return page_with_title(sprintf(_("%s's vouchers"), User_Nick_render($user)), [ +function User_edit_vouchers_view($user) +{ + return page_with_title(sprintf(_("%s's vouchers"), User_Nick_render($user)), [ msg(), buttons([ - button(user_link($user), glyph('chevron-left') . _("back")) + button(user_link($user), glyph('chevron-left') . _("back")) ]), info(sprintf(_("Angel should receive at least %d vouchers."), User_get_eligable_voucher_count($user)), true), form([ form_spinner('vouchers', _("Number of vouchers given out"), $user['got_voucher']), - form_submit('submit', _("Save")) - ], page_link_to('users') . '&action=edit_vouchers&user_id=' . $user['UID']) + form_submit('submit', _("Save")) + ], page_link_to('users') . '&action=edit_vouchers&user_id=' . $user['UID']) ]); } -function Users_view($users, $order_by, $arrived_count, $active_count, $force_active_count, $freeloads_count, $tshirts_count, $voucher_count) { - foreach ($users as &$user) { - $user['Nick'] = User_Nick_render($user); - $user['Gekommen'] = glyph_bool($user['Gekommen']); - $user['got_voucher'] = $user['got_voucher']; - $user['Aktiv'] = glyph_bool($user['Aktiv']); - $user['force_active'] = glyph_bool($user['force_active']); - $user['Tshirt'] = glyph_bool($user['Tshirt']); - $user['lastLogIn'] = date(_('m/d/Y h:i a'), $user['lastLogIn']); - $user['actions'] = table_buttons([ - button_glyph(page_link_to('admin_user') . '&id=' . $user['UID'], 'edit', 'btn-xs') +function Users_view($users, $order_by, $arrived_count, $active_count, $force_active_count, $freeloads_count, $tshirts_count, $voucher_count) +{ + foreach ($users as &$user) { + $user['Nick'] = User_Nick_render($user); + $user['Gekommen'] = glyph_bool($user['Gekommen']); + $user['got_voucher'] = $user['got_voucher']; + $user['Aktiv'] = glyph_bool($user['Aktiv']); + $user['force_active'] = glyph_bool($user['force_active']); + $user['Tshirt'] = glyph_bool($user['Tshirt']); + $user['lastLogIn'] = date(_('m/d/Y h:i a'), $user['lastLogIn']); + $user['actions'] = table_buttons([ + button_glyph(page_link_to('admin_user') . '&id=' . $user['UID'], 'edit', 'btn-xs') ]); - } - $users[] = [ + } + $users[] = [ 'Nick' => '' . _('Sum') . '', 'Gekommen' => $arrived_count, 'got_voucher' => $voucher_count, @@ -169,13 +174,13 @@ function Users_view($users, $order_by, $arrived_count, $active_count, $force_act 'force_active' => $force_active_count, 'freeloads' => $freeloads_count, 'Tshirt' => $tshirts_count, - 'actions' => '' . count($users) . '' + 'actions' => '' . count($users) . '' ]; - return page_with_title(_("All users"), [ + return page_with_title(_("All users"), [ msg(), buttons([ - button(page_link_to('register'), glyph('plus') . _("New user")) + button(page_link_to('register'), glyph('plus') . _("New user")) ]), table([ 'Nick' => Users_table_header_link('Nick', _("Nick"), $order_by), @@ -190,137 +195,143 @@ function Users_view($users, $order_by, $arrived_count, $active_count, $force_act 'Tshirt' => Users_table_header_link('Tshirt', _("T-Shirt"), $order_by), 'Size' => Users_table_header_link('Size', _("Size"), $order_by), 'lastLogIn' => Users_table_header_link('lastLogIn', _("Last login"), $order_by), - 'actions' => '' - ], $users) + 'actions' => '' + ], $users) ]); } -function Users_table_header_link($column, $label, $order_by) { - return '' . $label . ($order_by == $column ? ' ' : '') . ''; +function Users_table_header_link($column, $label, $order_by) +{ + return '' . $label . ($order_by == $column ? ' ' : '') . ''; } -function User_shift_state_render($user) { - $upcoming_shifts = ShiftEntries_upcoming_for_user($user); - if ($upcoming_shifts === false) { - return false; - } +function User_shift_state_render($user) +{ + $upcoming_shifts = ShiftEntries_upcoming_for_user($user); + if ($upcoming_shifts === false) { + return false; + } - if (count($upcoming_shifts) == 0) { - return '' . _("Free") . ''; - } + if (count($upcoming_shifts) == 0) { + return '' . _("Free") . ''; + } - if ($upcoming_shifts[0]['start'] > time()) { - if ($upcoming_shifts[0]['start'] - time() > 3600) { - return '' . _("Next shift %c") . ''; + if ($upcoming_shifts[0]['start'] > time()) { + if ($upcoming_shifts[0]['start'] - time() > 3600) { + return '' . _("Next shift %c") . ''; + } + return '' . _("Next shift %c") . ''; } - return '' . _("Next shift %c") . ''; - } - $halfway = ($upcoming_shifts[0]['start'] + $upcoming_shifts[0]['end']) / 2; + $halfway = ($upcoming_shifts[0]['start'] + $upcoming_shifts[0]['end']) / 2; - if (time() < $halfway) { - return '' . _("Shift starts %c") . ''; - } - return '' . _("Shift ends %c") . ''; + if (time() < $halfway) { + return '' . _("Shift starts %c") . ''; + } + return '' . _("Shift ends %c") . ''; } -function User_view_shiftentries($needed_angel_type) { - $shift_info = '
    ' . $needed_angel_type['name'] . ': '; +function User_view_shiftentries($needed_angel_type) +{ + $shift_info = '
    ' . $needed_angel_type['name'] . ': '; - $shift_entries = []; - foreach ($needed_angel_type['users'] as $user_shift) { - $member = User_Nick_render($user_shift); - if ($user_shift['freeloaded']) { - $member = '' . $member . ''; - } + $shift_entries = []; + foreach ($needed_angel_type['users'] as $user_shift) { + $member = User_Nick_render($user_shift); + if ($user_shift['freeloaded']) { + $member = '' . $member . ''; + } - $shift_entries[] = $member; - } - $shift_info .= join(", ", $shift_entries); + $shift_entries[] = $member; + } + $shift_info .= join(", ", $shift_entries); - return $shift_info; + return $shift_info; } /** * Helper that renders a shift line for user view */ -function User_view_myshift($shift, $user_source, $its_me) { - global $LETZTES_AUSTRAGEN, $privileges; +function User_view_myshift($shift, $user_source, $its_me) +{ + global $LETZTES_AUSTRAGEN, $privileges; - $shift_info = '' . $shift['name'] . ''; - if ($shift['title']) { - $shift_info .= '
    ' . $shift['title'] . ''; - } - foreach ($shift['needed_angeltypes'] as $needed_angel_type) { - $shift_info .= User_view_shiftentries($needed_angel_type); - } + $shift_info = '' . $shift['name'] . ''; + if ($shift['title']) { + $shift_info .= '
    ' . $shift['title'] . ''; + } + foreach ($shift['needed_angeltypes'] as $needed_angel_type) { + $shift_info .= User_view_shiftentries($needed_angel_type); + } - $myshift = [ + $myshift = [ 'date' => date("Y-m-d", $shift['start']), 'time' => date("H:i", $shift['start']) . ' - ' . date("H:i", $shift['end']), 'room' => $shift['Name'], 'shift_info' => $shift_info, - 'comment' => $shift['Comment'] + 'comment' => $shift['Comment'] ]; - if ($shift['freeloaded']) { - if (in_array("user_shifts_admin", $privileges)) { - $myshift['comment'] .= '

    ' . _("Freeloaded") . ': ' . $shift['freeload_comment'] . '

    '; - } else { - $myshift['comment'] .= '

    ' . _("Freeloaded") . '

    '; + if ($shift['freeloaded']) { + if (in_array("user_shifts_admin", $privileges)) { + $myshift['comment'] .= '

    ' . _("Freeloaded") . ': ' . $shift['freeload_comment'] . '

    '; + } else { + $myshift['comment'] .= '

    ' . _("Freeloaded") . '

    '; + } } - } - $myshift['actions'] = [ - button(shift_link($shift), glyph('eye-open') . _('view'), 'btn-xs') + $myshift['actions'] = [ + button(shift_link($shift), glyph('eye-open') . _('view'), 'btn-xs') ]; - if ($its_me || in_array('user_shifts_admin', $privileges)) { - $myshift['actions'][] = button(page_link_to('user_myshifts') . '&edit=' . $shift['id'] . '&id=' . $user_source['UID'], glyph('edit') . _('edit'), 'btn-xs'); - } - if (($shift['start'] > time() + $LETZTES_AUSTRAGEN * 3600) || in_array('user_shifts_admin', $privileges)) { - $myshift['actions'][] = button(page_link_to('user_myshifts') . ((! $its_me) ? '&id=' . $user_source['UID'] : '') . '&cancel=' . $shift['id'], glyph('trash') . _('sign off'), 'btn-xs'); - } - $myshift['actions'] = table_buttons($myshift['actions']); + if ($its_me || in_array('user_shifts_admin', $privileges)) { + $myshift['actions'][] = button(page_link_to('user_myshifts') . '&edit=' . $shift['id'] . '&id=' . $user_source['UID'], glyph('edit') . _('edit'), 'btn-xs'); + } + if (($shift['start'] > time() + $LETZTES_AUSTRAGEN * 3600) || in_array('user_shifts_admin', $privileges)) { + $myshift['actions'][] = button(page_link_to('user_myshifts') . ((! $its_me) ? '&id=' . $user_source['UID'] : '') . '&cancel=' . $shift['id'], glyph('trash') . _('sign off'), 'btn-xs'); + } + $myshift['actions'] = table_buttons($myshift['actions']); - return $myshift; + return $myshift; } /** * Helper that prepares the shift table for user view */ -function User_view_myshifts($shifts, $user_source, $its_me) { - $myshifts_table = []; - $timesum = 0; - foreach ($shifts as $shift) { - $myshifts_table[] = User_view_myshift($shift, $user_source, $its_me); +function User_view_myshifts($shifts, $user_source, $its_me) +{ + $myshifts_table = []; + $timesum = 0; + foreach ($shifts as $shift) { + $myshifts_table[] = User_view_myshift($shift, $user_source, $its_me); - if ($shift['freeloaded']) { - $timesum += (- 2 * ($shift['end'] - $shift['start'])); - } else { - $timesum += ($shift['end'] - $shift['start']); + if ($shift['freeloaded']) { + $timesum += (- 2 * ($shift['end'] - $shift['start'])); + } else { + $timesum += ($shift['end'] - $shift['start']); + } } - } - if (count($myshifts_table) > 0) { - $myshifts_table[] = [ + if (count($myshifts_table) > 0) { + $myshifts_table[] = [ 'date' => '' . _("Sum:") . '', 'time' => "" . round($timesum / 3600, 1) . " h", 'room' => "", 'shift_info' => "", 'comment' => "", - 'actions' => "" + 'actions' => "" ]; - } - return $myshifts_table; + } + return $myshifts_table; } /** * Renders view for a single user */ -function User_view($user_source, $admin_user_privilege, $freeloader, $user_angeltypes, $user_groups, $shifts, $its_me) { - $user_name = htmlspecialchars($user_source['Vorname']) . " " . htmlspecialchars($user_source['Name']); - $myshifts_table = User_view_myshifts($shifts, $user_source, $its_me); +function User_view($user_source, $admin_user_privilege, $freeloader, $user_angeltypes, $user_groups, $shifts, $its_me) +{ + $user_name = htmlspecialchars($user_source['Vorname']) . " " . htmlspecialchars($user_source['Name']); + $myshifts_table = User_view_myshifts($shifts, $user_source, $its_me); - return page_with_title(' ' . htmlspecialchars($user_source['Nick']) . ' ' . $user_name . '', [ + return page_with_title(' ' . htmlspecialchars($user_source['Nick']) . ' ' . $user_name . '', [ msg(), div('row space-top', [ div('col-md-12', [ @@ -332,16 +343,16 @@ function User_view($user_source, $admin_user_privilege, $freeloader, $user_angel $its_me ? button(page_link_to('user_settings'), glyph('list-alt') . _("Settings")) : '', $its_me ? button(page_link_to('ical') . '&key=' . $user_source['api_key'], glyph('calendar') . _("iCal Export")) : '', $its_me ? button(page_link_to('shifts_json_export') . '&key=' . $user_source['api_key'], glyph('export') . _("JSON Export")) : '', - $its_me ? button(page_link_to('user_myshifts') . '&reset', glyph('repeat') . _('Reset API key')) : '' - ]) - ]) + $its_me ? button(page_link_to('user_myshifts') . '&reset', glyph('repeat') . _('Reset API key')) : '' + ]) + ]) ]), div('row', [ div('col-md-3', [ '

    ', '', $user_source['DECT'], - '

    ' + '' ]), div('col-md-3', [ '

    ' . _("User state") . '

    ', @@ -350,16 +361,16 @@ function User_view($user_source, $admin_user_privilege, $freeloader, $user_angel $admin_user_privilege || $its_me ? ($user_source['Gekommen'] ? ' ' . sprintf(_("Arrived at %s"), date('Y-m-d', $user_source['arrival_date'])) . '' : '' . sprintf(_("Not arrived (Planned: %s)"), date('Y-m-d', $user_source['planned_arrival_date'])) . '') : ($user_source['Gekommen'] ? ' ' . _("Arrived") . '' : '' . _("Not arrived") . ''), $admin_user_privilege ? ($user_source['got_voucher'] > 0 ? '
    ' . glyph('cutlery') . sprintf(ngettext("Got %s voucher", "Got %s vouchers", $user_source['got_voucher']), $user_source['got_voucher']) . '
    ' : '
    ' . _("Got no vouchers") . '
    ') : '', ($user_source['Gekommen'] && $admin_user_privilege && $user_source['Aktiv']) ? ' ' . _("Active") . '' : '', - ($user_source['Gekommen'] && $admin_user_privilege && $user_source['Tshirt']) ? ' ' . _("T-Shirt") . '' : '' + ($user_source['Gekommen'] && $admin_user_privilege && $user_source['Tshirt']) ? ' ' . _("T-Shirt") . '' : '' ]), div('col-md-3', [ '

    ' . _("Angeltypes") . '

    ', - User_angeltypes_render($user_angeltypes) + User_angeltypes_render($user_angeltypes) ]), div('col-md-3', [ '

    ' . _("Rights") . '

    ', - User_groups_render($user_groups) - ]) + User_groups_render($user_groups) + ]) ]), ($its_me || $admin_user_privilege) ? '

    ' . _("Shifts") . '

    ' : '', ($its_me || $admin_user_privilege) ? table([ @@ -368,127 +379,135 @@ function User_view($user_source, $admin_user_privilege, $freeloader, $user_angel 'room' => _("Location"), 'shift_info' => _("Name & workmates"), 'comment' => _("Comment"), - 'actions' => _("Action") + 'actions' => _("Action") ], $myshifts_table) : '', $its_me ? info(glyph('info-sign') . _("Your night shifts between 2 and 8 am count twice."), true) : '', - $its_me && count($shifts) == 0 ? error(sprintf(_("Go to the shifts table to sign yourself up for some shifts."), page_link_to('user_shifts')), true) : '' + $its_me && count($shifts) == 0 ? error(sprintf(_("Go to the shifts table to sign yourself up for some shifts."), page_link_to('user_shifts')), true) : '' ]); } /** * View for password recovery step 1: E-Mail */ -function User_password_recovery_view() { - return page_with_title(user_password_recovery_title(), [ +function User_password_recovery_view() +{ + return page_with_title(user_password_recovery_title(), [ msg(), _("We will send you an e-mail with a password recovery link. Please use the email address you used for registration."), form([ form_text('email', _("E-Mail"), ""), - form_submit('submit', _("Recover")) - ]) + form_submit('submit', _("Recover")) + ]) ]); } /** * View for password recovery step 2: New password */ -function User_password_set_view() { - return page_with_title(user_password_recovery_title(), [ +function User_password_set_view() +{ + return page_with_title(user_password_recovery_title(), [ msg(), _("Please enter a new password."), form([ form_password('password', _("Password")), form_password('password2', _("Confirm password")), - form_submit('submit', _("Save")) - ]) + form_submit('submit', _("Save")) + ]) ]); } -function User_angeltypes_render($user_angeltypes) { - $output = []; - foreach ($user_angeltypes as $angeltype) { - $class = ""; - if ($angeltype['restricted'] == 1) { - if ($angeltype['confirm_user_id'] != null) { - $class = 'text-success'; - } else { - $class = 'text-warning'; - } - } else { - $class = 'text-success'; +function User_angeltypes_render($user_angeltypes) +{ + $output = []; + foreach ($user_angeltypes as $angeltype) { + $class = ""; + if ($angeltype['restricted'] == 1) { + if ($angeltype['confirm_user_id'] != null) { + $class = 'text-success'; + } else { + $class = 'text-warning'; + } + } else { + $class = 'text-success'; + } + $output[] = '' . ($angeltype['supporter'] ? glyph('education') : '') . $angeltype['name'] . ''; } - $output[] = '' . ($angeltype['supporter'] ? glyph('education') : '') . $angeltype['name'] . ''; - } - return join('
    ', $output); + return join('
    ', $output); } -function User_groups_render($user_groups) { - $output = []; - foreach ($user_groups as $group) { - $output[] = substr($group['Name'], 2); - } - return join('
    ', $output); +function User_groups_render($user_groups) +{ + $output = []; + foreach ($user_groups as $group) { + $output[] = substr($group['Name'], 2); + } + return join('
    ', $output); } /** * Render a user nickname. * - * @param User $user_source + * @param User $user_source * @return string */ -function User_Nick_render($user_source) { - return ' ' . htmlspecialchars($user_source['Nick']) . ''; +function User_Nick_render($user_source) +{ + return ' ' . htmlspecialchars($user_source['Nick']) . ''; } -function render_user_departure_date_hint() { - global $user; +function render_user_departure_date_hint() +{ + global $user; - if (! isset($user['planned_departure_date']) || $user['planned_departure_date'] == null) { - return _("Please enter your planned date of departure on your settings page to give us a feeling for teardown capacities."); - } + if (! isset($user['planned_departure_date']) || $user['planned_departure_date'] == null) { + return _("Please enter your planned date of departure on your settings page to give us a feeling for teardown capacities."); + } - return null; + return null; } -function render_user_freeloader_hint() { - global $user, $max_freeloadable_shifts; +function render_user_freeloader_hint() +{ + global $user, $max_freeloadable_shifts; - if (User_is_freeloader($user)) { - return sprintf(_("You freeloaded at least %s shifts. Shift signup is locked. Please go to heavens desk to be unlocked again."), $max_freeloadable_shifts); - } + if (User_is_freeloader($user)) { + return sprintf(_("You freeloaded at least %s shifts. Shift signup is locked. Please go to heavens desk to be unlocked again."), $max_freeloadable_shifts); + } - return null; + return null; } // Hinweis für Engel, die noch nicht angekommen sind -function render_user_arrived_hint() { - global $user; +function render_user_arrived_hint() +{ + global $user; - if ($user['Gekommen'] == 0) { - return _("You are not marked as arrived. Please go to heaven's desk, get your angel badge and/or tell them that you arrived already."); - } + if ($user['Gekommen'] == 0) { + return _("You are not marked as arrived. Please go to heaven's desk, get your angel badge and/or tell them that you arrived already."); + } - return null; + return null; } -function render_user_tshirt_hint() { - global $enable_tshirt_size, $user; +function render_user_tshirt_hint() +{ + global $enable_tshirt_size, $user; - if ($enable_tshirt_size && $user['Size'] == "") { - return _("You need to specify a tshirt size in your settings!"); - } + if ($enable_tshirt_size && $user['Size'] == "") { + return _("You need to specify a tshirt size in your settings!"); + } - return null; + return null; } -function render_user_dect_hint() { - global $user; +function render_user_dect_hint() +{ + global $user; - if ($user['DECT'] == "") { - return _("You need to specify a DECT phone number in your settings! If you don't have a DECT phone, just enter \"-\"."); - } + if ($user['DECT'] == "") { + return _("You need to specify a DECT phone number in your settings! If you don't have a DECT phone, just enter \"-\"."); + } - return null; + return null; } - -?> -- cgit v1.2.3-70-g09d2 From d71e7bbfad2f07f82df0c515608996d250fd4182 Mon Sep 17 00:00:00 2001 From: Bot Date: Mon, 2 Jan 2017 15:43:36 +0100 Subject: Formatting --- config/config.default.php | 6 +- includes/controller/angeltypes_controller.php | 179 +++--- includes/controller/event_config_controller.php | 66 ++- includes/controller/rooms_controller.php | 57 +- includes/controller/shift_entries_controller.php | 161 ++++-- includes/controller/shifts_controller.php | 250 +++++---- includes/controller/shifttypes_controller.php | 84 +-- includes/controller/user_angeltypes_controller.php | 283 +++++----- .../controller/user_driver_licenses_controller.php | 72 +-- includes/controller/users_controller.php | 202 ++++--- includes/helper/email_helper.php | 16 +- includes/helper/graph_helper.php | 27 +- includes/helper/internationalization_helper.php | 12 +- includes/helper/message_helper.php | 6 +- includes/mailer/shifts_mailer.php | 52 +- includes/mailer/users_mailer.php | 6 +- includes/model/AngelType_model.php | 44 +- includes/model/EventConfig_model.php | 18 +- includes/model/LogEntries_model.php | 4 +- includes/model/Message_model.php | 33 +- includes/model/NeededAngelTypes_model.php | 24 +- includes/model/Room_model.php | 5 +- includes/model/ShiftEntry_model.php | 29 +- includes/model/ShiftSignupState.php | 182 +++--- includes/model/ShiftTypes_model.php | 19 +- includes/model/ShiftsFilter.php | 60 +- includes/model/Shifts_model.php | 229 +++++--- includes/model/UserAngelTypes_model.php | 53 +- includes/model/UserDriverLicenses_model.php | 23 +- includes/model/UserGroups_model.php | 1 + includes/model/User_model.php | 65 ++- includes/model/ValidationResult.php | 54 +- includes/mysqli_provider.php | 52 +- includes/pages/admin_active.php | 108 ++-- includes/pages/admin_arrive.php | 184 +++--- includes/pages/admin_free.php | 85 +-- includes/pages/admin_groups.php | 172 +++--- includes/pages/admin_import.php | 577 ++++++++++--------- includes/pages/admin_log.php | 26 +- includes/pages/admin_news.php | 84 +-- includes/pages/admin_questions.php | 169 +++--- includes/pages/admin_rooms.php | 154 ++--- includes/pages/admin_shifts.php | 428 +++++++------- includes/pages/admin_user.php | 213 +++---- includes/pages/guest_login.php | 385 +++++++------ includes/pages/guest_stats.php | 24 +- includes/pages/user_atom.php | 22 +- includes/pages/user_ical.php | 19 +- includes/pages/user_messages.php | 180 +++--- includes/pages/user_myshifts.php | 76 ++- includes/pages/user_news.php | 80 +-- includes/pages/user_questions.php | 83 +-- includes/pages/user_settings.php | 74 +-- includes/pages/user_shifts.php | 158 ++++-- includes/sys_auth.php | 61 +- includes/sys_form.php | 57 +- includes/sys_log.php | 20 +- includes/sys_menu.php | 123 ++-- includes/sys_page.php | 32 +- includes/sys_template.php | 34 +- includes/view/AngelTypes_view.php | 336 ++++++----- includes/view/EventConfig_view.php | 180 +++--- includes/view/Questions_view.php | 42 +- includes/view/Rooms_view.php | 8 +- includes/view/ShiftCalendarLane.php | 62 +- includes/view/ShiftCalendarRenderer.php | 381 ++++++------- includes/view/ShiftCalendarShiftRenderer.php | 327 ++++++----- includes/view/ShiftEntry_view.php | 44 +- includes/view/ShiftTypes_view.php | 103 ++-- includes/view/ShiftsFilterRenderer.php | 108 ++-- includes/view/Shifts_view.php | 170 +++--- includes/view/UserAngelTypes_view.php | 139 +++-- includes/view/UserDriverLicenses_view.php | 64 ++- includes/view/UserHintsRenderer.php | 100 ++-- includes/view/User_view.php | 623 ++++++++++++--------- phpunit.xml | 44 +- public/index.php | 47 +- public/js/forms.js | 32 +- public/js/moment-countdown.js | 28 +- public/js/sticky-headers.js | 33 +- public/maintenance.html | 128 +++-- public/overwhelmed.html | 104 ++-- shift_markup.html | 161 +++--- templates/guest_credits.html | 58 +- templates/layout.html | 87 +-- templates/user_shifts.html | 90 +-- test/model/LogEntriesModelTest.php | 20 +- test/model/RoomModelTest.php | 26 +- themes/base.less | 134 ++--- 89 files changed, 5395 insertions(+), 4286 deletions(-) (limited to 'includes/view') diff --git a/config/config.default.php b/config/config.default.php index a832c8aa..fc61e60a 100644 --- a/config/config.default.php +++ b/config/config.default.php @@ -49,7 +49,7 @@ $shift_sum_formula = "SUM( // voucher calculation $voucher_settings = [ - "initial_vouchers" => 2, + "initial_vouchers" => 2, "shifts_per_voucher" => 1 ]; @@ -63,6 +63,6 @@ $api_key = ""; $config = [ 'host' => "localhost", 'user' => "root", - 'pw' => "", - 'db' => "engelsystem" + 'pw' => "", + 'db' => "engelsystem" ]; diff --git a/includes/controller/angeltypes_controller.php b/includes/controller/angeltypes_controller.php index 26aaae71..de4b8a49 100644 --- a/includes/controller/angeltypes_controller.php +++ b/includes/controller/angeltypes_controller.php @@ -14,20 +14,20 @@ function angeltypes_title() 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(); - } + 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(); + } } /** @@ -46,17 +46,17 @@ function angeltype_link($angeltype_id) 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)) - ]; + _("Teams/Job description"), + AngelTypes_about_view($angeltypes, isset($user)) + ]; } /** @@ -65,23 +65,23 @@ function angeltypes_about_controller() function angeltype_delete_controller() { global $privileges; - - if (! in_array('admin_angel_types', $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) - ]; + sprintf(_("Delete angeltype %s"), $angeltype['name']), + AngelType_delete_view($angeltype) + ]; } /** @@ -90,63 +90,63 @@ function angeltype_delete_controller() function angeltype_edit_controller() { global $privileges, $user; - - // In supporter mode only allow to modify description - $supporter_mode = ! in_array('admin_angel_types', $privileges); - + + // 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)) { + $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')); - } + if ($supporter_mode) { + // Supporters aren't allowed to create new angeltypes. + redirect(page_link_to('angeltypes')); + } $angeltype = AngelType_new(); } - + if (isset($_REQUEST['submit'])) { $valid = true; - - if (! $supporter_mode) { + + if (!$supporter_mode) { if (isset($_REQUEST['name'])) { $result = AngelType_validate_name($_REQUEST['name'], $angeltype); $angeltype['name'] = $result->getValue(); - if (! $result->isValid()) { + if (!$result->isValid()) { $valid = false; error(_("Please check the name. Maybe it already exists.")); } } - + $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']); - + 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) - ]; + sprintf(_("Edit %s"), $angeltype['name']), + AngelType_edit_view($angeltype, $supporter_mode) + ]; } /** @@ -155,20 +155,29 @@ function angeltype_edit_controller() function angeltype_controller() { global $privileges, $user; - - if (! in_array('angeltypes', $privileges)) { + + 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) - ]; + 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 + ) + ]; } /** @@ -177,42 +186,58 @@ function angeltype_controller() function angeltypes_list_controller() { global $privileges, $user; - - if (! in_array('angeltypes', $privileges)) { + + 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") - ]; - + 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"); + $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"); + $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"); + $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'] = '' . $angeltype['name'] . ''; - + $angeltype['actions'] = table_buttons($actions); } - + return [ - angeltypes_title(), - AngelTypes_list_view($angeltypes, in_array('admin_angel_types', $privileges)) - ]; + angeltypes_title(), + AngelTypes_list_view($angeltypes, in_array('admin_angel_types', $privileges)) + ]; } /** @@ -220,15 +245,15 @@ function angeltypes_list_controller() */ function load_angeltype() { - if (! isset($_REQUEST['angeltype_id'])) { + 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; } diff --git a/includes/controller/event_config_controller.php b/includes/controller/event_config_controller.php index c93f8d63..623a2a7a 100644 --- a/includes/controller/event_config_controller.php +++ b/includes/controller/event_config_controller.php @@ -8,18 +8,18 @@ function event_config_title() function event_config_edit_controller() { global $privileges; - - if (! in_array('admin_event_config', $privileges)) { + + if (!in_array('admin_event_config', $privileges)) { redirect('?'); } - + $event_name = null; $event_welcome_msg = null; $buildup_start_date = null; $event_start_date = null; $event_end_date = null; $teardown_end_date = null; - + $event_config = EventConfig(); if ($event_config != null) { $event_name = $event_config['event_name']; @@ -29,75 +29,93 @@ function event_config_edit_controller() $teardown_end_date = $event_config['teardown_end_date']; $event_welcome_msg = $event_config['event_welcome_msg']; } - + if (isset($_REQUEST['submit'])) { $valid = true; - + if (isset($_REQUEST['event_name'])) { $event_name = strip_request_item('event_name'); } if ($event_name == '') { $event_name = null; } - + if (isset($_REQUEST['event_welcome_msg'])) { $event_welcome_msg = strip_request_item_nl('event_welcome_msg'); } if ($event_welcome_msg == '') { $event_welcome_msg = null; } - + $result = check_request_date('buildup_start_date', _("Please enter buildup start date."), true); $buildup_start_date = $result->getValue(); $valid &= $result->isValid(); - + $result = check_request_date('event_start_date', _("Please enter event start date."), true); $event_start_date = $result->getValue(); $valid &= $result->isValid(); - + $result = check_request_date('event_end_date', _("Please enter event end date."), true); $event_end_date = $result->getValue(); $valid &= $result->isValid(); - + $result = check_request_date('teardown_end_date', _("Please enter teardown end date."), true); $teardown_end_date = $result->getValue(); $valid &= $result->isValid(); - + if ($buildup_start_date != null && $event_start_date != null && $buildup_start_date > $event_start_date) { $valid = false; error(_("The buildup start date has to be before the event start date.")); } - + if ($event_start_date != null && $event_end_date != null && $event_start_date > $event_end_date) { $valid = false; error(_("The event start date has to be before the event end date.")); } - + if ($event_end_date != null && $teardown_end_date != null && $event_end_date > $teardown_end_date) { $valid = false; error(_("The event end date has to be before the teardown end date.")); } - + if ($buildup_start_date != null && $teardown_end_date != null && $buildup_start_date > $teardown_end_date) { $valid = false; error(_("The buildup start date has to be before the teardown end date.")); } - + if ($valid) { - $result = EventConfig_update($event_name, $buildup_start_date, $event_start_date, $event_end_date, $teardown_end_date, $event_welcome_msg); - + $result = EventConfig_update( + $event_name, + $buildup_start_date, + $event_start_date, + $event_end_date, + $teardown_end_date, + $event_welcome_msg + ); + if ($result === false) { engelsystem_error("Unable to update event config."); } - - engelsystem_log("Changed event config: $event_name, $event_welcome_msg, " . date("Y-m-d", $buildup_start_date) . ", " . date("Y-m-d", $event_start_date) . ", " . date("Y-m-d", $event_end_date) . ", " . date("Y-m-d", $teardown_end_date)); + + engelsystem_log( + "Changed event config: $event_name, $event_welcome_msg, " + . date("Y-m-d", $buildup_start_date) . ", " . date("Y-m-d", $event_start_date) . ", " + . date("Y-m-d", $event_end_date) . ", " . date("Y-m-d", $teardown_end_date) + ); success(_("Settings saved.")); redirect(page_link_to('admin_event_config')); } } - + return [ - event_config_title(), - EventConfig_edit_view($event_name, $event_welcome_msg, $buildup_start_date, $event_start_date, $event_end_date, $teardown_end_date) - ]; + event_config_title(), + EventConfig_edit_view( + $event_name, + $event_welcome_msg, + $buildup_start_date, + $event_start_date, + $event_end_date, + $teardown_end_date + ) + ]; } diff --git a/includes/controller/rooms_controller.php b/includes/controller/rooms_controller.php index 2e45dead..d19e91bb 100644 --- a/includes/controller/rooms_controller.php +++ b/includes/controller/rooms_controller.php @@ -1,7 +1,6 @@ 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) - ]; + $room['Name'], + Room_view($room, $shiftsFilterRenderer, $shiftCalendarRenderer) + ]; } /** @@ -57,17 +58,17 @@ function room_controller() */ function rooms_controller() { - if (! isset($_REQUEST['action'])) { + if (!isset($_REQUEST['action'])) { $_REQUEST['action'] = 'list'; } - + switch ($_REQUEST['action']) { - default: - case 'list': - redirect(page_link_to('admin_rooms')); - case 'view': - return room_controller(); - } + default: + case 'list': + redirect(page_link_to('admin_rooms')); + case 'view': + return room_controller(); + } } function room_link($room) @@ -85,14 +86,14 @@ function room_edit_link($room) */ function load_room() { - if (! test_request_int('room_id')) { + if (!test_request_int('room_id')) { redirect(page_link_to()); } - + $room = Room($_REQUEST['room_id']); if ($room == null) { redirect(page_link_to()); } - + return $room; } diff --git a/includes/controller/shift_entries_controller.php b/includes/controller/shift_entries_controller.php index 7fce4626..928a0990 100644 --- a/includes/controller/shift_entries_controller.php +++ b/includes/controller/shift_entries_controller.php @@ -6,112 +6,157 @@ function shift_entry_add_controller() { global $privileges, $user; - + if (isset($_REQUEST['shift_id']) && preg_match("/^[0-9]*$/", $_REQUEST['shift_id'])) { $shift_id = $_REQUEST['shift_id']; } else { redirect(page_link_to('user_shifts')); } - - // Locations laden - $rooms = sql_select("SELECT * FROM `Room` WHERE `show`='Y' ORDER BY `Name`"); + + // Locations laden + $rooms = sql_select("SELECT * FROM `Room` WHERE `show`='Y' ORDER BY `Name`"); $room_array = []; foreach ($rooms as $room) { $room_array[$room['RID']] = $room['Name']; } - + $shift = Shift($shift_id); $shift['Name'] = $room_array[$shift['RID']]; if ($shift == null) { redirect(page_link_to('user_shifts')); } - + if (isset($_REQUEST['type_id']) && preg_match("/^[0-9]*$/", $_REQUEST['type_id'])) { $type_id = $_REQUEST['type_id']; } else { redirect(page_link_to('user_shifts')); } - + if (in_array('user_shifts_admin', $privileges) || in_array('shiftentry_edit_angeltype_supporter', $privileges)) { $type = AngelType($type_id); } else { - $type = sql_select("SELECT * FROM `UserAngelTypes` JOIN `AngelTypes` ON (`UserAngelTypes`.`angeltype_id` = `AngelTypes`.`id`) WHERE `AngelTypes`.`id` = '" . sql_escape($type_id) . "' AND (`AngelTypes`.`restricted` = 0 OR (`UserAngelTypes`.`user_id` = '" . sql_escape($user['UID']) . "' AND NOT `UserAngelTypes`.`confirm_user_id` IS NULL))"); + $type = sql_select(" + SELECT * FROM `UserAngelTypes` + JOIN `AngelTypes` ON (`UserAngelTypes`.`angeltype_id` = `AngelTypes`.`id`) + WHERE `AngelTypes`.`id` = '" . sql_escape($type_id) . "' + AND ( + `AngelTypes`.`restricted` = 0 + OR ( + `UserAngelTypes`.`user_id` = '" . sql_escape($user['UID']) . "' + AND NOT `UserAngelTypes`.`confirm_user_id` IS NULL + ) + ) + "); $type = $type[0]; } - + if ($type == null) { redirect(page_link_to('user_shifts')); } - - if (isset($_REQUEST['user_id']) && preg_match("/^[0-9]*$/", $_REQUEST['user_id']) && (in_array('user_shifts_admin', $privileges) || in_array('shiftentry_edit_angeltype_supporter', $privileges))) { + + if ( + isset($_REQUEST['user_id']) + && preg_match("/^[0-9]*$/", $_REQUEST['user_id']) + && ( + in_array('user_shifts_admin', $privileges) + || in_array('shiftentry_edit_angeltype_supporter', $privileges) + ) + ) { $user_id = $_REQUEST['user_id']; } else { $user_id = $user['UID']; } - + $needed_angeltype = NeededAngeltype_by_Shift_and_Angeltype($shift, $type); $shift_entries = ShiftEntries_by_shift_and_angeltype($shift['SID'], $type['id']); - - $shift_signup_allowed = Shift_signup_allowed(User($user_id), $shift, $type, null, null, $needed_angeltype, $shift_entries); - if (! $shift_signup_allowed->isSignupAllowed()) { + + $shift_signup_allowed = Shift_signup_allowed( + User($user_id), + $shift, + $type, + null, + null, + $needed_angeltype, + $shift_entries + ); + if (!$shift_signup_allowed->isSignupAllowed()) { error(_("You are not allowed to sign up for this shift. Maybe shift is full or already running.")); redirect(shift_link($shift)); } - + if (isset($_REQUEST['submit'])) { $selected_type_id = $type_id; - if (in_array('user_shifts_admin', $privileges) || in_array('shiftentry_edit_angeltype_supporter', $privileges)) { + if (in_array('user_shifts_admin', $privileges) || in_array('shiftentry_edit_angeltype_supporter', + $privileges) + ) { if (sql_num_query("SELECT * FROM `User` WHERE `UID`='" . sql_escape($user_id) . "' LIMIT 1") == 0) { redirect(page_link_to('user_shifts')); } - - if (isset($_REQUEST['angeltype_id']) && test_request_int('angeltype_id') && sql_num_query("SELECT * FROM `AngelTypes` WHERE `id`='" . sql_escape($_REQUEST['angeltype_id']) . "' LIMIT 1") > 0) { + + if ( + isset($_REQUEST['angeltype_id']) + && test_request_int('angeltype_id') + && sql_num_query("SELECT * FROM `AngelTypes` WHERE `id`='" . sql_escape($_REQUEST['angeltype_id']) . "' LIMIT 1") > 0 + ) { $selected_type_id = $_REQUEST['angeltype_id']; } } - + if (sql_num_query("SELECT * FROM `ShiftEntry` WHERE `SID`='" . sql_escape($shift['SID']) . "' AND `UID` = '" . sql_escape($user_id) . "'")) { return error("This angel does already have an entry for this shift.", true); } - + $freeloaded = $shift['freeloaded']; $freeload_comment = $shift['freeload_comment']; if (in_array("user_shifts_admin", $privileges)) { $freeloaded = isset($_REQUEST['freeloaded']); $freeload_comment = strip_request_item_nl('freeload_comment'); } - + $comment = strip_request_item_nl('comment'); $result = ShiftEntry_create([ - 'SID' => $shift_id, - 'TID' => $selected_type_id, - 'UID' => $user_id, - 'Comment' => $comment, - 'freeloaded' => $freeloaded, - 'freeload_comment' => $freeload_comment - ]); + 'SID' => $shift_id, + 'TID' => $selected_type_id, + 'UID' => $user_id, + 'Comment' => $comment, + 'freeloaded' => $freeloaded, + 'freeload_comment' => $freeload_comment + ]); if ($result === false) { engelsystem_error('Unable to create shift entry.'); } - - if ($type['restricted'] == 0 && sql_num_query("SELECT * FROM `UserAngelTypes` INNER JOIN `AngelTypes` ON `AngelTypes`.`id` = `UserAngelTypes`.`angeltype_id` WHERE `angeltype_id` = '" . sql_escape($selected_type_id) . "' AND `user_id` = '" . sql_escape($user_id) . "'") == 0) { + + if ( + $type['restricted'] == 0 + && sql_num_query(" + SELECT * FROM `UserAngelTypes` + INNER JOIN `AngelTypes` ON `AngelTypes`.`id` = `UserAngelTypes`.`angeltype_id` + WHERE `angeltype_id` = '" . sql_escape($selected_type_id) . "' + AND `user_id` = '" . sql_escape($user_id) . "' + ") == 0 + ) { sql_query("INSERT INTO `UserAngelTypes` (`user_id`, `angeltype_id`) VALUES ('" . sql_escape($user_id) . "', '" . sql_escape($selected_type_id) . "')"); } - + $user_source = User($user_id); - engelsystem_log("User " . User_Nick_render($user_source) . " signed up for shift " . $shift['name'] . " from " . date("Y-m-d H:i", $shift['start']) . " to " . date("Y-m-d H:i", $shift['end'])); + engelsystem_log("User " . User_Nick_render($user_source) . " signed up for shift " . $shift['name'] . " from " . date("Y-m-d H:i", + $shift['start']) . " to " . date("Y-m-d H:i", $shift['end'])); success(_("You are subscribed. Thank you!") . ' ' . _("My shifts") . ' »'); redirect(shift_link($shift)); } - + if (in_array('user_shifts_admin', $privileges)) { - $users = sql_select("SELECT *, (SELECT count(*) FROM `ShiftEntry` WHERE `freeloaded`=1 AND `ShiftEntry`.`UID`=`User`.`UID`) AS `freeloaded` FROM `User` ORDER BY `Nick`"); + $users = sql_select(" + SELECT *, (SELECT count(*) FROM `ShiftEntry` WHERE `freeloaded`=1 AND `ShiftEntry`.`UID`=`User`.`UID`) AS `freeloaded` + FROM `User` + ORDER BY `Nick` + "); $users_select = []; foreach ($users as $usr) { $users_select[$usr['UID']] = $usr['Nick'] . ($usr['freeloaded'] == 0 ? "" : " (" . _("Freeloader") . ")"); } $user_text = html_select_key('user_id', 'user_id', $users_select, $user['UID']); - + $angeltypes_source = sql_select("SELECT * FROM `AngelTypes` ORDER BY `name`"); $angeltypes = []; foreach ($angeltypes_source as $angeltype) { @@ -122,12 +167,12 @@ function shift_entry_add_controller() $users = Users_by_angeltype($type); $users_select = []; foreach ($users as $usr) { - if (! $type['restricted'] || $usr['confirm_user_id'] != null) { + if (!$type['restricted'] || $usr['confirm_user_id'] != null) { $users_select[$usr['UID']] = $usr['Nick']; } } $user_text = html_select_key('user_id', 'user_id', $users_select, $user['UID']); - + $angeltypes_source = User_angeltypes($user); $angeltypes = []; foreach ($angeltypes_source as $angeltype) { @@ -140,8 +185,10 @@ function shift_entry_add_controller() $user_text = User_Nick_render($user); $angeltype_select = $type['name']; } - - return ShiftEntry_edit_view($user_text, date("Y-m-d H:i", $shift['start']) . ' – ' . date('Y-m-d H:i', $shift['end']) . ' (' . shift_length($shift) . ')', $shift['Name'], $shift['name'], $angeltype_select, "", false, null, in_array('user_shifts_admin', $privileges)); + + return ShiftEntry_edit_view($user_text, date("Y-m-d H:i", $shift['start']) . ' – ' . date('Y-m-d H:i', + $shift['end']) . ' (' . shift_length($shift) . ')', $shift['Name'], $shift['name'], $angeltype_select, "", + false, null, in_array('user_shifts_admin', $privileges)); } /** @@ -150,14 +197,22 @@ function shift_entry_add_controller() function shift_entry_delete_controller() { global $privileges, $user; - - if (! isset($_REQUEST['entry_id']) || ! test_request_int('entry_id')) { + + if (!isset($_REQUEST['entry_id']) || !test_request_int('entry_id')) { redirect(page_link_to('user_shifts')); } $entry_id = $_REQUEST['entry_id']; - + $shift_entry_source = sql_select(" - SELECT `User`.`Nick`, `ShiftEntry`.`Comment`, `ShiftEntry`.`UID`, `ShiftTypes`.`name`, `Shifts`.*, `Room`.`Name`, `AngelTypes`.`name` as `angel_type`, `AngelTypes`.`id` as `angeltype_id` + SELECT + `User`.`Nick`, + `ShiftEntry`.`Comment`, + `ShiftEntry`.`UID`, + `ShiftTypes`.`name`, + `Shifts`.*, + `Room`.`Name`, + `AngelTypes`.`name` AS `angel_type`, + `AngelTypes`.`id` AS `angeltype_id` FROM `ShiftEntry` JOIN `User` ON (`User`.`UID`=`ShiftEntry`.`UID`) JOIN `AngelTypes` ON (`ShiftEntry`.`TID` = `AngelTypes`.`id`) @@ -167,17 +222,25 @@ function shift_entry_delete_controller() WHERE `ShiftEntry`.`id`='" . sql_escape($entry_id) . "'"); if (count($shift_entry_source) > 0) { $shift_entry_source = $shift_entry_source[0]; - - if (!in_array('user_shifts_admin', $privileges) && (!in_array('shiftentry_edit_angeltype_supporter', $privileges) || !User_is_AngelType_supporter($user, AngelType($shift_entry_source['angeltype_id'])))) { + + if (!in_array('user_shifts_admin', $privileges) && (!in_array('shiftentry_edit_angeltype_supporter', + $privileges) || !User_is_AngelType_supporter($user, AngelType($shift_entry_source['angeltype_id']))) + ) { redirect(page_link_to('user_shifts')); } - + $result = ShiftEntry_delete($entry_id); if ($result === false) { engelsystem_error('Unable to delete shift entry.'); } - - engelsystem_log("Deleted " . User_Nick_render($shift_entry_source) . "'s shift: " . $shift_entry_source['name'] . " at " . $shift_entry_source['Name'] . " from " . date("Y-m-d H:i", $shift_entry_source['start']) . " to " . date("Y-m-d H:i", $shift_entry_source['end']) . " as " . $shift_entry_source['angel_type']); + + engelsystem_log( + "Deleted " . User_Nick_render($shift_entry_source) . "'s shift: " . $shift_entry_source['name'] + . " at " . $shift_entry_source['Name'] + . " from " . date("Y-m-d H:i", $shift_entry_source['start']) + . " to " . date("Y-m-d H:i", $shift_entry_source['end']) + . " as " . $shift_entry_source['angel_type'] + ); success(_("Shift entry deleted.")); } else { error(_("Entry not found.")); diff --git a/includes/controller/shifts_controller.php b/includes/controller/shifts_controller.php index 69d0de1f..e2dd712b 100644 --- a/includes/controller/shifts_controller.php +++ b/includes/controller/shifts_controller.php @@ -22,93 +22,96 @@ function shift_edit_link($shift) function shift_edit_controller() { global $privileges; - - // Schicht bearbeiten - $msg = ""; + + // Schicht bearbeiten + $msg = ""; $valid = true; - - if (! in_array('admin_shifts', $privileges)) { + + if (!in_array('admin_shifts', $privileges)) { redirect(page_link_to('user_shifts')); } - - if (! isset($_REQUEST['edit_shift']) || ! test_request_int('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); - + $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])) { + 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']; - + 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']; - } else { - $valid = false; - $msg .= error(_("Please select a room."), true); - } - + $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']; + } else { + $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['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 ($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); + $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; - + $result = Shift_update($shift); if ($result === false) { engelsystem_error('Unable to update shift.'); @@ -119,100 +122,119 @@ function shift_edit_controller() 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)); + + 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 - ])); + '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 .= 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:"), $room, $rid), - form_text('start', _("Start:"), date("Y-m-d H:i", $start)), - form_text('end', _("End:"), date("Y-m-d H:i", $end)), - '

    ' . _("Needed angels") . '

    ', - $angel_types_spinner, - form_submit('submit', _("Save")) - ]) - ]); + + 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:"), $room, $rid), + form_text('start', _("Start:"), date("Y-m-d H:i", $start)), + form_text('end', _("End:"), date("Y-m-d H:i", $end)), + '

    ' . _("Needed angels") . '

    ', + $angel_types_spinner, + form_submit('submit', _("Save")) + ]) + ] + ); } function shift_delete_controller() { global $privileges; - - if (! in_array('user_shifts_admin', $privileges)) { + + 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')); } - - // 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')); - } $shift_id = $_REQUEST['delete_shift']; - + $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); - - 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')); - } - + + // Schicht löschen bestätigt + if (isset($_REQUEST['delete'])) { + 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')); + } + 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), - '' . _("delete") . '' - ]); + 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), + '' . _("delete") . '' + ]); } function shift_controller() { global $user, $privileges; - - if (! in_array('user_shifts', $privileges)) { + + if (!in_array('user_shifts', $privileges)) { redirect(page_link_to('?')); } - - if (! isset($_REQUEST['shift_id'])) { + + 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')); } - + $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']); - - $angeltype_signup_state = Shift_signup_allowed($user, $shift, $angeltype, null, $user_shifts, $needed_angeltype, $shift_entries); + + $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 { @@ -220,27 +242,27 @@ function shift_controller() } $angeltype['shift_signup_state'] = $angeltype_signup_state; } - + return [ - $shift['name'], - Shift_view($shift, $shifttype, $room, $angeltypes, $shift_signup_state) - ]; + $shift['name'], + Shift_view($shift, $shifttype, $room, $angeltypes, $shift_signup_state) + ]; } function shifts_controller() { - if (! isset($_REQUEST['action'])) { + if (!isset($_REQUEST['action'])) { redirect(page_link_to('user_shifts')); } - + switch ($_REQUEST['action']) { - default: - redirect(page_link_to('?')); - case 'view': - return shift_controller(); - case 'next': - return shift_next_controller(); - } + default: + redirect(page_link_to('?')); + case 'view': + return shift_controller(); + case 'next': + return shift_next_controller(); + } } /** @@ -249,20 +271,20 @@ function shifts_controller() function shift_next_controller() { global $user, $privileges; - - if (! in_array('user_shifts', $privileges)) { + + if (!in_array('user_shifts', $privileges)) { redirect(page_link_to('?')); } - + $upcoming_shifts = ShiftEntries_upcoming_for_user($user); if ($upcoming_shifts === false) { return false; } - + if (count($upcoming_shifts) > 0) { redirect(shift_link($upcoming_shifts[0])); } - + redirect(page_link_to('user_shifts')); } @@ -272,24 +294,24 @@ function shift_next_controller() function shifts_json_export_all_controller() { global $api_key; - + if ($api_key == "") { engelsystem_error("Config contains empty apikey."); } - - if (! isset($_REQUEST['api_key'])) { + + if (!isset($_REQUEST['api_key'])) { engelsystem_error("Missing parameter 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."); } - + header("Content-Type: application/json; charset=utf-8"); raw_output(json_encode($shifts_source)); } @@ -301,23 +323,23 @@ function shifts_json_export_all_controller() function shifts_json_export_controller() { global $user; - - if (! isset($_REQUEST['key']) || ! preg_match("/^[0-9a-f]{32}$/", $_REQUEST['key'])) { + + if (!isset($_REQUEST['key']) || !preg_match("/^[0-9a-f]{32}$/", $_REQUEST['key'])) { engelsystem_error("Missing 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']))) { + if (!in_array('shifts_json_export', privileges_for_user($user['UID']))) { engelsystem_error("No privilege for shifts_json_export."); } - + $shifts = load_ical_shifts(); - + header("Content-Type: application/json; charset=utf-8"); raw_output(json_encode($shifts)); } @@ -328,6 +350,6 @@ function shifts_json_export_controller() function load_ical_shifts() { global $user; - + return Shifts_by_user($user); } diff --git a/includes/controller/shifttypes_controller.php b/includes/controller/shifttypes_controller.php index f54111c4..4bbf041d 100644 --- a/includes/controller/shifttypes_controller.php +++ b/includes/controller/shifttypes_controller.php @@ -10,34 +10,34 @@ function shifttype_link($shifttype) */ function shifttype_delete_controller() { - if (! isset($_REQUEST['shifttype_id'])) { + if (!isset($_REQUEST['shifttype_id'])) { redirect(page_link_to('shifttypes')); } - + $shifttype = ShiftType($_REQUEST['shifttype_id']); if ($shifttype === false) { engelsystem_error('Unable to load shifttype.'); } - + if ($shifttype == null) { redirect(page_link_to('shifttypes')); } - + if (isset($_REQUEST['confirmed'])) { $result = ShiftType_delete($shifttype['id']); if ($result === false) { engelsystem_error('Unable to delete shifttype.'); } - + engelsystem_log('Deleted shifttype ' . $shifttype['name']); success(sprintf(_('Shifttype %s deleted.'), $shifttype['name'])); redirect(page_link_to('shifttypes')); } - + return [ - sprintf(_("Delete shifttype %s"), $shifttype['name']), - ShiftType_delete_view($shifttype) - ]; + sprintf(_("Delete shifttype %s"), $shifttype['name']), + ShiftType_delete_view($shifttype) + ]; } /** @@ -49,9 +49,9 @@ function shifttype_edit_controller() $name = ""; $angeltype_id = null; $description = ""; - + $angeltypes = AngelTypes(); - + if (isset($_REQUEST['shifttype_id'])) { $shifttype = ShiftType($_REQUEST['shifttype_id']); if ($shifttype === false) { @@ -66,27 +66,27 @@ function shifttype_edit_controller() $angeltype_id = $shifttype['angeltype_id']; $description = $shifttype['description']; } - + if (isset($_REQUEST['submit'])) { $valid = true; - + if (isset($_REQUEST['name']) && $_REQUEST['name'] != '') { $name = strip_request_item('name'); } else { $valid = false; error(_('Please enter a name.')); } - + if (isset($_REQUEST['angeltype_id']) && preg_match("/^[0-9]+$/", $_REQUEST['angeltype_id'])) { $angeltype_id = $_REQUEST['angeltype_id']; } else { $angeltype_id = null; } - + if (isset($_REQUEST['description'])) { $description = strip_request_item_nl('description'); } - + if ($valid) { if ($shifttype_id) { $result = ShiftType_update($shifttype_id, $name, $angeltype_id, $description); @@ -106,16 +106,16 @@ function shifttype_edit_controller() redirect(page_link_to('shifttypes') . '&action=view&shifttype_id=' . $shifttype_id); } } - + return [ - shifttypes_title(), - ShiftType_edit_view($name, $angeltype_id, $angeltypes, $description, $shifttype_id) - ]; + shifttypes_title(), + ShiftType_edit_view($name, $angeltype_id, $angeltypes, $description, $shifttype_id) + ]; } function shifttype_controller() { - if (! isset($_REQUEST['shifttype_id'])) { + if (!isset($_REQUEST['shifttype_id'])) { redirect(page_link_to('shifttypes')); } $shifttype = ShiftType($_REQUEST['shifttype_id']); @@ -125,16 +125,16 @@ function shifttype_controller() if ($shifttype == null) { redirect(page_link_to('shifttypes')); } - + $angeltype = null; if ($shifttype['angeltype_id'] != null) { $angeltype = AngelType($shifttype['angeltype_id']); } - + return [ - $shifttype['name'], - ShiftType_view($shifttype, $angeltype) - ]; + $shifttype['name'], + ShiftType_view($shifttype, $angeltype) + ]; } /** @@ -146,11 +146,11 @@ function shifttypes_list_controller() if ($shifttypes === false) { engelsystem_error("Unable to load shifttypes."); } - + return [ - shifttypes_title(), - ShiftTypes_list_view($shifttypes) - ]; + shifttypes_title(), + ShiftTypes_list_view($shifttypes) + ]; } /** @@ -166,19 +166,19 @@ function shifttypes_title() */ function shifttypes_controller() { - if (! isset($_REQUEST['action'])) { + if (!isset($_REQUEST['action'])) { $_REQUEST['action'] = 'list'; } - + switch ($_REQUEST['action']) { - default: - case 'list': - return shifttypes_list_controller(); - case 'view': - return shifttype_controller(); - case 'edit': - return shifttype_edit_controller(); - case 'delete': - return shifttype_delete_controller(); - } + default: + case 'list': + return shifttypes_list_controller(); + case 'view': + return shifttype_controller(); + case 'edit': + return shifttype_edit_controller(); + case 'delete': + return shifttype_delete_controller(); + } } diff --git a/includes/controller/user_angeltypes_controller.php b/includes/controller/user_angeltypes_controller.php index 7469304b..fefde9ae 100644 --- a/includes/controller/user_angeltypes_controller.php +++ b/includes/controller/user_angeltypes_controller.php @@ -6,18 +6,21 @@ function user_angeltypes_unconfirmed_hint() { global $user; - + $unconfirmed_user_angeltypes = User_unconfirmed_AngelTypes($user); if (count($unconfirmed_user_angeltypes) == 0) { return null; } - + $unconfirmed_links = []; foreach ($unconfirmed_user_angeltypes as $user_angeltype) { $unconfirmed_links[] = '' . $user_angeltype['name'] . ' (+' . $user_angeltype['count'] . ')' . ''; } - - return sprintf(ngettext("There is %d unconfirmed angeltype.", "There are %d unconfirmed angeltypes.", count($unconfirmed_user_angeltypes)), count($unconfirmed_user_angeltypes)) . " " . _('Angel types which need approvals:') . ' ' . join(', ', $unconfirmed_links); + + return sprintf(ngettext("There is %d unconfirmed angeltype.", "There are %d unconfirmed angeltypes.", + count($unconfirmed_user_angeltypes)), + count($unconfirmed_user_angeltypes)) . " " . _('Angel types which need approvals:') . ' ' . join(', ', + $unconfirmed_links); } /** @@ -26,35 +29,35 @@ function user_angeltypes_unconfirmed_hint() function user_angeltypes_delete_all_controller() { global $user; - - if (! isset($_REQUEST['angeltype_id'])) { + + if (!isset($_REQUEST['angeltype_id'])) { error(_("Angeltype doesn't exist.")); redirect(page_link_to('angeltypes')); } - + $angeltype = AngelType($_REQUEST['angeltype_id']); if ($angeltype == null) { error(_("Angeltype doesn't exist.")); redirect(page_link_to('angeltypes')); } - - if (! User_is_AngelType_supporter($user, $angeltype)) { + + if (!User_is_AngelType_supporter($user, $angeltype)) { error(_("You are not allowed to delete all users for this angeltype.")); redirect(page_link_to('angeltypes')); } - + if (isset($_REQUEST['confirmed'])) { UserAngelTypes_delete_all($angeltype['id']); - + engelsystem_log(sprintf("Denied all users for angeltype %s", AngelType_name_render($angeltype))); success(sprintf(_("Denied all users for angeltype %s."), AngelType_name_render($angeltype))); redirect(page_link_to('angeltypes') . '&action=view&angeltype_id=' . $angeltype['id']); } - + return [ - _("Deny all users"), - UserAngelTypes_delete_all_view($angeltype) - ]; + _("Deny all users"), + UserAngelTypes_delete_all_view($angeltype) + ]; } /** @@ -63,41 +66,41 @@ function user_angeltypes_delete_all_controller() function user_angeltypes_confirm_all_controller() { global $user, $privileges; - - if (! isset($_REQUEST['angeltype_id'])) { + + if (!isset($_REQUEST['angeltype_id'])) { error(_("Angeltype doesn't exist.")); redirect(page_link_to('angeltypes')); } - + $angeltype = AngelType($_REQUEST['angeltype_id']); if ($angeltype == null) { error(_("Angeltype doesn't exist.")); redirect(page_link_to('angeltypes')); } - + $user_angeltype = UserAngelType_by_User_and_AngelType($user, $angeltype); if ($user_angeltype == null) { error(_("User angeltype doesn't exist.")); redirect(page_link_to('angeltypes')); } - - if (! in_array('admin_user_angeltypes', $privileges) && ! $user_angeltype['supporter']) { + + if (!in_array('admin_user_angeltypes', $privileges) && !$user_angeltype['supporter']) { error(_("You are not allowed to confirm all users for this angeltype.")); redirect(page_link_to('angeltypes')); } - + if (isset($_REQUEST['confirmed'])) { UserAngelTypes_confirm_all($angeltype['id'], $user); - + engelsystem_log(sprintf("Confirmed all users for angeltype %s", AngelType_name_render($angeltype))); success(sprintf(_("Confirmed all users for angeltype %s."), AngelType_name_render($angeltype))); redirect(page_link_to('angeltypes') . '&action=view&angeltype_id=' . $angeltype['id']); } - + return [ - _("Confirm all users"), - UserAngelTypes_confirm_all_view($angeltype) - ]; + _("Confirm all users"), + UserAngelTypes_confirm_all_view($angeltype) + ]; } /** @@ -106,50 +109,58 @@ function user_angeltypes_confirm_all_controller() function user_angeltype_confirm_controller() { global $user; - - if (! isset($_REQUEST['user_angeltype_id'])) { + + if (!isset($_REQUEST['user_angeltype_id'])) { error(_("User angeltype doesn't exist.")); redirect(page_link_to('angeltypes')); } - + $user_angeltype = UserAngelType($_REQUEST['user_angeltype_id']); if ($user_angeltype == null) { error(_("User angeltype doesn't exist.")); redirect(page_link_to('angeltypes')); } - + $angeltype = AngelType($user_angeltype['angeltype_id']); if ($angeltype == null) { error(_("Angeltype doesn't exist.")); redirect(page_link_to('angeltypes')); } - - if (! User_is_AngelType_supporter($user, $angeltype)) { + + if (!User_is_AngelType_supporter($user, $angeltype)) { error(_("You are not allowed to confirm this users angeltype.")); redirect(page_link_to('angeltypes')); } - + $user_source = User($user_angeltype['user_id']); if ($user_source == null) { error(_("User doesn't exist.")); redirect(page_link_to('angeltypes')); } - + if (isset($_REQUEST['confirmed'])) { $result = UserAngelType_confirm($user_angeltype['id'], $user); if ($result === false) { engelsystem_error("Unable to confirm user angeltype."); } - - engelsystem_log(sprintf("%s confirmed for angeltype %s", User_Nick_render($user_source), AngelType_name_render($angeltype))); - success(sprintf(_("%s confirmed for angeltype %s."), User_Nick_render($user_source), AngelType_name_render($angeltype))); + + engelsystem_log(sprintf( + "%s confirmed for angeltype %s", + User_Nick_render($user_source), + AngelType_name_render($angeltype) + )); + success(sprintf( + _("%s confirmed for angeltype %s."), + User_Nick_render($user_source), + AngelType_name_render($angeltype) + )); redirect(page_link_to('angeltypes') . '&action=view&angeltype_id=' . $angeltype['id']); } - + return [ - _("Confirm angeltype for user"), - UserAngelType_confirm_view($user_angeltype, $user_source, $angeltype) - ]; + _("Confirm angeltype for user"), + UserAngelType_confirm_view($user_angeltype, $user_source, $angeltype) + ]; } /** @@ -158,52 +169,52 @@ function user_angeltype_confirm_controller() function user_angeltype_delete_controller() { global $user; - - if (! isset($_REQUEST['user_angeltype_id'])) { + + if (!isset($_REQUEST['user_angeltype_id'])) { error(_("User angeltype doesn't exist.")); redirect(page_link_to('angeltypes')); } - + $user_angeltype = UserAngelType($_REQUEST['user_angeltype_id']); if ($user_angeltype == null) { error(_("User angeltype doesn't exist.")); redirect(page_link_to('angeltypes')); } - + $angeltype = AngelType($user_angeltype['angeltype_id']); if ($angeltype == null) { error(_("Angeltype doesn't exist.")); redirect(page_link_to('angeltypes')); } - + $user_source = User($user_angeltype['user_id']); if ($user_source == null) { error(_("User doesn't exist.")); redirect(page_link_to('angeltypes')); } - - if ($user['UID'] != $user_angeltype['user_id'] && ! User_is_AngelType_supporter($user, $angeltype)) { + + if ($user['UID'] != $user_angeltype['user_id'] && !User_is_AngelType_supporter($user, $angeltype)) { error(_("You are not allowed to delete this users angeltype.")); redirect(page_link_to('angeltypes')); } - + if (isset($_REQUEST['confirmed'])) { $result = UserAngelType_delete($user_angeltype); if ($result === false) { engelsystem_error("Unable to delete user angeltype."); } - + $success_message = sprintf(_("User %s removed from %s."), User_Nick_render($user_source), $angeltype['name']); engelsystem_log($success_message); success($success_message); - + redirect(page_link_to('angeltypes') . '&action=view&angeltype_id=' . $angeltype['id']); } - + return [ - _("Remove angeltype"), - UserAngelType_delete_view($user_angeltype, $user_source, $angeltype) - ]; + _("Remove angeltype"), + UserAngelType_delete_view($user_angeltype, $user_source, $angeltype) + ]; } /** @@ -212,56 +223,60 @@ function user_angeltype_delete_controller() function user_angeltype_update_controller() { global $privileges; - - if (! in_array('admin_angel_types', $privileges)) { + + if (!in_array('admin_angel_types', $privileges)) { error(_("You are not allowed to set supporter rights.")); redirect(page_link_to('angeltypes')); } - - if (! isset($_REQUEST['user_angeltype_id'])) { + + if (!isset($_REQUEST['user_angeltype_id'])) { error(_("User angeltype doesn't exist.")); redirect(page_link_to('angeltypes')); } - + if (isset($_REQUEST['supporter']) && preg_match("/^[01]$/", $_REQUEST['supporter'])) { $supporter = $_REQUEST['supporter'] == "1"; } else { error(_("No supporter update given.")); redirect(page_link_to('angeltypes')); } - + $user_angeltype = UserAngelType($_REQUEST['user_angeltype_id']); if ($user_angeltype == null) { error(_("User angeltype doesn't exist.")); redirect(page_link_to('angeltypes')); } - + $angeltype = AngelType($user_angeltype['angeltype_id']); if ($angeltype == null) { error(_("Angeltype doesn't exist.")); redirect(page_link_to('angeltypes')); } - + $user_source = User($user_angeltype['user_id']); if ($user_source == null) { error(_("User doesn't exist.")); redirect(page_link_to('angeltypes')); } - + if (isset($_REQUEST['confirmed'])) { UserAngelType_update($user_angeltype['id'], $supporter); - - $success_message = sprintf($supporter ? _("Added supporter rights for %s to %s.") : _("Removed supporter rights for %s from %s."), AngelType_name_render($angeltype), User_Nick_render($user_source)); + + $success_message = sprintf( + $supporter ? _("Added supporter rights for %s to %s.") : _("Removed supporter rights for %s from %s."), + AngelType_name_render($angeltype), + User_Nick_render($user_source) + ); engelsystem_log($success_message); success($success_message); - + redirect(page_link_to('angeltypes') . '&action=view&angeltype_id=' . $angeltype['id']); } - + return [ - $supporter ? _("Add supporter rights") : _("Remove supporter rights"), - UserAngelType_update_view($user_angeltype, $user_source, $angeltype, $supporter) - ]; + $supporter ? _("Add supporter rights") : _("Remove supporter rights"), + UserAngelType_update_view($user_angeltype, $user_source, $angeltype, $supporter) + ]; } /** @@ -270,42 +285,54 @@ function user_angeltype_update_controller() function user_angeltype_add_controller() { global $user; - + $angeltype = load_angeltype(); - - // User is joining by itself - if (! User_is_AngelType_supporter($user, $angeltype)) { - return user_angeltype_join_controller($angeltype); - } - - // Allow to add any user - - // Default selection - $user_source = $user; - - // Load possible users, that are not in the angeltype already - $users_source = Users_by_angeltype_inverted($angeltype); - + + // User is joining by itself + if (!User_is_AngelType_supporter($user, $angeltype)) { + return user_angeltype_join_controller($angeltype); + } + + // Allow to add any user + + // Default selection + $user_source = $user; + + // Load possible users, that are not in the angeltype already + $users_source = Users_by_angeltype_inverted($angeltype); + if (isset($_REQUEST['submit'])) { $user_source = load_user(); - - if (! UserAngelType_exists($user_source, $angeltype)) { + + if (!UserAngelType_exists($user_source, $angeltype)) { $user_angeltype_id = UserAngelType_create($user_source, $angeltype); - - engelsystem_log(sprintf("User %s added to %s.", User_Nick_render($user_source), AngelType_name_render($angeltype))); - success(sprintf(_("User %s added to %s."), User_Nick_render($user_source), AngelType_name_render($angeltype))); - + + engelsystem_log(sprintf( + "User %s added to %s.", + User_Nick_render($user_source), + AngelType_name_render($angeltype) + )); + success(sprintf( + _("User %s added to %s."), + User_Nick_render($user_source), + AngelType_name_render($angeltype) + )); + UserAngelType_confirm($user_angeltype_id, $user_source); - engelsystem_log(sprintf("User %s confirmed as %s.", User_Nick_render($user), AngelType_name_render($angeltype))); - + engelsystem_log(sprintf( + "User %s confirmed as %s.", + User_Nick_render($user), + AngelType_name_render($angeltype) + )); + redirect(page_link_to('angeltypes') . '&action=view&angeltype_id=' . $angeltype['id']); } } - + return [ - _("Add user to angeltype"), - UserAngelType_add_view($angeltype, $users_source, $user_source['UID']) - ]; + _("Add user to angeltype"), + UserAngelType_add_view($angeltype, $users_source, $user_source['UID']) + ]; } /** @@ -314,32 +341,36 @@ function user_angeltype_add_controller() function user_angeltype_join_controller($angeltype) { global $user, $privileges; - + $user_angeltype = UserAngelType_by_User_and_AngelType($user, $angeltype); if ($user_angeltype != null) { error(sprintf(_("You are already a %s."), $angeltype['name'])); redirect(page_link_to('angeltypes')); } - + if (isset($_REQUEST['confirmed'])) { $user_angeltype_id = UserAngelType_create($user, $angeltype); - + $success_message = sprintf(_("You joined %s."), $angeltype['name']); engelsystem_log(sprintf("User %s joined %s.", User_Nick_render($user), AngelType_name_render($angeltype))); success($success_message); - + if (in_array('admin_user_angeltypes', $privileges)) { UserAngelType_confirm($user_angeltype_id, $user); - engelsystem_log(sprintf("User %s confirmed as %s.", User_Nick_render($user), AngelType_name_render($angeltype))); + engelsystem_log(sprintf( + "User %s confirmed as %s.", + User_Nick_render($user), + AngelType_name_render($angeltype) + )); } - + redirect(page_link_to('angeltypes') . '&action=view&angeltype_id=' . $angeltype['id']); } - + return [ - sprintf(_("Become a %s"), $angeltype['name']), - UserAngelType_join_view($user, $angeltype) - ]; + sprintf(_("Become a %s"), $angeltype['name']), + UserAngelType_join_view($user, $angeltype) + ]; } /** @@ -347,24 +378,24 @@ function user_angeltype_join_controller($angeltype) */ function user_angeltypes_controller() { - if (! isset($_REQUEST['action'])) { + if (!isset($_REQUEST['action'])) { redirect(page_link_to('angeltypes')); } - + switch ($_REQUEST['action']) { - case 'delete_all': - return user_angeltypes_delete_all_controller(); - case 'confirm_all': - return user_angeltypes_confirm_all_controller(); - case 'confirm': - return user_angeltype_confirm_controller(); - case 'delete': - return user_angeltype_delete_controller(); - case 'update': - return user_angeltype_update_controller(); - case 'add': - return user_angeltype_add_controller(); - default: - redirect(page_link_to('angeltypes')); - } + case 'delete_all': + return user_angeltypes_delete_all_controller(); + case 'confirm_all': + return user_angeltypes_confirm_all_controller(); + case 'confirm': + return user_angeltype_confirm_controller(); + case 'delete': + return user_angeltype_delete_controller(); + case 'update': + return user_angeltype_update_controller(); + case 'add': + return user_angeltype_add_controller(); + default: + redirect(page_link_to('angeltypes')); + } } diff --git a/includes/controller/user_driver_licenses_controller.php b/includes/controller/user_driver_licenses_controller.php index 434d9274..a499eff7 100644 --- a/includes/controller/user_driver_licenses_controller.php +++ b/includes/controller/user_driver_licenses_controller.php @@ -1,26 +1,30 @@ ' . _("driving license information") . ''); + return sprintf( + _("You joined an angeltype which requires a driving license. Please edit your driving license information here: %s."), + '' . _("driving license information") . '' + ); } } - + return null; } @@ -30,18 +34,18 @@ function user_driver_license_required_hint() function user_driver_licenses_controller() { global $user; - - if (! isset($user)) { + + if (!isset($user)) { redirect(page_link_to('')); } - + $action = strip_request_item('action', 'edit'); - + switch ($action) { - default: - case 'edit': - return user_driver_license_edit_controller(); - } + default: + case 'edit': + return user_driver_license_edit_controller(); + } } /** @@ -63,16 +67,16 @@ function user_driver_license_edit_link($user = null) function user_driver_license_load_user() { global $user; - + $user_source = $user; - + if (isset($_REQUEST['user_id'])) { $user_source = User($_REQUEST['user_id']); if ($user_source == null) { redirect(user_driver_license_edit_link()); } } - + return $user_source; } @@ -82,14 +86,14 @@ function user_driver_license_load_user() function user_driver_license_edit_controller() { global $privileges, $user; - + $user_source = user_driver_license_load_user(); - - // only privilege admin_user can edit other users driver license information - if ($user['UID'] != $user_source['UID'] && ! in_array('admin_user', $privileges)) { - redirect(user_driver_license_edit_link()); - } - + + // only privilege admin_user can edit other users driver license information + if ($user['UID'] != $user_source['UID'] && !in_array('admin_user', $privileges)) { + redirect(user_driver_license_edit_link()); + } + $user_driver_license = UserDriverLicense($user_source['UID']); if ($user_driver_license == null) { $wants_to_drive = false; @@ -97,7 +101,7 @@ function user_driver_license_edit_controller() } else { $wants_to_drive = true; } - + if (isset($_REQUEST['submit'])) { $wants_to_drive = isset($_REQUEST['wants_to_drive']); if ($wants_to_drive) { @@ -107,7 +111,7 @@ function user_driver_license_edit_controller() $user_driver_license['has_license_7_5t_truck'] = isset($_REQUEST['has_license_7_5t_truck']); $user_driver_license['has_license_12_5t_truck'] = isset($_REQUEST['has_license_12_5t_truck']); $user_driver_license['has_license_forklift'] = isset($_REQUEST['has_license_forklift']); - + if (UserDriverLicense_valid($user_driver_license)) { if ($user_driver_license['user_id'] == null) { $user_driver_license = UserDriverLicenses_create($user_driver_license, $user); @@ -127,9 +131,9 @@ function user_driver_license_edit_controller() redirect(user_link($user_source)); } } - + return [ - sprintf(_("Edit %s driving license information"), $user_source['Nick']), - UserDriverLicense_edit_view($user_source, $wants_to_drive, $user_driver_license) - ]; + sprintf(_("Edit %s driving license information"), $user_source['Nick']), + UserDriverLicense_edit_view($user_source, $wants_to_drive, $user_driver_license) + ]; } diff --git a/includes/controller/users_controller.php b/includes/controller/users_controller.php index 4f7b97eb..4a946aa8 100644 --- a/includes/controller/users_controller.php +++ b/includes/controller/users_controller.php @@ -1,6 +1,6 @@ = 0) { $vouchers = trim($_REQUEST['vouchers']); } else { $valid = false; error(_("Please enter a valid number of vouchers.")); } - + if ($valid) { $user_source['got_voucher'] = $vouchers; - + $result = User_update($user_source); if ($result === false) { engelsystem_error('Unable to update user.'); } - + success(_("Saved the number of vouchers.")); - engelsystem_log(User_Nick_render($user_source) . ': ' . sprintf("Got %s vouchers", $user_source['got_voucher'])); - + engelsystem_log(User_Nick_render($user_source) . ': ' . sprintf("Got %s vouchers", + $user_source['got_voucher'])); + redirect(user_link($user_source)); } } - + return [ - sprintf(_("%s's vouchers"), $user_source['Nick']), - User_edit_vouchers_view($user_source) - ]; + sprintf(_("%s's vouchers"), $user_source['Nick']), + User_edit_vouchers_view($user_source) + ]; } function user_controller() { global $privileges, $user; - + $user_source = $user; if (isset($_REQUEST['user_id'])) { $user_source = User($_REQUEST['user_id']); @@ -160,11 +163,11 @@ function user_controller() redirect('?'); } } - + $shifts = Shifts_by_user($user_source, in_array("user_shifts_admin", $privileges)); foreach ($shifts as &$shift) { // TODO: Move queries to model - $shift['needed_angeltypes'] = sql_select("SELECT DISTINCT `AngelTypes`.* FROM `ShiftEntry` JOIN `AngelTypes` ON `ShiftEntry`.`TID`=`AngelTypes`.`id` WHERE `ShiftEntry`.`SID`='" . sql_escape($shift['SID']) . "' ORDER BY `AngelTypes`.`name`"); + $shift['needed_angeltypes'] = sql_select("SELECT DISTINCT `AngelTypes`.* FROM `ShiftEntry` JOIN `AngelTypes` ON `ShiftEntry`.`TID`=`AngelTypes`.`id` WHERE `ShiftEntry`.`SID`='" . sql_escape($shift['SID']) . "' ORDER BY `AngelTypes`.`name`"); foreach ($shift['needed_angeltypes'] as &$needed_angeltype) { $needed_angeltype['users'] = sql_select(" SELECT `ShiftEntry`.`freeloaded`, `User`.* @@ -174,15 +177,23 @@ function user_controller() AND `ShiftEntry`.`TID`='" . sql_escape($needed_angeltype['id']) . "'"); } } - + if ($user_source['api_key'] == "") { User_reset_api_key($user_source, false); } - + return [ - $user_source['Nick'], - User_view($user_source, in_array('admin_user', $privileges), User_is_freeloader($user_source), User_angeltypes($user_source), User_groups($user_source), $shifts, $user['UID'] == $user_source['UID']) - ]; + $user_source['Nick'], + User_view( + $user_source, + in_array('admin_user', $privileges), + User_is_freeloader($user_source), + User_angeltypes($user_source), + User_groups($user_source), + $shifts, + $user['UID'] == $user_source['UID'] + ) + ]; } /** @@ -191,29 +202,38 @@ function user_controller() function users_list_controller() { global $privileges; - - if (! in_array('admin_user', $privileges)) { + + if (!in_array('admin_user', $privileges)) { redirect(page_link_to('')); } - + $order_by = 'Nick'; if (isset($_REQUEST['OrderBy']) && in_array($_REQUEST['OrderBy'], User_sortable_columns())) { $order_by = $_REQUEST['OrderBy']; } - + $users = Users($order_by); if ($users === false) { engelsystem_error('Unable to load users.'); } - + foreach ($users as &$user) { $user['freeloads'] = count(ShiftEntries_freeloaded_by_user($user)); } - + return [ - _('All users'), - Users_view($users, $order_by, User_arrived_count(), User_active_count(), User_force_active_count(), ShiftEntries_freeleaded_count(), User_tshirts_count(), User_got_voucher_count()) - ]; + _('All users'), + Users_view( + $users, + $order_by, + User_arrived_count(), + User_active_count(), + User_force_active_count(), + ShiftEntries_freeleaded_count(), + User_tshirts_count(), + User_got_voucher_count() + ) + ]; } /** @@ -227,7 +247,7 @@ function user_password_recovery_set_new_controller() error(_("Token is not correct.")); redirect(page_link_to('login')); } - + if (isset($_REQUEST['submit'])) { $valid = true; @@ -240,14 +260,14 @@ function user_password_recovery_set_new_controller() $valid = false; error(_("Your password is to short (please use at least 6 characters).")); } - + if ($valid) { set_password($user_source['UID'], $_REQUEST['password']); success(_("Password saved.")); redirect(page_link_to('login')); } } - + return User_password_set_view(); } @@ -258,7 +278,7 @@ function user_password_recovery_start_controller() { if (isset($_REQUEST['submit'])) { $valid = true; - + if (isset($_REQUEST['email']) && strlen(strip_request_item('email')) > 0) { $email = strip_request_item('email'); if (check_email($email)) { @@ -275,15 +295,22 @@ function user_password_recovery_start_controller() $valid = false; error(_("Please enter your e-mail.")); } - + if ($valid) { $token = User_generate_password_recovery_token($user_source); - engelsystem_email_to_user($user_source, _("Password recovery"), sprintf(_("Please visit %s to recover your password."), page_link_to_absolute('user_password_recovery') . '&token=' . $token)); + engelsystem_email_to_user( + $user_source, + _("Password recovery"), + sprintf( + _("Please visit %s to recover your password."), + page_link_to_absolute('user_password_recovery') . '&token=' . $token + ) + ); success(_("We sent an email containing your password recovery link.")); redirect(page_link_to('login')); } } - + return User_password_recovery_view(); } @@ -313,20 +340,20 @@ function user_password_recovery_title() */ function load_user() { - if (! isset($_REQUEST['user_id'])) { + if (!isset($_REQUEST['user_id'])) { redirect(page_link_to()); } - + $user = User($_REQUEST['user_id']); if ($user === false) { engelsystem_error("Unable to load user."); } - + if ($user == null) { error(_("User doesn't exist.")); redirect(page_link_to()); } - + return $user; } @@ -335,7 +362,7 @@ function shiftCalendarRendererByShiftFilter(ShiftsFilter $shiftsFilter) $shifts = Shifts_by_ShiftsFilter($shiftsFilter); $needed_angeltypes_source = NeededAngeltypes_by_ShiftsFilter($shiftsFilter); $shift_entries_source = ShiftEntries_by_ShiftsFilter($shiftsFilter); - + $needed_angeltypes = []; $shift_entries = []; foreach ($shifts as $shift) { @@ -354,11 +381,14 @@ function shiftCalendarRendererByShiftFilter(ShiftsFilter $shiftsFilter) } unset($needed_angeltypes_source); unset($shift_entries_source); - - if (in_array(ShiftsFilter::FILLED_FREE, $shiftsFilter->getFilled()) && in_array(ShiftsFilter::FILLED_FILLED, $shiftsFilter->getFilled())) { + + if ( + in_array(ShiftsFilter::FILLED_FREE, $shiftsFilter->getFilled()) + && in_array(ShiftsFilter::FILLED_FILLED, $shiftsFilter->getFilled()) + ) { return new ShiftCalendarRenderer($shifts, $needed_angeltypes, $shift_entries, $shiftsFilter); } - + $filtered_shifts = []; foreach ($shifts as $shift) { $needed_angels_count = 0; @@ -366,10 +396,10 @@ function shiftCalendarRendererByShiftFilter(ShiftsFilter $shiftsFilter) $taken = 0; foreach ($shift_entries[$shift['SID']] as $shift_entry) { if ($needed_angeltype['angel_type_id'] == $shift_entry['TID'] && $shift_entry['freeloaded'] == 0) { - $taken ++; + $taken++; } } - + $needed_angels_count += max(0, $needed_angeltype['count'] - $taken); } if (in_array(ShiftsFilter::FILLED_FREE, $shiftsFilter->getFilled()) && $taken < $needed_angels_count) { @@ -379,6 +409,6 @@ function shiftCalendarRendererByShiftFilter(ShiftsFilter $shiftsFilter) $filtered_shifts[] = $shift; } } - + return new ShiftCalendarRenderer($filtered_shifts, $needed_angeltypes, $shift_entries, $shiftsFilter); } diff --git a/includes/helper/email_helper.php b/includes/helper/email_helper.php index 934193e2..35bdbc9a 100644 --- a/includes/helper/email_helper.php +++ b/includes/helper/email_helper.php @@ -3,22 +3,26 @@ function engelsystem_email_to_user($recipient_user, $title, $message, $not_if_its_me = false) { global $user; - + if ($not_if_its_me && $user['UID'] == $recipient_user['UID']) { return true; } - + gettext_locale($recipient_user['Sprache']); - - $message = sprintf(_("Hi %s,"), $recipient_user['Nick']) . "\n\n" . _("here is a message for you from the engelsystem:") . "\n\n" . $message . "\n\n" . _("This email is autogenerated and has not to be signed. You got this email because you are registered in the engelsystem."); - + + $message = sprintf(_("Hi %s,"), $recipient_user['Nick']) . "\n\n" + . _("here is a message for you from the engelsystem:") . "\n\n" + . $message . "\n\n" + . _("This email is autogenerated and has not to be signed. You got this email because you are registered in the engelsystem."); + gettext_locale(); return engelsystem_email($recipient_user['email'], $title, $message); } function engelsystem_email($address, $title, $message) { - $result = mail($address, $title, $message, "Content-Type: text/plain; charset=UTF-8\r\nFrom: Engelsystem "); + $result = mail($address, $title, $message, + "Content-Type: text/plain; charset=UTF-8\r\nFrom: Engelsystem "); if ($result === false) { engelsystem_error('Unable to send email.'); } diff --git a/includes/helper/graph_helper.php b/includes/helper/graph_helper.php index c2d0f8a2..d844213c 100644 --- a/includes/helper/graph_helper.php +++ b/includes/helper/graph_helper.php @@ -2,10 +2,11 @@ /** * Renders a bargraph - * @param string $key keyname of the x-axis - * @param array $row_names keynames for the data rows - * @param unknown $colors colors for the data rows - * @param unknown $data the data + * + * @param string $key keyname of the x-axis + * @param array $row_names keynames for the data rows + * @param unknown $colors colors for the data rows + * @param unknown $data the data */ function bargraph($dom_id, $key, $row_names, $colors, $data) { @@ -13,7 +14,7 @@ function bargraph($dom_id, $key, $row_names, $colors, $data) foreach ($data as $dataset) { $labels[] = $dataset[$key]; } - + $datasets = []; foreach ($row_names as $row_key => $name) { $values = []; @@ -21,20 +22,20 @@ function bargraph($dom_id, $key, $row_names, $colors, $data) $values[] = $dataset[$row_key]; } $datasets[] = [ - 'label' => $name, - 'fillColor' => $colors[$row_key], - 'data' => $values - ]; + 'label' => $name, + 'fillColor' => $colors[$row_key], + 'data' => $values + ]; } - + return ' '; } diff --git a/includes/helper/internationalization_helper.php b/includes/helper/internationalization_helper.php index 4abf8c4d..d4df1cb7 100644 --- a/includes/helper/internationalization_helper.php +++ b/includes/helper/internationalization_helper.php @@ -31,7 +31,7 @@ function gettext_init() if (isset($_REQUEST['set_locale']) && isset($locales[$_REQUEST['set_locale']])) { $_SESSION['locale'] = $_REQUEST['set_locale']; - } elseif (! isset($_SESSION['locale'])) { + } elseif (!isset($_SESSION['locale'])) { $_SESSION['locale'] = $default_locale; } @@ -51,7 +51,7 @@ function gettext_locale($locale = null) if ($locale == null) { $locale = $_SESSION['locale']; } - + putenv('LC_ALL=' . $locale); setlocale(LC_ALL, $locale); } @@ -65,10 +65,14 @@ function make_langselect() { global $locales; $URL = $_SERVER["REQUEST_URI"] . (strpos($_SERVER["REQUEST_URI"], "?") > 0 ? '&' : '?') . "set_locale="; - + $items = []; foreach ($locales as $locale => $name) { - $items[] = toolbar_item_link(htmlspecialchars($URL) . $locale, '', '' . $name . ' ' . $name); + $items[] = toolbar_item_link( + htmlspecialchars($URL) . $locale, + '', + '' . $name . ' ' . $name + ); } return $items; } diff --git a/includes/helper/message_helper.php b/includes/helper/message_helper.php index 323eee4d..a085aa0e 100644 --- a/includes/helper/message_helper.php +++ b/includes/helper/message_helper.php @@ -5,7 +5,7 @@ */ function msg() { - if (! isset($_SESSION['msg'])) { + if (!isset($_SESSION['msg'])) { return ""; } $msg = $_SESSION['msg']; @@ -48,8 +48,8 @@ function alert($class, $msg, $immediatly = false) } return '
    ' . $msg . '
    '; } - - if (! isset($_SESSION['msg'])) { + + if (!isset($_SESSION['msg'])) { $_SESSION['msg'] = ""; } $_SESSION['msg'] .= alert($class, $msg, true); diff --git a/includes/mailer/shifts_mailer.php b/includes/mailer/shifts_mailer.php index fd0d32c0..e000c927 100644 --- a/includes/mailer/shifts_mailer.php +++ b/includes/mailer/shifts_mailer.php @@ -5,50 +5,58 @@ function mail_shift_change($old_shift, $new_shift) $users = ShiftEntries_by_shift($old_shift["SID"]); $old_room = Room($old_shift["RID"]); $new_room = Room($new_shift["RID"]); - + $noticable_changes = false; - + $message = _("A Shift you are registered on has changed:"); $message .= "\n"; - + if ($old_shift["name"] != $new_shift["name"]) { $message .= sprintf(_("* Shift type changed from %s to %s"), $old_shift["name"], $new_shift["name"]) . "\n"; $noticable_changes = true; } - + if ($old_shift["title"] != $new_shift["title"]) { $message .= sprintf(_("* Shift title changed from %s to %s"), $old_shift["title"], $new_shift["title"]) . "\n"; $noticable_changes = true; } - + if ($old_shift["start"] != $new_shift["start"]) { - $message .= sprintf(_("* Shift Start changed from %s to %s"), date("Y-m-d H:i", $old_shift["start"]), date("Y-m-d H:i", $new_shift["start"])) . "\n"; + $message .= sprintf( + _("* Shift Start changed from %s to %s"), + date("Y-m-d H:i", $old_shift["start"]), + date("Y-m-d H:i", $new_shift["start"]) + ) . "\n"; $noticable_changes = true; } - + if ($old_shift["end"] != $new_shift["end"]) { - $message .= sprintf(_("* Shift End changed from %s to %s"), date("Y-m-d H:i", $old_shift["end"]), date("Y-m-d H:i", $new_shift["end"])) . "\n"; + $message .= sprintf( + _("* Shift End changed from %s to %s"), + date("Y-m-d H:i", $old_shift["end"]), + date("Y-m-d H:i", $new_shift["end"]) + ) . "\n"; $noticable_changes = true; } - + if ($old_shift["RID"] != $new_shift["RID"]) { $message .= sprintf(_("* Shift Location changed from %s to %s"), $old_room["Name"], $new_room["Name"]) . "\n"; $noticable_changes = true; } - - if (! $noticable_changes) { + + if (!$noticable_changes) { // There are no changes worth sending an E-Mail - return; + return; } - + $message .= "\n"; $message .= _("The updated Shift:") . "\n"; - + $message .= $new_shift["name"] . "\n"; $message .= $new_shift["title"] . "\n"; $message .= date("Y-m-d H:i", $new_shift["start"]) . " - " . date("H:i", $new_shift["end"]) . "\n"; $message .= $new_room["Name"] . "\n"; - + foreach ($users as $user) { if ($user["email_shiftinfo"]) { engelsystem_email_to_user($user, '[engelsystem] ' . _("Your Shift has changed"), $message, true); @@ -60,14 +68,14 @@ function mail_shift_delete($shift) { $users = ShiftEntries_by_shift($shift["SID"]); $room = Room($shift["RID"]); - + $message = _("A Shift you are registered on was deleted:") . "\n"; - + $message .= $shift["name"] . "\n"; $message .= $shift["title"] . "\n"; $message .= date("Y-m-d H:i", $shift["start"]) . " - " . date("H:i", $shift["end"]) . "\n"; $message .= $room["Name"] . "\n"; - + foreach ($users as $user) { if ($user["email_shiftinfo"]) { engelsystem_email_to_user($user, '[engelsystem] ' . _("Your Shift was deleted"), $message, true); @@ -79,13 +87,13 @@ function mail_shift_assign($user, $shift) { if ($user["email_shiftinfo"]) { $room = Room($shift["RID"]); - + $message = _("You have been assigned to a Shift:") . "\n"; $message .= $shift["name"] . "\n"; $message .= $shift["title"] . "\n"; $message .= date("Y-m-d H:i", $shift["start"]) . " - " . date("H:i", $shift["end"]) . "\n"; $message .= $room["Name"] . "\n"; - + engelsystem_email_to_user($user, '[engelsystem] ' . _("Assigned to Shift"), $message, true); } } @@ -94,13 +102,13 @@ function mail_shift_removed($user, $shift) { if ($user["email_shiftinfo"]) { $room = Room($shift["RID"]); - + $message = _("You have been removed from a Shift:") . "\n"; $message .= $shift["name"] . "\n"; $message .= $shift["title"] . "\n"; $message .= date("Y-m-d H:i", $shift["start"]) . " - " . date("H:i", $shift["end"]) . "\n"; $message .= $room["Name"] . "\n"; - + engelsystem_email_to_user($user, '[engelsystem] ' . _("Removed from Shift"), $message, true); } } diff --git a/includes/mailer/users_mailer.php b/includes/mailer/users_mailer.php index bae8d918..85409c8c 100644 --- a/includes/mailer/users_mailer.php +++ b/includes/mailer/users_mailer.php @@ -5,5 +5,9 @@ */ function mail_user_delete($user) { - engelsystem_email_to_user($user, '[engelsystem] ' . _("Your account has been deleted"), _("Your angelsystem account has been deleted. If you have any questions regarding your account deletion, please contact heaven.")); + engelsystem_email_to_user( + $user, + '[engelsystem] ' . _("Your account has been deleted"), + _("Your angelsystem account has been deleted. If you have any questions regarding your account deletion, please contact heaven.") + ); } diff --git a/includes/model/AngelType_model.php b/includes/model/AngelType_model.php index 022462c0..d52b1357 100644 --- a/includes/model/AngelType_model.php +++ b/includes/model/AngelType_model.php @@ -8,17 +8,17 @@ use Engelsystem\ValidationResult; function AngelType_new() { return [ - 'id' => null, - 'name' => "", - 'restricted' => false, - 'no_self_signup' => false, - 'description' => '', - 'requires_driver_license' => false, - 'contact_user_id' => null, - 'contact_name' => null, - 'contact_dect' => null, - 'contact_email' => null - ]; + 'id' => null, + 'name' => "", + 'restricted' => false, + 'no_self_signup' => false, + 'description' => '', + 'requires_driver_license' => false, + 'contact_user_id' => null, + 'contact_name' => null, + 'contact_dect' => null, + 'contact_email' => null + ]; } /** @@ -30,7 +30,7 @@ function AngelType_new() */ function AngelType_validate_contact_user_id($angeltype) { - if (! isset($angeltype['contact_user_id'])) { + if (!isset($angeltype['contact_user_id'])) { return new ValidationResult(true, null); } if (isset($angeltype['contact_name']) || isset($angeltype['contact_dect']) || isset($angeltype['contact_email'])) { @@ -53,9 +53,9 @@ function AngelType_contact_info($angeltype) if (isset($angeltype['contact_user_id'])) { $contact_user = User($angeltype['contact_user_id']); $contact_data = [ - 'contact_name' => $contact_user['Nick'], - 'contact_dect' => $contact_user['DECT'] - ]; + 'contact_name' => $contact_user['Nick'], + 'contact_dect' => $contact_user['DECT'] + ]; if ($contact_user['email_by_human_allowed']) { $contact_data['contact_email'] = $contact_user['email']; } @@ -63,10 +63,10 @@ function AngelType_contact_info($angeltype) } if (isset($angeltype['contact_name'])) { return [ - 'contact_name' => $angeltype['contact_name'], - 'contact_dect' => $angeltype['contact_dect'], - 'contact_email' => $angeltype['contact_email'] - ]; + 'contact_name' => $angeltype['contact_name'], + 'contact_dect' => $angeltype['contact_dect'], + 'contact_email' => $angeltype['contact_email'] + ]; } return null; } @@ -148,7 +148,7 @@ function AngelType_create($angeltype) * Validates a name for angeltypes. * Returns ValidationResult containing validation success and validated name. * - * @param string $name + * @param string $name * Wanted name for the angeltype * @param AngelType $angeltype * The angeltype the name is for @@ -186,7 +186,7 @@ function AngelTypes_with_user($user) { $result = sql_select(" SELECT `AngelTypes`.*, - `UserAngelTypes`.`id` as `user_angeltype_id`, + `UserAngelTypes`.`id` AS `user_angeltype_id`, `UserAngelTypes`.`confirm_user_id`, `UserAngelTypes`.`supporter` FROM `AngelTypes` @@ -230,7 +230,7 @@ function AngelType_ids() * Returns angelType by id. * * @param $angeltype_id angelType - * ID + * ID */ function AngelType($angeltype_id) { diff --git a/includes/model/EventConfig_model.php b/includes/model/EventConfig_model.php index b4fdb728..584c1515 100644 --- a/includes/model/EventConfig_model.php +++ b/includes/model/EventConfig_model.php @@ -20,14 +20,20 @@ function EventConfig() * Update event config. * * @param string $event_name - * @param int $buildup_start_date - * @param int $event_start_date - * @param int $event_end_date - * @param int $teardown_end_date + * @param int $buildup_start_date + * @param int $event_start_date + * @param int $event_end_date + * @param int $teardown_end_date * @param string $event_welcome_msg */ -function EventConfig_update($event_name, $buildup_start_date, $event_start_date, $event_end_date, $teardown_end_date, $event_welcome_msg) -{ +function EventConfig_update( + $event_name, + $buildup_start_date, + $event_start_date, + $event_end_date, + $teardown_end_date, + $event_welcome_msg +) { if (EventConfig() == null) { return sql_query("INSERT INTO `EventConfig` SET `event_name`=" . sql_null($event_name) . ", diff --git a/includes/model/LogEntries_model.php b/includes/model/LogEntries_model.php index 2a3a1d6e..47e48f6f 100644 --- a/includes/model/LogEntries_model.php +++ b/includes/model/LogEntries_model.php @@ -3,9 +3,9 @@ /** * Creates a log entry. * - * @param $nick Username + * @param $nick Username * @param $message Log - * Message + * Message */ function LogEntry_create($nick, $message) { diff --git a/includes/model/Message_model.php b/includes/model/Message_model.php index 6ee19792..39eada71 100644 --- a/includes/model/Message_model.php +++ b/includes/model/Message_model.php @@ -12,7 +12,7 @@ function Message_ids() * Returns message by id. * * @param $message_id message - * ID + * ID */ function Message($message_id) { @@ -32,21 +32,36 @@ function Message($message_id) * send message * * @param $receiver_user_id User - * ID of Reciever - * @param $text Text - * of Message + * ID of Reciever + * @param $text Text + * of Message */ function Message_send($receiver_user_id, $text) { global $user; - + $text = preg_replace("/([^\p{L}\p{P}\p{Z}\p{N}\n]{1,})/ui", '', strip_tags($text)); $receiver_user_id = preg_replace("/([^0-9]{1,})/ui", '', strip_tags($receiver_user_id)); - - if (($text != "" && is_numeric($receiver_user_id)) && (sql_num_query("SELECT * FROM `User` WHERE `UID`='" . sql_escape($receiver_user_id) . "' AND NOT `UID`='" . sql_escape($user['UID']) . "' LIMIT 1") > 0)) { - sql_query("INSERT INTO `Messages` SET `Datum`='" . sql_escape(time()) . "', `SUID`='" . sql_escape($user['UID']) . "', `RUID`='" . sql_escape($receiver_user_id) . "', `Text`='" . sql_escape($text) . "'"); + + if ( + ($text != "" && is_numeric($receiver_user_id)) + && (sql_num_query(" + SELECT * + FROM `User` + WHERE `UID`='" . sql_escape($receiver_user_id) . "' + AND NOT `UID`='" . sql_escape($user['UID']) . "' + LIMIT 1 + ") > 0) + ) { + sql_query(" + INSERT INTO `Messages` + SET `Datum`='" . sql_escape(time()) . "', + `SUID`='" . sql_escape($user['UID']) . "', + `RUID`='" . sql_escape($receiver_user_id) . "', + `Text`='" . sql_escape($text) . "' + "); return true; } - + return false; } diff --git a/includes/model/NeededAngelTypes_model.php b/includes/model/NeededAngelTypes_model.php index e2661b9a..6a929f2f 100644 --- a/includes/model/NeededAngelTypes_model.php +++ b/includes/model/NeededAngelTypes_model.php @@ -71,10 +71,10 @@ function NeededAngelTypes_by_shift($shiftId) if ($needed_angeltypes_source === false) { engelsystem_error("Unable to load needed angeltypes."); } - - // Use settings from room - if (count($needed_angeltypes_source) == 0) { - $needed_angeltypes_source = sql_select(" + + // Use settings from room + if (count($needed_angeltypes_source) == 0) { + $needed_angeltypes_source = sql_select(" SELECT `NeededAngelTypes`.*, `AngelTypes`.`name`, `AngelTypes`.`restricted` FROM `NeededAngelTypes` JOIN `AngelTypes` ON `AngelTypes`.`id` = `NeededAngelTypes`.`angel_type_id` @@ -83,11 +83,11 @@ function NeededAngelTypes_by_shift($shiftId) AND `count` > 0 ORDER BY `room_id` DESC "); - if ($needed_angeltypes_source === false) { - engelsystem_error("Unable to load needed angeltypes."); - } - } - + if ($needed_angeltypes_source === false) { + engelsystem_error("Unable to load needed angeltypes."); + } + } + $shift_entries = ShiftEntries_by_shift($shiftId); $needed_angeltypes = []; foreach ($needed_angeltypes_source as $angeltype) { @@ -95,13 +95,13 @@ function NeededAngelTypes_by_shift($shiftId) $angeltype['taken'] = 0; foreach ($shift_entries as $shift_entry) { if ($shift_entry['TID'] == $angeltype['angel_type_id'] && $shift_entry['freeloaded'] == 0) { - $angeltype['taken'] ++; + $angeltype['taken']++; $angeltype['shift_entries'][] = $shift_entry; } } - + $needed_angeltypes[] = $angeltype; } - + return $needed_angeltypes; } diff --git a/includes/model/Room_model.php b/includes/model/Room_model.php index d7031d84..4c097f23 100644 --- a/includes/model/Room_model.php +++ b/includes/model/Room_model.php @@ -2,6 +2,7 @@ /** * returns a list of rooms. + * * @param boolean $show_all returns also hidden rooms when true */ function Rooms($show_all = false) @@ -22,7 +23,7 @@ function Room_delete($room_id) /** * Create a new room * - * @param string $name + * @param string $name * Name of the room * @param boolean $from_frab * Is this a frab imported room? @@ -51,7 +52,7 @@ function Room_create($name, $from_frab, $public) function Room($room_id) { $room_source = sql_select("SELECT * FROM `Room` WHERE `RID`='" . sql_escape($room_id) . "' AND `show` = 'Y'"); - + if ($room_source === false) { return false; } diff --git a/includes/model/ShiftEntry_model.php b/includes/model/ShiftEntry_model.php index c25938e3..a0755e3c 100644 --- a/includes/model/ShiftEntry_model.php +++ b/includes/model/ShiftEntry_model.php @@ -7,14 +7,14 @@ function ShiftEntry_new() { return [ - 'id' => null, - 'SID' => null, - 'TID' => null, - 'UID' => null, - 'Comment' => null, - 'freeloaded_comment' => null, - 'freeloaded' => false - ]; + 'id' => null, + 'SID' => null, + 'TID' => null, + 'UID' => null, + 'Comment' => null, + 'freeloaded_comment' => null, + 'freeloaded' => false + ]; } /** @@ -31,7 +31,18 @@ function ShiftEntries_freeleaded_count() function ShiftEntries_by_shift($shift_id) { return sql_select(" - SELECT `User`.`Nick`, `User`.`email`, `User`.`email_shiftinfo`, `User`.`Sprache`, `User`.`Gekommen`, `ShiftEntry`.`UID`, `ShiftEntry`.`TID`, `ShiftEntry`.`SID`, `AngelTypes`.`name` as `angel_type_name`, `ShiftEntry`.`Comment`, `ShiftEntry`.`freeloaded` + SELECT + `User`.`Nick`, + `User`.`email`, + `User`.`email_shiftinfo`, + `User`.`Sprache`, + `User`.`Gekommen`, + `ShiftEntry`.`UID`, + `ShiftEntry`.`TID`, + `ShiftEntry`.`SID`, + `AngelTypes`.`name` AS `angel_type_name`, + `ShiftEntry`.`Comment`, + `ShiftEntry`.`freeloaded` FROM `ShiftEntry` JOIN `User` ON `ShiftEntry`.`UID`=`User`.`UID` JOIN `AngelTypes` ON `ShiftEntry`.`TID`=`AngelTypes`.`id` diff --git a/includes/model/ShiftSignupState.php b/includes/model/ShiftSignupState.php index 9c20a575..d5c7f457 100644 --- a/includes/model/ShiftSignupState.php +++ b/includes/model/ShiftSignupState.php @@ -9,40 +9,40 @@ namespace Engelsystem; class ShiftSignupState { - /** - * Shift has free places - */ - const FREE = 'FREE'; - - /** - * Shift collides with users shifts - */ - const COLLIDES = 'COLLIDES'; - - /** - * User cannot join because of a restricted angeltype or user is not in the angeltype - */ - const ANGELTYPE = 'ANGELTYPE'; - - /** - * Shift is full - */ - const OCCUPIED = 'OCCUPIED'; - - /** - * User is admin and can do what he wants. - */ - const ADMIN = 'ADMIN'; - - /** - * Shift has already ended, no signup - */ - const SHIFT_ENDED = 'SHIFT_ENDED'; - - /** - * User is already signed up - */ - const SIGNED_UP = 'SIGNED_UP'; + /** + * Shift has free places + */ + const FREE = 'FREE'; + + /** + * Shift collides with users shifts + */ + const COLLIDES = 'COLLIDES'; + + /** + * User cannot join because of a restricted angeltype or user is not in the angeltype + */ + const ANGELTYPE = 'ANGELTYPE'; + + /** + * Shift is full + */ + const OCCUPIED = 'OCCUPIED'; + + /** + * User is admin and can do what he wants. + */ + const ADMIN = 'ADMIN'; + + /** + * Shift has already ended, no signup + */ + const SHIFT_ENDED = 'SHIFT_ENDED'; + + /** + * User is already signed up + */ + const SIGNED_UP = 'SIGNED_UP'; private $state; @@ -54,69 +54,69 @@ class ShiftSignupState $this->freeEntries = $free_entries; } - /** - * Combine this state with another state from the same shift. - * - * @param ShiftSignupState $shiftSignupState - * The other state to combine - */ - public function combineWith(ShiftSignupState $shiftSignupState) - { - $this->freeEntries += $shiftSignupState->getFreeEntries(); - - if ($this->valueForState($shiftSignupState->state) > $this->valueForState($this->state)) { - $this->state = $shiftSignupState->state; - } - } + /** + * Combine this state with another state from the same shift. + * + * @param ShiftSignupState $shiftSignupState + * The other state to combine + */ + public function combineWith(ShiftSignupState $shiftSignupState) + { + $this->freeEntries += $shiftSignupState->getFreeEntries(); + + if ($this->valueForState($shiftSignupState->state) > $this->valueForState($this->state)) { + $this->state = $shiftSignupState->state; + } + } private function valueForState($state) { switch ($state) { - case ShiftSignupState::SHIFT_ENDED: - return 100; - - case ShiftSignupState::SIGNED_UP: - return 90; - - case ShiftSignupState::FREE: - return 80; - - case ShiftSignupState::ANGELTYPE: - case ShiftSignupState::COLLIDES: - return 70; - - case ShiftSignupState::OCCUPIED: - case ShiftSignupState::ADMIN: - return 60; + case ShiftSignupState::SHIFT_ENDED: + return 100; + + case ShiftSignupState::SIGNED_UP: + return 90; + + case ShiftSignupState::FREE: + return 80; + + case ShiftSignupState::ANGELTYPE: + case ShiftSignupState::COLLIDES: + return 70; + + case ShiftSignupState::OCCUPIED: + case ShiftSignupState::ADMIN: + return 60; + } } + + /** + * Returns true, if signup is allowed + */ + public function isSignupAllowed() + { + switch ($this->state) { + case ShiftSignupState::FREE: + case ShiftSignupState::ADMIN: + return true; + } + return false; + } + + /** + * Return the shift signup state + */ + public function getState() + { + return $this->state; } - /** - * Returns true, if signup is allowed - */ - public function isSignupAllowed() - { - switch ($this->state) { - case ShiftSignupState::FREE: - case ShiftSignupState::ADMIN: - return true; + /** + * How many places are free in this shift for the angeltype? + */ + public function getFreeEntries() + { + return $this->freeEntries; } - return false; - } - - /** - * Return the shift signup state - */ - public function getState() - { - return $this->state; - } - - /** - * How many places are free in this shift for the angeltype? - */ - public function getFreeEntries() - { - return $this->freeEntries; - } } diff --git a/includes/model/ShiftTypes_model.php b/includes/model/ShiftTypes_model.php index fb361db9..8b1d56b8 100644 --- a/includes/model/ShiftTypes_model.php +++ b/includes/model/ShiftTypes_model.php @@ -2,6 +2,7 @@ /** * Delete a shift type. + * * @param int $shifttype_id */ function ShiftType_delete($shifttype_id) @@ -12,34 +13,38 @@ function ShiftType_delete($shifttype_id) /** * Update a shift type. * - * @param int $shifttype_id + * @param int $shifttype_id * @param string $name - * @param int $angeltype_id + * @param int $angeltype_id * @param string $description */ function ShiftType_update($shifttype_id, $name, $angeltype_id, $description) { - return sql_query("UPDATE `ShiftTypes` SET + return sql_query(" + UPDATE `ShiftTypes` SET `name`='" . sql_escape($name) . "', `angeltype_id`=" . sql_null($angeltype_id) . ", `description`='" . sql_escape($description) . "' - WHERE `id`='" . sql_escape($shifttype_id) . "'"); + WHERE `id`='" . sql_escape($shifttype_id) . "' + "); } /** * Create a shift type. * * @param string $name - * @param int $angeltype_id + * @param int $angeltype_id * @param string $description * @return new shifttype id */ function ShiftType_create($name, $angeltype_id, $description) { - $result = sql_query("INSERT INTO `ShiftTypes` SET + $result = sql_query(" + INSERT INTO `ShiftTypes` SET `name`='" . sql_escape($name) . "', `angeltype_id`=" . sql_null($angeltype_id) . ", - `description`='" . sql_escape($description) . "'"); + `description`='" . sql_escape($description) . "' + "); if ($result === false) { return false; } diff --git a/includes/model/ShiftsFilter.php b/includes/model/ShiftsFilter.php index cba6fee7..1e8d49cf 100644 --- a/includes/model/ShiftsFilter.php +++ b/includes/model/ShiftsFilter.php @@ -10,28 +10,28 @@ namespace Engelsystem; class ShiftsFilter { - /** - * How long can the time interval be? - */ - const MAX_DURATION = 86400; - // one day - - /** - * Shift is completely full. - */ - const FILLED_FILLED = 1; - - /** - * Shift has some free slots. - */ - const FILLED_FREE = 0; - - /** - * Has the user "user shifts admin" privilege? - * - * @var boolean - */ - private $userShiftsAdmin; + /** + * How long can the time interval be? + */ + const MAX_DURATION = 86400; + // one day + + /** + * Shift is completely full. + */ + const FILLED_FILLED = 1; + + /** + * Shift has some free slots. + */ + const FILLED_FREE = 0; + + /** + * Has the user "user shifts admin" privilege? + * + * @var boolean + */ + private $userShiftsAdmin; private $filled = []; @@ -48,11 +48,11 @@ class ShiftsFilter $this->user_shifts_admin = $user_shifts_admin; $this->rooms = $rooms; $this->types = $types; - + $this->filled = [ - ShiftsFilter::FILLED_FREE - ]; - + ShiftsFilter::FILLED_FREE + ]; + if ($user_shifts_admin) { $this->filled[] = ShiftsFilter::FILLED_FILLED; } @@ -84,9 +84,7 @@ class ShiftsFilter public function getTypes() { if (count($this->types) == 0) { - return [ - 0 - ]; + return [0]; } return $this->types; } @@ -99,9 +97,7 @@ class ShiftsFilter public function getRooms() { if (count($this->rooms) == 0) { - return [ - 0 - ]; + return [0]; } return $this->rooms; } diff --git a/includes/model/Shifts_model.php b/includes/model/Shifts_model.php index 0d49f5da..c489c63e 100644 --- a/includes/model/Shifts_model.php +++ b/includes/model/Shifts_model.php @@ -14,7 +14,7 @@ function Shifts_by_room($room) function Shifts_by_ShiftsFilter(ShiftsFilter $shiftsFilter) { $SQL = "SELECT * FROM ( - SELECT DISTINCT `Shifts`.*, `ShiftTypes`.`name`, `Room`.`Name` as `room_name` + SELECT DISTINCT `Shifts`.*, `ShiftTypes`.`name`, `Room`.`Name` AS `room_name` FROM `Shifts` JOIN `Room` USING (`RID`) JOIN `ShiftTypes` ON `ShiftTypes`.`id` = `Shifts`.`shifttype_id` @@ -27,7 +27,7 @@ function Shifts_by_ShiftsFilter(ShiftsFilter $shiftsFilter) UNION - SELECT DISTINCT `Shifts`.*, `ShiftTypes`.`name`, `Room`.`Name` as `room_name` + SELECT DISTINCT `Shifts`.*, `ShiftTypes`.`name`, `Room`.`Name` AS `room_name` FROM `Shifts` JOIN `Room` USING (`RID`) JOIN `ShiftTypes` ON `ShiftTypes`.`id` = `Shifts`.`shifttype_id` @@ -36,7 +36,7 @@ function Shifts_by_ShiftsFilter(ShiftsFilter $shiftsFilter) AND `start` BETWEEN " . $shiftsFilter->getStartTime() . " AND " . $shiftsFilter->getEndTime() . " AND `NeededAngelTypes`.`angel_type_id` IN (" . implode(',', $shiftsFilter->getTypes()) . ") AND `NeededAngelTypes`.`count` > 0 - AND NOT `Shifts`.`PSID` IS NULL) as tmp_shifts + AND NOT `Shifts`.`PSID` IS NULL) AS tmp_shifts ORDER BY `start`"; $result = sql_select($SQL); @@ -48,7 +48,14 @@ function Shifts_by_ShiftsFilter(ShiftsFilter $shiftsFilter) function NeededAngeltypes_by_ShiftsFilter(ShiftsFilter $shiftsFilter) { - $SQL = "SELECT `NeededAngelTypes`.*, `Shifts`.`SID`, `AngelTypes`.`id`, `AngelTypes`.`name`, `AngelTypes`.`restricted`, `AngelTypes`.`no_self_signup` + $SQL = " + SELECT + `NeededAngelTypes`.*, + `Shifts`.`SID`, + `AngelTypes`.`id`, + `AngelTypes`.`name`, + `AngelTypes`.`restricted`, + `AngelTypes`.`no_self_signup` FROM `Shifts` JOIN `NeededAngelTypes` ON `NeededAngelTypes`.`shift_id`=`Shifts`.`SID` JOIN `AngelTypes` ON `AngelTypes`.`id`= `NeededAngelTypes`.`angel_type_id` @@ -58,7 +65,13 @@ function NeededAngeltypes_by_ShiftsFilter(ShiftsFilter $shiftsFilter) UNION - SELECT `NeededAngelTypes`.*, `Shifts`.`SID`, `AngelTypes`.`id`, `AngelTypes`.`name`, `AngelTypes`.`restricted`, `AngelTypes`.`no_self_signup` + SELECT + `NeededAngelTypes`.*, + `Shifts`.`SID`, + `AngelTypes`.`id`, + `AngelTypes`.`name`, + `AngelTypes`.`restricted`, + `AngelTypes`.`no_self_signup` FROM `Shifts` JOIN `NeededAngelTypes` ON `NeededAngelTypes`.`room_id`=`Shifts`.`RID` JOIN `AngelTypes` ON `AngelTypes`.`id`= `NeededAngelTypes`.`angel_type_id` @@ -74,7 +87,14 @@ function NeededAngeltypes_by_ShiftsFilter(ShiftsFilter $shiftsFilter) function NeededAngeltype_by_Shift_and_Angeltype($shift, $angeltype) { - $result = sql_select("SELECT `NeededAngelTypes`.*, `Shifts`.`SID`, `AngelTypes`.`id`, `AngelTypes`.`name`, `AngelTypes`.`restricted`, `AngelTypes`.`no_self_signup` + $result = sql_select(" + SELECT + `NeededAngelTypes`.*, + `Shifts`.`SID`, + `AngelTypes`.`id`, + `AngelTypes`.`name`, + `AngelTypes`.`restricted`, + `AngelTypes`.`no_self_signup` FROM `Shifts` JOIN `NeededAngelTypes` ON `NeededAngelTypes`.`shift_id`=`Shifts`.`SID` JOIN `AngelTypes` ON `AngelTypes`.`id`= `NeededAngelTypes`.`angel_type_id` @@ -84,7 +104,13 @@ function NeededAngeltype_by_Shift_and_Angeltype($shift, $angeltype) UNION - SELECT `NeededAngelTypes`.*, `Shifts`.`SID`, `AngelTypes`.`id`, `AngelTypes`.`name`, `AngelTypes`.`restricted`, `AngelTypes`.`no_self_signup` + SELECT + `NeededAngelTypes`.*, + `Shifts`.`SID`, + `AngelTypes`.`id`, + `AngelTypes`.`name`, + `AngelTypes`.`restricted`, + `AngelTypes`.`no_self_signup` FROM `Shifts` JOIN `NeededAngelTypes` ON `NeededAngelTypes`.`room_id`=`Shifts`.`RID` JOIN `AngelTypes` ON `AngelTypes`.`id`= `NeededAngelTypes`.`angel_type_id` @@ -102,7 +128,18 @@ function NeededAngeltype_by_Shift_and_Angeltype($shift, $angeltype) function ShiftEntries_by_ShiftsFilter(ShiftsFilter $shiftsFilter) { - $SQL = "SELECT `User`.`Nick`, `User`.`email`, `User`.`email_shiftinfo`, `User`.`Sprache`, `User`.`Gekommen`, `ShiftEntry`.`UID`, `ShiftEntry`.`TID`, `ShiftEntry`.`SID`, `ShiftEntry`.`Comment`, `ShiftEntry`.`freeloaded` + $SQL = " + SELECT + `User`.`Nick`, + `User`.`email`, + `User`.`email_shiftinfo`, + `User`.`Sprache`, + `User`.`Gekommen`, + `ShiftEntry`.`UID`, + `ShiftEntry`.`TID`, + `ShiftEntry`.`SID`, + `ShiftEntry`.`Comment`, + `ShiftEntry`.`freeloaded` FROM `Shifts` JOIN `ShiftEntry` ON `ShiftEntry`.`SID`=`Shifts`.`SID` JOIN `User` ON `ShiftEntry`.`UID`=`User`.`UID` @@ -120,13 +157,13 @@ function ShiftEntries_by_ShiftsFilter(ShiftsFilter $shiftsFilter) * Check if a shift collides with other shifts (in time). * * @param Shift $shift - * @param array $shifts + * @param array $shifts */ function Shift_collides($shift, $shifts) { foreach ($shifts as $other_shift) { if ($shift['SID'] != $other_shift['SID']) { - if (! ($shift['start'] >= $other_shift['end'] || $shift['end'] <= $other_shift['start'])) { + if (!($shift['start'] >= $other_shift['end'] || $shift['end'] <= $other_shift['start'])) { return true; } } @@ -142,7 +179,7 @@ function Shift_free_entries($needed_angeltype, $shift_entries) $taken = 0; foreach ($shift_entries as $shift_entry) { if ($shift_entry['freeloaded'] == 0) { - $taken ++; + $taken++; } } return max(0, $needed_angeltype['count'] - $taken); @@ -151,27 +188,35 @@ function Shift_free_entries($needed_angeltype, $shift_entries) /** * Check if shift signup is allowed from the end users point of view (no admin like privileges) * - * @param Shift $shift - * The shift + * @param Shift $shift + * The shift * @param AngelType $angeltype - * The angeltype to which the user wants to sign up - * @param array $user_shifts - * List of the users shifts - * @param boolean $angeltype_supporter - * True, if the user has angeltype supporter rights for the angeltype, which enables him to sign somebody up for the shift. + * The angeltype to which the user wants to sign up + * @param array $user_shifts + * List of the users shifts + * @param boolean $angeltype_supporter + * True, if the user has angeltype supporter rights for the angeltype, which enables him to sign + * somebody up for the shift. */ -function Shift_signup_allowed_angel($user, $shift, $angeltype, $user_angeltype, $user_shifts, $needed_angeltype, $shift_entries) -{ +function Shift_signup_allowed_angel( + $user, + $shift, + $angeltype, + $user_angeltype, + $user_shifts, + $needed_angeltype, + $shift_entries +) { $free_entries = Shift_free_entries($needed_angeltype, $shift_entries); - + if ($user['Gekommen'] == 0) { return new ShiftSignupState(ShiftSignupState::SHIFT_ENDED, $free_entries); } - + if ($user_shifts == null) { $user_shifts = Shifts_by_user($user); } - + $signed_up = false; foreach ($user_shifts as $user_shift) { if ($user_shift['SID'] == $shift['SID']) { @@ -179,40 +224,44 @@ function Shift_signup_allowed_angel($user, $shift, $angeltype, $user_angeltype, break; } } - + if ($signed_up) { // you cannot join if you already singed up for this shift - return new ShiftSignupState(ShiftSignupState::SIGNED_UP, $free_entries); + return new ShiftSignupState(ShiftSignupState::SIGNED_UP, $free_entries); } - + if (time() > $shift['start']) { // you can only join if the shift is in future - return new ShiftSignupState(ShiftSignupState::SHIFT_ENDED, $free_entries); + return new ShiftSignupState(ShiftSignupState::SHIFT_ENDED, $free_entries); } if ($free_entries == 0) { // you cannot join if shift is full - return new ShiftSignupState(ShiftSignupState::OCCUPIED, $free_entries); + return new ShiftSignupState(ShiftSignupState::OCCUPIED, $free_entries); } - + if ($user_angeltype == null) { $user_angeltype = UserAngelType_by_User_and_AngelType($user, $angeltype); } - - if ($user_angeltype == null || ($angeltype['no_self_signup'] == 1 && $user_angeltype != null) || ($angeltype['restricted'] == 1 && $user_angeltype != null && ! isset($user_angeltype['confirm_user_id']))) { + + if ( + $user_angeltype == null + || ($angeltype['no_self_signup'] == 1 && $user_angeltype != null) + || ($angeltype['restricted'] == 1 && $user_angeltype != null && !isset($user_angeltype['confirm_user_id'])) + ) { // you cannot join if user is not of this angel type - // you cannot join if you are not confirmed - // you cannot join if angeltype has no self signup - - return new ShiftSignupState(ShiftSignupState::ANGELTYPE, $free_entries); + // you cannot join if you are not confirmed + // you cannot join if angeltype has no self signup + + return new ShiftSignupState(ShiftSignupState::ANGELTYPE, $free_entries); } - + if (Shift_collides($shift, $user_shifts)) { // you cannot join if user alread joined a parallel or this shift - return new ShiftSignupState(ShiftSignupState::COLLIDES, $free_entries); + return new ShiftSignupState(ShiftSignupState::COLLIDES, $free_entries); } - - // Hooray, shift is free for you! - return new ShiftSignupState(ShiftSignupState::FREE, $free_entries); + + // Hooray, shift is free for you! + return new ShiftSignupState(ShiftSignupState::FREE, $free_entries); } /** @@ -224,14 +273,14 @@ function Shift_signup_allowed_angeltype_supporter($angeltype, $needed_angeltype, if ($free_entries == 0) { return new ShiftSignupState(ShiftSignupState::OCCUPIED, $free_entries); } - + return new ShiftSignupState(ShiftSignupState::FREE, $free_entries); } /** * Check if an admin can sign up a user to a shift. * - * @param Shift $shift + * @param Shift $shift * The shift * @param AngelType $angeltype * The angeltype to which the user wants to sign up @@ -239,38 +288,56 @@ function Shift_signup_allowed_angeltype_supporter($angeltype, $needed_angeltype, function Shift_signup_allowed_admin($angeltype, $needed_angeltype, $shift_entries) { $free_entries = Shift_free_entries($needed_angeltype, $shift_entries); - + if ($free_entries == 0) { // User shift admins may join anybody in every shift - return new ShiftSignupState(ShiftSignupState::ADMIN, $free_entries); + return new ShiftSignupState(ShiftSignupState::ADMIN, $free_entries); } - + return new ShiftSignupState(ShiftSignupState::FREE, $free_entries); } /** * Check if an angel can sign up for given shift. * - * @param Shift $shift - * The shift + * @param Shift $shift + * The shift * @param AngelType $angeltype - * The angeltype to which the user wants to sign up - * @param array $user_shifts - * List of the users shifts + * The angeltype to which the user wants to sign up + * @param array $user_shifts + * List of the users shifts */ -function Shift_signup_allowed($signup_user, $shift, $angeltype, $user_angeltype = null, $user_shifts = null, $needed_angeltype, $shift_entries) -{ +function Shift_signup_allowed( + $signup_user, + $shift, + $angeltype, + $user_angeltype = null, + $user_shifts = null, + $needed_angeltype, + $shift_entries +) { global $user, $privileges; - + if (in_array('user_shifts_admin', $privileges)) { return Shift_signup_allowed_admin($angeltype, $needed_angeltype, $shift_entries); } - - if (in_array('shiftentry_edit_angeltype_supporter', $privileges) && User_is_AngelType_supporter($user, $angeltype)) { + + if ( + in_array('shiftentry_edit_angeltype_supporter', $privileges) + && User_is_AngelType_supporter($user, $angeltype) + ) { return Shift_signup_allowed_angeltype_supporter($angeltype, $needed_angeltype, $shift_entries); } - - return Shift_signup_allowed_angel($signup_user, $shift, $angeltype, $user_angeltype, $user_shifts, $needed_angeltype, $shift_entries); + + return Shift_signup_allowed_angel( + $signup_user, + $shift, + $angeltype, + $user_angeltype, + $user_shifts, + $needed_angeltype, + $shift_entries + ); } /** @@ -287,7 +354,7 @@ function Shift_delete_by_psid($shift_psid) function Shift_delete($shift_id) { mail_shift_delete(Shift($shift_id)); - + $result = sql_query("DELETE FROM `Shifts` WHERE `SID`='" . sql_escape($shift_id) . "'"); if ($result === false) { engelsystem_error('Unable to delete shift.'); @@ -303,8 +370,9 @@ function Shift_update($shift) global $user; $shift['name'] = ShiftType($shift['shifttype_id'])['name']; mail_shift_change(Shift($shift['SID']), $shift); - - return sql_query("UPDATE `Shifts` SET + + return sql_query(" + UPDATE `Shifts` SET `shifttype_id`='" . sql_escape($shift['shifttype_id']) . "', `start`='" . sql_escape($shift['start']) . "', `end`='" . sql_escape($shift['end']) . "', @@ -314,7 +382,8 @@ function Shift_update($shift) `PSID`=" . sql_null($shift['PSID']) . ", `edited_by_user_id`='" . sql_escape($user['UID']) . "', `edited_at_timestamp`=" . time() . " - WHERE `SID`='" . sql_escape($shift['SID']) . "'"); + WHERE `SID`='" . sql_escape($shift['SID']) . "' + "); } /** @@ -341,7 +410,8 @@ function Shift_update_by_psid($shift) function Shift_create($shift) { global $user; - $result = sql_query("INSERT INTO `Shifts` SET + $result = sql_query(" + INSERT INTO `Shifts` SET `shifttype_id`='" . sql_escape($shift['shifttype_id']) . "', `start`='" . sql_escape($shift['start']) . "', `end`='" . sql_escape($shift['end']) . "', @@ -350,7 +420,8 @@ function Shift_create($shift) `URL`=" . sql_null($shift['URL']) . ", `PSID`=" . sql_null($shift['PSID']) . ", `created_by_user_id`='" . sql_escape($user['UID']) . "', - `created_at_timestamp`=" . time()); + `created_at_timestamp`=" . time() + ); if ($result === false) { return false; } @@ -384,7 +455,7 @@ function Shifts_by_user($user, $include_freeload_comments = false) * Returns Shift by id. * * @param $shift_id Shift - * ID + * ID */ function Shift($shift_id) { @@ -394,30 +465,30 @@ function Shift($shift_id) JOIN `ShiftTypes` ON (`ShiftTypes`.`id` = `Shifts`.`shifttype_id`) WHERE `SID`='" . sql_escape($shift_id) . "'"); $shiftsEntry_source = sql_select("SELECT `id`, `TID` , `UID` , `freeloaded` FROM `ShiftEntry` WHERE `SID`='" . sql_escape($shift_id) . "'"); - + if ($shifts_source === false) { engelsystem_error('Unable to load shift.'); } - + if (empty($shifts_source)) { return null; } - + $result = $shifts_source[0]; - + $result['ShiftEntry'] = $shiftsEntry_source; $result['NeedAngels'] = []; - + $temp = NeededAngelTypes_by_shift($shift_id); foreach ($temp as $e) { $result['NeedAngels'][] = [ - 'TID' => $e['angel_type_id'], - 'count' => $e['count'], - 'restricted' => $e['restricted'], - 'taken' => $e['taken'] - ]; + 'TID' => $e['angel_type_id'], + 'count' => $e['count'], + 'restricted' => $e['restricted'], + 'taken' => $e['taken'] + ]; } - + return $result; } @@ -427,7 +498,7 @@ function Shift($shift_id) function Shifts() { $shifts_source = sql_select(" - SELECT `ShiftTypes`.`name`, `Shifts`.*, `Room`.`RID`, `Room`.`Name` as `room_name` + SELECT `ShiftTypes`.`name`, `Shifts`.*, `Room`.`RID`, `Room`.`Name` AS `room_name` FROM `Shifts` JOIN `ShiftTypes` ON (`ShiftTypes`.`id` = `Shifts`.`shifttype_id`) JOIN `Room` ON `Room`.`RID` = `Shifts`.`RID` @@ -435,15 +506,15 @@ function Shifts() if ($shifts_source === false) { return false; } - + foreach ($shifts_source as &$shift) { $needed_angeltypes = NeededAngelTypes_by_shift($shift['SID']); if ($needed_angeltypes === false) { return false; } - + $shift['angeltypes'] = $needed_angeltypes; } - + return $shifts_source; } diff --git a/includes/model/UserAngelTypes_model.php b/includes/model/UserAngelTypes_model.php index ea7a454c..fae2b996 100644 --- a/includes/model/UserAngelTypes_model.php +++ b/includes/model/UserAngelTypes_model.php @@ -7,7 +7,7 @@ /** * Checks if a user joined an angeltype. * - * @param User $user + * @param User $user * The user to be checked * @param Angeltype $angeltype * The angeltype to be checked @@ -51,19 +51,20 @@ function User_angeltypes($user) function User_unconfirmed_AngelTypes($user) { $result = sql_select(" - SELECT - `UserAngelTypes`.*, - `AngelTypes`.`name`, - count(`UnconfirmedMembers`.`user_id`) as `count` - FROM `UserAngelTypes` - JOIN `AngelTypes` ON `UserAngelTypes`.`angeltype_id`=`AngelTypes`.`id` - JOIN `UserAngelTypes` as `UnconfirmedMembers` ON `UserAngelTypes`.`angeltype_id`=`UnconfirmedMembers`.`angeltype_id` - WHERE `UserAngelTypes`.`user_id`='" . sql_escape($user['UID']) . "' - AND `UserAngelTypes`.`supporter`=TRUE - AND `AngelTypes`.`restricted`=TRUE - AND `UnconfirmedMembers`.`confirm_user_id` IS NULL - GROUP BY `UserAngelTypes`.`angeltype_id` - ORDER BY `AngelTypes`.`name`"); + SELECT + `UserAngelTypes`.*, + `AngelTypes`.`name`, + count(`UnconfirmedMembers`.`user_id`) AS `count` + FROM `UserAngelTypes` + JOIN `AngelTypes` ON `UserAngelTypes`.`angeltype_id`=`AngelTypes`.`id` + JOIN `UserAngelTypes` AS `UnconfirmedMembers` ON `UserAngelTypes`.`angeltype_id`=`UnconfirmedMembers`.`angeltype_id` + WHERE `UserAngelTypes`.`user_id`='" . sql_escape($user['UID']) . "' + AND `UserAngelTypes`.`supporter`=TRUE + AND `AngelTypes`.`restricted`=TRUE + AND `UnconfirmedMembers`.`confirm_user_id` IS NULL + GROUP BY `UserAngelTypes`.`angeltype_id` + ORDER BY `AngelTypes`.`name` + "); if ($result === false) { engelsystem_error("Unable to load user angeltypes."); } @@ -73,7 +74,7 @@ function User_unconfirmed_AngelTypes($user) /** * Returns true if user is angeltype supporter or has privilege admin_user_angeltypes. * - * @param User $user + * @param User $user * @param AngelType $angeltype */ function User_is_AngelType_supporter(&$user, $angeltype) @@ -87,13 +88,14 @@ function User_is_AngelType_supporter(&$user, $angeltype) WHERE `user_id`='" . sql_escape($user['UID']) . "' AND `angeltype_id`='" . sql_escape($angeltype['id']) . "' AND `supporter`=TRUE - LIMIT 1") > 0) || in_array('admin_user_angeltypes', $user['privileges']); + LIMIT 1 + ") > 0) || in_array('admin_user_angeltypes', $user['privileges']); } /** * Add or remove supporter rights. * - * @param int $user_angeltype_id + * @param int $user_angeltype_id * @param bool $supporter */ function UserAngelType_update($user_angeltype_id, $supporter) @@ -102,7 +104,8 @@ function UserAngelType_update($user_angeltype_id, $supporter) UPDATE `UserAngelTypes` SET `supporter`=" . sql_bool($supporter) . " WHERE `id`='" . sql_escape($user_angeltype_id) . "' - LIMIT 1"); + LIMIT 1 + "); if ($result === false) { engelsystem_error("Unable to update supporter rights."); } @@ -119,7 +122,8 @@ function UserAngelTypes_delete_all($angeltype_id) $result = sql_query(" DELETE FROM `UserAngelTypes` WHERE `angeltype_id`='" . sql_escape($angeltype_id) . "' - AND `confirm_user_id` IS NULL"); + AND `confirm_user_id` IS NULL + "); if ($result === false) { engelsystem_error("Unable to delete all unconfirmed users."); } @@ -129,7 +133,7 @@ function UserAngelTypes_delete_all($angeltype_id) /** * Confirm all unconfirmed UserAngelTypes for given Angeltype. * - * @param int $angeltype_id + * @param int $angeltype_id * @param User $confirm_user */ function UserAngelTypes_confirm_all($angeltype_id, $confirm_user) @@ -138,7 +142,8 @@ function UserAngelTypes_confirm_all($angeltype_id, $confirm_user) UPDATE `UserAngelTypes` SET `confirm_user_id`='" . sql_escape($confirm_user['UID']) . "' WHERE `angeltype_id`='" . sql_escape($angeltype_id) . "' - AND `confirm_user_id` IS NULL"); + AND `confirm_user_id` IS NULL + "); if ($result === false) { engelsystem_error("Unable to confirm all users."); } @@ -148,7 +153,7 @@ function UserAngelTypes_confirm_all($angeltype_id, $confirm_user) /** * Confirm an UserAngelType with confirming user. * - * @param int $user_angeltype_id + * @param int $user_angeltype_id * @param User $confirm_user */ function UserAngelType_confirm($user_angeltype_id, $confirm_user) @@ -180,7 +185,7 @@ function UserAngelType_delete($user_angeltype) /** * Create an UserAngelType. * - * @param User $user + * @param User $user * @param Angeltype $angeltype */ function UserAngelType_create($user, $angeltype) @@ -219,7 +224,7 @@ function UserAngelType($user_angeltype_id) /** * Get an UserAngelType by user and angeltype. * - * @param User $user + * @param User $user * @param Angeltype $angeltype */ function UserAngelType_by_User_and_AngelType($user, $angeltype) diff --git a/includes/model/UserDriverLicenses_model.php b/includes/model/UserDriverLicenses_model.php index 7d1be528..a36b79c1 100644 --- a/includes/model/UserDriverLicenses_model.php +++ b/includes/model/UserDriverLicenses_model.php @@ -7,14 +7,14 @@ function UserDriverLicense_new() { return [ - 'user_id' => null, - 'has_car' => false, - 'has_license_car' => false, - 'has_license_3_5t_transporter' => false, - 'has_license_7_5t_truck' => false, - 'has_license_12_5t_truck' => false, - 'has_license_forklift' => false - ]; + 'user_id' => null, + 'has_car' => false, + 'has_license_car' => false, + 'has_license_3_5t_transporter' => false, + 'has_license_7_5t_truck' => false, + 'has_license_12_5t_truck' => false, + 'has_license_forklift' => false + ]; } /** @@ -26,7 +26,12 @@ function UserDriverLicense_new() */ function UserDriverLicense_valid($user_driver_license) { - return $user_driver_license['has_car'] || $user_driver_license['has_license_car'] || $user_driver_license['has_license_3_5t_transporter'] || $user_driver_license['has_license_7_5t_truck'] || $user_driver_license['has_license_12_5t_truck'] || $user_driver_license['has_license_forklift']; + return $user_driver_license['has_car'] + || $user_driver_license['has_license_car'] + || $user_driver_license['has_license_3_5t_transporter'] + || $user_driver_license['has_license_7_5t_truck'] + || $user_driver_license['has_license_12_5t_truck'] + || $user_driver_license['has_license_forklift']; } /** diff --git a/includes/model/UserGroups_model.php b/includes/model/UserGroups_model.php index 61fd074a..bbef85b6 100644 --- a/includes/model/UserGroups_model.php +++ b/includes/model/UserGroups_model.php @@ -2,6 +2,7 @@ /** * Returns users groups + * * @param User $user */ function User_groups($user) diff --git a/includes/model/User_model.php b/includes/model/User_model.php index 9324bf53..1a09c160 100644 --- a/includes/model/User_model.php +++ b/includes/model/User_model.php @@ -22,7 +22,8 @@ function User_delete($user_id) */ function User_update($user) { - return sql_query("UPDATE `User` SET + return sql_query(" + UPDATE `User` SET `Nick`='" . sql_escape($user['Nick']) . "', `Name`='" . sql_escape($user['Name']) . "', `Vorname`='" . sql_escape($user['Vorname']) . "', @@ -46,7 +47,8 @@ function User_update($user) `arrival_date`='" . sql_escape($user['arrival_date']) . "', `planned_arrival_date`='" . sql_escape($user['planned_arrival_date']) . "', `planned_departure_date`=" . sql_null($user['planned_departure_date']) . " - WHERE `UID`='" . sql_escape($user['UID']) . "'"); + WHERE `UID`='" . sql_escape($user['UID']) . "' + "); } /** @@ -83,19 +85,19 @@ function User_tshirts_count() function User_sortable_columns() { return [ - 'Nick', - 'Name', - 'Vorname', - 'Alter', - 'DECT', - 'email', - 'Size', - 'Gekommen', - 'Aktiv', - 'force_active', - 'Tshirt', - 'lastLogIn' - ]; + 'Nick', + 'Name', + 'Vorname', + 'Alter', + 'DECT', + 'email', + 'Size', + 'Gekommen', + 'Aktiv', + 'force_active', + 'Tshirt', + 'lastLogIn' + ]; } /** @@ -116,7 +118,7 @@ function Users($order_by = 'Nick') function User_is_freeloader($user) { global $max_freeloadable_shifts, $user; - + return count(ShiftEntries_freeloaded_by_user($user)) >= $max_freeloadable_shifts; } @@ -130,7 +132,8 @@ function Users_by_angeltype_inverted($angeltype) $result = sql_select(" SELECT `User`.* FROM `User` - LEFT JOIN `UserAngelTypes` ON (`User`.`UID`=`UserAngelTypes`.`user_id` AND `angeltype_id`='" . sql_escape($angeltype['id']) . "') + LEFT JOIN `UserAngelTypes` + ON (`User`.`UID`=`UserAngelTypes`.`user_id` AND `angeltype_id`='" . sql_escape($angeltype['id']) . "') WHERE `UserAngelTypes`.`id` IS NULL ORDER BY `Nick`"); if ($result === false) { @@ -149,7 +152,7 @@ function Users_by_angeltype($angeltype) $result = sql_select(" SELECT `User`.*, - `UserAngelTypes`.`id` as `user_angeltype_id`, + `UserAngelTypes`.`id` AS `user_angeltype_id`, `UserAngelTypes`.`confirm_user_id`, `UserAngelTypes`.`supporter`, `UserDriverLicenses`.* @@ -207,7 +210,7 @@ function User_validate_jabber($jabber) $jabber = strip_item($jabber); if ($jabber == '') { // Empty is ok - return new ValidationResult(true, ''); + return new ValidationResult(true, ''); } return new ValidationResult(check_email($jabber), $jabber); } @@ -223,20 +226,20 @@ function User_validate_planned_arrival_date($planned_arrival_date) { if ($planned_arrival_date == null) { // null is not okay - return new ValidationResult(false, time()); + return new ValidationResult(false, time()); } $event_config = EventConfig(); if ($event_config == null) { // Nothing to validate against - return new ValidationResult(true, $planned_arrival_date); + return new ValidationResult(true, $planned_arrival_date); } if (isset($event_config['buildup_start_date']) && $planned_arrival_date < $event_config['buildup_start_date']) { // Planned arrival can not be before buildup start date - return new ValidationResult(false, $event_config['buildup_start_date']); + return new ValidationResult(false, $event_config['buildup_start_date']); } if (isset($event_config['teardown_end_date']) && $planned_arrival_date > $event_config['teardown_end_date']) { // Planned arrival can not be after teardown end date - return new ValidationResult(false, $event_config['teardown_end_date']); + return new ValidationResult(false, $event_config['teardown_end_date']); } return new ValidationResult(true, $planned_arrival_date); } @@ -254,24 +257,24 @@ function User_validate_planned_departure_date($planned_arrival_date, $planned_de { if ($planned_departure_date == null) { // null is okay - return new ValidationResult(true, null); + return new ValidationResult(true, null); } if ($planned_arrival_date > $planned_departure_date) { // departure cannot be before arrival - return new ValidationResult(false, $planned_arrival_date); + return new ValidationResult(false, $planned_arrival_date); } $event_config = EventConfig(); if ($event_config == null) { // Nothing to validate against - return new ValidationResult(true, $planned_departure_date); + return new ValidationResult(true, $planned_departure_date); } if (isset($event_config['buildup_start_date']) && $planned_departure_date < $event_config['buildup_start_date']) { // Planned arrival can not be before buildup start date - return new ValidationResult(false, $event_config['buildup_start_date']); + return new ValidationResult(false, $event_config['buildup_start_date']); } if (isset($event_config['teardown_end_date']) && $planned_departure_date > $event_config['teardown_end_date']) { // Planned arrival can not be after teardown end date - return new ValidationResult(false, $event_config['teardown_end_date']); + return new ValidationResult(false, $event_config['teardown_end_date']); } return new ValidationResult(true, $planned_departure_date); } @@ -384,14 +387,14 @@ function User_generate_password_recovery_token(&$user) function User_get_eligable_voucher_count(&$user) { global $voucher_settings; - + $shifts_done = count(ShiftEntries_finished_by_user($user)); - + $earned_vouchers = $user['got_voucher'] - $voucher_settings['initial_vouchers']; $elegible_vouchers = $shifts_done / $voucher_settings['shifts_per_voucher'] - $earned_vouchers; if ($elegible_vouchers < 0) { return 0; } - + return $elegible_vouchers; } diff --git a/includes/model/ValidationResult.php b/includes/model/ValidationResult.php index 7dfcb5ba..b08e9d31 100644 --- a/includes/model/ValidationResult.php +++ b/includes/model/ValidationResult.php @@ -12,33 +12,33 @@ class ValidationResult private $value; - /** - * Constructor. - * - * @param boolean $valid - * Is the value valid? - * @param * $value - * The validated value - */ - public function __construct($valid, $value) - { - $this->valid = $valid; - $this->value = $value; - } + /** + * Constructor. + * + * @param boolean $valid + * Is the value valid? + * @param * $value + * The validated value + */ + public function __construct($valid, $value) + { + $this->valid = $valid; + $this->value = $value; + } - /** - * Is the value valid? - */ - public function isValid() - { - return $this->valid; - } + /** + * Is the value valid? + */ + public function isValid() + { + return $this->valid; + } - /** - * The parsed/validated value. - */ - public function getValue() - { - return $this->value; - } + /** + * The parsed/validated value. + */ + public function getValue() + { + return $this->value; + } } diff --git a/includes/mysqli_provider.php b/includes/mysqli_provider.php index b432bb4f..7280cd6d 100644 --- a/includes/mysqli_provider.php +++ b/includes/mysqli_provider.php @@ -6,7 +6,7 @@ function sql_close() { global $sql_connection; - + return $sql_connection->close(); } @@ -24,11 +24,11 @@ function sql_null($value = null) function sql_transaction_start() { global $sql_nested_transaction_level; - - if ($sql_nested_transaction_level ++ == 0) { + + if ($sql_nested_transaction_level++ == 0) { return sql_query("BEGIN"); } - + return true; } @@ -38,11 +38,11 @@ function sql_transaction_start() function sql_transaction_commit() { global $sql_nested_transaction_level; - - if (-- $sql_nested_transaction_level == 0) { + + if (--$sql_nested_transaction_level == 0) { return sql_query("COMMIT"); } - + return true; } @@ -52,11 +52,11 @@ function sql_transaction_commit() function sql_transaction_rollback() { global $sql_nested_transaction_level; - - if (-- $sql_nested_transaction_level == 0) { + + if (--$sql_nested_transaction_level == 0) { return sql_query("ROLLBACK"); } - + return true; } @@ -69,12 +69,12 @@ function sql_transaction_rollback() function sql_error($message) { sql_close(); - + $message = trim($message) . "\n"; $message .= debug_string_backtrace() . "\n"; - + error_log('mysql_provider error: ' . $message); - + return false; } @@ -94,23 +94,23 @@ function sql_error($message) function sql_connect($host, $user, $pass, $db_name) { global $sql_connection; - + $sql_connection = new mysqli($host, $user, $pass, $db_name); if ($sql_connection->connect_errno) { error("Unable to connect to MySQL: " . $sql_connection->connect_error); return sql_error("Unable to connect to MySQL: " . $sql_connection->connect_error); } - + $result = $sql_connection->query("SET CHARACTER SET utf8;"); - if (! $result) { + if (!$result) { return sql_error("Unable to set utf8 character set (" . $sql_connection->errno . ") " . $sql_connection->error); } - + $result = $sql_connection->set_charset('utf8'); - if (! $result) { + if (!$result) { return sql_error("Unable to set utf8 names (" . $sql_connection->errno . ") " . $sql_connection->error); } - + return $sql_connection; } @@ -124,7 +124,7 @@ function sql_connect($host, $user, $pass, $db_name) function sql_select_db($db_name) { global $sql_connection; - if (! $sql_connection->select_db($db_name)) { + if (!$sql_connection->select_db($db_name)) { return sql_error("No database selected."); } return true; @@ -139,11 +139,11 @@ function sql_select_db($db_name) function sql_select($query) { global $sql_connection; - + // echo $query . ";\n"; // echo debug_string_backtrace() . "\n"; - - $result = $sql_connection->query($query); + + $result = $sql_connection->query($query); if ($result) { $data = []; while ($line = $result->fetch_assoc()) { @@ -151,7 +151,7 @@ function sql_select($query) } return $data; } - + return sql_error("MySQL-query error: " . $query . " (" . $sql_connection->errno . ") " . $sql_connection->error); } @@ -164,12 +164,12 @@ function sql_select($query) function sql_query($query) { global $sql_connection; - + $result = $sql_connection->query($query); if ($result) { return $result; } - + return sql_error("MySQL-query error: " . $query . " (" . $sql_connection->errno . ") " . $sql_connection->error); } diff --git a/includes/pages/admin_active.php b/includes/pages/admin_active.php index 46e88e23..38edbfdb 100644 --- a/includes/pages/admin_active.php +++ b/includes/pages/admin_active.php @@ -8,34 +8,37 @@ function admin_active_title() function admin_active() { global $tshirt_sizes, $shift_sum_formula; - + $msg = ""; $search = ""; $forced_count = sql_num_query("SELECT * FROM `User` WHERE `force_active`=1"); $count = $forced_count; $limit = ""; $set_active = ""; - + if (isset($_REQUEST['search'])) { $search = strip_request_item('search'); } - + $show_all_shifts = isset($_REQUEST['show_all_shifts']); - + if (isset($_REQUEST['set_active'])) { $valid = true; - + if (isset($_REQUEST['count']) && preg_match("/^[0-9]+$/", $_REQUEST['count'])) { $count = strip_request_item('count'); if ($count < $forced_count) { - error(sprintf(_("At least %s angels are forced to be active. The number has to be greater."), $forced_count)); + error(sprintf( + _("At least %s angels are forced to be active. The number has to be greater."), + $forced_count + )); redirect(page_link_to('admin_active')); } } else { $valid = false; $msg .= error(_("Please enter a number of angels to be marked as active."), true); } - + if ($valid) { $limit = " LIMIT " . $count; } @@ -56,14 +59,14 @@ function admin_active() } sql_query("UPDATE `User` SET `Aktiv`=1 WHERE `force_active`=TRUE"); engelsystem_log("These angels are active now: " . join(", ", $user_nicks)); - + $limit = ""; $msg = success(_("Marked angels."), true); } else { $set_active = '« ' . _("back") . ' | ' . _("apply") . ''; } } - + if (isset($_REQUEST['active']) && preg_match("/^[0-9]+$/", $_REQUEST['active'])) { $user_id = $_REQUEST['active']; $user_source = User($user_id); @@ -105,14 +108,15 @@ function admin_active() $msg = error(_("Angel not found."), true); } } - + $users = sql_select(" SELECT `User`.*, COUNT(`ShiftEntry`.`id`) as `shift_count`, ${shift_sum_formula} as `shift_length` FROM `User` LEFT JOIN `ShiftEntry` ON `User`.`UID` = `ShiftEntry`.`UID` LEFT JOIN `Shifts` ON `ShiftEntry`.`SID` = `Shifts`.`SID` " . ($show_all_shifts ? "" : "AND (`Shifts`.`end` < " . time() . " OR `Shifts`.`end` IS NULL)") . " WHERE `User`.`Gekommen` = 1 GROUP BY `User`.`UID` - ORDER BY `force_active` DESC, `shift_length` DESC" . $limit); + ORDER BY `force_active` DESC, `shift_length` DESC" . $limit + ); $matched_users = []; if ($search == "") { $tokens = []; @@ -128,7 +132,7 @@ function admin_active() break; } } - if (! $match) { + if (!$match) { continue; } } @@ -138,7 +142,7 @@ function admin_active() $usr['active'] = glyph_bool($usr['Aktiv'] == 1); $usr['force_active'] = glyph_bool($usr['force_active'] == 1); $usr['tshirt'] = glyph_bool($usr['Tshirt'] == 1); - + $actions = []; if ($usr['Aktiv'] == 0) { $actions[] = '' . _("set active") . ''; @@ -150,54 +154,54 @@ function admin_active() if ($usr['Tshirt'] == 1) { $actions[] = '' . _("remove t-shirt") . ''; } - + $usr['actions'] = join(' ', $actions); - + $matched_users[] = $usr; } - + $shirt_statistics = []; foreach (array_keys($tshirt_sizes) as $size) { if ($size != '') { $shirt_statistics[] = [ - 'size' => $size, - 'needed' => sql_select_single_cell("SELECT count(*) FROM `User` WHERE `Size`='" . sql_escape($size) . "' AND `Gekommen`=1"), - 'given' => sql_select_single_cell("SELECT count(*) FROM `User` WHERE `Size`='" . sql_escape($size) . "' AND `Tshirt`=1") - ]; + 'size' => $size, + 'needed' => sql_select_single_cell("SELECT count(*) FROM `User` WHERE `Size`='" . sql_escape($size) . "' AND `Gekommen`=1"), + 'given' => sql_select_single_cell("SELECT count(*) FROM `User` WHERE `Size`='" . sql_escape($size) . "' AND `Tshirt`=1") + ]; } } $shirt_statistics[] = [ - 'size' => '' . _("Sum") . '', - 'needed' => '' . User_arrived_count() . '', - 'given' => '' . sql_select_single_cell("SELECT count(*) FROM `User` WHERE `Tshirt`=1") . '' - ]; - + 'size' => '' . _("Sum") . '', + 'needed' => '' . User_arrived_count() . '', + 'given' => '' . sql_select_single_cell("SELECT count(*) FROM `User` WHERE `Tshirt`=1") . '' + ]; + return page_with_title(admin_active_title(), [ - form([ - form_text('search', _("Search angel:"), $search), - form_checkbox('show_all_shifts', _("Show all shifts"), $show_all_shifts), - form_submit('submit', _("Search")) - ], page_link_to('admin_active')), - $set_active == "" ? form([ - form_text('count', _("How much angels should be active?"), $count), - form_submit('set_active', _("Preview")) - ]) : $set_active, - msg(), - table([ - 'nick' => _("Nickname"), - 'shirt_size' => _("Size"), - 'shift_count' => _("Shifts"), - 'work_time' => _("Length"), - 'active' => _("Active?"), - 'force_active' => _("Forced"), - 'tshirt' => _("T-shirt?"), - 'actions' => "" - ], $matched_users), - '

    ' . _("Shirt statistics") . '

    ', - table([ - 'size' => _("Size"), - 'needed' => _("Needed shirts"), - 'given' => _("Given shirts") - ], $shirt_statistics) - ]); + form([ + form_text('search', _("Search angel:"), $search), + form_checkbox('show_all_shifts', _("Show all shifts"), $show_all_shifts), + form_submit('submit', _("Search")) + ], page_link_to('admin_active')), + $set_active == "" ? form([ + form_text('count', _("How much angels should be active?"), $count), + form_submit('set_active', _("Preview")) + ]) : $set_active, + msg(), + table([ + 'nick' => _("Nickname"), + 'shirt_size' => _("Size"), + 'shift_count' => _("Shifts"), + 'work_time' => _("Length"), + 'active' => _("Active?"), + 'force_active' => _("Forced"), + 'tshirt' => _("T-shirt?"), + 'actions' => "" + ], $matched_users), + '

    ' . _("Shirt statistics") . '

    ', + table([ + 'size' => _("Size"), + 'needed' => _("Needed shirts"), + 'given' => _("Given shirts") + ], $shirt_statistics) + ]); } diff --git a/includes/pages/admin_arrive.php b/includes/pages/admin_arrive.php index c2e97072..cd910bd0 100644 --- a/includes/pages/admin_arrive.php +++ b/includes/pages/admin_arrive.php @@ -12,7 +12,7 @@ function admin_arrive() if (isset($_REQUEST['search'])) { $search = strip_request_item('search'); } - + if (isset($_REQUEST['reset']) && preg_match("/^[0-9]*$/", $_REQUEST['reset'])) { $user_id = $_REQUEST['reset']; $user_source = User($user_id); @@ -36,7 +36,7 @@ function admin_arrive() $msg = error(_("Angel not found."), true); } } - + $users = sql_select("SELECT * FROM `User` ORDER BY `Nick`"); $arrival_count_at_day = []; $planned_arrival_count_at_day = []; @@ -57,11 +57,11 @@ function admin_arrive() break; } } - if (! $match) { + if (!$match) { continue; } } - + $usr['nick'] = User_Nick_render($usr); if ($usr['planned_departure_date'] != null) { $usr['rendered_planned_departure_date'] = date('Y-m-d', $usr['planned_departure_date']); @@ -72,131 +72,131 @@ function admin_arrive() $usr['rendered_arrival_date'] = $usr['arrival_date'] > 0 ? date('Y-m-d', $usr['arrival_date']) : "-"; $usr['arrived'] = $usr['Gekommen'] == 1 ? _("yes") : ""; $usr['actions'] = $usr['Gekommen'] == 1 ? '' . _("reset") . '' : '' . _("arrived") . ''; - + if ($usr['arrival_date'] > 0) { $day = date('Y-m-d', $usr['arrival_date']); - if (! isset($arrival_count_at_day[$day])) { + if (!isset($arrival_count_at_day[$day])) { $arrival_count_at_day[$day] = 0; } - $arrival_count_at_day[$day] ++; + $arrival_count_at_day[$day]++; } - + if ($usr['planned_arrival_date'] != null) { $day = date('Y-m-d', $usr['planned_arrival_date']); - if (! isset($planned_arrival_count_at_day[$day])) { + if (!isset($planned_arrival_count_at_day[$day])) { $planned_arrival_count_at_day[$day] = 0; } - $planned_arrival_count_at_day[$day] ++; + $planned_arrival_count_at_day[$day]++; } - + if ($usr['planned_departure_date'] != null && $usr['Gekommen'] == 1) { $day = date('Y-m-d', $usr['planned_departure_date']); - if (! isset($planned_departure_count_at_day[$day])) { + if (!isset($planned_departure_count_at_day[$day])) { $planned_departure_count_at_day[$day] = 0; } - $planned_departure_count_at_day[$day] ++; + $planned_departure_count_at_day[$day]++; } - + $users_matched[] = $usr; } - + ksort($arrival_count_at_day); ksort($planned_arrival_count_at_day); ksort($planned_departure_count_at_day); - + $arrival_at_day = []; $arrival_sum = 0; foreach ($arrival_count_at_day as $day => $count) { $arrival_sum += $count; $arrival_at_day[$day] = [ - 'day' => $day, - 'count' => $count, - 'sum' => $arrival_sum - ]; + 'day' => $day, + 'count' => $count, + 'sum' => $arrival_sum + ]; } - + $planned_arrival_at_day = []; $planned_arrival_sum = 0; foreach ($planned_arrival_count_at_day as $day => $count) { $planned_arrival_sum += $count; $planned_arrival_at_day[$day] = [ - 'day' => $day, - 'count' => $count, - 'sum' => $planned_arrival_sum - ]; + 'day' => $day, + 'count' => $count, + 'sum' => $planned_arrival_sum + ]; } - + $planned_departure_at_day = []; $planned_departure_sum = 0; foreach ($planned_departure_count_at_day as $day => $count) { $planned_departure_sum += $count; $planned_departure_at_day[$day] = [ - 'day' => $day, - 'count' => $count, - 'sum' => $planned_departure_sum - ]; + 'day' => $day, + 'count' => $count, + 'sum' => $planned_departure_sum + ]; } - + return page_with_title(admin_arrive_title(), [ - msg(), - form([ - form_text('search', _("Search"), $search), - form_submit('submit', _("Search")) - ]), - table([ - 'nick' => _("Nickname"), - 'rendered_planned_arrival_date' => _("Planned arrival"), - 'arrived' => _("Arrived?"), - 'rendered_arrival_date' => _("Arrival date"), - 'rendered_planned_departure_date' => _("Planned departure"), - 'actions' => "" - ], $users_matched), - div('row', [ - div('col-md-4', [ - heading(_("Planned arrival statistics"), 2), - bargraph('planned_arrives', 'day', [ - 'count' => _("arrived"), - 'sum' => _("arrived sum") - ], [ - 'count' => '#090', - 'sum' => '#888' - ], $planned_arrival_at_day), - table([ - 'day' => _("Date"), - 'count' => _("Count"), - 'sum' => _("Sum") - ], $planned_arrival_at_day) - ]), - div('col-md-4', [ - heading(_("Arrival statistics"), 2), - bargraph('arrives', 'day', [ - 'count' => _("arrived"), - 'sum' => _("arrived sum") - ], [ - 'count' => '#090', - 'sum' => '#888' - ], $arrival_at_day), - table([ - 'day' => _("Date"), - 'count' => _("Count"), - 'sum' => _("Sum") - ], $arrival_at_day) - ]), - div('col-md-4', [ - heading(_("Planned departure statistics"), 2), - bargraph('planned_departures', 'day', [ - 'count' => _("arrived"), - 'sum' => _("arrived sum") - ], [ - 'count' => '#090', - 'sum' => '#888' - ], $planned_departure_at_day), - table([ - 'day' => _("Date"), - 'count' => _("Count"), - 'sum' => _("Sum") - ], $planned_departure_at_day) - ]) - ]) - ]); + msg(), + form([ + form_text('search', _("Search"), $search), + form_submit('submit', _("Search")) + ]), + table([ + 'nick' => _("Nickname"), + 'rendered_planned_arrival_date' => _("Planned arrival"), + 'arrived' => _("Arrived?"), + 'rendered_arrival_date' => _("Arrival date"), + 'rendered_planned_departure_date' => _("Planned departure"), + 'actions' => "" + ], $users_matched), + div('row', [ + div('col-md-4', [ + heading(_("Planned arrival statistics"), 2), + bargraph('planned_arrives', 'day', [ + 'count' => _("arrived"), + 'sum' => _("arrived sum") + ], [ + 'count' => '#090', + 'sum' => '#888' + ], $planned_arrival_at_day), + table([ + 'day' => _("Date"), + 'count' => _("Count"), + 'sum' => _("Sum") + ], $planned_arrival_at_day) + ]), + div('col-md-4', [ + heading(_("Arrival statistics"), 2), + bargraph('arrives', 'day', [ + 'count' => _("arrived"), + 'sum' => _("arrived sum") + ], [ + 'count' => '#090', + 'sum' => '#888' + ], $arrival_at_day), + table([ + 'day' => _("Date"), + 'count' => _("Count"), + 'sum' => _("Sum") + ], $arrival_at_day) + ]), + div('col-md-4', [ + heading(_("Planned departure statistics"), 2), + bargraph('planned_departures', 'day', [ + 'count' => _("arrived"), + 'sum' => _("arrived sum") + ], [ + 'count' => '#090', + 'sum' => '#888' + ], $planned_departure_at_day), + table([ + 'day' => _("Date"), + 'count' => _("Count"), + 'sum' => _("Sum") + ], $planned_departure_at_day) + ]) + ]) + ]); } diff --git a/includes/pages/admin_free.php b/includes/pages/admin_free.php index db0c239f..947dd93b 100644 --- a/includes/pages/admin_free.php +++ b/includes/pages/admin_free.php @@ -8,12 +8,12 @@ function admin_free_title() function admin_free() { global $privileges; - + $search = ""; if (isset($_REQUEST['search'])) { $search = strip_request_item('search'); } - + $angeltypesearch = ""; if (empty($_REQUEST['angeltype'])) { $_REQUEST['angeltype'] = ''; @@ -24,15 +24,15 @@ function admin_free() } $angeltypesearch .= ") "; } - + $angel_types_source = sql_select("SELECT `id`, `name` FROM `AngelTypes` ORDER BY `name`"); $angel_types = [ - '' => 'alle Typen' - ]; + '' => 'alle Typen' + ]; foreach ($angel_types_source as $angel_type) { $angel_types[$angel_type['id']] = $angel_type['name']; } - + $users = sql_select(" SELECT `User`.* FROM `User` @@ -42,7 +42,7 @@ function admin_free() WHERE `User`.`Gekommen` = 1 AND `Shifts`.`SID` IS NULL GROUP BY `User`.`UID` ORDER BY `Nick`"); - + $free_users_table = []; if ($search == "") { $tokens = []; @@ -59,44 +59,47 @@ function admin_free() break; } } - if (! $match) { + if (!$match) { continue; } } - + $free_users_table[] = [ - 'name' => User_Nick_render($usr), - 'shift_state' => User_shift_state_render($usr), - 'dect' => $usr['DECT'], - 'jabber' => $usr['jabber'], - 'email' => $usr['email_by_human_allowed'] ? $usr['email'] : glyph('eye-close'), - 'actions' => in_array('admin_user', $privileges) ? button(page_link_to('admin_user') . '&id=' . $usr['UID'], _("edit"), 'btn-xs') : '' - ]; + 'name' => User_Nick_render($usr), + 'shift_state' => User_shift_state_render($usr), + 'dect' => $usr['DECT'], + 'jabber' => $usr['jabber'], + 'email' => $usr['email_by_human_allowed'] ? $usr['email'] : glyph('eye-close'), + 'actions' => + in_array('admin_user', $privileges) + ? button(page_link_to('admin_user') . '&id=' . $usr['UID'], _("edit"), 'btn-xs') + : '' + ]; } return page_with_title(admin_free_title(), [ - form([ - div('row', [ - div('col-md-4', [ - form_text('search', _("Search"), $search) - ]), - div('col-md-4', [ - form_select('angeltype', _("Angeltype"), $angel_types, $_REQUEST['angeltype']) - ]), - div('col-md-2', [ - form_checkbox('confirmed_only', _("Only confirmed"), isset($_REQUEST['confirmed_only'])) - ]), - div('col-md-2', [ - form_submit('submit', _("Search")) - ]) - ]) - ]), - table([ - 'name' => _("Nick"), - 'shift_state' => '', - 'dect' => _("DECT"), - 'jabber' => _("Jabber"), - 'email' => _("E-Mail"), - 'actions' => '' - ], $free_users_table) - ]); + form([ + div('row', [ + div('col-md-4', [ + form_text('search', _("Search"), $search) + ]), + div('col-md-4', [ + form_select('angeltype', _("Angeltype"), $angel_types, $_REQUEST['angeltype']) + ]), + div('col-md-2', [ + form_checkbox('confirmed_only', _("Only confirmed"), isset($_REQUEST['confirmed_only'])) + ]), + div('col-md-2', [ + form_submit('submit', _("Search")) + ]) + ]) + ]), + table([ + 'name' => _("Nick"), + 'shift_state' => '', + 'dect' => _("DECT"), + 'jabber' => _("Jabber"), + 'email' => _("E-Mail"), + 'actions' => '' + ], $free_users_table) + ]); } diff --git a/includes/pages/admin_groups.php b/includes/pages/admin_groups.php index 04e4320d..d170c374 100644 --- a/includes/pages/admin_groups.php +++ b/includes/pages/admin_groups.php @@ -9,90 +9,122 @@ function admin_groups() { $html = ""; $groups = sql_select("SELECT * FROM `Groups` ORDER BY `Name`"); - if (! isset($_REQUEST["action"])) { + if (!isset($_REQUEST["action"])) { $groups_table = []; foreach ($groups as $group) { - $privileges = sql_select("SELECT * FROM `GroupPrivileges` JOIN `Privileges` ON (`GroupPrivileges`.`privilege_id` = `Privileges`.`id`) WHERE `group_id`='" . sql_escape($group['UID']) . "'"); + $privileges = sql_select(" + SELECT * + FROM `GroupPrivileges` + JOIN `Privileges` ON (`GroupPrivileges`.`privilege_id` = `Privileges`.`id`) + WHERE `group_id`='" . sql_escape($group['UID']) . "' + "); $privileges_html = []; - + foreach ($privileges as $priv) { $privileges_html[] = $priv['name']; } - + $groups_table[] = [ - 'name' => $group['Name'], - 'privileges' => join(', ', $privileges_html), - 'actions' => button(page_link_to('admin_groups') . '&action=edit&id=' . $group['UID'], _("edit"), 'btn-xs') - ]; + 'name' => $group['Name'], + 'privileges' => join(', ', $privileges_html), + 'actions' => button( + page_link_to('admin_groups') . '&action=edit&id=' . $group['UID'], + _("edit"), + 'btn-xs' + ) + ]; } - + return page_with_title(admin_groups_title(), [ - table([ - 'name' => _("Name"), - 'privileges' => _("Privileges"), - 'actions' => '' - ], $groups_table) - ]); + table([ + 'name' => _("Name"), + 'privileges' => _("Privileges"), + 'actions' => '' + ], $groups_table) + ]); } else { switch ($_REQUEST["action"]) { - case 'edit': - if (isset($_REQUEST['id']) && preg_match("/^-[0-9]{1,11}$/", $_REQUEST['id'])) { - $group_id = $_REQUEST['id']; - } else { - return error("Incomplete call, missing Groups ID.", true); - } - - $group = sql_select("SELECT * FROM `Groups` WHERE `UID`='" . sql_escape($group_id) . "' LIMIT 1"); - if (count($group) > 0) { - list($group) = $group; - $privileges = sql_select("SELECT `Privileges`.*, `GroupPrivileges`.`group_id` FROM `Privileges` LEFT OUTER JOIN `GroupPrivileges` ON (`Privileges`.`id` = `GroupPrivileges`.`privilege_id` AND `GroupPrivileges`.`group_id`='" . sql_escape($group_id) . "') ORDER BY `Privileges`.`name`"); - $privileges_html = ""; - $privileges_form = []; - foreach ($privileges as $priv) { - $privileges_form[] = form_checkbox('privileges[]', $priv['desc'] . ' (' . $priv['name'] . ')', $priv['group_id'] != "", $priv['id']); - $privileges_html .= sprintf('' . ' %s %s', $priv['id'], ($priv['group_id'] != "" ? 'checked="checked"' : ''), $priv['name'], $priv['desc']); - } - - $privileges_form[] = form_submit('submit', _("Save")); - $html .= page_with_title(_("Edit group"), [ - form($privileges_form, page_link_to('admin_groups') . '&action=save&id=' . $group_id) - ]); - } else { - return error("No Group found.", true); - } - break; - - case 'save': - if (isset($_REQUEST['id']) && preg_match("/^-[0-9]{1,11}$/", $_REQUEST['id'])) { - $group_id = $_REQUEST['id']; - } else { - return error("Incomplete call, missing Groups ID.", true); - } - - $group = sql_select("SELECT * FROM `Groups` WHERE `UID`='" . sql_escape($group_id) . "' LIMIT 1"); - if (! is_array($_REQUEST['privileges'])) { - $_REQUEST['privileges'] = []; - } - if (count($group) > 0) { - list($group) = $group; - sql_query("DELETE FROM `GroupPrivileges` WHERE `group_id`='" . sql_escape($group_id) . "'"); - $privilege_names = []; - foreach ($_REQUEST['privileges'] as $priv) { - if (preg_match("/^[0-9]{1,}$/", $priv)) { - $group_privileges_source = sql_select("SELECT * FROM `Privileges` WHERE `id`='" . sql_escape($priv) . "' LIMIT 1"); - if (count($group_privileges_source) > 0) { - sql_query("INSERT INTO `GroupPrivileges` SET `group_id`='" . sql_escape($group_id) . "', `privilege_id`='" . sql_escape($priv) . "'"); - $privilege_names[] = $group_privileges_source[0]['name']; + case 'edit': + if (isset($_REQUEST['id']) && preg_match("/^-[0-9]{1,11}$/", $_REQUEST['id'])) { + $group_id = $_REQUEST['id']; + } else { + return error("Incomplete call, missing Groups ID.", true); + } + + $group = sql_select("SELECT * FROM `Groups` WHERE `UID`='" . sql_escape($group_id) . "' LIMIT 1"); + if (count($group) > 0) { + list($group) = $group; + $privileges = sql_select(" + SELECT `Privileges`.*, `GroupPrivileges`.`group_id` + FROM `Privileges` + LEFT OUTER JOIN `GroupPrivileges` + ON ( + `Privileges`.`id` = `GroupPrivileges`.`privilege_id` + AND `GroupPrivileges`.`group_id`='" . sql_escape($group_id) . "' + ) + ORDER BY `Privileges`.`name` + "); + $privileges_html = ""; + $privileges_form = []; + foreach ($privileges as $priv) { + $privileges_form[] = form_checkbox( + 'privileges[]', + $priv['desc'] . ' (' . $priv['name'] . ')', + $priv['group_id'] != "", + $priv['id'] + ); + $privileges_html .= sprintf( + ' %s %s', + $priv['id'], + ($priv['group_id'] != "" ? 'checked="checked"' : ''), + $priv['name'], + $priv['desc'] + ); } + + $privileges_form[] = form_submit('submit', _("Save")); + $html .= page_with_title(_("Edit group"), [ + form($privileges_form, page_link_to('admin_groups') . '&action=save&id=' . $group_id) + ]); + } else { + return error("No Group found.", true); } - } - engelsystem_log("Group privileges of group " . $group['Name'] . " edited: " . join(", ", $privilege_names)); - redirect(page_link_to("admin_groups")); - } else { - return error("No Group found.", true); + break; + + case 'save': + if (isset($_REQUEST['id']) && preg_match("/^-[0-9]{1,11}$/", $_REQUEST['id'])) { + $group_id = $_REQUEST['id']; + } else { + return error("Incomplete call, missing Groups ID.", true); + } + + $group = sql_select("SELECT * FROM `Groups` WHERE `UID`='" . sql_escape($group_id) . "' LIMIT 1"); + if (!is_array($_REQUEST['privileges'])) { + $_REQUEST['privileges'] = []; + } + if (count($group) > 0) { + list($group) = $group; + sql_query("DELETE FROM `GroupPrivileges` WHERE `group_id`='" . sql_escape($group_id) . "'"); + $privilege_names = []; + foreach ($_REQUEST['privileges'] as $priv) { + if (preg_match("/^[0-9]{1,}$/", $priv)) { + $group_privileges_source = sql_select("SELECT * FROM `Privileges` WHERE `id`='" . sql_escape($priv) . "' LIMIT 1"); + if (count($group_privileges_source) > 0) { + sql_query("INSERT INTO `GroupPrivileges` SET `group_id`='" . sql_escape($group_id) . "', `privilege_id`='" . sql_escape($priv) . "'"); + $privilege_names[] = $group_privileges_source[0]['name']; + } + } + } + engelsystem_log( + "Group privileges of group " . $group['Name'] + . " edited: " . join(", ", $privilege_names) + ); + redirect(page_link_to("admin_groups")); + } else { + return error("No Group found.", true); + } + break; } - break; - } } return $html; } diff --git a/includes/pages/admin_import.php b/includes/pages/admin_import.php index e1674670..46c13ac7 100644 --- a/includes/pages/admin_import.php +++ b/includes/pages/admin_import.php @@ -11,28 +11,31 @@ function admin_import() global $user; $html = ""; $import_dir = __DIR__ . '/../../import'; - + $step = "input"; - if (isset($_REQUEST['step']) && in_array($step, [ - 'input', - 'check', - 'import' - ])) { + if ( + isset($_REQUEST['step']) + && in_array($step, [ + 'input', + 'check', + 'import' + ]) + ) { $step = $_REQUEST['step']; } - + if ($test_handle = @fopen($import_dir . '/tmp', 'w')) { fclose($test_handle); @unlink($import_dir . '/tmp'); } else { error(_('Webserver has no write-permission on import directory.')); } - + $import_file = $import_dir . '/import_' . $user['UID'] . '.xml'; $shifttype_id = null; $add_minutes_start = 15; $add_minutes_end = 15; - + $shifttypes_source = ShiftTypes(); if ($shifttypes_source === false) { engelsystem_error('Unable to load shifttypes.'); @@ -41,301 +44,323 @@ function admin_import() foreach ($shifttypes_source as $shifttype) { $shifttypes[$shifttype['id']] = $shifttype['name']; } - + switch ($step) { - case 'input': - $valid = false; - - if (isset($_REQUEST['submit'])) { - $valid = true; - - if (isset($_REQUEST['shifttype_id']) && isset($shifttypes[$_REQUEST['shifttype_id']])) { - $shifttype_id = $_REQUEST['shifttype_id']; - } else { - $valid = false; - error(_('Please select a shift type.')); - } - - if (isset($_REQUEST['add_minutes_start']) && is_numeric(trim($_REQUEST['add_minutes_start']))) { - $add_minutes_start = trim($_REQUEST['add_minutes_start']); - } else { - $valid = false; - error(_("Please enter an amount of minutes to add to a talk's begin.")); - } - - if (isset($_REQUEST['add_minutes_end']) && is_numeric(trim($_REQUEST['add_minutes_end']))) { - $add_minutes_end = trim($_REQUEST['add_minutes_end']); - } else { - $valid = false; - error(_("Please enter an amount of minutes to add to a talk's end.")); - } - - if (isset($_FILES['xcal_file']) && ($_FILES['xcal_file']['error'] == 0)) { - if (move_uploaded_file($_FILES['xcal_file']['tmp_name'], $import_file)) { - libxml_use_internal_errors(true); - if (simplexml_load_file($import_file) === false) { - $valid = false; - error(_('No valid xml/xcal file provided.')); - unlink($import_file); - } - } else { - $valid = false; - error(_('File upload went wrong.')); - } - } else { - $valid = false; - error(_('Please provide some data.')); - } - } - - if ($valid) { - redirect(page_link_to('admin_import') . "&step=check&shifttype_id=" . $shifttype_id . "&add_minutes_end=" . $add_minutes_end . "&add_minutes_start=" . $add_minutes_start); - } else { - $html .= div('well well-sm text-center', [ - _('File Upload') . mute(glyph('arrow-right')) . mute(_('Validation')) . mute(glyph('arrow-right')) . mute(_('Import')) - ]) . div('row', [ - div('col-md-offset-3 col-md-6', [ - form([ - form_info('', _("This import will create/update/delete rooms and shifts by given FRAB-export file. The needed file format is xcal.")), - form_select('shifttype_id', _('Shifttype'), $shifttypes, $shifttype_id), - form_spinner('add_minutes_start', _("Add minutes to start"), $add_minutes_start), - form_spinner('add_minutes_end', _("Add minutes to end"), $add_minutes_end), - form_file('xcal_file', _("xcal-File (.xcal)")), - form_submit('submit', _("Import")) - ]) - ]) - ]); - } - break; - - case 'check': - if (! file_exists($import_file)) { - error(_('Missing import file.')); - redirect(page_link_to('admin_import')); - } - - if (isset($_REQUEST['shifttype_id']) && isset($shifttypes[$_REQUEST['shifttype_id']])) { - $shifttype_id = $_REQUEST['shifttype_id']; - } else { - error(_('Please select a shift type.')); - redirect(page_link_to('admin_import')); - } - - if (isset($_REQUEST['add_minutes_start']) && is_numeric(trim($_REQUEST['add_minutes_start']))) { - $add_minutes_start = trim($_REQUEST['add_minutes_start']); - } else { - error(_("Please enter an amount of minutes to add to a talk's begin.")); - redirect(page_link_to('admin_import')); - } - - if (isset($_REQUEST['add_minutes_end']) && is_numeric(trim($_REQUEST['add_minutes_end']))) { - $add_minutes_end = trim($_REQUEST['add_minutes_end']); - } else { - error(_("Please enter an amount of minutes to add to a talk's end.")); - redirect(page_link_to('admin_import')); - } - - list($rooms_new, $rooms_deleted) = prepare_rooms($import_file); - list($events_new, $events_updated, $events_deleted) = prepare_events($import_file, $shifttype_id, $add_minutes_start, $add_minutes_end); - - $html .= div('well well-sm text-center', [ - '' . _('File Upload') . glyph('ok-circle') . '' . mute(glyph('arrow-right')) . _('Validation') . mute(glyph('arrow-right')) . mute(_('Import')) - ]) . form([ - div('row', [ - div('col-sm-6', [ - '

    ' . _("Rooms to create") . '

    ', - table(_("Name"), $rooms_new) - ]), - div('col-sm-6', [ - '

    ' . _("Rooms to delete") . '

    ', - table(_("Name"), $rooms_deleted) - ]) - ]), - '

    ' . _("Shifts to create") . '

    ', - table([ - 'day' => _("Day"), - 'start' => _("Start"), - 'end' => _("End"), - 'shifttype' => _('Shift type'), - 'title' => _("Title"), - 'room' => _("Room") - ], shifts_printable($events_new, $shifttypes)), - '

    ' . _("Shifts to update") . '

    ', - table([ - 'day' => _("Day"), - 'start' => _("Start"), - 'end' => _("End"), - 'shifttype' => _('Shift type'), - 'title' => _("Title"), - 'room' => _("Room") - ], shifts_printable($events_updated, $shifttypes)), - '

    ' . _("Shifts to delete") . '

    ', - table([ - 'day' => _("Day"), - 'start' => _("Start"), - 'end' => _("End"), - 'shifttype' => _('Shift type'), - 'title' => _("Title"), - 'room' => _("Room") - ], shifts_printable($events_deleted, $shifttypes)), - form_submit('submit', _("Import")) - ], page_link_to('admin_import') . '&step=import&shifttype_id=' . $shifttype_id . "&add_minutes_end=" . $add_minutes_end . "&add_minutes_start=" . $add_minutes_start); - break; - - case 'import': - if (! file_exists($import_file)) { - error(_('Missing import file.')); - redirect(page_link_to('admin_import')); - } - - if (! file_exists($import_file)) { - redirect(page_link_to('admin_import')); - } - - if (isset($_REQUEST['shifttype_id']) && isset($shifttypes[$_REQUEST['shifttype_id']])) { - $shifttype_id = $_REQUEST['shifttype_id']; - } else { - error(_('Please select a shift type.')); - redirect(page_link_to('admin_import')); - } - - if (isset($_REQUEST['add_minutes_start']) && is_numeric(trim($_REQUEST['add_minutes_start']))) { - $add_minutes_start = trim($_REQUEST['add_minutes_start']); - } else { - error(_("Please enter an amount of minutes to add to a talk's begin.")); - redirect(page_link_to('admin_import')); - } - - if (isset($_REQUEST['add_minutes_end']) && is_numeric(trim($_REQUEST['add_minutes_end']))) { - $add_minutes_end = trim($_REQUEST['add_minutes_end']); - } else { - error(_("Please enter an amount of minutes to add to a talk's end.")); - redirect(page_link_to('admin_import')); - } - - list($rooms_new, $rooms_deleted) = prepare_rooms($import_file); - foreach ($rooms_new as $room) { - $result = Room_create($room, true, true); - if ($result === false) { - engelsystem_error('Unable to create room.'); - } - $rooms_import[trim($room)] = sql_id(); - } - foreach ($rooms_deleted as $room) { - sql_query("DELETE FROM `Room` WHERE `Name`='" . sql_escape($room) . "' LIMIT 1"); - } - - list($events_new, $events_updated, $events_deleted) = prepare_events($import_file, $shifttype_id, $add_minutes_start, $add_minutes_end); - foreach ($events_new as $event) { - $result = Shift_create($event); - if ($result === false) { - engelsystem_error('Unable to create shift.'); - } - } - - foreach ($events_updated as $event) { - $result = Shift_update_by_psid($event); - if ($result === false) { - engelsystem_error('Unable to update shift.'); - } - } - - foreach ($events_deleted as $event) { - $result = Shift_delete_by_psid($event['PSID']); - if ($result === false) { - engelsystem_error('Unable to delete shift.'); - } - } - - engelsystem_log("Frab import done"); - - unlink($import_file); - - $html .= div('well well-sm text-center', [ - '' . _('File Upload') . glyph('ok-circle') . '' . mute(glyph('arrow-right')) . '' . _('Validation') . glyph('ok-circle') . '' . mute(glyph('arrow-right')) . '' . _('Import') . glyph('ok-circle') . '' - ]) . success(_("It's done!"), true); - break; - default: - redirect(page_link_to('admin_import')); - } - + case 'input': + $valid = false; + + if (isset($_REQUEST['submit'])) { + $valid = true; + + if (isset($_REQUEST['shifttype_id']) && isset($shifttypes[$_REQUEST['shifttype_id']])) { + $shifttype_id = $_REQUEST['shifttype_id']; + } else { + $valid = false; + error(_('Please select a shift type.')); + } + + if (isset($_REQUEST['add_minutes_start']) && is_numeric(trim($_REQUEST['add_minutes_start']))) { + $add_minutes_start = trim($_REQUEST['add_minutes_start']); + } else { + $valid = false; + error(_("Please enter an amount of minutes to add to a talk's begin.")); + } + + if (isset($_REQUEST['add_minutes_end']) && is_numeric(trim($_REQUEST['add_minutes_end']))) { + $add_minutes_end = trim($_REQUEST['add_minutes_end']); + } else { + $valid = false; + error(_("Please enter an amount of minutes to add to a talk's end.")); + } + + if (isset($_FILES['xcal_file']) && ($_FILES['xcal_file']['error'] == 0)) { + if (move_uploaded_file($_FILES['xcal_file']['tmp_name'], $import_file)) { + libxml_use_internal_errors(true); + if (simplexml_load_file($import_file) === false) { + $valid = false; + error(_('No valid xml/xcal file provided.')); + unlink($import_file); + } + } else { + $valid = false; + error(_('File upload went wrong.')); + } + } else { + $valid = false; + error(_('Please provide some data.')); + } + } + + if ($valid) { + redirect(page_link_to('admin_import') . "&step=check&shifttype_id=" . $shifttype_id . "&add_minutes_end=" . $add_minutes_end . "&add_minutes_start=" . $add_minutes_start); + } else { + $html .= div('well well-sm text-center', [ + _('File Upload') . mute(glyph('arrow-right')) . mute(_('Validation')) . mute(glyph('arrow-right')) . mute(_('Import')) + ]) . div('row', [ + div('col-md-offset-3 col-md-6', [ + form([ + form_info( + '', + _("This import will create/update/delete rooms and shifts by given FRAB-export file. The needed file format is xcal.") + ), + form_select('shifttype_id', _('Shifttype'), $shifttypes, $shifttype_id), + form_spinner('add_minutes_start', _("Add minutes to start"), $add_minutes_start), + form_spinner('add_minutes_end', _("Add minutes to end"), $add_minutes_end), + form_file('xcal_file', _("xcal-File (.xcal)")), + form_submit('submit', _("Import")) + ]) + ]) + ]); + } + break; + + case 'check': + if (!file_exists($import_file)) { + error(_('Missing import file.')); + redirect(page_link_to('admin_import')); + } + + if (isset($_REQUEST['shifttype_id']) && isset($shifttypes[$_REQUEST['shifttype_id']])) { + $shifttype_id = $_REQUEST['shifttype_id']; + } else { + error(_('Please select a shift type.')); + redirect(page_link_to('admin_import')); + } + + if (isset($_REQUEST['add_minutes_start']) && is_numeric(trim($_REQUEST['add_minutes_start']))) { + $add_minutes_start = trim($_REQUEST['add_minutes_start']); + } else { + error(_("Please enter an amount of minutes to add to a talk's begin.")); + redirect(page_link_to('admin_import')); + } + + if (isset($_REQUEST['add_minutes_end']) && is_numeric(trim($_REQUEST['add_minutes_end']))) { + $add_minutes_end = trim($_REQUEST['add_minutes_end']); + } else { + error(_("Please enter an amount of minutes to add to a talk's end.")); + redirect(page_link_to('admin_import')); + } + + list($rooms_new, $rooms_deleted) = prepare_rooms($import_file); + list($events_new, $events_updated, $events_deleted) = prepare_events( + $import_file, + $shifttype_id, + $add_minutes_start, + $add_minutes_end + ); + + $html .= div( + 'well well-sm text-center', + [ + '' . _('File Upload') . glyph('ok-circle') . '' . mute(glyph('arrow-right')) . _('Validation') . mute(glyph('arrow-right')) . mute(_('Import')) + ]) + . form( + [ + div('row', [ + div('col-sm-6', [ + '

    ' . _("Rooms to create") . '

    ', + table(_("Name"), $rooms_new) + ]), + div('col-sm-6', [ + '

    ' . _("Rooms to delete") . '

    ', + table(_("Name"), $rooms_deleted) + ]) + ]), + '

    ' . _("Shifts to create") . '

    ', + table([ + 'day' => _("Day"), + 'start' => _("Start"), + 'end' => _("End"), + 'shifttype' => _('Shift type'), + 'title' => _("Title"), + 'room' => _("Room") + ], shifts_printable($events_new, $shifttypes)), + '

    ' . _("Shifts to update") . '

    ', + table([ + 'day' => _("Day"), + 'start' => _("Start"), + 'end' => _("End"), + 'shifttype' => _('Shift type'), + 'title' => _("Title"), + 'room' => _("Room") + ], shifts_printable($events_updated, $shifttypes)), + '

    ' . _("Shifts to delete") . '

    ', + table([ + 'day' => _("Day"), + 'start' => _("Start"), + 'end' => _("End"), + 'shifttype' => _('Shift type'), + 'title' => _("Title"), + 'room' => _("Room") + ], shifts_printable($events_deleted, $shifttypes)), + form_submit('submit', _("Import")) + ], + page_link_to('admin_import') + . '&step=import&shifttype_id=' . $shifttype_id + . "&add_minutes_end=" . $add_minutes_end + . "&add_minutes_start=" . $add_minutes_start + ); + break; + + case 'import': + if (!file_exists($import_file)) { + error(_('Missing import file.')); + redirect(page_link_to('admin_import')); + } + + if (!file_exists($import_file)) { + redirect(page_link_to('admin_import')); + } + + if (isset($_REQUEST['shifttype_id']) && isset($shifttypes[$_REQUEST['shifttype_id']])) { + $shifttype_id = $_REQUEST['shifttype_id']; + } else { + error(_('Please select a shift type.')); + redirect(page_link_to('admin_import')); + } + + if (isset($_REQUEST['add_minutes_start']) && is_numeric(trim($_REQUEST['add_minutes_start']))) { + $add_minutes_start = trim($_REQUEST['add_minutes_start']); + } else { + error(_("Please enter an amount of minutes to add to a talk's begin.")); + redirect(page_link_to('admin_import')); + } + + if (isset($_REQUEST['add_minutes_end']) && is_numeric(trim($_REQUEST['add_minutes_end']))) { + $add_minutes_end = trim($_REQUEST['add_minutes_end']); + } else { + error(_("Please enter an amount of minutes to add to a talk's end.")); + redirect(page_link_to('admin_import')); + } + + list($rooms_new, $rooms_deleted) = prepare_rooms($import_file); + foreach ($rooms_new as $room) { + $result = Room_create($room, true, true); + if ($result === false) { + engelsystem_error('Unable to create room.'); + } + $rooms_import[trim($room)] = sql_id(); + } + foreach ($rooms_deleted as $room) { + sql_query("DELETE FROM `Room` WHERE `Name`='" . sql_escape($room) . "' LIMIT 1"); + } + + list($events_new, $events_updated, $events_deleted) = prepare_events( + $import_file, + $shifttype_id, + $add_minutes_start, + $add_minutes_end + ); + foreach ($events_new as $event) { + $result = Shift_create($event); + if ($result === false) { + engelsystem_error('Unable to create shift.'); + } + } + + foreach ($events_updated as $event) { + $result = Shift_update_by_psid($event); + if ($result === false) { + engelsystem_error('Unable to update shift.'); + } + } + + foreach ($events_deleted as $event) { + $result = Shift_delete_by_psid($event['PSID']); + if ($result === false) { + engelsystem_error('Unable to delete shift.'); + } + } + + engelsystem_log("Frab import done"); + + unlink($import_file); + + $html .= div('well well-sm text-center', [ + '' . _('File Upload') . glyph('ok-circle') . '' . mute(glyph('arrow-right')) . '' . _('Validation') . glyph('ok-circle') . '' . mute(glyph('arrow-right')) . '' . _('Import') . glyph('ok-circle') . '' + ]) . success(_("It's done!"), true); + break; + default: + redirect(page_link_to('admin_import')); + } + return page_with_title(admin_import_title(), [ - msg(), - $html - ]); + msg(), + $html + ]); } function prepare_rooms($file) { global $rooms_import; $data = read_xml($file); - - // Load rooms from db for compare with input - $rooms = sql_select("SELECT * FROM `Room` WHERE `FromPentabarf`='Y'"); + + // Load rooms from db for compare with input + $rooms = sql_select("SELECT * FROM `Room` WHERE `FromPentabarf`='Y'"); $rooms_db = []; $rooms_import = []; foreach ($rooms as $room) { - $rooms_db[] = (string) $room['Name']; + $rooms_db[] = (string)$room['Name']; $rooms_import[$room['Name']] = $room['RID']; } - + $events = $data->vcalendar->vevent; $rooms_pb = []; foreach ($events as $event) { - $rooms_pb[] = (string) $event->location; - if (! isset($rooms_import[trim($event->location)])) { + $rooms_pb[] = (string)$event->location; + if (!isset($rooms_import[trim($event->location)])) { $rooms_import[trim($event->location)] = trim($event->location); } } $rooms_pb = array_unique($rooms_pb); - + $rooms_new = array_diff($rooms_pb, $rooms_db); $rooms_deleted = array_diff($rooms_db, $rooms_pb); - + return [ - $rooms_new, - $rooms_deleted - ]; + $rooms_new, + $rooms_deleted + ]; } function prepare_events($file, $shifttype_id, $add_minutes_start, $add_minutes_end) { global $rooms_import; $data = read_xml($file); - + $rooms = sql_select("SELECT * FROM `Room`"); $rooms_db = []; foreach ($rooms as $room) { $rooms_db[$room['Name']] = $room['RID']; } - + $events = $data->vcalendar->vevent; $shifts_pb = []; foreach ($events as $event) { $event_pb = $event->children("http://pentabarf.org"); $event_id = trim($event_pb->{ - 'event-id' }); + 'event-id'}); $shifts_pb[$event_id] = [ - 'shifttype_id' => $shifttype_id, - 'start' => parse_date("Ymd\THis", $event->dtstart) - $add_minutes_start * 60, - 'end' => parse_date("Ymd\THis", $event->dtend) + $add_minutes_end * 60, - 'RID' => $rooms_import[trim($event->location)], - 'title' => trim($event->summary), - 'URL' => trim($event->url), - 'PSID' => $event_id - ]; + 'shifttype_id' => $shifttype_id, + 'start' => parse_date("Ymd\THis", $event->dtstart) - $add_minutes_start * 60, + 'end' => parse_date("Ymd\THis", $event->dtend) + $add_minutes_end * 60, + 'RID' => $rooms_import[trim($event->location)], + 'title' => trim($event->summary), + 'URL' => trim($event->url), + 'PSID' => $event_id + ]; } - + $shifts = sql_select("SELECT * FROM `Shifts` WHERE `PSID` IS NOT NULL ORDER BY `start`"); $shifts_db = []; foreach ($shifts as $shift) { $shifts_db[$shift['PSID']] = $shift; } - + $shifts_new = []; $shifts_updated = []; foreach ($shifts_pb as $shift) { - if (! isset($shifts_db[$shift['PSID']])) { + if (!isset($shifts_db[$shift['PSID']])) { $shifts_new[] = $shift; } else { $tmp = $shifts_db[$shift['PSID']]; @@ -344,25 +369,25 @@ function prepare_events($file, $shifttype_id, $add_minutes_start, $add_minutes_e } } } - + $shifts_deleted = []; foreach ($shifts_db as $shift) { - if (! isset($shifts_pb[$shift['PSID']])) { + if (!isset($shifts_pb[$shift['PSID']])) { $shifts_deleted[] = $shift; } } - + return [ - $shifts_new, - $shifts_updated, - $shifts_deleted - ]; + $shifts_new, + $shifts_updated, + $shifts_deleted + ]; } function read_xml($file) { global $xml_import; - if (! isset($xml_import)) { + if (!isset($xml_import)) { $xml_import = simplexml_load_file($file); } return $xml_import; @@ -372,27 +397,27 @@ function shifts_printable($shifts, $shifttypes) { global $rooms_import; $rooms = array_flip($rooms_import); - + uasort($shifts, 'shift_sort'); - + $shifts_printable = []; foreach ($shifts as $shift) { $shifts_printable[] = [ - 'day' => date("l, Y-m-d", $shift['start']), - 'start' => date("H:i", $shift['start']), - 'shifttype' => ShiftType_name_render([ - 'id' => $shift['shifttype_id'], - 'name' => $shifttypes[$shift['shifttype_id']] - ]), - 'title' => shorten($shift['title']), - 'end' => date("H:i", $shift['end']), - 'room' => $rooms[$shift['RID']] - ]; + 'day' => date("l, Y-m-d", $shift['start']), + 'start' => date("H:i", $shift['start']), + 'shifttype' => ShiftType_name_render([ + 'id' => $shift['shifttype_id'], + 'name' => $shifttypes[$shift['shifttype_id']] + ]), + 'title' => shorten($shift['title']), + 'end' => date("H:i", $shift['end']), + 'room' => $rooms[$shift['RID']] + ]; } return $shifts_printable; } function shift_sort($shift_a, $shift_b) { - return ($shift_a['start'] < $shift_b['start']) ? - 1 : 1; + return ($shift_a['start'] < $shift_b['start']) ? -1 : 1; } diff --git a/includes/pages/admin_log.php b/includes/pages/admin_log.php index d4548c07..fc07cc87 100644 --- a/includes/pages/admin_log.php +++ b/includes/pages/admin_log.php @@ -12,23 +12,23 @@ function admin_log() $filter = strip_request_item('keyword'); } $log_entries_source = LogEntries_filter($filter); - + $log_entries = []; foreach ($log_entries_source as $log_entry) { $log_entry['date'] = date("d.m.Y H:i", $log_entry['timestamp']); $log_entries[] = $log_entry; } - + return page_with_title(admin_log_title(), [ - msg(), - form([ - form_text('keyword', _("Search"), $filter), - form_submit(_("Search"), "Go") - ]), - table([ - 'date' => "Time", - 'nick' => "Angel", - 'message' => "Log Entry" - ], $log_entries) - ]); + msg(), + form([ + form_text('keyword', _("Search"), $filter), + form_submit(_("Search"), "Go") + ]), + table([ + 'date' => "Time", + 'nick' => "Angel", + 'message' => "Log Entry" + ], $log_entries) + ]); } diff --git a/includes/pages/admin_news.php b/includes/pages/admin_news.php index 46d72ddd..1a35f04a 100644 --- a/includes/pages/admin_news.php +++ b/includes/pages/admin_news.php @@ -3,65 +3,67 @@ function admin_news() { global $user; - - if (! isset($_GET["action"])) { + + if (!isset($_GET["action"])) { redirect(page_link_to("news")); } - + $html = '

    ' . _("Edit news entry") . '

    ' . msg(); if (isset($_REQUEST['id']) && preg_match("/^[0-9]{1,11}$/", $_REQUEST['id'])) { $news_id = $_REQUEST['id']; } else { return error("Incomplete call, missing News ID.", true); } - + $news = sql_select("SELECT * FROM `News` WHERE `ID`='" . sql_escape($news_id) . "' LIMIT 1"); if (empty($news)) { return error("No News found.", true); } switch ($_REQUEST["action"]) { - default: - redirect(page_link_to('news')); - case 'edit': - list($news) = $news; - - $user_source = User($news['UID']); - - $html .= form([ - form_info(_("Date"), date("Y-m-d H:i", $news['Datum'])), - form_info(_("Author"), User_Nick_render($user_source)), - form_text('eBetreff', _("Subject"), $news['Betreff']), - form_textarea('eText', _("Message"), $news['Text']), - form_checkbox('eTreffen', _("Meeting"), $news['Treffen'] == 1, 1), - form_submit('submit', _("Save")) - ], page_link_to('admin_news&action=save&id=' . $news_id)); - - $html .= ' ' . _("Delete") . ''; - break; - - case 'save': - list($news) = $news; - - sql_query("UPDATE `News` SET + default: + redirect(page_link_to('news')); + case 'edit': + list($news) = $news; + + $user_source = User($news['UID']); + + $html .= form([ + form_info(_("Date"), date("Y-m-d H:i", $news['Datum'])), + form_info(_("Author"), User_Nick_render($user_source)), + form_text('eBetreff', _("Subject"), $news['Betreff']), + form_textarea('eText', _("Message"), $news['Text']), + form_checkbox('eTreffen', _("Meeting"), $news['Treffen'] == 1, 1), + form_submit('submit', _("Save")) + ], page_link_to('admin_news&action=save&id=' . $news_id)); + + $html .= '' + . ' ' . _("Delete") + . ''; + break; + + case 'save': + list($news) = $news; + + sql_query("UPDATE `News` SET `Datum`='" . sql_escape(time()) . "', `Betreff`='" . sql_escape($_POST["eBetreff"]) . "', `Text`='" . sql_escape($_POST["eText"]) . "', `UID`='" . sql_escape($user['UID']) . "', `Treffen`='" . sql_escape($_POST["eTreffen"]) . "' WHERE `ID`='" . sql_escape($news_id) . "'"); - engelsystem_log("News updated: " . $_POST["eBetreff"]); - success(_("News entry updated.")); - redirect(page_link_to("news")); - break; - - case 'delete': - list($news) = $news; - - sql_query("DELETE FROM `News` WHERE `ID`='" . sql_escape($news_id) . "' LIMIT 1"); - engelsystem_log("News deleted: " . $news['Betreff']); - success(_("News entry deleted.")); - redirect(page_link_to("news")); - break; - } + engelsystem_log("News updated: " . $_POST["eBetreff"]); + success(_("News entry updated.")); + redirect(page_link_to("news")); + break; + + case 'delete': + list($news) = $news; + + sql_query("DELETE FROM `News` WHERE `ID`='" . sql_escape($news_id) . "' LIMIT 1"); + engelsystem_log("News deleted: " . $news['Betreff']); + success(_("News entry deleted.")); + redirect(page_link_to("news")); + break; + } return $html . '
    '; } diff --git a/includes/pages/admin_questions.php b/includes/pages/admin_questions.php index e8a2e50d..c65280d5 100644 --- a/includes/pages/admin_questions.php +++ b/includes/pages/admin_questions.php @@ -11,112 +11,129 @@ function admin_questions_title() function admin_new_questions() { global $privileges, $page; - + if ($page != "admin_questions") { if (in_array("admin_questions", $privileges)) { $new_messages = sql_num_query("SELECT * FROM `Questions` WHERE `AID` IS NULL"); - + if ($new_messages > 0) { return '' . _('There are unanswered questions!') . ''; } } } - + return null; } function admin_questions() { global $user; - - if (! isset($_REQUEST['action'])) { + + if (!isset($_REQUEST['action'])) { $unanswered_questions_table = []; $questions = sql_select("SELECT * FROM `Questions` WHERE `AID` IS NULL"); foreach ($questions as $question) { $user_source = User($question['UID']); - + $unanswered_questions_table[] = [ - 'from' => User_Nick_render($user_source), - 'question' => str_replace("\n", "
    ", $question['Question']), - 'answer' => form([ - form_textarea('answer', '', ''), - form_submit('submit', _("Save")) - ], page_link_to('admin_questions') . '&action=answer&id=' . $question['QID']), - 'actions' => button(page_link_to("admin_questions") . '&action=delete&id=' . $question['QID'], _("delete"), 'btn-xs') - ]; + 'from' => User_Nick_render($user_source), + 'question' => str_replace("\n", "
    ", $question['Question']), + 'answer' => form([ + form_textarea('answer', '', ''), + form_submit('submit', _("Save")) + ], page_link_to('admin_questions') . '&action=answer&id=' . $question['QID']), + 'actions' => button( + page_link_to("admin_questions") . '&action=delete&id=' . $question['QID'], + _("delete"), + 'btn-xs' + ) + ]; } - + $answered_questions_table = []; $questions = sql_select("SELECT * FROM `Questions` WHERE NOT `AID` IS NULL"); foreach ($questions as $question) { $user_source = User($question['UID']); $answer_user_source = User($question['AID']); $answered_questions_table[] = [ - 'from' => User_Nick_render($user_source), - 'question' => str_replace("\n", "
    ", $question['Question']), - 'answered_by' => User_Nick_render($answer_user_source), - 'answer' => str_replace("\n", "
    ", $question['Answer']), - 'actions' => button(page_link_to("admin_questions") . '&action=delete&id=' . $question['QID'], _("delete"), 'btn-xs') - ]; + 'from' => User_Nick_render($user_source), + 'question' => str_replace("\n", "
    ", $question['Question']), + 'answered_by' => User_Nick_render($answer_user_source), + 'answer' => str_replace("\n", "
    ", $question['Answer']), + 'actions' => button( + page_link_to("admin_questions") . '&action=delete&id=' . $question['QID'], + _("delete"), + 'btn-xs' + ) + ]; } - + return page_with_title(admin_questions_title(), [ - '

    ' . _("Unanswered questions") . '

    ', - table([ - 'from' => _("From"), - 'question' => _("Question"), - 'answer' => _("Answer"), - 'actions' => '' - ], $unanswered_questions_table), - '

    ' . _("Answered questions") . '

    ', - table([ - 'from' => _("From"), - 'question' => _("Question"), - 'answered_by' => _("Answered by"), - 'answer' => _("Answer"), - 'actions' => '' - ], $answered_questions_table) - ]); + '

    ' . _("Unanswered questions") . '

    ', + table([ + 'from' => _("From"), + 'question' => _("Question"), + 'answer' => _("Answer"), + 'actions' => '' + ], $unanswered_questions_table), + '

    ' . _("Answered questions") . '

    ', + table([ + 'from' => _("From"), + 'question' => _("Question"), + 'answered_by' => _("Answered by"), + 'answer' => _("Answer"), + 'actions' => '' + ], $answered_questions_table) + ]); } else { switch ($_REQUEST['action']) { - case 'answer': - if (isset($_REQUEST['id']) && preg_match("/^[0-9]{1,11}$/", $_REQUEST['id'])) { - $question_id = $_REQUEST['id']; - } else { - return error("Incomplete call, missing Question ID.", true); - } - - $question = sql_select("SELECT * FROM `Questions` WHERE `QID`='" . sql_escape($question_id) . "' LIMIT 1"); - if (count($question) > 0 && $question[0]['AID'] == null) { - $answer = trim(preg_replace("/([^\p{L}\p{P}\p{Z}\p{N}\n]{1,})/ui", '', strip_tags($_REQUEST['answer']))); - - if ($answer != "") { - sql_query("UPDATE `Questions` SET `AID`='" . sql_escape($user['UID']) . "', `Answer`='" . sql_escape($answer) . "' WHERE `QID`='" . sql_escape($question_id) . "' LIMIT 1"); - engelsystem_log("Question " . $question[0]['Question'] . " answered: " . $answer); - redirect(page_link_to("admin_questions")); - } else { - return error("Enter an answer!", true); - } - } else { - return error("No question found.", true); - } - break; - case 'delete': - if (isset($_REQUEST['id']) && preg_match("/^[0-9]{1,11}$/", $_REQUEST['id'])) { - $question_id = $_REQUEST['id']; - } else { - return error("Incomplete call, missing Question ID.", true); - } - - $question = sql_select("SELECT * FROM `Questions` WHERE `QID`='" . sql_escape($question_id) . "' LIMIT 1"); - if (count($question) > 0) { - sql_query("DELETE FROM `Questions` WHERE `QID`='" . sql_escape($question_id) . "' LIMIT 1"); - engelsystem_log("Question deleted: " . $question[0]['Question']); - redirect(page_link_to("admin_questions")); - } else { - return error("No question found.", true); + case 'answer': + if (isset($_REQUEST['id']) && preg_match("/^[0-9]{1,11}$/", $_REQUEST['id'])) { + $question_id = $_REQUEST['id']; + } else { + return error("Incomplete call, missing Question ID.", true); + } + + $question = sql_select("SELECT * FROM `Questions` WHERE `QID`='" . sql_escape($question_id) . "' LIMIT 1"); + if (count($question) > 0 && $question[0]['AID'] == null) { + $answer = trim( + preg_replace("/([^\p{L}\p{P}\p{Z}\p{N}\n]{1,})/ui", + '', + strip_tags($_REQUEST['answer']) + )); + + if ($answer != "") { + sql_query(" + UPDATE `Questions` + SET `AID`='" . sql_escape($user['UID']) . "', `Answer`='" . sql_escape($answer) . "' + WHERE `QID`='" . sql_escape($question_id) . "' + LIMIT 1 + "); + engelsystem_log("Question " . $question[0]['Question'] . " answered: " . $answer); + redirect(page_link_to("admin_questions")); + } else { + return error("Enter an answer!", true); + } + } else { + return error("No question found.", true); + } + break; + case 'delete': + if (isset($_REQUEST['id']) && preg_match("/^[0-9]{1,11}$/", $_REQUEST['id'])) { + $question_id = $_REQUEST['id']; + } else { + return error("Incomplete call, missing Question ID.", true); + } + + $question = sql_select("SELECT * FROM `Questions` WHERE `QID`='" . sql_escape($question_id) . "' LIMIT 1"); + if (count($question) > 0) { + sql_query("DELETE FROM `Questions` WHERE `QID`='" . sql_escape($question_id) . "' LIMIT 1"); + engelsystem_log("Question deleted: " . $question[0]['Question']); + redirect(page_link_to("admin_questions")); + } else { + return error("No question found.", true); + } + break; } - break; - } } } diff --git a/includes/pages/admin_rooms.php b/includes/pages/admin_rooms.php index 365c2f69..9a596f15 100644 --- a/includes/pages/admin_rooms.php +++ b/includes/pages/admin_rooms.php @@ -11,24 +11,24 @@ function admin_rooms() $rooms = []; foreach ($rooms_source as $room) { $rooms[] = [ - 'name' => Room_name_render($room), - 'from_pentabarf' => $room['FromPentabarf'] == 'Y' ? '✓' : '', - 'public' => $room['show'] == 'Y' ? '✓' : '', - 'actions' => table_buttons([ - button(page_link_to('admin_rooms') . '&show=edit&id=' . $room['RID'], _("edit"), 'btn-xs'), - button(page_link_to('admin_rooms') . '&show=delete&id=' . $room['RID'], _("delete"), 'btn-xs') - ]) - ]; + 'name' => Room_name_render($room), + 'from_pentabarf' => $room['FromPentabarf'] == 'Y' ? '✓' : '', + 'public' => $room['show'] == 'Y' ? '✓' : '', + 'actions' => table_buttons([ + button(page_link_to('admin_rooms') . '&show=edit&id=' . $room['RID'], _("edit"), 'btn-xs'), + button(page_link_to('admin_rooms') . '&show=delete&id=' . $room['RID'], _("delete"), 'btn-xs') + ]) + ]; } $room = null; - + if (isset($_REQUEST['show'])) { $msg = ""; $name = ""; $from_pentabarf = ""; $public = 'Y'; $number = ""; - + $angeltypes_source = sql_select("SELECT * FROM `AngelTypes` ORDER BY `name`"); $angeltypes = []; $angeltypes_count = []; @@ -36,7 +36,7 @@ function admin_rooms() $angeltypes[$angeltype['id']] = $angeltype['name']; $angeltypes_count[$angeltype['id']] = 0; } - + if (test_request_int('id')) { $room = Room($_REQUEST['id']); if ($room === false) { @@ -45,23 +45,23 @@ function admin_rooms() if ($room == null) { redirect(page_link_to('admin_rooms')); } - + $room_id = $_REQUEST['id']; $name = $room['Name']; $from_pentabarf = $room['FromPentabarf']; $public = $room['show']; $number = $room['Number']; - + $needed_angeltypes = sql_select("SELECT * FROM `NeededAngelTypes` WHERE `room_id`='" . sql_escape($room_id) . "'"); foreach ($needed_angeltypes as $needed_angeltype) { $angeltypes_count[$needed_angeltype['angel_type_id']] = $needed_angeltype['count']; } } - + if ($_REQUEST['show'] == 'edit') { if (isset($_REQUEST['submit'])) { $valid = true; - + if (isset($_REQUEST['name']) && strlen(strip_request_item('name')) > 0) { $name = strip_request_item('name'); if (isset($room) && sql_num_query("SELECT * FROM `Room` WHERE `Name`='" . sql_escape($name) . "' AND NOT `RID`=" . sql_escape($room_id)) > 0) { @@ -72,34 +72,37 @@ function admin_rooms() $valid = false; $msg .= error(_("Please enter a name."), true); } - + if (isset($_REQUEST['from_pentabarf'])) { $from_pentabarf = 'Y'; } else { $from_pentabarf = ''; } - + if (isset($_REQUEST['public'])) { $public = 'Y'; } else { $public = ''; } - + if (isset($_REQUEST['number'])) { $number = strip_request_item('number'); } else { $valid = false; } - + foreach ($angeltypes as $angeltype_id => $angeltype) { - if (isset($_REQUEST['angeltype_count_' . $angeltype_id]) && preg_match("/^[0-9]{1,4}$/", $_REQUEST['angeltype_count_' . $angeltype_id])) { + if ( + isset($_REQUEST['angeltype_count_' . $angeltype_id]) + && preg_match("/^[0-9]{1,4}$/", $_REQUEST['angeltype_count_' . $angeltype_id]) + ) { $angeltypes_count[$angeltype_id] = $_REQUEST['angeltype_count_' . $angeltype_id]; } else { $valid = false; $msg .= error(sprintf(_("Please enter needed angels for type %s.", $angeltype)), true); } } - + if ($valid) { if (isset($room_id)) { sql_query("UPDATE `Room` SET `Name`='" . sql_escape($name) . "', `FromPentabarf`='" . sql_escape($from_pentabarf) . "', `show`='" . sql_escape($public) . "', `Number`='" . sql_escape($number) . "' WHERE `RID`='" . sql_escape($room_id) . "' LIMIT 1"); @@ -111,7 +114,7 @@ function admin_rooms() } engelsystem_log("Room created: " . $name . ", pentabarf import: " . $from_pentabarf . ", public: " . $public . ", number: " . $number); } - + NeededAngelTypes_delete_by_room($room_id); $needed_angeltype_info = []; foreach ($angeltypes_count as $angeltype_id => $angeltype_count) { @@ -121,8 +124,11 @@ function admin_rooms() $needed_angeltype_info[] = $angeltype['name'] . ": " . $angeltype_count; } } - - engelsystem_log("Set needed angeltypes of room " . $name . " to: " . join(", ", $needed_angeltype_info)); + + engelsystem_log( + "Set needed angeltypes of room " . $name + . " to: " . join(", ", $needed_angeltype_info) + ); success(_("Room saved.")); redirect(page_link_to("admin_rooms")); } @@ -130,68 +136,68 @@ function admin_rooms() $angeltypes_count_form = []; foreach ($angeltypes as $angeltype_id => $angeltype) { $angeltypes_count_form[] = div('col-lg-4 col-md-6 col-xs-6', [ - form_spinner('angeltype_count_' . $angeltype_id, $angeltype, $angeltypes_count[$angeltype_id]) - ]); + form_spinner('angeltype_count_' . $angeltype_id, $angeltype, $angeltypes_count[$angeltype_id]) + ]); } - + return page_with_title(admin_rooms_title(), [ - buttons([ - button(page_link_to('admin_rooms'), _("back"), 'back') - ]), - $msg, - form([ - div('row', [ - div('col-md-6', [ - form_text('name', _("Name"), $name), - form_checkbox('from_pentabarf', _("Frab import"), $from_pentabarf), - form_checkbox('public', _("Public"), $public), - form_text('number', _("Room number"), $number) - ]), - div('col-md-6', [ - div('row', [ - div('col-md-12', [ - form_info(_("Needed angels:")) - ]), - join($angeltypes_count_form) - ]) - ]) - ]), - form_submit('submit', _("Save")) - ]) - ]); + buttons([ + button(page_link_to('admin_rooms'), _("back"), 'back') + ]), + $msg, + form([ + div('row', [ + div('col-md-6', [ + form_text('name', _("Name"), $name), + form_checkbox('from_pentabarf', _("Frab import"), $from_pentabarf), + form_checkbox('public', _("Public"), $public), + form_text('number', _("Room number"), $number) + ]), + div('col-md-6', [ + div('row', [ + div('col-md-12', [ + form_info(_("Needed angels:")) + ]), + join($angeltypes_count_form) + ]) + ]) + ]), + form_submit('submit', _("Save")) + ]) + ]); } elseif ($_REQUEST['show'] == 'delete') { if (isset($_REQUEST['ack'])) { - if (! Room_delete($room_id)) { + if (!Room_delete($room_id)) { engelsystem_error("Unable to delete room."); } - + engelsystem_log("Room deleted: " . $name); success(sprintf(_("Room %s deleted."), $name)); redirect(page_link_to('admin_rooms')); } - + return page_with_title(admin_rooms_title(), [ - buttons([ - button(page_link_to('admin_rooms'), _("back"), 'back') - ]), - sprintf(_("Do you want to delete room %s?"), $name), - buttons([ - button(page_link_to('admin_rooms') . '&show=delete&id=' . $room_id . '&ack', _("Delete"), 'delete') - ]) - ]); + buttons([ + button(page_link_to('admin_rooms'), _("back"), 'back') + ]), + sprintf(_("Do you want to delete room %s?"), $name), + buttons([ + button(page_link_to('admin_rooms') . '&show=delete&id=' . $room_id . '&ack', _("Delete"), 'delete') + ]) + ]); } } - + return page_with_title(admin_rooms_title(), [ - buttons([ - button(page_link_to('admin_rooms') . '&show=edit', _("add")) - ]), - msg(), - table([ - 'name' => _("Name"), - 'from_pentabarf' => _("Frab import"), - 'public' => _("Public"), - 'actions' => "" - ], $rooms) - ]); + buttons([ + button(page_link_to('admin_rooms') . '&show=edit', _("add")) + ]), + msg(), + table([ + 'name' => _("Name"), + 'from_pentabarf' => _("Frab import"), + 'public' => _("Public"), + 'actions' => "" + ], $rooms) + ]); } diff --git a/includes/pages/admin_shifts.php b/includes/pages/admin_shifts.php index 79c9874a..b2a67786 100644 --- a/includes/pages/admin_shifts.php +++ b/includes/pages/admin_shifts.php @@ -9,7 +9,7 @@ function admin_shifts_title() function admin_shifts() { $valid = true; - + $rid = 0; $start = parse_date("Y-m-d H:i", date("Y-m-d") . " 00:00"); $end = $start; @@ -19,23 +19,23 @@ function admin_shifts() $change_hours = []; $title = ""; $shifttype_id = null; - - // Locations laden (auch unsichtbare - fuer Erzengel ist das ok) - $rooms = sql_select("SELECT * FROM `Room` ORDER BY `Name`"); + + // Locations laden (auch unsichtbare - fuer Erzengel ist das ok) + $rooms = sql_select("SELECT * FROM `Room` ORDER BY `Name`"); $room_array = []; foreach ($rooms as $room) { $room_array[$room['RID']] = $room['Name']; } - - // Engeltypen laden - $types = sql_select("SELECT * FROM `AngelTypes` ORDER BY `name`"); + + // Engeltypen laden + $types = sql_select("SELECT * FROM `AngelTypes` ORDER BY `name`"); $needed_angel_types = []; foreach ($types as $type) { $needed_angel_types[$type['id']] = 0; } - - // Load shift types - $shifttypes_source = ShiftTypes(); + + // Load shift types + $shifttypes_source = ShiftTypes(); if ($shifttypes_source === false) { engelsystem_error('Unable to load shift types.'); } @@ -43,7 +43,7 @@ function admin_shifts() foreach ($shifttypes_source as $shifttype) { $shifttypes[$shifttype['id']] = $shifttype['name']; } - + if (isset($_REQUEST['preview']) || isset($_REQUEST['back'])) { if (isset($_REQUEST['shifttype_id'])) { $shifttype = ShiftType($_REQUEST['shifttype_id']); @@ -60,38 +60,42 @@ function admin_shifts() $valid = false; error(_('Please select a shift type.')); } - - // 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_array[$_REQUEST['rid']])) { - $rid = $_REQUEST['rid']; - } else { - $valid = false; - $rid = $rooms[0]['RID']; - error(_('Please select a location.')); - } - + + // 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_array[$_REQUEST['rid']]) + ) { + $rid = $_REQUEST['rid']; + } else { + $valid = false; + $rid = $rooms[0]['RID']; + error(_('Please select a location.')); + } + if (isset($_REQUEST['start']) && $tmp = parse_date("Y-m-d H:i", $_REQUEST['start'])) { $start = $tmp; } else { $valid = false; error(_('Please select a start time.')); } - + if (isset($_REQUEST['end']) && $tmp = parse_date("Y-m-d H:i", $_REQUEST['end'])) { $end = $tmp; } else { $valid = false; error(_('Please select an end time.')); } - + if ($start >= $end) { $valid = false; error(_('The shifts end has to be after its start.')); } - + if (isset($_REQUEST['mode'])) { if ($_REQUEST['mode'] == 'single') { $mode = 'single'; @@ -104,7 +108,10 @@ function admin_shifts() error(_('Please enter a shift duration in minutes.')); } } elseif ($_REQUEST['mode'] == 'variable') { - if (isset($_REQUEST['change_hours']) && preg_match("/^([0-9]{2}(,|$))/", trim(str_replace(" ", "", $_REQUEST['change_hours'])))) { + if ( + isset($_REQUEST['change_hours']) + && preg_match("/^([0-9]{2}(,|$))/", trim(str_replace(" ", "", $_REQUEST['change_hours']))) + ) { $mode = 'variable'; $change_hours = array_map('trim', explode(",", $_REQUEST['change_hours'])); } else { @@ -116,14 +123,17 @@ function admin_shifts() $valid = false; error(_('Please select a mode.')); } - + if (isset($_REQUEST['angelmode'])) { if ($_REQUEST['angelmode'] == 'location') { $angelmode = 'location'; } elseif ($_REQUEST['angelmode'] == 'manually') { $angelmode = 'manually'; foreach ($types as $type) { - if (isset($_REQUEST['type_' . $type['id']]) && preg_match("/^[0-9]+$/", trim($_REQUEST['type_' . $type['id']]))) { + if ( + isset($_REQUEST['type_' . $type['id']]) + && preg_match("/^[0-9]+$/", trim($_REQUEST['type_' . $type['id']])) + ) { $needed_angel_types[$type['id']] = trim($_REQUEST['type_' . $type['id']]); } else { $valid = false; @@ -142,144 +152,152 @@ function admin_shifts() $valid = false; error(_('Please select needed angels.')); } - - // Beim Zurück-Knopf das Formular zeigen - if (isset($_REQUEST['back'])) { - $valid = false; - } - - // Alle Eingaben in Ordnung - if ($valid) { - if ($angelmode == 'location') { - $needed_angel_types = []; - $needed_angel_types_location = sql_select("SELECT * FROM `NeededAngelTypes` WHERE `room_id`='" . sql_escape($rid) . "'"); - foreach ($needed_angel_types_location as $type) { - $needed_angel_types[$type['angel_type_id']] = $type['count']; - } + + // Beim Zurück-Knopf das Formular zeigen + if (isset($_REQUEST['back'])) { + $valid = false; } - $shifts = []; - if ($mode == 'single') { - $shifts[] = [ - 'start' => $start, - 'end' => $end, - 'RID' => $rid, - 'title' => $title, - 'shifttype_id' => $shifttype_id - ]; - } elseif ($mode == 'multi') { - $shift_start = $start; - do { - $shift_end = $shift_start + $length * 60; - - if ($shift_end > $end) { - $shift_end = $end; - } - if ($shift_start >= $shift_end) { - break; + + // Alle Eingaben in Ordnung + if ($valid) { + if ($angelmode == 'location') { + $needed_angel_types = []; + $needed_angel_types_location = sql_select("SELECT * FROM `NeededAngelTypes` WHERE `room_id`='" . sql_escape($rid) . "'"); + foreach ($needed_angel_types_location as $type) { + $needed_angel_types[$type['angel_type_id']] = $type['count']; } - - $shifts[] = [ - 'start' => $shift_start, - 'end' => $shift_end, - 'RID' => $rid, - 'title' => $title, - 'shifttype_id' => $shifttype_id - ]; - - $shift_start = $shift_end; - } while ($shift_end < $end); - } elseif ($mode == 'variable') { - rsort($change_hours); - $day = parse_date("Y-m-d H:i", date("Y-m-d", $start) . " 00:00"); - $change_index = 0; - // Ersten/nächsten passenden Schichtwechsel suchen - foreach ($change_hours as $i => $change_hour) { - if ($start < $day + $change_hour * 60 * 60) { - $change_index = $i; - } elseif ($start == $day + $change_hour * 60 * 60) { - // Start trifft Schichtwechsel - $change_index = ($i + count($change_hours) - 1) % count($change_hours); - break; - } else { - break; } - } - - $shift_start = $start; - do { - $day = parse_date("Y-m-d H:i", date("Y-m-d", $shift_start) . " 00:00"); - $shift_end = $day + $change_hours[$change_index] * 60 * 60; - - if ($shift_end > $end) { - $shift_end = $end; - } - if ($shift_start >= $shift_end) { - $shift_end += 24 * 60 * 60; - } - + $shifts = []; + if ($mode == 'single') { $shifts[] = [ - 'start' => $shift_start, - 'end' => $shift_end, - 'RID' => $rid, - 'title' => $title, - 'shifttype_id' => $shifttype_id - ]; - - $shift_start = $shift_end; - $change_index = ($change_index + count($change_hours) - 1) % count($change_hours); - } while ($shift_end < $end); - } - - $shifts_table = []; - foreach ($shifts as $shift) { - $shifts_table_entry = [ - 'timeslot' => ' ' . date("Y-m-d H:i", $shift['start']) . ' - ' . date("H:i", $shift['end']) . '
    ' . Room_name_render(Room($shift['RID'])), - 'title' => ShiftType_name_render(ShiftType($shifttype_id)) . ($shift['title'] ? '
    ' . $shift['title'] : ''), - 'needed_angels' => '' - ]; - foreach ($types as $type) { - if (isset($needed_angel_types[$type['id']]) && $needed_angel_types[$type['id']] > 0) { - $shifts_table_entry['needed_angels'] .= '' . AngelType_name_render($type) . ': ' . $needed_angel_types[$type['id']] . '
    '; + 'start' => $start, + 'end' => $end, + 'RID' => $rid, + 'title' => $title, + 'shifttype_id' => $shifttype_id + ]; + } elseif ($mode == 'multi') { + $shift_start = $start; + do { + $shift_end = $shift_start + $length * 60; + + if ($shift_end > $end) { + $shift_end = $end; + } + if ($shift_start >= $shift_end) { + break; + } + + $shifts[] = [ + 'start' => $shift_start, + 'end' => $shift_end, + 'RID' => $rid, + 'title' => $title, + 'shifttype_id' => $shifttype_id + ]; + + $shift_start = $shift_end; + } while ($shift_end < $end); + } elseif ($mode == 'variable') { + rsort($change_hours); + $day = parse_date("Y-m-d H:i", date("Y-m-d", $start) . " 00:00"); + $change_index = 0; + // Ersten/nächsten passenden Schichtwechsel suchen + foreach ($change_hours as $i => $change_hour) { + if ($start < $day + $change_hour * 60 * 60) { + $change_index = $i; + } elseif ($start == $day + $change_hour * 60 * 60) { + // Start trifft Schichtwechsel + $change_index = ($i + count($change_hours) - 1) % count($change_hours); + break; + } else { + break; + } } + + $shift_start = $start; + do { + $day = parse_date("Y-m-d H:i", date("Y-m-d", $shift_start) . " 00:00"); + $shift_end = $day + $change_hours[$change_index] * 60 * 60; + + if ($shift_end > $end) { + $shift_end = $end; + } + if ($shift_start >= $shift_end) { + $shift_end += 24 * 60 * 60; + } + + $shifts[] = [ + 'start' => $shift_start, + 'end' => $shift_end, + 'RID' => $rid, + 'title' => $title, + 'shifttype_id' => $shifttype_id + ]; + + $shift_start = $shift_end; + $change_index = ($change_index + count($change_hours) - 1) % count($change_hours); + } while ($shift_end < $end); } - $shifts_table[] = $shifts_table_entry; - } - - // Fürs Anlegen zwischenspeichern: - $_SESSION['admin_shifts_shifts'] = $shifts; - $_SESSION['admin_shifts_types'] = $needed_angel_types; - - $hidden_types = ""; - foreach ($needed_angel_types as $type_id => $count) { - $hidden_types .= form_hidden('type_' . $type_id, $count); + + $shifts_table = []; + foreach ($shifts as $shift) { + $shifts_table_entry = [ + 'timeslot' => + ' ' + . date("Y-m-d H:i", $shift['start']) + . ' - ' + . date("H:i", $shift['end']) + . '
    ' + . Room_name_render(Room($shift['RID'])), + 'title' => + ShiftType_name_render(ShiftType($shifttype_id)) + . ($shift['title'] ? '
    ' . $shift['title'] : ''), + 'needed_angels' => '' + ]; + foreach ($types as $type) { + if (isset($needed_angel_types[$type['id']]) && $needed_angel_types[$type['id']] > 0) { + $shifts_table_entry['needed_angels'] .= '' . AngelType_name_render($type) . ': ' . $needed_angel_types[$type['id']] . '
    '; + } + } + $shifts_table[] = $shifts_table_entry; + } + + // Fürs Anlegen zwischenspeichern: + $_SESSION['admin_shifts_shifts'] = $shifts; + $_SESSION['admin_shifts_types'] = $needed_angel_types; + + $hidden_types = ""; + foreach ($needed_angel_types as $type_id => $count) { + $hidden_types .= form_hidden('type_' . $type_id, $count); + } + return page_with_title(_("Preview"), [ + form([ + $hidden_types, + form_hidden('shifttype_id', $shifttype_id), + form_hidden('title', $title), + form_hidden('rid', $rid), + form_hidden('start', date("Y-m-d H:i", $start)), + form_hidden('end', date("Y-m-d H:i", $end)), + form_hidden('mode', $mode), + form_hidden('length', $length), + form_hidden('change_hours', implode(', ', $change_hours)), + form_hidden('angelmode', $angelmode), + form_submit('back', _("back")), + table([ + 'timeslot' => _('Time and location'), + 'title' => _('Type and title'), + 'needed_angels' => _('Needed angels') + ], $shifts_table), + form_submit('submit', _("Save")) + ]) + ]); } - return page_with_title(_("Preview"), [ - form([ - $hidden_types, - form_hidden('shifttype_id', $shifttype_id), - form_hidden('title', $title), - form_hidden('rid', $rid), - form_hidden('start', date("Y-m-d H:i", $start)), - form_hidden('end', date("Y-m-d H:i", $end)), - form_hidden('mode', $mode), - form_hidden('length', $length), - form_hidden('change_hours', implode(', ', $change_hours)), - form_hidden('angelmode', $angelmode), - form_submit('back', _("back")), - table([ - 'timeslot' => _('Time and location'), - 'title' => _('Type and title'), - 'needed_angels' => _('Needed angels') - ], $shifts_table), - form_submit('submit', _("Save")) - ]) - ]); - } } elseif (isset($_REQUEST['submit'])) { - if (! is_array($_SESSION['admin_shifts_shifts']) || ! is_array($_SESSION['admin_shifts_types'])) { + if (!is_array($_SESSION['admin_shifts_shifts']) || !is_array($_SESSION['admin_shifts_types'])) { redirect(page_link_to('admin_shifts')); } - + foreach ($_SESSION['admin_shifts_shifts'] as $shift) { $shift['URL'] = null; $shift['PSID'] = null; @@ -287,8 +305,13 @@ function admin_shifts() if ($shift_id === false) { engelsystem_error('Unable to create shift.'); } - - engelsystem_log("Shift created: " . $shifttypes[$shift['shifttype_id']] . " with title " . $shift['title'] . " from " . date("Y-m-d H:i", $shift['start']) . " to " . date("Y-m-d H:i", $shift['end'])); + + engelsystem_log( + "Shift created: " . $shifttypes[$shift['shifttype_id']] + . " with title " . $shift['title'] + . " from " . date("Y-m-d H:i", $shift['start']) + . " to " . date("Y-m-d H:i", $shift['end']) + ); $needed_angel_types_info = []; foreach ($_SESSION['admin_shifts_types'] as $type_id => $count) { $angel_type_source = sql_select("SELECT * FROM `AngelTypes` WHERE `id`='" . sql_escape($type_id) . "' LIMIT 1"); @@ -298,7 +321,7 @@ function admin_shifts() } } } - + engelsystem_log("Shift needs following angel types: " . join(", ", $needed_angel_types_info)); success("Schichten angelegt."); redirect(page_link_to('admin_shifts')); @@ -306,42 +329,61 @@ function admin_shifts() unset($_SESSION['admin_shifts_shifts']); unset($_SESSION['admin_shifts_types']); } - - if (! isset($_REQUEST['rid'])) { + + if (!isset($_REQUEST['rid'])) { $_REQUEST['rid'] = null; } $angel_types = ""; foreach ($types as $type) { - $angel_types .= '
    ' . form_spinner('type_' . $type['id'], $type['name'], $needed_angel_types[$type['id']]) . '
    '; + $angel_types .= '
    ' . form_spinner( + 'type_' . $type['id'], + $type['name'], + $needed_angel_types[$type['id']] + ) + . '
    '; } - + return page_with_title(admin_shifts_title(), [ - msg(), - form([ - form_select('shifttype_id', _('Shifttype'), $shifttypes, $shifttype_id), - form_text('title', _("Title"), $title), - form_select('rid', _("Room"), $room_array, $_REQUEST['rid']), - div('row', [ - div('col-md-6', [ - form_text('start', _("Start"), date("Y-m-d H:i", $start)), - form_text('end', _("End"), date("Y-m-d H:i", $end)), - form_info(_("Mode"), ''), - form_radio('mode', _("Create one shift"), $mode == 'single', 'single'), - form_radio('mode', _("Create multiple shifts"), $mode == 'multi', 'multi'), - form_text('length', _("Length"), ! empty($_REQUEST['length']) ? $_REQUEST['length'] : '120'), - form_radio('mode', _("Create multiple shifts with variable length"), $mode == 'variable', 'variable'), - form_text('change_hours', _("Shift change hours"), ! empty($_REQUEST['change_hours']) ? $_REQUEST['change_hours'] : '00, 04, 08, 10, 12, 14, 16, 18, 20, 22') - ]), - div('col-md-6', [ - form_info(_("Needed angels"), ''), - form_radio('angelmode', _("Take needed angels from room settings"), $angelmode == 'location', 'location'), - form_radio('angelmode', _("The following angels are needed"), $angelmode == 'manually', 'manually'), - div('row', [ - $angel_types - ]) - ]) - ]), - form_submit('preview', _("Preview")) - ]) - ]); + msg(), + form([ + form_select('shifttype_id', _('Shifttype'), $shifttypes, $shifttype_id), + form_text('title', _("Title"), $title), + form_select('rid', _("Room"), $room_array, $_REQUEST['rid']), + div('row', [ + div('col-md-6', [ + form_text('start', _("Start"), date("Y-m-d H:i", $start)), + form_text('end', _("End"), date("Y-m-d H:i", $end)), + form_info(_("Mode"), ''), + form_radio('mode', _("Create one shift"), $mode == 'single', 'single'), + form_radio('mode', _("Create multiple shifts"), $mode == 'multi', 'multi'), + form_text('length', _("Length"), !empty($_REQUEST['length']) ? $_REQUEST['length'] : '120'), + form_radio( + 'mode', + _("Create multiple shifts with variable length"), + $mode == 'variable', + 'variable' + ), + form_text( + 'change_hours', + _("Shift change hours"), + !empty($_REQUEST['change_hours']) ? $_REQUEST['change_hours'] : '00, 04, 08, 10, 12, 14, 16, 18, 20, 22' + ) + ]), + div('col-md-6', [ + form_info(_("Needed angels"), ''), + form_radio( + 'angelmode', + _("Take needed angels from room settings"), + $angelmode == 'location', + 'location' + ), + form_radio('angelmode', _("The following angels are needed"), $angelmode == 'manually', 'manually'), + div('row', [ + $angel_types + ]) + ]) + ]), + form_submit('preview', _("Preview")) + ]) + ]); } diff --git a/includes/pages/admin_user.php b/includes/pages/admin_user.php index e84e3089..12d92720 100644 --- a/includes/pages/admin_user.php +++ b/includes/pages/admin_user.php @@ -8,23 +8,23 @@ function admin_user_title() function admin_user() { global $user, $privileges, $tshirt_sizes, $privileges; - + $html = ''; - - if (! isset($_REQUEST['id'])) { + + if (!isset($_REQUEST['id'])) { redirect(users_link()); } - + $user_id = $_REQUEST['id']; - if (! isset($_REQUEST['action'])) { + if (!isset($_REQUEST['action'])) { $user_source = User($user_id); if ($user_source == null) { error(_('This user does not exist.')); redirect(users_link()); } - + $html .= "Hallo,
    " . "hier kannst du den Eintrag ändern. Unter dem Punkt 'Gekommen' " . "wird der Engel als anwesend markiert, ein Ja bei Aktiv bedeutet, " . "dass der Engel aktiv war und damit ein Anspruch auf ein T-Shirt hat. " . "Wenn T-Shirt ein 'Ja' enthält, bedeutet dies, dass der Engel " . "bereits sein T-Shirt erhalten hat.

    \n"; - + $html .= "
    \n"; $html .= "\n"; $html .= "\n"; @@ -42,132 +42,135 @@ function admin_user() $html .= " \n"; } $html .= " \n"; - $html .= " \n"; - + $html .= " \n"; + $options = [ - '1' => _("Yes"), - '0' => _("No") - ]; - - // Gekommen? - $html .= " \n"; - - // Aktiv? - $html .= " \n"; - - // Aktiv erzwingen - if (in_array('admin_active', $privileges)) { - $html .= " \n"; - } - - // T-Shirt bekommen? - $html .= " \n"; + } + + // T-Shirt bekommen? + $html .= " \n"; - + $html .= " \n"; - + $html .= "
    email" . "
    jabber" . "
    Size" . html_select_key('size', 'eSize', $tshirt_sizes, $user_source['Size']) . "
    Size" + . html_select_key('size', 'eSize', $tshirt_sizes, $user_source['Size']) + . "
    Gekommen\n"; + '1' => _("Yes"), + '0' => _("No") + ]; + + // Gekommen? + $html .= "
    Gekommen\n"; $html .= html_options('eGekommen', $options, $user_source['Gekommen']) . "
    Aktiv\n"; + + // Aktiv? + $html .= "
    Aktiv\n"; $html .= html_options('eAktiv', $options, $user_source['Aktiv']) . "
    " . _("Force active") . "\n"; - $html .= html_options('force_active', $options, $user_source['force_active']) . "
    T-Shirt\n"; + + // Aktiv erzwingen + if (in_array('admin_active', $privileges)) { + $html .= "
    " . _("Force active") . "\n"; + $html .= html_options('force_active', $options, $user_source['force_active']) . "
    T-Shirt\n"; $html .= html_options('eTshirt', $options, $user_source['Tshirt']) . "
    Hometown" . "
    \n"; - + $html .= "\n"; $html .= "\n
    \n"; $html .= "\n"; $html .= "
    "; - + $html .= "
    "; - + $html .= form_info('', _('Please visit the angeltypes page or the users profile to manage users angeltypes.')); - + $html .= "Hier kannst Du das Passwort dieses Engels neu setzen:
    \n"; $html .= "\n"; $html .= " \n"; $html .= " \n"; - + $html .= "
    Passwort" . "
    Wiederholung" . "
    "; $html .= "\n"; $html .= "
    "; - + $html .= "
    "; - + $my_highest_group = sql_select("SELECT * FROM `UserGroups` WHERE `uid`='" . sql_escape($user['UID']) . "' ORDER BY `group_id` LIMIT 1"); if (count($my_highest_group) > 0) { $my_highest_group = $my_highest_group[0]['group_id']; } - + $his_highest_group = sql_select("SELECT * FROM `UserGroups` WHERE `uid`='" . sql_escape($user_id) . "' ORDER BY `group_id` LIMIT 1"); if (count($his_highest_group) > 0) { $his_highest_group = $his_highest_group[0]['group_id']; } - + if ($user_id != $user['UID'] && $my_highest_group <= $his_highest_group) { $html .= "Hier kannst Du die Benutzergruppen des Engels festlegen:
    \n"; $html .= ''; - + $groups = sql_select("SELECT * FROM `Groups` LEFT OUTER JOIN `UserGroups` ON (`UserGroups`.`group_id` = `Groups`.`UID` AND `UserGroups`.`uid` = '" . sql_escape($user_id) . "') WHERE `Groups`.`UID` >= '" . sql_escape($my_highest_group) . "' ORDER BY `Groups`.`Name`"); foreach ($groups as $group) { $html .= ''; } - + $html .= '
    ' . $group['Name'] . '
    '; - + $html .= "\n"; $html .= "
    "; - + $html .= "
    "; } - + $html .= buttons([ - button(user_delete_link($user_source), glyph('lock') . _("delete"), 'btn-danger') - ]); - + button(user_delete_link($user_source), glyph('lock') . _("delete"), 'btn-danger') + ]); + $html .= "
    "; } else { switch ($_REQUEST['action']) { - case 'save_groups': - if ($user_id != $user['UID']) { - $my_highest_group = sql_select("SELECT * FROM `UserGroups` WHERE `uid`='" . sql_escape($user['UID']) . "' ORDER BY `group_id`"); - $his_highest_group = sql_select("SELECT * FROM `UserGroups` WHERE `uid`='" . sql_escape($user_id) . "' ORDER BY `group_id`"); - - if (count($my_highest_group) > 0 && (count($his_highest_group) == 0 || ($my_highest_group[0]['group_id'] <= $his_highest_group[0]['group_id']))) { - $groups_source = sql_select("SELECT * FROM `Groups` LEFT OUTER JOIN `UserGroups` ON (`UserGroups`.`group_id` = `Groups`.`UID` AND `UserGroups`.`uid` = '" . sql_escape($user_id) . "') WHERE `Groups`.`UID` >= '" . sql_escape($my_highest_group[0]['group_id']) . "' ORDER BY `Groups`.`Name`"); - $groups = []; - $grouplist = []; - foreach ($groups_source as $group) { - $groups[$group['UID']] = $group; - $grouplist[] = $group['UID']; - } - - if (! is_array($_REQUEST['groups'])) { - $_REQUEST['groups'] = []; - } - - sql_query("DELETE FROM `UserGroups` WHERE `uid`='" . sql_escape($user_id) . "'"); - $user_groups_info = []; - foreach ($_REQUEST['groups'] as $group) { - if (in_array($group, $grouplist)) { - sql_query("INSERT INTO `UserGroups` SET `uid`='" . sql_escape($user_id) . "', `group_id`='" . sql_escape($group) . "'"); - $user_groups_info[] = $groups[$group]['Name']; + case 'save_groups': + if ($user_id != $user['UID']) { + $my_highest_group = sql_select("SELECT * FROM `UserGroups` WHERE `uid`='" . sql_escape($user['UID']) . "' ORDER BY `group_id`"); + $his_highest_group = sql_select("SELECT * FROM `UserGroups` WHERE `uid`='" . sql_escape($user_id) . "' ORDER BY `group_id`"); + + if (count($my_highest_group) > 0 && (count($his_highest_group) == 0 || ($my_highest_group[0]['group_id'] <= $his_highest_group[0]['group_id']))) { + $groups_source = sql_select("SELECT * FROM `Groups` LEFT OUTER JOIN `UserGroups` ON (`UserGroups`.`group_id` = `Groups`.`UID` AND `UserGroups`.`uid` = '" . sql_escape($user_id) . "') WHERE `Groups`.`UID` >= '" . sql_escape($my_highest_group[0]['group_id']) . "' ORDER BY `Groups`.`Name`"); + $groups = []; + $grouplist = []; + foreach ($groups_source as $group) { + $groups[$group['UID']] = $group; + $grouplist[] = $group['UID']; + } + + if (!is_array($_REQUEST['groups'])) { + $_REQUEST['groups'] = []; + } + + sql_query("DELETE FROM `UserGroups` WHERE `uid`='" . sql_escape($user_id) . "'"); + $user_groups_info = []; + foreach ($_REQUEST['groups'] as $group) { + if (in_array($group, $grouplist)) { + sql_query("INSERT INTO `UserGroups` SET `uid`='" . sql_escape($user_id) . "', `group_id`='" . sql_escape($group) . "'"); + $user_groups_info[] = $groups[$group]['Name']; + } + } + $user_source = User($user_id); + engelsystem_log("Set groups of " . User_Nick_render($user_source) . " to: " . join(", ", + $user_groups_info)); + $html .= success("Benutzergruppen gespeichert.", true); + } else { + $html .= error("Du kannst keine Engel mit mehr Rechten bearbeiten.", true); } + } else { + $html .= error("Du kannst Deine eigenen Rechte nicht bearbeiten.", true); } - $user_source = User($user_id); - engelsystem_log("Set groups of " . User_Nick_render($user_source) . " to: " . join(", ", $user_groups_info)); - $html .= success("Benutzergruppen gespeichert.", true); - } else { - $html .= error("Du kannst keine Engel mit mehr Rechten bearbeiten.", true); - } - } else { - $html .= error("Du kannst Deine eigenen Rechte nicht bearbeiten.", true); - } - break; - - case 'save': - $force_active = $user['force_active']; - if (in_array('admin_active', $privileges)) { - $force_active = $_REQUEST['force_active']; - } - $SQL = "UPDATE `User` SET + break; + + case 'save': + $force_active = $user['force_active']; + if (in_array('admin_active', $privileges)) { + $force_active = $_REQUEST['force_active']; + } + $SQL = "UPDATE `User` SET `Nick` = '" . sql_escape($_POST["eNick"]) . "', `Name` = '" . sql_escape($_POST["eName"]) . "', `Vorname` = '" . sql_escape($_POST["eVorname"]) . "', @@ -185,25 +188,25 @@ function admin_user() `Hometown` = '" . sql_escape($_POST["Hometown"]) . "' WHERE `UID` = '" . sql_escape($user_id) . "' LIMIT 1"; - sql_query($SQL); - engelsystem_log("Updated user: " . $_POST["eNick"] . ", " . $_POST["eSize"] . ", arrived: " . $_POST["eGekommen"] . ", active: " . $_POST["eAktiv"] . ", tshirt: " . $_POST["eTshirt"]); - $html .= success("Änderung wurde gespeichert...\n", true); - break; - - case 'change_pw': - if ($_REQUEST['new_pw'] != "" && $_REQUEST['new_pw'] == $_REQUEST['new_pw2']) { - set_password($user_id, $_REQUEST['new_pw']); - $user_source = User($user_id); - engelsystem_log("Set new password for " . User_Nick_render($user_source)); - $html .= success("Passwort neu gesetzt.", true); - } else { - $html .= error("Die Eingaben müssen übereinstimmen und dürfen nicht leer sein!", true); + sql_query($SQL); + engelsystem_log("Updated user: " . $_POST["eNick"] . ", " . $_POST["eSize"] . ", arrived: " . $_POST["eGekommen"] . ", active: " . $_POST["eAktiv"] . ", tshirt: " . $_POST["eTshirt"]); + $html .= success("Änderung wurde gespeichert...\n", true); + break; + + case 'change_pw': + if ($_REQUEST['new_pw'] != "" && $_REQUEST['new_pw'] == $_REQUEST['new_pw2']) { + set_password($user_id, $_REQUEST['new_pw']); + $user_source = User($user_id); + engelsystem_log("Set new password for " . User_Nick_render($user_source)); + $html .= success("Passwort neu gesetzt.", true); + } else { + $html .= error("Die Eingaben müssen übereinstimmen und dürfen nicht leer sein!", true); + } + break; } - break; - } } - + return page_with_title(_("Edit user"), [ - $html - ]); + $html + ]); } diff --git a/includes/pages/guest_login.php b/includes/pages/guest_login.php index 293fb891..482b7670 100644 --- a/includes/pages/guest_login.php +++ b/includes/pages/guest_login.php @@ -19,9 +19,9 @@ function logout_title() function guest_register() { global $tshirt_sizes, $enable_tshirt_size, $default_theme, $user, $min_password_length; - + $event_config = EventConfig(); - + $msg = ""; $nick = ""; $lastname = ""; @@ -40,19 +40,19 @@ function guest_register() $password_hash = ""; $selected_angel_types = []; $planned_arrival_date = null; - + $angel_types_source = AngelTypes(); $angel_types = []; foreach ($angel_types_source as $angel_type) { $angel_types[$angel_type['id']] = $angel_type['name'] . ($angel_type['restricted'] ? " (restricted)" : ""); - if (! $angel_type['restricted']) { + if (!$angel_type['restricted']) { $selected_angel_types[] = $angel_type['id']; } } - + if (isset($_REQUEST['submit'])) { $valid = true; - + if (isset($_REQUEST['nick']) && strlen(User_validate_Nick($_REQUEST['nick'])) > 1) { $nick = User_validate_Nick($_REQUEST['nick']); if (sql_num_query("SELECT * FROM `User` WHERE `Nick`='" . sql_escape($nick) . "' LIMIT 1") > 0) { @@ -61,12 +61,15 @@ function guest_register() } } else { $valid = false; - $msg .= error(sprintf(_("Your nick "%s" is too short (min. 2 characters)."), User_validate_Nick($_REQUEST['nick'])), true); + $msg .= error(sprintf( + _("Your nick "%s" is too short (min. 2 characters)."), + User_validate_Nick($_REQUEST['nick']) + ), true); } - + if (isset($_REQUEST['mail']) && strlen(strip_request_item('mail')) > 0) { $mail = strip_request_item('mail'); - if (! check_email($mail)) { + if (!check_email($mail)) { $valid = false; $msg .= error(_("E-mail address is not correct."), true); } @@ -74,23 +77,23 @@ function guest_register() $valid = false; $msg .= error(_("Please enter your e-mail."), true); } - + if (isset($_REQUEST['email_shiftinfo'])) { $email_shiftinfo = true; } - + if (isset($_REQUEST['email_by_human_allowed'])) { $email_by_human_allowed = true; } - + if (isset($_REQUEST['jabber']) && strlen(strip_request_item('jabber')) > 0) { $jabber = strip_request_item('jabber'); - if (! check_email($jabber)) { + if (!check_email($jabber)) { $valid = false; $msg .= error(_("Please check your jabber account information."), true); } } - + if ($enable_tshirt_size) { if (isset($_REQUEST['tshirt_size']) && isset($tshirt_sizes[$_REQUEST['tshirt_size']]) && $_REQUEST['tshirt_size'] != '') { $tshirt_size = $_REQUEST['tshirt_size']; @@ -99,7 +102,7 @@ function guest_register() $msg .= error(_("Please select your shirt size."), true); } } - + if (isset($_REQUEST['password']) && strlen($_REQUEST['password']) >= $min_password_length) { if ($_REQUEST['password'] != $_REQUEST['password2']) { $valid = false; @@ -107,30 +110,33 @@ function guest_register() } } else { $valid = false; - $msg .= error(sprintf(_("Your password is too short (please use at least %s characters)."), $min_password_length), true); + $msg .= error(sprintf( + _("Your password is too short (please use at least %s characters)."), + $min_password_length + ), true); } - + if (isset($_REQUEST['planned_arrival_date'])) { $tmp = parse_date("Y-m-d H:i", $_REQUEST['planned_arrival_date'] . " 00:00"); $result = User_validate_planned_arrival_date($tmp); $planned_arrival_date = $result->getValue(); - if (! $result->isValid()) { + if (!$result->isValid()) { $valid = false; error(_("Please enter your planned date of arrival. It should be after the buildup start date and before teardown end date.")); } } - + $selected_angel_types = []; foreach (array_keys($angel_types) as $angel_type_id) { if (isset($_REQUEST['angel_types_' . $angel_type_id])) { $selected_angel_types[] = $angel_type_id; } } - - // Trivia - if (isset($_REQUEST['lastname'])) { - $lastname = strip_request_item('lastname'); - } + + // Trivia + if (isset($_REQUEST['lastname'])) { + $lastname = strip_request_item('lastname'); + } if (isset($_REQUEST['prename'])) { $prename = strip_request_item('prename'); } @@ -152,7 +158,7 @@ function guest_register() if (isset($_REQUEST['comment'])) { $comment = strip_request_item_nl('comment'); } - + if ($valid) { sql_query(" INSERT INTO `User` SET @@ -176,36 +182,39 @@ function guest_register() `Sprache`='" . sql_escape($_SESSION["locale"]) . "', `arrival_date`=NULL, `planned_arrival_date`='" . sql_escape($planned_arrival_date) . "'"); - - // Assign user-group and set password - $user_id = sql_id(); + + // Assign user-group and set password + $user_id = sql_id(); sql_query("INSERT INTO `UserGroups` SET `uid`='" . sql_escape($user_id) . "', `group_id`=-2"); set_password($user_id, $_REQUEST['password']); - - // Assign angel-types - $user_angel_types_info = []; + + // Assign angel-types + $user_angel_types_info = []; foreach ($selected_angel_types as $selected_angel_type_id) { sql_query("INSERT INTO `UserAngelTypes` SET `user_id`='" . sql_escape($user_id) . "', `angeltype_id`='" . sql_escape($selected_angel_type_id) . "'"); $user_angel_types_info[] = $angel_types[$selected_angel_type_id]; } - - engelsystem_log("User " . User_Nick_render(User($user_id)) . " signed up as: " . join(", ", $user_angel_types_info)); + + engelsystem_log( + "User " . User_Nick_render(User($user_id)) + . " signed up as: " . join(", ", $user_angel_types_info) + ); success(_("Angel registration successful!")); - - // User is already logged in - that means a supporter has registered an angel. Return to register page. - if (isset($user)) { - redirect(page_link_to('register')); - } - - // If a welcome message is present, display registration success page. - if ($event_config != null && $event_config['event_welcome_msg'] != null) { - return User_registration_success_view($event_config['event_welcome_msg']); - } - + + // User is already logged in - that means a supporter has registered an angel. Return to register page. + if (isset($user)) { + redirect(page_link_to('register')); + } + + // If a welcome message is present, display registration success page. + if ($event_config != null && $event_config['event_welcome_msg'] != null) { + return User_registration_success_view($event_config['event_welcome_msg']); + } + redirect('?'); } } - + $buildup_start_date = time(); $teardown_end_date = null; if ($event_config != null) { @@ -216,79 +225,105 @@ function guest_register() $teardown_end_date = $event_config['teardown_end_date']; } } - + return page_with_title(register_title(), [ - _("By completing this form you're registering as a Chaos-Angel. This script will create you an account in the angel task scheduler."), - $msg, - msg(), - form([ - div('row', [ - div('col-md-6', [ - div('row', [ - div('col-sm-4', [ - form_text('nick', _("Nick") . ' ' . entry_required(), $nick) - ]), - div('col-sm-8', [ - form_email('mail', _("E-Mail") . ' ' . entry_required(), $mail), - form_checkbox('email_shiftinfo', _("The engelsystem is allowed to send me an email (e.g. when my shifts change)"), $email_shiftinfo), - form_checkbox('email_by_human_allowed', _("Humans are allowed to send me an email (e.g. for ticket vouchers)"), $email_by_human_allowed) - ]) - ]), - div('row', [ - div('col-sm-6', [ - form_date('planned_arrival_date', _("Planned date of arrival") . ' ' . entry_required(), $planned_arrival_date, $buildup_start_date, $teardown_end_date) - ]), - div('col-sm-6', [ - $enable_tshirt_size ? form_select('tshirt_size', _("Shirt size") . ' ' . entry_required(), $tshirt_sizes, $tshirt_size) : '' - ]) - ]), - div('row', [ - div('col-sm-6', [ - form_password('password', _("Password") . ' ' . entry_required()) - ]), - div('col-sm-6', [ - form_password('password2', _("Confirm password") . ' ' . entry_required()) - ]) - ]), - form_checkboxes('angel_types', _("What do you want to do?") . sprintf(" (%s)", page_link_to('angeltypes') . '&action=about', _("Description of job types")), $angel_types, $selected_angel_types), - form_info("", _("Restricted angel types need will be confirmed later by a supporter. You can change your selection in the options section.")) - ]), - div('col-md-6', [ - div('row', [ - div('col-sm-4', [ - form_text('dect', _("DECT"), $dect) - ]), - div('col-sm-4', [ - form_text('mobile', _("Mobile"), $mobile) - ]), - div('col-sm-4', [ - form_text('tel', _("Phone"), $tel) - ]) - ]), - form_text('jabber', _("Jabber"), $jabber), - div('row', [ - div('col-sm-6', [ - form_text('prename', _("First name"), $prename) - ]), - div('col-sm-6', [ - form_text('lastname', _("Last name"), $lastname) - ]) - ]), - div('row', [ - div('col-sm-3', [ - form_text('age', _("Age"), $age) - ]), - div('col-sm-9', [ - form_text('hometown', _("Hometown"), $hometown) - ]) - ]), - form_info(entry_required() . ' = ' . _("Entry required!")) - ]) - ]), - // form_textarea('comment', _("Did you help at former CCC events and which tasks have you performed then?"), $comment), - form_submit('submit', _("Register")) - ]) - ]); + _("By completing this form you're registering as a Chaos-Angel. This script will create you an account in the angel task scheduler."), + $msg, + msg(), + form([ + div('row', [ + div('col-md-6', [ + div('row', [ + div('col-sm-4', [ + form_text('nick', _("Nick") . ' ' . entry_required(), $nick) + ]), + div('col-sm-8', [ + form_email('mail', _("E-Mail") . ' ' . entry_required(), $mail), + form_checkbox( + 'email_shiftinfo', + _("The engelsystem is allowed to send me an email (e.g. when my shifts change)"), + $email_shiftinfo + ), + form_checkbox( + 'email_by_human_allowed', + _("Humans are allowed to send me an email (e.g. for ticket vouchers)"), + $email_by_human_allowed + ) + ]) + ]), + div('row', [ + div('col-sm-6', [ + form_date( + 'planned_arrival_date', + _("Planned date of arrival") . ' ' . entry_required(), + $planned_arrival_date, $buildup_start_date, $teardown_end_date + ) + ]), + div('col-sm-6', [ + $enable_tshirt_size ? form_select('tshirt_size', + _("Shirt size") . ' ' . entry_required(), + $tshirt_sizes, $tshirt_size) : '' + ]) + ]), + div('row', [ + div('col-sm-6', [ + form_password('password', _("Password") . ' ' . entry_required()) + ]), + div('col-sm-6', [ + form_password('password2', _("Confirm password") . ' ' . entry_required()) + ]) + ]), + form_checkboxes( + 'angel_types', + _("What do you want to do?") . sprintf( + " (%s)", + page_link_to('angeltypes') . '&action=about', + _("Description of job types") + ), + $angel_types, + $selected_angel_types + ), + form_info( + "", + _("Restricted angel types need will be confirmed later by a supporter. You can change your selection in the options section.") + ) + ]), + div('col-md-6', [ + div('row', [ + div('col-sm-4', [ + form_text('dect', _("DECT"), $dect) + ]), + div('col-sm-4', [ + form_text('mobile', _("Mobile"), $mobile) + ]), + div('col-sm-4', [ + form_text('tel', _("Phone"), $tel) + ]) + ]), + form_text('jabber', _("Jabber"), $jabber), + div('row', [ + div('col-sm-6', [ + form_text('prename', _("First name"), $prename) + ]), + div('col-sm-6', [ + form_text('lastname', _("Last name"), $lastname) + ]) + ]), + div('row', [ + div('col-sm-3', [ + form_text('age', _("Age"), $age) + ]), + div('col-sm-9', [ + form_text('hometown', _("Hometown"), $hometown) + ]) + ]), + form_info(entry_required() . ' = ' . _("Entry required!")) + ]) + ]), + // form_textarea('comment', _("Did you help at former CCC events and which tasks have you performed then?"), $comment), + form_submit('submit', _("Register")) + ]) + ]); } function entry_required() @@ -305,10 +340,10 @@ function guest_logout() function guest_login() { $nick = ""; - + unset($_SESSION['uid']); $valid = true; - + if (isset($_REQUEST['submit'])) { if (isset($_REQUEST['nick']) && strlen(User_validate_Nick($_REQUEST['nick'])) > 0) { $nick = User_validate_Nick($_REQUEST['nick']); @@ -316,7 +351,7 @@ function guest_login() if (count($login_user) > 0) { $login_user = $login_user[0]; if (isset($_REQUEST['password'])) { - if (! verify_password($_REQUEST['password'], $login_user['Passwort'], $login_user['UID'])) { + if (!verify_password($_REQUEST['password'], $login_user['Passwort'], $login_user['UID'])) { $valid = false; error(_("Your password is incorrect. Please try it again.")); } @@ -332,75 +367,75 @@ function guest_login() $valid = false; error(_("Please enter a nickname.")); } - + if ($valid) { $_SESSION['uid'] = $login_user['UID']; $_SESSION['locale'] = $login_user['Sprache']; - + redirect(page_link_to('news')); } } - + $event_config = EventConfig(); - + return page([ - div('col-md-12', [ - div('row', [ - EventConfig_countdown_page($event_config) - ]), - div('row', [ - div('col-sm-6 col-sm-offset-3 col-md-4 col-md-offset-4', [ - div('panel panel-primary first', [ - div('panel-heading', [ - ' ' . _("Login") - ]), - div('panel-body', [ - msg(), - form([ - form_text_placeholder('nick', _("Nick"), $nick), - form_password_placeholder('password', _("Password")), - form_submit('submit', _("Login")), - ! $valid ? buttons([ - button(page_link_to('user_password_recovery'), _("I forgot my password")) - ]) : '' - ]) - ]), - div('panel-footer', [ - glyph('info-sign') . _("Please note: You have to activate cookies!") - ]) - ]) - ]) - ]), - div('row', [ - div('col-sm-6 text-center', [ - heading(register_title(), 2), - get_register_hint() - ]), - div('col-sm-6 text-center', [ - heading(_("What can I do?"), 2), - '

    ' . _("Please read about the jobs you can do to help us.") . '

    ', - buttons([ - button(page_link_to('angeltypes') . '&action=about', _("Teams/Job description") . ' »') - ]) - ]) - ]) - ]) - ]); + div('col-md-12', [ + div('row', [ + EventConfig_countdown_page($event_config) + ]), + div('row', [ + div('col-sm-6 col-sm-offset-3 col-md-4 col-md-offset-4', [ + div('panel panel-primary first', [ + div('panel-heading', [ + ' ' . _("Login") + ]), + div('panel-body', [ + msg(), + form([ + form_text_placeholder('nick', _("Nick"), $nick), + form_password_placeholder('password', _("Password")), + form_submit('submit', _("Login")), + !$valid ? buttons([ + button(page_link_to('user_password_recovery'), _("I forgot my password")) + ]) : '' + ]) + ]), + div('panel-footer', [ + glyph('info-sign') . _("Please note: You have to activate cookies!") + ]) + ]) + ]) + ]), + div('row', [ + div('col-sm-6 text-center', [ + heading(register_title(), 2), + get_register_hint() + ]), + div('col-sm-6 text-center', [ + heading(_("What can I do?"), 2), + '

    ' . _("Please read about the jobs you can do to help us.") . '

    ', + buttons([ + button(page_link_to('angeltypes') . '&action=about', _("Teams/Job description") . ' »') + ]) + ]) + ]) + ]) + ]); } function get_register_hint() { global $privileges; - + if (in_array('register', $privileges)) { return join('', [ - '

    ' . _("Please sign up, if you want to help us!") . '

    ', - buttons([ - button(page_link_to('register'), register_title() . ' »') - ]) - ]); + '

    ' . _("Please sign up, if you want to help us!") . '

    ', + buttons([ + button(page_link_to('register'), register_title() . ' »') + ]) + ]); } - - //FIXME: return error(_("Registration is disabled."), true); - return error("Registration is disabled.", true); + + //FIXME: return error(_("Registration is disabled."), true); + return error("Registration is disabled.", true); } diff --git a/includes/pages/guest_stats.php b/includes/pages/guest_stats.php index 2559dd4d..1994f044 100644 --- a/includes/pages/guest_stats.php +++ b/includes/pages/guest_stats.php @@ -3,32 +3,32 @@ function guest_stats() { global $api_key; - + if (isset($_REQUEST['api_key'])) { if ($_REQUEST['api_key'] == $api_key) { $stats = []; - - list($user_count) = sql_select("SELECT count(*) as `user_count` FROM `User`"); + + list($user_count) = sql_select("SELECT count(*) AS `user_count` FROM `User`"); $stats['user_count'] = $user_count['user_count']; - - list($arrived_user_count) = sql_select("SELECT count(*) as `user_count` FROM `User` WHERE `Gekommen`=1"); + + list($arrived_user_count) = sql_select("SELECT count(*) AS `user_count` FROM `User` WHERE `Gekommen`=1"); $stats['arrived_user_count'] = $arrived_user_count['user_count']; - + $done_shifts_seconds = sql_select_single_cell("SELECT SUM(`Shifts`.`end` - `Shifts`.`start`) FROM `ShiftEntry` JOIN `Shifts` USING (`SID`) WHERE `Shifts`.`end` < UNIX_TIMESTAMP()"); $stats['done_work_hours'] = round($done_shifts_seconds / (60 * 60), 0); - + $users_in_action = sql_select("SELECT `Shifts`.`start`, `Shifts`.`end` FROM `ShiftEntry` JOIN `Shifts` ON `Shifts`.`SID`=`ShiftEntry`.`SID` WHERE UNIX_TIMESTAMP() BETWEEN `Shifts`.`start` AND `Shifts`.`end`"); $stats['users_in_action'] = count($users_in_action); - + header("Content-Type: application/json"); raw_output(json_encode($stats)); return; } raw_output(json_encode([ - 'error' => "Wrong api_key." - ])); + 'error' => "Wrong api_key." + ])); } raw_output(json_encode([ - 'error' => "Missing parameter api_key." - ])); + 'error' => "Missing parameter api_key." + ])); } diff --git a/includes/pages/user_atom.php b/includes/pages/user_atom.php index 88e8f201..ee4ddae5 100644 --- a/includes/pages/user_atom.php +++ b/includes/pages/user_atom.php @@ -4,24 +4,24 @@ function user_atom() { global $user, $DISPLAY_NEWS; - - if (! isset($_REQUEST['key']) || ! preg_match("/^[0-9a-f]{32}$/", $_REQUEST['key'])) { + + if (!isset($_REQUEST['key']) || !preg_match("/^[0-9a-f]{32}$/", $_REQUEST['key'])) { engelsystem_error("Missing key."); } $key = $_REQUEST['key']; - + $user = User_by_api_key($key); if ($user == null) { engelsystem_error("Key invalid."); } - if (! in_array('atom', privileges_for_user($user['UID']))) { + if (!in_array('atom', privileges_for_user($user['UID']))) { engelsystem_error("No privilege for atom."); } - + $news = sql_select("SELECT * FROM `News` " . (empty($_REQUEST['meetings']) ? '' : 'WHERE `Treffen` = 1 ') . "ORDER BY `ID` DESC LIMIT " . sql_escape($DISPLAY_NEWS)); - + $output = make_atom_entries_from_news($news); - + header('Content-Type: application/atom+xml; charset=utf-8'); header("Content-Length: " . strlen($output)); raw_output($output); @@ -32,7 +32,13 @@ function make_atom_entries_from_news($news_entries) $html = ' Engelsystem - ' . $_SERVER['HTTP_HOST'] . htmlspecialchars(preg_replace('#[&?]key=[a-f0-9]{32}#', '', $_SERVER['REQUEST_URI'])) . ' + ' . $_SERVER['HTTP_HOST'] + . htmlspecialchars(preg_replace( + '#[&?]key=[a-f0-9]{32}#', + '', + $_SERVER['REQUEST_URI'] + )) + . ' ' . date('Y-m-d\TH:i:sP', $news_entries[0]['Datum']) . "\n"; foreach ($news_entries as $news_entry) { $html .= make_atom_entry_from_news($news_entry); diff --git a/includes/pages/user_ical.php b/includes/pages/user_ical.php index 49546e58..05c67d51 100644 --- a/includes/pages/user_ical.php +++ b/includes/pages/user_ical.php @@ -6,30 +6,30 @@ function user_ical() { global $user; - - if (! isset($_REQUEST['key']) || ! preg_match("/^[0-9a-f]{32}$/", $_REQUEST['key'])) { + + if (!isset($_REQUEST['key']) || !preg_match("/^[0-9a-f]{32}$/", $_REQUEST['key'])) { engelsystem_error("Missing key."); } $key = $_REQUEST['key']; - + $user = User_by_api_key($key); if ($user == null) { engelsystem_error("Key invalid."); } - - if (! in_array('ical', privileges_for_user($user['UID']))) { + + if (!in_array('ical', privileges_for_user($user['UID']))) { engelsystem_error("No privilege for ical."); } - + $ical_shifts = load_ical_shifts(); - + send_ical_from_shifts($ical_shifts); } /** * Renders an ical calender from given shifts array. * - * @param array $shifts + * @param array $shifts */ function send_ical_from_shifts($shifts) { @@ -53,7 +53,8 @@ function make_ical_entry_from_shift($shift) { $output = "BEGIN:VEVENT\r\n"; $output .= "UID:" . md5($shift['start'] . $shift['end'] . $shift['name']) . "\r\n"; - $output .= "SUMMARY:" . str_replace("\n", "\\n", $shift['name']) . " (" . str_replace("\n", "\\n", $shift['title']) . ")\r\n"; + $output .= "SUMMARY:" . str_replace("\n", "\\n", $shift['name']) + . " (" . str_replace("\n", "\\n", $shift['title']) . ")\r\n"; if (isset($shift['Comment'])) { $output .= "DESCRIPTION:" . str_replace("\n", "\\n", $shift['Comment']) . "\r\n"; } diff --git a/includes/pages/user_messages.php b/includes/pages/user_messages.php index f9278828..b7ff093f 100644 --- a/includes/pages/user_messages.php +++ b/includes/pages/user_messages.php @@ -8,7 +8,7 @@ function messages_title() function user_unread_messages() { global $user; - + if (isset($user)) { $new_messages = sql_num_query("SELECT * FROM `Messages` WHERE isRead='N' AND `RUID`='" . sql_escape($user['UID']) . "'"); if ($new_messages > 0) { @@ -21,113 +21,121 @@ function user_unread_messages() function user_messages() { global $user; - - if (! isset($_REQUEST['action'])) { + + if (!isset($_REQUEST['action'])) { $users = sql_select("SELECT * FROM `User` WHERE NOT `UID`='" . sql_escape($user['UID']) . "' ORDER BY `Nick`"); - + $to_select_data = [ - "" => _("Select recipient...") - ]; - + "" => _("Select recipient...") + ]; + foreach ($users as $u) { $to_select_data[$u['UID']] = $u['Nick']; } - + $to_select = html_select_key('to', 'to', $to_select_data, ''); - + $messages = sql_select("SELECT * FROM `Messages` WHERE `SUID`='" . sql_escape($user['UID']) . "' OR `RUID`='" . sql_escape($user['UID']) . "' ORDER BY `isRead`,`Datum` DESC"); - + $messages_table = [ - [ - 'news' => '', - 'timestamp' => date("Y-m-d H:i"), - 'from' => User_Nick_render($user), - 'to' => $to_select, - 'text' => form_textarea('text', '', ''), - 'actions' => form_submit('submit', _("Save")) - ] - ]; - + [ + 'news' => '', + 'timestamp' => date("Y-m-d H:i"), + 'from' => User_Nick_render($user), + 'to' => $to_select, + 'text' => form_textarea('text', '', ''), + 'actions' => form_submit('submit', _("Save")) + ] + ]; + foreach ($messages as $message) { $sender_user_source = User($message['SUID']); $receiver_user_source = User($message['RUID']); - + $messages_table_entry = [ - 'new' => $message['isRead'] == 'N' ? '' : '', - 'timestamp' => date("Y-m-d H:i", $message['Datum']), - 'from' => User_Nick_render($sender_user_source), - 'to' => User_Nick_render($receiver_user_source), - 'text' => str_replace("\n", '
    ', $message['Text']) - ]; - + 'new' => $message['isRead'] == 'N' ? '' : '', + 'timestamp' => date("Y-m-d H:i", $message['Datum']), + 'from' => User_Nick_render($sender_user_source), + 'to' => User_Nick_render($receiver_user_source), + 'text' => str_replace("\n", '
    ', $message['Text']) + ]; + if ($message['RUID'] == $user['UID']) { if ($message['isRead'] == 'N') { - $messages_table_entry['actions'] = button(page_link_to("user_messages") . '&action=read&id=' . $message['id'], _("mark as read"), 'btn-xs'); + $messages_table_entry['actions'] = button( + page_link_to("user_messages") . '&action=read&id=' . $message['id'], + _("mark as read"), + 'btn-xs' + ); } } else { - $messages_table_entry['actions'] = button(page_link_to("user_messages") . '&action=delete&id=' . $message['id'], _("delete message"), 'btn-xs'); + $messages_table_entry['actions'] = button( + page_link_to("user_messages") . '&action=delete&id=' . $message['id'], + _("delete message"), + 'btn-xs' + ); } $messages_table[] = $messages_table_entry; } - + return page_with_title(messages_title(), [ - msg(), - sprintf(_("Hello %s, here can you leave messages for other angels"), User_Nick_render($user)), - form([ - table([ - 'new' => _("New"), - 'timestamp' => _("Date"), - 'from' => _("Transmitted"), - 'to' => _("Recipient"), - 'text' => _("Message"), - 'actions' => '' - ], $messages_table) - ], page_link_to('user_messages') . '&action=send') - ]); + msg(), + sprintf(_("Hello %s, here can you leave messages for other angels"), User_Nick_render($user)), + form([ + table([ + 'new' => _("New"), + 'timestamp' => _("Date"), + 'from' => _("Transmitted"), + 'to' => _("Recipient"), + 'text' => _("Message"), + 'actions' => '' + ], $messages_table) + ], page_link_to('user_messages') . '&action=send') + ]); } else { switch ($_REQUEST['action']) { - case "read": - if (isset($_REQUEST['id']) && preg_match("/^[0-9]{1,11}$/", $_REQUEST['id'])) { - $message_id = $_REQUEST['id']; - } else { - return error(_("Incomplete call, missing Message ID."), true); - } - - $message = sql_select("SELECT * FROM `Messages` WHERE `id`='" . sql_escape($message_id) . "' LIMIT 1"); - if (count($message) > 0 && $message[0]['RUID'] == $user['UID']) { - sql_query("UPDATE `Messages` SET `isRead`='Y' WHERE `id`='" . sql_escape($message_id) . "' LIMIT 1"); - redirect(page_link_to("user_messages")); - } else { - return error(_("No Message found."), true); - } - break; - - case "delete": - if (isset($_REQUEST['id']) && preg_match("/^[0-9]{1,11}$/", $_REQUEST['id'])) { - $message_id = $_REQUEST['id']; - } else { - return error(_("Incomplete call, missing Message ID."), true); - } - - $message = sql_select("SELECT * FROM `Messages` WHERE `id`='" . sql_escape($message_id) . "' LIMIT 1"); - if (count($message) > 0 && $message[0]['SUID'] == $user['UID']) { - sql_query("DELETE FROM `Messages` WHERE `id`='" . sql_escape($message_id) . "' LIMIT 1"); - redirect(page_link_to("user_messages")); - } else { - return error(_("No Message found."), true); - } - break; - - case "send": - if (Message_send($_REQUEST['to'], $_REQUEST['text']) === true) { - redirect(page_link_to("user_messages")); - } else { - return error(_("Transmitting was terminated with an Error."), true); + case "read": + if (isset($_REQUEST['id']) && preg_match("/^[0-9]{1,11}$/", $_REQUEST['id'])) { + $message_id = $_REQUEST['id']; + } else { + return error(_("Incomplete call, missing Message ID."), true); + } + + $message = sql_select("SELECT * FROM `Messages` WHERE `id`='" . sql_escape($message_id) . "' LIMIT 1"); + if (count($message) > 0 && $message[0]['RUID'] == $user['UID']) { + sql_query("UPDATE `Messages` SET `isRead`='Y' WHERE `id`='" . sql_escape($message_id) . "' LIMIT 1"); + redirect(page_link_to("user_messages")); + } else { + return error(_("No Message found."), true); + } + break; + + case "delete": + if (isset($_REQUEST['id']) && preg_match("/^[0-9]{1,11}$/", $_REQUEST['id'])) { + $message_id = $_REQUEST['id']; + } else { + return error(_("Incomplete call, missing Message ID."), true); + } + + $message = sql_select("SELECT * FROM `Messages` WHERE `id`='" . sql_escape($message_id) . "' LIMIT 1"); + if (count($message) > 0 && $message[0]['SUID'] == $user['UID']) { + sql_query("DELETE FROM `Messages` WHERE `id`='" . sql_escape($message_id) . "' LIMIT 1"); + redirect(page_link_to("user_messages")); + } else { + return error(_("No Message found."), true); + } + break; + + case "send": + if (Message_send($_REQUEST['to'], $_REQUEST['text']) === true) { + redirect(page_link_to("user_messages")); + } else { + return error(_("Transmitting was terminated with an Error."), true); + } + break; + + default: + return error(_("Wrong action."), true); } - break; - - default: - return error(_("Wrong action."), true); - } } } diff --git a/includes/pages/user_myshifts.php b/includes/pages/user_myshifts.php index fbfe3f33..8c2d9442 100644 --- a/includes/pages/user_myshifts.php +++ b/includes/pages/user_myshifts.php @@ -10,15 +10,20 @@ function user_myshifts() { global $LETZTES_AUSTRAGEN; global $user, $privileges; - - if (isset($_REQUEST['id']) && in_array("user_shifts_admin", $privileges) && preg_match("/^[0-9]{1,}$/", $_REQUEST['id']) && sql_num_query("SELECT * FROM `User` WHERE `UID`='" . sql_escape($_REQUEST['id']) . "'") > 0) { + + if ( + isset($_REQUEST['id']) + && in_array("user_shifts_admin", $privileges) + && preg_match("/^[0-9]{1,}$/", $_REQUEST['id']) + && sql_num_query("SELECT * FROM `User` WHERE `UID`='" . sql_escape($_REQUEST['id']) . "'") > 0 + ) { $user_id = $_REQUEST['id']; } else { $user_id = $user['UID']; } - + list($shifts_user) = sql_select("SELECT * FROM `User` WHERE `UID`='" . sql_escape($user_id) . "' LIMIT 1"); - + if (isset($_REQUEST['reset'])) { if ($_REQUEST['reset'] == "ack") { User_reset_api_key($user); @@ -26,9 +31,12 @@ function user_myshifts() redirect(page_link_to('users') . '&action=view&user_id=' . $shifts_user['UID']); } return page_with_title(_("Reset API key"), [ - error(_("If you reset the key, the url to your iCal- and JSON-export and your atom feed changes! You have to update it in every application using one of these exports."), true), - button(page_link_to('user_myshifts') . '&reset=ack', _("Continue"), 'btn-danger') - ]); + error( + _("If you reset the key, the url to your iCal- and JSON-export and your atom feed changes! You have to update it in every application using one of these exports."), + true + ), + button(page_link_to('user_myshifts') . '&reset=ack', _("Continue"), 'btn-danger') + ]); } elseif (isset($_REQUEST['edit']) && preg_match("/^[0-9]*$/", $_REQUEST['edit'])) { $user_id = $_REQUEST['edit']; $shift = sql_select("SELECT @@ -39,7 +47,7 @@ function user_myshifts() `ShiftTypes`.`name`, `Shifts`.*, `Room`.`Name`, - `AngelTypes`.`name` as `angel_type` + `AngelTypes`.`name` AS `angel_type` FROM `ShiftEntry` JOIN `AngelTypes` ON (`ShiftEntry`.`TID` = `AngelTypes`.`id`) JOIN `Shifts` ON (`ShiftEntry`.`SID` = `Shifts`.`SID`) @@ -51,7 +59,7 @@ function user_myshifts() $shift = $shift[0]; $freeloaded = $shift['freeloaded']; $freeload_comment = $shift['freeload_comment']; - + if (isset($_REQUEST['submit'])) { $valid = true; if (in_array("user_shifts_admin", $privileges)) { @@ -62,28 +70,44 @@ function user_myshifts() error(_("Please enter a freeload comment!")); } } - + $comment = strip_request_item_nl('comment'); $user_source = User($shift['UID']); - + if ($valid) { $result = ShiftEntry_update([ - 'id' => $user_id, - 'Comment' => $comment, - 'freeloaded' => $freeloaded, - 'freeload_comment' => $freeload_comment - ]); + 'id' => $user_id, + 'Comment' => $comment, + 'freeloaded' => $freeloaded, + 'freeload_comment' => $freeload_comment + ]); if ($result === false) { engelsystem_error('Unable to update shift entry.'); } - - engelsystem_log("Updated " . User_Nick_render($user_source) . "'s shift " . $shift['name'] . " from " . date("Y-m-d H:i", $shift['start']) . " to " . date("Y-m-d H:i", $shift['end']) . " with comment " . $comment . ". Freeloaded: " . ($freeloaded ? "YES Comment: " . $freeload_comment : "NO")); + + engelsystem_log( + "Updated " . User_Nick_render($user_source) . "'s shift " . $shift['name'] + . " from " . date("Y-m-d H:i", $shift['start']) + . " to " . date("Y-m-d H:i", $shift['end']) + . " with comment " . $comment + . ". Freeloaded: " . ($freeloaded ? "YES Comment: " . $freeload_comment : "NO") + ); success(_("Shift saved.")); redirect(page_link_to('users') . '&action=view&user_id=' . $shifts_user['UID']); } } - - return ShiftEntry_edit_view(User_Nick_render($shifts_user), date("Y-m-d H:i", $shift['start']) . ', ' . shift_length($shift), $shift['Name'], $shift['name'], $shift['angel_type'], $shift['Comment'], $shift['freeloaded'], $shift['freeload_comment'], in_array("user_shifts_admin", $privileges)); + + return ShiftEntry_edit_view( + User_Nick_render($shifts_user), + date("Y-m-d H:i", $shift['start']) . ', ' . shift_length($shift), + $shift['Name'], + $shift['name'], + $shift['angel_type'], + $shift['Comment'], + $shift['freeloaded'], + $shift['freeload_comment'], + in_array("user_shifts_admin", $privileges) + ); } else { redirect(page_link_to('user_myshifts')); } @@ -104,8 +128,14 @@ function user_myshifts() $room = Room($shift['RID']); $angeltype = AngelType($shift['TID']); $shifttype = ShiftType($shift['shifttype_id']); - - engelsystem_log("Deleted own shift: " . $shifttype['name'] . " at " . $room['Name'] . " from " . date("Y-m-d H:i", $shift['start']) . " to " . date("Y-m-d H:i", $shift['end']) . " as " . $angeltype['name']); + + engelsystem_log( + "Deleted own shift: " . $shifttype['name'] + . " at " . $room['Name'] + . " from " . date("Y-m-d H:i", $shift['start']) + . " to " . date("Y-m-d H:i", $shift['end']) + . " as " . $angeltype['name'] + ); success(_("Shift canceled.")); } else { error(_("It's too late to sign yourself off the shift. If neccessary, ask the dispatcher to do so.")); @@ -114,6 +144,6 @@ function user_myshifts() redirect(user_link($shifts_user)); } } - + redirect(page_link_to('users') . '&action=view&user_id=' . $shifts_user['UID']); } diff --git a/includes/pages/user_news.php b/includes/pages/user_news.php index a26b4d8d..31f38eaa 100644 --- a/includes/pages/user_news.php +++ b/includes/pages/user_news.php @@ -18,26 +18,26 @@ function meetings_title() function user_meetings() { global $DISPLAY_NEWS; - + $html = '

    ' . meetings_title() . '

    ' . msg(); - + if (isset($_REQUEST['page']) && preg_match("/^[0-9]{1,}$/", $_REQUEST['page'])) { $page = $_REQUEST['page']; } else { $page = 0; } - + $news = sql_select("SELECT * FROM `News` WHERE `Treffen`=1 ORDER BY `Datum` DESC LIMIT " . sql_escape($page * $DISPLAY_NEWS) . ", " . sql_escape($DISPLAY_NEWS)); foreach ($news as $entry) { $html .= display_news($entry); } - + $dis_rows = ceil(sql_num_query("SELECT * FROM `News`") / $DISPLAY_NEWS); $html .= '
    ' . '
      '; - for ($i = 0; $i < $dis_rows; $i ++) { + for ($i = 0; $i < $dis_rows; $i++) { if (isset($_REQUEST['page']) && $i == $_REQUEST['page']) { $html .= '
    • '; - } elseif (! isset($_REQUEST['page']) && $i == 0) { + } elseif (!isset($_REQUEST['page']) && $i == 0) { $html .= '
    • '; } else { $html .= '
    • '; @@ -45,29 +45,31 @@ function user_meetings() $html .= '' . ($i + 1) . '
    • '; } $html .= '
    '; - + return $html; } function display_news($news) { global $privileges, $page; - + $html = ''; $html .= '
    '; $html .= '
    '; $html .= '

    ' . ($news['Treffen'] == 1 ? '[Meeting] ' : '') . ReplaceSmilies($news['Betreff']) . '

    '; $html .= '
    '; $html .= '
    ' . ReplaceSmilies(nl2br($news['Text'])) . '
    '; - + $html .= ''; return $html; } +/** + * @return string + */ function user_news_comments() { global $user; @@ -93,7 +123,15 @@ function user_news_comments() list($news) = sql_select("SELECT * FROM `News` WHERE `ID`='" . sql_escape($nid) . "' LIMIT 1"); if (isset($_REQUEST["text"])) { $text = preg_replace("/([^\p{L}\p{P}\p{Z}\p{N}\n]{1,})/ui", '', strip_tags($_REQUEST['text'])); - sql_query("INSERT INTO `NewsComments` (`Refid`, `Datum`, `Text`, `UID`) VALUES ('" . sql_escape($nid) . "', '" . date("Y-m-d H:i:s") . "', '" . sql_escape($text) . "', '" . sql_escape($user["UID"]) . "')"); + sql_query(" + INSERT INTO `NewsComments` (`Refid`, `Datum`, `Text`, `UID`) + VALUES ( + '" . sql_escape($nid) . "', + '" . date("Y-m-d H:i:s") . "', + '" . sql_escape($text) . "', + '" . sql_escape($user["UID"]) . "' + ) + "); engelsystem_log("Created news_comment: " . $text); $html .= success(_("Entry saved."), true); } @@ -125,9 +163,12 @@ function user_news_comments() return $html . '
    '; } +/** + * @return string + */ function user_news() { - global $DISPLAY_NEWS, $privileges, $user; + global $display_news, $privileges, $user; $html = '

    ' . news_title() . '

    ' . msg(); @@ -135,7 +176,16 @@ function user_news() if (!isset($_POST["treffen"]) || !in_array("admin_news", $privileges)) { $_POST["treffen"] = 0; } - sql_query("INSERT INTO `News` (`Datum`, `Betreff`, `Text`, `UID`, `Treffen`) " . "VALUES ('" . sql_escape(time()) . "', '" . sql_escape($_POST["betreff"]) . "', '" . sql_escape($_POST["text"]) . "', '" . sql_escape($user['UID']) . "', '" . sql_escape($_POST["treffen"]) . "');"); + sql_query(" + INSERT INTO `News` (`Datum`, `Betreff`, `Text`, `UID`, `Treffen`) + VALUES ( + '" . sql_escape(time()) . "', + '" . sql_escape($_POST["betreff"]) . "', + '" . sql_escape($_POST["text"]) . "', + '" . sql_escape($user['UID']) . "', + '" . sql_escape($_POST["treffen"]) . "' + ) + "); engelsystem_log("Created news: " . $_POST["betreff"] . ", treffen: " . $_POST["treffen"]); success(_("Entry saved.")); redirect(page_link_to('news')); @@ -147,12 +197,17 @@ function user_news() $page = 0; } - $news = sql_select("SELECT * FROM `News` ORDER BY `Datum` DESC LIMIT " . sql_escape($page * $DISPLAY_NEWS) . ", " . sql_escape($DISPLAY_NEWS)); + $news = sql_select(" + SELECT * + FROM `News` + ORDER BY `Datum` + DESC LIMIT " . sql_escape($page * $display_news) . ", " . sql_escape($display_news) + ); foreach ($news as $entry) { $html .= display_news($entry); } - $dis_rows = ceil(sql_num_query("SELECT * FROM `News`") / $DISPLAY_NEWS); + $dis_rows = ceil(sql_num_query("SELECT * FROM `News`") / $display_news); $html .= '
    ' . '
      '; for ($i = 0; $i < $dis_rows; $i++) { if (isset($_REQUEST['page']) && $i == $_REQUEST['page']) { diff --git a/includes/pages/user_questions.php b/includes/pages/user_questions.php index d1a90292..fa66e8db 100644 --- a/includes/pages/user_questions.php +++ b/includes/pages/user_questions.php @@ -1,10 +1,16 @@ $themes - * List of available themes + * @param array $user_source The user + * @param array $themes List of available themes + * @return mixed */ function user_settings_theme($user_source, $themes) { @@ -140,10 +143,9 @@ function user_settings_theme($user_source, $themes) /** * Change use locale * - * @param User $user_source - * The user - * @param array $locales - * List of available locales + * @param array $user_source The user + * @param array $locales List of available locales + * @return array */ function user_settings_locale($user_source, $locales) { @@ -168,6 +170,8 @@ function user_settings_locale($user_source, $locales) /** * Main user settings page/controller + * + * @return string */ function user_settings() { diff --git a/includes/pages/user_shifts.php b/includes/pages/user_shifts.php index e325989c..405b36ab 100644 --- a/includes/pages/user_shifts.php +++ b/includes/pages/user_shifts.php @@ -1,6 +1,9 @@ '1' . _("The tasks shown here are influenced by the angeltypes you joined already!") - . " " + . ' ' . _("Description of the jobs.") - . "", + . '', 'shifts_table' => msg() . $shiftCalendarRenderer->render(), 'ical_text' => '

      ' . _("iCal export") . '

      ' . sprintf( _("Export of shown shifts. iCal format or JSON format available (please keep secret, otherwise reset the api key)."), @@ -213,6 +230,10 @@ function view_user_shifts() ]); } +/** + * @param array $array + * @return array + */ function get_ids_from_array($array) { return $array["id"]; @@ -227,9 +248,9 @@ function make_select($items, $selected, $name, $title = null) foreach ($items as $i) { $html_items[] = '

      ' - . '' + . ' > ' . $i['name'] . '' . (!isset($i['enabled']) || $i['enabled'] ? '' : glyph("lock")) . '

      '; } diff --git a/includes/sys_auth.php b/includes/sys_auth.php index f3aafc98..734afd57 100644 --- a/includes/sys_auth.php +++ b/includes/sys_auth.php @@ -31,6 +31,9 @@ function load_auth() /** * generate a salt (random string) of arbitrary length suitable for the use with crypt() + * + * @param int $length + * @return string */ function generate_salt($length = 16) { @@ -44,6 +47,10 @@ function generate_salt($length = 16) /** * set the password of a user + * + * @param int $uid + * @param string $password + * @return mysqli_result */ function set_password($uid, $password) { @@ -64,8 +71,13 @@ function set_password($uid, $password) /** * verify a password given a precomputed salt. * if $uid is given and $salt is an old-style salt (plain md5), we convert it automatically + * + * @param string $password + * @param string $salt + * @param int $uid + * @return bool */ -function verify_password($password, $salt, $uid = false) +function verify_password($password, $salt, $uid = null) { global $crypt_alg; $correct = false; @@ -77,7 +89,7 @@ function verify_password($password, $salt, $uid = false) $correct = md5($password) == $salt; } - if ($correct && substr($salt, 0, strlen($crypt_alg)) != $crypt_alg && $uid) { + if ($correct && substr($salt, 0, strlen($crypt_alg)) != $crypt_alg && intval($uid)) { // this password is stored in another format than we want it to be. // let's update it! // we duplicate the query from the above set_password() function to have the extra safety of checking the old hash @@ -92,6 +104,10 @@ function verify_password($password, $salt, $uid = false) return $correct; } +/** + * @param int $user_id + * @return array + */ function privileges_for_user($user_id) { $privileges = []; @@ -109,6 +125,10 @@ function privileges_for_user($user_id) return $privileges; } +/** + * @param int $group_id + * @return array + */ function privileges_for_group($group_id) { $privileges = []; diff --git a/includes/sys_form.php b/includes/sys_form.php index dfd43067..41fcd763 100644 --- a/includes/sys_form.php +++ b/includes/sys_form.php @@ -4,10 +4,8 @@ /** * Renders a hidden input * - * @param string $name - * Name of the input - * @param string $value - * The value + * @param string $name Name of the input + * @param string $value The value * @return string rendered html */ function form_hidden($name, $value) @@ -17,6 +15,11 @@ function form_hidden($name, $value) /** * Rendert ein Zahlenfeld mit Buttons zum verstellen + * + * @param string $name + * @param string $label + * @param string $value + * @return string */ function form_spinner($name, $label, $value) { @@ -33,11 +36,12 @@ function form_spinner($name, $label, $value)
    '); @@ -46,15 +50,12 @@ function form_spinner($name, $label, $value) /** * Render a bootstrap datepicker * - * @param string $name - * Name of the parameter - * @param string $label - * Label - * @param int $value - * Unix Timestamp - * @param int $min_date - * Earliest possible date - * @return HTML + * @param string $name Name of the parameter + * @param string $label Label + * @param int $value Unix Timestamp + * @param string $start_date Earliest possible date + * @param string $end_date + * @return string HTML */ function form_date($name, $label, $value, $start_date = '', $end_date = '') { @@ -83,14 +84,11 @@ function form_date($name, $label, $value, $start_date = '', $end_date = '') /** * Rendert eine Liste von Checkboxen für ein Formular * - * @param - * name Die Namen der Checkboxen werden aus name_key gebildet - * @param - * label Die Beschriftung der Liste - * @param - * items Array mit den einzelnen Checkboxen - * @param - * selected Array mit den Keys, die ausgewählt sind + * @param string $name Die Namen der Checkboxen werden aus name_key gebildet + * @param string $label Die Beschriftung der Liste + * @param array $items Array mit den einzelnen Checkboxen + * @param array $selected Array mit den Keys, die ausgewählt sind + * @return string */ function form_checkboxes($name, $label, $items, $selected) { @@ -104,17 +102,13 @@ function form_checkboxes($name, $label, $items, $selected) /** * Rendert eine Tabelle von Checkboxen für ein Formular * - * @param - * names Assoziatives Array mit Namen der Checkboxen als Keys und Überschriften als Values - * @param - * label Die Beschriftung der gesamten Tabelle - * @param - * items Array mit den Beschriftungen der Zeilen - * @param - * selected Mehrdimensionales Array, wobei $selected[foo] ein Array der in der Datenreihe foo markierten - * Checkboxen ist - * @param - * disabled Wie selected, nur dass die entsprechenden Checkboxen deaktiviert statt markiert sind + * @param string[] $names Assoziatives Array mit Namen der Checkboxen als Keys und Überschriften als Values + * @param string $label Die Beschriftung der gesamten Tabelle + * @param string[] $items Array mit den Beschriftungen der Zeilen + * @param array[] $selected Mehrdimensionales Array, wobei $selected[foo] ein Array der in der Datenreihe foo + * markierten Checkboxen ist + * @param array $disabled Wie selected, nur dass die entsprechenden Checkboxen deaktiviert statt markiert sind + * @return string */ function form_multi_checkboxes($names, $label, $items, $selected, $disabled = []) { @@ -125,13 +119,16 @@ function form_multi_checkboxes($names, $label, $items, $selected, $disabled = [] $html .= ""; foreach ($items as $key => $item) { $html .= ""; + $dom_id = ''; foreach ($names as $name => $title) { $dom_id = $name . '_' . $key; $sel = array_search($key, $selected[$name]) !== false ? ' checked="checked"' : ""; if (!empty($disabled) && !empty($disabled[$name]) && array_search($key, $disabled[$name]) !== false) { $sel .= ' disabled="disabled"'; } - $html .= ''; + $html .= '' + . '' + . ''; } $html .= ''; } @@ -141,22 +138,38 @@ function form_multi_checkboxes($names, $label, $items, $selected, $disabled = [] /** * Rendert eine Checkbox + * + * @param string $name + * @param string $label + * @param string $selected + * @param string $value + * @return string */ function form_checkbox($name, $label, $selected, $value = 'checked') { - return '
    '; + return '
    '; } /** * Rendert einen Radio + * + * @param string $name + * @param string $label + * @param string $selected + * @param string $value + * @return string */ function form_radio($name, $label, $selected, $value) { - return '
    '; + return '
    '; } /** * Rendert einen Infotext in das Formular + * + * @param string $label + * @param string $text + * @return string */ function form_info($label, $text = "") { @@ -171,6 +184,10 @@ function form_info($label, $text = "") /** * Rendert den Absenden-Button eines Formulars + * + * @param string $name + * @param string $label + * @return string */ function form_submit($name, $label) { @@ -182,6 +199,12 @@ function form_submit($name, $label) /** * Rendert ein Formular-Textfeld + * + * @param string $name + * @param string $label + * @param string $value + * @param bool $disabled + * @return string */ function form_text($name, $label, $value, $disabled = false) { @@ -196,14 +219,11 @@ function form_text($name, $label, $value, $disabled = false) /** * Renders a text input with placeholder instead of label. * - * @param String $name - * Input name - * @param String $placeholder - * Placeholder - * @param String $value - * The value - * @param Boolean $disabled - * Is the field enabled? + * @param String $name Input name + * @param String $placeholder Placeholder + * @param String $value The value + * @param Boolean $disabled Is the field enabled? + * @return string */ function form_text_placeholder($name, $placeholder, $value, $disabled = false) { @@ -214,6 +234,12 @@ function form_text_placeholder($name, $placeholder, $value, $disabled = false) /** * Rendert ein Formular-Emailfeld + * + * @param string $name + * @param string $label + * @param string $value + * @param bool $disabled + * @return string */ function form_email($name, $label, $value, $disabled = false) { @@ -227,6 +253,10 @@ function form_email($name, $label, $value, $disabled = false) /** * Rendert ein Formular-Dateifeld + * + * @param string $name + * @param string $label + * @return string */ function form_file($name, $label) { @@ -235,6 +265,11 @@ function form_file($name, $label) /** * Rendert ein Formular-Passwortfeld + * + * @param string $name + * @param string $label + * @param bool $disabled + * @return string */ function form_password($name, $label, $disabled = false) { @@ -248,6 +283,11 @@ function form_password($name, $label, $disabled = false) /** * Renders a password input with placeholder instead of label. + * + * @param string $name + * @param string $placeholder + * @param bool $disabled + * @return string */ function form_password_placeholder($name, $placeholder, $disabled = false) { @@ -261,6 +301,12 @@ function form_password_placeholder($name, $placeholder, $disabled = false) /** * Rendert ein Formular-Textfeld + * + * @param string $name + * @param string $label + * @param string $value + * @param bool $disabled + * @return string */ function form_textarea($name, $label, $value, $disabled = false) { @@ -274,6 +320,12 @@ function form_textarea($name, $label, $value, $disabled = false) /** * Rendert ein Formular-Auswahlfeld + * + * @param string $name + * @param string $label + * @param string[] $values + * @param string $selected + * @return string */ function form_select($name, $label, $values, $selected) { @@ -282,6 +334,11 @@ function form_select($name, $label, $values, $selected) /** * Rendert ein Formular-Element + * + * @param string $label + * @param string $input + * @param string $for + * @return string */ function form_element($label, $input, $for = "") { @@ -294,12 +351,22 @@ function form_element($label, $input, $for = "") /** * Rendert ein Formular + * + * @param string[] $elements + * @param string $action + * @return string */ function form($elements, $action = "") { return '
    ' . join($elements) . '
    '; } +/** + * @param string $name + * @param String[] $options + * @param string $selected + * @return string + */ function html_options($name, $options, $selected = "") { $html = ""; @@ -310,6 +377,13 @@ function html_options($name, $options, $selected = "") return $html; } +/** + * @param string $dom_id + * @param string $name + * @param string[] $rows + * @param string $selected + * @return string + */ function html_select_key($dom_id, $name, $rows, $selected) { $html = ' %s %s', - $priv['id'], - ($priv['group_id'] != '' ? 'checked="checked"' : ''), - $priv['name'], - $priv['desc'] + $privilege['id'], + ($privilege['group_id'] != '' ? 'checked="checked"' : ''), + $privilege['name'], + $privilege['desc'] ); } @@ -103,20 +105,27 @@ function admin_groups() return error('Incomplete call, missing Groups ID.', true); } - $group = sql_select("SELECT * FROM `Groups` WHERE `UID`='" . sql_escape($group_id) . "' LIMIT 1"); + $group = DB::select('SELECT * FROM `Groups` WHERE `UID`=? LIMIT 1', [$group_id]); if (!is_array($_REQUEST['privileges'])) { $_REQUEST['privileges'] = []; } - if (count($group) > 0) { - list($group) = $group; - sql_query("DELETE FROM `GroupPrivileges` WHERE `group_id`='" . sql_escape($group_id) . "'"); + if (!empty($group)) { + $group = array_shift($group); + DB::delete('DELETE FROM `GroupPrivileges` WHERE `group_id`=?', [$group_id]); $privilege_names = []; - foreach ($_REQUEST['privileges'] as $priv) { - if (preg_match("/^[0-9]{1,}$/", $priv)) { - $group_privileges_source = sql_select("SELECT * FROM `Privileges` WHERE `id`='" . sql_escape($priv) . "' LIMIT 1"); - if (count($group_privileges_source) > 0) { - sql_query("INSERT INTO `GroupPrivileges` SET `group_id`='" . sql_escape($group_id) . "', `privilege_id`='" . sql_escape($priv) . "'"); - $privilege_names[] = $group_privileges_source[0]['name']; + foreach ($_REQUEST['privileges'] as $privilege) { + if (preg_match("/^[0-9]{1,}$/", $privilege)) { + $group_privileges_source = DB::select( + 'SELECT `name` FROM `Privileges` WHERE `id`=? LIMIT 1', + [$privilege] + ); + if (!empty($group_privileges_source)) { + $group_privileges_source = array_shift($group_privileges_source); + DB::insert( + 'INSERT INTO `GroupPrivileges` (`group_id`, `privilege_id`) VALUES (?, ?)', + [$group_id, $privilege] + ); + $privilege_names[] = $group_privileges_source['name']; } } } diff --git a/includes/pages/admin_import.php b/includes/pages/admin_import.php index 2e37572f..7a246b4b 100644 --- a/includes/pages/admin_import.php +++ b/includes/pages/admin_import.php @@ -1,5 +1,7 @@ 0) { return '' . _('There are unanswered questions!') . ''; @@ -39,7 +41,7 @@ function admin_questions() if (!isset($_REQUEST['action'])) { $unanswered_questions_table = []; - $questions = sql_select("SELECT * FROM `Questions` WHERE `AID` IS NULL"); + $questions = DB::select('SELECT * FROM `Questions` WHERE `AID` IS NULL'); foreach ($questions as $question) { $user_source = User($question['UID']); @@ -59,7 +61,7 @@ function admin_questions() } $answered_questions_table = []; - $questions = sql_select("SELECT * FROM `Questions` WHERE NOT `AID` IS NULL"); + $questions = DB::select('SELECT * FROM `Questions` WHERE NOT `AID` IS NULL'); foreach ($questions as $question) { $user_source = User($question['UID']); $answer_user_source = User($question['AID']); @@ -102,7 +104,10 @@ function admin_questions() return error('Incomplete call, missing Question ID.', true); } - $question = sql_select("SELECT * FROM `Questions` WHERE `QID`='" . sql_escape($question_id) . "' LIMIT 1"); + $question = DB::select( + 'SELECT * FROM `Questions` WHERE `QID`=? LIMIT 1', + [$question_id] + ); if (count($question) > 0 && $question[0]['AID'] == null) { $answer = trim( preg_replace("/([^\p{L}\p{P}\p{Z}\p{N}\n]{1,})/ui", @@ -111,12 +116,19 @@ function admin_questions() )); if ($answer != '') { - sql_query(" - UPDATE `Questions` - SET `AID`='" . sql_escape($user['UID']) . "', `Answer`='" . sql_escape($answer) . "' - WHERE `QID`='" . sql_escape($question_id) . "' - LIMIT 1 - "); + DB::update( + ' + UPDATE `Questions` + SET `AID`=?, `Answer`=? + WHERE `QID`=? + LIMIT 1 + ', + [ + $user['UID'], + $answer, + $question_id, + ] + ); engelsystem_log('Question ' . $question[0]['Question'] . ' answered: ' . $answer); redirect(page_link_to('admin_questions')); } else { @@ -133,9 +145,12 @@ function admin_questions() return error('Incomplete call, missing Question ID.', true); } - $question = sql_select("SELECT * FROM `Questions` WHERE `QID`='" . sql_escape($question_id) . "' LIMIT 1"); + $question = DB::select( + 'SELECT * FROM `Questions` WHERE `QID`=? LIMIT 1', + [$question_id] + ); if (count($question) > 0) { - sql_query("DELETE FROM `Questions` WHERE `QID`='" . sql_escape($question_id) . "' LIMIT 1"); + DB::delete('DELETE FROM `Questions` WHERE `QID`=? LIMIT 1', [$question_id]); engelsystem_log('Question deleted: ' . $question[0]['Question']); redirect(page_link_to('admin_questions')); } else { diff --git a/includes/pages/admin_rooms.php b/includes/pages/admin_rooms.php index 61923689..50be15f3 100644 --- a/includes/pages/admin_rooms.php +++ b/includes/pages/admin_rooms.php @@ -1,5 +1,7 @@ 0) { $name = strip_request_item('name'); - if (isset($room) && sql_num_query("SELECT * FROM `Room` WHERE `Name`='" . sql_escape($name) . "' AND NOT `RID`=" . sql_escape($room_id)) > 0) { + if ( + isset($room) + && count(DB::select( + 'SELECT RID FROM `Room` WHERE `Name`=? AND NOT `RID`=?', + [$name, $room_id] + )) > 0 + ) { $valid = false; $msg .= error(_('This name is already in use.'), true); } @@ -111,17 +122,23 @@ function admin_rooms() } if ($valid) { - if (isset($room_id)) { - sql_query(" + if (!empty($room_id)) { + DB::update(' UPDATE `Room` SET - `Name`='" . sql_escape($name) . "', - `FromPentabarf`='" . sql_escape($from_pentabarf) . "', - `show`='" . sql_escape($public) . "', - `Number`='" . sql_escape($number) . "' - WHERE `RID`='" . sql_escape($room_id) . "' + `Name`=?, + `FromPentabarf`=?, + `show`=?, + `Number`=? + WHERE `RID`=? LIMIT 1 - "); + ', [ + $name, + $from_pentabarf, + $public, + $number, + $room_id, + ]); engelsystem_log( 'Room updated: ' . $name . ', pentabarf import: ' . $from_pentabarf diff --git a/includes/pages/admin_shifts.php b/includes/pages/admin_shifts.php index 1e19c5e4..c543e827 100644 --- a/includes/pages/admin_shifts.php +++ b/includes/pages/admin_shifts.php @@ -1,5 +1,7 @@ $count) { - $angel_type_source = sql_select("SELECT * FROM `AngelTypes` WHERE `id`='" . sql_escape($type_id) . "' LIMIT 1"); - if (count($angel_type_source) > 0) { - sql_query("INSERT INTO `NeededAngelTypes` SET `shift_id`='" . sql_escape($shift_id) . "', `angel_type_id`='" . sql_escape($type_id) . "', `count`='" . sql_escape($count) . "'"); - $needed_angel_types_info[] = $angel_type_source[0]['name'] . ": " . $count; + $angel_type_source = DB::select(' + SELECT * + FROM `AngelTypes` + WHERE `id` = ? + LIMIT 1', [$type_id]); + if (!empty($angel_type_source)) { + DB::insert(' + INSERT INTO `NeededAngelTypes` (`shift_id`, `angel_type_id`, `count`) + VALUES (?, ?, ?) + ', + [ + $shift_id, + $type_id, + $count + ] + ); + $needed_angel_types_info[] = $angel_type_source[0]['name'] . ': ' . $count; } } } diff --git a/includes/pages/admin_user.php b/includes/pages/admin_user.php index 8e11c5f3..192becb0 100644 --- a/includes/pages/admin_user.php +++ b/includes/pages/admin_user.php @@ -1,5 +1,7 @@ '; - $my_highest_group = sql_select("SELECT * FROM `UserGroups` WHERE `uid`='" . sql_escape($user['UID']) . "' ORDER BY `group_id` LIMIT 1"); + $my_highest_group = DB::select( + 'SELECT group_id FROM `UserGroups` WHERE `uid`=? ORDER BY `group_id` LIMIT 1', + [$user['UID']] + ); if (count($my_highest_group) > 0) { $my_highest_group = $my_highest_group[0]['group_id']; } - $his_highest_group = sql_select("SELECT * FROM `UserGroups` WHERE `uid`='" . sql_escape($user_id) . "' ORDER BY `group_id` LIMIT 1"); + $his_highest_group = DB::select( + 'SELECT `group_id` FROM `UserGroups` WHERE `uid`=? ORDER BY `group_id` LIMIT 1', + [$user_id] + ); if (count($his_highest_group) > 0) { $his_highest_group = $his_highest_group[0]['group_id']; } @@ -121,16 +129,21 @@ function admin_user() . page_link_to('admin_user') . '&action=save_groups&id=' . $user_id . '" method="post">' . "\n"; $html .= ''; - $groups = sql_select(" - SELECT * - FROM `Groups` - LEFT OUTER JOIN `UserGroups` ON ( - `UserGroups`.`group_id` = `Groups`.`UID` - AND `UserGroups`.`uid` = '" . sql_escape($user_id) . "' - ) - WHERE `Groups`.`UID` >= '" . sql_escape($my_highest_group) . "' - ORDER BY `Groups`.`Name` - "); + $groups = DB::select(' + SELECT * + FROM `Groups` + LEFT OUTER JOIN `UserGroups` ON ( + `UserGroups`.`group_id` = `Groups`.`UID` + AND `UserGroups`.`uid` = ? + ) + WHERE `Groups`.`UID` >= ? + ORDER BY `Groups`.`Name` + ', + [ + $user_id, + $my_highest_group, + ] + ); foreach ($groups as $group) { $html .= '
    0 && (count($his_highest_group) == 0 || ($my_highest_group[0]['group_id'] <= $his_highest_group[0]['group_id']))) { - $groups_source = sql_select(" - SELECT * - FROM `Groups` - LEFT OUTER JOIN `UserGroups` ON ( - `UserGroups`.`group_id` = `Groups`.`UID` - AND `UserGroups`.`uid` = '" . sql_escape($user_id) . "' - ) - WHERE `Groups`.`UID` >= '" . sql_escape($my_highest_group[0]['group_id']) . "' - ORDER BY `Groups`.`Name` - "); + $my_highest_group = DB::select( + 'SELECT * FROM `UserGroups` WHERE `uid`=? ORDER BY `group_id`', + [$user['UID']] + ); + $his_highest_group = DB::select( + 'SELECT * FROM `UserGroups` WHERE `uid`=? ORDER BY `group_id`', + [$user_id] + ); + + if ( + count($my_highest_group) > 0 + && ( + count($his_highest_group) == 0 + || ($my_highest_group[0]['group_id'] <= $his_highest_group[0]['group_id']) + ) + ) { + $groups_source = DB::select(' + SELECT * + FROM `Groups` + LEFT OUTER JOIN `UserGroups` ON ( + `UserGroups`.`group_id` = `Groups`.`UID` + AND `UserGroups`.`uid` = ? + ) + WHERE `Groups`.`UID` >= ? + ORDER BY `Groups`.`Name` + ', + [ + $user_id, + $my_highest_group[0]['group_id'], + ] + ); $groups = []; $grouplist = []; foreach ($groups_source as $group) { @@ -179,11 +209,14 @@ function admin_user() $_REQUEST['groups'] = []; } - sql_query("DELETE FROM `UserGroups` WHERE `uid`='" . sql_escape($user_id) . "'"); + DB::delete('DELETE FROM `UserGroups` WHERE `uid`=?', [$user_id]); $user_groups_info = []; foreach ($_REQUEST['groups'] as $group) { if (in_array($group, $grouplist)) { - sql_query("INSERT INTO `UserGroups` SET `uid`='" . sql_escape($user_id) . "', `group_id`='" . sql_escape($group) . "'"); + DB::insert( + 'INSERT INTO `UserGroups` (`uid`, `group_id`) VALUES (?, ?)', + [$user_id, $group] + ); $user_groups_info[] = $groups[$group]['Name']; } } @@ -206,25 +239,42 @@ function admin_user() if (in_array('admin_active', $privileges)) { $force_active = $_REQUEST['force_active']; } - $SQL = "UPDATE `User` SET - `Nick` = '" . sql_escape($_POST["eNick"]) . "', - `Name` = '" . sql_escape($_POST["eName"]) . "', - `Vorname` = '" . sql_escape($_POST["eVorname"]) . "', - `Telefon` = '" . sql_escape($_POST["eTelefon"]) . "', - `Handy` = '" . sql_escape($_POST["eHandy"]) . "', - `Alter` = '" . sql_escape($_POST["eAlter"]) . "', - `DECT` = '" . sql_escape($_POST["eDECT"]) . "', - " . ($user_source['email_by_human_allowed'] ? "`email` = '" . sql_escape($_POST["eemail"]) . "'," : "") . " - `jabber` = '" . sql_escape($_POST["ejabber"]) . "', - `Size` = '" . sql_escape($_POST["eSize"]) . "', - `Gekommen`= '" . sql_escape($_POST["eGekommen"]) . "', - `Aktiv`= '" . sql_escape($_POST["eAktiv"]) . "', - `force_active`= " . sql_escape($force_active) . ", - `Tshirt` = '" . sql_escape($_POST["eTshirt"]) . "', - `Hometown` = '" . sql_escape($_POST["Hometown"]) . "' - WHERE `UID` = '" . sql_escape($user_id) . "' - LIMIT 1"; - sql_query($SQL); + $sql = ' + UPDATE `User` SET + `Nick` = ?, + `Name` = ?, + `Vorname` = ?, + `Telefon` = ?, + `Handy` = ?, + `Alter` =?, + `DECT` = ?, + ' . ($user_source['email_by_human_allowed'] ? '`email` = ' . DB::getPdo()->quote($_POST["eemail"]) . ',' : '') . ' + `jabber` = ?, + `Size` = ?, + `Gekommen`= ?, + `Aktiv`= ?, + `force_active`= ?, + `Tshirt` = ?, + `Hometown` = ? + WHERE `UID` = ? + LIMIT 1'; + DB::update($sql, [ + $_POST['eNick'], + $_POST['eName'], + $_POST['eVorname'], + $_POST['eTelefon'], + $_POST['eHandy'], + $_POST['eAlter'], + $_POST['eDECT'], + $_POST['ejabber'], + $_POST['eSize'], + $_POST['eGekommen'], + $_POST['eAktiv'], + $force_active, + $_POST['eTshirt'], + $_POST['Hometown'], + $user_id, + ]); engelsystem_log( 'Updated user: ' . $_POST['eNick'] . ', ' . $_POST['eSize'] . ', arrived: ' . $_POST['eGekommen'] diff --git a/includes/pages/guest_login.php b/includes/pages/guest_login.php index d202d92d..f08f9260 100644 --- a/includes/pages/guest_login.php +++ b/includes/pages/guest_login.php @@ -1,5 +1,7 @@ 1) { $nick = User_validate_Nick($_REQUEST['nick']); - if (sql_num_query("SELECT * FROM `User` WHERE `Nick`='" . sql_escape($nick) . "' LIMIT 1") > 0) { + if (count(DB::select('SELECT `UID` FROM `User` WHERE `Nick`=? LIMIT 1', [$nick])) > 0) { $valid = false; $msg .= error(sprintf(_('Your nick "%s" already exists.'), $nick), true); } @@ -148,10 +150,10 @@ function guest_register() // Trivia if (isset($_REQUEST['lastname'])) { - $lastname = strip_request_item('lastname'); + $lastName = strip_request_item('lastname'); } if (isset($_REQUEST['prename'])) { - $prename = strip_request_item('prename'); + $preName = strip_request_item('prename'); } if (isset($_REQUEST['age']) && preg_match("/^[0-9]{0,4}$/", $_REQUEST['age'])) { $age = strip_request_item('age'); @@ -173,38 +175,65 @@ function guest_register() } if ($valid) { - sql_query(" - INSERT INTO `User` SET - `color`='" . sql_escape($default_theme) . "', - `Nick`='" . sql_escape($nick) . "', - `Vorname`='" . sql_escape($prename) . "', - `Name`='" . sql_escape($lastname) . "', - `Alter`='" . sql_escape($age) . "', - `Telefon`='" . sql_escape($tel) . "', - `DECT`='" . sql_escape($dect) . "', - `Handy`='" . sql_escape($mobile) . "', - `email`='" . sql_escape($mail) . "', - `email_shiftinfo`=" . sql_bool($email_shiftinfo) . ", - `email_by_human_allowed`=" . sql_bool($email_by_human_allowed) . ", - `jabber`='" . sql_escape($jabber) . "', - `Size`='" . sql_escape($tshirt_size) . "', - `Passwort`='" . sql_escape($password_hash) . "', - `kommentar`='" . sql_escape($comment) . "', - `Hometown`='" . sql_escape($hometown) . "', - `CreateDate`=NOW(), - `Sprache`='" . sql_escape($_SESSION["locale"]) . "', - `arrival_date`=NULL, - `planned_arrival_date`='" . sql_escape($planned_arrival_date) . "'"); + DB::insert(' + INSERT INTO `User` ( + `color`, + `Nick`, + `Vorname`, + `Name`, + `Alter`, + `Telefon`, + `DECT`, + `Handy`, + `email`, + `email_shiftinfo`, + `email_by_human_allowed`, + `jabber`, + `Size`, + `Passwort`, + `kommentar`, + `Hometown`, + `CreateDate`, + `Sprache`, + `arrival_date`, + `planned_arrival_date` + ) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW(), ?, NULL, ?) + ', + [ + $default_theme, + $nick, + $preName, + $lastName, + $age, + $tel, + $dect, + $mobile, + $mail, + (bool)$email_shiftinfo, + (bool)$email_by_human_allowed, + $jabber, + $tshirt_size, + $password_hash, + $comment, + $hometown, + $_SESSION['locale'], + $planned_arrival_date, + ] + ); // Assign user-group and set password - $user_id = sql_id(); - sql_query("INSERT INTO `UserGroups` SET `uid`='" . sql_escape($user_id) . "', `group_id`=-2"); + $user_id = DB::getPdo()->lastInsertId(); + DB::insert('INSERT INTO `UserGroups` (`uid`, `group_id`) VALUES (?, -2)', [$user_id]); set_password($user_id, $_REQUEST['password']); // Assign angel-types $user_angel_types_info = []; foreach ($selected_angel_types as $selected_angel_type_id) { - sql_query("INSERT INTO `UserAngelTypes` SET `user_id`='" . sql_escape($user_id) . "', `angeltype_id`='" . sql_escape($selected_angel_type_id) . "'"); + DB::insert( + 'INSERT INTO `UserAngelTypes` (`user_id`, `angeltype_id`) VALUES (?, ?)', + [$user_id, $selected_angel_type_id] + ); $user_angel_types_info[] = $angel_types[$selected_angel_type_id]; } @@ -316,10 +345,10 @@ function guest_register() form_text('jabber', _('Jabber'), $jabber), div('row', [ div('col-sm-6', [ - form_text('prename', _('First name'), $prename) + form_text('prename', _('First name'), $preName) ]), div('col-sm-6', [ - form_text('lastname', _('Last name'), $lastname) + form_text('lastname', _('Last name'), $lastName) ]) ]), div('row', [ @@ -361,7 +390,7 @@ function guest_login() if (isset($_REQUEST['submit'])) { if (isset($_REQUEST['nick']) && strlen(User_validate_Nick($_REQUEST['nick'])) > 0) { $nick = User_validate_Nick($_REQUEST['nick']); - $login_user = sql_select("SELECT * FROM `User` WHERE `Nick`='" . sql_escape($nick) . "'"); + $login_user = DB::select('SELECT * FROM `User` WHERE `Nick`=?', [$nick]); if (count($login_user) > 0) { $login_user = $login_user[0]; if (isset($_REQUEST['password'])) { diff --git a/includes/pages/guest_stats.php b/includes/pages/guest_stats.php index c4e1af74..4add3e97 100644 --- a/includes/pages/guest_stats.php +++ b/includes/pages/guest_stats.php @@ -1,5 +1,7 @@ 0) { return ' ' . $new_messages . ''; } @@ -32,7 +37,10 @@ function user_messages() global $user; if (!isset($_REQUEST['action'])) { - $users = sql_select("SELECT * FROM `User` WHERE NOT `UID`='" . sql_escape($user['UID']) . "' ORDER BY `Nick`"); + $users = DB::select( + 'SELECT `UID`, `Nick` FROM `User` WHERE NOT `UID`=? ORDER BY `Nick`', + [$user['UID']] + ); $to_select_data = [ '' => _('Select recipient...') @@ -44,13 +52,18 @@ function user_messages() $to_select = html_select_key('to', 'to', $to_select_data, ''); - $messages = sql_select(" + $messages = DB::select(' SELECT * FROM `Messages` - WHERE `SUID`='" . sql_escape($user['UID']) . "' - OR `RUID`='" . sql_escape($user['UID']) . "' + WHERE `SUID`=? + OR `RUID`=? ORDER BY `isRead`,`Datum` DESC - "); + ', + [ + $user['UID'], + $user['UID'], + ] + ); $messages_table = [ [ @@ -116,9 +129,15 @@ function user_messages() return error(_('Incomplete call, missing Message ID.'), true); } - $message = sql_select("SELECT * FROM `Messages` WHERE `id`='" . sql_escape($message_id) . "' LIMIT 1"); + $message = DB::select( + 'SELECT `RUID` FROM `Messages` WHERE `id`=? LIMIT 1', + [$message_id] + ); if (count($message) > 0 && $message[0]['RUID'] == $user['UID']) { - sql_query("UPDATE `Messages` SET `isRead`='Y' WHERE `id`='" . sql_escape($message_id) . "' LIMIT 1"); + DB::update( + 'UPDATE `Messages` SET `isRead`=\'Y\' WHERE `id`=? LIMIT 1', + [$message_id] + ); redirect(page_link_to('user_messages')); } else { return error(_('No Message found.'), true); @@ -132,9 +151,12 @@ function user_messages() return error(_('Incomplete call, missing Message ID.'), true); } - $message = sql_select("SELECT * FROM `Messages` WHERE `id`='" . sql_escape($message_id) . "' LIMIT 1"); + $message = DB::select( + 'SELECT `SUID` FROM `Messages` WHERE `id`=? LIMIT 1', + [$message_id] + ); if (count($message) > 0 && $message[0]['SUID'] == $user['UID']) { - sql_query("DELETE FROM `Messages` WHERE `id`='" . sql_escape($message_id) . "' LIMIT 1"); + DB::delete('DELETE FROM `Messages` WHERE `id`=? LIMIT 1', [$message_id]); redirect(page_link_to('user_messages')); } else { return error(_('No Message found.'), true); @@ -142,7 +164,7 @@ function user_messages() break; case 'send': - if (Message_send($_REQUEST['to'], $_REQUEST['text']) === true) { + if (Message_send($_REQUEST['to'], $_REQUEST['text'])) { redirect(page_link_to('user_messages')); } else { return error(_('Transmitting was terminated with an Error.'), true); diff --git a/includes/pages/user_myshifts.php b/includes/pages/user_myshifts.php index 2079c789..76b79032 100644 --- a/includes/pages/user_myshifts.php +++ b/includes/pages/user_myshifts.php @@ -1,5 +1,7 @@ 0 + && count(DB::select('SELECT `UID` FROM `User` WHERE `UID`=?', [$_REQUEST['id']])) > 0 ) { $user_id = $_REQUEST['id']; } else { $user_id = $user['UID']; } - list($shifts_user) = sql_select("SELECT * FROM `User` WHERE `UID`='" . sql_escape($user_id) . "' LIMIT 1"); + $shifts_user = DB::select('SELECT * FROM `User` WHERE `UID`=? LIMIT 1', [$user_id]); + $shifts_user = array_shift($shifts_user); if (isset($_REQUEST['reset'])) { if ($_REQUEST['reset'] == 'ack') { @@ -46,24 +49,32 @@ function user_myshifts() ]); } elseif (isset($_REQUEST['edit']) && preg_match('/^[0-9]*$/', $_REQUEST['edit'])) { $user_id = $_REQUEST['edit']; - $shift = sql_select("SELECT - `ShiftEntry`.`freeloaded`, - `ShiftEntry`.`freeload_comment`, - `ShiftEntry`.`Comment`, - `ShiftEntry`.`UID`, - `ShiftTypes`.`name`, - `Shifts`.*, - `Room`.`Name`, - `AngelTypes`.`name` AS `angel_type` - FROM `ShiftEntry` - JOIN `AngelTypes` ON (`ShiftEntry`.`TID` = `AngelTypes`.`id`) - JOIN `Shifts` ON (`ShiftEntry`.`SID` = `Shifts`.`SID`) - JOIN `ShiftTypes` ON (`ShiftTypes`.`id` = `Shifts`.`shifttype_id`) - JOIN `Room` ON (`Shifts`.`RID` = `Room`.`RID`) - WHERE `ShiftEntry`.`id`='" . sql_escape($user_id) . "' - AND `UID`='" . sql_escape($shifts_user['UID']) . "' LIMIT 1"); + $shift = DB::select(' + SELECT + `ShiftEntry`.`freeloaded`, + `ShiftEntry`.`freeload_comment`, + `ShiftEntry`.`Comment`, + `ShiftEntry`.`UID`, + `ShiftTypes`.`name`, + `Shifts`.*, + `Room`.`Name`, + `AngelTypes`.`name` AS `angel_type` + FROM `ShiftEntry` + JOIN `AngelTypes` ON (`ShiftEntry`.`TID` = `AngelTypes`.`id`) + JOIN `Shifts` ON (`ShiftEntry`.`SID` = `Shifts`.`SID`) + JOIN `ShiftTypes` ON (`ShiftTypes`.`id` = `Shifts`.`shifttype_id`) + JOIN `Room` ON (`Shifts`.`RID` = `Room`.`RID`) + WHERE `ShiftEntry`.`id`=? + AND `UID`=? + LIMIT 1 + ', + [ + $user_id, + $shifts_user['UID'], + ] + ); if (count($shift) > 0) { - $shift = $shift[0]; + $shift = array_shift($shift); $freeloaded = $shift['freeloaded']; $freeload_comment = $shift['freeload_comment']; @@ -120,13 +131,19 @@ function user_myshifts() } } elseif (isset($_REQUEST['cancel']) && preg_match('/^[0-9]*$/', $_REQUEST['cancel'])) { $user_id = $_REQUEST['cancel']; - $shift = sql_select(" - SELECT * - FROM `Shifts` - INNER JOIN `ShiftEntry` USING (`SID`) - WHERE `ShiftEntry`.`id`='" . sql_escape($user_id) . "' AND `UID`='" . sql_escape($shifts_user['UID']) . "'"); + $shift = DB::select(' + SELECT * + FROM `Shifts` + INNER JOIN `ShiftEntry` USING (`SID`) + WHERE `ShiftEntry`.`id`=? AND `UID`=? + ', + [ + $user_id, + $shifts_user['UID'], + ] + ); if (count($shift) > 0) { - $shift = $shift[0]; + $shift = array_shift($shift); if (($shift['start'] > time() + $last_unsubscribe * 3600) || in_array('user_shifts_admin', $privileges)) { $result = ShiftEntry_delete($user_id); if ($result === false) { diff --git a/includes/pages/user_news.php b/includes/pages/user_news.php index ceed75f2..3828e293 100644 --- a/includes/pages/user_news.php +++ b/includes/pages/user_news.php @@ -1,5 +1,7 @@ ' . '
      '; for ($i = 0; $i < $dis_rows; $i++) { if (isset($_REQUEST['page']) && $i == $_REQUEST['page']) { @@ -98,7 +102,7 @@ function display_news($news) . ' ' . _('Comments') . ' » ' . '' - . sql_num_query("SELECT * FROM `NewsComments` WHERE `Refid`='" . sql_escape($news['ID']) . "'") + . count(DB::select('SELECT `ID` FROM `NewsComments` WHERE `Refid`=?', [$news['ID']])) . ''; } $html .= ''; @@ -117,28 +121,34 @@ function user_news_comments() if ( isset($_REQUEST['nid']) && preg_match('/^[0-9]{1,}$/', $_REQUEST['nid']) - && sql_num_query("SELECT * FROM `News` WHERE `ID`='" . sql_escape($_REQUEST['nid']) . "' LIMIT 1") > 0 + && count(DB::select('SELECT `ID` FROM `News` WHERE `ID`=? LIMIT 1', [$_REQUEST['nid']])) > 0 ) { $nid = $_REQUEST['nid']; - list($news) = sql_select("SELECT * FROM `News` WHERE `ID`='" . sql_escape($nid) . "' LIMIT 1"); + $news = DB::select('SELECT * FROM `News` WHERE `ID`=? LIMIT 1', [$nid]); + $news = array_shift($news); if (isset($_REQUEST['text'])) { $text = preg_replace("/([^\p{L}\p{P}\p{Z}\p{N}\n]{1,})/ui", '', strip_tags($_REQUEST['text'])); - sql_query(" - INSERT INTO `NewsComments` (`Refid`, `Datum`, `Text`, `UID`) - VALUES ( - '" . sql_escape($nid) . "', - '" . date("Y-m-d H:i:s") . "', - '" . sql_escape($text) . "', - '" . sql_escape($user["UID"]) . "' - ) - "); + DB::insert(' + INSERT INTO `NewsComments` (`Refid`, `Datum`, `Text`, `UID`) + VALUES (?, ?, ?, ?) + ', + [ + $nid, + date("Y-m-d H:i:s"), + $text, + $user["UID"], + ] + ); engelsystem_log('Created news_comment: ' . $text); $html .= success(_('Entry saved.'), true); } $html .= display_news($news); - $comments = sql_select("SELECT * FROM `NewsComments` WHERE `Refid`='" . sql_escape($nid) . "' ORDER BY 'ID'"); + $comments = DB::select( + 'SELECT * FROM `NewsComments` WHERE `Refid`=? ORDER BY \'ID\'', + [$nid] + ); foreach ($comments as $comment) { $user_source = User($comment['UID']); @@ -176,16 +186,18 @@ function user_news() if (!isset($_POST['treffen']) || !in_array('admin_news', $privileges)) { $_POST['treffen'] = 0; } - sql_query(" + DB::insert(' INSERT INTO `News` (`Datum`, `Betreff`, `Text`, `UID`, `Treffen`) - VALUES ( - '" . sql_escape(time()) . "', - '" . sql_escape($_POST["betreff"]) . "', - '" . sql_escape($_POST["text"]) . "', - '" . sql_escape($user['UID']) . "', - '" . sql_escape($_POST["treffen"]) . "' - ) - "); + VALUES (?, ?, ?, ?, ?) + ', + [ + time(), + $_POST['betreff'], + $_POST['text'], + $user['UID'], + $_POST['treffen'], + ] + ); engelsystem_log('Created news: ' . $_POST['betreff'] . ', treffen: ' . $_POST['treffen']); success(_('Entry saved.')); redirect(page_link_to('news')); @@ -197,17 +209,20 @@ function user_news() $page = 0; } - $news = sql_select(" - SELECT * - FROM `News` - ORDER BY `Datum` - DESC LIMIT " . sql_escape($page * $display_news) . ", " . sql_escape($display_news) - ); + $news = DB::select(sprintf(' + SELECT * + FROM `News` + ORDER BY `Datum` + DESC LIMIT %u, %u + ', + $page * $display_news, + $display_news + )); foreach ($news as $entry) { $html .= display_news($entry); } - $dis_rows = ceil(sql_num_query('SELECT * FROM `News`') / $display_news); + $dis_rows = ceil(count(DB::select('SELECT `ID` FROM `News`')) / $display_news); $html .= '
      ' . '
        '; for ($i = 0; $i < $dis_rows; $i++) { if (isset($_REQUEST['page']) && $i == $_REQUEST['page']) { diff --git a/includes/pages/user_questions.php b/includes/pages/user_questions.php index b8ebe92d..04ae8914 100644 --- a/includes/pages/user_questions.php +++ b/includes/pages/user_questions.php @@ -1,5 +1,7 @@ 0 && $question[0]['UID'] == $user['UID']) { - sql_query("DELETE FROM `Questions` WHERE `QID`='" . sql_escape($question_id) . "' LIMIT 1"); + DB::delete( + 'DELETE FROM `Questions` WHERE `QID`=? LIMIT 1', + [$question_id] + ); redirect(page_link_to('user_questions')); } else { return page_with_title(questions_title(), [ diff --git a/includes/pages/user_settings.php b/includes/pages/user_settings.php index b848ff5f..5d4ba368 100644 --- a/includes/pages/user_settings.php +++ b/includes/pages/user_settings.php @@ -1,5 +1,7 @@ 0) { // User ist eingeloggt, Datensatz zur Verfügung stellen und Timestamp updaten - list($user) = $user; - sql_query(" + $user = array_shift($user); + DB::update(' UPDATE `User` - SET " . "`lastLogIn` = '" . time() . "'" . " - WHERE `UID` = '" . sql_escape($_SESSION['uid']) . "' + SET `lastLogIn` = ? + WHERE `UID` = ? LIMIT 1 - "); + ', [ + time(), + $_SESSION['uid'], + ]); $privileges = privileges_for_user($user['UID']); return; } @@ -50,19 +55,24 @@ function generate_salt($length = 16) * * @param int $uid * @param string $password - * @return mysqli_result + * @return bool */ function set_password($uid, $password) { global $crypt_alg; - $result = sql_query(" + $result = DB::update(' UPDATE `User` - SET `Passwort` = '" . sql_escape(crypt($password, $crypt_alg . '$' . generate_salt(16) . '$')) . "', + SET `Passwort` = ?, `password_recovery_token`=NULL - WHERE `UID` = " . intval($uid) . " + WHERE `UID` = ? LIMIT 1 - "); - if ($result === false) { + ', + [ + crypt($password, $crypt_alg . '$' . generate_salt(16) . '$'), + $uid + ] + ); + if (DB::getStm()->errorCode() != '00000') { engelsystem_error('Unable to update password.'); } return $result; @@ -93,13 +103,19 @@ function verify_password($password, $salt, $uid = null) // this password is stored in another format than we want it to be. // let's update it! // we duplicate the query from the above set_password() function to have the extra safety of checking the old hash - sql_query(" - UPDATE `User` - SET `Passwort` = '" . sql_escape(crypt($password, $crypt_alg . '$' . generate_salt() . '$')) . "' - WHERE `UID` = " . intval($uid) . " - AND `Passwort` = '" . sql_escape($salt) . "' - LIMIT 1 - "); + DB::update(' + UPDATE `User` + SET `Passwort` = ? + WHERE `UID` = ? + AND `Passwort` = ? + LIMIT 1 + ', + [ + crypt($password, $crypt_alg . '$' . generate_salt() . '$'), + $uid, + $salt, + ] + ); } return $correct; } @@ -111,16 +127,16 @@ function verify_password($password, $salt, $uid = null) function privileges_for_user($user_id) { $privileges = []; - $user_privs = sql_select(" + $user_privileges = DB::select(' SELECT `Privileges`.`name` FROM `User` JOIN `UserGroups` ON (`User`.`UID` = `UserGroups`.`uid`) JOIN `GroupPrivileges` ON (`UserGroups`.`group_id` = `GroupPrivileges`.`group_id`) JOIN `Privileges` ON (`GroupPrivileges`.`privilege_id` = `Privileges`.`id`) - WHERE `User`.`UID`='" . sql_escape($user_id) . "' - "); - foreach ($user_privs as $user_priv) { - $privileges[] = $user_priv['name']; + WHERE `User`.`UID`=? + ', [$user_id]); + foreach ($user_privileges as $user_privilege) { + $privileges[] = $user_privilege['name']; } return $privileges; } @@ -132,14 +148,14 @@ function privileges_for_user($user_id) function privileges_for_group($group_id) { $privileges = []; - $groups_privs = sql_select(" - SELECT * + $groups_privileges = DB::select(' + SELECT `name` FROM `GroupPrivileges` JOIN `Privileges` ON (`GroupPrivileges`.`privilege_id` = `Privileges`.`id`) - WHERE `group_id`='" . sql_escape($group_id) . "' - "); - foreach ($groups_privs as $guest_priv) { - $privileges[] = $guest_priv['name']; + WHERE `group_id`=? + ', [$group_id]); + foreach ($groups_privileges as $guest_privilege) { + $privileges[] = $guest_privilege['name']; } return $privileges; } diff --git a/includes/sys_log.php b/includes/sys_log.php index b253d6ad..c4ef890e 100644 --- a/includes/sys_log.php +++ b/includes/sys_log.php @@ -16,25 +16,3 @@ function engelsystem_log($message) } LogEntry_create($nick, $message); } - -/** - * Generates a PHP Stacktrace. - * - * @return string - */ -function debug_string_backtrace() -{ - ob_start(); - debug_print_backtrace(); - $trace = ob_get_contents(); - ob_end_clean(); - - // Remove first item from backtrace as it's this function which - // is redundant. - $trace = preg_replace('/^#0\s+' . __FUNCTION__ . "[^\n]*\n/", '', $trace, 1); - - // Renumber backtrace items. - // $trace = preg_replace('/^#(\d+)/me', '\'#\' . ($1 - 1)', $trace); - - return $trace; -} diff --git a/includes/sys_page.php b/includes/sys_page.php index 7bc2b9cb..fd03e291 100644 --- a/includes/sys_page.php +++ b/includes/sys_page.php @@ -61,7 +61,7 @@ function redirect($url) * * @param String $output String to display */ -function raw_output($output) +function raw_output($output = '') { echo $output; die(); @@ -78,11 +78,11 @@ function raw_output($output) */ function select_array($data, $key_name, $value_name) { - $ret = []; + $return = []; foreach ($data as $value) { - $ret[$value[$key_name]] = $value[$value_name]; + $return[$value[$key_name]] = $value[$value_name]; } - return $ret; + return $return; } /** diff --git a/includes/view/User_view.php b/includes/view/User_view.php index ca32b80e..832569a6 100644 --- a/includes/view/User_view.php +++ b/includes/view/User_view.php @@ -282,26 +282,25 @@ function Users_table_header_link($column, $label, $order_by) function User_shift_state_render($user) { $upcoming_shifts = ShiftEntries_upcoming_for_user($user); - if ($upcoming_shifts === false) { - return false; - } - if (count($upcoming_shifts) == 0) { + if (empty($upcoming_shifts)) { return '' . _('Free') . ''; } - if ($upcoming_shifts[0]['start'] > time()) { - if ($upcoming_shifts[0]['start'] - time() > 3600) { - return '' . _('Next shift %c') . ''; + $nextShift = array_shift($upcoming_shifts); + + if ($nextShift['start'] > time()) { + if ($nextShift['start'] - time() > 3600) { + return '' . _('Next shift %c') . ''; } - return '' . _('Next shift %c') . ''; + return '' . _('Next shift %c') . ''; } - $halfway = ($upcoming_shifts[0]['start'] + $upcoming_shifts[0]['end']) / 2; + $halfway = ($nextShift['start'] + $nextShift['end']) / 2; if (time() < $halfway) { - return '' . _('Shift starts %c') . ''; + return '' . _('Shift starts %c') . ''; } - return '' . _('Shift ends %c') . ''; + return '' . _('Shift ends %c') . ''; } /** diff --git a/src/Database/Db.php b/src/Database/Db.php new file mode 100644 index 00000000..c1efa058 --- /dev/null +++ b/src/Database/Db.php @@ -0,0 +1,170 @@ +prepare($query); + self::$lastStatus = self::$stm->execute($bindings); + + return self::$stm; + } + + /** + * Run a sql query + * + * @param string $query + * @return bool + */ + public static function unprepared($query) + { + self::$stm = self::$db->query($query); + self::$lastStatus = (self::$stm instanceof PDOStatement); + + return self::$lastStatus; + } + + /** + * Run a select query + * + * @param string $query + * @param array $bindings + * @return array + */ + public static function select($query, array $bindings = []) + { + self::query($query, $bindings); + + return self::$stm->fetchAll(PDO::FETCH_ASSOC); + } + + /** + * Run a insert query + * + * @param string $query + * @param array $bindings + * @return bool + */ + public static function insert($query, array $bindings = []) + { + self::query($query, $bindings); + + return self::$lastStatus; + } + + /** + * Run a update query + * + * @param string $query + * @param array $bindings + * @return int|null + */ + public static function update($query, array $bindings = []) + { + self::query($query, $bindings); + + return (self::$lastStatus ? self::$stm->rowCount() : null); + } + + /** + * Run a delete query + * + * @param string $query + * @param array $bindings + * @return int|null + */ + public static function delete($query, array $bindings = []) + { + self::query($query, $bindings); + + return (self::$lastStatus ? self::$stm->rowCount() : null); + } + + /** + * Run a single statement + * + * @param string $query + * @param array $bindings + * @return bool + */ + public static function statement($query, array $bindings = []) + { + self::query($query, $bindings); + + return self::$lastStatus; + } + + /** + * Returns the last error + * + * @return array + */ + public static function getError() + { + if (!self::$stm instanceof PDOStatement) { + return [-1, null, null]; + } + + return self::$stm->errorInfo(); + } + + /** + * Get the PDO instance + * + * @return PDO + */ + public static function getPdo() + { + return self::$db; + } + + /** + * @return PDOStatement|false|null + */ + public static function getStm() + { + return self::$stm; + } +} -- cgit v1.2.3-70-g09d2 From 915ce28feeb9104bf7854ccbd80caebb5dce4aaa Mon Sep 17 00:00:00 2001 From: Bot Date: Sat, 21 Jan 2017 19:37:42 +0100 Subject: Replaced " with ' --- includes/controller/shift_entries_controller.php | 6 ++-- includes/model/ShiftEntry_model.php | 4 +-- includes/model/Shifts_model.php | 36 ++++++++++++------------ includes/model/User_model.php | 6 ++-- includes/pages/admin_groups.php | 2 +- includes/pages/admin_news.php | 6 ++-- includes/pages/admin_questions.php | 2 +- includes/pages/guest_login.php | 6 ++-- includes/pages/user_news.php | 2 +- includes/pages/user_shifts.php | 4 +-- includes/sys_template.php | 2 +- includes/view/User_view.php | 28 +++++++++--------- 12 files changed, 52 insertions(+), 52 deletions(-) (limited to 'includes/view') diff --git a/includes/controller/shift_entries_controller.php b/includes/controller/shift_entries_controller.php index 0df1f430..c2851c7c 100644 --- a/includes/controller/shift_entries_controller.php +++ b/includes/controller/shift_entries_controller.php @@ -118,12 +118,12 @@ function shift_entry_add_controller() 'SELECT `id` FROM `ShiftEntry` WHERE `SID`= ? AND `UID` = ?', [$shift['SID'], $user_id])) ) { - return error("This angel does already have an entry for this shift.", true); + return error('This angel does already have an entry for this shift.', true); } $freeloaded = isset($shift['freeloaded']) ? $shift['freeloaded'] : false; $freeload_comment = isset($shift['freeload_comment']) ? $shift['freeload_comment'] : ''; - if (in_array("user_shifts_admin", $privileges)) { + if (in_array('user_shifts_admin', $privileges)) { $freeloaded = isset($_REQUEST['freeloaded']); $freeload_comment = strip_request_item_nl('freeload_comment'); } @@ -144,7 +144,7 @@ function shift_entry_add_controller() if ( $type['restricted'] == 0 && count(DB::select(' - SELECT `id` FROM `UserAngelTypes` + SELECT `UserAngelTypes`.`id` FROM `UserAngelTypes` INNER JOIN `AngelTypes` ON `AngelTypes`.`id` = `UserAngelTypes`.`angeltype_id` WHERE `angeltype_id` = ? AND `user_id` = ? diff --git a/includes/model/ShiftEntry_model.php b/includes/model/ShiftEntry_model.php index 87e186ac..d7810feb 100644 --- a/includes/model/ShiftEntry_model.php +++ b/includes/model/ShiftEntry_model.php @@ -46,7 +46,7 @@ function ShiftEntries_freeleaded_count() */ function ShiftEntries_by_shift($shift_id) { - return DB::select(" + return DB::select(' SELECT `User`.`Nick`, `User`.`email`, @@ -62,7 +62,7 @@ function ShiftEntries_by_shift($shift_id) FROM `ShiftEntry` JOIN `User` ON `ShiftEntry`.`UID`=`User`.`UID` JOIN `AngelTypes` ON `ShiftEntry`.`TID`=`AngelTypes`.`id` - WHERE `ShiftEntry`.`SID` = ?", + WHERE `ShiftEntry`.`SID` = ?', [$shift_id] ); } diff --git a/includes/model/Shifts_model.php b/includes/model/Shifts_model.php index 3f199803..c70ba830 100644 --- a/includes/model/Shifts_model.php +++ b/includes/model/Shifts_model.php @@ -24,15 +24,15 @@ function Shifts_by_room($room) function Shifts_by_ShiftsFilter(ShiftsFilter $shiftsFilter) { //@TODO - $sql = "SELECT * FROM ( + $sql = 'SELECT * FROM ( SELECT DISTINCT `Shifts`.*, `ShiftTypes`.`name`, `Room`.`Name` AS `room_name` FROM `Shifts` JOIN `Room` USING (`RID`) JOIN `ShiftTypes` ON `ShiftTypes`.`id` = `Shifts`.`shifttype_id` JOIN `NeededAngelTypes` ON `NeededAngelTypes`.`shift_id`=`Shifts`.`SID` - WHERE `Shifts`.`RID` IN (" . implode(',', $shiftsFilter->getRooms()) . ") - AND `start` BETWEEN " . $shiftsFilter->getStartTime() . " AND " . $shiftsFilter->getEndTime() . " - AND `NeededAngelTypes`.`angel_type_id` IN (" . implode(',', $shiftsFilter->getTypes()) . ") + WHERE `Shifts`.`RID` IN (' . implode(',', $shiftsFilter->getRooms()) . ') + AND `start` BETWEEN ' . $shiftsFilter->getStartTime() . ' AND ' . $shiftsFilter->getEndTime() . ' + AND `NeededAngelTypes`.`angel_type_id` IN (' . implode(',', $shiftsFilter->getTypes()) . ') AND `NeededAngelTypes`.`count` > 0 AND `Shifts`.`PSID` IS NULL @@ -43,13 +43,13 @@ function Shifts_by_ShiftsFilter(ShiftsFilter $shiftsFilter) JOIN `Room` USING (`RID`) JOIN `ShiftTypes` ON `ShiftTypes`.`id` = `Shifts`.`shifttype_id` JOIN `NeededAngelTypes` ON `NeededAngelTypes`.`room_id`=`Shifts`.`RID` - WHERE `Shifts`.`RID` IN (" . implode(',', $shiftsFilter->getRooms()) . ") - AND `start` BETWEEN " . $shiftsFilter->getStartTime() . " AND " . $shiftsFilter->getEndTime() . " - AND `NeededAngelTypes`.`angel_type_id` IN (" . implode(',', $shiftsFilter->getTypes()) . ") + WHERE `Shifts`.`RID` IN (' . implode(',', $shiftsFilter->getRooms()) . ') + AND `start` BETWEEN ' . $shiftsFilter->getStartTime() . ' AND ' . $shiftsFilter->getEndTime() . ' + AND `NeededAngelTypes`.`angel_type_id` IN (' . implode(',', $shiftsFilter->getTypes()) . ') AND `NeededAngelTypes`.`count` > 0 AND NOT `Shifts`.`PSID` IS NULL) AS tmp_shifts - ORDER BY `start`"; + ORDER BY `start`'; $result = DB::select($sql); if (DB::getStm()->errorCode() != '00000') { engelsystem_error('Unable to load shifts by filter.'); @@ -64,7 +64,7 @@ function Shifts_by_ShiftsFilter(ShiftsFilter $shiftsFilter) function NeededAngeltypes_by_ShiftsFilter(ShiftsFilter $shiftsFilter) { //@TODO - $sql = " + $sql = ' SELECT `NeededAngelTypes`.*, `Shifts`.`SID`, @@ -75,8 +75,8 @@ function NeededAngeltypes_by_ShiftsFilter(ShiftsFilter $shiftsFilter) FROM `Shifts` JOIN `NeededAngelTypes` ON `NeededAngelTypes`.`shift_id`=`Shifts`.`SID` JOIN `AngelTypes` ON `AngelTypes`.`id`= `NeededAngelTypes`.`angel_type_id` - WHERE `Shifts`.`RID` IN (" . implode(',', $shiftsFilter->getRooms()) . ") - AND `start` BETWEEN " . $shiftsFilter->getStartTime() . " AND " . $shiftsFilter->getEndTime() . " + WHERE `Shifts`.`RID` IN (' . implode(',', $shiftsFilter->getRooms()) . ') + AND `start` BETWEEN ' . $shiftsFilter->getStartTime() . ' AND ' . $shiftsFilter->getEndTime() . ' AND `Shifts`.`PSID` IS NULL UNION @@ -91,9 +91,9 @@ function NeededAngeltypes_by_ShiftsFilter(ShiftsFilter $shiftsFilter) FROM `Shifts` JOIN `NeededAngelTypes` ON `NeededAngelTypes`.`room_id`=`Shifts`.`RID` JOIN `AngelTypes` ON `AngelTypes`.`id`= `NeededAngelTypes`.`angel_type_id` - WHERE `Shifts`.`RID` IN (" . implode(',', $shiftsFilter->getRooms()) . ") - AND `start` BETWEEN " . $shiftsFilter->getStartTime() . " AND " . $shiftsFilter->getEndTime() . " - AND NOT `Shifts`.`PSID` IS NULL"; + WHERE `Shifts`.`RID` IN (' . implode(',', $shiftsFilter->getRooms()) . ') + AND `start` BETWEEN ' . $shiftsFilter->getStartTime() . ' AND ' . $shiftsFilter->getEndTime() . ' + AND NOT `Shifts`.`PSID` IS NULL'; $result = DB::select($sql); if (DB::getStm()->errorCode() != '00000') { engelsystem_error('Unable to load needed angeltypes by filter.'); @@ -162,7 +162,7 @@ function NeededAngeltype_by_Shift_and_Angeltype($shift, $angeltype) function ShiftEntries_by_ShiftsFilter(ShiftsFilter $shiftsFilter) { // @TODO - $sql = " + $sql = ' SELECT `User`.`Nick`, `User`.`email`, @@ -177,9 +177,9 @@ function ShiftEntries_by_ShiftsFilter(ShiftsFilter $shiftsFilter) FROM `Shifts` JOIN `ShiftEntry` ON `ShiftEntry`.`SID`=`Shifts`.`SID` JOIN `User` ON `ShiftEntry`.`UID`=`User`.`UID` - WHERE `Shifts`.`RID` IN (" . implode(',', $shiftsFilter->getRooms()) . ") - AND `start` BETWEEN " . $shiftsFilter->getStartTime() . " AND " . $shiftsFilter->getEndTime() . " - ORDER BY `Shifts`.`start`"; + WHERE `Shifts`.`RID` IN (' . implode(',', $shiftsFilter->getRooms()) . ') + AND `start` BETWEEN ' . $shiftsFilter->getStartTime() . ' AND ' . $shiftsFilter->getEndTime() . ' + ORDER BY `Shifts`.`start`'; $result = DB::select($sql); if (DB::getStm()->errorCode() != '00000') { engelsystem_error('Unable to load shift entries by filter.'); diff --git a/includes/model/User_model.php b/includes/model/User_model.php index 836ca914..097e8faf 100644 --- a/includes/model/User_model.php +++ b/includes/model/User_model.php @@ -28,7 +28,7 @@ function User_delete($user_id) */ function User_update($user) { - return (bool)DB::update(" + return (bool)DB::update(' UPDATE `User` SET `Nick`=?, `Name`=?, @@ -54,7 +54,7 @@ function User_update($user) `planned_arrival_date`=?, `planned_departure_date`=? WHERE `UID`=? - ", + ', [ $user['Nick'], $user['Name'], @@ -241,7 +241,7 @@ function Users_by_angeltype_inverted($angeltype) ] ); if (DB::getStm()->errorCode() != '00000') { - engelsystem_error("Unable to load users."); + engelsystem_error('Unable to load users.'); } return $result; } diff --git a/includes/pages/admin_groups.php b/includes/pages/admin_groups.php index bc33a2b0..104fa274 100644 --- a/includes/pages/admin_groups.php +++ b/includes/pages/admin_groups.php @@ -114,7 +114,7 @@ function admin_groups() DB::delete('DELETE FROM `GroupPrivileges` WHERE `group_id`=?', [$group_id]); $privilege_names = []; foreach ($_REQUEST['privileges'] as $privilege) { - if (preg_match("/^[0-9]{1,}$/", $privilege)) { + if (preg_match('/^[0-9]{1,}$/', $privilege)) { $group_privileges_source = DB::select( 'SELECT `name` FROM `Privileges` WHERE `id`=? LIMIT 1', [$privilege] diff --git a/includes/pages/admin_news.php b/includes/pages/admin_news.php index 86631d6b..af5dffc6 100644 --- a/includes/pages/admin_news.php +++ b/includes/pages/admin_news.php @@ -13,8 +13,8 @@ function admin_news() redirect(page_link_to('news')); } - $html = '

        ' . _("Edit news entry") . '

        ' . msg(); - if (isset($_REQUEST['id']) && preg_match("/^[0-9]{1,11}$/", $_REQUEST['id'])) { + $html = '

        ' . _('Edit news entry') . '

        ' . msg(); + if (isset($_REQUEST['id']) && preg_match('/^[0-9]{1,11}$/', $_REQUEST['id'])) { $news_id = $_REQUEST['id']; } else { return error('Incomplete call, missing News ID.', true); @@ -40,7 +40,7 @@ function admin_news() ], page_link_to('admin_news&action=save&id=' . $news_id)); $html .= '' - . ' ' . _("Delete") + . ' ' . _('Delete') . ''; break; diff --git a/includes/pages/admin_questions.php b/includes/pages/admin_questions.php index ef84b111..aca9b570 100644 --- a/includes/pages/admin_questions.php +++ b/includes/pages/admin_questions.php @@ -24,7 +24,7 @@ function admin_new_questions() $new_messages = count(DB::select('SELECT `QID` FROM `Questions` WHERE `AID` IS NULL')); if ($new_messages > 0) { - return '' . _('There are unanswered questions!') . ''; + return '' . _('There are unanswered questions!') . ''; } } } diff --git a/includes/pages/guest_login.php b/includes/pages/guest_login.php index f08f9260..647fa585 100644 --- a/includes/pages/guest_login.php +++ b/includes/pages/guest_login.php @@ -155,7 +155,7 @@ function guest_register() if (isset($_REQUEST['prename'])) { $preName = strip_request_item('prename'); } - if (isset($_REQUEST['age']) && preg_match("/^[0-9]{0,4}$/", $_REQUEST['age'])) { + if (isset($_REQUEST['age']) && preg_match('/^[0-9]{0,4}$/', $_REQUEST['age'])) { $age = strip_request_item('age'); } if (isset($_REQUEST['tel'])) { @@ -317,8 +317,8 @@ function guest_register() ]), form_checkboxes( 'angel_types', - _("What do you want to do?") . sprintf( - " (%s)", + _('What do you want to do?') . sprintf( + ' (%s)', page_link_to('angeltypes') . '&action=about', _('Description of job types') ), diff --git a/includes/pages/user_news.php b/includes/pages/user_news.php index 3828e293..7dfc7d0c 100644 --- a/includes/pages/user_news.php +++ b/includes/pages/user_news.php @@ -134,7 +134,7 @@ function user_news_comments() ', [ $nid, - date("Y-m-d H:i:s"), + date('Y-m-d H:i:s'), $text, $user["UID"], ] diff --git a/includes/pages/user_shifts.php b/includes/pages/user_shifts.php index 16af0197..55e49e4f 100644 --- a/includes/pages/user_shifts.php +++ b/includes/pages/user_shifts.php @@ -265,8 +265,8 @@ function make_select($items, $selected, $name, $title = null) $html = '
        ' . "\n"; $html .= implode("\n", $html_items); $html .= buttons([ - button("javascript: checkAll('selection_" . $name . "', true)", _('All'), ''), - button("javascript: checkAll('selection_" . $name . "', false)", _('None'), '') + button('javascript: checkAll(\'selection_' . $name . '\', true)', _('All'), ''), + button('javascript: checkAll(\'selection_' . $name . '\', false)', _('None'), '') ]); $html .= '
        ' . "\n"; return $html; diff --git a/includes/sys_template.php b/includes/sys_template.php index 9b85df59..107609ad 100644 --- a/includes/sys_template.php +++ b/includes/sys_template.php @@ -260,7 +260,7 @@ function table($columns, $rows_raw, $data = true) function render_table($columns, $rows, $data = true) { if (count($rows) == 0) { - return info(_("No data found."), true); + return info(_('No data found.'), true); } $html = ''; diff --git a/includes/view/User_view.php b/includes/view/User_view.php index 832569a6..50c54f5a 100644 --- a/includes/view/User_view.php +++ b/includes/view/User_view.php @@ -241,24 +241,24 @@ function Users_view( 'actions' => '' . count($users) . '' ]; - return page_with_title(_("All users"), [ + return page_with_title(_('All users'), [ msg(), buttons([ - button(page_link_to('register'), glyph('plus') . _("New user")) + button(page_link_to('register'), glyph('plus') . _('New user')) ]), table([ - 'Nick' => Users_table_header_link('Nick', _("Nick"), $order_by), - 'Vorname' => Users_table_header_link('Vorname', _("Prename"), $order_by), - 'Name' => Users_table_header_link('Name', _("Name"), $order_by), - 'DECT' => Users_table_header_link('DECT', _("DECT"), $order_by), - 'Gekommen' => Users_table_header_link('Gekommen', _("Arrived"), $order_by), - 'got_voucher' => Users_table_header_link('got_voucher', _("Voucher"), $order_by), + 'Nick' => Users_table_header_link('Nick', _('Nick'), $order_by), + 'Vorname' => Users_table_header_link('Vorname', _('Prename'), $order_by), + 'Name' => Users_table_header_link('Name', _('Name'), $order_by), + 'DECT' => Users_table_header_link('DECT', _('DECT'), $order_by), + 'Gekommen' => Users_table_header_link('Gekommen', _('Arrived'), $order_by), + 'got_voucher' => Users_table_header_link('got_voucher', _('Voucher'), $order_by), 'freeloads' => _('Freeloads'), - 'Aktiv' => Users_table_header_link('Aktiv', _("Active"), $order_by), - 'force_active' => Users_table_header_link('force_active', _("Forced"), $order_by), - 'Tshirt' => Users_table_header_link('Tshirt', _("T-Shirt"), $order_by), - 'Size' => Users_table_header_link('Size', _("Size"), $order_by), - 'lastLogIn' => Users_table_header_link('lastLogIn', _("Last login"), $order_by), + 'Aktiv' => Users_table_header_link('Aktiv', _('Active'), $order_by), + 'force_active' => Users_table_header_link('force_active', _('Forced'), $order_by), + 'Tshirt' => Users_table_header_link('Tshirt', _('T-Shirt'), $order_by), + 'Size' => Users_table_header_link('Size', _('Size'), $order_by), + 'lastLogIn' => Users_table_header_link('lastLogIn', _('Last login'), $order_by), 'actions' => '' ], $users) ]); @@ -320,7 +320,7 @@ function User_view_shiftentries($needed_angel_type) $shift_entries[] = $member; } - $shift_info .= join(", ", $shift_entries); + $shift_info .= join(', ', $shift_entries); return $shift_info; } -- cgit v1.2.3-70-g09d2 From 8506d6d27e3b926521007064abcdcc2f69c6aa06 Mon Sep 17 00:00:00 2001 From: Igor Scheller Date: Sat, 21 Jan 2017 23:07:20 +0100 Subject: Refactoring: Config cleanup / moved to class --- composer.json | 5 +- config/config.default.php | 170 ++++++++++++++---------- includes/controller/shifts_controller.php | 4 +- includes/controller/users_controller.php | 6 +- includes/engelsystem_provider.php | 82 ++++++++---- includes/helper/internationalization_helper.php | 12 +- includes/model/User_model.php | 7 +- includes/pages/admin_active.php | 5 +- includes/pages/admin_user.php | 9 +- includes/pages/guest_login.php | 14 +- includes/pages/guest_stats.php | 4 +- includes/pages/user_atom.php | 4 +- includes/pages/user_myshifts.php | 6 +- includes/pages/user_news.php | 6 +- includes/pages/user_settings.php | 16 ++- includes/sys_auth.php | 5 +- includes/view/AngelTypes_view.php | 4 +- includes/view/User_view.php | 34 ++--- public/index.php | 6 +- src/Config/Config.php | 128 ++++++++++++++++++ src/Exceptions/Handler.php | 8 +- src/helpers.php | 24 ++++ 22 files changed, 393 insertions(+), 166 deletions(-) create mode 100644 src/Config/Config.php create mode 100644 src/helpers.php (limited to 'includes/view') diff --git a/composer.json b/composer.json index bb21de23..7655275c 100644 --- a/composer.json +++ b/composer.json @@ -21,6 +21,9 @@ "autoload": { "psr-4": { "Engelsystem\\": "src/" - } + }, + "files": [ + "src/helpers.php" + ] } } diff --git a/config/config.default.php b/config/config.default.php index bcfcc89c..437399e3 100644 --- a/config/config.default.php +++ b/config/config.default.php @@ -1,70 +1,106 @@ 2 AND HOUR(FROM_UNIXTIME(`Shifts`.`end`)) < 6) - OR (HOUR(FROM_UNIXTIME(`Shifts`.`start`)) > 2 AND HOUR(FROM_UNIXTIME(`Shifts`.`start`)) < 6) - OR (HOUR(FROM_UNIXTIME(`Shifts`.`start`)) <= 2 AND HOUR(FROM_UNIXTIME(`Shifts`.`end`)) >= 6) - ))*(`Shifts`.`end` - `Shifts`.`start`)*(1 - 3 * `ShiftEntry`.`freeloaded`) -)'; - -// voucher calculation -$voucher_settings = [ - 'initial_vouchers' => 2, - 'shifts_per_voucher' => 1 -]; - -// weigh every shift the same -// $shift_sum_formula = 'SUM(`end` - `start`)'; - -// For accessing stats -$api_key = ''; - -// MySQL-Connection Settings -$config = [ - 'host' => 'localhost', - 'user' => 'root', - 'pw' => '', - 'db' => 'engelsystem' +// To change settings create a config.php + +return [ + // MySQL-Connection Settings + 'database' => [ + 'host' => 'localhost', + 'user' => 'root', + 'pw' => '', + 'db' => 'engelsystem', + ], + + // For accessing stats + 'api_key' => '', + + // Enable maintenance mode (show a static page) + 'maintenance' => false, + + // Set to development to enable debugging messages + 'environment' => 'production', + + // URL to the angel faq and job description + 'faq_url' => 'https://events.ccc.de/congress/2013/wiki/Static:Volunteers', + + // Contact email address, linked on every page + 'contact_email' => 'mailto:ticket@c3heaven.de', + + // Default theme of the start page, 1=style1.css + 'default_theme' => 1, + + // Number of News shown on one site + 'display_news' => 6, + + // Anzahl Stunden bis zum Austragen eigener Schichten + 'last_unsubscribe' => 3, + + // Setzt den zu verwendenden Crypto-Algorismus (entsprechend der Dokumentation von crypt()). + // Falls ein Benutzerpasswort in einem anderen Format gespeichert ist, + // wird es bei der ersten Benutzung des Klartext-Passworts in das neue Format + // konvertiert. + // MD5 '$1' + // Blowfish '$2y$13' + // SHA-256 '$5$rounds=5000' + // SHA-512 '$6$rounds=5000' + 'crypt_alg' => '$6$rounds=5000', // SHA-512 + + 'min_password_length' => 8, + + // Wenn Engel beim Registrieren oder in ihrem Profil eine T-Shirt Größe angeben sollen, auf true setzen: + 'enable_tshirt_size' => true, + + // Number of shifts to freeload until angel is locked for shift signup. + 'max_freeloadable_shifts' => 2, + + // local timezone + 'timezone' => 'Europe/Berlin', + + // multiply 'night shifts' and freeloaded shifts (start or end between 2 and 6 exclusive) by 2 + 'shift_sum_formula' => ' + SUM( + (1 + + ( + (HOUR(FROM_UNIXTIME(`Shifts`.`end`)) > 2 AND HOUR(FROM_UNIXTIME(`Shifts`.`end`)) < 6) + OR (HOUR(FROM_UNIXTIME(`Shifts`.`start`)) > 2 AND HOUR(FROM_UNIXTIME(`Shifts`.`start`)) < 6) + OR (HOUR(FROM_UNIXTIME(`Shifts`.`start`)) <= 2 AND HOUR(FROM_UNIXTIME(`Shifts`.`end`)) >= 6) + ) + ) + * (`Shifts`.`end` - `Shifts`.`start`) + * (1 - 3 * `ShiftEntry`.`freeloaded`) + ) + ', + // weigh every shift the same + //'shift_sum_formula' => 'SUM(`end` - `start`)', + + // voucher calculation + 'voucher_settings' => [ + 'initial_vouchers' => 2, + 'shifts_per_voucher' => 1, + ], + + // Available locales in /locale/ + 'locales' => [ + 'de_DE.UTF-8' => 'Deutsch', + 'en_US.UTF-8' => 'English', + ], + + 'default_locale' => 'en_US.UTF-8', + + // Available T-Shirt sizes, set value to null if not available + 'tshirt_sizes' => [ + '' => _('Please select...'), + 'S' => 'S', + 'M' => 'M', + 'L' => 'L', + 'XL' => 'XL', + '2XL' => '2XL', + '3XL' => '3XL', + '4XL' => '4XL', + '5XL' => '5XL', + 'S-G' => 'S Girl', + 'M-G' => 'M Girl', + 'L-G' => 'L Girl', + 'XL-G' => 'XL Girl', + ], ]; diff --git a/includes/controller/shifts_controller.php b/includes/controller/shifts_controller.php index 71459a10..a1801de6 100644 --- a/includes/controller/shifts_controller.php +++ b/includes/controller/shifts_controller.php @@ -329,9 +329,9 @@ function shift_next_controller() */ function shifts_json_export_all_controller() { - global $api_key; + $api_key = config('api_key'); - if ($api_key == '') { + if (empty($api_key)) { engelsystem_error('Config contains empty apikey.'); } diff --git a/includes/controller/users_controller.php b/includes/controller/users_controller.php index b80fdb4d..84b6bbda 100644 --- a/includes/controller/users_controller.php +++ b/includes/controller/users_controller.php @@ -282,7 +282,6 @@ function users_list_controller() */ function user_password_recovery_set_new_controller() { - global $min_password_length; $user_source = User_by_password_recovery_token($_REQUEST['token']); if ($user_source == null) { error(_('Token is not correct.')); @@ -292,7 +291,10 @@ function user_password_recovery_set_new_controller() if (isset($_REQUEST['submit'])) { $valid = true; - if (isset($_REQUEST['password']) && strlen($_REQUEST['password']) >= $min_password_length) { + if ( + isset($_REQUEST['password']) + && strlen($_REQUEST['password']) >= config('min_password_length') + ) { if ($_REQUEST['password'] != $_REQUEST['password2']) { $valid = false; error(_('Your passwords don\'t match.')); diff --git a/includes/engelsystem_provider.php b/includes/engelsystem_provider.php index 3537f100..8a5723ef 100644 --- a/includes/engelsystem_provider.php +++ b/includes/engelsystem_provider.php @@ -1,5 +1,6 @@ set(require __DIR__ . '/../config/config.default.php'); + +if (file_exists(__DIR__ . '/../config/config.php')) { + $config->set(array_replace_recursive( + $config->get(null), + require __DIR__ . '/../config/config.php' + )); +} + +date_default_timezone_set($config->get('timezone')); + + +/** + * Check for maintenance + */ +if ($config->get('maintenance')) { + echo file_get_contents(__DIR__ . '/../public/maintenance.html'); + die(); +} + + +/** + * Register error handler + */ +$errorHandler = new ExceptionHandler(); +if (config('environment') == 'development') { + $errorHandler->setEnvironment(ExceptionHandler::ENV_DEVELOPMENT); + ini_set('display_errors', true); + error_reporting(E_ALL); +} else { + ini_set('display_errors', false); +} + + +/** + * Connect to database + */ +Db::connect( + 'mysql:host=' . config('database')['host'] . ';dbname=' . config('database')['db'] . ';charset=utf8', + config('database')['user'], + config('database')['pw'] +) || die('Error: Unable to connect to database'); +Db::getPdo()->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + + +/** + * Include legacy code + */ require_once realpath(__DIR__ . '/../includes/sys_auth.php'); require_once realpath(__DIR__ . '/../includes/sys_form.php'); require_once realpath(__DIR__ . '/../includes/sys_log.php'); @@ -71,17 +126,6 @@ require_once realpath(__DIR__ . '/../includes/helper/email_helper.php'); require_once realpath(__DIR__ . '/../includes/mailer/shifts_mailer.php'); require_once realpath(__DIR__ . '/../includes/mailer/users_mailer.php'); -$config = []; -require_once realpath(__DIR__ . '/../config/config.default.php'); -if (file_exists(realpath(__DIR__ . '/../config/config.php'))) { - require_once realpath(__DIR__ . '/../config/config.php'); -} - -if ($maintenance_mode) { - echo file_get_contents(__DIR__ . '/../public/maintenance.html'); - die(); -} - require_once realpath(__DIR__ . '/../includes/pages/admin_active.php'); require_once realpath(__DIR__ . '/../includes/pages/admin_arrive.php'); require_once realpath(__DIR__ . '/../includes/pages/admin_free.php'); @@ -100,20 +144,10 @@ require_once realpath(__DIR__ . '/../includes/pages/user_questions.php'); require_once realpath(__DIR__ . '/../includes/pages/user_settings.php'); require_once realpath(__DIR__ . '/../includes/pages/user_shifts.php'); -$errorHandler = new ExceptionHandler( - ($environment == 'development' - ? ExceptionHandler::ENV_DEVELOPMENT - : ExceptionHandler::ENV_PRODUCTION - ) -); - -Db::connect( - 'mysql:host=' . $config['host'] . ';dbname=' . $config['db'] . ';charset=utf8', - $config['user'], - $config['pw'] -) || die('Error: Unable to connect to database'); -Db::getPdo()->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); +/** + * Init application + */ session_start(); gettext_init(); diff --git a/includes/helper/internationalization_helper.php b/includes/helper/internationalization_helper.php index 7c04ebbd..ed16de15 100644 --- a/includes/helper/internationalization_helper.php +++ b/includes/helper/internationalization_helper.php @@ -1,10 +1,4 @@ 'Deutsch', - 'en_US.UTF-8' => 'English' -]; - -$default_locale = 'en_US.UTF-8'; /** * Return currently active locale @@ -31,7 +25,8 @@ function locale_short() */ function gettext_init() { - global $locales, $default_locale; + $locales = config('locales'); + $default_locale = config('default_locale'); if (isset($_REQUEST['set_locale']) && isset($locales[$_REQUEST['set_locale']])) { $_SESSION['locale'] = $_REQUEST['set_locale']; @@ -67,11 +62,10 @@ function gettext_locale($locale = null) */ function make_langselect() { - global $locales; $url = $_SERVER['REQUEST_URI'] . (strpos($_SERVER['REQUEST_URI'], '?') > 0 ? '&' : '?') . 'set_locale='; $items = []; - foreach ($locales as $locale => $name) { + foreach (config('locales') as $locale => $name) { $items[] = toolbar_item_link( htmlspecialchars($url) . $locale, '', diff --git a/includes/model/User_model.php b/includes/model/User_model.php index 097e8faf..53b4ce1e 100644 --- a/includes/model/User_model.php +++ b/includes/model/User_model.php @@ -215,9 +215,9 @@ function Users($order_by = 'Nick') */ function User_is_freeloader($user) { - global $max_freeloadable_shifts, $user; + global $user; - return count(ShiftEntries_freeloaded_by_user($user)) >= $max_freeloadable_shifts; + return count(ShiftEntries_freeloaded_by_user($user)) >= config('max_freeloadable_shifts'); } /** @@ -542,8 +542,7 @@ function User_generate_password_recovery_token(&$user) */ function User_get_eligable_voucher_count(&$user) { - global $voucher_settings; - + $voucher_settings = config('voucher_settings'); $shifts_done = count(ShiftEntries_finished_by_user($user)); $earned_vouchers = $user['got_voucher'] - $voucher_settings['initial_vouchers']; diff --git a/includes/pages/admin_active.php b/includes/pages/admin_active.php index 275f50ba..8cb66e6e 100644 --- a/includes/pages/admin_active.php +++ b/includes/pages/admin_active.php @@ -15,7 +15,8 @@ function admin_active_title() */ function admin_active() { - global $tshirt_sizes, $shift_sum_formula; + $tshirt_sizes = config('tshirt_sizes'); + $shift_sum_formula = config('shift_sum_formula'); $msg = ''; $search = ''; @@ -208,7 +209,7 @@ function admin_active() $shirt_statistics = []; foreach (array_keys($tshirt_sizes) as $size) { - if ($size != '') { + if (!empty($size)) { $sc = DB::select( 'SELECT count(*) FROM `User` WHERE `Size`=? AND `Gekommen`=1', [$size] diff --git a/includes/pages/admin_user.php b/includes/pages/admin_user.php index 192becb0..2ab40cca 100644 --- a/includes/pages/admin_user.php +++ b/includes/pages/admin_user.php @@ -15,7 +15,14 @@ function admin_user_title() */ function admin_user() { - global $user, $tshirt_sizes, $privileges; + global $user, $privileges; + $tshirt_sizes = config('tshirt_sizes'); + + foreach ($tshirt_sizes as $key => $size) { + if (empty($size)) { + unset($tshirt_sizes[$key]); + } + } $html = ''; diff --git a/includes/pages/guest_login.php b/includes/pages/guest_login.php index 66a06116..2ffa4b98 100644 --- a/includes/pages/guest_login.php +++ b/includes/pages/guest_login.php @@ -33,8 +33,10 @@ function logout_title() */ function guest_register() { - global $tshirt_sizes, $enable_tshirt_size, $default_theme, $user, $min_password_length; - + global $user; + $tshirt_sizes = config('tshirt_sizes'); + $enable_tshirt_size = config('enable_tshirt_size'); + $min_password_length = config('min_password_length'); $event_config = EventConfig(); $msg = ''; @@ -65,6 +67,12 @@ function guest_register() } } + foreach ($tshirt_sizes as $key => $size) { + if (empty($size)) { + unset($tshirt_sizes[$key]); + } + } + if (isset($_REQUEST['submit'])) { $valid = true; @@ -201,7 +209,7 @@ function guest_register() VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW(), ?, NULL, ?) ', [ - $default_theme, + config('default_theme'), $nick, $preName, $lastName, diff --git a/includes/pages/guest_stats.php b/includes/pages/guest_stats.php index 4add3e97..6b6f0572 100644 --- a/includes/pages/guest_stats.php +++ b/includes/pages/guest_stats.php @@ -4,10 +4,10 @@ use Engelsystem\Database\DB; function guest_stats() { - global $api_key; + $apiKey = config('api_key'); if (isset($_REQUEST['api_key'])) { - if ($_REQUEST['api_key'] == $api_key) { + if ($_REQUEST['api_key'] == $apiKey && !empty($apiKey)) { $stats = []; list($user_count) = DB::select('SELECT count(*) AS `user_count` FROM `User`'); diff --git a/includes/pages/user_atom.php b/includes/pages/user_atom.php index 3c4b631d..5574e8eb 100644 --- a/includes/pages/user_atom.php +++ b/includes/pages/user_atom.php @@ -7,7 +7,7 @@ use Engelsystem\Database\DB; */ function user_atom() { - global $user, $display_news; + global $user; if (!isset($_REQUEST['key']) || !preg_match('/^[\da-f]{32}$/', $_REQUEST['key'])) { engelsystem_error('Missing key.'); @@ -27,7 +27,7 @@ function user_atom() FROM `News` ' . (empty($_REQUEST['meetings']) ? '' : 'WHERE `Treffen` = 1 ') . ' ORDER BY `ID` - DESC LIMIT ' . (int)$display_news + DESC LIMIT ' . (int)config('display_news') ); $output = make_atom_entries_from_news($news); diff --git a/includes/pages/user_myshifts.php b/includes/pages/user_myshifts.php index acb78875..62d87d27 100644 --- a/includes/pages/user_myshifts.php +++ b/includes/pages/user_myshifts.php @@ -17,7 +17,6 @@ function myshifts_title() */ function user_myshifts() { - global $last_unsubscribe; global $user, $privileges; if ( @@ -144,7 +143,10 @@ function user_myshifts() ); if (count($shift) > 0) { $shift = array_shift($shift); - if (($shift['start'] > time() + $last_unsubscribe * 3600) || in_array('user_shifts_admin', $privileges)) { + if ( + ($shift['start'] > time() + config('last_unsubscribe') * 3600) + || in_array('user_shifts_admin', $privileges) + ) { $result = ShiftEntry_delete($user_id); if ($result === false) { engelsystem_error('Unable to delete shift entry.'); diff --git a/includes/pages/user_news.php b/includes/pages/user_news.php index 69d20e69..b1e337b6 100644 --- a/includes/pages/user_news.php +++ b/includes/pages/user_news.php @@ -31,8 +31,7 @@ function meetings_title() */ function user_meetings() { - global $display_news; - + $display_news = config('display_news'); $html = '

        ' . meetings_title() . '

        ' . msg(); if (isset($_REQUEST['page']) && preg_match('/^\d{1,}$/', $_REQUEST['page'])) { @@ -178,7 +177,8 @@ function user_news_comments() */ function user_news() { - global $display_news, $privileges, $user; + global $privileges, $user; + $display_news = config('display_news'); $html = '

        ' . news_title() . '

        ' . msg(); diff --git a/includes/pages/user_settings.php b/includes/pages/user_settings.php index 5d4ba368..a2a486f4 100644 --- a/includes/pages/user_settings.php +++ b/includes/pages/user_settings.php @@ -97,13 +97,12 @@ function user_settings_main($user_source, $enable_tshirt_size, $tshirt_sizes) */ function user_settings_password($user_source) { - global $min_password_length; if ( !isset($_REQUEST['password']) || !verify_password($_REQUEST['password'], $user_source['Passwort'], $user_source['UID']) ) { error(_('-> not OK. Please try again.')); - } elseif (strlen($_REQUEST['new_password']) < $min_password_length) { + } elseif (strlen($_REQUEST['new_password']) < config('min_password_length')) { error(_('Your password is to short (please use at least 6 characters).')); } elseif ($_REQUEST['new_password'] != $_REQUEST['new_password2']) { error(_('Your passwords don\'t match.')); @@ -195,8 +194,11 @@ function user_settings_locale($user_source, $locales) */ function user_settings() { - global $enable_tshirt_size, $tshirt_sizes, $themes, $locales; - global $user; + global $themes, $user; + + $enable_tshirt_size = config('enable_tshirt_size'); + $tshirt_sizes = config('tshirt_sizes'); + $locales = config('locales'); $buildup_start_date = null; $teardown_end_date = null; @@ -210,6 +212,12 @@ function user_settings() } } + foreach ($tshirt_sizes as $key => $size) { + if (empty($size)) { + unset($tshirt_sizes[$key]); + } + } + $user_source = $user; if (isset($_REQUEST['submit'])) { diff --git a/includes/sys_auth.php b/includes/sys_auth.php index 083c1b8d..856ed4ab 100644 --- a/includes/sys_auth.php +++ b/includes/sys_auth.php @@ -59,7 +59,6 @@ function generate_salt($length = 16) */ function set_password($uid, $password) { - global $crypt_alg; $result = DB::update(' UPDATE `User` SET `Passwort` = ?, @@ -68,7 +67,7 @@ function set_password($uid, $password) LIMIT 1 ', [ - crypt($password, $crypt_alg . '$' . generate_salt(16) . '$'), + crypt($password, config('crypt_alg') . '$' . generate_salt(16) . '$'), $uid ] ); @@ -89,7 +88,7 @@ function set_password($uid, $password) */ function verify_password($password, $salt, $uid = null) { - global $crypt_alg; + $crypt_alg = config('crypt_alg'); $correct = false; if (substr($salt, 0, 1) == '$') { // new-style crypt() $correct = crypt($password, $salt) == $salt; diff --git a/includes/view/AngelTypes_view.php b/includes/view/AngelTypes_view.php index be866c9b..bd258d3a 100644 --- a/includes/view/AngelTypes_view.php +++ b/includes/view/AngelTypes_view.php @@ -443,14 +443,12 @@ function AngelTypes_about_view_angeltype($angeltype) */ function AngelTypes_about_view($angeltypes, $user_logged_in) { - global $faq_url; - $content = [ buttons([ !$user_logged_in ? button(page_link_to('register'), register_title()) : '', !$user_logged_in ? button(page_link_to('login'), login_title()) : '', $user_logged_in ? button(page_link_to('angeltypes'), angeltypes_title(), 'back') : '', - button($faq_url, _('FAQ'), 'btn-primary') + button(config('faq_url'), _('FAQ'), 'btn-primary') ]), '

        ' . _('Here is the list of teams and their tasks. If you have questions, read the FAQ.') . '

        ', '
        ' diff --git a/includes/view/User_view.php b/includes/view/User_view.php index 50c54f5a..932614a7 100644 --- a/includes/view/User_view.php +++ b/includes/view/User_view.php @@ -1,24 +1,5 @@ _('Please select...'), - 'S' => 'S', - 'M' => 'M', - 'L' => 'L', - 'XL' => 'XL', - '2XL' => '2XL', - '3XL' => '3XL', - '4XL' => '4XL', - '5XL' => '5XL', - 'S-G' => 'S Girl', - 'M-G' => 'M Girl', - 'L-G' => 'L Girl', - 'XL-G' => 'XL Girl' -]; - /** * Renders user settings page * @@ -335,7 +316,7 @@ function User_view_shiftentries($needed_angel_type) */ function User_view_myshift($shift, $user_source, $its_me) { - global $last_unsubscribe, $privileges; + global $privileges; $shift_info = '' . $shift['name'] . ''; if ($shift['title']) { @@ -371,7 +352,10 @@ function User_view_myshift($shift, $user_source, $its_me) 'btn-xs' ); } - if (($shift['start'] > time() + $last_unsubscribe * 3600) || in_array('user_shifts_admin', $privileges)) { + if ( + ($shift['start'] > time() + config('last_unsubscribe') * 3600) + || in_array('user_shifts_admin', $privileges) + ) { $myshift['actions'][] = button( page_link_to('user_myshifts') . ((!$its_me) ? '&id=' . $user_source['UID'] : '') . '&cancel=' . $shift['id'], glyph('trash') . _('sign off'), @@ -646,12 +630,12 @@ function render_user_departure_date_hint() */ function render_user_freeloader_hint() { - global $user, $max_freeloadable_shifts; + global $user; if (User_is_freeloader($user)) { return sprintf( _('You freeloaded at least %s shifts. Shift signup is locked. Please go to heavens desk to be unlocked again.'), - $max_freeloadable_shifts + config('max_freeloadable_shifts') ); } @@ -679,9 +663,9 @@ function render_user_arrived_hint() */ function render_user_tshirt_hint() { - global $enable_tshirt_size, $user; + global $user; - if ($enable_tshirt_size && $user['Size'] == '') { + if (config('enable_tshirt_size') && $user['Size'] == '') { return _('You need to specify a tshirt size in your settings!'); } diff --git a/public/index.php b/public/index.php index 12d6f744..4e5dab03 100644 --- a/public/index.php +++ b/public/index.php @@ -169,7 +169,7 @@ if ( $event_config = EventConfig(); echo template_render(__DIR__ . '/../templates/layout.html', [ - 'theme' => isset($user) ? $user['color'] : $default_theme, + 'theme' => isset($user) ? $user['color'] : config('default_theme'), 'title' => $title, 'atom_link' => ($page == 'news' || $page == 'user_meetings') ? ' '; echo sprintf('%s: (%s)' . PHP_EOL, ucfirst($type), $number); var_export([ 'string' => $string, 'file' => $file . ':' . $line, - 'context' => ($this->environment == self::ENV_DEBUGGING ? $context : null), + 'context' => ($this->environment == self::ENV_DEVELOPMENT ? $context : null), ]); echo ''; die(); diff --git a/src/helpers.php b/src/helpers.php new file mode 100644 index 00000000..aeb256e9 --- /dev/null +++ b/src/helpers.php @@ -0,0 +1,24 @@ +set($key); + } + + return Config::getInstance()->get($key, $default); +} -- cgit v1.2.3-70-g09d2 From 3de0cc840f45e53a9135f4faa44a375a7b0148ef Mon Sep 17 00:00:00 2001 From: Bot Date: Sun, 22 Jan 2017 01:02:52 +0100 Subject: Removed spaces --- config/config.default.php | 2 +- includes/model/AngelType_model.php | 22 +++++++++++----------- includes/model/EventConfig_model.php | 2 +- includes/model/ShiftTypes_model.php | 2 +- includes/model/Shifts_model.php | 24 ++++++++++++------------ includes/model/UserAngelTypes_model.php | 16 ++++++++-------- includes/model/User_model.php | 3 +-- includes/pages/admin_active.php | 7 +++---- includes/pages/admin_free.php | 10 +++++----- includes/pages/admin_news.php | 2 +- includes/pages/admin_questions.php | 3 +-- includes/pages/admin_user.php | 2 +- includes/pages/user_atom.php | 2 +- includes/pages/user_myshifts.php | 4 ++-- includes/sys_template.php | 8 ++++---- includes/view/UserDriverLicenses_view.php | 2 +- 16 files changed, 54 insertions(+), 57 deletions(-) (limited to 'includes/view') diff --git a/config/config.default.php b/config/config.default.php index 437399e3..c7a79fc4 100644 --- a/config/config.default.php +++ b/config/config.default.php @@ -59,7 +59,7 @@ return [ // multiply 'night shifts' and freeloaded shifts (start or end between 2 and 6 exclusive) by 2 'shift_sum_formula' => ' SUM( - (1 + + (1 + ( (HOUR(FROM_UNIXTIME(`Shifts`.`end`)) > 2 AND HOUR(FROM_UNIXTIME(`Shifts`.`end`)) < 6) OR (HOUR(FROM_UNIXTIME(`Shifts`.`start`)) > 2 AND HOUR(FROM_UNIXTIME(`Shifts`.`start`)) < 6) diff --git a/includes/model/AngelType_model.php b/includes/model/AngelType_model.php index 411c69ea..d437f526 100644 --- a/includes/model/AngelType_model.php +++ b/includes/model/AngelType_model.php @@ -82,7 +82,7 @@ function AngelType_contact_info($angeltype) function AngelType_delete($angeltype) { $result = DB::delete(' - DELETE FROM `AngelTypes` + DELETE FROM `AngelTypes` WHERE `id`=? LIMIT 1 ', [$angeltype['id']]); @@ -102,8 +102,8 @@ function AngelType_delete($angeltype) function AngelType_update($angeltype) { $result = DB::update(' - UPDATE `AngelTypes` SET - `name` = ?, + UPDATE `AngelTypes` SET + `name` = ?, `restricted` = ?, `description` = ?, `requires_driver_license` = ?, @@ -201,7 +201,7 @@ function AngelType_validate_name($name, $angeltype) if ($angeltype != null && isset($angeltype['id'])) { $valid = (count(DB::select(' SELECT `id` - FROM `AngelTypes` + FROM `AngelTypes` WHERE `name`=? AND NOT `id`=? LIMIT 1 @@ -209,8 +209,8 @@ function AngelType_validate_name($name, $angeltype) return new ValidationResult($valid, $name); } $valid = (count(DB::select(' - SELECT `id` - FROM `AngelTypes` + SELECT `id` + FROM `AngelTypes` WHERE `name`=? LIMIT 1', [$name])) == 0); return new ValidationResult($valid, $name); @@ -225,12 +225,12 @@ function AngelType_validate_name($name, $angeltype) function AngelTypes_with_user($user) { $result = DB::select(' - SELECT `AngelTypes`.*, + SELECT `AngelTypes`.*, `UserAngelTypes`.`id` AS `user_angeltype_id`, `UserAngelTypes`.`confirm_user_id`, `UserAngelTypes`.`supporter` - FROM `AngelTypes` - LEFT JOIN `UserAngelTypes` ON `AngelTypes`.`id`=`UserAngelTypes`.`angeltype_id` + FROM `AngelTypes` + LEFT JOIN `UserAngelTypes` ON `AngelTypes`.`id`=`UserAngelTypes`.`angeltype_id` AND `UserAngelTypes`.`user_id` = ? ORDER BY `name`', [$user['UID']]); @@ -248,8 +248,8 @@ function AngelTypes_with_user($user) function AngelTypes() { $result = DB::select(' - SELECT * - FROM `AngelTypes` + SELECT * + FROM `AngelTypes` ORDER BY `name`'); if (DB::getStm()->errorCode() != '00000') { diff --git a/includes/model/EventConfig_model.php b/includes/model/EventConfig_model.php index 773ee2e0..f5846870 100644 --- a/includes/model/EventConfig_model.php +++ b/includes/model/EventConfig_model.php @@ -70,7 +70,7 @@ function EventConfig_update( `buildup_start_date` = ?, `event_start_date` = ?, `event_end_date` = ?, - `teardown_end_date` = ?, + `teardown_end_date` = ?, `event_welcome_msg` = ? ', [ diff --git a/includes/model/ShiftTypes_model.php b/includes/model/ShiftTypes_model.php index 4919875b..96a823d4 100644 --- a/includes/model/ShiftTypes_model.php +++ b/includes/model/ShiftTypes_model.php @@ -26,7 +26,7 @@ function ShiftType_update($shifttype_id, $name, $angeltype_id, $description) { DB::update(' UPDATE `ShiftTypes` SET - `name`=?, + `name`=?, `angeltype_id`=?, `description`=? WHERE `id`=? diff --git a/includes/model/Shifts_model.php b/includes/model/Shifts_model.php index c70ba830..faa37d59 100644 --- a/includes/model/Shifts_model.php +++ b/includes/model/Shifts_model.php @@ -35,9 +35,9 @@ function Shifts_by_ShiftsFilter(ShiftsFilter $shiftsFilter) AND `NeededAngelTypes`.`angel_type_id` IN (' . implode(',', $shiftsFilter->getTypes()) . ') AND `NeededAngelTypes`.`count` > 0 AND `Shifts`.`PSID` IS NULL - + UNION - + SELECT DISTINCT `Shifts`.*, `ShiftTypes`.`name`, `Room`.`Name` AS `room_name` FROM `Shifts` JOIN `Room` USING (`RID`) @@ -48,7 +48,7 @@ function Shifts_by_ShiftsFilter(ShiftsFilter $shiftsFilter) AND `NeededAngelTypes`.`angel_type_id` IN (' . implode(',', $shiftsFilter->getTypes()) . ') AND `NeededAngelTypes`.`count` > 0 AND NOT `Shifts`.`PSID` IS NULL) AS tmp_shifts - + ORDER BY `start`'; $result = DB::select($sql); if (DB::getStm()->errorCode() != '00000') { @@ -122,9 +122,9 @@ function NeededAngeltype_by_Shift_and_Angeltype($shift, $angeltype) WHERE `Shifts`.`SID`=? AND `AngelTypes`.`id`=? AND `Shifts`.`PSID` IS NULL - + UNION - + SELECT `NeededAngelTypes`.*, `Shifts`.`SID`, @@ -532,12 +532,12 @@ function Shifts_by_user($user, $include_freeload_comments = false) SELECT `ShiftTypes`.`id` AS `shifttype_id`, `ShiftTypes`.`name`, `ShiftEntry`.`id`, `ShiftEntry`.`SID`, `ShiftEntry`.`TID`, `ShiftEntry`.`UID`, `ShiftEntry`.`freeloaded`, `ShiftEntry`.`Comment`, ' . ($include_freeload_comments ? '`ShiftEntry`.`freeload_comment`, ' : '') . ' - `Shifts`.*, `Room`.* - FROM `ShiftEntry` - JOIN `Shifts` ON (`ShiftEntry`.`SID` = `Shifts`.`SID`) + `Shifts`.*, `Room`.* + FROM `ShiftEntry` + JOIN `Shifts` ON (`ShiftEntry`.`SID` = `Shifts`.`SID`) JOIN `ShiftTypes` ON (`ShiftTypes`.`id` = `Shifts`.`shifttype_id`) - JOIN `Room` ON (`Shifts`.`RID` = `Room`.`RID`) - WHERE `UID` = ? + JOIN `Room` ON (`Shifts`.`RID` = `Room`.`RID`) + WHERE `UID` = ? ORDER BY `start` ', [ @@ -560,7 +560,7 @@ function Shift($shift_id) { $shifts_source = DB::select(' SELECT `Shifts`.*, `ShiftTypes`.`name` - FROM `Shifts` + FROM `Shifts` JOIN `ShiftTypes` ON (`ShiftTypes`.`id` = `Shifts`.`shifttype_id`) WHERE `SID`=?', [$shift_id]); @@ -603,7 +603,7 @@ function Shift($shift_id) function Shifts() { $shifts_source = DB::select(' - SELECT `ShiftTypes`.`name`, `Shifts`.*, `Room`.`RID`, `Room`.`Name` AS `room_name` + SELECT `ShiftTypes`.`name`, `Shifts`.*, `Room`.`RID`, `Room`.`Name` AS `room_name` FROM `Shifts` JOIN `ShiftTypes` ON (`ShiftTypes`.`id` = `Shifts`.`shifttype_id`) JOIN `Room` ON `Room`.`RID` = `Shifts`.`RID` diff --git a/includes/model/UserAngelTypes_model.php b/includes/model/UserAngelTypes_model.php index b27724c3..82f390ee 100644 --- a/includes/model/UserAngelTypes_model.php +++ b/includes/model/UserAngelTypes_model.php @@ -16,7 +16,7 @@ use Engelsystem\Database\DB; function UserAngelType_exists($user, $angeltype) { return count(DB::select(' - SELECT `id` + SELECT `id` FROM `UserAngelTypes` WHERE `UserAngelTypes`.`user_id`=? AND `angeltype_id`=? @@ -55,10 +55,10 @@ function User_angeltypes($user) function User_unconfirmed_AngelTypes($user) { $result = DB::select(' - SELECT - `UserAngelTypes`.*, - `AngelTypes`.`name`, - count(`UnconfirmedMembers`.`user_id`) AS `count` + SELECT + `UserAngelTypes`.*, + `AngelTypes`.`name`, + count(`UnconfirmedMembers`.`user_id`) AS `count` FROM `UserAngelTypes` JOIN `AngelTypes` ON `UserAngelTypes`.`angeltype_id`=`AngelTypes`.`id` JOIN `UserAngelTypes` AS `UnconfirmedMembers` ON `UserAngelTypes`.`angeltype_id`=`UnconfirmedMembers`.`angeltype_id` @@ -90,8 +90,8 @@ function User_is_AngelType_supporter(&$user, $angeltype) $user['privileges'] = privileges_for_user($user['UID']); } return (count(DB::select(' - SELECT `id` - FROM `UserAngelTypes` + SELECT `id` + FROM `UserAngelTypes` WHERE `user_id`=? AND `angeltype_id`=? AND `supporter`=TRUE @@ -201,7 +201,7 @@ function UserAngelType_confirm($user_angeltype_id, $confirm_user) function UserAngelType_delete($user_angeltype) { return (bool)DB::delete(' - DELETE FROM `UserAngelTypes` + DELETE FROM `UserAngelTypes` WHERE `id`=? LIMIT 1', [$user_angeltype['id']]); } diff --git a/includes/model/User_model.php b/includes/model/User_model.php index 53b4ce1e..2913c1a1 100644 --- a/includes/model/User_model.php +++ b/includes/model/User_model.php @@ -486,8 +486,7 @@ function User_by_password_recovery_token($token) function User_reset_api_key(&$user, $log = true) { $user['api_key'] = md5($user['Nick'] . time() . rand()); - DB::update( - ' + DB::update(' UPDATE `User` SET `api_key`=? WHERE `UID`=? diff --git a/includes/pages/admin_active.php b/includes/pages/admin_active.php index 8cb66e6e..d21afabe 100644 --- a/includes/pages/admin_active.php +++ b/includes/pages/admin_active.php @@ -53,8 +53,7 @@ function admin_active() } if (isset($_REQUEST['ack'])) { DB::update('UPDATE `User` SET `Aktiv` = 0 WHERE `Tshirt` = 0'); - $users = DB::select(sprintf( - ' + $users = DB::select(sprintf(' SELECT `User`.*, COUNT(`ShiftEntry`.`id`) AS `shift_count`, @@ -137,11 +136,11 @@ function admin_active() `User`.*, COUNT(`ShiftEntry`.`id`) AS `shift_count`, %s AS `shift_length` - FROM `User` LEFT JOIN `ShiftEntry` ON `User`.`UID` = `ShiftEntry`.`UID` + FROM `User` LEFT JOIN `ShiftEntry` ON `User`.`UID` = `ShiftEntry`.`UID` LEFT JOIN `Shifts` ON `ShiftEntry`.`SID` = `Shifts`.`SID` ' . ($show_all_shifts ? '' : 'AND (`Shifts`.`end` < ' . time() . " OR `Shifts`.`end` IS NULL)") . ' WHERE `User`.`Gekommen` = 1 - GROUP BY `User`.`UID` + GROUP BY `User`.`UID` ORDER BY `force_active` DESC, `shift_length` DESC %s ', diff --git a/includes/pages/admin_free.php b/includes/pages/admin_free.php index 630603ba..daaead22 100644 --- a/includes/pages/admin_free.php +++ b/includes/pages/admin_free.php @@ -44,10 +44,10 @@ function admin_free() } $users = DB::select(' - SELECT `User`.* - FROM `User` + SELECT `User`.* + FROM `User` ' . $angelTypeSearch . ' - LEFT JOIN `ShiftEntry` ON `User`.`UID` = `ShiftEntry`.`UID` + LEFT JOIN `ShiftEntry` ON `User`.`UID` = `ShiftEntry`.`UID` LEFT JOIN `Shifts` ON ( `ShiftEntry`.`SID` = `Shifts`.`SID` @@ -55,8 +55,8 @@ function admin_free() AND `Shifts`.`end` > ? ) WHERE `User`.`Gekommen` = 1 - AND `Shifts`.`SID` IS NULL - GROUP BY `User`.`UID` + AND `Shifts`.`SID` IS NULL + GROUP BY `User`.`UID` ORDER BY `Nick` ', [ diff --git a/includes/pages/admin_news.php b/includes/pages/admin_news.php index a814bc33..bc242831 100644 --- a/includes/pages/admin_news.php +++ b/includes/pages/admin_news.php @@ -46,7 +46,7 @@ function admin_news() case 'save': DB::update(' - UPDATE `News` SET + UPDATE `News` SET `Datum`=?, `Betreff`=?, `Text`=?, diff --git a/includes/pages/admin_questions.php b/includes/pages/admin_questions.php index 4c84e4f8..098701e3 100644 --- a/includes/pages/admin_questions.php +++ b/includes/pages/admin_questions.php @@ -116,8 +116,7 @@ function admin_questions() )); if ($answer != '') { - DB::update( - ' + DB::update(' UPDATE `Questions` SET `AID`=?, `Answer`=? WHERE `QID`=? diff --git a/includes/pages/admin_user.php b/includes/pages/admin_user.php index 2ab40cca..60349676 100644 --- a/includes/pages/admin_user.php +++ b/includes/pages/admin_user.php @@ -247,7 +247,7 @@ function admin_user() $force_active = $_REQUEST['force_active']; } $sql = ' - UPDATE `User` SET + UPDATE `User` SET `Nick` = ?, `Name` = ?, `Vorname` = ?, diff --git a/includes/pages/user_atom.php b/includes/pages/user_atom.php index 5574e8eb..d7c77d52 100644 --- a/includes/pages/user_atom.php +++ b/includes/pages/user_atom.php @@ -24,7 +24,7 @@ function user_atom() $news = DB::select(' SELECT * - FROM `News` + FROM `News` ' . (empty($_REQUEST['meetings']) ? '' : 'WHERE `Treffen` = 1 ') . ' ORDER BY `ID` DESC LIMIT ' . (int)config('display_news') diff --git a/includes/pages/user_myshifts.php b/includes/pages/user_myshifts.php index 62d87d27..6048093a 100644 --- a/includes/pages/user_myshifts.php +++ b/includes/pages/user_myshifts.php @@ -132,8 +132,8 @@ function user_myshifts() $user_id = $_REQUEST['cancel']; $shift = DB::select(' SELECT * - FROM `Shifts` - INNER JOIN `ShiftEntry` USING (`SID`) + FROM `Shifts` + INNER JOIN `ShiftEntry` USING (`SID`) WHERE `ShiftEntry`.`id`=? AND `UID`=? ', [ diff --git a/includes/sys_template.php b/includes/sys_template.php index 107609ad..7aa458b8 100644 --- a/includes/sys_template.php +++ b/includes/sys_template.php @@ -186,10 +186,10 @@ function toolbar_popover($glyphicon, $label, $content, $class = '') -
        + +
        @@ -17,7 +19,7 @@
        %start_select%
        -
        -
        %task_notice%
        - +
        %assign_notice%
        +
        +
        +

        %task_notice%

        +
        -- cgit v1.2.3-70-g09d2 From db8b6b25202efb2011d15afc28d748177b2bc819 Mon Sep 17 00:00:00 2001 From: msquare Date: Sat, 16 Sep 2017 17:14:45 +0200 Subject: change shift renderer global add user link --- includes/controller/shift_entries_controller.php | 11 ++++++++--- includes/view/ShiftCalendarShiftRenderer.php | 14 ++++++-------- public/.htaccess | 2 +- 3 files changed, 15 insertions(+), 12 deletions(-) (limited to 'includes/view') diff --git a/includes/controller/shift_entries_controller.php b/includes/controller/shift_entries_controller.php index 150db2e9..15aeaab1 100644 --- a/includes/controller/shift_entries_controller.php +++ b/includes/controller/shift_entries_controller.php @@ -32,14 +32,19 @@ function shift_entry_add_controller() } $shift['Name'] = $room_array[$shift['RID']]; - $type_id = 0; + $type_id = null; if ($request->has('type_id') && preg_match('/^\d+$/', $request->input('type_id'))) { $type_id = $request->input('type_id'); - } else { - redirect(page_link_to('user_shifts')); } if (in_array('user_shifts_admin', $privileges) || in_array('shiftentry_edit_angeltype_supporter', $privileges)) { + if($type_id == null) { + // If no angeltype id is given, then select first existing angeltype. + $needed_angeltypes = NeededAngelTypes_by_shift($shift_id); + if(count($needed_angeltypes) > 0) { + $type_id = $needed_angeltypes[0]['id']; + } + } $type = AngelType($type_id); } else { // TODO: Move queries to model diff --git a/includes/view/ShiftCalendarShiftRenderer.php b/includes/view/ShiftCalendarShiftRenderer.php index 0e5fc8c3..3e59d61a 100644 --- a/includes/view/ShiftCalendarShiftRenderer.php +++ b/includes/view/ShiftCalendarShiftRenderer.php @@ -124,14 +124,12 @@ class ShiftCalendarShiftRenderer } if (in_array('user_shifts_admin', $privileges)) { - $html .= '
      • ' . _('Add more angels') . ':'; - foreach ($needed_angeltypes as $angeltype) { - $html .= ' ' . button( - page_link_to('user_shifts', ['shift_id' => $shift['SID'], 'type_id' => $angeltype['id']]), - $angeltype['name'], - 'btn-xs' - ); - } + $html .= '
      • '; + $html .= button( + page_link_to('user_shifts', ['shift_id' => $shift['SID']]), + glyph('plus') . _('Add more angels'), + 'btn-xs' + ); $html .= '
      • '; } if ($html != '') { diff --git a/public/.htaccess b/public/.htaccess index 60c6685d..51e78c35 100644 --- a/public/.htaccess +++ b/public/.htaccess @@ -1,6 +1,6 @@ RewriteEngine on - RewriteBase / + # RewriteBase / RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f -- cgit v1.2.3-70-g09d2 From 945fcb079a219fa29e8f6ee1afc3f1c0c5c822cb Mon Sep 17 00:00:00 2001 From: Igor Scheller Date: Wed, 20 Sep 2017 12:18:08 +0200 Subject: Added registration_enabled configuration --- config/config.default.php | 3 +++ includes/pages/guest_login.php | 12 ++++++++++-- includes/sys_menu.php | 2 +- includes/view/AngelTypes_view.php | 26 ++++++++++++++++++++------ 4 files changed, 34 insertions(+), 9 deletions(-) (limited to 'includes/view') diff --git a/config/config.default.php b/config/config.default.php index 419b02d1..c2d742ef 100644 --- a/config/config.default.php +++ b/config/config.default.php @@ -44,6 +44,9 @@ return [ // Number of News shown on one site 'display_news' => 6, + // Users are able to sign up + 'registration_enabled' => true, + // Only arrived angels can sign up for shifts 'signup_requires_arrival' => false, diff --git a/includes/pages/guest_login.php b/includes/pages/guest_login.php index 9179c6c4..0577951f 100644 --- a/includes/pages/guest_login.php +++ b/includes/pages/guest_login.php @@ -33,7 +33,7 @@ function logout_title() */ function guest_register() { - global $user; + global $user, $privileges; $tshirt_sizes = config('tshirt_sizes'); $enable_tshirt_size = config('enable_tshirt_size'); $min_password_length = config('min_password_length'); @@ -75,6 +75,14 @@ function guest_register() } } + if (!in_array('register', $privileges) || (!isset($user) && !config('registration_enabled'))) { + error(_('Registration is disabled.')); + + return page_with_title(register_title(), [ + msg(), + ]); + } + if ($request->has('submit')) { $valid = true; @@ -496,7 +504,7 @@ function get_register_hint() { global $privileges; - if (in_array('register', $privileges)) { + if (in_array('register', $privileges) && config('registration_enabled')) { return join('', [ '

        ' . _('Please sign up, if you want to help us!') . '

        ', buttons([ diff --git a/includes/sys_menu.php b/includes/sys_menu.php index 2eaa1234..385a6948 100644 --- a/includes/sys_menu.php +++ b/includes/sys_menu.php @@ -59,7 +59,7 @@ function header_toolbar() ); } - if (!isset($user) && in_array('register', $privileges)) { + if (!isset($user) && in_array('register', $privileges) && config('registration_enabled')) { $toolbar_items[] = toolbar_item_link(page_link_to('register'), 'plus', register_title(), $page == 'register'); } diff --git a/includes/view/AngelTypes_view.php b/includes/view/AngelTypes_view.php index f75cc616..baf0e04a 100644 --- a/includes/view/AngelTypes_view.php +++ b/includes/view/AngelTypes_view.php @@ -475,13 +475,27 @@ function AngelTypes_about_view_angeltype($angeltype) */ function AngelTypes_about_view($angeltypes, $user_logged_in) { + global $privileges; + + $buttons = []; + + if ($user_logged_in) { + $buttons[] = button(page_link_to('angeltypes'), angeltypes_title(), 'back'); + } else { + if (in_array('register', $privileges) && config('registration_enabled')) { + $buttons[] = button(page_link_to('register'), register_title()); + } + + $buttons[] = button(page_link_to('login'), login_title()); + } + + $faqUrl = config('faq_url'); + if (!empty($faqUrl)) { + $buttons[] = button($faqUrl, _('FAQ'), 'btn-primary'); + } + $content = [ - buttons([ - !$user_logged_in ? button(page_link_to('register'), register_title()) : '', - !$user_logged_in ? button(page_link_to('login'), login_title()) : '', - $user_logged_in ? button(page_link_to('angeltypes'), angeltypes_title(), 'back') : '', - button(config('faq_url'), _('FAQ'), 'btn-primary') - ]), + buttons($buttons), '

        ' . _('Here is the list of teams and their tasks. If you have questions, read the FAQ.') . '

        ', '
        ' ]; -- cgit v1.2.3-70-g09d2 From d34b160b5c6200a24d9bbe1235b44e1c300ef1f0 Mon Sep 17 00:00:00 2001 From: Igor Scheller Date: Sun, 19 Nov 2017 16:29:51 +0100 Subject: Added links to notifications, closes #357 --- includes/view/User_view.php | 38 ++++++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 6 deletions(-) (limited to 'includes/view') diff --git a/includes/view/User_view.php b/includes/view/User_view.php index c1e6f49e..fb8715b7 100644 --- a/includes/view/User_view.php +++ b/includes/view/User_view.php @@ -620,9 +620,32 @@ function User_groups_render($user_groups) */ function User_Nick_render($user_source) { - return ' ' . htmlspecialchars($user_source['Nick']) . ''; + return render_profile_link( + ' ' . htmlspecialchars($user_source['Nick']) . '', + $user_source['UID'], + ($user_source['Gekommen'] ? '' : 'text-muted') + ); +} + +/** + * @param string $text + * @param int $user_id + * @param string $class + * @return string + */ +function render_profile_link($text, $user_id = null, $class = '') +{ + $profile_link = page_link_to('user-settings'); + if (!is_null($user_id)) { + $profile_link = page_link_to('users', ['action' => 'view', 'user_id' => $user_id]); + } + + return sprintf( + '%s', + $class, + $profile_link, + $text + ); } /** @@ -633,7 +656,8 @@ function render_user_departure_date_hint() global $user; if (!isset($user['planned_departure_date']) || $user['planned_departure_date'] == null) { - return _('Please enter your planned date of departure on your settings page to give us a feeling for teardown capacities.'); + $text = _('Please enter your planned date of departure on your settings page to give us a feeling for teardown capacities.'); + return render_profile_link($text); } return null; @@ -680,7 +704,8 @@ function render_user_tshirt_hint() global $user; if (config('enable_tshirt_size') && $user['Size'] == '') { - return _('You need to specify a tshirt size in your settings!'); + $text = _('You need to specify a tshirt size in your settings!'); + return render_profile_link($text); } return null; @@ -694,7 +719,8 @@ function render_user_dect_hint() global $user; if ($user['DECT'] == '') { - return _('You need to specify a DECT phone number in your settings! If you don\'t have a DECT phone, just enter \'-\'.'); + $text = _('You need to specify a DECT phone number in your settings! If you don\'t have a DECT phone, just enter \'-\'.'); + return render_profile_link($text); } return null; -- cgit v1.2.3-70-g09d2 From b95d4ece8ab28ff4821a8aeb471396ed30a94912 Mon Sep 17 00:00:00 2001 From: msquare Date: Sun, 19 Nov 2017 16:41:20 +0100 Subject: increase readability of hints with links, refs #357 --- includes/view/User_view.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'includes/view') diff --git a/includes/view/User_view.php b/includes/view/User_view.php index fb8715b7..cb2af7c0 100644 --- a/includes/view/User_view.php +++ b/includes/view/User_view.php @@ -657,7 +657,7 @@ function render_user_departure_date_hint() if (!isset($user['planned_departure_date']) || $user['planned_departure_date'] == null) { $text = _('Please enter your planned date of departure on your settings page to give us a feeling for teardown capacities.'); - return render_profile_link($text); + return render_profile_link($text, null, 'alert-link'); } return null; @@ -705,7 +705,7 @@ function render_user_tshirt_hint() if (config('enable_tshirt_size') && $user['Size'] == '') { $text = _('You need to specify a tshirt size in your settings!'); - return render_profile_link($text); + return render_profile_link($text, null, 'alert-link'); } return null; @@ -720,7 +720,7 @@ function render_user_dect_hint() if ($user['DECT'] == '') { $text = _('You need to specify a DECT phone number in your settings! If you don\'t have a DECT phone, just enter \'-\'.'); - return render_profile_link($text); + return render_profile_link($text, null, 'alert-link'); } return null; -- cgit v1.2.3-70-g09d2 From d8476f244dd0ee1bccaab53f123fa12f2a9c9501 Mon Sep 17 00:00:00 2001 From: msquare Date: Fri, 24 Nov 2017 10:02:52 +0100 Subject: complete feature contact info for angeltypes, fixes #275 --- db/update.sql | 4 ++ includes/controller/angeltypes_controller.php | 4 ++ includes/model/AngelType_model.php | 69 +++++++-------------------- includes/sys_template.php | 14 ++++++ includes/view/AngelTypes_view.php | 33 +++++++++++-- 5 files changed, 68 insertions(+), 56 deletions(-) (limited to 'includes/view') diff --git a/db/update.sql b/db/update.sql index 3ed37ceb..c5187675 100644 --- a/db/update.sql +++ b/db/update.sql @@ -31,3 +31,7 @@ INSERT INTO `GroupPrivileges` (group_id, privilege_id) VALUES (-65, 14), (-65, 4 -- Add log level to LogEntries ALTER TABLE `LogEntries` CHANGE COLUMN `nick` `level` VARCHAR(20) NOT NULL; + +-- Angeltype contact update +ALTER TABLE `AngelTypes` DROP FOREIGN KEY angeltypes_ibfk_1; +ALTER TABLE `AngelTypes` DROP `contact_user_id`; \ No newline at end of file diff --git a/includes/controller/angeltypes_controller.php b/includes/controller/angeltypes_controller.php index 3e377fb0..eaaa9c0f 100644 --- a/includes/controller/angeltypes_controller.php +++ b/includes/controller/angeltypes_controller.php @@ -143,6 +143,10 @@ function angeltype_edit_controller() $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); diff --git a/includes/model/AngelType_model.php b/includes/model/AngelType_model.php index b51a6838..1f2c8c63 100644 --- a/includes/model/AngelType_model.php +++ b/includes/model/AngelType_model.php @@ -16,7 +16,6 @@ function AngelType_new() 'no_self_signup' => false, 'description' => '', 'requires_driver_license' => false, - 'contact_user_id' => null, 'contact_name' => null, 'contact_dect' => null, 'contact_email' => null @@ -24,53 +23,15 @@ function AngelType_new() } /** - * Validates the contact user - * - * @param array $angeltype The angeltype - * @return ValidationResult + * Checks if the angeltype has any contact information. + * + * @param Angeltype $angeltype + * @return bool */ -function AngelType_validate_contact_user_id($angeltype) -{ - if (!isset($angeltype['contact_user_id'])) { - return new ValidationResult(true, null); - } - if (isset($angeltype['contact_name']) || isset($angeltype['contact_dect']) || isset($angeltype['contact_email'])) { - return new ValidationResult(false, $angeltype['contact_user_id']); - } - if (User($angeltype['contact_user_id']) == null) { - return new ValidationResult(false, $angeltype['contact_user_id']); - } - return new ValidationResult(true, $angeltype['contact_user_id']); -} - -/** - * Returns contact data (name, dect, email) for given angeltype or null - * - * @param array $angeltype The angeltype - * @return array|null - */ -function AngelType_contact_info($angeltype) -{ - if (isset($angeltype['contact_user_id'])) { - $contact_user = User($angeltype['contact_user_id']); - $contact_data = [ - 'contact_name' => $contact_user['Nick'], - 'contact_dect' => $contact_user['DECT'] - ]; - if ($contact_user['email_by_human_allowed']) { - $contact_data['contact_email'] = $contact_user['email']; - } - return $contact_data; - } - if (isset($angeltype['contact_name'])) { - return [ - 'contact_name' => $angeltype['contact_name'], - 'contact_dect' => $angeltype['contact_dect'], - 'contact_email' => $angeltype['contact_email'] - ]; - } - - return null; +function AngelType_has_contact_info($angeltype) { + return !empty($angeltype['contact_name']) + || !empty($angeltype['contact_dect']) + || !empty($angeltype['contact_email']); } /** @@ -102,7 +63,6 @@ function AngelType_update($angeltype) `description` = ?, `requires_driver_license` = ?, `no_self_signup` = ?, - `contact_user_id` = ?, `contact_name` = ?, `contact_dect` = ?, `contact_email` = ? @@ -113,7 +73,6 @@ function AngelType_update($angeltype) $angeltype['description'], (int)$angeltype['requires_driver_license'], (int)$angeltype['no_self_signup'], - $angeltype['contact_user_id'], $angeltype['contact_name'], $angeltype['contact_dect'], $angeltype['contact_email'], @@ -124,7 +83,10 @@ function AngelType_update($angeltype) engelsystem_log( 'Updated angeltype: ' . $angeltype['name'] . ($angeltype['restricted'] ? ', restricted' : '') . ($angeltype['no_self_signup'] ? ', no_self_signup' : '') - . ($angeltype['requires_driver_license'] ? ', requires driver license' : '') + . ($angeltype['requires_driver_license'] ? ', requires driver license' : '') . ', ' + . $angeltype['contact_name'] . ', ' + . $angeltype['contact_dect'] . ', ' + . $angeltype['contact_email'] ); } @@ -143,7 +105,6 @@ function AngelType_create($angeltype) `description`, `requires_driver_license`, `no_self_signup`, - `contact_user_id`, `contact_name`, `contact_dect`, `contact_email` @@ -156,7 +117,6 @@ function AngelType_create($angeltype) $angeltype['description'], (int)$angeltype['requires_driver_license'], (int)$angeltype['no_self_signup'], - $angeltype['contact_user_id'], $angeltype['contact_name'], $angeltype['contact_dect'], $angeltype['contact_email'], @@ -167,7 +127,10 @@ function AngelType_create($angeltype) engelsystem_log( 'Created angeltype: ' . $angeltype['name'] . ($angeltype['restricted'] ? ', restricted' : '') - . ($angeltype['requires_driver_license'] ? ', requires driver license' : '') + . ($angeltype['requires_driver_license'] ? ', requires driver license' : '') . ', ' + . $angeltype['contact_name'] . ', ' + . $angeltype['contact_dect'] . ', ' + . $angeltype['contact_email'] ); return $angeltype; } diff --git a/includes/sys_template.php b/includes/sys_template.php index a659a7f3..662283b1 100644 --- a/includes/sys_template.php +++ b/includes/sys_template.php @@ -211,6 +211,20 @@ function page_with_title($title, $elements) return '

        ' . $title . '

        ' . join($elements) . '
        '; } +/** + * Renders a description based on the data arrays key and values as label an description. + * @param array $data + */ +function description($data) { + $elements = []; + foreach($data as $label => $description) { + if(!empty($label) && !empty($description)) { + $elements[] = '
        ' . $label . '
        ' . $description . '
        '; + } + } + return '
        ' . join($elements) . '
        '; +} + /** * Rendert eine Datentabelle * diff --git a/includes/view/AngelTypes_view.php b/includes/view/AngelTypes_view.php index baf0e04a..6e70b3be 100644 --- a/includes/view/AngelTypes_view.php +++ b/includes/view/AngelTypes_view.php @@ -92,15 +92,20 @@ function AngelType_edit_view($angeltype, $supporter_mode) _('Requires driver license'), $angeltype['requires_driver_license'] ), - //form_text('contact_name', _('Name'), $angeltype['contact_name']), - //form_text('contact_dect', _('DECT'), $angeltype['contact_dect']), - //form_text('contact_email', _('E-Mail'), $angeltype['contact_email']), form_info( '', _('Restricted angel types can only be used by an angel if enabled by a supporter (double opt-in).') ), form_textarea('description', _('Description'), $angeltype['description']), form_info('', _('Please use markdown for the description.')), + heading(_('Contact'), 3), + form_info( + '', + _('Primary contact person/desk for user questions.') + ), + form_text('contact_name', _('Name'), $angeltype['contact_name']), + form_text('contact_dect', _('DECT'), $angeltype['contact_dect']), + form_text('contact_email', _('E-Mail'), $angeltype['contact_email']), form_submit('submit', _('Save')) ]) ]); @@ -322,6 +327,10 @@ function AngelType_view( msg() ]; + if(AngelType_has_contact_info($angeltype)) { + $page[] = AngelTypes_render_contact_info($angeltype); + } + $page[] = '

        ' . _('Description') . '

        '; $parsedown = new Parsedown(); if ($angeltype['description'] != '') { @@ -392,6 +401,20 @@ function AngelType_view( return page_with_title(sprintf(_('Team %s'), $angeltype['name']), $page); } +/** + * Renders the contact info + * + * @param Anteltype $angeltype + * @return string HTML + */ +function AngelTypes_render_contact_info($angeltype) { + return heading(_('Contact'), 3) . description([ + _('Name') => $angeltype['contact_name'], + _('DECT') => $angeltype['contact_dect'], + _('E-Mail') => $angeltype['contact_email'] + ]); +} + /** * Display the list of angeltypes. * @@ -431,6 +454,10 @@ function AngelTypes_about_view_angeltype($angeltype) $html = '

        ' . $angeltype['name'] . '

        '; + if(AngelType_has_contact_info($angeltype)) { + $html .= AngelTypes_render_contact_info($angeltype); + } + if (isset($angeltype['user_angeltype_id'])) { $buttons = []; if ($angeltype['user_angeltype_id'] != null) { -- cgit v1.2.3-70-g09d2 From 928e707015fa5b9b3e2dd52c9493552ae1218911 Mon Sep 17 00:00:00 2001 From: msquare Date: Fri, 24 Nov 2017 12:01:19 +0100 Subject: add shift calendar to angeltype view --- includes/controller/angeltypes_controller.php | 61 +- includes/model/Room_model.php | 11 + includes/model/Shifts_model.php | 25 +- includes/sys_template.php | 26 + includes/view/AngelTypes_view.php | 111 +- includes/view/Rooms_view.php | 5 +- includes/view/ShiftCalendarRenderer.php | 2 +- includes/view/ShiftsFilterRenderer.php | 10 +- locale/de_DE.UTF-8/LC_MESSAGES/default.mo | Bin 40950 -> 41242 bytes locale/de_DE.UTF-8/LC_MESSAGES/default.po | 1732 +++++++++++++------------ public/js/sticky-headers.js | 4 +- 11 files changed, 1098 insertions(+), 889 deletions(-) (limited to 'includes/view') diff --git a/includes/controller/angeltypes_controller.php b/includes/controller/angeltypes_controller.php index eaaa9c0f..5c3bd859 100644 --- a/includes/controller/angeltypes_controller.php +++ b/includes/controller/angeltypes_controller.php @@ -1,5 +1,7 @@ enableDaySelection($days); + + $shiftCalendarRenderer = shiftCalendarRendererByShiftFilter($shiftsFilter); return [ sprintf(_('Team %s'), $angeltype['name']), @@ -193,11 +203,60 @@ function angeltype_controller() in_array('admin_angel_types', $privileges), $user_angeltype['supporter'], $user_driver_license, - $user + $user, + $shiftsFilterRenderer, + $shiftCalendarRenderer ) ]; } +/** + * On which days do shifts for this angeltype occur? Needed for shiftCalendar. + * + * @param Angeltype $angeltype + * @return array + */ +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; +} + +/** + * Sets up the shift filter for the angeltype. + * + * @param Angeltype $angeltype + * @param array $days + * @return ShiftsFilter + */ +function angeltype_controller_shiftsFilter($angeltype, $days) { + global $privileges; + + $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]; + } + 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')); + + return $shiftsFilter; +} + /** * View a list of all angeltypes. * diff --git a/includes/model/Room_model.php b/includes/model/Room_model.php index 8425e5ad..74a08be4 100644 --- a/includes/model/Room_model.php +++ b/includes/model/Room_model.php @@ -13,6 +13,17 @@ function Rooms($show_all = false) return DB::select('SELECT * FROM `Room`' . ($show_all ? '' : ' WHERE `show`=\'Y\'') . ' ORDER BY `Name`'); } +/** + * Returns Room id array + * + * @return array + */ +function Room_ids() +{ + $result = DB::select('SELECT `RID` FROM `Room`'); + return select_array($result, 'RID', 'RID'); +} + /** * Delete a room * diff --git a/includes/model/Shifts_model.php b/includes/model/Shifts_model.php index ef02aaab..8a1b69f9 100644 --- a/includes/model/Shifts_model.php +++ b/includes/model/Shifts_model.php @@ -4,6 +4,29 @@ use Engelsystem\Database\DB; use Engelsystem\ShiftsFilter; use Engelsystem\ShiftSignupState; +/** + * @param array $angeltype + * @return array + */ +function Shifts_by_angeltype($angeltype) { + return DB::select(' + SELECT DISTINCT `Shifts`.* FROM `Shifts` + JOIN `NeededAngelTypes` ON `NeededAngelTypes`.`shift_id` = `Shifts`.`SID` + WHERE `NeededAngelTypes`.`angel_type_id` = ? + AND `NeededAngelTypes`.`count` > 0 + AND `Shifts`.`PSID` IS NULL + + UNION + + SELECT DISTINCT `Shifts`.* FROM `Shifts` + JOIN `NeededAngelTypes` ON `NeededAngelTypes`.`room_id` = `Shifts`.`RID` + WHERE `NeededAngelTypes`.`angel_type_id` = ? + AND `NeededAngelTypes`.`count` > 0 + AND NOT `Shifts`.`PSID` IS NULL + ', [$angeltype['id'], $angeltype['id']]); +} + + /** * @param array $room * @return array @@ -24,7 +47,7 @@ function Shifts_by_ShiftsFilter(ShiftsFilter $shiftsFilter) FROM `Shifts` JOIN `Room` USING (`RID`) JOIN `ShiftTypes` ON `ShiftTypes`.`id` = `Shifts`.`shifttype_id` - JOIN `NeededAngelTypes` ON `NeededAngelTypes`.`shift_id`=`Shifts`.`SID` + JOIN `NeededAngelTypes` ON `NeededAngelTypes`.`shift_id` = `Shifts`.`SID` WHERE `Shifts`.`RID` IN (' . implode(',', $shiftsFilter->getRooms()) . ') AND `start` BETWEEN ? AND ? AND `NeededAngelTypes`.`angel_type_id` IN (' . implode(',', $shiftsFilter->getTypes()) . ') diff --git a/includes/sys_template.php b/includes/sys_template.php index 662283b1..96290062 100644 --- a/includes/sys_template.php +++ b/includes/sys_template.php @@ -1,5 +1,31 @@ $content) { + $class = ''; + if(count($tab_header) == 0) { + $class = 'active'; + } + $tab_header[] = ''; + $tab_content[] = '
        ' . $content . '
        '; + } + return div('', [ + '', + '
        ' . join($tab_content) . '
        ' + ]); +} + /** * Display muted (grey) text. * diff --git a/includes/view/AngelTypes_view.php b/includes/view/AngelTypes_view.php index 6e70b3be..e42321af 100644 --- a/includes/view/AngelTypes_view.php +++ b/includes/view/AngelTypes_view.php @@ -1,5 +1,7 @@ AngelType_view_info( + $angeltype, + $members, + $admin_user_angeltypes, + $admin_angeltypes, + $supporter + ), + _('Shifts') => AngelType_view_shifts( + $angeltype, + $shiftsFilterRenderer, + $shiftCalendarRenderer + ) + ]) + ]); +} +/** + * @param Angeltype $angeltype + * @param ShiftsFilterRenderer $shiftsFilterRenderer + * @param ShiftCalendarRenderer $shiftCalendarRenderer + * @return string HTML + */ +function AngelType_view_shifts($angeltype, $shiftsFilterRenderer, $shiftCalendarRenderer) +{ + $shifts = $shiftsFilterRenderer->render(page_link_to('angeltypes', [ + 'action' => 'view', + 'angeltype_id' => $angeltype['id'] + ])); + $shifts .= $shiftCalendarRenderer->render(); + + return div('first', $shifts); +} + +/** + * @param Angeltype $angeltype + * @param array $members + * @param bool $admin_user_angeltypes + * @param bool $admin_angeltypes + * @param bool $supporter + * @return string HTML + */ +function AngelType_view_info( + $angeltype, + $members, + $admin_user_angeltypes, + $admin_angeltypes, + $supporter +) { + $info = []; if(AngelType_has_contact_info($angeltype)) { - $page[] = AngelTypes_render_contact_info($angeltype); + $info[] = AngelTypes_render_contact_info($angeltype); } - $page[] = '

        ' . _('Description') . '

        '; + $info[] = '

        ' . _('Description') . '

        '; $parsedown = new Parsedown(); if ($angeltype['description'] != '') { - $page[] = '
        ' . $parsedown->parse($angeltype['description']) . '
        '; + $info[] = '
        ' . $parsedown->parse($angeltype['description']) . '
        '; } - + list($supporters, $members_confirmed, $members_unconfirmed) = AngelType_view_members( $angeltype, $members, $admin_user_angeltypes, $admin_angeltypes - ); + ); $table_headers = AngelType_view_table_headers($angeltype, $supporter, $admin_angeltypes); - + if (count($supporters) > 0) { - $page[] = '

        ' . _('supporters') . '

        '; - $page[] = table($table_headers, $supporters); + $info[] = '

        ' . _('supporters') . '

        '; + $info[] = table($table_headers, $supporters); } - + if (count($members_confirmed) > 0) { $members_confirmed[] = [ 'Nick' => _('Sum'), @@ -357,7 +409,7 @@ function AngelType_view( 'actions' => '' ]; } - + if (count($members_unconfirmed) > 0) { $members_unconfirmed[] = [ 'Nick' => _('Sum'), @@ -365,40 +417,40 @@ function AngelType_view( 'actions' => '' ]; } - - $page[] = '

        ' . _('Members') . '

        '; + + $info[] = '

        ' . _('Members') . '

        '; if ($admin_user_angeltypes) { - $page[] = buttons([ + $info[] = buttons([ button( page_link_to( 'user_angeltypes', ['action' => 'add', 'angeltype_id' => $angeltype['id']] - ), + ), _('Add'), 'add' - ) + ) ]); } - $page[] = table($table_headers, $members_confirmed); - + $info[] = table($table_headers, $members_confirmed); + if ($admin_user_angeltypes && $angeltype['restricted'] && count($members_unconfirmed) > 0) { - $page[] = '

        ' . _('Unconfirmed') . '

        '; - $page[] = buttons([ + $info[] = '

        ' . _('Unconfirmed') . '

        '; + $info[] = buttons([ button( page_link_to('user_angeltypes', ['action' => 'confirm_all', 'angeltype_id' => $angeltype['id']]), _('confirm all'), 'ok' - ), + ), button( page_link_to('user_angeltypes', ['action' => 'delete_all', 'angeltype_id' => $angeltype['id']]), _('deny all'), 'cancel' - ) + ) ]); - $page[] = table($table_headers, $members_unconfirmed); + $info[] = table($table_headers, $members_unconfirmed); } - - return page_with_title(sprintf(_('Team %s'), $angeltype['name']), $page); + + return join($info); } /** @@ -407,7 +459,8 @@ function AngelType_view( * @param Anteltype $angeltype * @return string HTML */ -function AngelTypes_render_contact_info($angeltype) { +function AngelTypes_render_contact_info($angeltype) +{ return heading(_('Contact'), 3) . description([ _('Name') => $angeltype['contact_name'], _('DECT') => $angeltype['contact_dect'], diff --git a/includes/view/Rooms_view.php b/includes/view/Rooms_view.php index adb58a9a..bd6138e1 100644 --- a/includes/view/Rooms_view.php +++ b/includes/view/Rooms_view.php @@ -19,7 +19,10 @@ function Room_view($room, ShiftsFilterRenderer $shiftsFilterRenderer, ShiftCalen } return page_with_title(glyph('map-marker') . $room['Name'], [ - $shiftsFilterRenderer->render($room), + $shiftsFilterRenderer->render(page_link_to('rooms', [ + 'action' => 'view', + 'room_id' => $room['RID'] + ])), $assignNotice, $shiftCalendarRenderer->render() ]); diff --git a/includes/view/ShiftCalendarRenderer.php b/includes/view/ShiftCalendarRenderer.php index d2becb58..354d0336 100644 --- a/includes/view/ShiftCalendarRenderer.php +++ b/includes/view/ShiftCalendarRenderer.php @@ -143,7 +143,7 @@ class ShiftCalendarRenderer public function render() { if (count($this->lanes) == 0) { - return ''; + return info(_('No shifts found.'), true); } return div('shift-calendar', [ $this->renderTimeLane(), diff --git a/includes/view/ShiftsFilterRenderer.php b/includes/view/ShiftsFilterRenderer.php index c3e0ccf1..27c6240a 100644 --- a/includes/view/ShiftsFilterRenderer.php +++ b/includes/view/ShiftsFilterRenderer.php @@ -39,21 +39,17 @@ class ShiftsFilterRenderer /** * Renders the filter. * - * @param array $room + * @param string $page_link Link pointing to the actual page. * @return string Generated HTML */ - public function render($room) + public function render($page_link) { $toolbar = []; if ($this->daySelectionEnabled && !empty($this->days)) { $selected_day = date('Y-m-d', $this->shiftsFilter->getStartTime()); $day_dropdown_items = []; foreach ($this->days as $day) { - $link = page_link_to('rooms', [ - 'action' => 'view', - 'room_id' => $room['RID'], - 'shifts_filter_day' => $day, - ]); + $link = $page_link . '&shifts_filter_day=' . $day; $day_dropdown_items[] = toolbar_item_link($link, '', $day); } $toolbar[] = toolbar_dropdown('', $selected_day, $day_dropdown_items, 'active'); diff --git a/locale/de_DE.UTF-8/LC_MESSAGES/default.mo b/locale/de_DE.UTF-8/LC_MESSAGES/default.mo index 9d15f46a..bfe3aa42 100644 Binary files a/locale/de_DE.UTF-8/LC_MESSAGES/default.mo and b/locale/de_DE.UTF-8/LC_MESSAGES/default.mo differ diff --git a/locale/de_DE.UTF-8/LC_MESSAGES/default.po b/locale/de_DE.UTF-8/LC_MESSAGES/default.po index 28e9d534..c8319882 100644 --- a/locale/de_DE.UTF-8/LC_MESSAGES/default.po +++ b/locale/de_DE.UTF-8/LC_MESSAGES/default.po @@ -1,8 +1,8 @@ msgid "" msgstr "" "Project-Id-Version: Engelsystem 2.0\n" -"POT-Creation-Date: 2016-12-23 16:23+0100\n" -"PO-Revision-Date: 2016-12-23 16:24+0100\n" +"POT-Creation-Date: 2017-11-24 11:59+0100\n" +"PO-Revision-Date: 2017-11-24 12:00+0100\n" "Last-Translator: msquare \n" "Language-Team: \n" "Language: de_DE\n" @@ -17,149 +17,146 @@ msgstr "" "X-Poedit-SearchPath-0: /Users/msquare/workspace/projects/engelsystem\n" "X-Poedit-SearchPath-1: .\n" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/angeltypes_controller.php:7 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:177 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:62 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:86 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:356 +#: /Users/msquare/workspace/projects/engelsystem/config/config.default.php:111 +msgid "Please select..." +msgstr "Bitte auswählen..." + +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/angeltypes_controller.php:12 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:228 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:77 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:130 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:520 msgid "Angeltypes" msgstr "Engeltypen" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/angeltypes_controller.php:53 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:377 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:265 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:326 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:110 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/angeltypes_controller.php:66 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:503 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:486 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:586 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:130 msgid "Teams/Job description" msgstr "Team-/Aufgabenbeschreibung" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/angeltypes_controller.php:72 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/angeltypes_controller.php:88 #, php-format msgid "Angeltype %s deleted." msgstr "Engeltyp %s gelöscht." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/angeltypes_controller.php:77 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:41 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/angeltypes_controller.php:93 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:50 #, php-format msgid "Delete angeltype %s" msgstr "Lösche Engeltyp %s" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/angeltypes_controller.php:116 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/angeltypes_controller.php:136 msgid "Please check the name. Maybe it already exists." msgstr "Bitte überprüfe den Namen. Vielleicht ist er bereits vergeben." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/angeltypes_controller.php:141 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:60 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/angeltypes_controller.php:165 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:75 #, php-format msgid "Edit %s" msgstr "%s bearbeiten" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/angeltypes_controller.php:162 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:252 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/angeltypes_controller.php:197 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:329 #, php-format msgid "Team %s" msgstr "Team %s" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/angeltypes_controller.php:181 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:274 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/angeltypes_controller.php:279 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:353 msgid "view" msgstr "ansehen" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/angeltypes_controller.php:185 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_free.php:71 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_groups.php:23 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:16 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:107 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:55 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:67 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/Shifts_view.php:56 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:277 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:328 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/angeltypes_controller.php:287 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_free.php:97 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_groups.php:43 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:28 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:163 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:92 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:124 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/Shifts_view.php:98 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:358 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:445 msgid "edit" msgstr "bearbeiten" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/angeltypes_controller.php:186 -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifts_controller.php:178 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_questions.php:42 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_questions.php:56 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:17 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_user.php:120 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:45 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:110 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/Questions_view.php:5 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/Questions_view.php:12 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:16 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:56 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:68 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/Shifts_view.php:57 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/angeltypes_controller.php:292 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifts_controller.php:239 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_questions.php:58 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_questions.php:76 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:29 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_user.php:174 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:59 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:170 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/Questions_view.php:15 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/Questions_view.php:26 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:31 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:97 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:129 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/Shifts_view.php:99 msgid "delete" msgstr "löschen" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/angeltypes_controller.php:191 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:103 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:288 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/angeltypes_controller.php:303 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:156 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:522 msgid "leave" msgstr "verlassen" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/angeltypes_controller.php:193 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:94 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:290 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/angeltypes_controller.php:309 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:140 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:528 msgid "join" msgstr "mitmachen" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/angeltypes_controller.php:220 -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:29 -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:35 -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:65 -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:71 -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:119 -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:170 -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:235 -msgid "Angeltype doesn't exist." +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/angeltypes_controller.php:346 +msgid "Angeltype doesn't exist . " msgstr "Engeltyp existiert nicht." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/event_config_controller.php:4 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/event_config_controller.php:8 msgid "Event config" msgstr "Event Einstellungen" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/event_config_controller.php:48 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/event_config_controller.php:57 msgid "Please enter buildup start date." msgstr "Bitte gib das Aufbau Start Datum an." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/event_config_controller.php:52 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/event_config_controller.php:61 msgid "Please enter event start date." msgstr "Bitte gib das Event Start Datum an." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/event_config_controller.php:56 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/event_config_controller.php:65 msgid "Please enter event end date." msgstr "Bitte gib das Event Ende Datum an." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/event_config_controller.php:60 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/event_config_controller.php:69 msgid "Please enter teardown end date." msgstr "Bitte gib das Abbau Ende Datum an." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/event_config_controller.php:66 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/event_config_controller.php:75 msgid "The buildup start date has to be before the event start date." msgstr "Das Aufbau Start Datum muss vor dem Event Start Datum liegen." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/event_config_controller.php:71 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/event_config_controller.php:80 msgid "The event start date has to be before the event end date." msgstr "Das Event Start Datum muss vor dem Event End Datum liegen." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/event_config_controller.php:76 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/event_config_controller.php:85 msgid "The event end date has to be before the teardown end date." msgstr "Das Event Ende Datum muss vor dem Abbau Ende Datum liegen." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/event_config_controller.php:81 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/event_config_controller.php:90 msgid "The buildup start date has to be before the teardown end date." msgstr "Das Aufbau Start Datum muss vor dem Abbau Ende Datum liegen." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/event_config_controller.php:92 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:77 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/event_config_controller.php:113 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:93 msgid "Settings saved." msgstr "Einstellungen gespeichert." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shift_entries_controller.php:55 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shift_entries_controller.php:96 msgid "" "You are not allowed to sign up for this shift. Maybe shift is full or " "already running." @@ -167,153 +164,153 @@ msgstr "" "Du darfst Dich nicht für diese Schicht eintragen. Vielleicht ist die Schicht " "voll oder sie läuft bereits." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shift_entries_controller.php:102 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shift_entries_controller.php:168 msgid "You are subscribed. Thank you!" msgstr "Du bist eingetragen. Danke!" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shift_entries_controller.php:102 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_myshifts.php:4 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shift_entries_controller.php:168 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_myshifts.php:10 msgid "My shifts" msgstr "Meine Schichten" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shift_entries_controller.php:111 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:348 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shift_entries_controller.php:187 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:485 msgid "Freeloader" msgstr "Schwänzer" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shift_entries_controller.php:162 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shift_entries_controller.php:284 msgid "Shift entry deleted." msgstr "Schicht-Eintrag gelöscht." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shift_entries_controller.php:164 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shift_entries_controller.php:286 msgid "Entry not found." msgstr "Eintrag nicht gefunden." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifts_controller.php:63 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifts_controller.php:94 msgid "Please select a room." msgstr "Bitte einen Raum auswählen." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifts_controller.php:70 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifts_controller.php:101 msgid "Please select a shifttype." msgstr "Bitte einen Schichttyp wählen." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifts_controller.php:77 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifts_controller.php:108 msgid "Please enter a valid starting time for the shifts." msgstr "Bitte gib eine korrekte Startzeit für die Schichten ein." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifts_controller.php:84 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifts_controller.php:115 msgid "Please enter a valid ending time for the shifts." msgstr "Bitte gib eine korrekte Endzeit für die Schichten ein." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifts_controller.php:89 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifts_controller.php:120 msgid "The ending time has to be after the starting time." msgstr "Die Endzeit muss nach der Startzeit liegen." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifts_controller.php:97 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifts_controller.php:133 #, php-format msgid "Please check your input for needed angels of type %s." msgstr "Bitte prüfe deine Eingabe für benötigte Engel des Typs %s." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifts_controller.php:120 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifts_controller.php:161 msgid "Shift updated." msgstr "Schicht aktualisiert." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifts_controller.php:135 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifts_controller.php:179 msgid "This page is much more comfortable with javascript." msgstr "Diese Seite ist mit JavaScript viel komfortabler." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifts_controller.php:137 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:97 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:319 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifts_controller.php:181 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:118 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:371 msgid "Shifttype" msgstr "Schichttyp" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifts_controller.php:138 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:157 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:166 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:175 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:320 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/Shifts_view.php:63 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifts_controller.php:182 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:189 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:198 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:207 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:372 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/Shifts_view.php:105 msgid "Title" msgstr "Titel" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifts_controller.php:139 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifts_controller.php:183 msgid "Room:" msgstr "Raum:" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifts_controller.php:140 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifts_controller.php:184 msgid "Start:" msgstr "Start:" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifts_controller.php:141 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifts_controller.php:185 msgid "End:" msgstr "Ende:" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifts_controller.php:142 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:270 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:334 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/Shifts_view.php:89 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifts_controller.php:186 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:297 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:395 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/Shifts_view.php:131 msgid "Needed angels" msgstr "Benötigte Engel" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifts_controller.php:144 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_groups.php:54 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_news.php:35 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_questions.php:40 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:157 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:272 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_messages.php:44 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_news.php:107 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_news.php:164 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:76 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:122 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/Questions_view.php:32 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftEntry_view.php:32 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:39 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserDriverLicenses_view.php:34 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:56 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:65 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:70 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:75 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:146 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:402 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifts_controller.php:188 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_groups.php:96 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_news.php:40 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_questions.php:54 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:207 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:299 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_messages.php:76 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_news.php:168 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_news.php:257 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:111 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:150 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/Questions_view.php:47 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftEntry_view.php:45 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:65 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserDriverLicenses_view.php:48 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:72 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:81 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:86 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:91 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:178 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:578 msgid "Save" msgstr "Speichern" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifts_controller.php:172 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifts_controller.php:226 msgid "Shift deleted." msgstr "Schicht gelöscht." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifts_controller.php:177 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifts_controller.php:232 #, php-format msgid "Do you want to delete the shift %s from %s to %s?" msgstr "Möchtest Du die Schicht %s von %s bis %s löschen?" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifts_controller.php:195 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifts_controller.php:261 msgid "Shift could not be found." msgstr "Schicht konnte nicht gefunden werden." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifttypes_controller.php:31 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifttypes_controller.php:34 #, php-format msgid "Shifttype %s deleted." msgstr "Schichttyp %s gelöscht." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifttypes_controller.php:36 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:12 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifttypes_controller.php:39 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:22 #, php-format msgid "Delete shifttype %s" msgstr "Lösche Schichttyp %s" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifttypes_controller.php:58 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifttypes_controller.php:62 msgid "Shifttype not found." msgstr "Schichttyp nicht gefunden." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifttypes_controller.php:74 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:71 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifttypes_controller.php:78 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:90 msgid "Please enter a name." msgstr "Gib bitte einen Namen an." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifttypes_controller.php:94 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifttypes_controller.php:96 msgid "Updated shifttype." msgstr "Schichttyp geändert." @@ -321,151 +318,161 @@ msgstr "Schichttyp geändert." msgid "Created shifttype." msgstr "Schichttyp erstellt." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifttypes_controller.php:155 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifttypes_controller.php:160 msgid "Shifttypes" msgstr "Schichttypen" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:19 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:26 #, php-format msgid "There is %d unconfirmed angeltype." msgid_plural "There are %d unconfirmed angeltypes." msgstr[0] "Es gibt %d nicht freigeschalteten Engeltypen!" msgstr[1] "Es gibt %d nicht freigeschaltete Engeltypen!" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:19 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:28 msgid "Angel types which need approvals:" msgstr "Engeltypen die bestätigt werden müssen:" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:40 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:43 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:49 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:83 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:89 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:141 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:201 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:268 +msgid "Angeltype doesn't exist." +msgstr "Engeltyp existiert nicht." + +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:54 msgid "You are not allowed to delete all users for this angeltype." msgstr "Du darfst nicht alle Benutzer von diesem Engeltyp entfernen." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:48 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:62 #, php-format msgid "Denied all users for angeltype %s." msgstr "Alle Benutzer mit Engeltyp %s abgelehnt." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:53 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:15 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:67 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:47 msgid "Deny all users" msgstr "Alle Benutzer ablehnen" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:77 -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:107 -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:113 -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:158 -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:164 -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:216 -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:229 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:95 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:129 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:135 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:189 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:195 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:249 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:262 msgid "User angeltype doesn't exist." msgstr "Benutzer-Engeltype existiert nicht." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:82 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:100 msgid "You are not allowed to confirm all users for this angeltype." msgstr "Du darfst nicht alle Benutzer für diesen Engeltyp freischalten." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:90 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:108 #, php-format msgid "Confirmed all users for angeltype %s." msgstr "Alle Benutzer für Engeltyp %s freigeschaltet." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:95 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:26 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:113 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:77 msgid "Confirm all users" msgstr "Alle Benutzer bestätigen" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:124 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:146 msgid "You are not allowed to confirm this users angeltype." msgstr "Du darfst diesen Benutzer nicht für diesen Engeltyp freischalten." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:130 -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:176 -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:241 -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:309 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:152 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:207 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:274 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:407 msgid "User doesn't exist." msgstr "Benutzer existiert nicht." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:141 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:165 #, php-format msgid "%s confirmed for angeltype %s." msgstr "%s für Engeltyp %s freigeschaltet." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:146 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:37 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:173 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:101 msgid "Confirm angeltype for user" msgstr "Engeltyp für Benutzer bestätigen" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:181 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:212 msgid "You are not allowed to delete this users angeltype." msgstr "Du darfst diesen Benutzer nicht von diesem Engeltyp entfernen." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:191 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:219 #, php-format msgid "User %s removed from %s." msgstr "Benutzer %s von %s entfernt." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:199 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:48 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:227 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:130 msgid "Remove angeltype" msgstr "Engeltyp löschen" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:211 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:244 msgid "You are not allowed to set supporter rights." msgstr "Du darfst keine Supporterrechte bearbeiten." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:223 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:256 msgid "No supporter update given." msgstr "Kein Update für Supporterrechte gegeben." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:248 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:282 #, php-format msgid "Added supporter rights for %s to %s." msgstr "%s hat %s als Supporter bekommen." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:248 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:282 #, php-format msgid "Removed supporter rights for %s from %s." msgstr "%s hat jetzt nicht mehr %s als Supporter." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:256 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:156 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:4 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:293 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:250 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:12 msgid "Add supporter rights" msgstr "Supporterrechte geben" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:256 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:147 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:4 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:293 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:233 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:12 msgid "Remove supporter rights" msgstr "Supporterrechte entfernen" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:289 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:331 #, php-format msgid "User %s added to %s." msgstr "Benutzer %s zu %s hinzugefügt." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:299 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:64 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:348 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:162 msgid "Add user to angeltype" msgstr "Benutzer zu Engeltyp hinzufügen" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:312 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:365 #, php-format msgid "You are already a %s." msgstr "Du bist bereits %s." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:319 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:372 #, php-format msgid "You joined %s." msgstr "Du bist %s beigetreten." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:332 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:78 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:389 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:186 #, php-format msgid "Become a %s" msgstr "Werde ein %s" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_driver_licenses_controller.php:19 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_driver_licenses_controller.php:24 #, php-format msgid "" "You joined an angeltype which requires a driving license. Please edit your " @@ -474,128 +481,128 @@ msgstr "" "Du bist einem Engeltypen beigetreten, der Führerschein-Infos benötigt. Bitte " "trage Deine Führerschein-Infos hier ein: %s." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_driver_licenses_controller.php:19 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_driver_licenses_controller.php:25 msgid "driving license information" msgstr "Führerschein-Infos" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_driver_licenses_controller.php:113 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_driver_licenses_controller.php:131 msgid "Your driver license information has been saved." msgstr "Deine Führerschein-Infos wurden gespeichert." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_driver_licenses_controller.php:116 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_driver_licenses_controller.php:134 msgid "Please select at least one driving license." msgstr "Bitte wähle mindestens einen Führerschein-Typen aus." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_driver_licenses_controller.php:121 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_driver_licenses_controller.php:139 msgid "Your driver license information has been removed." msgstr "Deine Führerschein-Infos wurden gelöscht." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_driver_licenses_controller.php:127 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserDriverLicenses_view.php:15 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_driver_licenses_controller.php:145 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserDriverLicenses_view.php:13 #, php-format msgid "Edit %s driving license information" msgstr "Bearbeite die Führerschein-Infos von %s" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:50 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:61 msgid "You cannot delete yourself." msgstr "Du kannst Dich nicht selber löschen." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:59 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:315 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:75 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:439 msgid "Your password is incorrect. Please try it again." msgstr "Dein Passwort stimmt nicht. Bitte probiere es nochmal." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:69 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:82 msgid "User deleted." msgstr "Engel gelöscht." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:77 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:121 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:90 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:145 #, php-format msgid "Delete %s" msgstr "%s löschen" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:118 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:160 msgid "Please enter a valid number of vouchers." msgstr "Bitte gib eine korrekte Anzahl von Vouchern ein." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:129 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:168 msgid "Saved the number of vouchers." msgstr "Anzahl der Voucher gespeichert." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:137 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:138 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:177 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:169 #, php-format msgid "%s's vouchers" msgstr "Voucher von %s" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:149 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:194 msgid "User not found." msgstr "Benutzer nicht gefunden." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:203 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:175 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:267 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:228 msgid "All users" msgstr "Alle Benutzer" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:214 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:291 msgid "Token is not correct." msgstr "Der Token ist nicht in Ordnung." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:224 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:102 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:96 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:304 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:142 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:116 msgid "Your passwords don't match." msgstr "Deine Passwörter stimmen nicht überein." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:228 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:94 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:308 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:114 msgid "Your password is to short (please use at least 6 characters)." msgstr "Dein Passwort ist zu kurz (Bitte mindestens 6 Zeichen nutzen)." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:233 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:98 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:313 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:119 msgid "Password saved." msgstr "Passwort gespeichert." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:254 -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:258 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:67 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:21 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:338 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:342 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:107 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:31 msgid "E-mail address is not correct." msgstr "Die E-Mail Adresse ist nicht in Ordnung." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:262 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:71 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:25 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:346 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:111 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:35 msgid "Please enter your e-mail." msgstr "Bitte gib Deine E-Mail-Adresse ein." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:267 -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:292 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:353 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:389 msgid "Password recovery" msgstr "Passwort wiederherstellen" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:267 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:355 #, php-format msgid "Please visit %s to recover your password." msgstr "Bitte besuche %s, um Dein Passwort zurückzusetzen" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:268 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:359 msgid "We sent an email containing your password recovery link." msgstr "" "Wir haben eine eMail mit einem Link zum Passwort-zurücksetzen geschickt." -#: /Users/msquare/workspace/projects/engelsystem/includes/helper/email_helper.php:12 +#: /Users/msquare/workspace/projects/engelsystem/includes/helper/email_helper.php:20 #, php-format msgid "Hi %s," msgstr "Hallo %s," -#: /Users/msquare/workspace/projects/engelsystem/includes/helper/email_helper.php:12 +#: /Users/msquare/workspace/projects/engelsystem/includes/helper/email_helper.php:21 msgid "here is a message for you from the engelsystem:" msgstr "hier ist eine Nachricht aus dem Engelsystem für Dich:" -#: /Users/msquare/workspace/projects/engelsystem/includes/helper/email_helper.php:12 +#: /Users/msquare/workspace/projects/engelsystem/includes/helper/email_helper.php:23 msgid "" "This email is autogenerated and has not to be signed. You got this email " "because you are registered in the engelsystem." @@ -604,72 +611,72 @@ msgstr "" "werden. Du hast diese E-Mail bekommen, weil Du im Engelsystem registriert " "bist." -#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:10 +#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:15 msgid "A Shift you are registered on has changed:" msgstr "Eine deiner Schichten hat sich geändert:" -#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:14 +#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:19 #, php-format msgid "* Shift type changed from %s to %s" msgstr "* Schichttyp von %s in %s geändert" -#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:19 +#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:24 #, php-format msgid "* Shift title changed from %s to %s" msgstr "* Schicht Titel von %s nach %s geändert" -#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:24 +#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:30 #, php-format msgid "* Shift Start changed from %s to %s" msgstr "* Schicht Beginn von %s nach %s geändert" -#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:29 +#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:39 #, php-format msgid "* Shift End changed from %s to %s" msgstr "* Schicht Ende von %s nach %s geändert" -#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:34 +#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:47 #, php-format msgid "* Shift Location changed from %s to %s" msgstr "* Schicht Ort von %s to %s geändert" -#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:44 +#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:57 msgid "The updated Shift:" msgstr "Die aktualisierte Schicht:" -#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:53 +#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:66 msgid "Your Shift has changed" msgstr "Deine Schicht hat sich geändert" -#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:62 +#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:79 msgid "A Shift you are registered on was deleted:" msgstr "Eine deiner Schichten wurde gelöscht:" -#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:71 +#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:88 msgid "Your Shift was deleted" msgstr "Deine Schicht wurde gelöscht" -#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:80 +#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:105 msgid "You have been assigned to a Shift:" msgstr "Du wurdest in eine Schicht eingetragen:" -#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:86 +#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:111 msgid "Assigned to Shift" msgstr "In Schicht eingetragen" -#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:94 +#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:122 msgid "You have been removed from a Shift:" msgstr "Du wurdest aus einer Schicht ausgetragen:" -#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:100 +#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:128 msgid "Removed from Shift" msgstr "Von Schicht ausgetragen" -#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/users_mailer.php:7 +#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/users_mailer.php:11 msgid "Your account has been deleted" msgstr "Dein Konto wurde gelöscht." -#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/users_mailer.php:7 +#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/users_mailer.php:12 msgid "" "Your angelsystem account has been deleted. If you have any questions " "regarding your account deletion, please contact heaven." @@ -677,11 +684,11 @@ msgstr "" "Dein Engelsystem-Konto wurde gelöscht. Wenn Du dazu Fragen hast, kontaktiere " "bitte den Himmel." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:4 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:10 msgid "Active angels" msgstr "Aktive Engel" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:29 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:42 #, php-format msgid "" "At least %s angels are forced to be active. The number has to be greater." @@ -689,374 +696,382 @@ msgstr "" "Mindestens %s Engel werden als aktiv gekennzeichnet. Die Nummer muss größer " "sein." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:34 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:49 msgid "Please enter a number of angels to be marked as active." msgstr "" "Bitte gib eine Anzahl an Engeln ein, die als Aktiv markiert werden sollen." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:59 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:83 msgid "Marked angels." msgstr "Engel wurden markiert." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:61 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:137 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:173 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:266 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:67 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:124 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:141 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:86 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:187 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:221 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:293 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:167 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:148 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:172 msgid "back" msgstr "zurück" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:61 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:92 msgid "apply" msgstr "anwenden" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:71 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:103 msgid "Angel has been marked as active." msgstr "Engel wurde als aktiv markiert." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:73 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:83 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:103 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:23 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:34 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:105 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:115 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:135 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:40 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:56 msgid "Angel not found." msgstr "Engel nicht gefunden." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:81 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:113 msgid "Angel has been marked as not active." msgstr "Engel wurde als nicht aktiv markiert." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:91 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:123 msgid "Angel has got a t-shirt." msgstr "Engel hat ein T-Shirt bekommen." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:101 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:133 msgid "Angel has got no t-shirt." msgstr "Engel hat kein T-Shirt bekommen." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:144 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:191 msgid "set active" msgstr "setze aktiv" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:147 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:208 msgid "remove active" msgstr "entferne aktiv" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:148 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:211 msgid "got t-shirt" msgstr "hat t-shirt" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:151 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:223 msgid "remove t-shirt" msgstr "entferne t-shirt" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:170 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:165 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:180 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:259 #: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:195 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:221 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:229 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:165 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:210 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:225 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:407 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:415 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:218 msgid "Sum" msgstr "Summe" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:177 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:266 msgid "Search angel:" msgstr "Suche Engel:" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:178 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:267 msgid "Show all shifts" msgstr "Alle Schichten anzeigen" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:179 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:141 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:142 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_free.php:78 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_free.php:87 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_log.php:23 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_log.php:24 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:268 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:171 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:172 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_free.php:105 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_free.php:114 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_log.php:29 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_log.php:30 msgid "Search" msgstr "Suche" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:182 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:271 msgid "How much angels should be active?" msgstr "Wie viele Engel sollten aktiv sein?" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:183 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:254 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:342 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:272 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:281 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:408 msgid "Preview" msgstr "Vorschau" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:187 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:145 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:276 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:175 msgid "Nickname" msgstr "Nick" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:188 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:198 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:191 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:277 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:287 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:244 msgid "Size" msgstr "Größe" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:189 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:6 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:364 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:278 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:11 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:340 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:528 msgid "Shifts" msgstr "Schichten" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:190 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:329 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:279 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:381 msgid "Length" msgstr "Länge" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:191 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:280 msgid "Active?" msgstr "Aktiv?" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:192 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:189 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:281 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:242 msgid "Forced" msgstr "Gezwungen" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:193 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:282 msgid "T-shirt?" msgstr "T-Shirt?" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:196 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:285 msgid "Shirt statistics" msgstr "T-Shirt Statistik" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:199 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:288 msgid "Needed shirts" msgstr "Benötigte T-Shirts" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:200 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:289 msgid "Given shirts" msgstr "Ausgegebene T-Shirts" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:4 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:10 msgid "Arrived angels" msgstr "Angekommene Engel" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:20 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:37 msgid "Reset done. Angel has not arrived." msgstr "Zurückgesetzt. Engel ist nicht angekommen." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:31 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:53 msgid "Angel has been marked as arrived." msgstr "Engel wurde als angekommen markiert." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:71 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:9 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:20 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:31 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:42 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:53 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:93 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:34 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:64 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:86 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:115 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:142 msgid "yes" msgstr "Ja" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:72 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:98 msgid "reset" msgstr "zurücksetzen" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:72 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:156 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:171 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:102 #: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:186 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:330 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:201 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:216 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:453 msgid "arrived" msgstr "angekommen" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:146 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:176 msgid "Planned arrival" msgstr "Geplanter Ankunftstag" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:147 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:177 msgid "Arrived?" msgstr "Angekommen?" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:148 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:178 msgid "Arrival date" msgstr "Ankunftsdatum" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:149 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:179 msgid "Planned departure" msgstr "Geplante Abreise" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:154 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:184 msgid "Planned arrival statistics" msgstr "Geplante Ankunfts-Statistik" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:157 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:172 #: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:187 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:202 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:217 msgid "arrived sum" msgstr "Summe angekommen" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:163 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:178 #: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:193 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_news.php:30 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_messages.php:76 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:208 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:223 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_news.php:35 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_messages.php:116 msgid "Date" msgstr "Datum" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:164 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:179 #: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:194 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:209 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:224 msgid "Count" msgstr "Anzahl" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:169 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:199 msgid "Arrival statistics" msgstr "Ankunfts-Statistik" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:184 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:214 msgid "Planned departure statistics" msgstr "Geplante Abreise-Statistik" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_free.php:4 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_free.php:10 msgid "Free angels" msgstr "Freie Engel" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_free.php:81 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:36 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:70 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_free.php:108 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:62 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:172 msgid "Angeltype" msgstr "Engeltyp" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_free.php:84 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_free.php:111 msgid "Only confirmed" msgstr "Nur bestätigte" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_free.php:92 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:225 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:354 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:177 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:190 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:40 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:97 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:181 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_free.php:119 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:310 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:478 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:285 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:298 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:31 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:117 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:234 msgid "Nick" msgstr "Nick" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_free.php:94 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:255 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:178 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:191 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:47 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:184 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_free.php:121 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:366 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:109 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:286 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:299 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:466 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:50 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:237 msgid "DECT" msgstr "DECT" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_free.php:95 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:264 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:52 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_free.php:122 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:375 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:63 msgid "Jabber" msgstr "Jabber" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_free.php:96 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:228 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:49 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:386 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_free.php:123 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:313 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:110 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:467 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:52 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:559 msgid "E-Mail" msgstr "E-Mail" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_groups.php:4 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_groups.php:10 msgid "Grouprights" msgstr "Gruppenrechte" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_groups.php:29 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:144 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:148 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:143 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:189 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:66 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:268 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:35 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:78 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:183 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_groups.php:51 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:176 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:180 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:193 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:241 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:82 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:83 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:108 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:465 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:489 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:61 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:141 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:236 msgid "Name" msgstr "Name" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_groups.php:30 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_groups.php:52 msgid "Privileges" msgstr "Privilegien" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_groups.php:55 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_groups.php:97 msgid "Edit group" msgstr "Gruppe bearbeiten" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:4 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:144 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:190 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:10 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:194 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:242 msgid "Frab import" msgstr "Frab Import" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:25 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:39 msgid "Webserver has no write-permission on import directory." msgstr "Der Webserver hat keine Schreibrechte für das Verzeichnis import." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:53 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:117 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:195 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:53 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:59 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:64 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:138 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:234 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:58 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:64 msgid "Please select a shift type." msgstr "Bitte einen Schichttyp wählen." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:60 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:124 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:202 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:71 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:145 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:241 msgid "Please enter an amount of minutes to add to a talk's begin." msgstr "" "Bitte gib eine Anzahl Minuten ein, die vor dem Talk-Beginn hinzugefügt " "werden sollen." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:67 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:131 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:209 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:78 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:152 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:248 msgid "Please enter an amount of minutes to add to a talk's end." msgstr "" "Bitte gib eine Anzahl Minuten ein, die nach dem Talk-Ende hinzugefügt werden " "sollen." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:75 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:86 msgid "No valid xml/xcal file provided." msgstr "Keine valide xml/xcal Datei hochgeladen." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:80 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:91 msgid "File upload went wrong." msgstr "Das Hochladen der Datei ist schiefgegangen." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:84 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:95 msgid "Please provide some data." msgstr "Bitte lade eine Datei hoch." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:92 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:139 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:252 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:110 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:167 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:285 msgid "File Upload" msgstr "Datei hochladen" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:92 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:139 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:252 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:110 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:168 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:287 msgid "Validation" msgstr "Überprüfen" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:92 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:101 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:139 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:178 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:252 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:110 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:122 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:168 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:210 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:289 msgid "Import" msgstr "Importieren" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:96 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:116 msgid "" "This import will create/update/delete rooms and shifts by given FRAB-export " "file. The needed file format is xcal." @@ -1064,381 +1079,387 @@ msgstr "" "Dieser Import erzeugt, ändert und löscht Räume und Schichten anhand einer " "FRAB-Export Datei. Das benötigte Format ist xcal." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:98 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:119 msgid "Add minutes to start" msgstr "Minuten vor Talk-Beginn hinzufügen" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:99 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:120 msgid "Add minutes to end" msgstr "Minuten nach Talk-Ende hinzufügen" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:100 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:121 msgid "xcal-File (.xcal)" msgstr "xcal-Datei (.xcal)" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:110 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:184 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:131 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:223 msgid "Missing import file." msgstr "Import-Datei nicht vorhanden." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:143 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:175 msgid "Rooms to create" msgstr "Anzulegende Räume" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:147 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:179 msgid "Rooms to delete" msgstr "Zu löschende Räume" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:151 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:183 msgid "Shifts to create" msgstr "Anzulegende Schichten" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:153 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:162 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:171 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:366 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:185 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:194 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:203 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:530 msgid "Day" msgstr "Tag" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:154 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:163 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:172 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:324 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/Shifts_view.php:67 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:186 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:195 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:204 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:376 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/Shifts_view.php:109 msgid "Start" msgstr "Beginn" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:155 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:164 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:173 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:325 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/Shifts_view.php:75 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:187 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:196 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:205 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:377 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/Shifts_view.php:117 msgid "End" msgstr "Ende" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:156 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:165 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:174 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:188 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:197 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:206 msgid "Shift type" msgstr "Schichttyp" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:158 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:167 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:176 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:321 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:190 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:199 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:208 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:373 msgid "Room" msgstr "Raum" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:160 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:192 msgid "Shifts to update" msgstr "Zu aktualisierende Schichten" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:169 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:201 msgid "Shifts to delete" msgstr "Zu löschende Schichten" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:253 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:290 msgid "It's done!" msgstr "Erledigt!" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_log.php:4 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_log.php:8 msgid "Log" msgstr "Log" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_news.php:10 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_news.php:17 msgid "Edit news entry" msgstr "News-Eintrag bearbeiten" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_news.php:31 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_news.php:36 msgid "Author" msgstr "Autor" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_news.php:32 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_news.php:161 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_news.php:37 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_news.php:254 msgid "Subject" msgstr "Betreff" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_news.php:33 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_messages.php:79 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_news.php:106 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_news.php:162 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_news.php:38 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_messages.php:119 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_news.php:167 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_news.php:255 msgid "Message" msgstr "Nachricht" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_news.php:34 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_news.php:163 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_news.php:39 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_news.php:256 msgid "Meeting" msgstr "Treffen" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_news.php:38 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:177 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:129 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_news.php:48 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:227 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:156 msgid "Delete" msgstr "löschen" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_news.php:52 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_news.php:78 msgid "News entry updated." msgstr "News-Eintrag gespeichert." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_news.php:61 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_news.php:85 msgid "News entry deleted." msgstr "News-Eintrag gelöscht." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_questions.php:4 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_questions.php:10 msgid "Answer questions" msgstr "Fragen beantworten" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_questions.php:18 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_questions.php:27 msgid "There are unanswered questions!" msgstr "Es gibt unbeantwortete Fragen!" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_questions.php:61 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_questions.php:83 msgid "Unanswered questions" msgstr "Unbeantwortete Fragen" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_questions.php:63 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_questions.php:70 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_questions.php:85 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_questions.php:92 msgid "From" msgstr "Von" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_questions.php:64 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_questions.php:71 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/Questions_view.php:19 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/Questions_view.php:24 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_questions.php:86 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_questions.php:93 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/Questions_view.php:34 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/Questions_view.php:39 msgid "Question" msgstr "Frage" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_questions.php:65 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_questions.php:73 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/Questions_view.php:26 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_questions.php:87 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_questions.php:95 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/Questions_view.php:41 msgid "Answer" msgstr "Antwort" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_questions.php:68 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/Questions_view.php:22 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_questions.php:90 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/Questions_view.php:37 msgid "Answered questions" msgstr "Beantwortete Fragen" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_questions.php:72 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/Questions_view.php:25 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_questions.php:94 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/Questions_view.php:40 msgid "Answered by" msgstr "Antwort von" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:4 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:172 -#: /Users/msquare/workspace/projects/engelsystem/includes/sys_menu.php:170 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:10 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:219 +#: /Users/msquare/workspace/projects/engelsystem/includes/sys_menu.php:210 msgid "Rooms" msgstr "Räume" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:67 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:86 msgid "This name is already in use." msgstr "Dieser Name ist bereits vergeben." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:97 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:120 #, php-format msgid "Please enter needed angels for type %s." msgstr "Bitte gib die Anzahl der benötigten Engel vom Typ %s an." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:124 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:174 msgid "Room saved." msgstr "Raum gespeichert." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:145 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:191 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:195 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:243 msgid "Public" msgstr "Öffentlich" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:146 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:196 msgid "Room number" msgstr "Raumnummer" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:151 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:201 msgid "Needed angels:" msgstr "Benötigte Engel:" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:167 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:215 #, php-format msgid "Room %s deleted." msgstr "Raum %s gelöscht." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:175 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:223 #, php-format msgid "Do you want to delete room %s?" msgstr "Möchest Du den Raum %s wirklich löschen?" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:185 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:237 msgid "add" msgstr "Neu" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:4 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:10 msgid "Create shifts" msgstr "Schichten erstellen" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:71 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:80 msgid "Please select a location." msgstr "Bitte einen Ort auswählen." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:78 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:87 msgid "Please select a start time." msgstr "Bitte eine Startzeit auswählen." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:85 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:94 msgid "Please select an end time." msgstr "Bitte eine Endzeit auswählen." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:90 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:99 msgid "The shifts end has to be after its start." msgstr "Die Endzeit muss nach der Startzeit liegen." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:102 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:111 msgid "Please enter a shift duration in minutes." msgstr "Gib bitte eine Schichtlänge in Minuten ein." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:110 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:122 msgid "Please split the shift-change hours by colons." msgstr "Trenne die Schichtwechselstunden mit einem Komma." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:115 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:127 msgid "Please select a mode." msgstr "Bitte einen Modus auswählen." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:128 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:140 #, php-format msgid "Please check the needed angels for team %s." msgstr "Bitte gib die Anzahl der benötigten Engel vom Team %s an." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:133 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:146 msgid "There are 0 angels needed. Please enter the amounts of needed angels." msgstr "Es werden 0 Engel benötigt. Bitte ändere das." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:137 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:150 msgid "Please select a mode for needed angels." msgstr "Bitte wähle einen Modus für benötigte Engel." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:141 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:154 msgid "Please select needed angels." msgstr "Bitte wähle benötigte Engel." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:268 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:295 msgid "Time and location" msgstr "Zeit und Ort" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:269 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:296 msgid "Type and title" msgstr "Typ und Titel" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:326 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:378 msgid "Mode" msgstr "Modus" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:327 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:379 msgid "Create one shift" msgstr "Eine Schicht erstellen" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:328 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:380 msgid "Create multiple shifts" msgstr "Mehrere Schichten erstellen" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:330 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:384 msgid "Create multiple shifts with variable length" msgstr "Erstelle mehrere Schichten mit unterschiedlicher Länge" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:331 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:390 msgid "Shift change hours" msgstr "Schichtwechsel-Stunden" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:335 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:398 msgid "Take needed angels from room settings" msgstr "Übernehme benötigte Engel von den Raum-Einstellungen" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:336 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:402 msgid "The following angels are needed" msgstr "Die folgenden Engel werden benötigt" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_user.php:4 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_user.php:10 msgid "All Angels" msgstr "Engelliste" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_user.php:20 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_user.php:38 msgid "This user does not exist." msgstr "Benutzer existiert nicht." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_user.php:46 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:67 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:68 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:69 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_user.php:74 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:85 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:88 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:91 msgid "Yes" msgstr "Ja" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_user.php:47 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:67 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:68 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:69 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_user.php:75 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:85 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:88 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:91 msgid "No" msgstr "Nein" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_user.php:60 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_user.php:88 msgid "Force active" msgstr "Aktiv erzwingen" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_user.php:79 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_user.php:107 msgid "" "Please visit the angeltypes page or the users profile to manage users " "angeltypes." msgstr "" "Bitte benutze die Engeltypen-Seite um die Engeltypen des Users zu verwalten." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_user.php:204 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_user.php:313 msgid "Edit user" msgstr "User bearbeiten" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_credits.php:3 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_credits.php:8 msgid "Credits" msgstr "Credits" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:4 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:349 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:356 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:95 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:99 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:10 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:473 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:480 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:115 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:119 msgid "Login" msgstr "Login" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:8 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:285 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:18 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:396 msgid "Register" msgstr "Registrieren" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:12 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:26 msgid "Logout" msgstr "Logout" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:56 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:79 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:528 +msgid "Registration is disabled." +msgstr "Registrierung ist abgeschaltet." + +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:93 #, php-format msgid "Your nick "%s" already exists." msgstr "Der Nick "%s" existiert schon." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:60 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:98 #, php-format msgid "Your nick "%s" is too short (min. 2 characters)." msgstr "Der Nick "%s" ist zu kurz (Mindestens 2 Zeichen)." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:86 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:36 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:126 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:46 msgid "Please check your jabber account information." msgstr "Bitte überprüfe deine Jabber Account Eingabe." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:95 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:135 msgid "Please select your shirt size." msgstr "Bitte wähle Deine T-Shirt Größe." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:106 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:147 #, php-format msgid "Your password is too short (please use at least %s characters)." msgstr "Dein Passwort ist zu kurz (Bitte mindestens %s Zeichen nutzen)." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:115 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:52 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:158 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:162 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:62 msgid "" "Please enter your planned date of arrival. It should be after the buildup " "start date and before teardown end date." @@ -1446,11 +1467,16 @@ msgstr "" "Bitte gib Dein geplantes Ankunftsdatum an. Es sollte nach dem Aufbaubeginn " "und vor dem Abbauende liegen." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:189 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:190 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:85 +msgid "For dect numbers are only 5 digits allowed." +msgstr "Die DECT Nummer darf nur 5 Zeichen lang sein." + +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:274 msgid "Angel registration successful!" msgstr "Engel-Registrierung erfolgreich!" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:217 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:302 msgid "" "By completing this form you're registering as a Chaos-Angel. This script " "will create you an account in the angel task scheduler." @@ -1458,50 +1484,50 @@ msgstr "" "Mit diesem Formular registrierst Du Dich als Engel. Du bekommst ein Konto in " "der Engel-Aufgabenverwaltung." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:229 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:50 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:316 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:55 msgid "" "The engelsystem is allowed to send me an email (e.g. when my shifts change)" msgstr "" "Das Engelsystem darf mir E-Mails senden (z.B. wenn sich meine Schichten " "ändern)" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:230 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:51 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:321 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:60 msgid "Humans are allowed to send me an email (e.g. for ticket vouchers)" msgstr "Menschen dürfen mir eine E-Mail senden (z.B. für Ticket Voucher)" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:235 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:43 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:330 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:36 msgid "Planned date of arrival" msgstr "Geplanter Ankunftstag" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:238 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:54 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:336 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:67 msgid "Shirt size" msgstr "T-Shirt Größe" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:243 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:355 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:98 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:400 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:342 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:479 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:118 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:576 msgid "Password" msgstr "Passwort" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:246 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:401 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:345 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:577 msgid "Confirm password" msgstr "Passwort wiederholen" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:249 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:350 msgid "What do you want to do?" msgstr "Was möchtest Du machen?" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:249 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:353 msgid "Description of job types" msgstr "Beschreibung der Aufgaben" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:250 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:360 msgid "" "Restricted angel types need will be confirmed later by a supporter. You can " "change your selection in the options section." @@ -1509,46 +1535,46 @@ msgstr "" "Beschränkte Engeltypen müssen später von einem Supporter freigeschaltet " "werden. Du kannst Deine Auswahl später in den Einstellungen ändern." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:258 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:48 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:369 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:51 msgid "Mobile" msgstr "Handy" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:261 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:46 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:372 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:49 msgid "Phone" msgstr "Telefon" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:267 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:42 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:378 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:33 msgid "First name" msgstr "Vorname" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:270 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:41 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:381 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:32 msgid "Last name" msgstr "Nachname" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:275 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:45 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:386 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:48 msgid "Age" msgstr "Alter" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:278 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:53 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:389 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:64 msgid "Hometown" msgstr "Wohnort" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:281 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:39 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:392 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:30 msgid "Entry required!" msgstr "Pflichtfeld!" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:319 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:443 msgid "Please enter a password." msgstr "Gib bitte ein Passwort ein." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:323 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:447 msgid "" "No user was found with that Nickname. Please try again. If you are still " "having problems, ask a Dispatcher." @@ -1556,100 +1582,96 @@ msgstr "" "Es wurde kein Engel mit diesem Namen gefunden. Probiere es bitte noch " "einmal. Wenn das Problem weiterhin besteht, frage einen Dispatcher." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:327 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:451 msgid "Please enter a nickname." msgstr "Gib bitte einen Nick an." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:358 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:101 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:482 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:121 msgid "I forgot my password" msgstr "Passwort vergessen" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:363 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:103 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:487 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:123 msgid "Please note: You have to activate cookies!" msgstr "Hinweis: Cookies müssen aktiviert sein!" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:374 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:107 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:498 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:127 msgid "What can I do?" msgstr "Was kann ich machen?" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:375 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:108 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:499 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:128 msgid "Please read about the jobs you can do to help us." msgstr "" "Bitte informiere Dich über die Tätigkeiten bei denen Du uns helfen kannst." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:390 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:521 msgid "Please sign up, if you want to help us!" msgstr "Bitte registriere Dich, wenn Du helfen möchtest!" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:397 -msgid "Registration is disabled." -msgstr "Registrierung ist abgeschaltet." - -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_messages.php:4 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_messages.php:10 msgid "Messages" msgstr "Nachrichten" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_messages.php:26 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_messages.php:47 msgid "Select recipient..." msgstr "Empfänger auswählen..." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_messages.php:62 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_messages.php:96 msgid "mark as read" msgstr "als gelesen markieren" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_messages.php:65 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_messages.php:103 msgid "delete message" msgstr "Nachricht löschen" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_messages.php:72 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_messages.php:112 #, php-format msgid "Hello %s, here can you leave messages for other angels" msgstr "Hallo %s, hier kannst Du anderen Engeln Nachrichten schreiben." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_messages.php:75 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_messages.php:115 msgid "New" msgstr "Neu" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_messages.php:77 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_messages.php:117 msgid "Transmitted" msgstr "Gesendet" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_messages.php:78 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_messages.php:118 msgid "Recipient" msgstr "Empfänger" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_messages.php:90 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_messages.php:106 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_messages.php:130 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_messages.php:152 msgid "Incomplete call, missing Message ID." msgstr "Unvollständiger Aufruf, fehlende Nachrichten ID." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_messages.php:98 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_messages.php:114 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_messages.php:144 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_messages.php:163 msgid "No Message found." msgstr "Keine Nachricht gefunden." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_messages.php:122 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_messages.php:172 msgid "Transmitting was terminated with an Error." msgstr "Übertragung wurde mit einem Fehler abgebrochen." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_messages.php:127 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_messages.php:177 msgid "Wrong action." msgstr "Falsche Aktion." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_myshifts.php:23 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_myshifts.php:39 msgid "Key changed." msgstr "Key geändert." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_myshifts.php:26 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:335 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_myshifts.php:42 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:470 msgid "Reset API key" msgstr "API-Key zurücksetzen" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_myshifts.php:27 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_myshifts.php:44 msgid "" "If you reset the key, the url to your iCal- and JSON-export and your atom " "feed changes! You have to update it in every application using one of these " @@ -1658,23 +1680,23 @@ msgstr "" "Wenn du den API-Key zurücksetzt, ändert sich die URL zu deinem iCal-, JSON-" "Export und Atom Feed! Du musst diesen überall ändern, wo er in Benutzung ist." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_myshifts.php:28 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_myshifts.php:47 msgid "Continue" msgstr "Fortfahren" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_myshifts.php:60 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_myshifts.php:86 msgid "Please enter a freeload comment!" msgstr "Gib bitte einen Schwänz-Kommentar ein!" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_myshifts.php:79 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_myshifts.php:108 msgid "Shift saved." msgstr "Schicht gespeichert." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_myshifts.php:107 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_myshifts.php:158 msgid "Shift canceled." msgstr "Schichteintrag gelöscht." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_myshifts.php:109 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_myshifts.php:160 msgid "" "It's too late to sign yourself off the shift. If neccessary, ask the " "dispatcher to do so." @@ -1682,70 +1704,66 @@ msgstr "" "Es ist zu spät um Dich aus der Schicht auszutragen. Wenn notwendig, frage " "einen Dispatcher dafür." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_news.php:4 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_news.php:10 msgid "News comments" msgstr "News Kommentare" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_news.php:8 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_news.php:18 msgid "News" msgstr "News" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_news.php:12 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_news.php:26 msgid "Meetings" msgstr "Treffen" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_news.php:68 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_news.php:103 msgid "Comments" msgstr "Kommentare" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_news.php:86 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_news.php:127 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_news.php:144 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_news.php:212 msgid "Entry saved." msgstr "Eintrag gespeichert." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_news.php:104 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_news.php:165 msgid "New Comment:" msgstr "Neuer Kommentar:" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_news.php:110 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_news.php:171 msgid "Invalid request." msgstr "Ungültige Abfrage." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_news.php:158 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_news.php:251 msgid "Create news:" msgstr "News anlegen:" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_questions.php:4 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/Questions_view.php:29 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_questions.php:10 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/Questions_view.php:44 msgid "Ask the Heaven" msgstr "Frag den Himmel" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_questions.php:27 -msgid "Unable to save question." -msgstr "Konnte Frage nicht speichern." - -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_questions.php:29 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_questions.php:53 msgid "You question was saved." msgstr "Frage gespeichert." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_questions.php:33 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_questions.php:57 msgid "Please enter a question!" msgstr "Gib eine Frage ein!" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_questions.php:41 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_questions.php:65 msgid "Incomplete call, missing Question ID." msgstr "Unvollständiger Aufruf, fehlende Fragen ID." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_questions.php:50 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_questions.php:80 msgid "No question found." msgstr "Keine Frage gefunden." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:4 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:332 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:10 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:459 msgid "Settings" msgstr "Einstellungen" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:62 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:72 msgid "" "Please enter your planned date of departure. It should be after your planned " "arrival date and after buildup start date and before teardown end date." @@ -1753,27 +1771,23 @@ msgstr "" "Bitte gibt dein geplantes Abreisedatum an. Es sollte nach Deinem " "Anreisedatum, nach dem Aufbaubeginn und vor dem Abbauende liegen." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:92 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:112 msgid "-> not OK. Please try again." msgstr "-> Nicht OK. Bitte erneut versuchen." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:100 -msgid "Failed setting password." -msgstr "Konnte Passwort nicht speichern." - -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:125 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:154 msgid "Theme changed." msgstr "Aussehen geändert." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:83 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:98 msgid "The administration has not configured any rooms yet." msgstr "Die Administratoren habe noch keine Räume eingerichtet." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:95 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:117 msgid "The administration has not configured any shifts yet." msgstr "Die Administratoren haben noch keine Schichten angelegt." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:105 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:131 msgid "" "The administration has not configured any angeltypes yet - or you are not " "subscribed to any angeltype." @@ -1781,34 +1795,34 @@ msgstr "" "Die Administratoren haben noch keine Engeltypen konfiguriert - oder Du hast " "noch keine Engeltypen ausgewählt." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:154 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:197 msgid "occupied" msgstr "belegt" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:158 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:201 msgid "free" msgstr "frei" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:178 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:230 msgid "Occupancy" msgstr "Belegung" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:179 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:233 msgid "" "The tasks shown here are influenced by the angeltypes you joined already!" msgstr "" "Die Schichten, die hier angezeigt werden, sind von Deinen Einstellungen " "(Engeltypen/Aufgaben) abhängig!" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:179 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:235 msgid "Description of the jobs." msgstr "Beschreibung der Aufgaben." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:181 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:239 msgid "iCal export" msgstr "iCal Export" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:181 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:240 #, php-format msgid "" "Export of shown shifts. iCal format or JSON Format verfügbar (Link bitte geheimhalten, sonst API-Key zurücksetzen)." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:182 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:245 msgid "Filter" msgstr "Filter" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:204 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:23 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:278 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:49 msgid "All" msgstr "Alle" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:205 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:279 msgid "None" msgstr "Keine" -#: /Users/msquare/workspace/projects/engelsystem/includes/sys_menu.php:139 +#: /Users/msquare/workspace/projects/engelsystem/includes/sys_menu.php:168 msgid "Admin" msgstr "Admin" -#: /Users/msquare/workspace/projects/engelsystem/includes/sys_menu.php:161 +#: /Users/msquare/workspace/projects/engelsystem/includes/sys_menu.php:192 msgid "Manage rooms" msgstr "Verwalte Räume" -#: /Users/msquare/workspace/projects/engelsystem/includes/sys_template.php:166 +#: /Users/msquare/workspace/projects/engelsystem/includes/sys_template.php:292 msgid "No data found." msgstr "Nichts gefunden." -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:27 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:244 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:31 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:437 msgid "Unconfirmed" msgstr "Unbestätigt" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:29 #: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:33 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:37 msgid "supporter" msgstr "Supporter" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:31 #: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:35 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:39 msgid "Member" msgstr "Mitglied" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:42 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:51 #, php-format msgid "Do you want to delete angeltype %s?" msgstr "Möchtest Du den Engeltypen %s löschen?" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:44 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:15 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:8 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:19 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:30 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:41 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:52 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:82 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:53 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:25 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:24 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:56 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:81 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:107 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:136 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:192 msgid "cancel" msgstr "abbrechen" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:67 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:269 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:85 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:86 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:490 msgid "Restricted" msgstr "Beschränkt" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:68 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:88 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:89 msgid "No Self Sign Up" msgstr "Kein Selbst-Eintragen" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:69 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:91 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:94 msgid "Requires driver license" msgstr "Benötigt Führerschein" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:73 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:99 msgid "" "Restricted angel types can only be used by an angel if enabled by a " "supporter (double opt-in)." @@ -1896,24 +1913,33 @@ msgstr "" "Beschränkte Engeltypen müssen von einem Supporter freigeschaltet werden " "(double-opt-in)." -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:74 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:205 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:37 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:58 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/Shifts_view.php:93 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:101 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:386 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:63 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:101 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/Shifts_view.php:135 msgid "Description" msgstr "Beschreibung" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:75 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:38 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:102 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:64 msgid "Please use markdown for the description." msgstr "Bitte benutze Markdown für die Beschreibung." -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:90 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:103 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:464 +msgid "Contact" +msgstr "Kontakt" + +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:106 +msgid "Primary contact person/desk for user questions." +msgstr "Ansprechpartner für Fragen." + +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:134 msgid "my driving license" msgstr "Meine Führerschein-Infos" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:97 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:145 msgid "" "This angeltype requires a driver license. Please enter your driver license " "information!" @@ -1921,7 +1947,7 @@ msgstr "" "Dieser Engeltyp benötigt Führerschein-Infos. Bitte trage Deine Führerschein-" "Infos ein!" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:101 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:150 #, php-format msgid "" "You are unconfirmed for this angeltype. Please go to the introduction for %s " @@ -1930,82 +1956,86 @@ msgstr "" "Du bist noch nicht für diesen Engeltyp bestätigt. Bitte gehe zur Einführung " "für %s um bestätigt zu werden." -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:140 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:211 msgid "confirm" msgstr "bestätigen" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:141 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:219 msgid "deny" msgstr "ablehnen" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:157 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:257 msgid "remove" msgstr "entfernen" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:179 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:287 msgid "Driver" msgstr "Fahrer" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:180 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:288 msgid "Has car" msgstr "Hat Auto" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:181 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserDriverLicenses_view.php:27 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:289 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserDriverLicenses_view.php:29 msgid "Car" msgstr "Auto" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:182 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:290 msgid "3,5t Transporter" msgstr "3,5t Transporter" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:183 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:291 msgid "7,5t Truck" msgstr "7,5t LKW" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:184 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:292 msgid "12,5t Truck" msgstr "12,5t LKW" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:185 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserDriverLicenses_view.php:31 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:293 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserDriverLicenses_view.php:45 msgid "Forklift" msgstr "Gabelstapler" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:215 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:333 +msgid "Info" +msgstr "Info" + +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:401 msgid "supporters" msgstr "Supporter" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:235 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:421 msgid "Members" msgstr "Mitglieder" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:238 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:72 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:429 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:174 msgid "Add" msgstr "Hinzufügen" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:246 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:441 msgid "confirm all" msgstr "Alle bestätigen" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:247 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:446 msgid "deny all" msgstr "Alle ablehnen" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:264 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:484 msgid "New angeltype" msgstr "Neuer Engeltyp" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:270 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:491 msgid "Self Sign Up Allowed" msgstr "Kein Selbst-Eintragen erlaubt" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:271 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:492 msgid "Membership" msgstr "Mitgliedschaft" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:296 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:537 msgid "" "This angeltype is restricted by double-opt-in by a team supporter. Please " "show up at the according introduction meetings." @@ -2013,11 +2043,11 @@ msgstr "" "Dieser Engeltyp muss zusätzlich von einem Team-Supporter freigeschaltet " "werden. Bitte komme zu den entsprechenden Einführungstreffen." -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:317 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:574 msgid "FAQ" msgstr "FAQ" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:319 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:579 msgid "" "Here is the list of teams and their tasks. If you have questions, read the " "FAQ." @@ -2025,289 +2055,295 @@ msgstr "" "Hier ist die Liste der Teams und ihrer Aufgaben. Wenn Du Fragen hast, schaue " "im FAQ nach." -#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:10 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:18 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:13 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:22 #, php-format msgid "Welcome to the %s!" msgstr "Willkommen beim %s!" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:24 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:30 msgid "Buildup starts" msgstr "Aufbau startet" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:26 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:34 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:42 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:50 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:67 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:72 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:77 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/Shifts_view.php:69 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/Shifts_view.php:77 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:32 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:40 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:48 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:56 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:80 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:81 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:89 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:97 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:98 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/Shifts_view.php:111 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/Shifts_view.php:119 msgid "Y-m-d" msgstr "d.m.Y" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:32 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:38 msgid "Event starts" msgstr "Event startet" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:40 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:46 msgid "Event ends" msgstr "Event endet" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:48 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:54 msgid "Teardown ends" msgstr "Abbau endet" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:67 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:78 #, php-format msgid "%s, from %s to %s" msgstr "%s, vom %s bis %s" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:72 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:88 #, php-format msgid "%s, starting %s" msgstr "%s, ab dem %s" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:77 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:96 #, php-format msgid "Event from %s to %s" msgstr "Event von %s bis %s" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:106 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:134 msgid "Event Name" msgstr "Event Name" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:107 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:135 msgid "Event Name is shown on the start page." msgstr "Event Name wird auf der Startseite angezeigt." -#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:108 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:136 msgid "Event Welcome Message" msgstr "Event Willkommens-Nachricht" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:109 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:137 msgid "" "Welcome message is shown after successful registration. You can use markdown." msgstr "" "Die Willkommens-Nachricht wird nach einer erfolgreichen Registrierung " "angezeigt. Du kannst Markdown benutzen." -#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:112 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:140 msgid "Buildup date" msgstr "Aufbau Datum" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:113 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:141 msgid "Event start date" msgstr "Event Start Datum" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:116 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:144 msgid "Teardown end date" msgstr "Abbau Ende Datum" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:117 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/EventConfig_view.php:145 msgid "Event end date" msgstr "Event Ende Datum" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/Questions_view.php:17 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/Questions_view.php:32 msgid "Open questions" msgstr "Offene Fragen" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/Questions_view.php:31 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/Questions_view.php:46 msgid "Your Question:" msgstr "Deine Frage:" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftCalendarRenderer.php:200 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:367 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftCalendarRenderer.php:146 +msgid "No shifts found." +msgstr "Keine Schichten gefunden." + +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftCalendarRenderer.php:248 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:531 msgid "Time" msgstr "Zeit" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftCalendarRenderer.php:239 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftCalendarRenderer.php:304 msgid "Your shift" msgstr "Meine Schicht" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftCalendarRenderer.php:240 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftCalendarRenderer.php:305 msgid "Help needed" msgstr "Hilfe benötigt" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftCalendarRenderer.php:241 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftCalendarRenderer.php:306 msgid "Other angeltype needed / collides with my shifts" msgstr "Andere Engeltypen benötigt / kollidiert mit meinen Schichten" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftCalendarRenderer.php:242 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftCalendarRenderer.php:307 msgid "Shift is full" msgstr "Schicht ist voll" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftCalendarRenderer.php:243 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftCalendarRenderer.php:308 msgid "Shift running/ended" msgstr "Schicht läuft/vorbei" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftCalendarShiftRenderer.php:82 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftCalendarShiftRenderer.php:130 msgid "Add more angels" msgstr "Neue Engel hinzufügen" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftCalendarShiftRenderer.php:113 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftCalendarShiftRenderer.php:166 #, php-format msgid "%d helper needed" msgid_plural "%d helpers needed" msgstr[0] "%d Helfer benötigt" msgstr[1] "%d Helfer benötigt" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftCalendarShiftRenderer.php:118 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/Shifts_view.php:24 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftCalendarShiftRenderer.php:181 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/Shifts_view.php:46 msgid "Sign up" msgstr "Eintragen" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftCalendarShiftRenderer.php:123 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftCalendarShiftRenderer.php:187 msgid "ended" msgstr "vorbei" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftCalendarShiftRenderer.php:132 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/Shifts_view.php:26 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftCalendarShiftRenderer.php:199 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/Shifts_view.php:51 #, php-format msgid "Become %s" msgstr "Werde ein %s" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftEntry_view.php:18 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:267 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:269 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftEntry_view.php:31 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:346 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:348 msgid "Freeloaded" msgstr "Geschwänzt" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftEntry_view.php:19 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftEntry_view.php:32 msgid "Freeload comment (Only for shift coordination):" msgstr "Schwänzer Kommentar (Nur für die Schicht-Koordination):" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftEntry_view.php:22 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftEntry_view.php:35 msgid "Edit shift entry" msgstr "Schichteintrag bearbeiten" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftEntry_view.php:25 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftEntry_view.php:38 msgid "Angel:" msgstr "Engel:" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftEntry_view.php:26 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftEntry_view.php:39 msgid "Date, Duration:" msgstr "Termin, Dauer:" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftEntry_view.php:27 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftEntry_view.php:40 msgid "Location:" msgstr "Ort:" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftEntry_view.php:28 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftEntry_view.php:41 msgid "Title:" msgstr "Titel:" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftEntry_view.php:29 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftEntry_view.php:42 msgid "Type:" msgstr "Typ:" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftEntry_view.php:30 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftEntry_view.php:43 msgid "Comment (for your eyes only):" msgstr "Kommentar (nur für Dich):" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:13 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:23 #, php-format msgid "Do you want to delete shifttype %s?" msgstr "Möchtest Du den Schichttypen %s löschen?" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:29 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:55 msgid "Edit shifttype" msgstr "Schichttyp bearbeiten" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:29 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:55 msgid "Create shifttype" msgstr "Schichttyp erstellen" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:48 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:80 #, php-format msgid "for team %s" msgstr "für Team %s" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:75 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:138 msgid "New shifttype" msgstr "Neuer Schichttyp" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/Shifts_view.php:7 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/Shifts_view.php:14 #, php-format msgid "created at %s by %s" msgstr "erstellt am %s von %s" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/Shifts_view.php:10 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/Shifts_view.php:21 #, php-format msgid "edited at %s by %s" msgstr "bearbeitet am %s von %s" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/Shifts_view.php:53 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/Shifts_view.php:92 msgid "This shift collides with one of your shifts." msgstr "Diese Schicht kollidiert mit deinen Schichten." -#: /Users/msquare/workspace/projects/engelsystem/includes/view/Shifts_view.php:54 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/Shifts_view.php:95 msgid "You are signed up for this shift." msgstr "Du bist für diese Schicht eingetragen." -#: /Users/msquare/workspace/projects/engelsystem/includes/view/Shifts_view.php:83 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:368 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/Shifts_view.php:125 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:532 msgid "Location" msgstr "Ort" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:6 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:16 #, php-format msgid "Do you really want to add supporter rights for %s to %s?" msgstr "Sollen %s %s als neuen Supporter bekommen?" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:6 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:17 #, php-format msgid "Do you really want to remove supporter rights for %s from %s?" msgstr "Möchtest Du wirklich %s von %s als Supporter befreien?" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:17 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:49 #, php-format msgid "Do you really want to deny all users for %s?" msgstr "Möchtest Du wirklich alle Benutzer als %s ablehnen?" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:28 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:79 #, php-format msgid "Do you really want to confirm all users for %s?" msgstr "Möchtest Du wirklich alle Benutzer als %s bestätigen?" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:39 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:103 #, php-format msgid "Do you really want to confirm %s for %s?" msgstr "Möchtest Du wirklich %s für %s bestätigen?" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:50 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:132 #, php-format msgid "Do you really want to delete %s from %s?" msgstr "Möchtest Du wirklich %s von %s entfernen?" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:71 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:173 msgid "User" msgstr "Benutzer" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:80 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:188 #, php-format msgid "Do you really want to add %s to %s?" msgstr "Möchtest Du wirklich %s zu %s hinzufügen?" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:83 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:200 msgid "save" msgstr "Speichern" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserDriverLicenses_view.php:17 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserDriverLicenses_view.php:15 msgid "Back to profile" msgstr "Zurück zum Profil" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserDriverLicenses_view.php:21 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserDriverLicenses_view.php:19 msgid "Privacy" msgstr "Privatsphäre" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserDriverLicenses_view.php:21 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserDriverLicenses_view.php:19 msgid "" "Your driving license information is only visible for supporters and admins." msgstr "Deine Führerschein-Infos sind nur für Supporter und Admins sichtbar." -#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserDriverLicenses_view.php:22 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserDriverLicenses_view.php:20 msgid "I am willing to drive a car for the event" msgstr "Ich möchte für das Event Auto fahren" @@ -2316,78 +2352,74 @@ msgid "" "I have my own car with me and am willing to use it for the event (You'll get " "reimbursed for fuel)" msgstr "" -"Ich habe mein eigenes Auto dabei und möchte würde es zum Fahren für das Event " -"verwenden (Du wirst für Spritkosten entschädigt)" +"Ich habe mein eigenes Auto dabei und möchte würde es zum Fahren für das " +"Event verwenden (Du wirst für Spritkosten entschädigt)" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserDriverLicenses_view.php:26 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserDriverLicenses_view.php:28 msgid "Driver license" msgstr "Führerschein" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserDriverLicenses_view.php:28 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserDriverLicenses_view.php:32 msgid "Transporter 3,5t" msgstr "3,5t Transporter" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserDriverLicenses_view.php:29 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserDriverLicenses_view.php:37 msgid "Truck 7,5t" msgstr "7,5t LKW" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserDriverLicenses_view.php:30 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/UserDriverLicenses_view.php:42 msgid "Truck 12,5t" msgstr "12,5t LKW" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:7 -msgid "Please select..." -msgstr "Bitte auswählen..." - -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:38 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:29 msgid "Here you can change your user details." msgstr "Hier kannst Du Deine Details ändern." -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:44 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:43 msgid "Planned date of departure" msgstr "Geplanter Abreisetag" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:55 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:71 msgid "Please visit the angeltypes page to manage your angeltypes." msgstr "Bitte benutze die Engeltypen-Seite um deine Engeltypen zu verwalten." -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:61 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:77 msgid "Here you can change your password." msgstr "Hier kannst Du Dein Passwort ändern." -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:62 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:78 msgid "Old password:" msgstr "Altes Passwort:" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:63 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:79 msgid "New password:" msgstr "Neues Passwort:" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:64 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:80 msgid "Password confirmation:" msgstr "Passwort wiederholen:" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:68 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:84 msgid "Here you can choose your color settings:" msgstr "Hier kannst Du das Aussehen auswählen:" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:69 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:85 msgid "Color settings:" msgstr "Aussehen:" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:73 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:89 msgid "Here you can choose your language:" msgstr "Hier kannst Du Deine Sprache auswählen:" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:74 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:90 msgid "Language:" msgstr "Sprache:" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:88 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:108 msgid "Registration successful" msgstr "Registrierung erfolgreich" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:126 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:151 msgid "" "Do you really want to delete the user including all his shifts and every " "other piece of his data?" @@ -2395,152 +2427,152 @@ msgstr "" "Möchtest Du wirklich den Engel inklusive aller seiner Schichten und allen " "anderen seiner Daten löschen?" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:128 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:155 msgid "Your password" msgstr "Dein Passwort" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:143 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:174 #, php-format msgid "Angel should receive at least %d vouchers." msgstr "Engel sollte mindestens %d Voucher bekommen." -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:145 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:177 msgid "Number of vouchers given out" msgstr "Anzahl Voucher bekommen" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:159 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:212 msgid "m/d/Y h:i a" msgstr "d.m.Y H:i" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:178 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:231 msgid "New user" msgstr "Neuer User" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:182 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:235 msgid "Prename" msgstr "Vorname" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:185 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:350 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:238 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:502 msgid "Arrived" msgstr "Angekommen" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:186 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:239 msgid "Voucher" msgstr "Voucher" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:187 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:240 msgid "Freeloads" msgstr "Schwänzereien" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:188 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:352 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:241 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:516 msgid "Active" msgstr "Aktiv" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:190 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:353 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:243 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:517 msgid "T-Shirt" msgstr "T-Shirt" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:192 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:245 msgid "Last login" msgstr "Letzter Login" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:209 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:275 msgid "Free" msgstr "Frei" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:214 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:216 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:282 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:284 #, php-format msgid "Next shift %c" msgstr "Nächste Schicht %c" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:221 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:289 #, php-format msgid "Shift starts %c" msgstr "Schicht startet %c" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:223 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:291 #, php-format msgid "Shift ends %c" msgstr "Schicht endet %c" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:280 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:375 msgid "sign off" msgstr "abmelden" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:305 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:408 msgid "Sum:" msgstr "Summe:" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:329 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:449 msgid "driving license" msgstr "Führerschein" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:331 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:457 msgid "Edit vouchers" msgstr "Voucher bearbeiten" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:333 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:462 msgid "iCal Export" msgstr "iCal Export" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:334 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:466 msgid "JSON Export" msgstr "JSON Export" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:347 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:483 msgid "User state" msgstr "Engelzustand" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:350 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:494 #, php-format msgid "Arrived at %s" msgstr "Angekommen am %s" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:350 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:497 #, php-format msgid "Not arrived (Planned: %s)" msgstr "Nicht angekommen (Geplant: %s)" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:350 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:503 msgid "Not arrived" msgstr "Nicht angekommen" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:351 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:510 #, php-format msgid "Got %s voucher" msgid_plural "Got %s vouchers" msgstr[0] "Einen Voucher bekommen" msgstr[1] "%s Voucher bekommen" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:351 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:514 msgid "Got no vouchers" msgstr "Voucher nicht bekommen" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:360 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:524 msgid "Rights" msgstr "Rechte" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:369 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:533 msgid "Name & workmates" msgstr "Name & Kollegen" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:370 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:534 msgid "Comment" msgstr "Kommentar" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:371 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:535 msgid "Action" msgstr "Aktion" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:373 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:537 msgid "Your night shifts between 2 and 8 am count twice." msgstr "Deine Nachtschichten zwischen 2 und 8 Uhr zählen doppelt." -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:374 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:540 #, php-format msgid "" "Go to the shifts table to sign yourself up for some " @@ -2549,7 +2581,7 @@ msgstr "" "Gehe zur Schicht-Tabelle, um Dich für Schichten " "einzutragen." -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:384 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:557 msgid "" "We will send you an e-mail with a password recovery link. Please use the " "email address you used for registration." @@ -2558,15 +2590,15 @@ msgstr "" "zurücksetzen kannst. Bitte benutze die Mailadresse, die du bei der Anmeldung " "verwendet hast." -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:387 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:560 msgid "Recover" msgstr "Wiederherstellen" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:398 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:574 msgid "Please enter a new password." msgstr "Gib bitte ein neues Passwort ein." -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:447 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:659 msgid "" "Please enter your planned date of departure on your settings page to give us " "a feeling for teardown capacities." @@ -2574,7 +2606,7 @@ msgstr "" "Bitte gib Dein geplantes Abreisedatum an, damit wir ein Gefühl für die Abbau-" "Planung bekommen." -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:457 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:675 #, php-format msgid "" "You freeloaded at least %s shifts. Shift signup is locked. Please go to " @@ -2583,7 +2615,7 @@ msgstr "" "Du hast mindestens %s Schichten geschwänzt. Schicht-Registrierung ist " "gesperrt. Bitte gehe zum Himmelsschreibtisch um wieder entsperrt zu werden." -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:468 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:693 msgid "" "You are not marked as arrived. Please go to heaven's desk, get your angel " "badge and/or tell them that you arrived already." @@ -2591,30 +2623,36 @@ msgstr "" "Du bist nicht als angekommen markiert. Bitte gehe zur Himmelsverwaltung, " "hole Dein Badge ab und/oder erkläre ihnen, dass Du bereits angekommen bist." -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:478 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:707 msgid "You need to specify a tshirt size in your settings!" msgstr "Bitte eine T-Shirt-Größe auswählen" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:488 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:722 msgid "" "You need to specify a DECT phone number in your settings! If you don't have " -"a DECT phone, just enter \"-\"." +"a DECT phone, just enter '-'." msgstr "" "Bitte eine DECT-Telefonnummer in den Einstellungen eingeben. Wenn du noch " "keine Nummer hast, bitte einfach \"-\" angeben." -#: /Users/msquare/workspace/projects/engelsystem/public/index.php:155 +#: /Users/msquare/workspace/projects/engelsystem/public/index.php:206 msgid "No Access" msgstr "Kein Zugriff" -#: /Users/msquare/workspace/projects/engelsystem/public/index.php:156 +#: /Users/msquare/workspace/projects/engelsystem/public/index.php:207 msgid "" -"You don't have permission to view this page. You probably have to sign in or " -"register in order to gain access!" +"You don't have permission to view this page . You probably have to sign in " +"or register in order to gain access!" msgstr "" "Du hast keinen Zugriff auf diese Seite. Registriere Dich und logge Dich " "bitte ein, um Zugriff zu erhalten!" +#~ msgid "Unable to save question." +#~ msgstr "Konnte Frage nicht speichern." + +#~ msgid "Failed setting password." +#~ msgstr "Konnte Passwort nicht speichern." + #~ msgid "Please enter your planned date of arrival." #~ msgstr "Bitte gib Dein geplantes Ankunftsdatum an." diff --git a/public/js/sticky-headers.js b/public/js/sticky-headers.js index 60f294b3..6e6a75e2 100644 --- a/public/js/sticky-headers.js +++ b/public/js/sticky-headers.js @@ -6,8 +6,6 @@ $(document).ready(function () { var timeLanes = $(".shift-calendar .time"); var headers = $(".shift-calendar .header"); var topReference = $(".container-fluid .row"); - var top = headers.offset().top; - var left = 15; timeLanes.css({ "position": "relative", "z-index": 999 @@ -18,6 +16,8 @@ $(document).ready(function () { }); $(window).scroll( function () { + var top = headers.parent().offset().top; + var left = 15; timeLanes.css({ "left": Math.max(0, $(window).scrollLeft() - left) + "px" }); -- cgit v1.2.3-70-g09d2 From e54a10b81679bae9d19337617d6c58310d2f7a58 Mon Sep 17 00:00:00 2001 From: msquare Date: Fri, 24 Nov 2017 12:09:28 +0100 Subject: add shift calendar to angeltype view fix tab jumps --- includes/controller/angeltypes_controller.php | 8 +++++++- includes/sys_template.php | 5 +++-- includes/view/AngelTypes_view.php | 24 ++++++++++++++---------- 3 files changed, 24 insertions(+), 13 deletions(-) (limited to 'includes/view') diff --git a/includes/controller/angeltypes_controller.php b/includes/controller/angeltypes_controller.php index 5c3bd859..a47c1340 100644 --- a/includes/controller/angeltypes_controller.php +++ b/includes/controller/angeltypes_controller.php @@ -192,6 +192,11 @@ function angeltype_controller() $shiftsFilterRenderer->enableDaySelection($days); $shiftCalendarRenderer = shiftCalendarRendererByShiftFilter($shiftsFilter); + $request = request(); + $tab = 0; + if($request->has('shifts_filter_day')) { + $tab = 1; + } return [ sprintf(_('Team %s'), $angeltype['name']), @@ -205,7 +210,8 @@ function angeltype_controller() $user_driver_license, $user, $shiftsFilterRenderer, - $shiftCalendarRenderer + $shiftCalendarRenderer, + $tab ) ]; } diff --git a/includes/sys_template.php b/includes/sys_template.php index 96290062..819b7d1c 100644 --- a/includes/sys_template.php +++ b/includes/sys_template.php @@ -4,15 +4,16 @@ * Renders tabs from the array. Array key is tab name, array value is tab content. * * @param array $tabs + * @param int $selected The selected tab, default 0 * @return string HTML */ -function tabs($tabs) +function tabs($tabs, $selected = 0) { $tab_header = []; $tab_content = []; foreach($tabs as $header => $content) { $class = ''; - if(count($tab_header) == 0) { + if(count($tab_header) == $selected) { $class = 'active'; } $tab_header[] = '