explorer.js
来自「Hippo CMS是一个以信息为中心的开源内容管理系统。Hippo CMS目标是」· JavaScript 代码 · 共 809 行 · 第 1/2 页
JS
809 行
if (editDocument(uriPrefix, resourceId, params)) {
actionSuccess = "success";
}
else {
actionSuccess = "failure";
}
}
else if (form.submitId.indexOf('_') == -1) { // workflow action
lastResponseStatus = "0";
var workflowActionId = params.get("actionId");
if (workflowActionId != null) {
if (cocoon.log.isDebugEnabled()) {
cocoon.log.debug("explorer.js: workflow action: " + form.submitId + " = " + workflowActionId);
cocoon.log.debug("explorer.js: standard ui action: " + params.get("standardUIAction"));
}
var standardUIAction = params.get("standardUIAction");
var cmsAction = null;
if (standardUIAction != null && standardUIAction.equals("hippo.cms.delete")) {
cmsAction = "deleteResource";
}
if (workflow.invokeAction(resourceId, workflowActionId, params, uriPrefix)) {
if (cmsAction != null) {
if (this[cmsAction].call(this, uriPrefix, resourceId, params)) {
if (cocoon.log.isDebugEnabled()) {
cocoon.log.debug("explorer.js: standardUIAction completed");
}
}
else {
if (cocoon.log.isDebugEnabled()) {
cocoon.log.debug("explorer.js: standardUIAction failed");
}
actionEvent = actionId;
actionSuccess = "failure";
}
}
else {
cmsAction = "workflowAction";
// after workflowAction fire invalidation events
var emanager = cocoon.getComponent(EventAwareManager.ROLE);
WebdavRepository.fireEvent(emanager,uriPrefix+resourceId);
}
actionEvent = cmsAction;
actionSuccess = "success";
}
else {
lastResponseStatus = "401";
actionEvent = actionId;
actionSuccess = "failure";
}
}
else {
lastResponseStatus = "400";
actionEvent = actionId;
actionSuccess = "failure";
}
}
else { // other action
// read the requested action from form.submitId (string-part after ':')
var action = form.submitId.substring(form.submitId.indexOf("_") + 1);
if (cocoon.log.isDebugEnabled()) {
cocoon.log.debug("explorer.js: action: " + action);
}
if (form.submitId.substring(0, form.submitId.indexOf("_")).equals("assets")) {
actionEvent = "asset" + action;
}
else {
actionEvent = action;
}
// do the requested action
if (this[action].call(this, uriPrefix, resourceId, params)) {
actionSuccess = "success";
}
else {
actionSuccess = "failure";
}
}
// check for a name parameter and pass it as a request parameter
var name = "";
if (params.get("name") != null) {
name = spring.getBean("nameUtil").convertToValidName(params.get("name"));
}
else if (params.get("File") != null) {
var tempName = new File(params.get("File")).getName();
name = spring.getBean("nameUtil").convertToValidBinaryFilename(tempName);
}
//print("action" + actionSuccess + "?resourceId=" + resourceId + "&name=" + name);
cocoon.sendPage("action" + actionSuccess + "?resourceId=" + resourceId + "&name=" + name,
{status: lastResponseStatus, actionEvent: actionEvent, actionName: actionId});
}
/**
* Shows a Cocoon Form enabling the user to edit the values of certain
* webdav properties of a resource.
*/
function proplistform2xml(form)
{
var resourceId = cocoon.parameters["resourceId"];
var uriPrefix = cocoon.parameters["uriPrefix"];
var uri = uriPrefix + resourceId;
var documentURI = cocoon.parameters["documentURI"];
var document = libio.loadDocument(documentURI);
form.load(document);
form.setFormName("site.explorer.flow.explorer.proplistform2xml"+cocoon.session);
form.setUseUniqueContinuations(true);
form.showForm("proplistform-display-pipeline" + resourceId);
form.save(document);
// get new property value from DOM object and do a proppatch
// TODO: niet zo handig: namen van properties kunnen zo geen '-' bevatten....
var propertyName = form.submitId.substring(form.submitId.lastIndexOf('-') + 1);
var propertyNamespace;
var propertyValue;
if (cocoon.log.isDebugEnabled()) {
cocoon.log.debug("explorer.js: proplistform2xml: property: " + propertyName);
}
var nodeList = document.getElementsByTagNameNS("*",propertyName);
if (nodeList && nodeList.getLength() > 0) {
var property = nodeList.item(0);
if (property && property.getFirstChild()) {
propertyValue = property.getFirstChild().getNodeValue();
if (cocoon.log.isDebugEnabled()) {
cocoon.log.debug("explorer.js: proplistform2xml: value: " + propertyValue);
}
propertyNamespace = property.getNamespaceURI();
if (cocoon.log.isDebugEnabled()) {
cocoon.log.debug("explorer.js: proplistform2xml: namespace: " + propertyNamespace);
}
var actionEvent;
if (resourceId.indexOf('/binaries/') == 0) {
actionEvent = "assetproppatch";
}
else {
actionEvent = "proppatch";
}
var result = handleContentModelException(function(){
usingDocumentDo("", uri, function(document){
document.setProperty(propertyName, propertyValue);
document.commitChanges();
});
});
if (result)
{
var params = new HashMap();
if (!workflow.invokeStandardUIAction(resourceId, "hippo.cms.save", params, uriPrefix)) {
cocoon.log.error("actions.js: saveDocument: invokeAction() failed");
}
cocoon.sendPage("actionsuccess?resourceId=" + resourceId, {status: lastResponseStatus, actionEvent: actionEvent});
}
else {
cocoon.sendPage("actionfailure?resourceId=" + resourceId, {status: lastResponseStatus, actionEvent: actionEvent});
}
}
}
else {
cocoon.log.warn("explorer.js: proplistform2xml: binding error");
}
}
function siteactionsform2xml(form)
{
var resourceId = cocoon.parameters["resourceId"];
var uriPrefix = cocoon.parameters["uriPrefix"];
var uri = uriPrefix + resourceId;
var repositoryFiles = cocoon.parameters["repositoryFiles"];
form.setFormName("site.explorer.flow.explorer.siteactionsform2xml"+cocoon.session);
form.setUseUniqueContinuations(true);
form.showForm("siteactionsform-display-pipeline" + resourceId);
var workflowId = form.lookupWidget(form.submitId + "-workflowId").getValue();
var workflowActionId = form.lookupWidget(form.submitId + "-workflowActionId").getValue();
var fields = form.lookupWidget('/').getChildren();
var params = new HashMap();
while (fields.hasNext())
{
var fieldWidget = fields.next();
var widgetId = fieldWidget.getId();
if (widgetId.startsWith(form.submitId) && widgetId.substr(form.submitId.length()+1) != '')
{
params.put(widgetId.substr(form.submitId.length()+1), fieldWidget.getValue());
}
}
var actionSuccess = "success";
if (workflow.invokeActionUnchecked(workflowId, workflowActionId, params))
{
actionSuccess = "failure";
}
var actionEvent = "siteactionsWorkflowAction";
var lastResponseStatus = "0";
var name = "";
cocoon.sendPage("action" + actionSuccess + "?resourceId=" + resourceId + "&name=" + name,
{status: lastResponseStatus, actionEvent: actionEvent});
}
/**
* Moves a resource up or down in the doclisting by swapping their index properties.
*/
function moveUpDown() {
var thisNodeUri = cocoon.parameters["thisNodeUri"];
var otherNodeUri = cocoon.parameters["otherNodeUri"];
var thisNodeIndex = cocoon.parameters["thisNodeIndex"];
var otherNodeIndex = cocoon.parameters["otherNodeIndex"];
var perspective = cocoon.parameters["perspective"];
var repositoryFiles = cocoon.parameters["repositoryFiles"];
if (cocoon.log.isDebugEnabled()) {
cocoon.log.debug("explorer.js: moveUpDown(): " + thisNodeUri + ", " + otherNodeUri);
}
var path = thisNodeUri.substring(repositoryFiles.length);
var parentPath = path.substring(0, path.lastIndexOf('/'));
if (parentPath.indexOf('/') == parentPath.lastIndexOf('/')) {
parentPath = parentPath + '/';
}
var name = thisNodeUri.substring(thisNodeUri.lastIndexOf('/') + 1);
if (setProperty(thisNodeUri, "index", otherNodeIndex)) {
if (setProperty(otherNodeUri, "index", thisNodeIndex)) {
cocoon.sendPage("actionsuccess?resourceId="+parentPath+"&name="+name, {status: "temp", actionEvent: perspective + "moveUpDown"});
}
else {
if (!setProperty(thisNodeUri, "index", thisNodeIndex)) {
cocoon.log.error("explorer.js: moveUpDown(): rollback error: second setProperty call failed but cannot undo first setProperty");
}
cocoon.sendPage("actionfailure?resourceId="+parentPath, {status: "temp", actionEvent: perspective + "moveUpDown"});
}
}
else {
cocoon.sendPage("actionfailure?resourceId="+parentPath, {status: "temp", actionEvent: perspective + "moveUpDown"});
}
}
/**
* Checks the sorting settings for the document listing. If changed they are
* saved in the session.
*
* @param path the path to the requested collection to show in the doclisting
* @param sortBy the name of the column to sort on
* @param sortOrder ascending or descending
*/
function checkSorting()
{
var path = cocoon.parameters["path"];
var sortBy = cocoon.parameters["sortBy"];
var sortOrder = cocoon.parameters["sortOrder"];
var storedSortBy = cocoon.parameters["storedSortBy"];
var storedSortOrder = cocoon.parameters["storedSortOrder"];
if(sortBy.equals(""))
sortBy = storedSortBy;
if(sortOrder.equals(""))
sortOrder = storedSortOrder;
if(sortBy.equals(""))
sortBy = cocoon.parameters["defaultSortBy"];
if(sortOrder.equals(""))
sortOrder = cocoon.parameters["defaultSortOrder"];
cocoon.session.setAttribute('sortBy', sortBy);
cocoon.session.setAttribute('sortOrder', sortOrder);
var returnAllNodes = sortBy.equals("index") ? true : false;
cocoon.sendPage("doclisting" + path, {returnAllNodes: returnAllNodes});
}
function availableActionsCachingHandleForm() {
var cache = cocoon.getComponent(Store.ROLE+"/EventAware");
// authentication.getHttpState() goes to the loginform is the httpstate is missing
// this will cause a login box being displayed on the location of the actionsform
// to prevent this, check its state directly from the session and if it's not
// undefined or null, do the regular check. See CMSSIX-122
if(cocoon.session.httpstate == null || cocoon.session.httpstate == undefined){
if (cocoon.log.isDebugEnabled()) {
cocoon.log.debug("explorer.js: availableActionsCachingHandleForm(): httpstate is null or undefined");
}
}
else{
// check if workflowId is valid, if not, start new workflow for this document
var httpState = authentication.getHttpState();
var uri = cocoon.parameters["uriPrefix"] + cocoon.parameters["resourceId"];
var type = WebDAVHelper.propfindAsString(cache,uri, "http://hippo.nl/cms/1.0", "type", httpState);
if ( !(type == null || type.equals("asset") || type.equals("collection") || type.equals("") ) )
{
var workflowId = WebDAVHelper.propfindAsString(cache,uri, "http://hippo.nl/cms/1.0", "workflowId", httpState);
if ( !(workflowId == null || workflowId == 0 || workflowId.equals("")) )
{
usingWorkflowDo(function(workflowComp) {
var workflowName = workflowComp.getWorkflowName(workflowId);
if (workflowName == null)
{
startWorkflowForExistingDocument(cocoon.parameters["uriPrefix"], cocoon.parameters["resourceId"]);
}
});
}
}
}
handleForm();
/* Temporary disable caching due to a memory leak
usingTemporaryFileDo("availableActionsCache", ".xml", function(availableActionsCacheFile) {
usingBufferedFileOutputStreamDo(availableActionsCacheFile, function(outputStream) {
cocoon.processPipelineTo("/workflow/availableActions/" + cocoon.parameters["resourceId"], null, outputStream);
});
cocoon.request.setAttribute("availableActionsCache", availableActionsCacheFile.getCanonicalPath());
avalon.usingComponentDo(JobScheduler.ROLE, function(scheduler) {
var nowPlusTwoMinutes = Calendar.getInstance();
nowPlusTwoMinutes.add(Calendar.MINUTE, 2);
scheduler.fireJobAt(nowPlusTwoMinutes.getTime(), UIDGenerator.generateUID(), new FileDeletionTask(availableActionsCacheFile.getCanonicalPath()));
});
handleForm();
});
*/
}
function documentHistory()
{
var resourceId = cocoon.parameters["resourceId"];
var uriPrefix = cocoon.parameters["uriPrefix"];
var revertToVersion = cocoon.parameters["revertToVersion"];
var success = true;
if (revertToVersion != null && revertToVersion != "")
{
var params = new HashMap();
params.put("version", revertToVersion);
success = replaceWithVersion(uriPrefix, resourceId, params)
}
cocoon.sendPage("show-document-history(" + resourceId + ")", {success:success, status:lastResponseStatus});
}
// - Helper functions -------------------------------------------------
function usingBufferedFileOutputStreamDo(file, processor) {
var outputStream = null;
try {
outputStream = new BufferedOutputStream(new FileOutputStream(file));
processor(outputStream);
}
finally {
if (outputStream != null) {
outputStream.close();
}
}
}
function usingTemporaryFileDo(prefix, suffix, processor) {
var tempFile = null;
try {
tempFile = File.createTempFile(prefix, suffix);
tempFile.deleteOnExit();
processor(tempFile);
}
/** /// Insert/remove space after asterisks toe disable/enable code
catch (e) {
if (e instanceof Throwable) {
e.printStackTrace();
}
else {
print(e);
}
throw e;
}
/**/
finally {
if (tempFile != null) {
tempFile["delete"]();
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?