From eec2bc1cc5e8354fa6df3b332caf782fc34b0dc4 Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Mon, 9 Sep 2013 13:26:58 +0200 Subject: [PATCH] OO-712: make the link "Booking" in home, group and repository entry visible/enable only if needed --- .../run/BusinessGroupMainRunController.java | 20 +-- .../RepositoryDetailsController.java | 3 +- .../accesscontrol/_spring/acContext.xml | 41 +++++ .../ui/AccessControlAdminController.java | 153 ++++++++++++++++++ .../ui/HomeOrdersActionExtension.java | 53 ++++++ .../ui/_i18n/LocalStrings_de.properties | 11 +- .../ui/_i18n/LocalStrings_en.properties | 10 ++ .../ui/_i18n/LocalStrings_fr.properties | 9 ++ .../ui/_i18n/LocalStrings_pl.properties | 6 + .../ui/_i18n/LocalStrings_pt_BR.properties | 9 ++ 10 files changed, 300 insertions(+), 15 deletions(-) create mode 100644 src/main/java/org/olat/resource/accesscontrol/ui/AccessControlAdminController.java create mode 100644 src/main/java/org/olat/resource/accesscontrol/ui/HomeOrdersActionExtension.java diff --git a/src/main/java/org/olat/group/ui/run/BusinessGroupMainRunController.java b/src/main/java/org/olat/group/ui/run/BusinessGroupMainRunController.java index 9e625aeeb7b..20f5b03c9d5 100644 --- a/src/main/java/org/olat/group/ui/run/BusinessGroupMainRunController.java +++ b/src/main/java/org/olat/group/ui/run/BusinessGroupMainRunController.java @@ -1128,18 +1128,14 @@ public class BusinessGroupMainRunController extends MainLayoutBasicController im //fxdiff VCRP-1,2: access control of resources AccessControlModule acModule = (AccessControlModule)CoreSpringFactory.getBean("acModule"); - if(acModule.isEnabled()) { - if(!BusinessGroupManagedFlag.isManaged(businessGroup, BusinessGroupManagedFlag.bookings) - || acService.isResourceAccessControled(businessGroup.getResource(), null)) { - gtnChild = new GenericTreeNode(); - gtnChild.setTitle(translate("menutree.ac")); - gtnChild.setUserObject(ACTIVITY_MENUSELECT_AC); - gtnChild.setIdent(ACTIVITY_MENUSELECT_AC); - gtnChild.setAltText(translate("menutree.ac.alt")); - gtnChild.setIconCssClass("b_order_icon"); - root.addChild(gtnChild); - //acNodeId = gtnChild.getIdent(); - } + if(acModule.isEnabled() && acService.isResourceAccessControled(businessGroup.getResource(), null)) { + gtnChild = new GenericTreeNode(); + gtnChild.setTitle(translate("menutree.ac")); + gtnChild.setUserObject(ACTIVITY_MENUSELECT_AC); + gtnChild.setIdent(ACTIVITY_MENUSELECT_AC); + gtnChild.setAltText(translate("menutree.ac.alt")); + gtnChild.setIconCssClass("b_order_icon"); + root.addChild(gtnChild); } } diff --git a/src/main/java/org/olat/repository/controllers/RepositoryDetailsController.java b/src/main/java/org/olat/repository/controllers/RepositoryDetailsController.java index bc5622c4672..b1248a5eb7d 100644 --- a/src/main/java/org/olat/repository/controllers/RepositoryDetailsController.java +++ b/src/main/java/org/olat/repository/controllers/RepositoryDetailsController.java @@ -591,8 +591,7 @@ public class RepositoryDetailsController extends BasicController implements Gene } if(detailsToolC.hasTool(TOOL_ORDERS)) { - boolean booking = !RepositoryEntryManagedFlag.isManaged(repositoryEntry, RepositoryEntryManagedFlag.bookings) - || acService.isResourceAccessControled(repositoryEntry.getOlatResource(), null); + boolean booking = acService.isResourceAccessControled(repositoryEntry.getOlatResource(), null); detailsToolC.setEnabled(TOOL_ORDERS, booking); } diff --git a/src/main/java/org/olat/resource/accesscontrol/_spring/acContext.xml b/src/main/java/org/olat/resource/accesscontrol/_spring/acContext.xml index fd655dffc5a..0db01a0526f 100644 --- a/src/main/java/org/olat/resource/accesscontrol/_spring/acContext.xml +++ b/src/main/java/org/olat/resource/accesscontrol/_spring/acContext.xml @@ -61,6 +61,47 @@ <property name="order" value="267" /> </bean> + <!-- The "orders" (Buchungen) in Home --> + <bean class="org.olat.resource.accesscontrol.ui.HomeOrdersActionExtension" name="accesscontrol.actExt" init-method="initExtensionPoints"> + <constructor-arg index="0" ref="acModule" /> + <property name="order" value="109" /> + <property name="actionController"> + <bean class=" org.olat.core.gui.control.creator.FactoryControllerCreator" scope="prototype"> + <property name="factoryName" value="org.olat.resource.accesscontrol.ACUIFactory"/> + <property name="factoryMethod" value="createOrdersController"/> + </bean> + </property> + <property name="securityCallbackClassName" value="org.olat.core.extensions.security.UserOnlyExtensionSecurityCallback" /> + <property name="translationPackage" value="org.olat.home" /> + <property name="i18nActionKey" value="menu.orders"/> + <property name="i18nDescriptionKey" value="menu.orders.alt"/> + <property name="extensionPoints"> + <list> + <value>org.olat.home.HomeMainController</value> + </list> + </property> + </bean> + + <!-- Access control administration --> + <bean class="org.olat.core.extensions.action.GenericActionExtension" id="sysadmin.menupoint.access" init-method="initExtensionPoints"> + <property name="actionController"> + <bean class="org.olat.core.gui.control.creator.AutoCreator" scope="prototype"> + <property name="className" value="org.olat.resource.accesscontrol.ui.AccessControlAdminController"/> + </bean> + </property> + <property name="navigationKey" value="accesscontrol" /> + <property name="parentTreeNodeIdentifier" value="sysconfigParent" /> + <property name="i18nActionKey" value="admin.menu.title"/> + <property name="i18nDescriptionKey" value="admin.menu.title.alt"/> + <property name="translationPackage" value="org.olat.resource.accesscontrol.ui"/> + <property name="extensionPoints"> + <list> + <value>org.olat.admin.SystemAdminMainController</value> + </list> + </property> + <property name="order" value="7220" /> + </bean> + <bean id="acReservationCleanupJob" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> <property name="jobDetail" ref="acReservationCleanupJobDetail"/> <!-- 60 seconds --> diff --git a/src/main/java/org/olat/resource/accesscontrol/ui/AccessControlAdminController.java b/src/main/java/org/olat/resource/accesscontrol/ui/AccessControlAdminController.java new file mode 100644 index 00000000000..a7e603840e1 --- /dev/null +++ b/src/main/java/org/olat/resource/accesscontrol/ui/AccessControlAdminController.java @@ -0,0 +1,153 @@ +/** + * OLAT - Online Learning and Training<br> + * http://www.olat.org + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at + * <p> + * http://www.apache.org/licenses/LICENSE-2.0 + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Copyright (c) frentix GmbH<br> + * http://www.frentix.com<br> + * <p> + */ +package org.olat.resource.accesscontrol.ui; + +import java.util.Set; + +import org.olat.core.CoreSpringFactory; +import org.olat.core.gui.UserRequest; +import org.olat.core.gui.components.form.flexible.FormItem; +import org.olat.core.gui.components.form.flexible.FormItemContainer; +import org.olat.core.gui.components.form.flexible.elements.MultipleSelectionElement; +import org.olat.core.gui.components.form.flexible.impl.FormBasicController; +import org.olat.core.gui.components.form.flexible.impl.FormEvent; +import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer; +import org.olat.core.gui.control.Controller; +import org.olat.core.gui.control.WindowControl; +import org.olat.resource.accesscontrol.AccessControlModule; +import org.olat.resource.accesscontrol.method.AccessMethodHandler; + +/** + * + * Description:<br> + * + * <P> + * Initial Date: 26 mai 2011 <br> + * + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + */ +public class AccessControlAdminController extends FormBasicController { + + private MultipleSelectionElement enabled, homeEnabled; + private MultipleSelectionElement methods; + + private String[] values = {""}; + private String[] keys = {"on"}; + + private String[] methodValues = {""}; + private String[] methodKeys = {""}; + + private final AccessControlModule acModule; + + public AccessControlAdminController(UserRequest ureq, WindowControl wControl) { + super(ureq, wControl); + + acModule = CoreSpringFactory.getImpl(AccessControlModule.class); + + values = new String[] { + getTranslator().translate("ac.on") + }; + + methodKeys = new String[] { + "free.method", + "token.method", + "paypal.method" + }; + + methodValues = new String[methodKeys.length]; + for(int i=0; i<methodKeys.length; i++) { + AccessMethodHandler handler = acModule.getAccessMethodHandler(methodKeys[i]); + methodValues[i] = handler.getMethodName(getLocale()); + } + + initForm(ureq); + } + + @Override + protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) { + setFormTitle("admin.title"); + setFormDescription("admin.desc"); + + enabled = uifactory.addCheckboxesHorizontal("ac.enabled", formLayout, keys, values, null); + enabled.select(keys[0], acModule.isEnabled()); + + uifactory.addSpacerElement("spaceman", formLayout, false); + + methods = uifactory.addCheckboxesVertical("ac.methods", formLayout, methodKeys, methodValues, null, 1); + methods.select("free.method", acModule.isFreeEnabled()); + methods.select("token.method", acModule.isTokenEnabled()); + methods.select("paypal.method", acModule.isPaypalEnabled()); + methods.setEnabled(acModule.isEnabled()); + methods.addActionListener(this, FormEvent.ONCHANGE); + + uifactory.addSpacerElement("itgirl", formLayout, false); + + homeEnabled = uifactory.addCheckboxesHorizontal("ac.home.enabled", formLayout, keys, values, null); + homeEnabled.select(keys[0], acModule.isPaypalEnabled() || acModule.isHomeOverviewEnabled()); + + final FormLayoutContainer buttonGroupLayout = FormLayoutContainer.createButtonLayout("buttonLayout", getTranslator()); + buttonGroupLayout.setRootForm(mainForm); + uifactory.addFormSubmitButton("save", buttonGroupLayout); + + formLayout.add(buttonGroupLayout); + update(); + } + + public void update() { + Set<String> selectedMethods = methods.getSelectedKeys(); + if(selectedMethods.contains("paypal.method")) { + homeEnabled.select(keys[0], true); + homeEnabled.setEnabled(false); + } else { + homeEnabled.setEnabled(true); + } + } + + @Override + protected void doDispose() { + // + } + + @Override + protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) { + if(source == methods) { + update(); + } + } + + @Override + protected void formOK(UserRequest ureq) { + boolean on = !enabled.getSelectedKeys().isEmpty(); + acModule.setEnabled(on); + + Set<String> selectedMethods = methods.getSelectedKeys(); + acModule.setFreeEnabled(selectedMethods.contains("free.method")); + acModule.setTokenEnabled(selectedMethods.contains("token.method")); + boolean paypalEnabled = selectedMethods.contains("paypal.method"); + acModule.setPaypalEnabled(paypalEnabled); + + boolean homeOverviewEnabled = paypalEnabled || !homeEnabled.getSelectedKeys().isEmpty(); + acModule.setHomeOverviewEnabled(homeOverviewEnabled); + + methods.setEnabled(on); + showInfo("ac.saved"); + } +} diff --git a/src/main/java/org/olat/resource/accesscontrol/ui/HomeOrdersActionExtension.java b/src/main/java/org/olat/resource/accesscontrol/ui/HomeOrdersActionExtension.java new file mode 100644 index 00000000000..c72232a2e66 --- /dev/null +++ b/src/main/java/org/olat/resource/accesscontrol/ui/HomeOrdersActionExtension.java @@ -0,0 +1,53 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ +package org.olat.resource.accesscontrol.ui; + +import org.olat.core.extensions.action.GenericActionExtension; +import org.olat.core.gui.UserRequest; +import org.olat.core.gui.control.Controller; +import org.olat.core.gui.control.WindowControl; +import org.olat.resource.accesscontrol.ACUIFactory; +import org.olat.resource.accesscontrol.AccessControlModule; + +/** + * + * Initial date: 09.09.2013<br> + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + * + */ +public class HomeOrdersActionExtension extends GenericActionExtension { + + private final AccessControlModule acModule; + + public HomeOrdersActionExtension(AccessControlModule acModule) { + this.acModule = acModule; + } + + @Override + public Controller createController(UserRequest ureq, WindowControl wControl, Object arg) { + return ACUIFactory.createOrdersController(ureq, wControl); + } + + @Override + public boolean isEnabled() { + return acModule.isHomeOverviewEnabled() && acModule.isEnabled(); + } + +} 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 5f5af205d1e..dd1b5e5fe68 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 @@ -1,6 +1,15 @@ #Mon Mar 02 09:54:04 CET 2009 -accesscontrol.title=Buchungsmethoden konfigurieren +ac.on=Ein +ac.enabled=Ressourcen Zugangskontrolle einschalten +ac.home.enabled=Buchungsliste im Home +ac.methods=Verfügbare Buchungsmethoden +admin.title=Verwaltung der Zugangskontrolle und Buchungsmethoden +admin.desc=Hier können Sie die Zugangskontrolle für Lernressourcen und Gruppen für das gesamte System ein- und ausschalten. Bei eingeschalteter Zugangskontrolle können Sie die zur Verfügung stehenden Buchungsmethoden auswählen. +admin.menu.title=Zugangskontrolle +admin.menu.title.alt=$:admin.title +ac.saved=Die Konfiguration der Zugangskontrolle und Buchungsmethoden wurde erfolgreich gespeichert +accesscontrol.title=Buchungsmethoden konfigurieren accesscontrol.desc.end=Wählen Sie die Schaltfläche "$:add.accesscontrol" um aus der Liste der verfügbaren Buchungsmethoden eine oder mehrere auszuwählen. Optional können Buchungsmethoden mit einem Gültigkeitsdatum versehen werden. accesscontrol.desc=Sie können die Buchungsmethoden für den Zugang zu dieser Ressource konfigurieren. $:accesscontrol.desc.end accesscontrol_group.desc=Sie können die Buchungsmethoden für den Zugang zu dieser Gruppe konfigurieren. $:accesscontrol.desc.end 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 1794f5e80a8..b3f83d59e27 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 @@ -1,4 +1,14 @@ #Wed Oct 24 16:31:23 CEST 2012 +ac.on=On +ac.enabled=Enable resource access control +ac.home.enabled=Bookings in Home +ac.methods=Available booking methods +admin.title=Access control and booking methods administration +admin.desc=Here you can define if the access control mechanism for learning resources and groups should be enabled system wide. If access control is enabled you can then choose the booking methods that should be enabled. +admin.menu.title=Access control +admin.menu.title.alt=$:admin.title +ac.saved=The configuration for access control and booking methods has been saved + access.button=Order access.desc=This resource is not yet booked by you. A booking is necessary to launch this resource. Select one of the available booking methods below to register for this resource. access.free.desc=This resource is freely available for you. Press the button "$\:access.button" to register for access. diff --git a/src/main/java/org/olat/resource/accesscontrol/ui/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/resource/accesscontrol/ui/_i18n/LocalStrings_fr.properties index beed5d32df5..f295aa4b057 100644 --- a/src/main/java/org/olat/resource/accesscontrol/ui/_i18n/LocalStrings_fr.properties +++ b/src/main/java/org/olat/resource/accesscontrol/ui/_i18n/LocalStrings_fr.properties @@ -1,4 +1,13 @@ #Tue Oct 23 14:33:49 CEST 2012 +ac.enabled=Activer le contr\u00F4le d'acc\u00E8s aux ressources +ac.methods=M\u00E9thodes de r\u00E9servations disponibles +ac.on=on +ac.saved=La configuration du contr\u00F4le d'acc\u00E8s et des m\u00E9thodes de r\u00E9servation a \u00E9t\u00E9 sauv\u00E9e. +admin.desc=Ici, vous pouvez activer et d\u00E9sactiver le contr\u00F4le d'acc\u00E8s aux ressources didactiques et aux groupes pour l'ensemble du syst\u00E8me. Lorsqu'il est activ\u00E9, le contr\u00F4le d'acc\u00E8s vous permet d'utiliser les m\u00E9thodes de r\u00E9servations disponibles. +admin.menu.title=Contr\u00F4le d'acc\u00E8s +admin.menu.title.alt=$\:admin.title +admin.title=Administration du contr\u00F4le d'acc\u00E8s et des m\u00E9thodes de r\u00E9servations + access.button=R\u00E9server access.desc=Vous n'avez pas encore r\u00E9serv\u00E9 cette ressource. Une r\u00E9servation est requise pour y acc\u00E9der. S\u00E9lectionnez l'une des m\u00E9thodes de r\u00E9servations list\u00E9es ci-dessous pour vous inscrire. access.free.desc=Cette ressource est disponible gratuitement. S\u00E9lectionnez "$\:access.button" pour vous enregistrer et y acc\u00E9der. diff --git a/src/main/java/org/olat/resource/accesscontrol/ui/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/resource/accesscontrol/ui/_i18n/LocalStrings_pl.properties index c3994dd48d7..692dc6e3a2d 100644 --- a/src/main/java/org/olat/resource/accesscontrol/ui/_i18n/LocalStrings_pl.properties +++ b/src/main/java/org/olat/resource/accesscontrol/ui/_i18n/LocalStrings_pl.properties @@ -1,4 +1,10 @@ #Thu Dec 13 23:48:16 CET 2012 +ac.enabled=W\u0142\u0105cz kontrol\u0119 dost\u0119pu zasobu +ac.saved=Kongfiguracja kontroli dost\u0119pu i sposobu rezerwacji zosta\u0142a zapisana +admin.menu.title=Kontrola dost\u0119pu +admin.menu.title.alt=$\:admin.title +admin.title=Zarz\u0105dzaj kontrol\u0105 dost\u0119pu i sposobami rezerwacji + access.desc=Ten zas\u00F3b jeszcze nie jest zarezerwowany przez Ciebie. Rezerwacja jest konieczna do uruchomienia tego zasobu. Wybierz jeden z dost\u0119pnych sposob\u00F3w rezerwacji poni\u017Cej. access.free.desc=Ten zas\u00F3b jest dla Ciebie swobodnie dost\u0119pny. Wybierz przycisk "$\:access.button", aby si\u0119 zarejestrowa\u0107 i uzyska\u0107 dost\u0119p. access.free.title=Zas\u00F3b swobodnie dost\u0119pny diff --git a/src/main/java/org/olat/resource/accesscontrol/ui/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/resource/accesscontrol/ui/_i18n/LocalStrings_pt_BR.properties index f10626f2d1c..c9abb026fb9 100644 --- a/src/main/java/org/olat/resource/accesscontrol/ui/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/resource/accesscontrol/ui/_i18n/LocalStrings_pt_BR.properties @@ -1,4 +1,13 @@ #Tue Nov 06 14:06:00 CET 2012 +ac.enabled=Ative o controle de acesso a recursos +ac.methods=M\u00E9todos de reserva dispon\u00EDveis +ac.on=Ligado +ac.saved=A configura\u00E7\u00E3o para controle de acesso e m\u00E9todos de reserva foi salva +admin.desc=Aqui voc\u00EA pode definir se o mecanismo de controle de acesso para recursos did\u00E1ticos e grupos devem ser habilitados em todo sistema. Se o controle de acesso est\u00E1 ativado voc\u00EA pode escolher os m\u00E9todos de reserva que devem ser habilitados. +admin.menu.title=Controle de acesso +admin.menu.title.alt=$\:admin.title +admin.title=Controle de acesso e administra\u00E7\u00E3o de m\u00E9todos de reserva + access.button=Ordenar access.desc=Este recurso ainda n\u00E3o est\u00E1 contabilizado por voc\u00EA. Uma reserva \u00E9 necess\u00E1ria para lan\u00E7ar este recurso. Selecione um dos m\u00E9todos de reserva dispon\u00EDveis abaixo para registrar este recurso. access.free.desc=Este recurso est\u00E1 dispon\u00EDvel gratuitamente para voc\u00EA. Pressione o bot\u00E3o "$\:access.button" e se registre para acessar. -- GitLab