mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Merged BRANCHES/DEV/V4.1-BUG-FIX to HEAD
45144: Fix for ALF-16790 - upload ignores additional aspects for updateNodes 45174: Merged V4.1-BUG-FIX-2012_11_22 to V4.1-BUG-FIX 43940: ALF-15209: Add Dashlet to User or Site Dashboard not working when IE8 is operating in Compatibility Mode. Fix check p_el.attributes["id"] to avoid errors for "IE8 compatibility mode 45175: Fix for ALF-17260 - Tags list not updated after moving/copying an high number of nodes with taggable aspect but no tags 45188: ALF-16254 ("Leave Site" behaviour for group based site membership) 45204: Fix for ALF-17335 - OnCreateNodePolicy not fired when custom type is used in the Share flash upload 45218: ALF-17248 BaseAssociationEditor.java does not return any results when the query filter consists of "firstname + lastname" 45221: Merged V4.1.3 (4.1.3) to V4.1-BUG-FIX (4.1.4) RECORD ONLY 45220: Merged: V4.1-BUG-FIX (4.1.4) to V4.1.3 (4.1.3) 44054: Fix for ALF-16337. Datalist assignee not searchable by full name. 45218: ALF-17248 BaseAssociationEditor.java does not return any results when the query filter consists of "firstname + lastname" 45245: ALF-17089 (Displaying Url Name instead of site Name in Select form) 45257: ALF-17318 Unnecessary Canned Query in .getPeople(String,...) on startup. - Just one extra query on each run of the FeedNotifier was being made at the end. The sequence of queries are necessary. 45336: Merged DEV to V4.1-BUG-FIX (4.1.4) 45318: ALF-14086: CLONE - Sort order of folders including hyphens ( - ) are different in folder-tree and view on folders (in Share) Sort groups and users on the Java server side using collators. - Deprecated a few methods not deprecated in DEV and removed one which had just been added to 4.1.4 45362: Merged V3.4-BUG-FIX (3.4.13) to V4.1-BUG-FIX <<RECORD ONLY>> 45361: Merged V3.4 (3.4.12) to V3.4-BUG-FIX (3.4.13) 45360: ALF-17431: Merged V4.1 (4.1.2) to V3.4 (3.4.12) 43622: ALF-16757: Sharepoint doesn't work correct with SSO - Fix by Pavel 45385: Merged V4.1.3 (4.1.3) to V4.1-BUG-FIX (4.1.4) 45384: ALF-17097 60k Site Performance: Admin Console | Groups | Browse Groups (include sys groups): Results isn't appeared. - Error in authorities comparator causing test failure of ALF 14086 in 4.1.4 only. 4.1.3 was okay as ALF 14086 now uses the change made for ALF-17097 but only in 4.1.4 45452: Corrected config check for ALF-16413 - Share asks for Basic-Auth while not needed trying to access RSS feeds (thus breaking SSO). 45467: Fix for ALF-17509 - patches the FreeMarker built-in ?js_string to correctly encode the "/" character. 45468: ALF-17492 - WebScript errors must contain useful information - SpringSurf libs 1217 provide additional INFO log information on the HTTP method, URL+params that caused the exception. 45475: Fix for ALF-17510 - Upgrade of htmlparser from 1.6 to 2.1 45566: Fixed ALF-17530 - Refactored "successCallback" & "successScope" parameters for multipart uploads to be simply "success" (same for failure) 45574: Fixed ALF-17528 - Asserting that request is made using application/json 45662: Merged HEAD to BRANCHES/DEV/V4.1-BUG-FIX: 45660: Fixes: ALF-17539 - The server was failing to parse the date. It shouldn't have been trying to parse it at all. 45849: Merged HEAD to BRANCHES/DEV/V4.1-BUG-FIX: 45824: Fixes: ALF-13676: Event edit times are now presented using the date-format.shortTime setting & may be entered in either 24h or 12hr formats. 45876: ALF-17642: Fix broken HtmlParserContentTransformerTest after upgrade of htmlparser to 2.1 - Since the upgrade slightly changed the behaviour of the transformer, I added some explanatory comments to the test and to the transformer class. 45927: Fix for ALF-17302 DocLib sort is determined by server locale rather than browser locale - GetChildrenCannedQuery was not using locale based collation 46014: Fix for ALF-17732 - SWF files are considered insecure content and should not be displayed directly in the browser. 46160: Fix for ALF-17759 - HTML files are stripped from metadata and style information after they are uploaded. 46186: Fix for ALF-17786 - Site dashboard page issues too many requests (Site Members dashlet issues avatar requests when it doesn't need too) git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@46287 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2005-2012 Alfresco Software Limited.
|
||||
* Copyright (C) 2005-2013 Alfresco Software Limited.
|
||||
*
|
||||
* This file is part of Alfresco
|
||||
*
|
||||
@@ -18,7 +18,11 @@
|
||||
*/
|
||||
package org.alfresco.repo.jscript;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.text.Collator;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -37,6 +41,7 @@ import org.alfresco.repo.tenant.TenantDomainMismatchException;
|
||||
import org.alfresco.repo.tenant.TenantService;
|
||||
import org.alfresco.service.ServiceRegistry;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.alfresco.service.cmr.repository.NodeService;
|
||||
import org.alfresco.service.cmr.repository.StoreRef;
|
||||
import org.alfresco.service.cmr.search.LimitBy;
|
||||
import org.alfresco.service.cmr.search.ResultSet;
|
||||
@@ -58,6 +63,7 @@ import org.apache.commons.logging.LogFactory;
|
||||
import org.mozilla.javascript.Context;
|
||||
import org.mozilla.javascript.Scriptable;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.extensions.surf.util.I18NUtil;
|
||||
import org.springframework.extensions.surf.util.ParameterCheck;
|
||||
|
||||
/**
|
||||
@@ -508,6 +514,26 @@ public final class People extends BaseScopableProcessorExtension implements Init
|
||||
* @return people collection as a JavaScript array
|
||||
*/
|
||||
public Scriptable getPeople(String filter, int maxResults)
|
||||
{
|
||||
return getPeople(filter, maxResults, null, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the collection of people stored in the repository.
|
||||
* An optional filter query may be provided by which to filter the people collection.
|
||||
* Space separate the query terms i.e. "john bob" will find all users who's first or
|
||||
* second names contain the strings "john" or "bob".
|
||||
* Method supports sorting by specifying sortBy and sortAsc params.
|
||||
*
|
||||
* @param filter filter query string by which to filter the collection of people.
|
||||
* If <pre>null</pre> then all people stored in the repository are returned
|
||||
* @param maxResults maximum results to return or all if <= 0
|
||||
* @param sortBy field for sorting
|
||||
* @param sortAsc sort ascending or not
|
||||
*
|
||||
* @return people collection as a JavaScript array
|
||||
*/
|
||||
public Scriptable getPeople(String filter, int maxResults, String sortBy, boolean sortAsc)
|
||||
{
|
||||
boolean useCQ = false;
|
||||
if (filter != null)
|
||||
@@ -529,7 +555,7 @@ public final class People extends BaseScopableProcessorExtension implements Init
|
||||
|
||||
if ((filter == null || filter.length() == 0) || useCQ)
|
||||
{
|
||||
people = getPeopleImplDB(filter, maxResults);
|
||||
people = getPeopleImplDB(filter, maxResults, sortBy, sortAsc);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -546,14 +572,14 @@ public final class People extends BaseScopableProcessorExtension implements Init
|
||||
|
||||
try
|
||||
{
|
||||
people = getPeopleImplSearch(term, t, propIndex, maxResults);
|
||||
people = getPeopleImplSearch(term, t, propIndex, maxResults, sortBy, sortAsc);
|
||||
}
|
||||
catch (Throwable err)
|
||||
{
|
||||
if (useCQ)
|
||||
{
|
||||
// search unavailable and/or parser exception - try CQ instead
|
||||
people = getPeopleImplDB(term, maxResults);
|
||||
people = getPeopleImplDB(term, maxResults, sortBy, sortAsc);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -568,10 +594,11 @@ public final class People extends BaseScopableProcessorExtension implements Init
|
||||
}
|
||||
|
||||
// canned query
|
||||
private Object[] getPeopleImplDB(String term, int maxResults)
|
||||
private Object[] getPeopleImplDB(String term, int maxResults, final String sortBy, boolean sortAsc)
|
||||
{
|
||||
Long start = (logger.isDebugEnabled() ? System.currentTimeMillis() : null);
|
||||
Object[] people = null;
|
||||
|
||||
List<NodeRef> peopleRefs = new ArrayList<NodeRef>();
|
||||
|
||||
// simple non-FTS filter: firstname or lastname or username starting with term (ignoring case)
|
||||
|
||||
@@ -585,24 +612,27 @@ public final class People extends BaseScopableProcessorExtension implements Init
|
||||
|
||||
PagingRequest pagingRequest = new PagingRequest(maxResults, null);
|
||||
List<PersonInfo> persons = personService.getPeople(term, filterProps, sortProps, pagingRequest).getPage();
|
||||
people = new Object[persons.size()];
|
||||
for (int i=0; i<people.length; i++)
|
||||
for (int i=0; i<persons.size(); i++)
|
||||
{
|
||||
people[i] = persons.get(i).getNodeRef();
|
||||
peopleRefs.add(persons.get(i).getNodeRef());
|
||||
}
|
||||
|
||||
Object[] people = getSortedPeopleObjects(peopleRefs, sortBy, sortAsc);
|
||||
|
||||
if (start != null)
|
||||
{
|
||||
logger.debug("getPeople: cq - "+people.length+" items (in "+(System.currentTimeMillis()-start)+" msecs)");
|
||||
}
|
||||
|
||||
|
||||
return people;
|
||||
}
|
||||
|
||||
// search query
|
||||
private Object[] getPeopleImplSearch(String term, StringTokenizer t, int propIndex, int maxResults) throws Throwable
|
||||
private Object[] getPeopleImplSearch(String term, StringTokenizer t, int propIndex, int maxResults, final String sortBy, boolean sortAsc) throws Throwable
|
||||
{
|
||||
Long start = (logger.isDebugEnabled() ? System.currentTimeMillis() : null);
|
||||
|
||||
List<NodeRef> peopleRefs = new ArrayList<NodeRef>();
|
||||
Object[] people = null;
|
||||
|
||||
SearchParameters params = new SearchParameters();
|
||||
@@ -712,7 +742,7 @@ public final class People extends BaseScopableProcessorExtension implements Init
|
||||
try
|
||||
{
|
||||
results = services.getSearchService().query(params);
|
||||
people = results.getNodeRefs().toArray();
|
||||
people = getSortedPeopleObjects(results.getNodeRefs(), sortBy, sortAsc);
|
||||
|
||||
if (start != null)
|
||||
{
|
||||
@@ -739,6 +769,75 @@ public final class People extends BaseScopableProcessorExtension implements Init
|
||||
return people;
|
||||
}
|
||||
|
||||
private Object[] getSortedPeopleObjects(List<NodeRef> peopleRefs, final String sortBy, boolean sortAsc)
|
||||
{
|
||||
final Collator col = Collator.getInstance(I18NUtil.getLocale());
|
||||
final NodeService nodeService = services.getNodeService();
|
||||
final int orderMultiplicator = sortAsc ? 1 : -1;
|
||||
Collections.sort(peopleRefs, new Comparator<NodeRef>()
|
||||
{
|
||||
@Override
|
||||
public int compare(NodeRef n1, NodeRef n2)
|
||||
{
|
||||
String p1 = getProperty(n1);
|
||||
String p2 = getProperty(n2);
|
||||
|
||||
return col.compare(p1, p2) * orderMultiplicator;
|
||||
}
|
||||
|
||||
public String getProperty(NodeRef nodeRef)
|
||||
{
|
||||
Serializable result;
|
||||
|
||||
if ("fullName".equalsIgnoreCase(sortBy))
|
||||
{
|
||||
String firstName = nodeService.getProperty(nodeRef, ContentModel.PROP_FIRSTNAME).toString();
|
||||
String lastName = nodeService.getProperty(nodeRef, ContentModel.PROP_LASTNAME).toString();
|
||||
String fullName = firstName;
|
||||
if (lastName != null && lastName.length() > 0)
|
||||
{
|
||||
fullName = fullName + " " + lastName;
|
||||
}
|
||||
|
||||
result = fullName;
|
||||
}
|
||||
else if ("jobtitle".equalsIgnoreCase(sortBy))
|
||||
{
|
||||
result = nodeService.getProperty(nodeRef, ContentModel.PROP_JOBTITLE);
|
||||
}
|
||||
else if ("email".equalsIgnoreCase(sortBy))
|
||||
{
|
||||
result = nodeService.getProperty(nodeRef, ContentModel.PROP_EMAIL);
|
||||
}
|
||||
else if ("usage".equalsIgnoreCase(sortBy))
|
||||
{
|
||||
result = nodeService.getProperty(nodeRef, ContentModel.PROP_SIZE_CURRENT);
|
||||
}
|
||||
else if ("quota".equalsIgnoreCase(sortBy))
|
||||
{
|
||||
result = nodeService.getProperty(nodeRef, ContentModel.PROP_SIZE_QUOTA);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Default
|
||||
result = nodeService.getProperty(nodeRef, ContentModel.PROP_USERNAME);
|
||||
}
|
||||
|
||||
if (result == null)
|
||||
{
|
||||
result = "";
|
||||
}
|
||||
|
||||
return result.toString();
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
Object[] people = new Object[peopleRefs.size()];
|
||||
peopleRefs.toArray(people);
|
||||
|
||||
return people;
|
||||
}
|
||||
/**
|
||||
* Gets the Person given the username
|
||||
*
|
||||
|
Reference in New Issue
Block a user