From 6f312440d6b9baf652836e4388c3a2ca90695083 Mon Sep 17 00:00:00 2001 From: Raymond Auge Date: Mon, 30 Jan 2012 14:35:57 -0500 Subject: [PATCH 1/3] LPS-25213 static Range facet checks the wrong JSON data --- .../com/liferay/portal/kernel/search/facet/RangeFacet.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/portal-service/src/com/liferay/portal/kernel/search/facet/RangeFacet.java b/portal-service/src/com/liferay/portal/kernel/search/facet/RangeFacet.java index da18cfa53a6430..98f687bb87f716 100644 --- a/portal-service/src/com/liferay/portal/kernel/search/facet/RangeFacet.java +++ b/portal-service/src/com/liferay/portal/kernel/search/facet/RangeFacet.java @@ -51,7 +51,9 @@ protected BooleanClause doGetFacetClause() { if (isStatic() && dataJSONObject.has("ranges")) { JSONArray rangesJSONArray = dataJSONObject.getJSONArray("ranges"); - String rangeString = rangesJSONArray.getString(0); + JSONObject rangeObject = rangesJSONArray.getJSONObject(0); + + String rangeString = rangeObject.getString("range"); String[] range = RangeParserUtil.parserRange(rangeString); From 1910935322cf41a7d1ea2a5f99fb0b34acd3c4b2 Mon Sep 17 00:00:00 2001 From: Raymond Auge Date: Mon, 30 Jan 2012 14:41:17 -0500 Subject: [PATCH 2/3] LPS-24861 LPS-22583 Unable to filter search results by Custom Range Does not display counts for the Date select criteria --- .../kernel/search/facet/ModifiedFacet.java | 116 ++++++++++++++ .../html/portlet/search/facets/modified.jsp | 151 +++++++----------- .../docroot/html/portlet/search/init.jsp | 2 +- 3 files changed, 173 insertions(+), 96 deletions(-) create mode 100644 portal-service/src/com/liferay/portal/kernel/search/facet/ModifiedFacet.java diff --git a/portal-service/src/com/liferay/portal/kernel/search/facet/ModifiedFacet.java b/portal-service/src/com/liferay/portal/kernel/search/facet/ModifiedFacet.java new file mode 100644 index 00000000000000..3c0e3d57a5a776 --- /dev/null +++ b/portal-service/src/com/liferay/portal/kernel/search/facet/ModifiedFacet.java @@ -0,0 +1,116 @@ +/** + * Copyright (c) 2000-2012 Liferay, Inc. All rights reserved. + * + * This library is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation; either version 2.1 of the License, or (at your option) + * any later version. + * + * This library is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + * details. + */ + +package com.liferay.portal.kernel.search.facet; + +import com.liferay.portal.kernel.json.JSONArray; +import com.liferay.portal.kernel.json.JSONObject; +import com.liferay.portal.kernel.search.BooleanClause; +import com.liferay.portal.kernel.search.Field; +import com.liferay.portal.kernel.search.SearchContext; +import com.liferay.portal.kernel.search.facet.config.FacetConfiguration; +import com.liferay.portal.kernel.util.DateFormatFactoryUtil; +import com.liferay.portal.kernel.util.StringUtil; + +import java.text.DateFormat; + +import java.util.Calendar; + +/** + * @author Raymond Augé + */ +public class ModifiedFacet extends RangeFacet { + + public ModifiedFacet(SearchContext searchContext) { + super(searchContext); + + setFieldName(Field.MODIFIED_DATE); + } + + @Override + protected BooleanClause doGetFacetClause() { + SearchContext searchContext = getSearchContext(); + + FacetConfiguration facetConfiguration = getFacetConfiguration(); + + normalizeDates(searchContext, facetConfiguration); + + return super.doGetFacetClause(); + } + + protected void normalizeDates( + SearchContext searchContext, FacetConfiguration facetConfiguration) { + + Calendar now = Calendar.getInstance(); + + now.set(Calendar.SECOND, 0); + now.set(Calendar.MINUTE, 0); + + Calendar pastHour = (Calendar)now.clone(); + pastHour.set(Calendar.HOUR_OF_DAY, now.get(Calendar.HOUR_OF_DAY) - 1); + + Calendar past24Hours = (Calendar)now.clone(); + past24Hours.set( + Calendar.DAY_OF_YEAR, now.get(Calendar.DAY_OF_YEAR) - 1); + + Calendar pastWeek = (Calendar)now.clone(); + pastWeek.set(Calendar.DAY_OF_YEAR, now.get(Calendar.DAY_OF_YEAR) - 7); + + Calendar pastMonth = (Calendar)now.clone(); + pastMonth.set(Calendar.MONTH, now.get(Calendar.MONTH) - 1); + + Calendar pastYear = (Calendar)now.clone(); + pastYear.set(Calendar.YEAR, now.get(Calendar.YEAR) - 1); + + now.set(Calendar.HOUR_OF_DAY, now.get(Calendar.HOUR_OF_DAY) + 1); + + DateFormat dateFormat = DateFormatFactoryUtil.getSimpleDateFormat( + "yyyyMMddHHmmss"); + + JSONObject dataJSONObject = facetConfiguration.getData(); + + if (dataJSONObject.has("ranges")) { + JSONArray rangesJSONArray = dataJSONObject.getJSONArray("ranges"); + + for (int i = 0; i < rangesJSONArray.length(); i++) { + JSONObject rangeObject = rangesJSONArray.getJSONObject(i); + + String rangeString = rangeObject.getString("range"); + + rangeString = StringUtil.replace( + rangeString, + new String[] { + "past-hour", + "past-24-hours", + "past-week", + "past-month", + "past-year", + "*" + }, + new String[] { + dateFormat.format(pastHour.getTime()), + dateFormat.format(past24Hours.getTime()), + dateFormat.format(pastWeek.getTime()), + dateFormat.format(pastMonth.getTime()), + dateFormat.format(pastYear.getTime()), + dateFormat.format(now.getTime()) + } + ); + + rangeObject.put("range", rangeString); + } + } + } + +} \ No newline at end of file diff --git a/portal-web/docroot/html/portlet/search/facets/modified.jsp b/portal-web/docroot/html/portlet/search/facets/modified.jsp index c7afc4cbd048fc..d45bd886743a05 100644 --- a/portal-web/docroot/html/portlet/search/facets/modified.jsp +++ b/portal-web/docroot/html/portlet/search/facets/modified.jsp @@ -23,13 +23,19 @@ String fieldParamTo = ParamUtil.getString(request, facet.getFieldName() + "to"); Calendar cal = Calendar.getInstance(timeZone); -Date now = new Date(); - -cal.setTime(now); - DateFormat dateFormat = DateFormatFactoryUtil.getSimpleDateFormat("yyyyMMddHHmmss", timeZone); String nowString = dateFormat.format(cal.getTime()); + +JSONArray rangeArray = dataJSONObject.getJSONArray("ranges"); + +String modifiedLabel = StringPool.BLANK; + +int index = 0; + +if (fieldParamSelection.equals("0")) { + modifiedLabel = LanguageUtil.get(pageContext, "any-time"); +} %>
@@ -43,81 +49,60 @@ String nowString = dateFormat.format(cal.getTime()); -
  • "> - - <% - cal.set(Calendar.HOUR_OF_DAY, cal.get(Calendar.HOUR_OF_DAY) - 1); - - String taglibSetRange = renderResponse.getNamespace() + facet.getFieldName() + "setRange(1, '[" + dateFormat.format(cal.getTime()) + " TO " + nowString + "]');"; - %> - - - - -
  • -
  • "> - - <% - cal.setTime(now); - - cal.set(Calendar.DAY_OF_YEAR, cal.get(Calendar.DAY_OF_YEAR) - 1); - taglibSetRange = renderResponse.getNamespace() + facet.getFieldName() + "setRange(2, '[" + dateFormat.format(cal.getTime()) + " TO " + nowString + "]');"; - %> + <% + for (int i = 0; i < rangeArray.length(); i++) { + JSONObject rangeObject = rangeArray.getJSONObject(i); - - - -
  • -
  • "> - - <% - cal.setTime(now); + String label = rangeObject.getString("label"); + String range = rangeObject.getString("range"); + TermCollector termCollector = facetCollector.getTermCollector(range); - cal.set(Calendar.DAY_OF_YEAR, cal.get(Calendar.DAY_OF_YEAR) - 7); + index = (i + 1); - taglibSetRange = renderResponse.getNamespace() + facet.getFieldName() + "setRange(3, '[" + dateFormat.format(cal.getTime()) + " TO " + nowString + "]');"; - %> + if (fieldParamSelection.equals(String.valueOf(index))) { + modifiedLabel = LanguageUtil.get(pageContext, label); + } - - - -
  • -
  • "> + String taglibSetRange = renderResponse.getNamespace() + facet.getFieldName() + "setRange(" + index + ", '" + range + "');"; + %> - <% - cal.setTime(now); +
  • "> + + + - cal.set(Calendar.MONTH, cal.get(Calendar.MONTH) - 1); + + (<%= termCollector.getFrequency() %>) + +
  • - taglibSetRange = renderResponse.getNamespace() + facet.getFieldName() + "setRange(4, '[" + dateFormat.format(cal.getTime()) + " TO " + nowString + "]');"; - %> + <% + } + %> - - - - -
  • "> +
  • "> <% - cal.setTime(now); + TermCollector termCollector = null; - cal.set(Calendar.YEAR, cal.get(Calendar.YEAR) - 1); + if (fieldParamSelection.equals(String.valueOf(index + 1))) { + modifiedLabel = LanguageUtil.get(pageContext, "custom-range"); - taglibSetRange = renderResponse.getNamespace() + facet.getFieldName() + "setRange(5, '[" + dateFormat.format(cal.getTime()) + " TO " + nowString + "]');"; + termCollector = facetCollector.getTermCollector(fieldParam); + } %> - - - -
  • -
  • "> - + + + + (<%= termCollector.getFrequency() %>) +
  • -
    modified-custom-range" id="<%= randomNamespace %>custom-range"> +
    modified-custom-range" id="<%= randomNamespace %>custom-range">
    @@ -126,7 +111,7 @@ String nowString = dateFormat.format(cal.getTime());
    - +
    @@ -141,33 +126,9 @@ String nowString = dateFormat.format(cal.getTime()); <% - String modifiedLabel = StringPool.BLANK; - - if (fieldParamSelection.equals("0")) { - modifiedLabel = LanguageUtil.get(pageContext, "any-time"); - } - else if (fieldParamSelection.equals("1")) { - modifiedLabel = LanguageUtil.get(pageContext, "past-hour"); - } - else if (fieldParamSelection.equals("2")) { - modifiedLabel = LanguageUtil.get(pageContext, "past-24-hours"); - } - else if (fieldParamSelection.equals("3")) { - modifiedLabel = LanguageUtil.get(pageContext, "past-week"); - } - else if (fieldParamSelection.equals("4")) { - modifiedLabel = LanguageUtil.get(pageContext, "past-month"); - } - else if (fieldParamSelection.equals("5")) { - modifiedLabel = LanguageUtil.get(pageContext, "past-year"); - } - else if (fieldParamSelection.equals("6")) { - modifiedLabel = LanguageUtil.get(pageContext, "custom-range"); - } - String tokenLabel = modifiedLabel; - if (fieldParamSelection.equals("6")) { + if (fieldParamSelection.equals(String.valueOf(index + 1))) { String fromDateLabel = fieldParamFrom; String toDateLabel = fieldParamTo; @@ -198,15 +159,6 @@ String nowString = dateFormat.format(cal.getTime()); ['aui-base'] ); - Liferay.provide( - window, - '<%= facet.getFieldName() %>customRange', - function() { - A.one('#<%= randomNamespace + "custom-range" %>').toggle(); - }, - ['aui-base'] - ); - Liferay.provide( window, '<%= facet.getFieldName() %>searchCustomRange', @@ -287,4 +239,13 @@ String nowString = dateFormat.format(cal.getTime()); trigger: '#<%= facet.getFieldName() %>to' } ).render('#<%= randomNamespace %>custom-range-to'); + + A.one('.<%= randomNamespace %>custom-range-toggle').on( + 'click', + function(event) { + event.halt(); + + A.one('#<%= randomNamespace + "custom-range" %>').toggle(); + } + ); \ No newline at end of file diff --git a/portal-web/docroot/html/portlet/search/init.jsp b/portal-web/docroot/html/portlet/search/init.jsp index fb21c0b61305a7..955c227ecf2c05 100644 --- a/portal-web/docroot/html/portlet/search/init.jsp +++ b/portal-web/docroot/html/portlet/search/init.jsp @@ -107,7 +107,7 @@ if (!advancedConfiguration && Validator.isNull(searchConfiguration)) { } if (displayModifiedRangeFacet) { - sb.append("{className: 'com.liferay.portal.kernel.search.facet.RangeFacet', data: {frequencyThreshold: 1, ranges: [{label:'modified', range:'[19700101000000 TO *]'}]}, displayStyle: 'modified', fieldName: 'modified', label: 'modified', order: 'OrderHitsDesc', static: false, weight: 1.1}"); + sb.append("{className: 'com.liferay.portal.kernel.search.facet.ModifiedFacet', data: {frequencyThreshold: 0, ranges: [{label:'past-hour', range:'[past-hour TO *]'},{label:'past-24-hours', range:'[past-24-hours TO *]'},{label:'past-week', range:'[past-week TO *]'},{label:'past-month', range:'[past-month TO *]'},{label:'past-year', range:'[past-year TO *]'}]}, displayStyle: 'modified', fieldName: 'modified', label: 'modified', order: 'OrderHitsDesc', static: false, weight: 1.1}"); } sb.append("]}"); From ad2d8a2e97c1b2126b7c64e71bac74ea2c2831aa Mon Sep 17 00:00:00 2001 From: Raymond Auge Date: Mon, 30 Jan 2012 14:42:34 -0500 Subject: [PATCH 3/3] LPS-24746 Visual formatting --- portal-web/docroot/html/portlet/search/configuration.jsp | 2 +- portal-web/docroot/html/portlet/search/css/main.css | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/portal-web/docroot/html/portlet/search/configuration.jsp b/portal-web/docroot/html/portlet/search/configuration.jsp index 464dba8218b206..c15bb50157f4ca 100644 --- a/portal-web/docroot/html/portlet/search/configuration.jsp +++ b/portal-web/docroot/html/portlet/search/configuration.jsp @@ -42,7 +42,7 @@
    " id="advancedConfiguration"> - +
    diff --git a/portal-web/docroot/html/portlet/search/css/main.css b/portal-web/docroot/html/portlet/search/css/main.css index e947df9697f71e..e946eb72907b98 100644 --- a/portal-web/docroot/html/portlet/search/css/main.css +++ b/portal-web/docroot/html/portlet/search/css/main.css @@ -4,12 +4,12 @@ } .menu-column .search-layout-content { - padding-left: 20em; + padding-left: 24em; .menu { - margin-left: -20em; + margin-left: -24em; position: relative; - width: 20em; + width: 24em; } .result { @@ -174,6 +174,7 @@ .asset-entry-summary { display: block; + margin-bottom: 1em; } .asset-entry-title {