diff --git a/app/controllers/settings/general.php b/app/controllers/settings/general.php index e1c783f4b7a5b0dae042a5b92050ab9cd68f5314..24c6e5df049510774b5033b71a20150c23849d58 100644 --- a/app/controllers/settings/general.php +++ b/app/controllers/settings/general.php @@ -31,6 +31,12 @@ class Settings_GeneralController extends Settings_SettingsController PageLayout::setTitle(_('Allgemeine Einstellungen anpassen')); Navigation::activateItem('/profile/settings/general'); SkipLinks::addIndex(_('Allgemeine Einstellungen anpassen'), 'layout_content', 100); + $this->show_room_management_autor_config = Config::get()->RESOURCES_ENABLE + && ( + ResourceManager::userHasGlobalPermission($this->user, 'autor') + || + RoomManager::userHasRooms($this->user, 'autor') + ); } /** @@ -63,6 +69,9 @@ class Settings_GeneralController extends Settings_SettingsController $this->config->store('SKIPLINKS_ENABLE', Request::int('skiplinks_enable')); $this->config->store('TOUR_AUTOSTART_DISABLE', Request::int('tour_autostart_disable')); $this->config->store('WIKI_COMMENTS_ENABLE', Request::int('wiki_comments_enable')); + if ($this->show_room_management_autor_config) { + $this->config->store('RESOURCES_CONFIRM_PLAN_DRAG_AND_DROP', Request::int('resources_confirm_plan_drag_and_drop')); + } if (Config::get()->WYSIWYG) { $this->config->store('WYSIWYG_DISABLED', !Request::int('wysiwyg_enabled')); diff --git a/app/views/resources/room_planning/booking_plan.php b/app/views/resources/room_planning/booking_plan.php index 6750af148215339436c2a9a62d103fd25cd9456d..5792a2a2abcaa4af3b8c0dbf922dd8c2671479d4 100644 --- a/app/views/resources/room_planning/booking_plan.php +++ b/app/views/resources/room_planning/booking_plan.php @@ -88,7 +88,14 @@ 'display_all_requests' => $display_all_requests ? 1 : 0 ] ] - ] + ], + 'confirm' => ( + UserConfig::get($GLOBALS['user']->id)->RESOURCES_CONFIRM_PLAN_DRAG_AND_DROP + ? [ + 'drop' => _('Wollen Sie die Buchung wirklich ändern?') + ] + : [] + ) ], ['class' => 'resource-plan'], 'resources-fullcalendar' diff --git a/app/views/room_management/planning/index.php b/app/views/room_management/planning/index.php index 5e79966b1917c1852fd62c2e0fc83d4a6623266f..321d3a6af7d1e7e29965813b46b51bd1693bfabe 100644 --- a/app/views/room_management/planning/index.php +++ b/app/views/room_management/planning/index.php @@ -70,7 +70,14 @@ 'display_all_requests' => $display_all_requests ? 1 : 0 ] ] - ] + ], + 'confirm' => ( + UserConfig::get($GLOBALS['user']->id)->RESOURCES_CONFIRM_PLAN_DRAG_AND_DROP + ? [ + 'drop' => _('Wollen Sie die Buchung wirklich ändern?') + ] + : [] + ) ], ['class' => 'resource-plan room-group-booking-plan'], 'resources-fullcalendar' diff --git a/app/views/settings/general.php b/app/views/settings/general.php index 4bf2fc3b007ee7238eb882e754e338553f21c306..5348975873a8d340d26adb5949cd071bd3ce8e36 100644 --- a/app/views/settings/general.php +++ b/app/views/settings/general.php @@ -142,6 +142,21 @@ $start_pages = [ </fieldset> <? endif; ?> + <? if ($show_room_management_autor_config) : ?> + <fieldset> + <legend><?= _('Raumverwaltung') ?></legend> + <label> + <input type="checkbox" name="resources_confirm_plan_drag_and_drop" + value="1" + <?= $config->RESOURCES_CONFIRM_PLAN_DRAG_AND_DROP ? 'checked' : '' ?>> + <?= _('Nach dem Verschieben einer Buchung per Drag & Drop im Belegungsplan eine Sicherheitsabfrage anzeigen') ?> + <?= tooltipIcon( + _('Wenn diese Einstellung aktiviert ist, wird die Buchung erst dann verschoben, wenn die Sicherheitsabfrage mit „Ja“ beantwortet wurde.') + ) ?> + </label> + </fieldset> + <? endif ?> + <footer> <?= \Studip\Button::create(_("Speichern")) ?> </footer> diff --git a/db/migrations/20210603_add_config_resources_confirm_plan_drag_and_drop.php b/db/migrations/20210603_add_config_resources_confirm_plan_drag_and_drop.php new file mode 100644 index 0000000000000000000000000000000000000000..1bbfc1d41d994f68df901cbbfebb783cf462dd43 --- /dev/null +++ b/db/migrations/20210603_add_config_resources_confirm_plan_drag_and_drop.php @@ -0,0 +1,43 @@ +<?php + + +class AddConfigResourcesConfirmPlanDragAndDrop extends Migration +{ + public function description() + { + return 'Add configuration RESOURCES_CONFIRM_PLAN_DRAG_AND_DROP'; + } + + + public function up() + { + $db = DBManager::get(); + + $db->exec( + "INSERT INTO `config` + (`field`, `value`, `type`, `range`, + `section`, + `mkdate`, `chdate`, + `description`) + VALUES + ('RESOURCES_CONFIRM_PLAN_DRAG_AND_DROP', '0', 'boolean', 'user', + 'resources', UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), + 'Soll beim Verschieben von Buchungen im Belegungsplan eine Sicherheitsabfrage erscheinen?')" + ); + } + + + public function down() + { + $db = DBManager::get(); + + $db->exec( + "DELETE FROM `config_values` + WHERE `field` = 'RESOURCES_CONFIRM_PLAN_DRAG_AND_DROP'" + ); + $db->exec( + "DELETE FROM `config` + WHERE `field` = 'RESOURCES_CONFIRM_PLAN_DRAG_AND_DROP'" + ); + } +} diff --git a/resources/assets/javascripts/lib/fullcalendar.js b/resources/assets/javascripts/lib/fullcalendar.js index 8c3c1232b9996815ffad153aed302a55ed5639c3..c6b1b5d734adbcb6302a67b35bcd191cfb872ff7 100644 --- a/resources/assets/javascripts/lib/fullcalendar.js +++ b/resources/assets/javascripts/lib/fullcalendar.js @@ -443,20 +443,38 @@ class Fullcalendar info.event.source.refetch(); }, eventDrop (info) { - if ($(info.view.context.calendar.el).hasClass('institute-plan')) { - var start = info.event.start; - var cal_start = info.view.activeStart; - if ((start.getHours() - cal_start.getHours()) % 2 === 1) { - info.event.moveDates('-01:00'); + let handle_drop = function() { + if ($(info.view.context.calendar.el).hasClass('institute-plan')) { + var start = info.event.start; + var cal_start = info.view.activeStart; + if ((start.getHours() - cal_start.getHours()) % 2 === 1) { + info.event.moveDates('-01:00'); + } + STUDIP.Fullcalendar.institutePlanDropEventHandler(info); + } else { + if (info.view.viewSpec.options.studip_functions.drop_event) { + info.view.viewSpec.options.studip_functions.drop_event(info); + } else { + STUDIP.Fullcalendar.defaultDropEventHandler(info); + } + info.event.source.refetch(); } - STUDIP.Fullcalendar.institutePlanDropEventHandler(info); - } else { - if (info.view.viewSpec.options.studip_functions.drop_event) { - info.view.viewSpec.options.studip_functions.drop_event(info); + }; + + let calendar_config = JSON.parse(info.view.context.calendar.el.dataset.config); + if (calendar_config.confirm) { + if (calendar_config.confirm.drop) { + STUDIP.Dialog.confirm(calendar_config.confirm.drop) + .done(handle_drop) + .fail(function() { + //Revert the dropped element: + info.revert(); + }); } else { - STUDIP.Fullcalendar.defaultDropEventHandler(info); + handle_drop(); } - info.event.source.refetch(); + } else { + handle_drop(); } }, eventRender (info) {