Skip to content
Snippets Groups Projects
Commit daf39e04 authored by David Siegfried's avatar David Siegfried
Browse files

add features to public room-list, closes #1306

Closes #1306

Merge request studip/studip!803
parent 60080354
No related branches found
No related tags found
No related merge requests found
...@@ -36,19 +36,31 @@ class RoomManagement_OverviewController extends AuthenticatedController ...@@ -36,19 +36,31 @@ class RoomManagement_OverviewController extends AuthenticatedController
} }
} }
parent::before_filter($action, $args); parent::before_filter($action, $args);
if ($action == 'public_booking_plans') {
//Nothing else to be done in that case.
return;
}
$this->user = User::findCurrent(); $this->user = User::findCurrent();
$this->show_resource_actions = (
ResourceManager::userHasGlobalPermission($this->user, 'autor')
||
ResourceManager::userHasResourcePermissions($this->user, 'autor')
);
$this->show_admin_actions = (
$this->user_is_global_resource_admin
||
ResourceManager::userHasResourcePermissions($this->user)
||
$GLOBALS['perm']->have_perm('root')
);
$this->user_is_global_resource_user = ResourceManager::userHasGlobalPermission($this->user); $this->user_is_global_resource_user = ResourceManager::userHasGlobalPermission($this->user);
$this->user_is_root = $GLOBALS['perm']->have_perm('root'); $this->user_is_root = $GLOBALS['perm']->have_perm('root');
$this->user_is_global_resource_admin = ResourceManager::userHasGlobalPermission( $this->user_is_global_resource_admin = ResourceManager::userHasGlobalPermission(
$this->user, $this->user,
'admin' 'admin'
) || $this->user_is_root; ) || $this->user_is_root;
$this->show_global_admin_actions = $this->user_is_global_resource_admin
&& ResourceManager::userHasGlobalPermission(
$this->user,
'admin'
);
} }
public function index_action() public function index_action()
...@@ -65,20 +77,6 @@ class RoomManagement_OverviewController extends AuthenticatedController ...@@ -65,20 +77,6 @@ class RoomManagement_OverviewController extends AuthenticatedController
throw new AccessDeniedException(); throw new AccessDeniedException();
} }
$this->show_resource_actions = (
ResourceManager::userHasGlobalPermission($this->user, 'autor')
||
ResourceManager::userHasResourcePermissions($this->user, 'autor')
);
$this->show_admin_actions = (
$this->user_is_global_resource_admin
||
ResourceManager::userHasResourcePermissions($this->user)
||
$GLOBALS['perm']->have_perm('root')
);
if (!$this->show_admin_actions) { if (!$this->show_admin_actions) {
$this->redirect($this->url_for('/rooms')); $this->redirect($this->url_for('/rooms'));
return; return;
...@@ -371,11 +369,6 @@ class RoomManagement_OverviewController extends AuthenticatedController ...@@ -371,11 +369,6 @@ class RoomManagement_OverviewController extends AuthenticatedController
} else { } else {
$this->rooms = Room::findAll(); $this->rooms = Room::findAll();
} }
$this->show_global_admin_actions = ResourceManager::userHasGlobalPermission(
$this->user,
'admin'
);
} else { } else {
//Get only the locations for which //Get only the locations for which
//the user has at least user permissions: //the user has at least user permissions:
...@@ -420,11 +413,6 @@ class RoomManagement_OverviewController extends AuthenticatedController ...@@ -420,11 +413,6 @@ class RoomManagement_OverviewController extends AuthenticatedController
ORDER BY sort_position DESC, name ASC, mkdate ASC"; ORDER BY sort_position DESC, name ASC, mkdate ASC";
$this->rooms = Room::findBySql($rooms_sql, $rooms_parameter); $this->rooms = Room::findBySql($rooms_sql, $rooms_parameter);
$this->show_global_admin_actions = ResourceManager::userHasGlobalPermission(
$this->user,
'admin'
);
} }
if (!$this->rooms) { if (!$this->rooms) {
...@@ -482,4 +470,4 @@ class RoomManagement_OverviewController extends AuthenticatedController ...@@ -482,4 +470,4 @@ class RoomManagement_OverviewController extends AuthenticatedController
); );
} }
} }
} }
\ No newline at end of file
<?php
//Build the actions as array. Ordering is done by array indexes.
$actions = [];
if ($show_user_actions) {
$actions['0010'] = [
$resource->getActionLink('show'),
_('Details'),
Icon::create('info-circle'),
['data-dialog' => 'size=auto']
];
$actions['0020'] = [
$resource->getActionLink('booking_plan'),
_('Belegungsplan'),
Icon::create('timetable')
];
$actions['0030'] = [
$resource->getActionLink('semester_plan'),
_('Semester-Belegungsplan'),
Icon::create('timetable'),
['target' => '_blank']
];
if ($show_admin_actions) {
$actions['0040'] = [
$resource->getActionLink('permissions'),
_('Berechtigungen verwalten'),
Icon::create('roles2'),
['data-dialog' => 'size=auto']
];
$actions['0050'] = [
$resource->getActionLink('temporary_permissions'),
_('Temporäre Berechtigungen verwalten'),
Icon::create('roles2'),
['data-dialog' => 'size=auto']
];
$actions['0060'] = [
$resource->getActionLink('edit'),
_('Bearbeiten'),
Icon::create('edit'),
['data-dialog' => 'size=auto']
];
}
if ($show_autor_actions) {
$actions['0070'] = [
$resource->getActionLink(
'assign-undecided',
['no_reload' => 1]
),
_('Buchen'),
Icon::create('lock-locked'),
['data-dialog' => 'size=big']
];
if ($show_global_admin_actions) {
$actions['0080'] = [
$resource->getActionLink(
'delete_bookings',
['no_reload' => 1]
),
_('Buchungen löschen'),
Icon::create('trash'),
['data-dialog' => 'size=auto']
];
}
}
if ($show_user_actions) {
$actions['0090'] = [
$resource->getActionLink('export_bookings'),
_('Buchungen exportieren'),
Icon::create('file-excel'),
['data-dialog' => 'size=auto']
];
}
$actions['0100'] = [
$resource->getActionLink('files'),
_('Dateien anzeigen'),
Icon::create($resource->hasFiles() ? 'folder-full' : 'folder-empty')
];
if ($show_global_admin_actions) {
$actions['0110'] = [
$resource->getActionLink('delete'),
_('Löschen'),
Icon::create('trash'),
['data-dialog' => '']
];
}
} else {
if ($resource->propertyExists('booking_plan_is_public')) {
if ($resource->getProperty('booking_plan_is_public')) {
$actions['0020'] = [
$resource->getActionLink('booking_plan'),
_('Belegungsplan anzeigen'),
Icon::create('timetable'),
['target' => '_blank']
];
}
}
}
//Add additional actions for the action menu, if set:
if (isset($additional_actions) && is_array($additional_actions)) {
$actions = array_merge($actions, $additional_actions);
}
//Now we filter and sort the actions by key:
$actions = array_filter($actions, 'is_array');
ksort($actions);
$action_menu = ActionMenu::get()->setContext($resource);
//And finally we add the actions to the action menu:
foreach ($actions as $action) {
$action_menu->addLink(
$action[0],
$action[1],
$action[2],
(isset($action[3]) && is_array($action[3])) ? $action[3] : []
);
}
?>
<?= $action_menu->render() ?>
<? <?
/** /**
Template parameters: * Template parameters:
- $title: The list title * - $title: The list title
- $grouped_rooms: The rooms, grouped by RoomManager::groupRooms * - $grouped_rooms: The rooms, grouped by RoomManager::groupRooms
- $link_template: An optional link template where the room-ID is * - $link_template: An optional link template where the room-ID is
represented by the only "%s" placeholder. * represented by the only "%s" placeholder.
If $link_template is not set, the link to the booking plan * If $link_template is not set, the link to the booking plan
of the room is generated. * of the room is generated.
- $show_in_dialog: Whether to show the room link in a dialog (true) * - $show_in_dialog: Whether to show the room link in a dialog (true)
or not (false). * or not (false).
*/ */
?> ?>
<? if ($grouped_rooms) : ?> <? if ($grouped_rooms) : ?>
<? if ($title) : ?> <? if ($title) : ?>
...@@ -17,46 +17,63 @@ Template parameters: ...@@ -17,46 +17,63 @@ Template parameters:
<? endif ?> <? endif ?>
<? foreach ($grouped_rooms as $group) : ?> <? foreach ($grouped_rooms as $group) : ?>
<? <?
$location = $group['location']; $location = $group['location'];
$buildings = $group['buildings']; $buildings = $group['buildings'];
?> ?>
<div class="studip-widget-wrapper"> <div class="studip-widget-wrapper">
<article class="studip"> <article class="studip">
<header><h1><?= htmlReady($location->name) ?></h1></header> <header><h1><?= htmlReady($location->name) ?></h1></header>
<? foreach ($buildings as $building_group) : ?> <? foreach ($buildings as $building_group) : ?>
<?
$building = $building_group['building'];
$rooms = $building_group['rooms'];
?>
<article class="studip toggle"> <article class="studip toggle">
<header><h1><a href="#"><?= htmlReady($building->name) ?></a></h1></header> <header><h1><a href="#"><?= htmlReady($building_group['building']->name) ?></a></h1></header>
<section> <section>
<table class="default"> <table class="default">
<thead> <thead>
<tr><th><?= _('Raum') ?></th></tr> <tr>
<th>
<?= _('Raum') ?>
</th>
<th class="actions">
<?= _('Aktionen') ?>
</th>
</tr>
</thead> </thead>
<tbody> <tbody>
<? foreach ($rooms as $room) : ?> <? foreach ($building_group['rooms'] as $resource) : ?>
<? <?
$room_link = ''; $room_link = '';
if ($link_template) { if ($link_template) {
$room_link = $controller->link_for( $room_link = $controller->link_for(
sprintf( sprintf(
$link_template, $link_template,
$room->id $resource->id
) )
); );
} else { } else {
$room_link = $room->getActionLink('booking_plan'); $room_link = $resource->getActionLink('booking_plan');
} }
?> ?>
<tr> <tr>
<td> <td>
<a href="<?= $room_link ?>" <a href="<?= $room_link ?>"
<?= $show_in_dialog ? 'data-dialog="size=big"' : '' ?>> <?= $show_in_dialog ? 'data-dialog="size=big"' : '' ?>>
<?= htmlReady($room->name) ?> <?= htmlReady($resource->name) ?>
</a> </a>
</td> </td>
<td class="actions">
<?
$perms = [
'show_global_admin_actions' => $show_global_admin_actions,
'show_admin_actions' => $resource->userHasPermission($user, 'admin'),
'show_tutor_actions' => $resource->userHasPermission($user, 'tutor'),
'show_autor_actions' => $resource->userHasPermission($user, 'autor'),
'show_user_actions' => $resource->userHasPermission($user, 'user'),
'user_has_booking_rights' => $resource->userHasBookingRights($user)];
?>
<?= $this->render_partial('resources/_common/_action_menu.php',
compact('resource') + $perms
);?>
</td>
</tr> </tr>
<? endforeach ?> <? endforeach ?>
</tbody> </tbody>
......
...@@ -153,139 +153,17 @@ ...@@ -153,139 +153,17 @@
|| $show_tutor_actions || $show_admin_actions || $show_tutor_actions || $show_admin_actions
|| $show_global_admin_actions || $additional_actions): ?> || $show_global_admin_actions || $additional_actions): ?>
<td class="actions"> <td class="actions">
<? <?= $this->render_partial('resources/_common/_action_menu.php',
//Build the actions as array. Ordering is done by array indexes. compact(
'show_user_actions',
$actions = []; 'show_autor_actions',
$action_menu = ActionMenu::get()->setContext($resource); 'show_autor_actions',
if ($show_user_actions) { 'show_admin_actions',
$actions['0010'] = [ 'show_global_admin_actions',
$resource->getActionLink('show'), 'additional_actions',
_('Details'), 'resource'
Icon::create('info-circle'), )
['data-dialog' => 'size=auto'] );?>
];
$actions['0020'] = [
$resource->getActionLink('booking_plan'),
_('Belegungsplan'),
Icon::create('timetable')
];
$actions['0030'] = [
$resource->getActionLink('semester_plan'),
_('Semester-Belegungsplan'),
Icon::create('timetable'),
['target' => '_blank']
];
if ($show_admin_actions) {
$actions['0040'] = [
$resource->getActionLink('permissions'),
_('Berechtigungen verwalten'),
Icon::create('roles2'),
['data-dialog' => 'size=auto']
];
$actions['0050'] = [
$resource->getActionLink('temporary_permissions'),
_('Temporäre Berechtigungen verwalten'),
Icon::create('roles2'),
['data-dialog' => 'size=auto']
];
$actions['0060'] = [
$resource->getActionLink('edit'),
_('Bearbeiten'),
Icon::create('edit'),
['data-dialog' => 'size=auto']
];
}
if ($show_autor_actions) {
$actions['0070'] = [
$resource->getActionLink(
'assign-undecided',
[
'no_reload' => '1'
]
),
_('Buchen'),
Icon::create('lock-locked'),
[
'data-dialog' => 'size=big'
]
];
if ($show_global_admin_actions) {
$actions['0080'] = [
$resource->getActionLink(
'delete_bookings',
[
'no_reload' => '1'
]
),
_('Buchungen löschen'),
Icon::create('trash'),
['data-dialog' => 'size=auto']
];
}
}
if ($show_user_actions) {
$actions['0090'] = [
$resource->getActionLink('export_bookings'),
_('Buchungen exportieren'),
Icon::create('file-excel'),
['data-dialog' => 'size=auto']
];
}
$actions['0100'] = [
$resource->getActionLink('files'),
_('Dateien anzeigen'),
Icon::create(
$resource->hasFiles()
? 'folder-full'
: 'folder-empty'
),
[]
];
if ($show_global_admin_actions) {
$actions['0110'] = [
$resource->getActionLink('delete'),
_('Löschen'),
Icon::create('trash'),
['data-dialog' => '']
];
}
} else {
if ($resource->propertyExists('booking_plan_is_public')) {
if ($resource->getProperty('booking_plan_is_public')) {
$actions['0020'] = [
$resource->getActionLink('booking_plan'),
_('Belegungsplan anzeigen'),
Icon::create('timetable'),
[
'target' => '_blank'
]
];
}
}
}
//Add additional actions for the action menu, if set:
if (is_array($additional_actions)) {
$actions = array_merge($actions, $additional_actions);
}
//Now we sort the actions by key:
ksort($actions);
//And finally we add the actions to the action menu:
foreach ($actions as $action) {
if (is_array($action)) {
$action_menu->addLink(
$action[0],
$action[1],
$action[2],
is_array($action[3]) ? $action[3] : []
);
}
}
?>
<?= $action_menu->render() ?>
</td> </td>
<? endif ?> <? endif ?>
</tr> </tr>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment