/** * <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.group.ui; import java.util.Collection; import org.olat.core.CoreSpringFactory; import org.olat.core.commons.services.taskexecutor.TaskExecutorManager; 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.FormLink; 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.components.link.Link; import org.olat.core.gui.components.panel.Panel; import org.olat.core.gui.components.progressbar.ProgressController; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController; import org.olat.core.util.async.ProgressDelegate; import org.olat.group.BusinessGroupModule; import org.olat.group.BusinessGroupService; import org.olat.group.ui.main.DedupMembersConfirmationController; /** * * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com */ public class BusinessGroupModuleAdminController extends FormBasicController implements ProgressDelegate { private FormLink dedupLink; private MultipleSelectionElement allowEl; private MultipleSelectionElement enrolmentEl; private MultipleSelectionElement membershipEl; private MultipleSelectionElement assignCoursesEl; private MultipleSelectionElement assignGroupsEl; private MultipleSelectionElement allowLeavingGroupsEl; private Panel mainPopPanel; private CloseableModalController cmc; private ProgressController progressCtrl; private DedupMembersConfirmationController dedupCtrl; private final BusinessGroupModule module; private final BusinessGroupService businessGroupService; private String[] onKeys = new String[]{"user","author"}; private String[] enrollmentKeys = new String[]{ "users","authors", "usermanagers", "groupmanagers", "administrators" }; private String[] assignKeys = new String[]{"granted"}; private String[] allowLeavingKeys = new String[]{ "groupMadeByLearners", "groupMadeByAuthors", "groupOverride" }; public BusinessGroupModuleAdminController(UserRequest ureq, WindowControl wControl) { super(ureq, wControl, "bg_admin"); module = CoreSpringFactory.getImpl(BusinessGroupModule.class); businessGroupService = CoreSpringFactory.getImpl(BusinessGroupService.class); initForm(ureq); } @Override protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) { FormLayoutContainer optionsContainer = FormLayoutContainer.createDefaultFormLayout("options", getTranslator()); formLayout.add(optionsContainer); String[] values = new String[]{ translate("user.allow.create"), translate("author.allow.create") }; allowEl = uifactory.addCheckboxesVertical("module.admin.allow.create", optionsContainer, onKeys, values, 1); allowEl.select("user", module.isUserAllowedCreate()); allowEl.select("author", module.isAuthorAllowedCreate()); allowEl.addActionListener(FormEvent.ONCHANGE); FormLayoutContainer resourceAssignmentContainer = FormLayoutContainer.createDefaultFormLayout("resourceAssignment", getTranslator()); formLayout.add(resourceAssignmentContainer); String[] courseValues = new String[]{ translate("module.resource.courses.grant") }; assignCoursesEl = uifactory.addCheckboxesHorizontal("module.resource.courses", resourceAssignmentContainer, assignKeys, courseValues); assignCoursesEl.select(assignKeys[0], module.isGroupManagersAllowedToLinkCourses()); assignCoursesEl.addActionListener(FormEvent.ONCHANGE); String[] groupValues = new String[]{ translate("module.resource.groups.grant") }; assignGroupsEl = uifactory.addCheckboxesHorizontal("module.resource.groups", resourceAssignmentContainer, assignKeys, groupValues); assignGroupsEl.select(assignKeys[0], module.isResourceManagersAllowedToLinkGroups()); assignGroupsEl.addActionListener(FormEvent.ONCHANGE); FormLayoutContainer privacyOptionsContainer = FormLayoutContainer.createDefaultFormLayout("privacy_options", getTranslator()); formLayout.add(privacyOptionsContainer); String[] enrollmentValues = new String[]{ translate("enrolment.email.users"), translate("enrolment.email.authors"), translate("enrolment.email.usermanagers"), translate("enrolment.email.groupmanagers"), translate("enrolment.email.administrators") }; enrolmentEl = uifactory.addCheckboxesVertical("mandatory.enrolment", privacyOptionsContainer, enrollmentKeys, enrollmentValues, 1); enrolmentEl.select("users", "true".equals(module.getMandatoryEnrolmentEmailForUsers())); enrolmentEl.select("authors", "true".equals(module.getMandatoryEnrolmentEmailForAuthors())); enrolmentEl.select("usermanagers", "true".equals(module.getMandatoryEnrolmentEmailForUsermanagers())); enrolmentEl.select("groupmanagers", "true".equals(module.getMandatoryEnrolmentEmailForGroupmanagers())); enrolmentEl.select("administrators", "true".equals(module.getMandatoryEnrolmentEmailForAdministrators())); enrolmentEl.addActionListener(FormEvent.ONCHANGE); String[] membershipValues = new String[]{ translate("enrolment.email.users"), translate("enrolment.email.authors"), translate("enrolment.email.usermanagers"), translate("enrolment.email.groupmanagers"), translate("enrolment.email.administrators") }; membershipEl = uifactory.addCheckboxesVertical("mandatory.membership", privacyOptionsContainer, enrollmentKeys, membershipValues, 1); membershipEl.setElementCssClass("o_select_membership_confirmation"); membershipEl.select("users", "true".equals(module.getAcceptMembershipForUsers())); membershipEl.select("authors", "true".equals(module.getAcceptMembershipForAuthors())); membershipEl.select("usermanagers", "true".equals(module.getAcceptMembershipForUsermanagers())); membershipEl.select("groupmanagers", "true".equals(module.getAcceptMembershipForGroupmanagers())); membershipEl.select("administrators", "true".equals(module.getAcceptMembershipForAdministrators())); membershipEl.addActionListener(FormEvent.ONCHANGE); String[] allowLeavingValues = new String[]{ translate("leaving.group.learners"), translate("leaving.group.authors"), translate("leaving.group.override"), }; allowLeavingGroupsEl = uifactory.addCheckboxesVertical("leaving.group", privacyOptionsContainer, allowLeavingKeys, allowLeavingValues, 1); allowLeavingGroupsEl.select("groupMadeByLearners", module.isAllowLeavingGroupCreatedByLearners()); allowLeavingGroupsEl.select("groupMadeByAuthors", module.isAllowLeavingGroupCreatedByAuthors()); allowLeavingGroupsEl.select("groupOverride", module.isAllowLeavingGroupOverride()); allowLeavingGroupsEl.addActionListener(FormEvent.ONCHANGE); FormLayoutContainer dedupCont = FormLayoutContainer.createDefaultFormLayout("dedup", getTranslator()); formLayout.add(dedupCont); dedupLink = uifactory.addFormLink("dedup.members", dedupCont, Link.BUTTON); } @Override protected void doDispose() { // } @Override protected void event(UserRequest ureq, Controller source, Event event) { if(source == dedupCtrl) { boolean coaches = dedupCtrl.isDedupCoaches(); boolean participants = dedupCtrl.isDedupParticipants(); if(event == Event.DONE_EVENT) { dedupMembers(ureq, coaches, participants); } else { cmc.deactivate(); cleanUp(); } } else if(source == cmc) { cleanUp(); } super.event(ureq, source, event); } private void cleanUp() { removeAsListenerAndDispose(dedupCtrl); removeAsListenerAndDispose(progressCtrl); removeAsListenerAndDispose(cmc); progressCtrl = null; dedupCtrl = null; cmc = null; } @Override public void setMax(float max) { if(progressCtrl != null) { progressCtrl.setMax(max); } } @Override public void setActual(float value) { if(progressCtrl != null) { progressCtrl.setActual(value); } } @Override public void setInfo(String message) { if(progressCtrl != null) { progressCtrl.setInfo(message); } } @Override public void finished() { cmc.deactivate(); cleanUp(); } @Override protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) { if(source == dedupLink) { doDedupMembers(ureq); } else if(source == allowEl) { module.setUserAllowedCreate(allowEl.isSelected(0)); module.setAuthorAllowedCreate(allowEl.isSelected(1)); } else if(source == membershipEl) { Collection<String> membershipSelectedKeys = membershipEl.getSelectedKeys(); module.setAcceptMembershipForUsers(membershipSelectedKeys.contains("users") ? "true" : "false"); module.setAcceptMembershipForAuthors(membershipSelectedKeys.contains("authors") ? "true" : "false"); module.setAcceptMembershipForUsermanagers(membershipSelectedKeys.contains("usermanagers") ? "true" : "false"); module.setAcceptMembershipForGroupmanagers(membershipSelectedKeys.contains("groupmanagers") ? "true" : "false"); module.setAcceptMembershipForAdministrators(membershipSelectedKeys.contains("administrators") ? "true" : "false"); } else if(source == enrolmentEl) { Collection<String> enrolmentSelectedKeys = enrolmentEl.getSelectedKeys(); module.setMandatoryEnrolmentEmailForUsers(enrolmentSelectedKeys.contains("users") ? "true" : "false"); module.setMandatoryEnrolmentEmailForAuthors(enrolmentSelectedKeys.contains("authors") ? "true" : "false"); module.setMandatoryEnrolmentEmailForUsermanagers(enrolmentSelectedKeys.contains("usermanagers") ? "true" : "false"); module.setMandatoryEnrolmentEmailForGroupmanagers(enrolmentSelectedKeys.contains("groupmanagers") ? "true" : "false"); module.setMandatoryEnrolmentEmailForAdministrators(enrolmentSelectedKeys.contains("administrators") ? "true" : "false"); } else if(source == allowLeavingGroupsEl) { Collection<String> leavingSelectedKeys = allowLeavingGroupsEl.getSelectedKeys(); module.setAllowLeavingGroupCreatedByLearners(leavingSelectedKeys.contains("groupMadeByLearners")); module.setAllowLeavingGroupCreatedByAuthors(leavingSelectedKeys.contains("groupMadeByAuthors")); module.setAllowLeavingGroupOverride(leavingSelectedKeys.contains("groupOverride")); } else if(assignCoursesEl == source) { module.setGroupManagersAllowedToLinkCourses(assignCoursesEl.isSelected(0)); } else if(assignGroupsEl == source) { module.setResourceManagersAllowedToLinkGroups(assignGroupsEl.isSelected(0)); } else { super.formInnerEvent(ureq, source, event); } } protected void doDedupMembers(UserRequest ureq) { dedupCtrl = new DedupMembersConfirmationController(ureq, getWindowControl()); listenTo(dedupCtrl); mainPopPanel = new Panel("dedup"); mainPopPanel.setContent(dedupCtrl.getInitialComponent()); cmc = new CloseableModalController(getWindowControl(), translate("close"), mainPopPanel, true, translate("dedup.members"), false); cmc.activate(); listenTo(cmc); } protected void dedupMembers(UserRequest ureq, final boolean coaches, final boolean participants) { progressCtrl = new ProgressController(ureq, getWindowControl()); progressCtrl.setMessage(translate("dedup.running")); mainPopPanel.setContent(progressCtrl.getInitialComponent()); listenTo(progressCtrl); Runnable worker = new Runnable() { @Override public void run() { businessGroupService.dedupMembers(getIdentity(), coaches, participants, BusinessGroupModuleAdminController.this); } }; CoreSpringFactory.getImpl(TaskExecutorManager.class).execute(worker); } @Override protected void formOK(UserRequest ureq) { // } }