From a34655cfc1789a195d8d3a114e2d430f062d069a Mon Sep 17 00:00:00 2001 From: srosse <stephane.rosse@frentix.com> Date: Fri, 25 Jan 2019 15:43:19 +0100 Subject: [PATCH] OO-3719: build business path activation chain in user management --- .../olat/admin/user/UserAdminController.java | 13 +++++++-- .../user/UsermanagerUserSearchController.java | 29 ++++++++++++++++++- .../admin/user/UsermanagerUserSearchForm.java | 12 ++++---- .../org/olat/core/id/context/StateMapped.java | 2 +- .../registration/RegistrationManager.java | 4 +-- .../ui/admin/UserSearchTableController.java | 26 +++++++++++++++-- 6 files changed, 69 insertions(+), 17 deletions(-) diff --git a/src/main/java/org/olat/admin/user/UserAdminController.java b/src/main/java/org/olat/admin/user/UserAdminController.java index 5e2caf1d5b3..ddd406ce77c 100644 --- a/src/main/java/org/olat/admin/user/UserAdminController.java +++ b/src/main/java/org/olat/admin/user/UserAdminController.java @@ -54,9 +54,11 @@ import org.olat.core.gui.control.generic.dtabs.Activateable2; import org.olat.core.id.Identity; import org.olat.core.id.Organisation; import org.olat.core.id.Roles; +import org.olat.core.id.context.BusinessControlFactory; import org.olat.core.id.context.ContextEntry; import org.olat.core.id.context.StateEntry; import org.olat.core.util.WebappHelper; +import org.olat.core.util.resource.OresHelper; import org.olat.core.util.vfs.QuotaManager; import org.olat.course.certificate.ui.CertificateAndEfficiencyStatementListController; import org.olat.ldap.LDAPLoginManager; @@ -116,6 +118,7 @@ public class UserAdminController extends BasicController implements Activateable private Identity editedIdentity; private final Roles editedRoles; private final boolean allowedToManage; + private int rolesTab; // controllers used in tabbed pane private TabbedPane userTabP; @@ -206,9 +209,13 @@ public class UserAdminController extends BasicController implements Activateable if(entries == null || entries.isEmpty()) return; String entryPoint = entries.get(0).getOLATResourceable().getResourceableTypeName(); - if("tab".equals(entryPoint)) { + if("tab".equalsIgnoreCase(entryPoint)) { userTabP.activate(ureq, entries, state); - } else if("table".equals(entryPoint)) { + } else if("roles".equalsIgnoreCase(entryPoint) && rolesTab >= 0) { + List<ContextEntry> tabEntries = BusinessControlFactory.getInstance() + .createCEListFromString(OresHelper.createOLATResourceableInstance("tab", Long.valueOf(rolesTab))); + userTabP.activate(ureq, tabEntries, state); + } else if("table".equalsIgnoreCase(entryPoint)) { if(entries.size() > 2) { List<ContextEntry> subEntries = entries.subList(2, entries.size()); userTabP.activate(ureq, subEntries, state); @@ -430,7 +437,7 @@ public class UserAdminController extends BasicController implements Activateable } // the controller manager is read-write permissions - userTabP.addTab(translate(NLS_EDIT_UROLES), uureq -> { + rolesTab = userTabP.addTab(translate(NLS_EDIT_UROLES), uureq -> { rolesCtr = new SystemRolesAndRightsController(getWindowControl(), uureq, identity); listenTo(rolesCtr); return rolesCtr.getInitialComponent(); diff --git a/src/main/java/org/olat/admin/user/UsermanagerUserSearchController.java b/src/main/java/org/olat/admin/user/UsermanagerUserSearchController.java index 5a7e5b83943..623ed0b56fc 100644 --- a/src/main/java/org/olat/admin/user/UsermanagerUserSearchController.java +++ b/src/main/java/org/olat/admin/user/UsermanagerUserSearchController.java @@ -24,8 +24,11 @@ */ package org.olat.admin.user; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import org.olat.basesecurity.BaseSecurity; import org.olat.basesecurity.BaseSecurityModule; import org.olat.basesecurity.SearchIdentityParams; import org.olat.core.gui.UserRequest; @@ -78,6 +81,8 @@ public class UsermanagerUserSearchController extends BasicController implements @Autowired private UserManager userManager; @Autowired + private BaseSecurity securityManager; + @Autowired private BaseSecurityModule securityModule; /** @@ -178,11 +183,19 @@ public class UsermanagerUserSearchController extends BasicController implements if(entries != null && !entries.isEmpty()) { String table = entries.get(0).getOLATResourceable().getResourceableTypeName(); - if("table".equals(table)) { + if("table".equalsIgnoreCase(table)) { entries.remove(0); event(ureq, searchFormCtrl, Event.DONE_EVENT); } } + } else { + if(entries != null && entries.size()> 1) { + String table = entries.get(0).getOLATResourceable().getResourceableTypeName(); + String identity = entries.get(1).getOLATResourceable().getResourceableTypeName(); + if("table".equalsIgnoreCase(table) && "Identity".equalsIgnoreCase(identity)) { + doActivateUser(ureq, entries.subList(1, entries.size())); + } + } } } @@ -191,6 +204,20 @@ public class UsermanagerUserSearchController extends BasicController implements // } + private void doActivateUser(UserRequest ureq, List<ContextEntry> entries) { + Long identityKey = entries.get(0).getOLATResourceable().getResourceableId(); + Identity searchedIdentity = securityManager.loadIdentityByKey(identityKey); + + StateMapped searchState = new StateMapped(); + Map<String,String> states = new HashMap<>(); + states.put("login", searchedIdentity.getName()); + searchState.setDelegate(states); + searchFormCtrl.setStateEntry(searchState); + + doPushSearch(ureq); + tableCtr.activate(ureq, entries, null); + } + private void doPushSearch(UserRequest ureq) { identityQueryParams = searchFormCtrl.getSearchIdentityParams(); if(identityQueryParams.getOrganisations() == null || identityQueryParams.getOrganisations().isEmpty()) { diff --git a/src/main/java/org/olat/admin/user/UsermanagerUserSearchForm.java b/src/main/java/org/olat/admin/user/UsermanagerUserSearchForm.java index 872601ddda0..2cd283e4133 100644 --- a/src/main/java/org/olat/admin/user/UsermanagerUserSearchForm.java +++ b/src/main/java/org/olat/admin/user/UsermanagerUserSearchForm.java @@ -317,13 +317,11 @@ public class UsermanagerUserSearchForm extends FormBasicController { protected StateMapped getStateEntry() { StateMapped state = new StateMapped(); - if(items != null) { - for(Map.Entry<String, FormItem> itemEntry : items.entrySet()) { - String key = itemEntry.getKey(); - FormItem f = itemEntry.getValue(); - if (f instanceof TextElement) { - state.getDelegate().put(key, ((TextElement) f).getValue()); - } + for(Map.Entry<String, FormItem> itemEntry : items.entrySet()) { + String key = itemEntry.getKey(); + FormItem f = itemEntry.getValue(); + if (f instanceof TextElement) { + state.getDelegate().put(key, ((TextElement) f).getValue()); } } return state; diff --git a/src/main/java/org/olat/core/id/context/StateMapped.java b/src/main/java/org/olat/core/id/context/StateMapped.java index 92fcf92f5a6..b530b8fd6c5 100644 --- a/src/main/java/org/olat/core/id/context/StateMapped.java +++ b/src/main/java/org/olat/core/id/context/StateMapped.java @@ -33,7 +33,7 @@ import java.util.Map; public class StateMapped implements StateEntry{ private static final long serialVersionUID = -164313132644246934L; - private Map<String,String> delegate = new HashMap<String,String>(); + private Map<String,String> delegate = new HashMap<>(); public StateMapped() { //make XStream happy diff --git a/src/main/java/org/olat/registration/RegistrationManager.java b/src/main/java/org/olat/registration/RegistrationManager.java index 1ebf0408981..e3960797af6 100644 --- a/src/main/java/org/olat/registration/RegistrationManager.java +++ b/src/main/java/org/olat/registration/RegistrationManager.java @@ -279,9 +279,9 @@ public class RegistrationManager implements UserDataDeletable, UserDataExportabl return; } - // http://localhost:8080/auth/UserAdminSite/0/usearch/0/table/0/Identity/720896/tab/10 + // http://localhost:8080/auth/UserAdminSite/0/usearch/0/table/0/Identity/720896/roles/0 - String userPath = "[UserAdminSite:0][usearch:0][table:0][Identity:" + newIdentity.getKey() + "][tab:10]"; + String userPath = "[UserAdminSite:0][usearch:0][table:0][Identity:" + newIdentity.getKey() + "][roles:0]"; String url = BusinessControlFactory.getInstance().getURLFromBusinessPathString(userPath); MailerResult result = new MailerResult(); diff --git a/src/main/java/org/olat/user/ui/admin/UserSearchTableController.java b/src/main/java/org/olat/user/ui/admin/UserSearchTableController.java index b0ea828bb96..602fdc84403 100644 --- a/src/main/java/org/olat/user/ui/admin/UserSearchTableController.java +++ b/src/main/java/org/olat/user/ui/admin/UserSearchTableController.java @@ -62,12 +62,15 @@ 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.closablewrapper.CloseableModalController; +import org.olat.core.gui.control.generic.dtabs.Activateable2; import org.olat.core.gui.control.generic.wizard.Step; import org.olat.core.gui.control.generic.wizard.StepRunnerCallback; import org.olat.core.gui.control.generic.wizard.StepsMainRunController; import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; import org.olat.core.id.Roles; +import org.olat.core.id.context.ContextEntry; +import org.olat.core.id.context.StateEntry; import org.olat.core.logging.activity.ThreadLocalUserActivityLogger; import org.olat.core.util.Util; import org.olat.core.util.mail.ContactList; @@ -87,7 +90,7 @@ import org.springframework.beans.factory.annotation.Autowired; * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com * */ -public class UserSearchTableController extends FormBasicController { +public class UserSearchTableController extends FormBasicController implements Activateable2 { private static final String USER_PROPS_ID = ExtendedIdentitiesTableDataModel.class.getCanonicalName(); public static final int USER_PROPS_OFFSET = 500; @@ -205,6 +208,22 @@ public class UserSearchTableController extends FormBasicController { // } + @Override + public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) { + if(entries == null || entries.isEmpty()) return; + + String type = entries.get(0).getOLATResourceable().getResourceableTypeName(); + if("Identity".equalsIgnoreCase(type)) { + Long identityKey = entries.get(0).getOLATResourceable().getResourceableId(); + List<IdentityPropertiesRow> rows = tableModel.getObjects(); + for(IdentityPropertiesRow row:rows) { + if(row != null && row.getIdentityKey().equals(identityKey)) { + doSelectIdentity(ureq, row).activate(ureq, entries.subList(1, entries.size()), null); + } + } + } + } + @Override protected void event(UserRequest ureq, Controller source, Event event) { if(userBulkChangesController == source) { @@ -302,7 +321,7 @@ public class UserSearchTableController extends FormBasicController { } } - private void doSelectIdentity(UserRequest ureq, IdentityPropertiesRow userRow) { + private UserAdminController doSelectIdentity(UserRequest ureq, IdentityPropertiesRow userRow) { removeAsListenerAndDispose(userAdminCtr); Identity identity = securityManager.loadIdentityByKey(userRow.getIdentityKey()); @@ -319,7 +338,8 @@ public class UserSearchTableController extends FormBasicController { stackPanel.pushController(fullName, userAdminCtr); stackPanel.addTool(previousLink, Align.rightEdge, false, "o_tool_previous"); stackPanel.addTool(nextLink, Align.rightEdge, false, "o_tool_next"); - updateNextPrevious(userRow, false); + updateNextPrevious(userRow, false); + return userAdminCtr; } private void doSelectVcard(UserRequest ureq, IdentityPropertiesRow userRow) { -- GitLab