Merged V3.0 to HEAD

12251: Fix for wiki parsing regression
  12253: More regression fixes in wiki parser
  12255: Update Share web session timeout value to 60 minutes.
  12289: Share wiki - ETHREEOH-1021, ETHREEOH-1022, ETHREEOH-880, ETHREEOH-1032
  12290: Additional to r12289
  12344: Fix for ETHREEOH-1066 - Wiki page editing no longer broken for page titles that don't exist yet.
  12355: ETHREEOH-984: External users in Share cannot edit profile
  12359: Fixed typo in Flash/HTML uploader type selection
  12364: ETHREEOH-1032 - Impossibility to delete Wiki page


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@12542 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Jan Vonka
2008-12-23 12:23:50 +00:00
parent 9cff0c89db
commit 0405e3adbb
4 changed files with 128 additions and 50 deletions

View File

@@ -24,12 +24,15 @@ function getTemplateArgs(params)
/* Format and return error object */ /* Format and return error object */
function jsonError(errorString) function jsonError(errorString)
{ {
/*
var obj = var obj =
{ {
"error": errorString "error": errorString
}; };
return obj; return obj;
*/
status.setCode(status.STATUS_BAD_REQUEST, errorString);
} }
// NOTE: may need a custom content type for a wiki entry // NOTE: may need a custom content type for a wiki entry

View File

@@ -9,24 +9,25 @@
function getTemplateParams() function getTemplateParams()
{ {
// Grab the URI parameters // Grab the URI parameters
var siteId = "" + url.templateArgs.siteId; var siteId = "" + url.templateArgs.siteId;
var pageTitle = "" + url.templateArgs.pageTitle; var pageTitle = "" + url.templateArgs.pageTitle;
if (siteId === null || siteId.length === 0) if (siteId === null || siteId.length === 0)
{ {
return null; return null;
} }
if (pageTitle === null || pageTitle.length === 0) if (pageTitle === null || pageTitle.length === 0)
{ {
return null; return null;
} }
return { return (
"siteId": siteId, {
"pageTitle": pageTitle "siteId": siteId,
}; "pageTitle": pageTitle
});
} }
function update() function update()
@@ -34,14 +35,14 @@ function update()
var params = getTemplateArgs(["siteId", "pageTitle"]); var params = getTemplateArgs(["siteId", "pageTitle"]);
if (params === null) if (params === null)
{ {
return jsonError("No parameters supplied"); return jsonError("No parameters supplied");
} }
// Get the site // Get the site
var site = siteService.getSite(params.siteId); var site = siteService.getSite(params.siteId);
if (site === null) if (site === null)
{ {
return jsonError("Could not find site: " + siteId); return jsonError("Could not find site: " + siteId);
} }
var wiki = getWikiContainer(site); var wiki = getWikiContainer(site);
@@ -49,38 +50,47 @@ function update()
{ {
return jsonError("Could not locate wiki container"); return jsonError("Could not locate wiki container");
} }
var page = wiki.childByNamePath(params.pageTitle), activityType; var page = wiki.childByNamePath(params.pageTitle), activityType;
// Create the page if it doesn't exist // Create the page if it doesn't exist
if (page === null) if (page === null)
{ {
page = createWikiPage(params.pageTitle, wiki, page = createWikiPage(params.pageTitle, wiki,
{ {
content: json.get("pagecontent"), content: json.get("pagecontent"),
versionable: true versionable: true
}); });
activityType = "org.alfresco.wiki.page-created"; activityType = "org.alfresco.wiki.page-created";
} }
else else
{ {
// Create a new revision of the page // Check the version of the page being submitted against the version now in the repo, or a forced save
var workingCopy = page.checkout(); if (pageVersionMatchesSubmitted(page) || json.has("forceSave"))
workingCopy.content = json.get("pagecontent"); {
workingCopy.checkin(); // Create a new revision of the page
var workingCopy = page.checkout();
activityType = "org.alfresco.wiki.page-edited"; workingCopy.content = json.get("pagecontent");
workingCopy.checkin();
activityType = "org.alfresco.wiki.page-edited";
}
else
{
status.setCode(status.STATUS_CONFLICT, "Repository version is newer.");
return;
}
} }
var data = var data =
{ {
title: params.pageTitle.replace(/_/g, " "), title: params.pageTitle.replace(/_/g, " "),
page: json.get("page") + "?title=" + params.pageTitle page: json.get("page") + "?title=" + params.pageTitle
} }
// Log activity // Log activity
activities.postActivity(activityType, params.siteId, "wiki", jsonUtils.toJSONString(data)); activities.postActivity(activityType, params.siteId, "wiki", jsonUtils.toJSONString(data));
if (!json.isNull("tags")) if (!json.isNull("tags"))
{ {
var tags = Array(json.get("tags")); var tags = Array(json.get("tags"));
if (tags) if (tags)
@@ -90,7 +100,7 @@ function update()
// string and call the (native) method split // string and call the (native) method split
var tags = []; var tags = [];
var tmp = json.get("tags"); var tmp = json.get("tags");
for (var x=0; x < tmp.length(); x++) for (var x = 0, xx = tmp.length(); x < xx; x++)
{ {
tags.push(tmp.get(x)); tags.push(tmp.get(x));
} }
@@ -102,14 +112,64 @@ function update()
} }
page.save(); page.save();
} }
// NOTE: for now we return the raw page content and do the transformation // NOTE: for now we return the raw page content and do the transformation
// of any wiki markup on the client. This is because the edit view needs to display // of any wiki markup on the client. This is because the edit view needs to display
// the raw content (for editing) whereas the page view needs to display the rendered content. // the raw content (for editing) whereas the page view needs to display the rendered content.
return { return (
page: page, {
tags: page.tags page: page,
} tags: page.tags
});
}
/**
* Checks whether the current repository version is newer than a submitted version number.
* Returns:
* false if currentVersion is older than repoVersion
* true otherwise
*/
function pageVersionMatchesSubmitted(page)
{
var currentVersion = 0, repoVersion = 0;
if (json.has("currentVersion"))
{
currentVersion = json.get("currentVersion");
}
if (page.hasAspect("cm:versionable"))
{
repoVersion = getLatestVersion(page.versionHistory);
}
return (sortByLabel(
{ label: repoVersion},
{ label: currentVersion }
) != -1);
}
function sortByLabel(version1, version2)
{
var major1 = new Number(version1.label.substring(0, version1.label.indexOf(".")));
var major2 = new Number(version2.label.substring(0, version2.label.indexOf(".")));
if (major1 - 0 == major2 - 0)
{
var minor1 = new Number(version1.label.substring(version1.label.indexOf(".")+1));
var minor2 = new Number(version2.label.substring(version2.label.indexOf(".")+1));
return (minor1 < minor2) ? 1 : (minor1 > minor2) ? -1 : 0;
}
else
{
return (major1 < major2) ? 1 : -1;
}
}
function getLatestVersion(versionHistory)
{
versionHistory.sort(sortByLabel);
return versionHistory[0].label;
} }
model.result = update(); model.result = update();

View File

@@ -351,6 +351,7 @@
parent="webscript"> parent="webscript">
<property name="workflowService" ref="WorkflowService"/> <property name="workflowService" ref="WorkflowService"/>
<property name="personService" ref="PersonService"/> <property name="personService" ref="PersonService"/>
<property name="permissionService" ref="PermissionService"/>
<property name="authenticationService" ref="AuthenticationService"/> <property name="authenticationService" ref="AuthenticationService"/>
<property name="mutableAuthenticationDao" ref="authenticationDao"/> <property name="mutableAuthenticationDao" ref="authenticationDao"/>
<property name="siteService" ref="SiteService"/> <property name="siteService" ref="SiteService"/>

View File

@@ -43,6 +43,7 @@ import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter; import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter;
import org.alfresco.service.cmr.security.AuthenticationService; import org.alfresco.service.cmr.security.AuthenticationService;
import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.cmr.security.PersonService; import org.alfresco.service.cmr.security.PersonService;
import org.alfresco.service.cmr.workflow.WorkflowDefinition; import org.alfresco.service.cmr.workflow.WorkflowDefinition;
import org.alfresco.service.cmr.workflow.WorkflowException; import org.alfresco.service.cmr.workflow.WorkflowException;
@@ -100,6 +101,7 @@ public class Invite extends DeclarativeWebScript
private WorkflowService workflowService; private WorkflowService workflowService;
private PersonService personService; private PersonService personService;
private AuthenticationService authenticationService; private AuthenticationService authenticationService;
private PermissionService permissionService;
private MutableAuthenticationDao mutableAuthenticationDao; private MutableAuthenticationDao mutableAuthenticationDao;
private SiteService siteService; private SiteService siteService;
private NodeService nodeService; private NodeService nodeService;
@@ -214,6 +216,16 @@ public class Invite extends DeclarativeWebScript
this.namespaceService = namespaceService; this.namespaceService = namespaceService;
} }
/**
* Set the permission service
*
* @param permissionService the permission service
*/
public void setPermissionService(PermissionService permissionService)
{
this.permissionService = permissionService;
}
/* /*
* (non-Javadoc) * (non-Javadoc)
* *
@@ -419,11 +431,13 @@ public class Invite extends DeclarativeWebScript
properties.put(ContentModel.PROP_LASTNAME, inviteeLastName); properties.put(ContentModel.PROP_LASTNAME, inviteeLastName);
properties.put(ContentModel.PROP_EMAIL, inviteeEmail); properties.put(ContentModel.PROP_EMAIL, inviteeEmail);
final String finalUserName = inviteeUserName;
AuthenticationUtil.runAs(new RunAsWork<Object>() AuthenticationUtil.runAs(new RunAsWork<Object>()
{ {
public Object doWork() throws Exception public Object doWork() throws Exception
{ {
personService.createPerson(properties); NodeRef person = personService.createPerson(properties);
permissionService.setPermission(person, finalUserName, PermissionService.ALL_PERMISSIONS, true);
return null; return null;
} }