From daf39e0463744f7652477dc43f47f37dcc556389 Mon Sep 17 00:00:00 2001 From: David Siegfried Date: Thu, 14 Jul 2022 07:32:42 +0000 Subject: add features to public room-list, closes #1306 Closes #1306 Merge request studip/studip!803 --- app/controllers/room_management/overview.php | 50 +++---- app/views/resources/_common/_action_menu.php | 118 +++++++++++++++++ app/views/resources/_common/_grouped_room_list.php | 61 +++++---- app/views/resources/_common/_resource_tr.php | 144 ++------------------- 4 files changed, 187 insertions(+), 186 deletions(-) create mode 100644 app/views/resources/_common/_action_menu.php diff --git a/app/controllers/room_management/overview.php b/app/controllers/room_management/overview.php index 4e8af5d..e36f9e2 100644 --- a/app/controllers/room_management/overview.php +++ b/app/controllers/room_management/overview.php @@ -36,19 +36,31 @@ class RoomManagement_OverviewController extends AuthenticatedController } } parent::before_filter($action, $args); - - if ($action == 'public_booking_plans') { - //Nothing else to be done in that case. - return; - } - $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_root = $GLOBALS['perm']->have_perm('root'); $this->user_is_global_resource_admin = ResourceManager::userHasGlobalPermission( $this->user, 'admin' ) || $this->user_is_root; + $this->show_global_admin_actions = $this->user_is_global_resource_admin + && ResourceManager::userHasGlobalPermission( + $this->user, + 'admin' + ); } public function index_action() @@ -65,20 +77,6 @@ class RoomManagement_OverviewController extends AuthenticatedController 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) { $this->redirect($this->url_for('/rooms')); return; @@ -371,11 +369,6 @@ class RoomManagement_OverviewController extends AuthenticatedController } else { $this->rooms = Room::findAll(); } - - $this->show_global_admin_actions = ResourceManager::userHasGlobalPermission( - $this->user, - 'admin' - ); } else { //Get only the locations for which //the user has at least user permissions: @@ -420,11 +413,6 @@ class RoomManagement_OverviewController extends AuthenticatedController ORDER BY sort_position DESC, name ASC, mkdate ASC"; $this->rooms = Room::findBySql($rooms_sql, $rooms_parameter); - - $this->show_global_admin_actions = ResourceManager::userHasGlobalPermission( - $this->user, - 'admin' - ); } if (!$this->rooms) { @@ -482,4 +470,4 @@ class RoomManagement_OverviewController extends AuthenticatedController ); } } -} \ No newline at end of file +} diff --git a/app/views/resources/_common/_action_menu.php b/app/views/resources/_common/_action_menu.php new file mode 100644 index 0000000..cdd63c9 --- /dev/null +++ b/app/views/resources/_common/_action_menu.php @@ -0,0 +1,118 @@ +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] : [] + ); +} +?> +render() ?> diff --git a/app/views/resources/_common/_grouped_room_list.php b/app/views/resources/_common/_grouped_room_list.php index c9a1237..d31fd31 100644 --- a/app/views/resources/_common/_grouped_room_list.php +++ b/app/views/resources/_common/_grouped_room_list.php @@ -1,15 +1,15 @@ @@ -17,46 +17,63 @@ Template parameters:

name) ?>

-
-

name) ?>

+

name) ?>

- + + + + - + link_for( sprintf( $link_template, - $room->id + $resource->id ) ); } else { - $room_link = $room->getActionLink('booking_plan'); + $room_link = $resource->getActionLink('booking_plan'); } ?> + diff --git a/app/views/resources/_common/_resource_tr.php b/app/views/resources/_common/_resource_tr.php index 93712da..7201d23 100644 --- a/app/views/resources/_common/_resource_tr.php +++ b/app/views/resources/_common/_resource_tr.php @@ -153,139 +153,17 @@ || $show_tutor_actions || $show_admin_actions || $show_global_admin_actions || $additional_actions): ?> -- cgit v1.0
+ + + +
> - name) ?> + > + name) ?> + $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)]; + ?> + render_partial('resources/_common/_action_menu.php', + compact('resource') + $perms + );?> +
- setContext($resource); - 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 (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] : [] - ); - } - } - ?> - render() ?> + render_partial('resources/_common/_action_menu.php', + compact( + 'show_user_actions', + 'show_autor_actions', + 'show_autor_actions', + 'show_admin_actions', + 'show_global_admin_actions', + 'additional_actions', + 'resource' + ) + );?>