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); }