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());
- 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';
- }
- }
- if (count($hints) > 0) {
- return toolbar_popover($glyphicon . ' text-' . $hint_class, '', $hints, 'bg-' . $hint_class);
+ // 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);
}
- 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;
+}
+
?>