From 6b24cdfa21aef94b28ab29207899efb7a434c20c Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Mon, 14 Nov 2016 12:10:49 +0100
Subject: [PATCH] OO-2359: catch the right event for the quick search

---
 .../admin/user/UserSearchFlexiController.java | 26 ++++++++++---------
 .../basesecurity/BaseSecurityManager.java     |  5 ++--
 .../ui/main/AbstractMemberListController.java |  5 ++++
 3 files changed, 21 insertions(+), 15 deletions(-)

diff --git a/src/main/java/org/olat/admin/user/UserSearchFlexiController.java b/src/main/java/org/olat/admin/user/UserSearchFlexiController.java
index 2e4e4165849..50f7345d340 100644
--- a/src/main/java/org/olat/admin/user/UserSearchFlexiController.java
+++ b/src/main/java/org/olat/admin/user/UserSearchFlexiController.java
@@ -101,14 +101,15 @@ public class UserSearchFlexiController extends FlexiAutoCompleterController {
 	
 	private FormLink backLink, searchButton;
 	private TextElement loginEl;
-	private List<UserPropertyHandler> userPropertyHandlers;
 	private Map <String,FormItem>propFormItems;
 	private FlexiTableElement tableEl;
 	private UserSearchFlexiTableModel userTableModel;
 	private FormLayoutContainer autoCompleterContainer;
 	private FormLayoutContainer searchFormContainer;
+	
+	private final boolean isAdministrativeUser;
+	private final List<UserPropertyHandler> userSearchFormPropertyHandlers;
 
-	private boolean isAdministrativeUser;
 	@Autowired
 	private UserManager userManager;
 	@Autowired
@@ -128,6 +129,10 @@ public class UserSearchFlexiController extends FlexiAutoCompleterController {
 		setTranslator(Util.createPackageTranslator(UserPropertyHandler.class, getLocale(), getTranslator()));
 		setTranslator(Util.createPackageTranslator(UserSearchFlexiController.class, getLocale(), getTranslator()));
 
+		Roles roles = ureq.getUserSession().getRoles();
+		isAdministrativeUser = securityModule.isUserAllowedAdminProps(roles);
+		userSearchFormPropertyHandlers = userManager.getUserPropertyHandlersFor(UserSearchForm.class.getCanonicalName(), isAdministrativeUser);
+
 		ListProvider provider = new UserSearchListProvider();
 		setListProvider(provider);
 		setAllowNewValues(false);
@@ -139,11 +144,9 @@ public class UserSearchFlexiController extends FlexiAutoCompleterController {
 	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
 		if(formLayout instanceof FormLayoutContainer) {
 			FormLayoutContainer layoutCont = (FormLayoutContainer)formLayout;
-			
-			Roles roles = ureq.getUserSession().getRoles();
-			isAdministrativeUser = securityModule.isUserAllowedAdminProps(roles);
-			
+
 			// insert a autocompleter search
+			Roles roles = ureq.getUserSession().getRoles();
 			boolean autoCompleteAllowed = securityModule.isUserAllowedAutoComplete(roles);
 			boolean ajax = Windows.getWindows(ureq).getWindowManager().isAjaxEnabled();
 			if (ajax && autoCompleteAllowed) {
@@ -169,10 +172,9 @@ public class UserSearchFlexiController extends FlexiAutoCompleterController {
 			loginEl = uifactory.addTextElement("login", "search.form.login", 128, "", searchFormContainer);
 			loginEl.setVisible(isAdministrativeUser);
 
-			userPropertyHandlers = userManager.getUserPropertyHandlersFor(UserSearchForm.class.getCanonicalName(), isAdministrativeUser);
 			
-			propFormItems = new HashMap<String,FormItem>();
-			for (UserPropertyHandler userPropertyHandler : userPropertyHandlers) {
+			propFormItems = new HashMap<>();
+			for (UserPropertyHandler userPropertyHandler : userSearchFormPropertyHandlers) {
 				if (userPropertyHandler == null) continue;
 				
 				FormItem fi = userPropertyHandler.addFormItem(getLocale(), null, UserSearchForm.class.getCanonicalName(), false, searchFormContainer);
@@ -293,7 +295,7 @@ public class UserSearchFlexiController extends FlexiAutoCompleterController {
 		// the same validation logic can not be applied
 		// i.e. email must be searchable and not about getting an error like
 		// "this e-mail exists already"
-		for (UserPropertyHandler userPropertyHandler : userPropertyHandlers) {
+		for (UserPropertyHandler userPropertyHandler : userSearchFormPropertyHandlers) {
 			FormItem ui = propFormItems.get(userPropertyHandler.getName());
 			String uiValue = userPropertyHandler.getStringValue(ui);
 			// add value for later non-empty search check
@@ -405,8 +407,8 @@ public class UserSearchFlexiController extends FlexiAutoCompleterController {
 	public void doSearch() {
 		String login = loginEl.getValue();
 		// build user fields search map
-		Map<String, String> userPropertiesSearch = new HashMap<String, String>();				
-		for (UserPropertyHandler userPropertyHandler : userPropertyHandlers) {
+		Map<String, String> userPropertiesSearch = new HashMap<>();				
+		for (UserPropertyHandler userPropertyHandler : userSearchFormPropertyHandlers) {
 			if (userPropertyHandler == null) continue;
 			FormItem ui = propFormItems.get(userPropertyHandler.getName());
 			String uiValue = userPropertyHandler.getStringValue(ui);
diff --git a/src/main/java/org/olat/basesecurity/BaseSecurityManager.java b/src/main/java/org/olat/basesecurity/BaseSecurityManager.java
index 885ae6fe54c..99dc957f55c 100644
--- a/src/main/java/org/olat/basesecurity/BaseSecurityManager.java
+++ b/src/main/java/org/olat/basesecurity/BaseSecurityManager.java
@@ -1584,7 +1584,7 @@ public class BaseSecurityManager implements BaseSecurity {
 				sb.append("select count(distinct ident.key) from org.olat.core.id.Identity as ident ")
 				  .append(" inner join ident.user as user ");
 			} else {
-				sb.append("select distinct ident from org.olat.core.id.Identity as ident ")
+				sb.append("select ident from ").append(IdentityImpl.class.getName()).append(" as ident ")
 				  .append(" inner join fetch ident.user as user ");
 			}
 		}
@@ -1801,8 +1801,7 @@ public class BaseSecurityManager implements BaseSecurity {
 			
 		// create query object now from string
 		String query = sb.toString();
-		DB db = DBFactory.getInstance();
-		DBQuery dbq = db.createQuery(query);
+		DBQuery dbq = dbInstance.createQuery(query);
 		
 		// add user attributes
 		if (login != null) {
diff --git a/src/main/java/org/olat/group/ui/main/AbstractMemberListController.java b/src/main/java/org/olat/group/ui/main/AbstractMemberListController.java
index 1fa888bba1b..35e5e3f3c78 100644
--- a/src/main/java/org/olat/group/ui/main/AbstractMemberListController.java
+++ b/src/main/java/org/olat/group/ui/main/AbstractMemberListController.java
@@ -223,6 +223,7 @@ public abstract class AbstractMemberListController extends FormBasicController i
 		membersTable.setEmtpyTableMessageKey("nomembers");
 		membersTable.setAndLoadPersistedPreferences(ureq, this.getClass().getSimpleName());
 		membersTable.setSearchEnabled(true);
+		
 		membersTable.setExportEnabled(true);
 		membersTable.setSelectAllEnable(true);
 		membersTable.setElementCssClass("o_sel_member_list");
@@ -347,6 +348,10 @@ public abstract class AbstractMemberListController extends FormBasicController i
 					FlexiTableSearchEvent se = (FlexiTableSearchEvent)event;
 					String search = se.getSearch();
 					doSearch(search);
+				} else if(FlexiTableSearchEvent.QUICK_SEARCH.equals(event.getCommand())) {
+					FlexiTableSearchEvent se = (FlexiTableSearchEvent)event;
+					String search = se.getSearch();
+					doSearch(search);
 				} else if(FlexiTableSearchEvent.RESET.equals(event.getCommand())) {
 					doResetSearch();
 				}
-- 
GitLab