reduce complexity of menu and hints
This commit is contained in:
parent
19d5d68d82
commit
ec6016cd38
|
@ -8,7 +8,7 @@ function user_angeltypes_unconfirmed_hint() {
|
||||||
|
|
||||||
$unconfirmed_user_angeltypes = User_unconfirmed_AngelTypes($user);
|
$unconfirmed_user_angeltypes = User_unconfirmed_AngelTypes($user);
|
||||||
if (count($unconfirmed_user_angeltypes) == 0) {
|
if (count($unconfirmed_user_angeltypes) == 0) {
|
||||||
return '';
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
$unconfirmed_links = [];
|
$unconfirmed_links = [];
|
||||||
|
|
|
@ -11,7 +11,7 @@ function user_driver_license_required_hint() {
|
||||||
|
|
||||||
// User has already entered data, no hint needed.
|
// User has already entered data, no hint needed.
|
||||||
if ($user_driver_license != null) {
|
if ($user_driver_license != null) {
|
||||||
return '';
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($angeltypes as $angeltype) {
|
foreach ($angeltypes as $angeltype) {
|
||||||
|
@ -20,7 +20,7 @@ function user_driver_license_required_hint() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return '';
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -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/ShiftTypes_view.php');
|
||||||
require_once realpath(__DIR__ . '/../includes/view/UserAngelTypes_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/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/view/User_view.php');
|
||||||
|
|
||||||
require_once realpath(__DIR__ . '/../includes/controller/angeltypes_controller.php');
|
require_once realpath(__DIR__ . '/../includes/controller/angeltypes_controller.php');
|
||||||
|
|
|
@ -4,9 +4,13 @@ function admin_questions_title() {
|
||||||
return _("Answer questions");
|
return _("Answer questions");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Renders a hint for new questions to answer.
|
||||||
|
*/
|
||||||
function admin_new_questions() {
|
function admin_new_questions() {
|
||||||
global $privileges;
|
global $privileges, $page;
|
||||||
|
|
||||||
|
if ($page != "admin_questions") {
|
||||||
if (in_array("admin_questions", $privileges)) {
|
if (in_array("admin_questions", $privileges)) {
|
||||||
$new_messages = sql_num_query("SELECT * FROM `Questions` WHERE `AID` IS NULL");
|
$new_messages = sql_num_query("SELECT * FROM `Questions` WHERE `AID` IS NULL");
|
||||||
|
|
||||||
|
@ -14,8 +18,9 @@ function admin_new_questions() {
|
||||||
return info('<a href="' . page_link_to("admin_questions") . '">' . _('There are unanswered questions!') . '</a>', true);
|
return info('<a href="' . page_link_to("admin_questions") . '">' . _('There are unanswered questions!') . '</a>', true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return "";
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
function admin_questions() {
|
function admin_questions() {
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
<?php
|
<?php
|
||||||
|
use Engelsystem\UserHintsRenderer;
|
||||||
|
|
||||||
function page_link_to($page = "") {
|
function page_link_to($page = "") {
|
||||||
if ($page == "") {
|
if ($page == "") {
|
||||||
|
@ -14,69 +15,32 @@ function page_link_to_absolute($page) {
|
||||||
/**
|
/**
|
||||||
* Render the user hints
|
* Render the user hints
|
||||||
*/
|
*/
|
||||||
function header_render_hints($user, $page, $enable_tshirt_size) {
|
function header_render_hints() {
|
||||||
$hints = [];
|
global $user, $page, $enable_tshirt_size, $max_freeloadable_shifts;
|
||||||
|
|
||||||
|
$hints_renderer = new UserHintsRenderer();
|
||||||
|
|
||||||
if (isset($user)) {
|
if (isset($user)) {
|
||||||
$hint_class = 'info';
|
$hints_renderer->addHint(admin_new_questions());
|
||||||
$glyphicon = 'info-sign';
|
$hints_renderer->addHint(user_angeltypes_unconfirmed_hint());
|
||||||
// Erzengel Hinweis für unbeantwortete Fragen
|
$hints_renderer->addHint(render_user_departure_date_hint());
|
||||||
if ($page != "admin_questions") {
|
$hints_renderer->addHint(user_driver_license_required_hint());
|
||||||
$new_questions = admin_new_questions();
|
|
||||||
if ($new_questions != "") {
|
// Important hints:
|
||||||
$hints[] = $new_questions;
|
$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);
|
||||||
}
|
}
|
||||||
|
|
||||||
$unconfirmed_hint = user_angeltypes_unconfirmed_hint();
|
return $hints_renderer->render();
|
||||||
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';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (count($hints) > 0) {
|
|
||||||
return toolbar_popover($glyphicon . ' text-' . $hint_class, '', $hints, 'bg-' . $hint_class);
|
|
||||||
}
|
|
||||||
return '';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Renders the header toolbar containing search, login/logout, user and settings links.
|
* Renders the header toolbar containing search, login/logout, user and settings links.
|
||||||
*/
|
*/
|
||||||
function header_toolbar() {
|
function header_toolbar() {
|
||||||
global $page, $privileges, $user, $enable_tshirt_size, $max_freeloadable_shifts;
|
global $page, $privileges, $user;
|
||||||
|
|
||||||
$toolbar_items = [];
|
$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[] = toolbar_item_link(page_link_to('user_messages'), 'envelope', user_unread_messages());
|
||||||
}
|
}
|
||||||
|
|
||||||
$toolbar_items[] = header_render_hints($user, $page, $enable_tshirt_size);
|
$toolbar_items[] = header_render_hints();
|
||||||
|
|
||||||
$user_submenu = make_langselect();
|
|
||||||
$user_submenu[] = toolbar_item_divider();
|
|
||||||
if (in_array('user_myshifts', $privileges)) {
|
if (in_array('user_myshifts', $privileges)) {
|
||||||
$toolbar_items[] = toolbar_item_link(page_link_to('users') . '&action=view', ' icon-icon_angel', $user['Nick'], $page == 'users');
|
$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)) {
|
if (in_array('user_settings', $privileges)) {
|
||||||
$user_submenu[] = toolbar_item_link(page_link_to('user_settings'), 'list-alt', settings_title(), $page == 'user_settings');
|
$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');
|
$user_submenu[] = toolbar_item_link(page_link_to('logout'), 'log-out', logout_title(), $page == 'logout');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (count($user_submenu) > 0) {
|
return $user_submenu;
|
||||||
$toolbar_items[] = toolbar_dropdown('', '', $user_submenu);
|
|
||||||
}
|
|
||||||
|
|
||||||
return toolbar($toolbar_items, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function make_navigation() {
|
function make_navigation() {
|
||||||
|
|
|
@ -0,0 +1,57 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Engelsystem;
|
||||||
|
|
||||||
|
class UserHintsRenderer {
|
||||||
|
|
||||||
|
private $hints = [];
|
||||||
|
|
||||||
|
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';
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
|
@ -415,4 +415,55 @@ function User_Nick_render($user_source) {
|
||||||
return '<a class="' . ($user_source['Gekommen'] ? '' : 'text-muted') . '" href="' . page_link_to('users') . '&action=view&user_id=' . $user_source['UID'] . '"><span class="icon-icon_angel"></span> ' . htmlspecialchars($user_source['Nick']) . '</a>';
|
return '<a class="' . ($user_source['Gekommen'] ? '' : 'text-muted') . '" href="' . page_link_to('users') . '&action=view&user_id=' . $user_source['UID'] . '"><span class="icon-icon_angel"></span> ' . htmlspecialchars($user_source['Nick']) . '</a>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
Loading…
Reference in New Issue