Skip to content
Snippets Groups Projects
Commit 8e4fe899 authored by srosse's avatar srosse
Browse files

OO-1738: make the choice of updating existing users in the import wizard very visible

parent 039ffab2
No related branches found
No related tags found
No related merge requests found
......@@ -28,7 +28,7 @@ import java.util.List;
import org.olat.core.gui.UserRequest;
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.elements.SingleSelection;
import org.olat.core.gui.components.form.flexible.impl.Form;
import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer;
import org.olat.core.gui.components.form.flexible.impl.elements.table.AbstractCSSIconFlexiCellRenderer;
......@@ -50,9 +50,11 @@ import org.olat.core.gui.translator.Translator;
import org.olat.core.id.Identity;
import org.olat.user.UserManager;
import org.olat.user.propertyhandlers.UserPropertyHandler;
import org.springframework.beans.factory.annotation.Autowired;
class ImportStep01 extends BasicStep {
private static final String usageIdentifyer = UserImportController.class.getCanonicalName();
private static final String[] theKeys = new String[]{ "", "update", "ignore" };
private boolean newUsers;
private boolean canCreateOLATPassword;
......@@ -77,17 +79,19 @@ class ImportStep01 extends BasicStep {
}
private final class ImportStepForm01 extends StepFormBasicController {
private FormLayoutContainer textContainer;
private MultipleSelectionElement updateEl;
private MultipleSelectionElement updatePasswordEl;
private SingleSelection updateEl, updatePasswordEl;
private List<UserPropertyHandler> userPropertyHandlers;
@Autowired
private UserManager userManager;
public ImportStepForm01(UserRequest ureq, WindowControl control, Form rootForm, StepsRunContext runContext) {
super(ureq, control, rootForm, runContext, LAYOUT_VERTICAL, null);
// use custom translator with fallback to user properties translator
UserManager um = UserManager.getInstance();
setTranslator(um.getPropertyHandlerTranslator(getTranslator()));
setTranslator(userManager.getPropertyHandlerTranslator(getTranslator()));
flc.setTranslator(getTranslator());
initForm(ureq);
}
......@@ -100,19 +104,34 @@ class ImportStep01 extends BasicStep {
@Override
protected void formOK(UserRequest ureq) {
Boolean updateUsers = Boolean.FALSE;
if(updateEl != null && updateEl.isAtLeastSelected(1)) {
if(updateEl != null && updateEl.isOneSelected() && updateEl.isSelected(1)) {
updateUsers = Boolean.TRUE;
}
addToRunContext("updateUsers", updateUsers);
Boolean updatePasswords = Boolean.FALSE;
if(updatePasswordEl != null && updatePasswordEl.isAtLeastSelected(1)) {
if(updatePasswordEl != null && updatePasswordEl.isOneSelected() && updatePasswordEl.isSelected(1)) {
updatePasswords = Boolean.TRUE;
}
addToRunContext("updatePasswords", updatePasswords);
fireEvent(ureq, StepsEvent.ACTIVATE_NEXT);
}
@Override
protected boolean validateFormLogic(UserRequest ureq) {
boolean allOk = true;
if(updateEl != null && (!updateEl.isOneSelected() || updateEl.isSelected(0))) {
updateEl.setErrorKey("form.mandatory.hover", null);
allOk &= false;
}
if(updatePasswordEl != null && (!updatePasswordEl.isOneSelected() || updatePasswordEl.isSelected(0))) {
updatePasswordEl.setErrorKey("form.mandatory.hover", null);
allOk &= false;
}
return allOk & super.validateFormLogic(ureq);
}
@Override
protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
FormLayoutContainer formLayoutVertical = FormLayoutContainer.createVerticalFormLayout("vertical", getTranslator());
......@@ -135,15 +154,13 @@ class ImportStep01 extends BasicStep {
textContainer.contextPut("overview", overview);
textContainer.contextPut("updateusers", updateIdents.isEmpty());
if(!updateIdents.isEmpty()) {
String[] updateValues = new String[]{ translate("update.user") };
String[] theValues = new String[]{ translate("update.select"), translate("update.yes"), translate("update.no") };
updateEl = uifactory
.addCheckboxesHorizontal("update.user", textContainer, new String[]{"on"}, updateValues);
updateEl.select("on", true);
.addDropdownSingleselect("update.user", textContainer, theKeys, theValues, null);
if(canCreateOLATPassword) {
String[] theValues = new String[]{ translate("update.password") };
updatePasswordEl = uifactory
.addCheckboxesHorizontal("update.password", textContainer, new String[]{"on"}, theValues);
.addDropdownSingleselect("update.password", textContainer, theKeys, theValues, null);
}
}
......@@ -175,45 +192,36 @@ class ImportStep01 extends BasicStep {
uifactory.addTableElement(getWindowControl(), "newUsers", tableDataModel, getTranslator(), formLayoutVertical);
}
}
}
private static class UserNewOldCustomFlexiCellRenderer extends AbstractCSSIconFlexiCellRenderer {
/**
*
* Description:<br>
* Special cell renderer that uses a css class icon to display the new user type
*
* <P>
* Initial Date: 21.03.2008 <br>
* @author gnaegi
*/
class UserNewOldCustomFlexiCellRenderer extends AbstractCSSIconFlexiCellRenderer {
@Override
protected String getCellValue(Object cellValue) {
return "";
}
@Override
protected String getCellValue(Object cellValue) {
return "";
}
@Override
protected String getCssClass(Object cellValue) {
if (cellValue instanceof Boolean) {
if (((Boolean) cellValue).booleanValue()) {
return "o_icon_new";
} else {
return "o_icon_warn";
@Override
protected String getCssClass(Object cellValue) {
if (cellValue instanceof Boolean) {
if (((Boolean) cellValue).booleanValue()) {
return "o_icon_new";
} else {
return "o_icon_warn";
}
}
return "o_icon_error";
}
return "o_icon_error";
}
@Override
protected String getHoverText(Object cellValue, Translator translator) {
if (cellValue instanceof Boolean) {
if (((Boolean) cellValue).booleanValue()) {
return translator.translate("import.user.new.alt");
} else {
return translator.translate("import.user.existing.alt");
@Override
protected String getHoverText(Object cellValue, Translator translator) {
if (cellValue instanceof Boolean) {
if (((Boolean) cellValue).booleanValue()) {
return translator.translate("import.user.new.alt");
} else {
return translator.translate("import.user.existing.alt");
}
}
return translator.translate("error");
}
return translator.translate("error");
}
}
\ No newline at end of file
<h4>$r.translate("step1.description")</h4>
#if($newusers=="true")
$overview
<p class="o_warning">$overview</p>
#else
$r.translate("step1.nonewusers")
#end
#if($r.visible("update.password"))
<br/><br/>$r.translate("step1.passwordEmails")
<p class="o_error">$r.translate("step1.nonewusers")</p>
#end
#if($r.visible("update.user"))
<br/><br/>$r.render("update.user")
<div class="form-group #if($f.hasError("update.user")) has-feedback has-error #end clearfix">
$r.render("update.user_LABEL", "update.user", "col-sm-3")
<div class="col-sm-9">
$r.render("update.user", "form")
#if($f.hasError("update.user"))
<span class="o_icon o_icon_error form-control-feedback"></span>
#end
</div>
#if($f.hasError("update.user"))
<div class="col-sm-offset-3 col-sm-9">$r.render("update.user_ERROR")</div>
#end
</div>
#end
#if($r.visible("update.password"))
#if(!$r.visible("update.user"))
<br/>
#end
<br/>$r.render("update.password")
<p class="o_desc">$r.translate("step1.passwordEmails")</p>
<div class="form-group #if($f.hasError("update.password")) has-feedback has-error #end clearfix">
$r.render("update.password_LABEL", "update.password", "col-sm-3")
<div class="col-sm-9">
$r.render("update.password", "form")
#if($f.hasError("update.password"))
<span class="o_icon o_icon_error form-control-feedback"></span>
#end
</div>
#if($f.hasError("update.password"))
<div class="col-sm-offset-3 col-sm-9">$r.render("update.password_ERROR")</div>
#end
</div>
#end
\ No newline at end of file
......@@ -50,5 +50,8 @@ table.user.lang=Sprache
table.user.login=Benutzername
table.user.pwd=Passwort
title=Import von Benutzern
update.password=Passw\u00F6rter \u00E4ndern f\u00FCr existierende Benutzer
update.user=Existierende Benutzer \u00E4ndern
update.password=Passw\u00F6rter bereits bestehender Benutzer aktualisieren
update.user=Daten bereits bestehender Benutzer aktualisieren
update.select=Bitte w\u00E4hlen Sie
update.yes=Ja
update.no=Nein
......@@ -50,5 +50,8 @@ table.user.lang=Language
table.user.login=User name
table.user.pwd=Password
title=User import
update.password=Update passwords of current users
update.user=Update current users
update.password=Update passwords of existing users
update.user=Update user profile data of existing users
update.select=Please select
update.yes=Yes
update.no=No
......@@ -51,5 +51,8 @@ table.user.lang=Langue
table.user.login=Nom d'utilisateur
table.user.pwd=Mot de passe
title=Importation des utilisateurs
update.password=Changer les mots-de-passe de utilisateurs existants
update.user=Mettre \u00E0 jour les utilisateurs existants
update.password=Mettre \u00E0 jour les mots-de-passe des utilisateurs existants
update.user=Mettre \u00E0 jour le profil des utilisateurs existants
update.select=S'il vous pla\u00EEt, choisissez une option
update.yes=Oui
update.no=Non
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment