From 4d84074355d68b21d483973f80d0d57aa2f4161d Mon Sep 17 00:00:00 2001
From: gnaegi <none@none>
Date: Wed, 12 Oct 2016 17:00:32 +0200
Subject: [PATCH] OO-2275 implement REST method to set group folder access
 configuration

---
 .../olat/collaboration/CollaborationTools.java   | 16 ++++++++++++++++
 .../restapi/group/LearningGroupWebService.java   |  9 +++++++++
 .../restapi/support/vo/GroupConfigurationVO.java | 11 +++++++++++
 .../java/org/olat/restapi/GroupMgmtTest.java     |  7 +++++++
 4 files changed, 43 insertions(+)

diff --git a/src/main/java/org/olat/collaboration/CollaborationTools.java b/src/main/java/org/olat/collaboration/CollaborationTools.java
index 58b5cf2bf8e..f8620cec635 100644
--- a/src/main/java/org/olat/collaboration/CollaborationTools.java
+++ b/src/main/java/org/olat/collaboration/CollaborationTools.java
@@ -795,6 +795,22 @@ public class CollaborationTools implements Serializable {
 		}
 	}
 	
+	public void setToolAccess(String tool, Integer access) {
+		if (TOOL_FOLDER.equals(tool) && access != null) {
+			if (FOLDER_ACCESS_ALL == access.intValue()) {
+				saveFolderAccess(new Long(FOLDER_ACCESS_ALL));
+			} else if (FOLDER_ACCESS_OWNERS == access.intValue()) {
+				saveFolderAccess(new Long(FOLDER_ACCESS_OWNERS));
+			} 			
+		} else if (TOOL_CALENDAR.equals(tool) && access != null) {
+			if (CALENDAR_ACCESS_ALL == access.intValue()) {
+				saveCalendarAccess(new Long(CALENDAR_ACCESS_ALL));
+			} else if (CALENDAR_ACCESS_OWNERS == access.intValue()) {
+				saveCalendarAccess(new Long(CALENDAR_ACCESS_OWNERS));
+			} 						
+		}
+	}
+	
 	public Long lookupCalendarAccess() {
 		NarrowedPropertyManager npm = NarrowedPropertyManager.getInstance(ores);
 		Property property = npm.findProperty(null, null, PROP_CAT_BG_COLLABTOOLS, KEY_CALENDAR_ACCESS);
diff --git a/src/main/java/org/olat/restapi/group/LearningGroupWebService.java b/src/main/java/org/olat/restapi/group/LearningGroupWebService.java
index d02df87d30d..2420f99db51 100644
--- a/src/main/java/org/olat/restapi/group/LearningGroupWebService.java
+++ b/src/main/java/org/olat/restapi/group/LearningGroupWebService.java
@@ -25,6 +25,7 @@ import static org.olat.restapi.support.ObjectFactory.getInformation;
 import java.util.Collections;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.ws.rs.Consumes;
@@ -302,6 +303,14 @@ public class LearningGroupWebService {
 			tools.setToolEnabled(tool, enable);
 		}
 		
+		Map<String,Integer> toolsAccess = group.getToolsAccess();
+		if (toolsAccess != null) {
+			// ignore null for backward compatibility, don't change current configuration
+			for (String tool : toolsAccess.keySet()) {
+				tools.setToolAccess(tool, toolsAccess.get(tool));
+			}
+		}
+		
 		boolean ownersIntern = bg.isOwnersVisibleIntern();
 		if(group.getOwnersVisible() != null) {
 			ownersIntern = group.getOwnersVisible().booleanValue();
diff --git a/src/main/java/org/olat/restapi/support/vo/GroupConfigurationVO.java b/src/main/java/org/olat/restapi/support/vo/GroupConfigurationVO.java
index fea3ae018f2..55358fa3d87 100644
--- a/src/main/java/org/olat/restapi/support/vo/GroupConfigurationVO.java
+++ b/src/main/java/org/olat/restapi/support/vo/GroupConfigurationVO.java
@@ -19,6 +19,8 @@
  */
 package org.olat.restapi.support.vo;
 
+import java.util.Map;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -34,6 +36,7 @@ import javax.xml.bind.annotation.XmlRootElement;
 public class GroupConfigurationVO {
 	
 	private String[] tools;
+	private Map<String,Integer> toolsAccess;
 	private Boolean ownersVisible;
 	private Boolean participantsVisible;
 	private Boolean waitingListVisible;
@@ -50,6 +53,14 @@ public class GroupConfigurationVO {
 		this.tools = tools;
 	}
 	
+	public Map<String,Integer> getToolsAccess() {
+		return toolsAccess;
+	}
+	
+	public void setToolsAccess(Map<String,Integer> toolsAccess) {
+		this.toolsAccess = toolsAccess;
+	}
+	
 	public Boolean getOwnersVisible() {
 		return ownersVisible;
 	}
diff --git a/src/test/java/org/olat/restapi/GroupMgmtTest.java b/src/test/java/org/olat/restapi/GroupMgmtTest.java
index ce875fff383..d99cfc3cb9e 100644
--- a/src/test/java/org/olat/restapi/GroupMgmtTest.java
+++ b/src/test/java/org/olat/restapi/GroupMgmtTest.java
@@ -36,6 +36,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
@@ -439,6 +440,9 @@ public class GroupMgmtTest extends OlatJerseyTestCase {
 		//update the configuration
 		GroupConfigurationVO configVo = new GroupConfigurationVO();
 		configVo.setTools(new String[]{ "hasFolder", "hasNews" });
+		HashMap<String, Integer> toolsAccess = new HashMap<String, Integer>();
+		toolsAccess.put("hasFolder", new Integer(CollaborationTools.FOLDER_ACCESS_OWNERS));
+		configVo.setToolsAccess(toolsAccess);
 		configVo.setOwnersVisible(Boolean.TRUE);
 		configVo.setParticipantsVisible(Boolean.FALSE);
 		URI configRequest = UriBuilder.fromUri(getContextURI()).path("groups").path(newGroupVo.getKey().toString()).path("configuration").build();
@@ -466,6 +470,9 @@ public class GroupMgmtTest extends OlatJerseyTestCase {
 		assertFalse(tools.isToolEnabled(CollaborationTools.TOOL_FORUM));
 		assertFalse(tools.isToolEnabled(CollaborationTools.TOOL_PORTFOLIO));
 		assertFalse(tools.isToolEnabled(CollaborationTools.TOOL_WIKI));
+		// Check collab tools access configuration
+		assertTrue(tools.lookupFolderAccess().intValue() == CollaborationTools.FOLDER_ACCESS_OWNERS);		// modified
+		assertTrue(tools.lookupCalendarAccess().intValue() == CollaborationTools.CALENDAR_ACCESS_OWNERS); 	// default
 		//check display members
 		assertTrue(bg.isOwnersVisibleIntern());
 		assertFalse(bg.isParticipantsVisibleIntern());
-- 
GitLab