/** * <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.modules.portfolio.ui; import java.util.List; 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.Event; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController; import org.olat.core.gui.control.generic.dtabs.Activateable2; import org.olat.core.id.context.ContextEntry; import org.olat.core.id.context.StateEntry; import org.olat.modules.portfolio.Binder; import org.olat.modules.portfolio.BinderDeliveryOptions; import org.olat.modules.portfolio.PortfolioService; import org.springframework.beans.factory.annotation.Autowired; /** * * Initial date: 29.08.2016<br> * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com * */ public class BinderDeliveryOptionsController extends FormBasicController implements Activateable2 { private static final String[] onKeys = new String[] { "on" }; private static final String[] onValues = new String[] { "" }; private MultipleSelectionElement newEntriesEl; private MultipleSelectionElement deleteBinderEl; private CloseableModalController deleteOptionCmcCtrl; private ConfirmDeleteOptionController deleteOptionCtrl; private final Binder binder; private final BinderDeliveryOptions deliveryOptions; @Autowired private PortfolioService portfolioService; public BinderDeliveryOptionsController(UserRequest ureq, WindowControl wControl, Binder binder) { super(ureq, wControl); this.binder = binder; deliveryOptions = portfolioService.getDeliveryOptions(binder.getOlatResource()); initForm(ureq); } @Override protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) { setFormContextHelp("Portfolio template: Administration and editing#configuration"); newEntriesEl = uifactory.addCheckboxesHorizontal("canAddEntries", "allow.new.entries", formLayout, onKeys, onValues); if(deliveryOptions.isAllowNewEntries()) { newEntriesEl.select(onKeys[0], true); } deleteBinderEl = uifactory.addCheckboxesHorizontal("canDeleteBinder", "allow.delete.binder", formLayout, onKeys, onValues); deleteBinderEl.addActionListener(FormEvent.ONCHANGE); if(deliveryOptions.isAllowDeleteBinder()) { deleteBinderEl.select(onKeys[0], true); } FormLayoutContainer buttonsLayout = FormLayoutContainer.createButtonLayout("buttons", getTranslator()); buttonsLayout.setRootForm(mainForm); formLayout.add(buttonsLayout); uifactory.addFormSubmitButton("save", buttonsLayout); } @Override protected void doDispose() { // } @Override public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) { // } @Override protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) { if(source == deleteBinderEl) { if(deleteBinderEl.isAtLeastSelected(1)) { doConfirmDeleteOption(ureq); } } super.formInnerEvent(ureq, source, event); } @Override protected void formOK(UserRequest ureq) { boolean allowNewEntries = newEntriesEl.isAtLeastSelected(1); deliveryOptions.setAllowNewEntries(allowNewEntries); boolean allowDeleteBinder = deleteBinderEl.isAtLeastSelected(1); deliveryOptions.setAllowDeleteBinder(allowDeleteBinder); portfolioService.setDeliveryOptions(binder.getOlatResource(), deliveryOptions); } @Override protected void event(UserRequest ureq, Controller source, Event event) { if(deleteOptionCtrl == source) { if(event != Event.DONE_EVENT) { deleteBinderEl.uncheckAll(); } deleteOptionCmcCtrl.deactivate(); cleanUp(); } else if(deleteOptionCmcCtrl == source) { deleteBinderEl.uncheckAll(); cleanUp(); } super.event(ureq, source, event); } private void cleanUp() { removeAsListenerAndDispose(deleteOptionCmcCtrl); removeAsListenerAndDispose(deleteOptionCtrl); deleteOptionCmcCtrl = null; deleteOptionCtrl = null; } private void doConfirmDeleteOption(UserRequest ureq) { if(deleteOptionCtrl != null) return; deleteOptionCtrl = new ConfirmDeleteOptionController(ureq, getWindowControl()); listenTo(deleteOptionCtrl); String title = translate("create.new.binder"); deleteOptionCmcCtrl = new CloseableModalController(getWindowControl(), null, deleteOptionCtrl.getInitialComponent(), true, title, true); listenTo(deleteOptionCmcCtrl); deleteOptionCmcCtrl.activate(); } private class ConfirmDeleteOptionController extends FormBasicController { private MultipleSelectionElement acknowledgeEl; public ConfirmDeleteOptionController(UserRequest ureq, WindowControl wControl) { super(ureq, wControl, "confirm_delete_option"); initForm(ureq); } @Override protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) { String[] values = new String[] { translate("allow.delete.binder.warning") }; acknowledgeEl = uifactory.addCheckboxesHorizontal("acknowledge", "confirmation", formLayout, onKeys, values); uifactory.addFormCancelButton("cancel", formLayout, ureq, getWindowControl()); uifactory.addFormSubmitButton("delete", "ok", formLayout); } @Override protected void doDispose() { // } @Override protected boolean validateFormLogic(UserRequest ureq) { boolean allOk = true; acknowledgeEl.clearError(); if(!acknowledgeEl.isAtLeastSelected(1)) { acknowledgeEl.setErrorKey("form.mandatory.hover", null); allOk &= false; } return allOk & super.validateFormLogic(ureq); } @Override protected void formOK(UserRequest ureq) { fireEvent(ureq, Event.DONE_EVENT); } @Override protected void formCancelled(UserRequest ureq) { fireEvent(ureq, Event.CANCELLED_EVENT); } } }