mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-07-31 17:39:05 +00:00
[RM-823] Hold folder is empty for all users except admin. Read permission check is hardcoded in doclist-lib.js. RM now overrides this library's main method to allow ReadRecords checks.
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/HEAD@54600 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -4,8 +4,9 @@
|
|||||||
<import resource="classpath:/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary-v2/parse-args.lib.js">
|
<import resource="classpath:/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary-v2/parse-args.lib.js">
|
||||||
<import resource="classpath:/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary-v2/rm-parse-args.lib.js">
|
<import resource="classpath:/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary-v2/rm-parse-args.lib.js">
|
||||||
<import resource="classpath:/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary-v2/doclist.lib.js">
|
<import resource="classpath:/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary-v2/doclist.lib.js">
|
||||||
|
<import resource="classpath:/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary-v2/rm-doclist.lib.js">
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Document List Component: doclist
|
* Document List Component: doclist
|
||||||
*/
|
*/
|
||||||
model.doclist = doclist_main();
|
model.doclist = rm_doclist_main();
|
||||||
|
@@ -0,0 +1,239 @@
|
|||||||
|
/**
|
||||||
|
* Main entry point: Create collection of documents and folders in the given space
|
||||||
|
*
|
||||||
|
* @method rm_doclist_main
|
||||||
|
*/
|
||||||
|
function rm_doclist_main()
|
||||||
|
{
|
||||||
|
// Use helper function to get the arguments
|
||||||
|
var parsedArgs = ParseArgs.getParsedArgs();
|
||||||
|
if (parsedArgs === null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var filter = args.filter,
|
||||||
|
items = [];
|
||||||
|
|
||||||
|
// Try to find a filter query based on the passed-in arguments
|
||||||
|
var allNodes = [],
|
||||||
|
totalRecords = 0,
|
||||||
|
requestTotalCountMax = 0,
|
||||||
|
paged = false,
|
||||||
|
favourites = Common.getFavourites(),
|
||||||
|
filterParams = Filters.getFilterParams(filter, parsedArgs,
|
||||||
|
{
|
||||||
|
favourites: favourites
|
||||||
|
}),
|
||||||
|
query = filterParams.query,
|
||||||
|
allSites = (parsedArgs.nodeRef == "alfresco://sites/home");
|
||||||
|
|
||||||
|
if (logger.isLoggingEnabled())
|
||||||
|
logger.log("rm-doclist.lib.js - NodeRef: " + parsedArgs.nodeRef + " Query: " + query);
|
||||||
|
|
||||||
|
var totalItemCount = filterParams.limitResults ? parseInt(filterParams.limitResults, 10) : -1;
|
||||||
|
// For all sites documentLibrary query we pull in all available results and post filter
|
||||||
|
if (totalItemCount === 0) totalItemCount = -1;
|
||||||
|
else if (allSites) totalItemCount = (totalItemCount > 0 ? totalItemCount * 10 : 500);
|
||||||
|
|
||||||
|
|
||||||
|
var allNodesResult = doclist_getAllNodes(parsedArgs, filterParams, query, totalItemCount);
|
||||||
|
allNodes = allNodesResult.allNodes;
|
||||||
|
totalRecords = allNodesResult.totalRecords;
|
||||||
|
requestTotalCountMax = allNodesResult.requestTotalCountMax;
|
||||||
|
paged = allNodesResult.paged;
|
||||||
|
query = allNodesResult.query;
|
||||||
|
|
||||||
|
|
||||||
|
if (logger.isLoggingEnabled())
|
||||||
|
logger.log("rm-doclist.lib.js - query results: " + allNodes.length);
|
||||||
|
// Generate the qname path match regex required for all sites 'documentLibrary' results match
|
||||||
|
var pathRegex;
|
||||||
|
if (allSites)
|
||||||
|
{
|
||||||
|
// escape the forward slash characters in the qname path
|
||||||
|
// TODO: replace with java.lang.String regex match for performance
|
||||||
|
var pathMatch = new String(parsedArgs.rootNode.qnamePath).replace(/\//g, '\\/') + "\\/.*\\/cm:documentLibrary\\/.*";
|
||||||
|
pathRegex = new RegExp(pathMatch, "gi");
|
||||||
|
if (logger.isLoggingEnabled())
|
||||||
|
logger.log("rm-doclist.lib.js - will match results using regex: " + pathMatch);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ensure folders and folderlinks appear at the top of the list
|
||||||
|
var folderNodes = [],
|
||||||
|
documentNodes = [];
|
||||||
|
|
||||||
|
for each (node in allNodes)
|
||||||
|
{
|
||||||
|
if (totalItemCount !== 0)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (!allSites || node.qnamePath.match(pathRegex))
|
||||||
|
{
|
||||||
|
totalItemCount--;
|
||||||
|
if (node.isContainer || node.isLinkToContainer)
|
||||||
|
{
|
||||||
|
folderNodes.push(node);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
documentNodes.push(node);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (e)
|
||||||
|
{
|
||||||
|
// Possibly an old indexed node - ignore it
|
||||||
|
}
|
||||||
|
} else break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Node type counts
|
||||||
|
var folderNodesCount = folderNodes.length,
|
||||||
|
documentNodesCount = documentNodes.length,
|
||||||
|
nodes;
|
||||||
|
|
||||||
|
if (parsedArgs.type === "documents")
|
||||||
|
{
|
||||||
|
nodes = documentNodes;
|
||||||
|
totalRecords -= folderNodesCount;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// TODO: Sorting with folders at end -- swap order of concat()
|
||||||
|
nodes = folderNodes.concat(documentNodes);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (logger.isLoggingEnabled())
|
||||||
|
logger.log("rm-doclist.lib.js - totalRecords: " + totalRecords);
|
||||||
|
|
||||||
|
// Pagination
|
||||||
|
var pageSize = args.size || nodes.length,
|
||||||
|
pagePos = args.pos || "1",
|
||||||
|
startIndex = (pagePos - 1) * pageSize;
|
||||||
|
|
||||||
|
if (!paged)
|
||||||
|
{
|
||||||
|
// Trim the nodes array down to the page size
|
||||||
|
nodes = nodes.slice(startIndex, pagePos * pageSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Common or variable parent container?
|
||||||
|
var parent = null;
|
||||||
|
|
||||||
|
if (!filterParams.variablePath)
|
||||||
|
{
|
||||||
|
// Parent node permissions (and Site role if applicable)
|
||||||
|
parent = Evaluator.run(parsedArgs.pathNode, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
var thumbnail = null,
|
||||||
|
locationNode,
|
||||||
|
item;
|
||||||
|
|
||||||
|
// Loop through and evaluate each node in this result set
|
||||||
|
for each (node in nodes)
|
||||||
|
{
|
||||||
|
// Get evaluated properties.
|
||||||
|
item = Evaluator.run(node);
|
||||||
|
if (item !== null)
|
||||||
|
{
|
||||||
|
item.isFavourite = (favourites[item.node.nodeRef] === true);
|
||||||
|
item.likes = Common.getLikes(node);
|
||||||
|
|
||||||
|
// Does this collection of nodes have potentially differering paths?
|
||||||
|
if (filterParams.variablePath || item.isLink)
|
||||||
|
{
|
||||||
|
locationNode = item.isLink ? item.linkedNode : item.node;
|
||||||
|
// Ensure we have Read permissions on the destination on the link object
|
||||||
|
if (!locationNode.hasPermission("ReadRecords")) continue;
|
||||||
|
location = Common.getLocation(locationNode, parsedArgs.libraryRoot);
|
||||||
|
// Parent node
|
||||||
|
if (node.parent != null && node.parent.isContainer && node.parent.hasPermission("ReadRecords"))
|
||||||
|
{
|
||||||
|
item.parent = Evaluator.run(node.parent, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
location =
|
||||||
|
{
|
||||||
|
site: parsedArgs.location.site,
|
||||||
|
siteTitle: parsedArgs.location.siteTitle,
|
||||||
|
sitePreset: parsedArgs.location.sitePreset,
|
||||||
|
container: parsedArgs.location.container,
|
||||||
|
containerType: parsedArgs.location.containerType,
|
||||||
|
path: parsedArgs.location.path,
|
||||||
|
file: node.name
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// Resolved location
|
||||||
|
item.location = location;
|
||||||
|
|
||||||
|
items.push(item);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
--totalRecords;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Array Remove - By John Resig (MIT Licensed)
|
||||||
|
var fnArrayRemove = function fnArrayRemove(array, from, to)
|
||||||
|
{
|
||||||
|
var rest = array.slice((to || from) + 1 || array.length);
|
||||||
|
array.length = from < 0 ? array.length + from : from;
|
||||||
|
return array.push.apply(array, rest);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* De-duplicate orignals for any existing working copies.
|
||||||
|
* This can't be done in evaluator.lib.js as it has no knowledge of the current filter or UI operation.
|
||||||
|
* Note: This may result in pages containing less than the configured amount of items (50 by default).
|
||||||
|
*/
|
||||||
|
for each (item in items)
|
||||||
|
{
|
||||||
|
if (item.workingCopy && item.workingCopy.isWorkingCopy)
|
||||||
|
{
|
||||||
|
var workingCopySource = String(item.workingCopy.sourceNodeRef);
|
||||||
|
for (var i = 0, ii = items.length; i < ii; i++)
|
||||||
|
{
|
||||||
|
if (String(items[i].node.nodeRef) == workingCopySource)
|
||||||
|
{
|
||||||
|
fnArrayRemove(items, i);
|
||||||
|
--totalRecords;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var paging =
|
||||||
|
{
|
||||||
|
totalRecords: totalRecords,
|
||||||
|
startIndex: startIndex
|
||||||
|
};
|
||||||
|
|
||||||
|
if (paged && (totalRecords == requestTotalCountMax))
|
||||||
|
{
|
||||||
|
paging.totalRecordsUpper = requestTotalCountMax;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
{
|
||||||
|
luceneQuery: query,
|
||||||
|
paging: paging,
|
||||||
|
container: parsedArgs.rootNode,
|
||||||
|
parent: parent,
|
||||||
|
onlineEditing: utils.moduleInstalled("org.alfresco.module.vti"),
|
||||||
|
itemCount:
|
||||||
|
{
|
||||||
|
folders: folderNodesCount,
|
||||||
|
documents: documentNodesCount
|
||||||
|
},
|
||||||
|
items: items,
|
||||||
|
customJSON: slingshotDocLib.getJSON()
|
||||||
|
});
|
||||||
|
}
|
Reference in New Issue
Block a user