From ec6016cd38fc5ce6455cace6ffbc703f78f31096 Mon Sep 17 00:00:00 2001 From: msquare Date: Tue, 15 Nov 2016 16:28:20 +0100 Subject: [PATCH] reduce complexity of menu and hints --- .../controller/user_angeltypes_controller.php | 2 +- .../user_driver_licenses_controller.php | 4 +- includes/engelsystem_provider.php | 1 + includes/pages/admin_questions.php | 19 ++-- includes/sys_menu.php | 100 +++++++----------- includes/view/UserHintsRenderer.php | 57 ++++++++++ includes/view/User_view.php | 51 +++++++++ 7 files changed, 161 insertions(+), 73 deletions(-) create mode 100644 includes/view/UserHintsRenderer.php diff --git a/includes/controller/user_angeltypes_controller.php b/includes/controller/user_angeltypes_controller.php index f58187b2..206828f5 100644 --- a/includes/controller/user_angeltypes_controller.php +++ b/includes/controller/user_angeltypes_controller.php @@ -8,7 +8,7 @@ function user_angeltypes_unconfirmed_hint() { $unconfirmed_user_angeltypes = User_unconfirmed_AngelTypes($user); if (count($unconfirmed_user_angeltypes) == 0) { - return ''; + return null; } $unconfirmed_links = []; diff --git a/includes/controller/user_driver_licenses_controller.php b/includes/controller/user_driver_licenses_controller.php index a76d5507..fc2f4916 100644 --- a/includes/controller/user_driver_licenses_controller.php +++ b/includes/controller/user_driver_licenses_controller.php @@ -11,7 +11,7 @@ function user_driver_license_required_hint() { // User has already entered data, no hint needed. if ($user_driver_license != null) { - return ''; + return null; } foreach ($angeltypes as $angeltype) { @@ -20,7 +20,7 @@ function user_driver_license_required_hint() { } } - return ''; + return null; } /** diff --git a/includes/engelsystem_provider.php b/includes/engelsystem_provider.php index 84383bba..fb3c0f18 100644 --- a/includes/engelsystem_provider.php +++ b/includes/engelsystem_provider.php @@ -40,6 +40,7 @@ require_once realpath(__DIR__ . '/../includes/view/ShiftEntry_view.php'); require_once realpath(__DIR__ . '/../includes/view/ShiftTypes_view.php'); require_once realpath(__DIR__ . '/../includes/view/UserAngelTypes_view.php'); require_once realpath(__DIR__ . '/../includes/view/UserDriverLicenses_view.php'); +require_once realpath(__DIR__ . '/../includes/view/UserHintsRenderer.php'); require_once realpath(__DIR__ . '/../includes/view/User_view.php'); require_once realpath(__DIR__ . '/../includes/controller/angeltypes_controller.php'); diff --git a/includes/pages/admin_questions.php b/includes/pages/admin_questions.php index 8c16255c..13614a66 100644 --- a/includes/pages/admin_questions.php +++ b/includes/pages/admin_questions.php @@ -4,18 +4,23 @@ function admin_questions_title() { return _("Answer questions"); } +/** + * Renders a hint for new questions to answer. + */ function admin_new_questions() { - global $privileges; + global $privileges, $page; - if (in_array("admin_questions", $privileges)) { - $new_messages = sql_num_query("SELECT * FROM `Questions` WHERE `AID` IS NULL"); - - if ($new_messages > 0) { - return info('' . _('There are unanswered questions!') . '', true); + 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 info('' . _('There are unanswered questions!') . '', true); + } } } - return ""; + return null; } function admin_questions() { diff --git a/includes/sys_menu.php b/includes/sys_menu.php index d8a81324..854bfd2e 100644 --- a/includes/sys_menu.php +++ b/includes/sys_menu.php @@ -1,4 +1,5 @@ addHint(admin_new_questions()); + $hints_renderer->addHint(user_angeltypes_unconfirmed_hint()); + $hints_renderer->addHint(render_user_departure_date_hint()); + $hints_renderer->addHint(user_driver_license_required_hint()); - $unconfirmed_hint = user_angeltypes_unconfirmed_hint(); - if ($unconfirmed_hint != '') { - $hints[] = $unconfirmed_hint; - } - - if (! isset($user['planned_departure_date']) || $user['planned_departure_date'] == null) { - $hints[] = info(_("Please enter your planned date of departure on your settings page to give us a feeling for teardown capacities."), true); - } - - $driver_license_required = user_driver_license_required_hint(); - if ($driver_license_required != '') { - $hints[] = $driver_license_required; - } - - if (User_is_freeloader($user)) { - $hints[] = error(sprintf(_("You freeloaded at least %s shifts. Shift signup is locked. Please go to heavens desk to be unlocked again."), $max_freeloadable_shifts), true); - $hint_class = 'danger'; - $glyphicon = 'warning-sign'; - } - - // Hinweis für Engel, die noch nicht angekommen sind - if ($user['Gekommen'] == 0) { - $hints[] = error(_("You are not marked as arrived. Please go to heaven's desk, get your angel badge and/or tell them that you arrived already."), true); - $hint_class = 'danger'; - $glyphicon = 'warning-sign'; - } - - if ($enable_tshirt_size && $user['Size'] == "") { - $hints[] = error(_("You need to specify a tshirt size in your settings!"), true); - $hint_class = 'danger'; - $glyphicon = 'warning-sign'; - } - - if ($user['DECT'] == "") { - $hints[] = error(_("You need to specify a DECT phone number in your settings! If you don't have a DECT phone, just enter \"-\"."), true); - $hint_class = 'danger'; - $glyphicon = 'warning-sign'; - } + // Important hints: + $hints_renderer->addHint(render_user_freeloader_hint(), true); + $hints_renderer->addHint(render_user_arrived_hint(), true); + $hints_renderer->addHint(render_user_tshirt_hint(), true); + $hints_renderer->addHint(render_user_dect_hint(), true); } - if (count($hints) > 0) { - return toolbar_popover($glyphicon . ' text-' . $hint_class, '', $hints, 'bg-' . $hint_class); - } - return ''; + + return $hints_renderer->render(); } /** * Renders the header toolbar containing search, login/logout, user and settings links. */ function header_toolbar() { - global $page, $privileges, $user, $enable_tshirt_size, $max_freeloadable_shifts; + global $page, $privileges, $user; $toolbar_items = []; @@ -96,14 +60,28 @@ function header_toolbar() { $toolbar_items[] = toolbar_item_link(page_link_to('user_messages'), 'envelope', user_unread_messages()); } - $toolbar_items[] = header_render_hints($user, $page, $enable_tshirt_size); - - $user_submenu = make_langselect(); - $user_submenu[] = toolbar_item_divider(); + $toolbar_items[] = header_render_hints(); if (in_array('user_myshifts', $privileges)) { $toolbar_items[] = toolbar_item_link(page_link_to('users') . '&action=view', ' icon-icon_angel', $user['Nick'], $page == 'users'); } + $user_submenu = make_user_submenu(); + if (count($user_submenu) > 0) { + $toolbar_items[] = toolbar_dropdown('', '', $user_submenu); + } + + return toolbar($toolbar_items, true); +} + +function make_user_submenu() { + global $privileges, $page; + + $user_submenu = make_langselect(); + + if (in_array('user_settings', $privileges) || in_array('logout', $privileges)) { + $user_submenu[] = toolbar_item_divider(); + } + if (in_array('user_settings', $privileges)) { $user_submenu[] = toolbar_item_link(page_link_to('user_settings'), 'list-alt', settings_title(), $page == 'user_settings'); } @@ -112,11 +90,7 @@ function header_toolbar() { $user_submenu[] = toolbar_item_link(page_link_to('logout'), 'log-out', logout_title(), $page == 'logout'); } - if (count($user_submenu) > 0) { - $toolbar_items[] = toolbar_dropdown('', '', $user_submenu); - } - - return toolbar($toolbar_items, true); + return $user_submenu; } function make_navigation() { diff --git a/includes/view/UserHintsRenderer.php b/includes/view/UserHintsRenderer.php new file mode 100644 index 00000000..54f9c149 --- /dev/null +++ b/includes/view/UserHintsRenderer.php @@ -0,0 +1,57 @@ +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 ''; + } + + /** + * Add a hint to the list, if its not null and a not empty string. + * + * @param string $hint + * The hint + * @param boolean $important + * Is the hint important? + */ + public function addHint($hint, $important = false) { + if ($hint != null && $hint != '') { + $this->hints[] = $hint; + if ($important) { + $this->important = true; + } + } + } + + /** + * Get all hints. + */ + public function getHints() { + return $this->hints; + } + + /** + * Are there important hints? This leads to a more intensive icon. + */ + 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 7d677f33..5349711a 100644 --- a/includes/view/User_view.php +++ b/includes/view/User_view.php @@ -415,4 +415,55 @@ function User_Nick_render($user_source) { return ' ' . htmlspecialchars($user_source['Nick']) . ''; } +function render_user_departure_date_hint() { + global $user; + + if (! isset($user['planned_departure_date']) || $user['planned_departure_date'] == null) { + return info(_("Please enter your planned date of departure on your settings page to give us a feeling for teardown capacities."), true); + } + + return null; +} + +function render_user_freeloader_hint() { + global $user; + + if (User_is_freeloader($user)) { + return error(sprintf(_("You freeloaded at least %s shifts. Shift signup is locked. Please go to heavens desk to be unlocked again."), $max_freeloadable_shifts), true); + } + + return null; +} + +// Hinweis für Engel, die noch nicht angekommen sind +function render_user_arrived_hint() { + global $user; + + if ($user['Gekommen'] == 0) { + return error(_("You are not marked as arrived. Please go to heaven's desk, get your angel badge and/or tell them that you arrived already."), true); + } + + return null; +} + +function render_user_tshirt_hint() { + global $enable_tshirt_size, $user; + + if ($enable_tshirt_size && $user['Size'] == "") { + return error(_("You need to specify a tshirt size in your settings!"), true); + } + + return null; +} + +function render_user_dect_hint() { + global $user; + + if ($user['DECT'] == "") { + return error(_("You need to specify a DECT phone number in your settings! If you don't have a DECT phone, just enter \"-\"."), true); + } + + return null; +} + ?>