engelsystem/includes/sys_menu.php

261 lines
6.5 KiB
PHP
Raw Normal View History

2011-06-02 00:48:29 +02:00
<?php
2017-08-28 16:21:10 +02:00
2016-11-15 16:28:20 +01:00
use Engelsystem\UserHintsRenderer;
2013-10-13 00:52:44 +02:00
2017-01-03 03:22:48 +01:00
/**
* @param string $page
2017-08-28 16:21:10 +02:00
* @param array $parameters get parameters
2017-01-03 03:22:48 +01:00
* @return string
*/
2017-08-28 16:21:10 +02:00
function page_link_to($page = '', $parameters = [])
2017-01-02 03:57:23 +01:00
{
2017-08-28 16:21:10 +02:00
$page = str_replace('_', '-', $page);
return url($page, $parameters);
2013-10-13 00:52:44 +02:00
}
/**
2016-11-14 19:10:29 +01:00
* Render the user hints
2017-01-03 03:22:48 +01:00
*
* @return string
2013-10-13 00:52:44 +02:00
*/
2017-01-02 03:57:23 +01:00
function header_render_hints()
{
global $user;
2017-01-02 15:43:36 +01:00
2017-01-02 03:57:23 +01:00
$hints_renderer = new UserHintsRenderer();
2017-01-02 15:43:36 +01:00
2017-01-02 03:57:23 +01:00
if (isset($user)) {
$hints_renderer->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());
2017-01-02 15:43:36 +01:00
// Important hints:
$hints_renderer->addHint(render_user_freeloader_hint(), true);
2017-01-02 03:57:23 +01:00
$hints_renderer->addHint(render_user_arrived_hint(), true);
$hints_renderer->addHint(render_user_tshirt_hint(), true);
$hints_renderer->addHint(render_user_dect_hint(), true);
}
2017-01-02 15:43:36 +01:00
2017-01-02 03:57:23 +01:00
return $hints_renderer->render();
2016-11-14 19:10:29 +01:00
}
/**
* Renders the header toolbar containing search, login/logout, user and settings links.
2017-01-03 03:22:48 +01:00
*
* @return string
2016-11-14 19:10:29 +01:00
*/
2017-01-02 03:57:23 +01:00
function header_toolbar()
{
global $page, $privileges, $user;
2017-01-02 15:43:36 +01:00
2017-01-02 03:57:23 +01:00
$toolbar_items = [];
2017-01-02 15:43:36 +01:00
2017-01-02 03:57:23 +01:00
if (isset($user)) {
2017-01-02 15:43:36 +01:00
$toolbar_items[] = toolbar_item_link(
2017-08-28 16:21:10 +02:00
page_link_to('shifts', ['action' => 'next']),
2017-01-02 15:43:36 +01:00
'time',
User_shift_state_render($user)
);
2017-01-02 03:57:23 +01:00
}
2017-01-02 15:43:36 +01:00
if (!isset($user) && in_array('register', $privileges) && config('registration_enabled')) {
2017-12-25 23:12:52 +01:00
$toolbar_items[] = toolbar_item_link(
page_link_to('register'),
'plus',
register_title(),
$page == 'register'
);
2017-01-02 03:57:23 +01:00
}
2017-01-02 15:43:36 +01:00
2017-01-02 03:57:23 +01:00
if (in_array('login', $privileges)) {
2017-12-25 23:12:52 +01:00
$toolbar_items[] = toolbar_item_link(
page_link_to('login'),
'log-in',
login_title(),
$page == 'login'
);
2017-01-02 03:57:23 +01:00
}
2017-01-02 15:43:36 +01:00
2017-01-02 03:57:23 +01:00
if (isset($user) && in_array('user_messages', $privileges)) {
2017-12-25 23:12:52 +01:00
$toolbar_items[] = toolbar_item_link(
page_link_to('user_messages'),
'envelope',
user_unread_messages()
);
2017-01-02 03:57:23 +01:00
}
2017-01-02 15:43:36 +01:00
2017-01-02 03:57:23 +01:00
$toolbar_items[] = header_render_hints();
if (in_array('user_myshifts', $privileges)) {
2017-01-02 15:43:36 +01:00
$toolbar_items[] = toolbar_item_link(
2017-08-28 16:21:10 +02:00
page_link_to('users', ['action' => 'view']),
'',
'<span class="icon-icon_angel"></span> ' . $user['Nick'],
2017-01-02 15:43:36 +01:00
$page == 'users'
);
2017-01-02 03:57:23 +01:00
}
2017-01-02 15:43:36 +01:00
2017-01-02 03:57:23 +01:00
$user_submenu = make_user_submenu();
if (count($user_submenu) > 0) {
$toolbar_items[] = toolbar_dropdown('', '', $user_submenu);
}
2017-01-02 15:43:36 +01:00
2017-01-02 03:57:23 +01:00
return toolbar($toolbar_items, true);
2016-11-15 16:28:20 +01:00
}
2017-01-03 03:22:48 +01:00
/**
* @return array
*/
2017-01-02 03:57:23 +01:00
function make_user_submenu()
{
global $privileges, $page;
2017-01-02 15:43:36 +01:00
$user_submenu = make_language_select();
2017-01-02 15:43:36 +01:00
2017-01-02 03:57:23 +01:00
if (in_array('user_settings', $privileges) || in_array('logout', $privileges)) {
$user_submenu[] = toolbar_item_divider();
}
2017-01-02 15:43:36 +01:00
2017-01-02 03:57:23 +01:00
if (in_array('user_settings', $privileges)) {
2017-01-02 15:43:36 +01:00
$user_submenu[] = toolbar_item_link(
page_link_to('user_settings'),
'list-alt',
settings_title(),
$page == 'user_settings'
);
2017-01-02 03:57:23 +01:00
}
2017-01-02 15:43:36 +01:00
2017-01-02 03:57:23 +01:00
if (in_array('logout', $privileges)) {
2017-12-25 23:12:52 +01:00
$user_submenu[] = toolbar_item_link(
page_link_to('logout'),
'log-out',
logout_title(),
$page == 'logout'
);
2017-01-02 03:57:23 +01:00
}
2017-01-02 15:43:36 +01:00
2017-01-02 03:57:23 +01:00
return $user_submenu;
2011-10-11 22:18:36 +02:00
}
2017-01-03 03:22:48 +01:00
/**
* @return string
*/
2017-01-02 03:57:23 +01:00
function make_navigation()
{
global $page, $privileges;
2017-01-02 15:43:36 +01:00
2017-01-02 03:57:23 +01:00
$menu = [];
$pages = [
2017-01-03 14:12:17 +01:00
'news' => news_title(),
'user_meetings' => meetings_title(),
'user_shifts' => shifts_title(),
'angeltypes' => angeltypes_title(),
'user_questions' => questions_title()
2017-01-02 15:43:36 +01:00
];
2017-01-02 03:57:23 +01:00
foreach ($pages as $menu_page => $title) {
if (in_array($menu_page, $privileges)) {
$menu[] = toolbar_item_link(page_link_to($menu_page), '', $title, $menu_page == $page);
}
}
2017-01-02 15:43:36 +01:00
2017-01-02 03:57:23 +01:00
$menu = make_room_navigation($menu);
2017-01-02 15:43:36 +01:00
2017-01-02 03:57:23 +01:00
$admin_menu = [];
$admin_pages = [
2017-01-03 14:12:17 +01:00
'admin_arrive' => admin_arrive_title(),
'admin_active' => admin_active_title(),
'admin_user' => admin_user_title(),
'admin_free' => admin_free_title(),
'admin_questions' => admin_questions_title(),
'shifttypes' => shifttypes_title(),
'admin_shifts' => admin_shifts_title(),
'admin_rooms' => admin_rooms_title(),
'admin_groups' => admin_groups_title(),
'admin_import' => admin_import_title(),
'admin_log' => admin_log_title(),
'admin_event_config' => event_config_title()
2017-01-02 15:43:36 +01:00
];
2017-01-02 03:57:23 +01:00
foreach ($admin_pages as $menu_page => $title) {
if (in_array($menu_page, $privileges)) {
2017-12-25 23:12:52 +01:00
$admin_menu[] = toolbar_item_link(
page_link_to($menu_page),
'',
$title,
$menu_page == $page
);
2017-01-02 03:57:23 +01:00
}
}
2017-01-02 15:43:36 +01:00
2017-01-02 03:57:23 +01:00
if (count($admin_menu) > 0) {
2017-01-03 14:12:17 +01:00
$menu[] = toolbar_dropdown('', _('Admin'), $admin_menu);
2017-01-02 03:57:23 +01:00
}
2017-01-02 15:43:36 +01:00
2017-01-02 03:57:23 +01:00
return toolbar($menu);
2011-06-02 17:15:03 +02:00
}
/**
* Adds room navigation to the given menu.
*
2017-01-03 03:22:48 +01:00
* @param string[] $menu Rendered menu
* @return string[]
*/
2017-01-02 03:57:23 +01:00
function make_room_navigation($menu)
{
global $privileges;
2017-01-02 15:43:36 +01:00
if (!in_array('view_rooms', $privileges)) {
2017-01-02 03:57:23 +01:00
return $menu;
}
2017-01-02 15:43:36 +01:00
// Get a list of all rooms
$rooms = Rooms();
2017-01-02 03:57:23 +01:00
$room_menu = [];
if (in_array('admin_rooms', $privileges)) {
2017-01-03 14:12:17 +01:00
$room_menu[] = toolbar_item_link(page_link_to('admin_rooms'), 'list', _('Manage rooms'));
2017-01-02 03:57:23 +01:00
}
if (count($room_menu) > 0) {
$room_menu[] = toolbar_item_divider();
}
foreach ($rooms as $room) {
$room_menu[] = toolbar_item_link(room_link($room), 'map-marker', $room['Name']);
2017-01-02 03:57:23 +01:00
}
2017-01-03 03:22:48 +01:00
if (count($room_menu) > 0) {
2017-01-03 14:12:17 +01:00
$menu[] = toolbar_dropdown('map-marker', _('Rooms'), $room_menu);
2017-01-02 03:57:23 +01:00
}
2016-10-07 17:22:48 +02:00
return $menu;
}
/**
* Renders language selection.
*
* @return array
*/
function make_language_select()
{
$request = app('request');
$activeLocale = session()->get('locale');
$items = [];
foreach (config('locales') as $locale => $name) {
$url = url($request->getPathInfo(), ['set-locale' => $locale]);
$items[] = toolbar_item_link(
htmlspecialchars($url),
'',
$name,
$locale == $activeLocale
);
}
return $items;
}
2017-01-03 03:22:48 +01:00
/**
* @return string
*/
2017-01-02 03:57:23 +01:00
function make_menu()
{
return make_navigation();
2011-06-02 00:48:29 +02:00
}