From 6c4d8582af015e5920e8f4680c2b1ce15243abba Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Tue, 13 Aug 2013 14:53:15 +0200
Subject: [PATCH] OO-686,OPENOLAT-32: fix a bug with Firefox and the enter in
 autocompletion for users

---
 .../admin/user/UserSearchFlexiController.java |  4 +-
 .../olat/admin/user/_content/usersearch.html  | 37 +++++++-------
 .../admin/user/_content/usersearchext.html    | 20 ++++++++
 .../components/table/DateCellRenderer.java    | 50 +++++++++++++++++++
 .../FlexiAutoCompleterController.java         |  3 +-
 .../olat/repository/RepositoryManager.java    |  2 -
 .../olat/repository/RepositoryTableModel.java | 49 ++++++++++++------
 7 files changed, 124 insertions(+), 41 deletions(-)
 create mode 100644 src/main/java/org/olat/admin/user/_content/usersearchext.html
 create mode 100644 src/main/java/org/olat/core/gui/components/table/DateCellRenderer.java

diff --git a/src/main/java/org/olat/admin/user/UserSearchFlexiController.java b/src/main/java/org/olat/admin/user/UserSearchFlexiController.java
index c0f2b60d78c..deef6959e5a 100644
--- a/src/main/java/org/olat/admin/user/UserSearchFlexiController.java
+++ b/src/main/java/org/olat/admin/user/UserSearchFlexiController.java
@@ -121,7 +121,7 @@ public class UserSearchFlexiController extends FlexiAutoCompleterController {
 	 * @param statusEnabled
 	 */
 	public UserSearchFlexiController(UserRequest ureq, WindowControl wControl, Form rootForm) {
-		super(ureq, wControl, LAYOUT_CUSTOM, "usersearch", rootForm);
+		super(ureq, wControl, LAYOUT_CUSTOM, "usersearchext", rootForm);
 		
 		securityModule = CoreSpringFactory.getImpl(BaseSecurityModule.class);
 		userManager = UserManager.getInstance();
@@ -374,7 +374,7 @@ public class UserSearchFlexiController extends FlexiAutoCompleterController {
 		String searchValue = getSearchValue(ureq);
 		if(StringHelper.containsNonWhitespace(searchValue)) {
 			if(StringHelper.isLong(searchValue)) {
-				doSelect(ureq);
+				doFireSelection(ureq, Collections.singletonList(searchValue));
 			} else if(searchValue.length() >= 3){
 				Map<String, String> userProperties = new HashMap<String, String>();
 				userProperties.put(UserConstants.FIRSTNAME, searchValue);
diff --git a/src/main/java/org/olat/admin/user/_content/usersearch.html b/src/main/java/org/olat/admin/user/_content/usersearch.html
index e8597a69763..24dfc68485b 100644
--- a/src/main/java/org/olat/admin/user/_content/usersearch.html
+++ b/src/main/java/org/olat/admin/user/_content/usersearch.html
@@ -1,20 +1,19 @@
-#if ($showButton == "true")
-	#if($r.available("btn.back"))
-		$r.render("btn.back")
-	#end
-	$r.render("userTable")
-#else
-	#if ($r.available("autocompletionsearch"))
-	<fieldset style="z-index:10" class="o_sel_usersearch_autocompletion"> ## fix IE7 layering issue
-		<legend>$r.translate("header.autocompletion")</legend>
-		<p><i>$r.translate("autocompletion.info")</i></p>
-		<p>$r.render("autocompletionsearch")</p>
-	</fieldset>
-	<br />
-	#end
-	<fieldset class="o_sel_usersearch_searchform">
-		<legend>$r.translate("header.normal")</legend>
-		$r.render("usersearchPanel")
-	</fieldset>
+#if ($showButton == "true" && $r.available("btn.back"))
+$r.render("btn.back")
+<p>
 #end
-
+#if ($r.available("autocompletionsearch"))
+<fieldset style="z-index:10" class="o_sel_usersearch_autocompletion"> ## fix IE7 layering issue
+	<legend>$r.translate("header.autocompletion")</legend>
+	<p>
+	<i>$r.translate("autocompletion.info")</i>
+	<p>
+	$r.render("autocompletionsearch")
+</fieldset>
+<p>
+<br>
+#end
+<fieldset class="o_sel_usersearch_searchform">
+	<legend>$r.translate("header.normal")</legend>
+	$r.render("usersearchPanel")
+</fieldset>
diff --git a/src/main/java/org/olat/admin/user/_content/usersearchext.html b/src/main/java/org/olat/admin/user/_content/usersearchext.html
new file mode 100644
index 00000000000..e8597a69763
--- /dev/null
+++ b/src/main/java/org/olat/admin/user/_content/usersearchext.html
@@ -0,0 +1,20 @@
+#if ($showButton == "true")
+	#if($r.available("btn.back"))
+		$r.render("btn.back")
+	#end
+	$r.render("userTable")
+#else
+	#if ($r.available("autocompletionsearch"))
+	<fieldset style="z-index:10" class="o_sel_usersearch_autocompletion"> ## fix IE7 layering issue
+		<legend>$r.translate("header.autocompletion")</legend>
+		<p><i>$r.translate("autocompletion.info")</i></p>
+		<p>$r.render("autocompletionsearch")</p>
+	</fieldset>
+	<br />
+	#end
+	<fieldset class="o_sel_usersearch_searchform">
+		<legend>$r.translate("header.normal")</legend>
+		$r.render("usersearchPanel")
+	</fieldset>
+#end
+
diff --git a/src/main/java/org/olat/core/gui/components/table/DateCellRenderer.java b/src/main/java/org/olat/core/gui/components/table/DateCellRenderer.java
new file mode 100644
index 00000000000..9e203f87dce
--- /dev/null
+++ b/src/main/java/org/olat/core/gui/components/table/DateCellRenderer.java
@@ -0,0 +1,50 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.core.gui.components.table;
+
+import java.util.Date;
+import java.util.Locale;
+
+import org.olat.core.gui.render.Renderer;
+import org.olat.core.gui.render.StringOutput;
+import org.olat.core.util.Formatter;
+
+
+/**
+ * 
+ * Initial date: 13.08.2013<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class DateCellRenderer implements CustomCellRenderer {
+	
+	private final Formatter formatter;
+	
+	public DateCellRenderer(Locale locale) {
+		formatter = Formatter.getInstance(locale);
+	}
+
+	@Override
+	public void render(StringOutput sb, Renderer renderer, Object val, Locale locale, int alignment, String action) {
+		if (val instanceof Date) {
+			sb.append(formatter.formatDate((Date)val));
+		}
+	}
+}
diff --git a/src/main/java/org/olat/core/gui/control/generic/ajax/autocompletion/FlexiAutoCompleterController.java b/src/main/java/org/olat/core/gui/control/generic/ajax/autocompletion/FlexiAutoCompleterController.java
index f2240e0c875..2db46d69c1c 100644
--- a/src/main/java/org/olat/core/gui/control/generic/ajax/autocompletion/FlexiAutoCompleterController.java
+++ b/src/main/java/org/olat/core/gui/control/generic/ajax/autocompletion/FlexiAutoCompleterController.java
@@ -207,8 +207,7 @@ public class FlexiAutoCompleterController extends FormBasicController {
 		if (key == null) {
 			// Fallback to submitted input field: the input field does not contain
 			// the key but the search value itself
-			VelocityRenderDecorator r = (VelocityRenderDecorator) ((VelocityContainer)flc.getComponent()).getContext().get("r");
-			String searchValue = ureq.getParameter(r.getId(JSNAME_INPUTFIELD).toString());
+			String searchValue = getSearchValue(ureq);
 			if (searchValue == null) {
 				// log error because something went wrong in the code and send empty list as result
 				logError("Auto complete JS code must always send 'key' or the autocomplete parameter!", null);						
diff --git a/src/main/java/org/olat/repository/RepositoryManager.java b/src/main/java/org/olat/repository/RepositoryManager.java
index ef76593d50c..c88f6159827 100644
--- a/src/main/java/org/olat/repository/RepositoryManager.java
+++ b/src/main/java/org/olat/repository/RepositoryManager.java
@@ -1791,8 +1791,6 @@ public class RepositoryManager extends BasicManager {
 		if(!count && orderBy) {
 			query.append(" order by v.displayname, v.key ASC");
 		}
-		
-		System.out.println(query.toString());
 
 		DBQuery dbQuery = dbInstance.createQuery(query.toString());
 		if(institut) {
diff --git a/src/main/java/org/olat/repository/RepositoryTableModel.java b/src/main/java/org/olat/repository/RepositoryTableModel.java
index 3d0b43e7e6d..0ebaaef1ab6 100644
--- a/src/main/java/org/olat/repository/RepositoryTableModel.java
+++ b/src/main/java/org/olat/repository/RepositoryTableModel.java
@@ -38,6 +38,7 @@ import org.olat.core.CoreSpringFactory;
 import org.olat.core.gui.components.table.ColumnDescriptor;
 import org.olat.core.gui.components.table.CustomCellRenderer;
 import org.olat.core.gui.components.table.CustomRenderColumnDescriptor;
+import org.olat.core.gui.components.table.DateCellRenderer;
 import org.olat.core.gui.components.table.DefaultColumnDescriptor;
 import org.olat.core.gui.components.table.DefaultTableDataModel;
 import org.olat.core.gui.components.table.StaticColumnDescriptor;
@@ -47,6 +48,7 @@ import org.olat.core.gui.translator.Translator;
 import org.olat.core.util.StringHelper;
 import org.olat.login.LoginModule;
 import org.olat.repository.manager.RepositoryEntryLifecycleDAO;
+import org.olat.repository.model.RepositoryEntryLifecycle;
 import org.olat.repository.ui.RepositoryEntryAccessColumnDescriptor;
 import org.olat.resource.accesscontrol.ACService;
 import org.olat.resource.accesscontrol.AccessControlModule;
@@ -110,25 +112,25 @@ public class RepositoryTableModel extends DefaultTableDataModel<RepositoryEntry>
 	 * @return the position of the display name column
 	 */
 	public ColumnDescriptor addColumnDescriptors(TableController tableCtr, String selectButtonLabel, boolean enableDirectLaunch) {
-		
+		Locale loc = translator.getLocale();
 		
 		//fxdiff VCRP-1,2: access control of resources
 		CustomCellRenderer acRenderer = new RepositoryEntryACColumnDescriptor();
 		tableCtr.addColumnDescriptor(new CustomRenderColumnDescriptor("table.header.ac", RepoCols.ac.ordinal(), null, 
-				translator.getLocale(), ColumnDescriptor.ALIGNMENT_LEFT, acRenderer));
+				loc, ColumnDescriptor.ALIGNMENT_LEFT, acRenderer));
 		tableCtr.addColumnDescriptor(new RepositoryEntryTypeColumnDescriptor("table.header.typeimg", RepoCols.repoEntry.ordinal(), null, 
-				translator.getLocale(), ColumnDescriptor.ALIGNMENT_LEFT));
+				loc, ColumnDescriptor.ALIGNMENT_LEFT));
 		
 		if(repositoryModule.isManagedRepositoryEntries()) {
-			tableCtr.addColumnDescriptor(false, new DefaultColumnDescriptor("table.header.externalid", RepoCols.externalId.ordinal(), null, translator.getLocale()));
-			tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("table.header.externalref", RepoCols.externalRef.ordinal(), null, translator.getLocale()));
+			tableCtr.addColumnDescriptor(false, new DefaultColumnDescriptor("table.header.externalid", RepoCols.externalId.ordinal(), null, loc));
+			tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("table.header.externalref", RepoCols.externalRef.ordinal(), null, loc));
 
 		}
 		boolean lfVisible = lifecycleDao.countPublicLifecycle() > 0;
-		tableCtr.addColumnDescriptor(lfVisible, new DefaultColumnDescriptor("table.header.lifecycle.label", RepoCols.lifecycleLabel.ordinal(), null, translator.getLocale()));
-		tableCtr.addColumnDescriptor(false, new DefaultColumnDescriptor("table.header.lifecycle.softkey", RepoCols.lifecycleSoftKey.ordinal(), null, translator.getLocale()));
+		tableCtr.addColumnDescriptor(lfVisible, new DefaultColumnDescriptor("table.header.lifecycle.label", RepoCols.lifecycleLabel.ordinal(), null, loc));
+		tableCtr.addColumnDescriptor(false, new DefaultColumnDescriptor("table.header.lifecycle.softkey", RepoCols.lifecycleSoftKey.ordinal(), null, loc));
 
-		ColumnDescriptor nameColDesc = new DefaultColumnDescriptor("table.header.displayname", RepoCols.displayname.ordinal(), enableDirectLaunch ? TABLE_ACTION_SELECT_ENTRY : null, translator.getLocale()) {
+		ColumnDescriptor nameColDesc = new DefaultColumnDescriptor("table.header.displayname", RepoCols.displayname.ordinal(), enableDirectLaunch ? TABLE_ACTION_SELECT_ENTRY : null, loc) {
 			@Override
 			public int compareTo(int rowa, int rowb) {
 				Object o1 =table.getTableDataModel().getValueAt(rowa, 1);
@@ -155,16 +157,19 @@ public class RepositoryTableModel extends DefaultTableDataModel<RepositoryEntry>
 		};
 		tableCtr.addColumnDescriptor(nameColDesc);
 		
-		tableCtr.addColumnDescriptor(false, new DefaultColumnDescriptor("table.header.lifecycle.start", RepoCols.lifecycleStart.ordinal(), null, translator.getLocale()));
-		tableCtr.addColumnDescriptor(false, new DefaultColumnDescriptor("table.header.lifecycle.end", RepoCols.lifecycleEnd.ordinal(), null, translator.getLocale()));
-		tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("table.header.author", RepoCols.author.ordinal(), null, translator.getLocale()));
+		CustomCellRenderer dateRenderer = new DateCellRenderer(loc);
+		tableCtr.addColumnDescriptor(false, new CustomRenderColumnDescriptor("table.header.lifecycle.start",
+				RepoCols.lifecycleStart.ordinal(), null, loc, ColumnDescriptor.ALIGNMENT_LEFT, dateRenderer));
+		tableCtr.addColumnDescriptor(false, new CustomRenderColumnDescriptor("table.header.lifecycle.end",
+				RepoCols.lifecycleEnd.ordinal(), null, loc, ColumnDescriptor.ALIGNMENT_LEFT, dateRenderer));
+		tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("table.header.author", RepoCols.author.ordinal(), null, loc));
 
 		CustomCellRenderer accessRenderer = new RepositoryEntryAccessColumnDescriptor(translator);
 		tableCtr.addColumnDescriptor(new CustomRenderColumnDescriptor("table.header.access", RepoCols.repoEntry.ordinal(), null,
-				translator.getLocale(), ColumnDescriptor.ALIGNMENT_LEFT, accessRenderer));
+				loc, ColumnDescriptor.ALIGNMENT_LEFT, accessRenderer));
 
-		tableCtr.addColumnDescriptor(false, new DefaultColumnDescriptor("table.header.date", RepoCols.creationDate.ordinal(), null, translator.getLocale()));
-		tableCtr.addColumnDescriptor(false, new DefaultColumnDescriptor("table.header.lastusage", RepoCols.lastUsage.ordinal(), null, translator.getLocale()));
+		tableCtr.addColumnDescriptor(false, new DefaultColumnDescriptor("table.header.date", RepoCols.creationDate.ordinal(), null, loc));
+		tableCtr.addColumnDescriptor(false, new DefaultColumnDescriptor("table.header.lastusage", RepoCols.lastUsage.ordinal(), null, loc));
 		if (selectButtonLabel != null) {
 			StaticColumnDescriptor desc = new StaticColumnDescriptor(TABLE_ACTION_SELECT_LINK, selectButtonLabel, selectButtonLabel);
 			desc.setTranslateHeaderKey(false);			
@@ -230,8 +235,20 @@ public class RepositoryTableModel extends DefaultTableDataModel<RepositoryEntry>
 			case lastUsage: return re.getLastUsage();
 			case externalId: return re.getExternalId();
 			case externalRef: return re.getExternalRef();
-			case lifecycleLabel: return re.getLifecycle() == null ? null : re.getLifecycle().getLabel();
-			case lifecycleSoftKey: return re.getLifecycle() == null ? null : re.getLifecycle().getSoftKey();
+			case lifecycleLabel: {
+				RepositoryEntryLifecycle lf = re.getLifecycle();
+				if(lf == null || lf.isPrivateCycle()) {
+					return "";
+				}
+				return lf.getLabel();
+			}
+			case lifecycleSoftKey: {
+				RepositoryEntryLifecycle lf = re.getLifecycle();
+				if(lf == null || lf.isPrivateCycle()) {
+					return "";
+				}
+				return lf.getSoftKey();
+			}
 			case lifecycleStart: return re.getLifecycle() == null ? null : re.getLifecycle().getValidFrom();
 			case lifecycleEnd: return re.getLifecycle() == null ? null : re.getLifecycle().getValidTo();
 			default: return "ERROR";
-- 
GitLab