diff --git a/meetings/tool/src/main/java/org/sakaiproject/meetings/controller/MeetingsController.java b/meetings/tool/src/main/java/org/sakaiproject/meetings/controller/MeetingsController.java index f16a2952729..bc45c3e146a 100644 --- a/meetings/tool/src/main/java/org/sakaiproject/meetings/controller/MeetingsController.java +++ b/meetings/tool/src/main/java/org/sakaiproject/meetings/controller/MeetingsController.java @@ -493,12 +493,32 @@ public Meeting updateMeeting(@RequestBody MeetingData data, @PathVariable String meeting.setDescription(data.getDescription()); meeting.setStartDate(Instant.parse(data.getStartDate())); meeting.setEndDate(Instant.parse(data.getEndDate())); - + + List coorganizerEmails = new ArrayList<>(); if (MS_TEAMS.equals(data.getProvider())) { String organizerEmail = meetingService.getMeetingProperty(meeting, ORGANIZER_USER); String onlineMeetingId = meetingService.getMeetingProperty(meeting, ONLINE_MEETING_ID); + + // Updating coorganizers + if (data.isCoorganizersEnabled()) { + List coorganizers = sakaiProxy.getSite(data.getSiteId()).getMembers() + .stream() + .filter(u -> { + boolean canUpdate = sakaiProxy.canUpdateSite("/site/" + data.getSiteId(), u.getUserId()); + log.debug("User: " + u.getUserId() + " canUpdate: " + canUpdate); + return canUpdate; + }) + .collect(Collectors.toList()); + + coorganizers.forEach(c -> log.debug("Filtered Coorganizer: " + c.getUserId())); + + coorganizerEmails = coorganizers.stream() + .map(member -> sakaiProxy.getUser(member.getUserId()).getEmail()) + .filter(StringUtils::isNotEmpty) + .collect(Collectors.toList()); + } if(StringUtils.isNotBlank(onlineMeetingId)) { - microsoftCommonService.updateOnlineMeeting(organizerEmail, onlineMeetingId, meeting.getTitle(), meeting.getStartDate(), meeting.getEndDate()); + microsoftCommonService.updateOnlineMeeting(organizerEmail, onlineMeetingId, meeting.getTitle(), meeting.getStartDate(), meeting.getEndDate(), coorganizerEmails); } } diff --git a/microsoft-integration/api/src/java/org/sakaiproject/microsoft/api/MicrosoftCommonService.java b/microsoft-integration/api/src/java/org/sakaiproject/microsoft/api/MicrosoftCommonService.java index 7df04803136..d0d984c7894 100644 --- a/microsoft-integration/api/src/java/org/sakaiproject/microsoft/api/MicrosoftCommonService.java +++ b/microsoft-integration/api/src/java/org/sakaiproject/microsoft/api/MicrosoftCommonService.java @@ -146,7 +146,7 @@ public static enum PermissionRoles { READ, WRITE } // ---------------------------------------- ONLINE MEETINGS -------------------------------------------------- TeamsMeetingData createOnlineMeeting(String userEmail, String subject, Instant startDate, Instant endDate, List coorganizerEmails) throws MicrosoftCredentialsException; - void updateOnlineMeeting(String userEmail, String meetingId, String subject, Instant startDate, Instant endDate) throws MicrosoftCredentialsException; + void updateOnlineMeeting(String userEmail, String meetingId, String subject, Instant startDate, Instant endDate, List coorganizerEmails) throws MicrosoftCredentialsException; List getOnlineMeetingRecordings(String onlineMeetingId, List teamIdsList, boolean force) throws MicrosoftCredentialsException; // ---------------------------------------- ONE-DRIVE (APPLICATION) -------------------------------------------------------- diff --git a/microsoft-integration/impl/src/main/java/org/sakaiproject/microsoft/impl/MicrosoftCommonServiceImpl.java b/microsoft-integration/impl/src/main/java/org/sakaiproject/microsoft/impl/MicrosoftCommonServiceImpl.java index 24cf451bdd0..e150946a63b 100644 --- a/microsoft-integration/impl/src/main/java/org/sakaiproject/microsoft/impl/MicrosoftCommonServiceImpl.java +++ b/microsoft-integration/impl/src/main/java/org/sakaiproject/microsoft/impl/MicrosoftCommonServiceImpl.java @@ -91,6 +91,7 @@ import com.microsoft.graph.tasks.LargeFileUploadTask; import com.microsoft.graph.tasks.LargeFileUploadResult; +import com.microsoft.graph.models.MeetingChatMode; import com.microsoft.graph.models.AadUserConversationMember; import com.microsoft.graph.models.CallRecordingEventMessageDetail; import com.microsoft.graph.models.CallRecordingStatus; @@ -1995,7 +1996,8 @@ public TeamsMeetingData createOnlineMeeting(String userEmail, String subject, In onlineMeeting.participants = participants; onlineMeeting.subject = subject; onlineMeeting.lobbyBypassSettings = lobbySettings; - onlineMeeting.allowedPresenters = OnlineMeetingPresenters.ROLE_IS_PRESENTER; + onlineMeeting.allowedPresenters = OnlineMeetingPresenters.ORGANIZER; + onlineMeeting.allowMeetingChat = MeetingChatMode.ENABLED; OnlineMeeting meeting = getGraphClient().users(organizerUser.getId()).onlineMeetings() .buildRequest() @@ -2009,7 +2011,7 @@ public TeamsMeetingData createOnlineMeeting(String userEmail, String subject, In } @Override - public void updateOnlineMeeting(String userEmail, String meetingId, String subject, Instant startDate, Instant endDate) throws MicrosoftCredentialsException { + public void updateOnlineMeeting(String userEmail, String meetingId, String subject, Instant startDate, Instant endDate, List coorganizerEmails) throws MicrosoftCredentialsException { // Get organizer user MicrosoftUser organizerUser = getUserByEmail(userEmail); @@ -2020,6 +2022,30 @@ public void updateOnlineMeeting(String userEmail, String meetingId, String subje onlineMeeting.endDateTime = OffsetDateTime.ofInstant(endDate, ZoneId.systemDefault()); onlineMeeting.subject = subject; + MeetingParticipants participants = new MeetingParticipants(); + + // Coorganizers + List attendees = new ArrayList<>(); + if (coorganizerEmails != null) { + for (String coorganizerEmail : coorganizerEmails) { + if (!coorganizerEmail.equals(organizerUser.getEmail())) { + MicrosoftUser coorganizerUser = getUserByEmail(coorganizerEmail); + if (coorganizerUser != null) { + MeetingParticipantInfo coorganizer = new MeetingParticipantInfo(); + IdentitySet coorganizerIdentity = new IdentitySet(); + Identity coorganizerIden = new Identity(); + coorganizerIden.id = coorganizerUser.getId(); + coorganizerIden.displayName = coorganizerUser.getName(); + coorganizerIdentity.user = coorganizerIden; + coorganizer.identity = coorganizerIdentity; + coorganizer.role = OnlineMeetingRole.COORGANIZER; + attendees.add(coorganizer); + } + } + } + participants.attendees = attendees; + } + onlineMeeting.participants = participants; getGraphClient().users(organizerUser.getId()).onlineMeetings(meetingId) .buildRequest() .patch(onlineMeeting);