Something went wrong on our end
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
UserEmailAdminController.java 8.67 KiB
/**
* <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.user;
import org.olat.NewControllerFactory;
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.link.Link;
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.modal.DialogBoxController;
import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory;
import org.springframework.beans.factory.annotation.Autowired;
/**
*
* Initial date: 30.10.2017<br>
* @author uhensler, urs.hensler@frentix.com, http://www.frentix.com
*
*/
public class UserEmailAdminController extends FormBasicController {
private static final String USER_EMAIL_ADMIN_TITLE = "user.email.admin.title";
private static final String USER_EMAIL_ADMIN_DESCRIPTION = "user.email.admin.description";
private static final String USER_EMAIL_MANDATORY = "user.email.mandatory";
private static final String USER_WITHOUT_EMAIL = "user.without.email";
private static final String USER_EMAIL_UNIQUE = "user.email.unique";
private static final String USER_WITH_EMAIL_DUPLICATES = "user.email.duplicates";
private static final String USERS_DUPLICATE_EMAILS_EXIST = "users.duplicate.emails.exist";
private static final String USER_EMAIL_MANDATORY_DISABLE_CONFIRMATION_TITLE = "user.email.mandatory.disable.confirmation.title";
private static final String USER_EMAIL_MANDATORY_DISABLE_CONFIRMATION_TEXT = "user.email.mandatory.disable.confirmation.text";
private static final String USER_EMAIL_UNIQUE_DISABLE_CONFIRMATION_TITLE = "user.email.unique.disable.confirmation.title";
private static final String USER_EMAIL_UNIQUE_DISABLE_CONFIRMATION_TEXT = "user.email.unique.disable.confirmation.text";
private MultipleSelectionElement userEmailMandatoryEl;
private String[] userEmailMandatoryKey;
private String[] userEmailMandatoryValue;
private FormLink showUserWithoutEmailEl;
private MultipleSelectionElement userEmailUniqueEl;
private String[] userEmailUniqueKey;
private String[] userEmailUniqueValue;
private FormLink showUserEmailDuplicatesEl;
private DialogBoxController confirmDisableMandatoryCtrl;
private DialogBoxController confirmDisableUniqueCtrl;
private int numberOfUsersWithDuplicateEmail;
@Autowired
private UserManager userManager;
@Autowired
private UserModule userModule;
public UserEmailAdminController(UserRequest ureq, WindowControl wControl) {
super(ureq, wControl);
userEmailMandatoryKey = new String [] { USER_EMAIL_MANDATORY};
userEmailMandatoryValue = new String [] { "" };
userEmailUniqueKey = new String [] { USER_EMAIL_UNIQUE};
userEmailUniqueValue = new String [] { ""};
initForm(ureq);
}
@Override
protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
setFormTitle(USER_EMAIL_ADMIN_TITLE);
setFormDescription(USER_EMAIL_ADMIN_DESCRIPTION);
userEmailMandatoryEl = uifactory.addCheckboxesVertical(USER_EMAIL_MANDATORY, formLayout, userEmailMandatoryKey, userEmailMandatoryValue, 1);
userEmailMandatoryEl.select(USER_EMAIL_MANDATORY, userModule.isEmailMandatory());
userEmailMandatoryEl.addActionListener(FormEvent.ONCHANGE);
int numberOfUsersWithoutEmail = userManager.findVisibleIdentitiesWithoutEmail().size();
String usersWithoutEmailLinkText = translate(USER_WITHOUT_EMAIL, new String[] { Integer.toString(numberOfUsersWithoutEmail) });
showUserWithoutEmailEl = uifactory.addFormLink(USER_WITHOUT_EMAIL, usersWithoutEmailLinkText, null, formLayout, Link.NONTRANSLATED);
userEmailUniqueEl = uifactory.addCheckboxesVertical(USER_EMAIL_UNIQUE, formLayout, userEmailUniqueKey, userEmailUniqueValue, 1);
userEmailUniqueEl.select(USER_EMAIL_UNIQUE, userModule.isEmailUnique());
userEmailUniqueEl.addActionListener(FormEvent.ONCHANGE);
numberOfUsersWithDuplicateEmail = userManager.findVisibleIdentitiesWithEmailDuplicates().size();
String usersEmailDuplicatesLinkText = translate(USER_WITH_EMAIL_DUPLICATES, new String[] { Integer.toString(numberOfUsersWithDuplicateEmail) });
showUserEmailDuplicatesEl = uifactory.addFormLink(USER_WITH_EMAIL_DUPLICATES, usersEmailDuplicatesLinkText, null, formLayout, Link.NONTRANSLATED);
}
@Override
protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
if (userEmailMandatoryEl.equals(source)) {
boolean isEmailMandatory = userEmailMandatoryEl.isAtLeastSelected(1);
doSetEmailMandatory(ureq, isEmailMandatory);
} else if (userEmailUniqueEl.equals(source)) {
boolean isEmailUnique = userEmailUniqueEl.isAtLeastSelected(1);
doSetEmailUnique(ureq, isEmailUnique);
} else if (showUserWithoutEmailEl.equals(source)) {
doOpenUsersWithoutEmail(ureq);
} else if (showUserEmailDuplicatesEl.equals(source)) {
doOpenUsersWithEmailDuplicates(ureq);
}
}
private void doSetEmailMandatory(UserRequest ureq, boolean isEmailMandatory) {
if (!isEmailMandatory) {
doOpenEmailMandatoryDisableconfirmation(ureq);
} else {
userModule.setEmailMandatory(isEmailMandatory);
}
}
private void doOpenEmailMandatoryDisableconfirmation(UserRequest ureq) {
confirmDisableMandatoryCtrl = DialogBoxUIFactory.createYesNoDialog(ureq, getWindowControl(),
translate(USER_EMAIL_MANDATORY_DISABLE_CONFIRMATION_TITLE),
translate(USER_EMAIL_MANDATORY_DISABLE_CONFIRMATION_TEXT));
listenTo(confirmDisableMandatoryCtrl);
confirmDisableMandatoryCtrl.activate();
}
private void doSetEmailUnique(UserRequest ureq, boolean isEmailUnique) {
if (isEmailUnique && existUsersWithDuplicateEmail()) {
userEmailUniqueEl.select(USER_EMAIL_UNIQUE, false);
showError(USERS_DUPLICATE_EMAILS_EXIST, Integer.toString(numberOfUsersWithDuplicateEmail));
} else if (!isEmailUnique) {
doOpenEmailUniqueDisableconfirmation(ureq);
} else {
userModule.setEmailUnique(isEmailUnique);
}
}
private boolean existUsersWithDuplicateEmail() {
return numberOfUsersWithDuplicateEmail > 0;
}
private void doOpenEmailUniqueDisableconfirmation(UserRequest ureq) {
confirmDisableUniqueCtrl = DialogBoxUIFactory.createYesNoDialog(ureq, getWindowControl(),
translate(USER_EMAIL_UNIQUE_DISABLE_CONFIRMATION_TITLE),
translate(USER_EMAIL_UNIQUE_DISABLE_CONFIRMATION_TEXT));
listenTo(confirmDisableUniqueCtrl);
confirmDisableUniqueCtrl.activate();
}
private void doOpenUsersWithoutEmail(UserRequest ureq) {
String businessPath = "[UserAdminSite:0][userswithoutemail:0]";
NewControllerFactory.getInstance().launch(businessPath, ureq, getWindowControl());
}
private void doOpenUsersWithEmailDuplicates(UserRequest ureq) {
String businessPath = "[UserAdminSite:0][usersemailduplicates:0]";
NewControllerFactory.getInstance().launch(businessPath, ureq, getWindowControl());
}
@Override
protected void event(UserRequest ureq, Controller source, Event event) {
if (source == confirmDisableMandatoryCtrl) {
boolean isEmailMandatory = !DialogBoxUIFactory.isYesEvent(event);
userModule.setEmailMandatory(isEmailMandatory);
userEmailMandatoryEl.select(USER_EMAIL_MANDATORY, isEmailMandatory);
cleanUp();
} else if (source == confirmDisableUniqueCtrl) {
boolean isEmailUnique = !DialogBoxUIFactory.isYesEvent(event);
userModule.setEmailUnique(isEmailUnique);
userEmailUniqueEl.select(USER_EMAIL_UNIQUE, isEmailUnique);
cleanUp();
}
super.event(ureq, source, event);
}
private void cleanUp() {
removeAsListenerAndDispose(confirmDisableUniqueCtrl);
confirmDisableUniqueCtrl = null;
}
@Override
protected void formOK(UserRequest ureq) {
//
}
@Override
protected void doDispose() {
//
}
}