From 2a50eabd5b0ac8d9ceb02493aa8ba4f6ce0ef4c8 Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Wed, 26 Jun 2013 12:10:58 +0200
Subject: [PATCH] OMA-112: add write permission flag in group infos

---
 .../restapi/group/LearningGroupWebService.java     |  6 +++---
 .../org/olat/restapi/group/MyGroupWebService.java  |  2 +-
 .../org/olat/restapi/support/ObjectFactory.java    | 14 +++++++++++++-
 .../org/olat/restapi/support/vo/GroupInfoVO.java   | 11 +++++++++++
 4 files changed, 28 insertions(+), 5 deletions(-)

diff --git a/src/main/java/org/olat/restapi/group/LearningGroupWebService.java b/src/main/java/org/olat/restapi/group/LearningGroupWebService.java
index 77a06c5aba3..af915ad8d15 100644
--- a/src/main/java/org/olat/restapi/group/LearningGroupWebService.java
+++ b/src/main/java/org/olat/restapi/group/LearningGroupWebService.java
@@ -361,15 +361,15 @@ public class LearningGroupWebService {
 		if(bg == null) {
 			return Response.serverError().status(Status.NOT_FOUND).build();
 		}
-		
+
+		Identity identity = RestSecurityHelper.getIdentity(request);
 		if(!isGroupManager(request)) {
-			Identity identity = RestSecurityHelper.getIdentity(request);
 			if(!bgs.isIdentityInBusinessGroup(identity, bg)) {
 				return Response.serverError().status(Status.UNAUTHORIZED).build();
 			}
 		}
 		
-		GroupInfoVO info = getInformation(bg);
+		GroupInfoVO info = getInformation(identity, bg);
 		return Response.ok(info).build();
 	}
 	
diff --git a/src/main/java/org/olat/restapi/group/MyGroupWebService.java b/src/main/java/org/olat/restapi/group/MyGroupWebService.java
index a6d420e2ee6..47fe60fc49b 100644
--- a/src/main/java/org/olat/restapi/group/MyGroupWebService.java
+++ b/src/main/java/org/olat/restapi/group/MyGroupWebService.java
@@ -140,7 +140,7 @@ public class MyGroupWebService {
 			int count = 0;
 			GroupInfoVO[] groupVOs = new GroupInfoVO[groups.size()];
 			for(BusinessGroup group:groups) {
-				groupVOs[count++] = ObjectFactory.getInformation(group);
+				groupVOs[count++] = ObjectFactory.getInformation(retrievedUser, group);
 			}
 			GroupInfoVOes voes = new GroupInfoVOes();
 			voes.setGroups(groupVOs);
diff --git a/src/main/java/org/olat/restapi/support/ObjectFactory.java b/src/main/java/org/olat/restapi/support/ObjectFactory.java
index 149775f98fe..014f678e900 100644
--- a/src/main/java/org/olat/restapi/support/ObjectFactory.java
+++ b/src/main/java/org/olat/restapi/support/ObjectFactory.java
@@ -22,9 +22,11 @@ package org.olat.restapi.support;
 import javax.ws.rs.core.EntityTag;
 
 import org.olat.basesecurity.Authentication;
+import org.olat.basesecurity.BaseSecurityManager;
 import org.olat.collaboration.CollaborationTools;
 import org.olat.collaboration.CollaborationToolsFactory;
 import org.olat.core.gui.components.form.ValidationError;
+import org.olat.core.id.Identity;
 import org.olat.core.id.OLATResourceable;
 import org.olat.core.util.resource.OresHelper;
 import org.olat.course.CourseModule;
@@ -65,7 +67,7 @@ public class ObjectFactory {
 		return vo;
 	}
 	
-	public static GroupInfoVO getInformation(BusinessGroup grp) {
+	public static GroupInfoVO getInformation(Identity identity, BusinessGroup grp) {
 		GroupInfoVO vo = new GroupInfoVO();
 		vo.setKey(grp.getKey());
 		vo.setName(grp.getName());
@@ -87,6 +89,16 @@ public class ObjectFactory {
 		
 		boolean hasFolder = collabTools.isToolEnabled(CollaborationTools.TOOL_FOLDER);
 		vo.setHasFolder(hasFolder);
+		boolean hasFolderWrite = hasFolder;
+		if(hasFolder) {
+			Long access = collabTools.lookupFolderAccess();
+			if(access != null && access.intValue() == CollaborationTools.FOLDER_ACCESS_OWNERS) {
+				//is owner?
+				hasFolderWrite = BaseSecurityManager.getInstance().isIdentityInSecurityGroup(identity, grp.getOwnerGroup());
+			}
+		}
+		vo.setFolderWrite(hasFolderWrite);
+		
 		return vo;
 	}
 	
diff --git a/src/main/java/org/olat/restapi/support/vo/GroupInfoVO.java b/src/main/java/org/olat/restapi/support/vo/GroupInfoVO.java
index 7e28569cdc8..768a608329e 100644
--- a/src/main/java/org/olat/restapi/support/vo/GroupInfoVO.java
+++ b/src/main/java/org/olat/restapi/support/vo/GroupInfoVO.java
@@ -21,6 +21,7 @@ package org.olat.restapi.support.vo;
 
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlRootElement;
 
 /**
@@ -40,6 +41,8 @@ public class GroupInfoVO extends GroupVO {
 	private Long forumKey;
 	private Boolean hasWiki = Boolean.FALSE;
 	private Boolean hasFolder = Boolean.FALSE;
+	@XmlAttribute(name="folderWrite", required=false)
+	private boolean folderWrite;
 	
 	public GroupInfoVO() {
 		//make JAXB happy
@@ -76,4 +79,12 @@ public class GroupInfoVO extends GroupVO {
 	public void setHasFolder(Boolean hasFolder) {
 		this.hasFolder = hasFolder;
 	}
+
+	public boolean isFolderWrite() {
+		return folderWrite;
+	}
+
+	public void setFolderWrite(boolean folderWrite) {
+		this.folderWrite = folderWrite;
+	}
 }
-- 
GitLab