diff --git a/src/main/java/org/olat/admin/user/imp/ImportStep01.java b/src/main/java/org/olat/admin/user/imp/ImportStep01.java index 24d293df3f1dd9752ebf7227694768567a5d3b61..437e5361fd9a01e8215f0a921b078130ee4c3b0b 100644 --- a/src/main/java/org/olat/admin/user/imp/ImportStep01.java +++ b/src/main/java/org/olat/admin/user/imp/ImportStep01.java @@ -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 diff --git a/src/main/java/org/olat/admin/user/imp/_content/step1.html b/src/main/java/org/olat/admin/user/imp/_content/step1.html index 5ce3a98512eac4eaec7c8ba4f47e8f294189bedd..4d6282989155a0793199ac3b86854d4405dd23a2 100644 --- a/src/main/java/org/olat/admin/user/imp/_content/step1.html +++ b/src/main/java/org/olat/admin/user/imp/_content/step1.html @@ -1,19 +1,37 @@ <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 diff --git a/src/main/java/org/olat/admin/user/imp/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/admin/user/imp/_i18n/LocalStrings_de.properties index 1ec4ecb610695085343613d638843e83657baa9b..31dc83f510d95046df0710c94bc8c621d4b202ff 100644 --- a/src/main/java/org/olat/admin/user/imp/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/admin/user/imp/_i18n/LocalStrings_de.properties @@ -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 diff --git a/src/main/java/org/olat/admin/user/imp/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/admin/user/imp/_i18n/LocalStrings_en.properties index a3f2f9268959a054b33fd56818b0b94c518c943c..84e5ceccb2e8307ab748b6fae122729c1748a691 100644 --- a/src/main/java/org/olat/admin/user/imp/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/admin/user/imp/_i18n/LocalStrings_en.properties @@ -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 diff --git a/src/main/java/org/olat/admin/user/imp/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/admin/user/imp/_i18n/LocalStrings_fr.properties index 14abf37532bd7c827d73edd8971a43c56ec00367..2e2a980999dda1112918a0402d9defe3f621d094 100644 --- a/src/main/java/org/olat/admin/user/imp/_i18n/LocalStrings_fr.properties +++ b/src/main/java/org/olat/admin/user/imp/_i18n/LocalStrings_fr.properties @@ -50,5 +50,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 diff --git a/src/main/java/org/olat/core/util/mail/ui/MailSettingsAdminController.java b/src/main/java/org/olat/core/util/mail/ui/MailSettingsAdminController.java index 9de97619a0c548f9ef955c5cc8caab0bdbbfc87a..2395c1d5e3394994589e84a4fad6330436f8aac6 100644 --- a/src/main/java/org/olat/core/util/mail/ui/MailSettingsAdminController.java +++ b/src/main/java/org/olat/core/util/mail/ui/MailSettingsAdminController.java @@ -32,7 +32,6 @@ import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; import org.olat.core.util.Util; import org.olat.core.util.mail.MailModule; -import org.olat.core.util.mail.MailUIFactory; /** * diff --git a/src/main/java/org/olat/core/util/mail/ui/MailTemplateAdminController.java b/src/main/java/org/olat/core/util/mail/ui/MailTemplateAdminController.java index 778c2894d1082c9b4d26d94d6b3d3e0bc202efc7..8bc9222bd2b94a064457f4bb6843de01c5c90979 100644 --- a/src/main/java/org/olat/core/util/mail/ui/MailTemplateAdminController.java +++ b/src/main/java/org/olat/core/util/mail/ui/MailTemplateAdminController.java @@ -30,7 +30,6 @@ import org.olat.core.gui.control.WindowControl; import org.olat.core.util.Util; import org.olat.core.util.mail.MailManager; import org.olat.core.util.mail.MailModule; -import org.olat.core.util.mail.MailUIFactory; /** * diff --git a/src/main/java/org/olat/group/ui/main/BGTableItem.java b/src/main/java/org/olat/group/ui/main/BGTableItem.java index 65bdda339f61ac0f74ed2179a3b234e2b099dd14..5e86039413c3fbf16ac8e882084e88f7612175fc 100644 --- a/src/main/java/org/olat/group/ui/main/BGTableItem.java +++ b/src/main/java/org/olat/group/ui/main/BGTableItem.java @@ -217,9 +217,11 @@ public class BGTableItem { } public void addRelation(BGRepositoryEntryRelation resource) { + if(resource == null) return; if(relations == null) { relations = new ArrayList<RepositoryEntryShort>(3); - } else if(relations.size() < 3) { + } + if(relations.size() < 3) { relations.add(new REShort(resource)); } }