diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/person/people.post.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/person/people.post.desc.xml
index 7c9dd8906b..d9f7f15fd6 100644
--- a/config/alfresco/templates/webscripts/org/alfresco/repository/person/people.post.desc.xml
+++ b/config/alfresco/templates/webscripts/org/alfresco/repository/person/people.post.desc.xml
@@ -3,6 +3,6 @@
Adds a new person based on the details provided.
/api/people
- user
+ admin
required
\ No newline at end of file
diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/person/people.post.js b/config/alfresco/templates/webscripts/org/alfresco/repository/person/people.post.js
index 0a30506090..fd84ece1fe 100644
--- a/config/alfresco/templates/webscripts/org/alfresco/repository/person/people.post.js
+++ b/config/alfresco/templates/webscripts/org/alfresco/repository/person/people.post.js
@@ -23,7 +23,7 @@ function main()
person.properties["firstName"] = json.get("firstName");
person.properties["lastName"] = json.get("lastName");
person.properties["organization"] = json.get("organisation");
- person.properties["jobTitle"] = json.get("jobTitle");
+ person.properties["jobtitle"] = json.get("jobtitle");
person.properties["email"] = json.get("email");
person.save();
diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/person/person.lib.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/person/person.lib.ftl
index 7041ee0598..57b21ce94a 100644
--- a/config/alfresco/templates/webscripts/org/alfresco/repository/person/person.lib.ftl
+++ b/config/alfresco/templates/webscripts/org/alfresco/repository/person/person.lib.ftl
@@ -23,9 +23,9 @@
"organisation" : undefined,
#if>
<#if person.properties.jobtitle??>
- "jobTitle" : "${person.properties.jobtitle}",
+ "jobtitle" : "${person.properties.jobtitle}",
<#else>
- "jobTitle" : undefined,
+ "jobtitle" : undefined,
#if>
<#if person.properties.email??>
"email" : "${person.properties.email}"
diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/person/person.put.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/person/person.put.desc.xml
new file mode 100644
index 0000000000..a8c274c243
--- /dev/null
+++ b/config/alfresco/templates/webscripts/org/alfresco/repository/person/person.put.desc.xml
@@ -0,0 +1,8 @@
+
+ Update Person
+ Update the details of a person.
+ /api/people/{userName}
+
+ user
+ required
+
\ No newline at end of file
diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/person/person.put.js b/config/alfresco/templates/webscripts/org/alfresco/repository/person/person.put.js
new file mode 100644
index 0000000000..435b34b052
--- /dev/null
+++ b/config/alfresco/templates/webscripts/org/alfresco/repository/person/person.put.js
@@ -0,0 +1,34 @@
+function main()
+{
+ // Extract the person's user name from the URL
+ var userName = url.extension;
+ var person = people.getPerson(userName);
+
+ // if person is found matching the given user name
+ // then update that person's details with the details
+ // provided within the JSON object passed in
+ if (person != null)
+ {
+ // Update the person's details
+ person.properties["title"] = json.get("title");
+ person.properties["firstName"] = json.get("firstName");
+ person.properties["lastName"] = json.get("lastName");
+ person.properties["organization"] = json.get("organisation");
+ person.properties["jobtitle"] = json.get("jobtitle");
+ person.properties["email"] = json.get("email");
+ person.save();
+
+ // Put the updated person on the model to pass to the template
+ model.person = person;
+ }
+ // else if no person was found matching the given user name,
+ // then return HTTP error status "not found"
+ else
+ {
+ status.setCode(status.STATUS_NOT_FOUND, "Person " + userName
+ + " does not exist");
+ return;
+ }
+}
+
+main();
\ No newline at end of file
diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/person/person.put.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/person/person.put.json.ftl
new file mode 100644
index 0000000000..f717672ded
--- /dev/null
+++ b/config/alfresco/templates/webscripts/org/alfresco/repository/person/person.put.json.ftl
@@ -0,0 +1,2 @@
+<#import "person.lib.ftl" as personLib/>
+<@personLib.personJSON person=person/>
\ No newline at end of file
diff --git a/source/java/org/alfresco/repo/web/scripts/person/PersonServiceTest.java b/source/java/org/alfresco/repo/web/scripts/person/PersonServiceTest.java
index 07d0d0326e..ccd9601059 100644
--- a/source/java/org/alfresco/repo/web/scripts/person/PersonServiceTest.java
+++ b/source/java/org/alfresco/repo/web/scripts/person/PersonServiceTest.java
@@ -33,6 +33,7 @@ import org.alfresco.repo.web.scripts.BaseWebScriptTest;
import org.alfresco.service.cmr.security.AuthenticationService;
import org.alfresco.service.cmr.security.PersonService;
import org.alfresco.util.PropertyMap;
+import org.alfresco.web.scripts.Status;
import org.apache.commons.lang.RandomStringUtils;
import org.json.JSONObject;
import org.springframework.mock.web.MockHttpServletResponse;
@@ -122,6 +123,27 @@ public class PersonServiceTest extends BaseWebScriptTest
this.createdPeople.clear();
}
+ public void testUpdatePerson() throws Exception
+ {
+ // Create a new person
+ String userName = RandomStringUtils.randomNumeric(6);
+ createPerson(userName, "myTitle", "myFirstName", "myLastName", "myOrganisation",
+ "myJobTitle", "firstName.lastName@email.com", "myBio", "images/avatar.jpg", 200);
+
+ // Update the person's details
+ JSONObject result = updatePerson(userName, "updatedTitle", "updatedFirstName", "updatedLastName",
+ "updatedOrganisation", "updatedJobTitle", "updatedFN.updatedLN@email.com", "updatedBio",
+ "images/updatedAvatar.jpg", 200);
+
+ assertEquals(userName, result.get("userName"));
+ assertEquals("updatedTitle", result.get("title"));
+ assertEquals("updatedFirstName", result.get("firstName"));
+ assertEquals("updatedLastName", result.get("lastName"));
+ assertEquals("updatedOrganisation", result.get("organisation"));
+ assertEquals("updatedJobTitle", result.get("jobtitle"));
+ assertEquals("updatedFN.updatedLN@email.com", result.get("email"));
+ }
+
public void testCreatePerson() throws Exception
{
String userName = RandomStringUtils.randomNumeric(6);
@@ -134,7 +156,7 @@ public class PersonServiceTest extends BaseWebScriptTest
assertEquals("myFirstName", result.get("firstName"));
assertEquals("myLastName", result.get("lastName"));
assertEquals("myOrganisation", result.get("organisation"));
- assertEquals("myJobTitle", result.get("jobTitle"));
+ assertEquals("myJobTitle", result.get("jobtitle"));
assertEquals("firstName.lastName@email.com", result.get("email"));
// Check for duplicate names
@@ -142,6 +164,33 @@ public class PersonServiceTest extends BaseWebScriptTest
"myJobTitle", "myEmail", "myBio", "images/avatar.jpg", 500);
}
+ private JSONObject updatePerson(String userName, String title, String firstName, String lastName,
+ String organisation, String jobTitle, String email, String bio, String avatarUrl, int expectedStatus)
+ throws Exception
+ {
+ // switch to admin user to create a person
+ String currentUser = this.authenticationComponent.getCurrentUserName();
+ String adminUser = this.authenticationComponent.getSystemUserName();
+ this.authenticationComponent.setCurrentUser(adminUser);
+
+ JSONObject person = new JSONObject();
+ person.put("userName", userName);
+ person.put("title", title);
+ person.put("firstName", firstName);
+ person.put("lastName", lastName);
+ person.put("organisation", organisation);
+ person.put("jobtitle", jobTitle);
+ person.put("email", email);
+
+ MockHttpServletResponse response = putRequest(
+ URL_PEOPLE + "/" + userName, expectedStatus, person.toString(), "application/json");
+
+ // switch back to non-admin user
+ this.authenticationComponent.setCurrentUser(currentUser);
+
+ return new JSONObject(response.getContentAsString());
+ }
+
private JSONObject createPerson(String userName, String title, String firstName, String lastName,
String organisation, String jobTitle, String email, String bio, String avatarUrl, int expectedStatus)
throws Exception
@@ -157,7 +206,7 @@ public class PersonServiceTest extends BaseWebScriptTest
person.put("firstName", firstName);
person.put("lastName", lastName);
person.put("organisation", organisation);
- person.put("jobTitle", jobTitle);
+ person.put("jobtitle", jobTitle);
person.put("email", email);
MockHttpServletResponse response = postRequest(URL_PEOPLE, expectedStatus, person.toString(), "application/json");
@@ -187,7 +236,7 @@ public class PersonServiceTest extends BaseWebScriptTest
String userName = RandomStringUtils.randomNumeric(6);
JSONObject result = createPerson(userName, "myTitle", "myFirstName", "myLastName", "myOrganisation",
"myJobTitle", "myEmailAddress", "myBio", "images/avatar.jpg", 200);
- response = getRequest(URL_PEOPLE + "/" + userName, 200);
+ response = getRequest(URL_PEOPLE + "/" + userName, Status.STATUS_OK);
}
}