From 81f7b901d8d97eb468f10f7280fdbf016a779d8d Mon Sep 17 00:00:00 2001 From: Kevin Roast Date: Fri, 2 Jul 2010 09:29:12 +0000 Subject: [PATCH] ALF-3613 ALF-3659 Share search screen refactor: - added back site specific search, based on new design from Linton - sort field menu - sort for basic properties and TYPE now work (still need to fix up pseudo cm:content props) - optimizations to reduce number of remote calls a page makes to resolve Site Title from siteid git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@20920 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../slingshot/search/search.get.desc.xml | 2 +- .../alfresco/slingshot/search/search.get.js | 3 +- .../alfresco/slingshot/search/search.lib.js | 44 ++++++++++++++++++- 3 files changed, 45 insertions(+), 4 deletions(-) diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/search/search.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/slingshot/search/search.get.desc.xml index 5e8973236a..0479d83f91 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/slingshot/search/search.get.desc.xml +++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/search/search.get.desc.xml @@ -1,7 +1,7 @@ search Site Search Component Data Webscript - /slingshot/search?term={term?}&tag={tag?}&site={site?}&container={container?} + /slingshot/search?term={term?}&tag={tag?}&site={site?}&container={container?}&sort={sort?} argument user required diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/search/search.get.js b/config/alfresco/templates/webscripts/org/alfresco/slingshot/search/search.get.js index 3c5934896f..32a1fe1cd4 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/slingshot/search/search.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/search/search.get.js @@ -5,9 +5,10 @@ function main() var containerId = (args.container !== undefined) ? args.container : null; var term = (args.term !== undefined) ? args.term : null; var tag = (args.tag !== undefined) ? args.tag : null; + var sort = (args.sort !== undefined) ? args.sort : null; var maxResults = (args.maxResults !== undefined) ? parseInt(args.maxResults, 10) : DEFAULT_MAX_RESULTS; - model.data = getSearchResults(term, tag, maxResults, siteId, containerId); + model.data = getSearchResults(term, tag, maxResults, siteId, containerId, sort); } main(); \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/search/search.lib.js b/config/alfresco/templates/webscripts/org/alfresco/slingshot/search/search.lib.js index 218719ea16..b551e8a1c7 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/slingshot/search/search.lib.js +++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/search/search.lib.js @@ -500,7 +500,7 @@ function processResults(nodes, maxResults) * "or" is the default operator, AND and NOT are also supported - as is any other valid fts-alfresco * elements such as "quoted terms" and (bracket terms) and also propname:propvalue syntax. */ -function getSearchResults(term, tag, maxResults, siteId, containerId) +function getSearchResults(term, tag, maxResults, siteId, containerId, sort) { var nodes; @@ -538,6 +538,45 @@ function getSearchResults(term, tag, maxResults, siteId, containerId) ftsQuery = "PATH:\"" + path + "/*\" AND (" + ftsQuery + ") "; ftsQuery += "AND -TYPE:\"{http://www.alfresco.org/model/content/1.0}thumbnail\""; + // sort field + /* sort + * { + * column: string, mandatory, sort column in appropriate format for the language + * ascending: boolean optional, defaults to false + * }*/ + var sortColumns = []; + if (sort != null && sort.length != 0) + { + var asc = true; + var separator = sort.indexOf("|"); + if (separator != -1) + { + sort = sort.substring(0, separator); + asc = (sort.substring(separator + 1) == "true"); + } + var column; + if (sort.charAt(0) == '.') + { + // handle pseudo cm:content fields + column = "@{http://www.alfresco.org/model/content/1.0}content" + sort; + } + else if (sort.indexOf(":") != -1) + { + // handle attribute field sort + column = "@" + utils.longQName(sort); + } + else + { + // other sort types e.g. TYPE + column = sort; + } + sortColumns.push( + { + column: column, + ascending: asc + }); + } + // perform fts-alfresco language query var queryDef = { query: ftsQuery, @@ -545,7 +584,8 @@ function getSearchResults(term, tag, maxResults, siteId, containerId) page: {maxItems: maxResults}, templates: QUERY_TEMPLATES, defaultField: "keywords", - onerror: "no-results" + onerror: "no-results", + sort: sortColumns }; nodes = search.query(queryDef); }