diff --git a/app/controllers/resources/room_group.php b/app/controllers/resources/room_group.php index 91301976b0323fc9e0228a3d61048d60fef106a2..2b383b446e4b1ace06703562183fce342cd8327b 100644 --- a/app/controllers/resources/room_group.php +++ b/app/controllers/resources/room_group.php @@ -144,27 +144,12 @@ class Resources_RoomGroupController extends AuthenticatedController $clipboard->name . ': ' . _('Berechtigungen setzen') ); - $selected_clipboard_item_ids = $_SESSION['selected_clipboard_items']; - - if ($selected_clipboard_item_ids) { - $this->room_ids = $clipboard->getSomeRangeIds( - 'Room', - $selected_clipboard_item_ids + $this->room_ids = $clipboard->getAllRangeIds('Room'); + if (!$this->room_ids) { + PageLayout::postInfo( + _('Die Raumgruppe enthält keine Räume!') ); - if (!$this->room_ids) { - PageLayout::postError( - _('Es wurden keine Räume ausgewählt!') - ); - return; - } - } else { - $this->room_ids = $clipboard->getAllRangeIds('Room'); - if (!$this->room_ids) { - PageLayout::postInfo( - _('Die Raumgruppe enthält keine Räume!') - ); - return; - } + return; } $this->rooms = Room::findMany($this->room_ids); diff --git a/app/controllers/room_management/planning.php b/app/controllers/room_management/planning.php index 74ea008a159981d80d906612751c0be6a86e6b53..95d806bde139109e5563980fcac83d2676cae3db 100644 --- a/app/controllers/room_management/planning.php +++ b/app/controllers/room_management/planning.php @@ -30,12 +30,11 @@ class RoomManagement_PlanningController extends AuthenticatedController if (Navigation::hasItem('/resources/planning/index')) { Navigation::activateItem('/resources/planning/index'); } - + $selected_clipboard_id = Request::get('clipboard_id', $selected_clipboard_id); if ($selected_clipboard_id) { $_SESSION['selected_clipboard_id'] = $selected_clipboard_id; - $this->redirect( - $this->url_for('room_management/planning/index', $_GET) - ); + } else { + $selected_clipboard_id = $_SESSION['selected_clipboard_id']; } $this->display_all_requests = Request::get('display_all_requests'); @@ -80,22 +79,23 @@ class RoomManagement_PlanningController extends AuthenticatedController $dpicker->addElement(new WidgetElement($picker_html)); $sidebar->addWidget($dpicker); - //Add clipboard widget: - $clipboard_widget = new RoomClipboardWidget(); - $clipboard_widget->setApplyButtonTitle( - _('Anzeigen') - ); - $sidebar->addWidget($clipboard_widget); - - //Check if a clipboard is selected: - $selected_clipboard_id = $_SESSION['selected_clipboard_id']; - if (!$selected_clipboard_id) { - $clipboards = Clipboard::getClipboardsForUser($GLOBALS['user']->id); - if (!empty($clipboards)) { - $selected_clipboard_id = $clipboards[0]->id; + $clipboards = Clipboard::getClipboardsForUser($GLOBALS['user']->id); + if (!empty($clipboards)) { + $clipboard_widget = new SelectWidget( + _('Individuelle Raumgruppen'), + $this->indexURL(), + 'clipboard_id', + 'get' + ); + foreach ($clipboards as $clipboard) { + $clipboard_widget->addElement(new SelectElement( + $clipboard->id, + $clipboard->name, + $clipboard->id === $selected_clipboard_id + ), "clipboard_id-{$clipboard->id}"); } + $sidebar->addWidget($clipboard_widget); } - $selected_clipboard_item_ids = $_SESSION['selected_clipboard_items']; $rooms = []; if ($selected_clipboard_id) { @@ -105,19 +105,7 @@ class RoomManagement_PlanningController extends AuthenticatedController PageLayout::setTitle( $clipboard->name . ': ' . _('Raumgruppen-Belegungsplan') ); - if ($selected_clipboard_item_ids) { - //The array of current clipboard item IDs is not empty. - //This means that at least one but not necessarily all - //clipboard items are selected. - $room_ids = $clipboard->getSomeRangeIds( - 'Room', - $selected_clipboard_item_ids - ); - } else { - //Use all items from the clipboard: - $room_ids = $clipboard->getAllRangeIds('Room'); - } - + $room_ids = $clipboard->getAllRangeIds('Room'); $rooms = Room::findMany($room_ids); } else { $this->no_clipboard = true; @@ -270,11 +258,11 @@ class RoomManagement_PlanningController extends AuthenticatedController Navigation::activateItem('/resources/planning/semestergroup_plan'); } + $selected_clipboard_id = Request::get('clipboard_id', $selected_clipboard_id); if ($selected_clipboard_id) { $_SESSION['selected_clipboard_id'] = $selected_clipboard_id; - $this->redirect( - $this->url_for('room_management/planning/semester_plan', $_GET) - ); + } else { + $selected_clipboard_id = $_SESSION['selected_clipboard_id']; } $this->display_all_requests = Request::get('display_all_requests'); @@ -379,17 +367,26 @@ class RoomManagement_PlanningController extends AuthenticatedController ); $sidebar->addWidget($semester_selector); - //Add clipboard widget: - $clipboard_widget = new RoomClipboardWidget(); - $clipboard_widget->setApplyButtonTitle( - _('Anzeigen') - ); - $sidebar->addWidget($clipboard_widget); + $clipboards = Clipboard::getClipboardsForUser($GLOBALS['user']->id); + if (!empty($clipboards)) { + $clipboard_widget = new SelectWidget( + _('Individuelle Raumgruppen'), + $this->semester_planURL(), + 'clipboard_id', + 'get' + ); + foreach ($clipboards as $clipboard) { + $clipboard_widget->addElement(new SelectElement( + $clipboard->id, + $clipboard->name, + $clipboard->id === $selected_clipboard_id + ), "clipboard_id-{$clipboard->id}"); + } + $sidebar->addWidget($clipboard_widget); + } //Check if a clipboard is selected: $selected_clipboard_id = $_SESSION['selected_clipboard_id']; - $selected_clipboard_item_ids = $_SESSION['selected_clipboard_items']; - $rooms = []; if ($selected_clipboard_id) { $clipboard = Clipboard::find($selected_clipboard_id); @@ -398,19 +395,7 @@ class RoomManagement_PlanningController extends AuthenticatedController PageLayout::setTitle( $clipboard->name . ': ' . _('Raumgruppen-Semester-Belegungsplan') ); - if ($selected_clipboard_item_ids) { - //The array of current clipboard item IDs is not empty. - //This means that at least one but not necessarily all - //clipboard items are selected. - $room_ids = $clipboard->getSomeRangeIds( - 'Room', - $selected_clipboard_item_ids - ); - } else { - //Use all items from the clipboard: - $room_ids = $clipboard->getAllRangeIds('Room'); - } - + $room_ids = $clipboard->getAllRangeIds('Room'); $rooms = Room::findMany($room_ids); } else { $this->no_clipboard = true; @@ -555,7 +540,6 @@ class RoomManagement_PlanningController extends AuthenticatedController //Check if the clipboard is selected: $selected_clipboard_id = $_SESSION['selected_clipboard_id']; - $selected_clipboard_item_ids = $_SESSION['selected_clipboard_items']; $user = User::findCurrent(); @@ -602,9 +586,6 @@ class RoomManagement_PlanningController extends AuthenticatedController } $this->selected_room_ids = []; - if ($selected_clipboard_id == $this->clipboard->id) { - $this->selected_room_ids = $selected_clipboard_item_ids; - } //Get all available semesters: $this->available_semesters = Semester::getAll(); @@ -1060,11 +1041,11 @@ class RoomManagement_PlanningController extends AuthenticatedController Navigation::activateItem('/resources/planning/booking_comments'); } + $selected_clipboard_id = Request::get('clipboard_id', $selected_clipboard_id); if ($selected_clipboard_id) { $_SESSION['selected_clipboard_id'] = $selected_clipboard_id; - $this->redirect( - $this->url_for('room_management/planning/booking_comments', $_GET) - ); + } else { + $selected_clipboard_id = $_SESSION['selected_clipboard_id']; } //Get the selected date or use the current date, if none specified: @@ -1099,20 +1080,23 @@ class RoomManagement_PlanningController extends AuthenticatedController $sidebar->addWidget($date_search); //Add clipboard widget: - $clipboard_widget = new RoomClipboardWidget(); - $clipboard_widget->setApplyButtonTitle( - _('Anzeigen') - ); - $sidebar->addWidget($clipboard_widget); - - $selected_clipboard_id = $_SESSION['selected_clipboard_id']; - if (!$selected_clipboard_id) { - $clipboards = Clipboard::getClipboardsForUser($GLOBALS['user']->id); - if (!empty($clipboards)) { - $selected_clipboard_id = $clipboards[0]->id; + $clipboards = Clipboard::getClipboardsForUser($GLOBALS['user']->id); + if (!empty($clipboards)) { + $clipboard_widget = new SelectWidget( + _('Individuelle Raumgruppen'), + $this->booking_commentsURL(), + 'clipboard_id', + 'get' + ); + foreach ($clipboards as $clipboard) { + $clipboard_widget->addElement(new SelectElement( + $clipboard->id, + $clipboard->name, + $clipboard->id === $selected_clipboard_id + ), "clipboard_id-{$clipboard->id}"); } + $sidebar->addWidget($clipboard_widget); } - $selected_clipboard_item_ids = $_SESSION['selected_clipboard_items']; $this->current_user = User::findCurrent(); $this->room_ids = []; @@ -1123,26 +1107,12 @@ class RoomManagement_PlanningController extends AuthenticatedController PageLayout::setTitle( $clipboard->name . ': ' . _('Buchungen mit Kommentaren') ); - if ($selected_clipboard_item_ids) { - //The array of current clipboard item IDs is not empty. - //This means that at least one but not necessarily all - //clipboard items are retrieved, checked for user - //resource permissions and then added, if the user's - //permissions are high enough. - $room_ids = $clipboard->getSomeRangeIds( - 'Room', - $selected_clipboard_item_ids - ); - } else { - //Use all items from the clipboard: - $room_ids = $clipboard->getAllRangeIds('Room'); - } - + $room_ids = $clipboard->getAllRangeIds('Room'); $rooms = Resource::findMany($room_ids); foreach ($rooms as $room) { $room = $room->getDerivedClassInstance(); if ($room instanceof Room) { - if ($room->userHasPermission($this->current_user, 'user')) { + if ($room->userHasPermission($this->current_user)) { $this->room_ids[] = $room->id; } } diff --git a/app/routes/RoomClipboard.php b/app/routes/RoomClipboard.php index b3c611582b98bf97a109bb23c30861e1526e9a05..cfb9f2e38b34431fb158ea7f259f2cade858b49c 100644 --- a/app/routes/RoomClipboard.php +++ b/app/routes/RoomClipboard.php @@ -87,7 +87,6 @@ class RoomClipboard extends \RESTAPI\RouteMap //Check if a clipboard is selected: $selected_clipboard_id = $_SESSION['selected_clipboard_id']; - $selected_clipboard_item_ids = $_SESSION['selected_clipboard_items']; $rooms = []; if ($clipboard_id) { @@ -98,21 +97,7 @@ class RoomClipboard extends \RESTAPI\RouteMap $this->halt(400, 'No clipboard selected!'); } if ($clipboard) { - $room_ids = []; - if ($selected_clipboard_id && $selected_clipboard_item_ids) { - //The array of current clipboard item IDs is not empty. - //This means that at least one but not necessarily all - //clipboard items are selected. - $room_ids = $clipboard->getSomeRangeIds( - 'Room', - $selected_clipboard_item_ids - ); - } else { - //Use all items from the clipboard: - $room_ids = $clipboard->getAllRangeIds('Room'); - } - - $rooms = \Room::findMany($room_ids); + $rooms = \Room::findMany($clipboard->getAllRangeIds('Room')); } else { $this->halt(404, 'Clipboard not found!'); } @@ -200,7 +185,6 @@ class RoomClipboard extends \RESTAPI\RouteMap //Check if a clipboard is selected: $selected_clipboard_id = $_SESSION['selected_clipboard_id']; - $selected_clipboard_item_ids = $_SESSION['selected_clipboard_items']; $rooms = []; if ($clipboard_id) { @@ -211,21 +195,7 @@ class RoomClipboard extends \RESTAPI\RouteMap $this->halt(400, 'No clipboard selected!'); } if ($clipboard) { - $room_ids = []; - if ($selected_clipboard_id && $selected_clipboard_item_ids) { - //The array of current clipboard item IDs is not empty. - //This means that at least one but not necessarily all - //clipboard items are selected. - $room_ids = $clipboard->getSomeRangeIds( - 'Room', - $selected_clipboard_item_ids - ); - } else { - //Use all items from the clipboard: - $room_ids = $clipboard->getAllRangeIds('Room'); - } - - $rooms = \Room::findMany($room_ids); + $rooms = \Room::findMany($clipboard->getAllRangeIds('Room')); } else { $this->halt(404, 'Clipboard not found!'); } diff --git a/lib/classes/sidebar/ClipboardWidget.class.php b/lib/classes/sidebar/ClipboardWidget.class.php index 9de627df0e11620a2b198f1672a01f70b03cacb0..90de0c40d24d75a8f05194c9e82c6a26554de75c 100644 --- a/lib/classes/sidebar/ClipboardWidget.class.php +++ b/lib/classes/sidebar/ClipboardWidget.class.php @@ -11,7 +11,6 @@ class ClipboardWidget extends SidebarWidget { protected $draggable_items; - protected $current_selected_items = []; /** * clipboard_widget_id is required in the case that multiple @@ -71,10 +70,6 @@ class ClipboardWidget extends SidebarWidget $this->updateSessionVariables(); $this->current_clipboard_id = $_SESSION['selected_clipboard_id']; - if (is_array($_SESSION['selected_clipboard_items'])) { - $this->current_selected_items = $_SESSION['selected_clipboard_items']; - } - $this->setId("ClipboardWidget_{$this->clipboard_widget_id}"); $this->setAdditionalAttribute('data-widget_id', $this->clipboard_widget_id); $this->addLayoutCSSClass('clipboard-widget'); @@ -88,12 +83,7 @@ class ClipboardWidget extends SidebarWidget if (Request::submitted('clipboard_update_session_special_action')) { CSRFProtection::verifyUnsafeRequest(); - $_SESSION['selected_clipboard_id'] = Request::get( - 'selected_clipboard_id' - ); - $_SESSION['selected_clipboard_items'] = Request::getArray( - 'selected_clipboard_items' - ); + $_SESSION['selected_clipboard_id'] = Request::get('selected_clipboard_id'); } } @@ -117,7 +107,6 @@ class ClipboardWidget extends SidebarWidget if (!$this->current_clipboard_id && $clipboards) { $_SESSION['selected_clipboard_id'] = $clipboards[0]->id; - $_SESSION['selected_clipboard_items'] = []; $this->current_clipboard_id = $clipboards[0]->id; } @@ -129,7 +118,6 @@ class ClipboardWidget extends SidebarWidget 'apply_button_title' => $this->apply_button_title, 'elements' => $this->elements, 'selected_clipboard_id' => $this->current_clipboard_id, - 'selected_clipboard_items' => $this->current_selected_items, ]); } diff --git a/resources/assets/javascripts/bootstrap/resources.js b/resources/assets/javascripts/bootstrap/resources.js index 33749287830774519b97b4cd348c4fe63d3f7070..da54f1e4d93094d3c4dc089b0f0d779f2378e23e 100644 --- a/resources/assets/javascripts/bootstrap/resources.js +++ b/resources/assets/javascripts/bootstrap/resources.js @@ -884,7 +884,7 @@ STUDIP.domReady(function() { '.room-clipboard-group-action', function (event) { //Get the IDs of the rooms of the clipboard: - var active_clipboard = jQuery(event.target).parents("#clipboard-group-container").find( + let active_clipboard = jQuery(event.target).parents("#clipboard-group-container").find( '.clipboard-area:not(.invisible)' )[0]; if (!active_clipboard) { @@ -892,41 +892,12 @@ STUDIP.domReady(function() { return; } - var clipboard_id = jQuery(active_clipboard).data('id'); - var action_needs_items = jQuery(event.target).data('needs_items'); - var show_in_dialog = jQuery(event.target).data('show_in_dialog'); - var ids = []; - if (action_needs_items) { - var items = jQuery(active_clipboard).find( - 'tr.clipboard-item:not(.clipboard-item-template)' - ); - - for (var item of items) { - var input = jQuery(item).find("input[name='selected_clipboard_items[]']:checked")[0]; - if (input) { - var id = jQuery(item).data('range_id'); - //Check if id is an md5 sum: - if (id.match(/[0-9a-f]{32}/)) { - ids.push(id); - } - } - } - if (ids.length == items.length) { - //All items are selected. No need to use the Range-IDs, we - //can use the clipboard-ID instead. - action_needs_items = false; - } - } - - var url_path = jQuery(event.target).attr('href'); + let clipboard_id = jQuery(active_clipboard).data('id'); + let show_in_dialog = jQuery(event.target).data('show_in_dialog'); + let url_path = jQuery(event.target).attr('href'); url_path = url_path.replace(/CLIPBOARD_ID/, clipboard_id); - var complete_url = STUDIP.URLHelper.getURL( - url_path, - ( - action_needs_items ? {'resource_ids': ids} : null - ) - ); + let complete_url = STUDIP.URLHelper.getURL(url_path); if (show_in_dialog) { //If we have collected at least one ID we can create a dialog @@ -934,7 +905,7 @@ STUDIP.domReady(function() { STUDIP.Dialog.fromURL( complete_url, { - size: 'normal' + size: 'auto' } ); } else { diff --git a/resources/assets/javascripts/lib/clipboard.js b/resources/assets/javascripts/lib/clipboard.js index 6b349f294c7a08f8a89fa91bcf67cdc9ed0cd59e..e5890abff4312f5711cdf26542b937209534ff95 100644 --- a/resources/assets/javascripts/lib/clipboard.js +++ b/resources/assets/javascripts/lib/clipboard.js @@ -301,8 +301,9 @@ const Clipboard = { jQuery(new_item_node).removeClass('clipboard-item-template'); jQuery(new_item_node).removeClass('invisible'); - let name_label = jQuery(new_item_node).find('label'); - jQuery('<span/>').text(response_data['name']).appendTo(name_label) + let name_column = jQuery(new_item_node).find('td.item-name'); + console.log(name_column); + jQuery('<span/>').text(response_data['name']).appendTo(name_column) let id_field = jQuery(new_item_node).find("input[name='selected_clipboard_items[]']"); jQuery(id_field).val(checkbox_id); diff --git a/templates/sidebar/clipboard-area.php b/templates/sidebar/clipboard-area.php index dd8f67612c9846f478f92c396567cffc9f0ef8ed..4a4adf5b72b1c3fd5ff8059803ec0700d494c374 100644 --- a/templates/sidebar/clipboard-area.php +++ b/templates/sidebar/clipboard-area.php @@ -79,21 +79,7 @@ ? 'draggable' : '' ?>" data-range_id="<?= htmlReady($item['range_id']) ?>"> - <td> - <label> - <input type="checkbox" - name="selected_clipboard_items[]" - title="<?= sprintf(_('%s auswählen.'), htmlReady($item['name'])) ?>" - value="<?= htmlReady($item['id']) ?>" - <?= in_array($item['id'], $selected_clipboard_items) - ? 'checked="checked"' - : (!$selected_clipboard_items - ? 'checked="checked"' - : '') ?> - > - <?= htmlReady($item['name']) ?> - </label> - </td> + <td class="item-name"><?= htmlReady($item['name']) ?></td> <td class="actions"> <?= Icon::create('trash')->asInput( [ @@ -126,12 +112,7 @@ : '' ?> clipboard-item-template invisible" data-range_id=""> - <td class="item-name"> - <input type="checkbox" - name="selected_clipboard_items[]" - value="" - class="item-id"> - </td> + <td class="item-name"></td> <td class="item-actions"> <?= Icon::create('trash')->asInput( [ @@ -169,13 +150,7 @@ : '' ?> clipboard-item-template invisible" data-range_id=""> - <td> - <input type="checkbox" - name="selected_clipboard_items[]" - title="<?= _('Diesen Eintrag auswählen.') ?>" - value=""> - <label></label> - </td> + <td class="item-name"></td> <td> <?= Icon::create('trash')->asInput( [ diff --git a/templates/sidebar/room-clipboard-item.php b/templates/sidebar/room-clipboard-item.php index caccb71b075f8db9edeff8c1568f38f445f6b1e3..a433c9d4d05a39cfd1545a054fb943cd05c15083 100644 --- a/templates/sidebar/room-clipboard-item.php +++ b/templates/sidebar/room-clipboard-item.php @@ -30,26 +30,11 @@ if (!$item) { ?> <tr class="<?= htmlReady($classes) ?>" data-range_id="<?= htmlReady($item['range_id']) ?>"> - <td> - <label> - <input type="checkbox" - name="selected_clipboard_items[]" - title="<?= _('Diesen Raum auswählen.') ?>" - value="<?= htmlReady($item['id']) ?>" - <?= in_array($item['id'], $selected_clipboard_items) - ? 'checked="checked"' - : (!$selected_clipboard_items - ? 'checked="checked"' - : '' - ) ?> - > - <?= htmlReady($item['name']) ?> - </label> - </td> + <td class="item-name"><?= htmlReady($item['name']) ?></td> <td class="actions"> <a href="<?= Room::getLinkForAction('show', ($item ? $item['range_id'] : 'RANGE_ID')) ?>" data-dialog> <?= Icon::create( - 'info', + 'info-circle', Icon::ROLE_CLICKABLE, [ 'title' => _('Rauminformationen'),