Skip to content
Snippets Groups Projects
Commit 19cd08ee authored by srosse's avatar srosse
Browse files

OO-586: import members by user names, emails and institutional numbers, remove...

OO-586: import members by user names, emails and institutional numbers, remove select box, update wording
parent d4f65305
No related branches found
No related tags found
No related merge requests found
Showing
with 89 additions and 100 deletions
......@@ -40,6 +40,7 @@ import org.olat.core.id.Identity;
*/
public class IdentitiesMoveEvent extends MultiIdentityChosenEvent {
private static final long serialVersionUID = -45306223838687501L;
private List<Identity> notMovedIdentities;
private List<Identity> movedIdentities;
......
......@@ -40,6 +40,7 @@ import org.olat.core.id.Identity;
*/
public class IdentitiesRemoveEvent extends Event {
private static final long serialVersionUID = -8986928822106248277L;
private List<Identity> removedIdentities;
/**
......
......@@ -56,6 +56,6 @@ public class UsersToGroupWizardStep00 extends BasicStep {
@Override
public StepFormController getStepController(UserRequest ureq, WindowControl wControl, StepsRunContext stepsRunContext, Form form) {
return new ImportMemberByUsernamesController(ureq, wControl, form, stepsRunContext, true);
return new ImportMemberByUsernamesController(ureq, wControl, form, stepsRunContext);
}
}
......@@ -191,6 +191,9 @@ public interface BaseSecurity {
*/
public Identity findIdentityByNumber(String identityNumber);
public List<Identity> findIdentitiesByNumber(Collection<String> identityNumbers);
/**
* Find an identity by its user
* @param user
......
......@@ -1180,6 +1180,21 @@ public class BaseSecurityManager extends BasicManager implements BaseSecurity {
return null;
}
@Override
public List<Identity> findIdentitiesByNumber(Collection<String> identityNumbers) {
if(identityNumbers == null || identityNumbers.isEmpty()) return Collections.emptyList();
StringBuilder sb = new StringBuilder();
sb.append("select identity from ").append(IdentityImpl.class.getName()).append(" identity ")
.append(" inner join identity.user user ")
.append(" where user.properties['").append(UserConstants.INSTITUTIONALUSERIDENTIFIER).append("'] in (:idNumbers) ");
return dbInstance.getCurrentEntityManager()
.createQuery(sb.toString(), Identity.class)
.setParameter("idNumbers", identityNumbers)
.getResultList();
}
@Override
public List<Identity> findIdentitiesByName(Collection<String> identityNames) {
if (identityNames == null || identityNames.isEmpty()) return Collections.emptyList();
......
......@@ -21,7 +21,6 @@ package org.olat.course.member.wizard;
import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.form.flexible.FormItemContainer;
import org.olat.core.gui.components.form.flexible.elements.SingleSelection;
import org.olat.core.gui.components.form.flexible.elements.TextElement;
import org.olat.core.gui.components.form.flexible.impl.Form;
import org.olat.core.gui.control.Controller;
......@@ -29,26 +28,18 @@ import org.olat.core.gui.control.WindowControl;
import org.olat.core.gui.control.generic.wizard.StepFormBasicController;
import org.olat.core.gui.control.generic.wizard.StepsEvent;
import org.olat.core.gui.control.generic.wizard.StepsRunContext;
import org.olat.course.member.wizard.ImportMemberOverviewIdentitiesController.DataType;
/**
*
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*/
public class ImportMemberByUsernamesController extends StepFormBasicController {
private final boolean typesEnabled;
private TextElement idata;
private SingleSelection typedata;
private String[] typeKeys = new String[]{
DataType.username.name(), DataType.email.name(), DataType.institutionalUserIdentifier.name()
};
public ImportMemberByUsernamesController(UserRequest ureq, WindowControl wControl, Form rootForm,
StepsRunContext runContext, boolean typesEnabled) {
StepsRunContext runContext) {
super(ureq, wControl, rootForm, runContext, LAYOUT_DEFAULT, null);
this.typesEnabled = typesEnabled;
initForm (ureq);
}
......@@ -64,21 +55,11 @@ public class ImportMemberByUsernamesController extends StepFormBasicController {
protected void formOK(UserRequest ureq) {
String logins = idata.getValue();
addToRunContext("logins", logins);
if(typedata != null && typedata.isOneSelected()) {
addToRunContext("dataType", DataType.values()[typedata.getSelected()]);
}
fireEvent(ureq, StepsEvent.ACTIVATE_NEXT);
}
@Override
protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
if(typesEnabled) {
String[] theValues = new String[]{
"Username", "Email", "MarkId"
};
typedata = uifactory.addDropdownSingleselect("form.addusers.type", formLayout, typeKeys, theValues, null);
}
idata = uifactory.addTextAreaElement("addusers", "form.addusers", -1, 15, 40, true, " ", formLayout);
idata.setExampleKey ("form.names.example", null);
}
......
......@@ -33,7 +33,7 @@ import org.olat.user.propertyhandlers.UserPropertyHandler;
*
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*/
public class ImportMemberOverviewDataModel extends DefaultTableDataModel<Identity> implements FlexiTableDataModel {
public class ImportMemberOverviewDataModel extends DefaultTableDataModel<Identity> implements FlexiTableDataModel<Identity> {
private final Locale locale;
private final boolean isAdministrativeUser;
private FlexiTableColumnModel columnModel;
......
......@@ -20,7 +20,6 @@
package org.olat.course.member.wizard;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.olat.admin.user.UserTableDataModel;
......@@ -43,6 +42,8 @@ import org.olat.core.gui.control.generic.wizard.StepsEvent;
import org.olat.core.gui.control.generic.wizard.StepsRunContext;
import org.olat.core.gui.translator.Translator;
import org.olat.core.id.Identity;
import org.olat.core.id.UserConstants;
import org.olat.core.util.mail.MailHelper;
import org.olat.user.UserManager;
import org.olat.user.propertyhandlers.UserPropertyHandler;
......@@ -69,13 +70,8 @@ public class ImportMemberOverviewIdentitiesController extends StepFormBasicContr
oks = null;
if(containsRunContextKey("logins")) {
DataType type = (DataType)runContext.get("dataType");
if(type == null) {
type = DataType.username;
}
String logins = (String)runContext.get("logins");
oks = loadModel(logins, type);
oks = loadModel(logins);
} else if(containsRunContextKey("keys")) {
@SuppressWarnings("unchecked")
List<String> keys = (List<String>)runContext.get("keys");
......@@ -115,12 +111,9 @@ public class ImportMemberOverviewIdentitiesController extends StepFormBasicContr
}
private List<Identity> loadModel(List<String> keys) {
List<Identity> existIdents = Collections.emptyList();//securityManager.getIdentitiesOfSecurityGroup(securityGroup);
List<Identity> oks = new ArrayList<Identity>();
List<String> isanonymous = new ArrayList<String>();
List<String> notfounds = new ArrayList<String>();
List<String> alreadyin = new ArrayList<String>();
SecurityGroup anonymousSecGroup = securityManager.findSecurityGroupByName(Constants.GROUP_ANONYMOUS);
for (String identityKey : keys) {
......@@ -129,70 +122,71 @@ public class ImportMemberOverviewIdentitiesController extends StepFormBasicContr
notfounds.add(identityKey);
} else if (securityManager.isIdentityInSecurityGroup(ident, anonymousSecGroup)) {
isanonymous.add(identityKey);
} else {
// check if already in group
boolean inGroup = PersistenceHelper.containsPersistable(existIdents, ident);
if (inGroup) {
// added to warning: already in group
alreadyin.add(ident.getName());
} else {
// ok to add -> preview (but filter duplicate entries)
if (!PersistenceHelper.containsPersistable(oks, ident)) {
oks.add(ident);
}
}
} else if (!PersistenceHelper.containsPersistable(oks, ident)) {
oks.add(ident);
}
}
return oks;
}
private List<Identity> loadModel(String inp, DataType type) {
List<Identity> existIdents = Collections.emptyList();//securityManager.getIdentitiesOfSecurityGroup(securityGroup);
private List<Identity> loadModel(String inp) {
List<Identity> oks = new ArrayList<Identity>();
List<String> isanonymous = new ArrayList<String>();
List<String> notfounds = new ArrayList<String>();
List<String> alreadyin = new ArrayList<String>();
SecurityGroup anonymousSecGroup = securityManager.findSecurityGroupByName(Constants.GROUP_ANONYMOUS);
List<String> identList = new ArrayList<String>();
String[] lines = inp.split("\r?\n");
for (int i = 0; i < lines.length; i++) {
String username = lines[i].trim();
if (!username.equals("")) { // skip empty lines
Identity ident;
switch(type) {
case email: {
ident = userManager.findIdentityByEmail(username);
break;
}
case institutionalUserIdentifier: {
ident = securityManager.findIdentityByNumber(username);
break;
}
default: {
ident = securityManager.findIdentityByName(username);
}
}
if (ident == null) { // not found, add to not-found-list
notfounds.add(username);
} else if (securityManager.isIdentityInSecurityGroup(ident, anonymousSecGroup)) {
isanonymous.add(username);
} else {
// check if already in group
boolean inGroup = PersistenceHelper.containsPersistable(existIdents, ident);
if (inGroup) {
// added to warning: already in group
alreadyin.add(ident.getName());
} else {
// ok to add -> preview (but filter duplicate entries)
if (!PersistenceHelper.containsPersistable(oks, ident)) {
oks.add(ident);
}
}
}
if(username.length() > 0) {
identList.add(username);
}
}
//search by names
List<Identity> identities = securityManager.findIdentitiesByName(identList);
for(Identity identity:identities) {
identList.remove(identity.getName());
if (!PersistenceHelper.containsPersistable(oks, identity)
&& !securityManager.isIdentityInSecurityGroup(identity, anonymousSecGroup)) {
oks.add(identity);
}
}
//search by email
List<String> emails = new ArrayList<String>();
for(String ident:identList) {
if(MailHelper.isValidEmailAddress(ident)) {
emails.add(ident);
}
}
List<Identity> mailIdentities = userManager.findIdentitiesByEmail(emails);
for(Identity identity:mailIdentities) {
String email = identity.getUser().getProperty(UserConstants.EMAIL, null);
if(email != null) {
identList.remove(email);
}
String institutEmail = identity.getUser().getProperty(UserConstants.INSTITUTIONALEMAIL, null);
if(institutEmail != null) {
identList.remove(institutEmail);
}
if (!PersistenceHelper.containsPersistable(oks, identity)
&& !securityManager.isIdentityInSecurityGroup(identity, anonymousSecGroup)) {
oks.add(identity);
}
}
//search by institutionalUserIdentifier
List<Identity> institutIdentities = securityManager.findIdentitiesByNumber(identList);
for(Identity identity:institutIdentities) {
String userIdent = identity.getUser().getProperty(UserConstants.INSTITUTIONALUSERIDENTIFIER, null);
if(userIdent != null) {
identList.remove(userIdent);
}
if (!PersistenceHelper.containsPersistable(oks, identity)
&& !securityManager.isIdentityInSecurityGroup(identity, anonymousSecGroup)) {
oks.add(identity);
}
}
......@@ -214,10 +208,4 @@ public class ImportMemberOverviewIdentitiesController extends StepFormBasicContr
protected void doDispose() {
//
}
public enum DataType {
username,
email,
institutionalUserIdentifier
}
}
\ No newline at end of file
......@@ -48,6 +48,6 @@ public class ImportMember_1a_LoginListStep extends BasicStep {
@Override
public StepFormController getStepController(UserRequest ureq, WindowControl wControl, StepsRunContext runContext, Form form) {
return new ImportMemberByUsernamesController(ureq, wControl, form, runContext, false);
return new ImportMemberByUsernamesController(ureq, wControl, form, runContext);
}
}
\ No newline at end of file
#Mon Mar 02 09:54:04 CET 2009
import.import.title=Benutzernamen angeben
import.import.title=Benutzer suchen
import.choose.title=$\:import.import.title
import.confirm.title=berprfen
import.permission.title=Berechtigungen
import.mail.title=E-Mail-Benachrichtigung
form.names.example=test01<br/>author02<br/>
form.addusers=Benutzername
form.addusers.type=Typ
form.names.example=test01<br/>author02<br/>$org.olat.user.propertyhandlers\:import.example.institutionalUserIdentifier
form.addusers=Benutzername, $org.olat.user.propertyhandlers\:table.name.email oder $org.olat.user.propertyhandlers\:table.name.institutionalUserIdentifier
table.user.login=$org.olat.group.ui.main\:table.header.login
\ No newline at end of file
#Thu Sep 27 13:24:15 CEST 2012
form.addusers=User names
form.names.example=test01<br/>author02<br/>
form.addusers=User names, $org.olat.user.propertyhandlers\:table.name.email or $org.olat.user.propertyhandlers\:table.name.institutionalUserIdentifier
form.names.example=test01<br/>author02<br/>$org.olat.user.propertyhandlers\:import.example.institutionalUserIdentifier
import.confirm.title=Review
import.import.title=Enter user names
import.import.title=Search for users
import.choose.title=Indicate user name
import.mail.title=E-Mail notification
import.permission.title=Rights
form.addusers.type=Type
table.user.login=$org.olat.group.ui.main\:table.header.login
......@@ -20,6 +20,7 @@
package org.olat.user;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
......@@ -187,7 +188,8 @@ public class UserManagerImpl extends UserManager {
}
@Override
public List<Identity> findIdentitiesByEmail(List<String> emails) {
public List<Identity> findIdentitiesByEmail(List<String> emailList) {
List<String> emails = new ArrayList<String>(emailList);
for(Iterator<String> emailIt=emails.iterator(); emailIt.hasNext(); ) {
String email = emailIt.next();
if (!MailHelper.isValidEmailAddress(email)) {
......
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