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