Package org.olat.group.delete

Source Code of org.olat.group.delete.SelectionForm

/**
* 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) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
* University of Zurich, Switzerland.
* <p>
*/

package org.olat.group.delete;

import java.util.List;

import org.apache.velocity.VelocityContext;
import org.olat.admin.user.delete.service.UserDeletionManager;
import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.Component;
import org.olat.core.gui.components.form.Form;
import org.olat.core.gui.components.link.Link;
import org.olat.core.gui.components.link.LinkFactory;
import org.olat.core.gui.components.panel.Panel;
import org.olat.core.gui.components.table.DefaultColumnDescriptor;
import org.olat.core.gui.components.table.StaticColumnDescriptor;
import org.olat.core.gui.components.table.Table;
import org.olat.core.gui.components.table.TableController;
import org.olat.core.gui.components.table.TableEvent;
import org.olat.core.gui.components.table.TableGuiConfiguration;
import org.olat.core.gui.components.table.TableMultiSelectEvent;
import org.olat.core.gui.components.velocity.VelocityContainer;
import org.olat.core.gui.control.Controller;
import org.olat.core.gui.control.ControllerEventListener;
import org.olat.core.gui.control.DefaultController;
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.formelements.IntegerElement;
import org.olat.core.gui.translator.PackageTranslator;
import org.olat.core.gui.translator.Translator;
import org.olat.core.id.Identity;
import org.olat.core.id.UserConstants;
import org.olat.core.util.Util;
import org.olat.core.util.mail.MailNotificationEditController;
import org.olat.core.util.mail.MailTemplate;
import org.olat.group.BusinessGroup;
import org.olat.group.delete.service.GroupDeletionManager;
import org.olat.group.ui.BGTranslatorFactory;
import org.olat.group.ui.main.BGMainController;


/**
* Controller for tab 'Learning-resource selection'
*
* @author Christian Guretzki
*/
public class SelectionController extends DefaultController implements ControllerEventListener {
  private static final String PACKAGE = Util.getPackageName(SelectionController.class);
  private static final String PACKAGE_MAIN_CONTROLLER = Util.getPackageName(BGMainController.class);
  private static final String VELOCITY_ROOT = Util.getPackageVelocityRoot(PACKAGE);

  private static final String ACTION_SINGLESELECT_CHOOSE = "ssc";
  private static final String ACTION_MULTISELECT_CHOOSE = "msc";
  private static final String KEY_EMAIL_SUBJECT = "delete.announcement.email.subject";
  private static final String KEY_EMAIL_BODY = "delete.announcement.email.body";

  private VelocityContainer myContent;
  private Panel deleteSelectionPanel;
  private SelectionForm selectionForm;
  private TableController tableCtr;
  private GroupDeleteTableModel redtm;
  private PackageTranslator pT;
  private VelocityContainer selectionListContent;
  private Link editParameterLink;
  private MailNotificationEditController deleteGroupMailCtr;
  private List selectedGroups;
  private CloseableModalController cmc;
  private PackageTranslator tableModelTypeTranslator;


  /**
   * @param ureq
   * @param wControl
   * @param cancelbutton
   */
  public SelectionController(UserRequest ureq, WindowControl wControl) {
    super(wControl);

    pT = new PackageTranslator(PACKAGE, ureq.getLocale(), new PackageTranslator(PACKAGE_MAIN_CONTROLLER, ureq.getLocale()) );
    myContent = new VelocityContainer("deleteselection", VELOCITY_ROOT + "/panel.html", pT, this);

    //used to translate the BusinessGroup.getType() String in the table model
    tableModelTypeTranslator = BGTranslatorFactory.createBGPackageTranslator(PACKAGE, /*doesnt matter*/BusinessGroup.TYPE_BUDDYGROUP, ureq.getLocale());
   
    deleteSelectionPanel = new Panel("deleteSelectionPanel");
    deleteSelectionPanel.addListener(this);
    myContent.put("panel", deleteSelectionPanel);
    initializeTableController(ureq);
    initializeContent();

    setInitialComponent(myContent);
  }

  private void initializeContent() {
    updateGroupList();
    selectionListContent = new VelocityContainer("selectionlist", VELOCITY_ROOT + "/selectionlist.html", pT, this);
    selectionListContent.put("repositorylist", tableCtr.getInitialComponent() );
    selectionListContent.contextPut("header", pT.translate("selection.delete.header",
        new String[] { Integer.toString(GroupDeletionManager.getInstance().getLastUsageDuration()) }));
    editParameterLink = LinkFactory.createButtonXSmall("button.editParameter", selectionListContent, this);
    deleteSelectionPanel.setContent(selectionListContent);
  }

  /**
   * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
   *      org.olat.core.gui.components.Component,
   *      org.olat.core.gui.control.Event)
   */
  public void event(UserRequest ureq, Component source, Event event) {
    if (source == editParameterLink) {
      selectionForm = new SelectionForm("selectionform", pT);
      selectionForm.addListener(this);
      cmc = new CloseableModalController(getWindowControl(), pT.translate("close"), selectionForm, true, pT.translate("edit.parameter.header"));
      cmc.activate();
    } else if (source == selectionForm) {
      if (event == Form.EVNT_VALIDATION_OK) {
        GroupDeletionManager.getInstance().setLastUsageDuration(selectionForm.getLastUsageDuration());
        GroupDeletionManager.getInstance().setDeleteEmailDuration(selectionForm.getDeleteEmailDuration());
        initializeContent();
      } else if (event == Form.EVNT_FORM_CANCELLED) {
        fireEvent(ureq, Event.CANCELLED_EVENT);
      }
      cmc.deactivate();
    }
  }

  /**
   * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
   *      org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event)
   */
  public void event(UserRequest ureq, Controller source, Event event) {
    if (source == tableCtr) {
      if (event.getCommand().equals(Table.COMMANDLINK_ROWACTION_CLICKED)) {
        TableEvent te = (TableEvent) event;
        if (te.getActionId().equals(ACTION_SINGLESELECT_CHOOSE)) {
          int rowid = te.getRowId();
          GroupDeletionManager.getInstance().setLastUsageNowFor((BusinessGroup) redtm.getObject(rowid));
          updateGroupList();
        }
      } else if (event.getCommand().equals(Table.COMMAND_MULTISELECT)) {
        TableMultiSelectEvent tmse = (TableMultiSelectEvent) event;
        if (tmse.getAction().equals(ACTION_MULTISELECT_CHOOSE)) {
          handleEmailButtonEvent(ureq, tmse);
        }
      }
      initializeContent();
    } else if (source == deleteGroupMailCtr) {
      if (event == Event.DONE_EVENT) {
        String warningMessage = GroupDeletionManager.getInstance().sendDeleteEmailTo(selectedGroups, deleteGroupMailCtr.getMailTemplate(),
            deleteGroupMailCtr.isTemplateChanged(),  KEY_EMAIL_SUBJECT, KEY_EMAIL_BODY, ureq.getIdentity(), pT);
        cmc.deactivate();
        if(deleteGroupMailCtr.getMailTemplate() != null) {
          // when mailtemplate is null, user decides to send no email => no status message
          if (warningMessage.length() > 0 ) {
            this.getWindowControl().setWarning(pT.translate("delete.email.announcement.warning.header") + warningMessage);
          } else {
            this.getWindowControl().setInfo(pT.translate("selection.feedback.msg"));
          }
        }
        updateGroupList();
               
      } else if (event == Event.CANCELLED_EVENT) {
        cmc.deactivate();
      } else {
        throw new RuntimeException("unknown event ::" + event.getCommand());
      }
    }
  }

  private void handleEmailButtonEvent(UserRequest ureq, TableMultiSelectEvent tmse) {
    if (redtm.getObjects(tmse.getSelection()).size() != 0) {
      selectedGroups = redtm.getObjects(tmse.getSelection());
      if (deleteGroupMailCtr != null) {
        deleteGroupMailCtr.dispose();
      }
      MailTemplate deleteMailTemplate = createMailTemplate(pT.translate(KEY_EMAIL_SUBJECT), pT.translate(KEY_EMAIL_BODY));
      deleteMailTemplate.addToContext("lastloginduration",   Integer.toString(UserDeletionManager.getInstance().getLastLoginDuration() ));
      deleteMailTemplate.addToContext("durationdeleteemail", Integer.toString(UserDeletionManager.getInstance().getDeleteEmailDuration() ));
      deleteGroupMailCtr = new MailNotificationEditController(getWindowControl(), ureq, deleteMailTemplate, true);
      deleteGroupMailCtr.addControllerListener(this);
      cmc = new CloseableModalController(getWindowControl(), pT.translate("close"), deleteGroupMailCtr.getInitialComponent());
      cmc.activate();

    } else {
      getWindowControl().setWarning(pT.translate("nothing.selected.msg"));
    }
  }


  private void initializeTableController(UserRequest ureq) {
    TableGuiConfiguration tableConfig = new TableGuiConfiguration();
    tableConfig.setTableEmptyMessage(pT.translate("error.no.repository.found"));
    if (tableCtr != null) tableCtr.dispose();
    tableCtr = new TableController(tableConfig, ureq, getWindowControl(), pT, this);
    tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("table.header.bgname", 0, null, ureq.getLocale()));
    tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("table.header.description", 1, null, ureq.getLocale()));
    tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("table.header.type", 2, null, ureq.getLocale()));
    tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("table.header.lastusage", 3, null, ureq.getLocale()));
    tableCtr.addMultiSelectAction("action.delete.selection", ACTION_MULTISELECT_CHOOSE);
    tableCtr.addColumnDescriptor(new StaticColumnDescriptor(ACTION_SINGLESELECT_CHOOSE, "table.header.action", myContent
          .getTranslator().translate("action.activate")));
    tableCtr.setMultiSelect(true);
  }

  /**
   * @see org.olat.core.gui.control.DefaultController#doDispose(boolean)
   */
  protected void doDispose() {
    if (tableCtr != null) {
      tableCtr.dispose();
      tableCtr = null;
    }
  }

  public void updateGroupList() {
    List l = GroupDeletionManager.getInstance().getDeletableGroups(GroupDeletionManager.getInstance().getLastUsageDuration());
    redtm = new GroupDeleteTableModel(l, tableModelTypeTranslator);
    tableCtr.setTableDataModel(redtm);
  }

  /**
   * Create default template which fill in context 'firstname' , 'lastname' and 'username'.
   * @param subject
   * @param body
   * @return
   */
  private MailTemplate createMailTemplate(String subject, String body) {   
    return new MailTemplate(subject, body, null) {
      @Override
      public void putVariablesInMailContext(VelocityContext context, Identity identity) {
        context.put("firstname", identity.getUser().getProperty(UserConstants.FIRSTNAME, null));
        context.put("lastname", identity.getUser().getProperty(UserConstants.LASTNAME, null));
        context.put("username", identity.getName());
      }
    };
  }

}


class SelectionForm extends Form {

  private IntegerElement lastUsageDuration;
  private IntegerElement emailDuration;

  /**
   * @param name
   * @param cancelbutton
   * @param isAdmin if true, no field must be filled in at all, otherwise
   *          validation takes place
   */
  public SelectionForm(String name, Translator translator) {
    super(name, translator);
    lastUsageDuration = new IntegerElement("edit.parameter.form.lastusage.duration", GroupDeletionManager.getInstance().getLastUsageDuration());
    addFormElement("lastUsageDuration", lastUsageDuration);
    emailDuration = new IntegerElement("edit.parameter.form.email.duration", GroupDeletionManager.getInstance().getDeleteEmailDuration());
    addFormElement("emailDuration", emailDuration);
    addSubmitKey("edit.parameter.form.submit", "submit");
    setCancelButton();
  }

  public int getDeleteEmailDuration() {
    return emailDuration.getIntvalue();
  }

  public int getLastUsageDuration() {
    return lastUsageDuration.getIntvalue();
  }

  /**
   * @see org.olat.core.gui.components.Form#validate(org.olat.core.gui.UserRequest)
   */
  public boolean validate() {
    return lastUsageDuration.isInteger("error.lastusage.duration") && emailDuration.isInteger("error.lastlogin.duration");
  }
}
TOP

Related Classes of org.olat.group.delete.SelectionForm

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.