diff --git a/src/main/java/org/olat/restapi/group/LearningGroupWebService.java b/src/main/java/org/olat/restapi/group/LearningGroupWebService.java index 7527270fccfe87c7a3582014b5f0fcdf8d75039e..2178c83b88f7176c9a3ab3e33d6cca1923bf6399 100644 --- a/src/main/java/org/olat/restapi/group/LearningGroupWebService.java +++ b/src/main/java/org/olat/restapi/group/LearningGroupWebService.java @@ -71,6 +71,7 @@ import org.olat.modules.fo.restapi.ForumWebService; import org.olat.modules.wiki.restapi.GroupWikiWebService; import org.olat.restapi.security.RestSecurityHelper; import org.olat.restapi.support.ObjectFactory; +import org.olat.restapi.support.vo.GroupConfigurationVO; import org.olat.restapi.support.vo.GroupInfoVO; import org.olat.restapi.support.vo.GroupVO; import org.olat.user.restapi.UserVO; @@ -263,6 +264,58 @@ public class LearningGroupWebService { return Response.ok(savedVO).build(); } + @POST + @Path("{groupKey}/configuration") + public Response postGroupConfiguration(@PathParam("groupKey") Long groupKey, final GroupConfigurationVO group, @Context HttpServletRequest request) { + if(!isGroupManager(request)) { + return Response.serverError().status(Status.UNAUTHORIZED).build(); + } + + final BusinessGroupService bgs = CoreSpringFactory.getImpl(BusinessGroupService.class); + final BusinessGroup bg = bgs.loadBusinessGroup(groupKey); + if(bg == null) { + return Response.serverError().status(Status.NOT_FOUND).build(); + } + + String[] selectedTools = group.getTools(); + if(selectedTools == null) { + selectedTools = new String[0]; + } + CollaborationTools tools = CollaborationToolsFactory.getInstance().getOrCreateCollaborationTools(bg); + for (int i=CollaborationTools.TOOLS.length; i-->0; ) { + boolean enable = false; + String tool = CollaborationTools.TOOLS[i]; + for(String selectedTool:selectedTools) { + if(tool.equals(selectedTool)) { + enable = true; + } + } + tools.setToolEnabled(tool, enable); + } + + DisplayMembers displayMembers = bgs.getDisplayMembers(bg); + if(group.getOwnersVisible() != null) { + displayMembers.setShowOwners(group.getOwnersVisible().booleanValue()); + } + if(group.getParticipantsVisible() != null) { + displayMembers.setShowParticipants(group.getParticipantsVisible().booleanValue()); + } + if(group.getWaitingListVisible() != null) { + displayMembers.setShowWaitingList(group.getWaitingListVisible().booleanValue()); + } + if(group.getOwnersPublic() != null) { + displayMembers.setOwnersPublic(group.getOwnersPublic().booleanValue()); + } + if(group.getParticipantsPublic() != null) { + displayMembers.setParticipantsPublic(group.getParticipantsPublic().booleanValue()); + } + if(group.getWaitingListPublic() != null) { + displayMembers.setWaitingListPublic(group.getWaitingListPublic().booleanValue()); + } + bgs.updateDisplayMembers(bg, displayMembers); + return Response.ok().build(); + } + /** * Deletes the business group specified by the groupKey. * @response.representation.200.doc The business group is deleted diff --git a/src/main/java/org/olat/restapi/support/vo/GroupConfigurationVO.java b/src/main/java/org/olat/restapi/support/vo/GroupConfigurationVO.java new file mode 100644 index 0000000000000000000000000000000000000000..fea3ae018f22dce7d8b6d3a0faa9ae6b19fe7278 --- /dev/null +++ b/src/main/java/org/olat/restapi/support/vo/GroupConfigurationVO.java @@ -0,0 +1,100 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ +package org.olat.restapi.support.vo; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; + + +/** + * + * @author srosse + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlRootElement(name = "groupVO") +public class GroupConfigurationVO { + + private String[] tools; + private Boolean ownersVisible; + private Boolean participantsVisible; + private Boolean waitingListVisible; + + private Boolean ownersPublic; + private Boolean participantsPublic; + private Boolean waitingListPublic; + + public String[] getTools() { + return tools; + } + + public void setTools(String[] tools) { + this.tools = tools; + } + + public Boolean getOwnersVisible() { + return ownersVisible; + } + + public void setOwnersVisible(Boolean ownersVisible) { + this.ownersVisible = ownersVisible; + } + + public Boolean getParticipantsVisible() { + return participantsVisible; + } + + public void setParticipantsVisible(Boolean participantsVisible) { + this.participantsVisible = participantsVisible; + } + + public Boolean getWaitingListVisible() { + return waitingListVisible; + } + + public void setWaitingListVisible(Boolean waitingListVisible) { + this.waitingListVisible = waitingListVisible; + } + + public Boolean getOwnersPublic() { + return ownersPublic; + } + + public void setOwnersPublic(Boolean ownersPublic) { + this.ownersPublic = ownersPublic; + } + + public Boolean getParticipantsPublic() { + return participantsPublic; + } + + public void setParticipantsPublic(Boolean participantsPublic) { + this.participantsPublic = participantsPublic; + } + + public Boolean getWaitingListPublic() { + return waitingListPublic; + } + + public void setWaitingListPublic(Boolean waitingListPublic) { + this.waitingListPublic = waitingListPublic; + } +} diff --git a/src/test/java/org/olat/restapi/GroupMgmtTest.java b/src/test/java/org/olat/restapi/GroupMgmtTest.java index 97bea4a93b90c2d2612350a0221de525198d6274..a28590edd366502307eeae645c128730c6980d91 100644 --- a/src/test/java/org/olat/restapi/GroupMgmtTest.java +++ b/src/test/java/org/olat/restapi/GroupMgmtTest.java @@ -48,6 +48,7 @@ import org.apache.http.client.methods.HttpDelete; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpPut; +import org.apache.http.util.EntityUtils; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.type.TypeReference; import org.junit.After; @@ -78,6 +79,7 @@ import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryManager; import org.olat.resource.OLATResource; import org.olat.resource.OLATResourceManager; +import org.olat.restapi.support.vo.GroupConfigurationVO; import org.olat.restapi.support.vo.GroupInfoVO; import org.olat.restapi.support.vo.GroupVO; import org.olat.test.JunitTestHelper; @@ -441,6 +443,60 @@ public class GroupMgmtTest extends OlatJerseyTestCase { assertEquals(bg.getDescription(), "rest-g5 description"); } + @Test + public void testCreateCourseGroupWithConfiguration() throws IOException, URISyntaxException { + assertTrue(conn.login("administrator", "openolat")); + + //create the group + GroupVO vo = new GroupVO(); + vo.setName("rest-g6-new"); + vo.setDescription("rest-g6 description"); + vo.setType("BuddyGroup"); + URI request = UriBuilder.fromUri(getContextURI()).path("groups").build(); + HttpPut method = conn.createPut(request, MediaType.APPLICATION_JSON, true); + conn.addJsonEntity(method, vo); + + HttpResponse response = conn.execute(method); + assertTrue(response.getStatusLine().getStatusCode() == 200 || response.getStatusLine().getStatusCode() == 201); + GroupVO newGroupVo = conn.parse(response, GroupVO.class); + assertNotNull(newGroupVo); + + //update the configuration + GroupConfigurationVO configVo = new GroupConfigurationVO(); + configVo.setTools(new String[]{ "hasFolder", "hasNews" }); + configVo.setOwnersVisible(Boolean.TRUE); + configVo.setParticipantsVisible(Boolean.FALSE); + URI configRequest = UriBuilder.fromUri(getContextURI()).path("groups").path(newGroupVo.getKey().toString()).path("configuration").build(); + HttpPost configMethod = conn.createPost(configRequest, MediaType.APPLICATION_JSON, true); + conn.addJsonEntity(configMethod, configVo); + HttpResponse configResponse = conn.execute(configMethod); + assertTrue(configResponse.getStatusLine().getStatusCode() == 200 || configResponse.getStatusLine().getStatusCode() == 201); + EntityUtils.consume(configResponse.getEntity()); + + //check group + + BusinessGroup bg = businessGroupService.loadBusinessGroup(newGroupVo.getKey()); + assertNotNull(bg); + assertEquals(bg.getKey(), newGroupVo.getKey()); + assertEquals(bg.getName(), "rest-g6-new"); + assertEquals(bg.getDescription(), "rest-g6 description"); + //check collaboration tools configuration + CollaborationTools tools = CollaborationToolsFactory.getInstance().getCollaborationToolsIfExists(bg); + assertNotNull(tools); + assertTrue(tools.isToolEnabled(CollaborationTools.TOOL_FOLDER)); + assertTrue(tools.isToolEnabled(CollaborationTools.TOOL_NEWS)); + assertFalse(tools.isToolEnabled(CollaborationTools.TOOL_CALENDAR)); + assertFalse(tools.isToolEnabled(CollaborationTools.TOOL_CHAT)); + assertFalse(tools.isToolEnabled(CollaborationTools.TOOL_CONTACT)); + assertFalse(tools.isToolEnabled(CollaborationTools.TOOL_FORUM)); + assertFalse(tools.isToolEnabled(CollaborationTools.TOOL_PORTFOLIO)); + assertFalse(tools.isToolEnabled(CollaborationTools.TOOL_WIKI)); + //check display members + DisplayMembers displayMembers = businessGroupService.getDisplayMembers(bg); + assertTrue(displayMembers.isShowOwners()); + assertFalse(displayMembers.isShowParticipants()); + assertFalse(displayMembers.isShowWaitingList()); + } @Test public void testDeleteCourseGroup() throws IOException, URISyntaxException {