2011-06-02 00:48:29 +02:00
|
|
|
<?php
|
2017-08-28 16:21:10 +02:00
|
|
|
|
2023-10-15 19:25:55 +02:00
|
|
|
use Engelsystem\Models\Location;
|
2020-12-18 18:27:10 +01:00
|
|
|
use Engelsystem\Models\Question;
|
2016-11-15 16:28:20 +01:00
|
|
|
use Engelsystem\UserHintsRenderer;
|
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()
|
|
|
|
{
|
2018-10-31 12:48:22 +01:00
|
|
|
$user = auth()->user();
|
2017-01-02 15:43:36 +01:00
|
|
|
|
2018-10-08 21:15:56 +02:00
|
|
|
if ($user) {
|
2023-01-22 19:16:33 +01:00
|
|
|
$hints_renderer = new UserHintsRenderer();
|
|
|
|
|
2017-01-02 03:57:23 +01:00
|
|
|
$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());
|
2023-08-10 11:33:06 +02:00
|
|
|
$hints_renderer->addHint(user_ifsg_certificate_required_hint());
|
2017-01-02 15:43:36 +01:00
|
|
|
|
|
|
|
// Important hints:
|
|
|
|
$hints_renderer->addHint(render_user_freeloader_hint(), true);
|
2023-12-22 11:08:39 +01:00
|
|
|
$hints_renderer->addHint(render_user_arrived_hint(true), true);
|
2023-11-12 18:07:40 +01:00
|
|
|
$hints_renderer->addHint(render_user_pronoun_hint(), true);
|
|
|
|
$hints_renderer->addHint(render_user_firstname_hint(), true);
|
|
|
|
$hints_renderer->addHint(render_user_lastname_hint(), true);
|
2024-04-10 18:29:12 +02:00
|
|
|
$hints_renderer->addHint(render_user_goodie_hint(), true);
|
2017-01-02 03:57:23 +01:00
|
|
|
$hints_renderer->addHint(render_user_dect_hint(), true);
|
2023-11-12 18:07:40 +01:00
|
|
|
$hints_renderer->addHint(render_user_mobile_hint(), true);
|
2023-01-22 19:16:33 +01:00
|
|
|
|
|
|
|
return $hints_renderer->render();
|
2017-01-02 03:57:23 +01:00
|
|
|
}
|
2017-01-02 15:43:36 +01:00
|
|
|
|
2023-01-22 19:16:33 +01:00
|
|
|
return '';
|
2016-11-14 19:10:29 +01:00
|
|
|
}
|
|
|
|
|
2019-11-26 20:12:43 +01:00
|
|
|
/**
|
|
|
|
* Returns the path of the current path with underscores instead of hyphens
|
|
|
|
*
|
|
|
|
* @return string
|
|
|
|
*/
|
|
|
|
function current_page()
|
|
|
|
{
|
|
|
|
return request()->query->get('p') ?: str_replace('-', '_', request()->path());
|
|
|
|
}
|
|
|
|
|
2017-01-03 03:22:48 +01:00
|
|
|
/**
|
|
|
|
* @return string
|
|
|
|
*/
|
2017-01-02 03:57:23 +01:00
|
|
|
function make_navigation()
|
|
|
|
{
|
2019-11-26 20:12:43 +01:00
|
|
|
$page = current_page();
|
2017-01-02 03:57:23 +01:00
|
|
|
$menu = [];
|
|
|
|
$pages = [
|
2023-10-03 18:59:46 +02:00
|
|
|
'news' => __('news.title'),
|
|
|
|
'meetings' => [__('news.title.meetings'), 'user_meetings'],
|
2024-03-24 15:05:24 +01:00
|
|
|
'user_shifts' => __('general.shifts'),
|
2023-10-01 22:33:58 +02:00
|
|
|
'angeltypes' => __('angeltypes.angeltypes'),
|
2020-12-18 18:27:10 +01:00
|
|
|
'questions' => [__('Ask the Heaven'), 'question.add'],
|
2017-01-02 15:43:36 +01:00
|
|
|
];
|
|
|
|
|
2020-12-18 18:27:10 +01:00
|
|
|
foreach ($pages as $menu_page => $options) {
|
|
|
|
if (!menu_is_allowed($menu_page, $options)) {
|
|
|
|
continue;
|
2017-01-02 03:57:23 +01:00
|
|
|
}
|
2020-12-18 18:27:10 +01:00
|
|
|
|
2022-12-25 11:59:45 +01:00
|
|
|
$title = ((array) $options)[0];
|
2023-12-04 23:33:07 +01:00
|
|
|
$menu[] = toolbar_item_link(
|
2023-12-06 19:03:12 +01:00
|
|
|
url(str_replace('_', '-', $menu_page)),
|
2023-12-04 23:33:07 +01:00
|
|
|
'',
|
|
|
|
$title,
|
|
|
|
$menu_page == $page
|
|
|
|
);
|
2016-09-29 11:28:42 +02:00
|
|
|
}
|
2017-01-02 15:43:36 +01:00
|
|
|
|
2023-10-15 19:25:55 +02:00
|
|
|
$menu = make_location_navigation($menu);
|
2017-01-02 15:43:36 +01:00
|
|
|
|
2017-01-02 03:57:23 +01:00
|
|
|
$admin_menu = [];
|
|
|
|
$admin_pages = [
|
2023-12-04 23:33:07 +01:00
|
|
|
// Examples:
|
|
|
|
// path => name,
|
|
|
|
// path => [name, permission],
|
|
|
|
|
2024-04-21 21:09:54 +02:00
|
|
|
'admin_arrive' => [admin_arrive_title(), 'users.arrive.list'],
|
2019-11-27 23:43:21 +01:00
|
|
|
'admin_active' => 'Active angels',
|
2021-07-22 21:22:21 +02:00
|
|
|
'users' => ['All Angels', 'admin_user'],
|
2019-11-27 23:43:21 +01:00
|
|
|
'admin_free' => 'Free angels',
|
2020-12-18 18:27:10 +01:00
|
|
|
'admin/questions' => ['Answer questions', 'question.edit'],
|
2023-10-25 02:42:11 +02:00
|
|
|
'admin/shifttypes' => ['shifttype.shifttypes', 'shifttypes'],
|
2019-11-27 23:43:21 +01:00
|
|
|
'admin_shifts' => 'Create shifts',
|
2023-10-15 19:25:55 +02:00
|
|
|
'admin/locations' => ['location.locations', 'admin_locations'],
|
2019-11-27 23:43:21 +01:00
|
|
|
'admin_groups' => 'Grouprights',
|
2020-04-07 15:08:49 +02:00
|
|
|
'admin/schedule' => ['schedule.import', 'schedule.import'],
|
2020-05-01 16:29:28 +02:00
|
|
|
'admin/logs' => ['log.log', 'admin_log'],
|
2019-11-27 23:43:21 +01:00
|
|
|
'admin_event_config' => 'Event config',
|
2017-01-02 15:43:36 +01:00
|
|
|
];
|
|
|
|
|
2019-03-06 19:28:07 +01:00
|
|
|
if (config('autoarrive')) {
|
|
|
|
unset($admin_pages['admin_arrive']);
|
|
|
|
}
|
|
|
|
|
2019-11-27 23:43:21 +01:00
|
|
|
foreach ($admin_pages as $menu_page => $options) {
|
2020-12-18 18:27:10 +01:00
|
|
|
if (!menu_is_allowed($menu_page, $options)) {
|
|
|
|
continue;
|
2019-11-27 23:43:21 +01:00
|
|
|
}
|
|
|
|
|
2022-12-25 11:59:45 +01:00
|
|
|
$title = ((array) $options)[0];
|
2021-04-17 14:49:53 +02:00
|
|
|
$admin_menu[] = toolbar_dropdown_item(
|
2023-11-13 16:56:52 +01:00
|
|
|
url(str_replace('_', '-', $menu_page)),
|
2023-12-04 23:33:07 +01:00
|
|
|
htmlspecialchars(__($title)),
|
2020-12-18 18:27:10 +01:00
|
|
|
$menu_page == $page
|
|
|
|
);
|
2016-09-29 11:28:42 +02:00
|
|
|
}
|
2017-01-02 15:43:36 +01:00
|
|
|
|
2017-01-02 03:57:23 +01:00
|
|
|
if (count($admin_menu) > 0) {
|
2023-01-22 19:16:33 +01:00
|
|
|
$menu[] = toolbar_dropdown(__('Admin'), $admin_menu);
|
2017-01-02 03:57:23 +01:00
|
|
|
}
|
2017-01-02 15:43:36 +01:00
|
|
|
|
2023-01-22 19:16:33 +01:00
|
|
|
return join("\n", $menu);
|
2011-06-02 17:15:03 +02:00
|
|
|
}
|
|
|
|
|
2020-12-18 18:27:10 +01:00
|
|
|
/**
|
|
|
|
* @param string $page
|
|
|
|
* @param string|string[] $options
|
|
|
|
*
|
|
|
|
* @return bool
|
|
|
|
*/
|
|
|
|
function menu_is_allowed(string $page, $options)
|
|
|
|
{
|
2022-12-25 11:59:45 +01:00
|
|
|
$options = (array) $options;
|
2020-12-18 18:27:10 +01:00
|
|
|
$permissions = $page;
|
|
|
|
|
|
|
|
if (isset($options[1])) {
|
|
|
|
$permissions = $options[1];
|
|
|
|
}
|
|
|
|
|
|
|
|
return auth()->can($permissions);
|
|
|
|
}
|
|
|
|
|
2016-10-05 18:56:50 +02:00
|
|
|
/**
|
2023-10-15 19:25:55 +02:00
|
|
|
* Adds location navigation to the given menu.
|
2016-10-05 18:56:50 +02:00
|
|
|
*
|
2017-01-03 03:22:48 +01:00
|
|
|
* @param string[] $menu Rendered menu
|
|
|
|
* @return string[]
|
2016-10-05 18:56:50 +02:00
|
|
|
*/
|
2023-10-15 19:25:55 +02:00
|
|
|
function make_location_navigation($menu)
|
2017-01-02 03:57:23 +01:00
|
|
|
{
|
2023-10-15 19:25:55 +02:00
|
|
|
if (!auth()->can('view_locations')) {
|
2017-01-02 03:57:23 +01:00
|
|
|
return $menu;
|
|
|
|
}
|
2017-01-02 15:43:36 +01:00
|
|
|
|
2023-10-15 19:25:55 +02:00
|
|
|
// Get a list of all locations
|
|
|
|
$locations = Location::orderBy('name')->get();
|
|
|
|
$location_menu = [];
|
|
|
|
if (auth()->can('admin_locations')) {
|
|
|
|
$location_menu[] = toolbar_dropdown_item(
|
2023-11-13 16:56:52 +01:00
|
|
|
url('/admin/locations'),
|
2023-10-15 19:25:55 +02:00
|
|
|
__('Manage locations'),
|
|
|
|
false,
|
|
|
|
'list'
|
|
|
|
);
|
2017-01-02 03:57:23 +01:00
|
|
|
}
|
2023-10-15 19:25:55 +02:00
|
|
|
if (count($location_menu) > 0) {
|
|
|
|
$location_menu[] = toolbar_dropdown_item_divider();
|
2017-01-02 03:57:23 +01:00
|
|
|
}
|
2023-10-15 19:25:55 +02:00
|
|
|
foreach ($locations as $location) {
|
|
|
|
$location_menu[] = toolbar_dropdown_item(location_link($location), $location->name, false, 'pin-map-fill');
|
2017-01-02 03:57:23 +01:00
|
|
|
}
|
2023-10-15 19:25:55 +02:00
|
|
|
if (count($location_menu) > 0) {
|
|
|
|
$menu[] = toolbar_dropdown(__('Locations'), $location_menu);
|
2017-01-02 03:57:23 +01:00
|
|
|
}
|
2016-10-07 17:22:48 +02:00
|
|
|
return $menu;
|
2016-10-05 18:56:50 +02:00
|
|
|
}
|
|
|
|
|
2018-08-28 22:23:59 +02:00
|
|
|
/**
|
|
|
|
* Renders language selection.
|
|
|
|
*
|
|
|
|
* @return array
|
|
|
|
*/
|
|
|
|
function make_language_select()
|
|
|
|
{
|
|
|
|
$request = app('request');
|
|
|
|
$activeLocale = session()->get('locale');
|
|
|
|
|
|
|
|
$items = [];
|
|
|
|
foreach (config('locales') as $locale => $name) {
|
2023-01-22 19:16:33 +01:00
|
|
|
$url = url($request->getPathInfo(), [...$request->getQueryParams(), 'set-locale' => $locale]);
|
2018-08-28 22:23:59 +02:00
|
|
|
|
2021-04-17 14:49:53 +02:00
|
|
|
$items[] = toolbar_dropdown_item(
|
2018-08-28 22:23:59 +02:00
|
|
|
htmlspecialchars($url),
|
|
|
|
$name,
|
|
|
|
$locale == $activeLocale
|
|
|
|
);
|
|
|
|
}
|
|
|
|
return $items;
|
|
|
|
}
|
2020-12-18 18:27:10 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Renders a hint for new questions to answer.
|
|
|
|
*
|
|
|
|
* @return string|null
|
|
|
|
*/
|
|
|
|
function admin_new_questions()
|
|
|
|
{
|
|
|
|
if (!auth()->can('question.edit') || current_page() == 'admin/questions') {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
$unanswered_questions = Question::unanswered()->count();
|
|
|
|
if (!$unanswered_questions) {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
2023-11-13 16:56:52 +01:00
|
|
|
return '<a href="' . url('/admin/questions') . '">'
|
2020-12-18 18:27:10 +01:00
|
|
|
. __('There are unanswered questions!')
|
|
|
|
. '</a>';
|
|
|
|
}
|