diff --git a/src/main/java/org/olat/resource/accesscontrol/ui/AccessConfigurationController.java b/src/main/java/org/olat/resource/accesscontrol/ui/AccessConfigurationController.java index b141f73ec7d7b2b9abe598df344efa27284e5c66..c25c69f6465d99c762e999d1e4cd1ae4c7c47dad 100644 --- a/src/main/java/org/olat/resource/accesscontrol/ui/AccessConfigurationController.java +++ b/src/main/java/org/olat/resource/accesscontrol/ui/AccessConfigurationController.java @@ -211,6 +211,7 @@ public class AccessConfigurationController extends FormBasicController { OfferAccess newLink = editMethodCtrl.commitChanges(); newLink = acService.saveOfferAccess(newLink); replace(newLink); + checkOverlap(); fireEvent(ureq, Event.CHANGED_EVENT); } cmc.deactivate(); @@ -242,6 +243,7 @@ public class AccessConfigurationController extends FormBasicController { if("delete".equals(cmd)) { AccessInfo infos = (AccessInfo)source.getUserObject(); removeMethod(infos); + checkOverlap(); fireEvent(ureq, Event.CHANGED_EVENT); } else if("edit".equals(cmd)) { AccessInfo infos = (AccessInfo)source.getUserObject(); @@ -302,6 +304,7 @@ public class AccessConfigurationController extends FormBasicController { } updateConfirmationEmail(); + checkOverlap(); } private void updateConfirmationEmail() { @@ -397,6 +400,34 @@ public class AccessConfigurationController extends FormBasicController { dbInstance.commit(); loadConfigurations(); } + + private void checkOverlap() { + boolean overlap = false; + + for (AccessInfo confControllerA : confControllers) { + for (AccessInfo confControllerB : confControllers) { + // Dont compare a confController with itself + if (!confControllerA.equals(confControllerB)) { + Date aFrom = confControllerA.getLink().getValidFrom(); + Date aTo = confControllerA.getLink().getValidTo(); + Date bFrom = confControllerB.getLink().getValidFrom(); + Date bTo = confControllerB.getLink().getValidTo(); + + // Options: Dates cross each other or on date range is within another + if ((aFrom.compareTo(bFrom) <= 0 && + aTo.compareTo(bTo) <= 0 && + bFrom.compareTo(aTo) <= 0) || + (aFrom.compareTo(bFrom) <= 0) && + bTo.compareTo(aTo) <= 0 && + bTo.compareTo(aFrom) >= 0) { + overlap = true; + } + } + } + } + confControllerContainer.contextPut("overlappingConfigs", overlap); + confControllerContainer.setDirty(true); + } public class AccessInfo { private String name; diff --git a/src/main/java/org/olat/resource/accesscontrol/ui/_content/configuration_list.html b/src/main/java/org/olat/resource/accesscontrol/ui/_content/configuration_list.html index 6c7e73dd2c71d9bbe3f3526f2a70c47962377498..925f0a8a42c72434c968b1f93aba6684c31520ac 100644 --- a/src/main/java/org/olat/resource/accesscontrol/ui/_content/configuration_list.html +++ b/src/main/java/org/olat/resource/accesscontrol/ui/_content/configuration_list.html @@ -1,3 +1,7 @@ +#if($overlappingConfigs) + <div class="o_important"><i class="o_icon o_icon_important"> </i> $r.translate("accesscontrol.overlap.found")</div> +#end + #if ($confControllers && $confControllers.size() > 0) #foreach($confController in $confControllers) #set($css = $confController.getLink().getMethod().getMethodCssClass()) diff --git a/src/main/java/org/olat/resource/accesscontrol/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/resource/accesscontrol/ui/_i18n/LocalStrings_de.properties index c7a441396c7f8356b0f6c62b076a9f2f370749fd..a9fdeaf9c92a6def4dcba2b99523033e06015337 100644 --- a/src/main/java/org/olat/resource/accesscontrol/ui/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/resource/accesscontrol/ui/_i18n/LocalStrings_de.properties @@ -23,6 +23,7 @@ accesscontrol.desc=Sie k\u00F6nnen die Buchungsmethoden f\u00FCr den Zugang zu d accesscontrol.desc.end=W\u00E4hlen Sie die Schaltfl\u00E4che "$\:add.accesscontrol" um aus der Liste der verf\u00FCgbaren Buchungsmethoden eine oder mehrere auszuw\u00E4hlen. Optional k\u00F6nnen Buchungsmethoden mit einem G\u00FCltigkeitsdatum versehen werden. accesscontrol.no.methods.full.access=Es ist noch keine Buchungsmethode konfiguriert.<br />Der Zugang zu dieser Ressource steht allen Systembenutzern ohne Buchung offen. W\u00E4hlen Sie die Schaltfl\u00E4che "$\:add.accesscontrol" um den Zugang einzuschr\u00E4nken und/oder eine Buchung zu erzwingen. accesscontrol.no.methods.no.access=Es ist noch keine Buchungsmethode konfiguriert.<br />Diese Ressource kann nur von den Teilnehmer der Ressource verwendet werden. W\u00E4hlen Sie die Schaltfl\u00E4che "$\:add.accesscontrol" um eine Buchungsmethode zu w\u00E4hlen und die Ressource zu ver\u00F6ffentlichen. +accesscontrol.overlap.found=Es wurden \u00FCberlappende Buchungsmethoden gefunden. Bitte stellen Sie sicher, dass dies beabsichtig und korrekt ist. accesscontrol.table.from=g\u00FCltig von accesscontrol.table.method=Buchungsmethode accesscontrol.table.to=bis diff --git a/src/main/java/org/olat/resource/accesscontrol/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/resource/accesscontrol/ui/_i18n/LocalStrings_en.properties index a47f66b45d118e7e662482cd069e723c093b40f8..f0be1239b7f88eaa3d8e3867cbae1879f2a95f8f 100644 --- a/src/main/java/org/olat/resource/accesscontrol/ui/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/resource/accesscontrol/ui/_i18n/LocalStrings_en.properties @@ -23,6 +23,7 @@ accesscontrol.desc=You can configure booking methods for accessing this resource accesscontrol.desc.end=Select the button "$\:add.accesscontrol" to select one or more booking methods. As an option you can also define the period in which each booking method is valid. accesscontrol.no.methods.full.access=There is no booking method configured to restrict access. This resource can be accessed by all known users without an explicit booking. Select the button "$\:add.accesscontrol" to restrict access and/or to require an explicit booking. accesscontrol.no.methods.no.access=There is no booking method configured. This resource can only be accessed by explicit members of this resource. Select the button "$\:add.accesscontrol" to add a booking method and to publish the resource. +accesscontrol.overlap.found=There are overlapping booking methods. Please make sure this is intended and correct. accesscontrol.table.from=valid from accesscontrol.table.method=Booking method accesscontrol.table.to=to