From 63dc708978ba2bcd43914946ada40e439a7a6d0b Mon Sep 17 00:00:00 2001 From: srosse <stephane.rosse@frentix.com> Date: Fri, 5 Jul 2019 16:43:45 +0200 Subject: [PATCH] OO-3887: ensure the moderator is host if it joins the meeting --- .../course/nodes/AdobeConnectCourseNode.java | 11 ++++++++++- .../adobeconnect/AdobeConnectConfigForm.java | 16 +++++++++++++--- .../adobeconnect/AdobeConnectManager.java | 2 +- .../manager/AdobeConnectManagerImpl.java | 14 +++++++++----- .../ui/AdobeConnectMeetingController.java | 8 ++++---- 5 files changed, 37 insertions(+), 14 deletions(-) diff --git a/src/main/java/org/olat/course/nodes/AdobeConnectCourseNode.java b/src/main/java/org/olat/course/nodes/AdobeConnectCourseNode.java index 566508569c8..5ba6ceb79e0 100644 --- a/src/main/java/org/olat/course/nodes/AdobeConnectCourseNode.java +++ b/src/main/java/org/olat/course/nodes/AdobeConnectCourseNode.java @@ -46,6 +46,7 @@ import org.olat.course.run.userview.NodeEvaluation; import org.olat.course.run.userview.UserCourseEnvironment; import org.olat.modules.ModuleConfiguration; import org.olat.modules.adobeconnect.AdobeConnectManager; +import org.olat.modules.adobeconnect.AdobeConnectModule; import org.olat.modules.adobeconnect.ui.AdobeConnectMeetingDefaultConfiguration; import org.olat.modules.adobeconnect.ui.AdobeConnectRunController; import org.olat.repository.RepositoryEntry; @@ -139,11 +140,19 @@ public class AdobeConnectCourseNode extends AbstractAccessableCourseNode { boolean moderator = admin || userCourseEnv.isCoach(); // create run controller RepositoryEntry entry = userCourseEnv.getCourseEnvironment().getCourseGroupManager().getCourseEntry(); + AdobeConnectModule adobeConnectModule = CoreSpringFactory.getImpl(AdobeConnectModule.class); ModuleConfiguration config = getModuleConfiguration(); boolean onlyDates = config.getBooleanSafe(AdobeConnectEditController.ACCESS_BY_DATES, false); + boolean guestAccess = config.getBooleanSafe(AdobeConnectEditController.GUEST_ACCESS_ALLOWED, false); - boolean moderatorStart = config.getBooleanSafe(AdobeConnectEditController.MODERATOR_START_MEETING, false); + boolean moderatorStart; + if(adobeConnectModule.isCreateMeetingImmediately()) { + moderatorStart = config.getBooleanSafe(AdobeConnectEditController.MODERATOR_START_MEETING, false); + } else { + moderatorStart = config.getBooleanSafe(AdobeConnectEditController.MODERATOR_START_MEETING, true); + } + AdobeConnectMeetingDefaultConfiguration configuration = new AdobeConnectMeetingDefaultConfiguration(onlyDates, guestAccess, moderatorStart); controller = new AdobeConnectRunController(ureq, wControl, entry, getIdent(), null, configuration, admin, moderator, userCourseEnv.isCourseReadOnly()); diff --git a/src/main/java/org/olat/course/nodes/adobeconnect/AdobeConnectConfigForm.java b/src/main/java/org/olat/course/nodes/adobeconnect/AdobeConnectConfigForm.java index 106bd5d1eb6..1da39fd47e6 100644 --- a/src/main/java/org/olat/course/nodes/adobeconnect/AdobeConnectConfigForm.java +++ b/src/main/java/org/olat/course/nodes/adobeconnect/AdobeConnectConfigForm.java @@ -30,6 +30,8 @@ import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; import org.olat.course.editor.NodeEditController; import org.olat.modules.ModuleConfiguration; +import org.olat.modules.adobeconnect.AdobeConnectModule; +import org.springframework.beans.factory.annotation.Autowired; /** * Initial Date: 3 juil. 2019<br> @@ -44,6 +46,9 @@ public class AdobeConnectConfigForm extends FormBasicController { private MultipleSelectionElement accessEl; private final ModuleConfiguration config; + + @Autowired + private AdobeConnectModule adobeConnectModule; public AdobeConnectConfigForm(UserRequest ureq, WindowControl wControl, ModuleConfiguration config) { super(ureq, wControl); @@ -57,10 +62,15 @@ public class AdobeConnectConfigForm extends FormBasicController { String[] accessValues = new String[] { translate("vc.access.dates"), translate("vc.access.open"), translate("vc.access.start") }; boolean onlyDates = config.getBooleanSafe(AdobeConnectEditController.ACCESS_BY_DATES, false); boolean guestAccess = config.getBooleanSafe(AdobeConnectEditController.GUEST_ACCESS_ALLOWED, false); - boolean moderatorStart = config.getBooleanSafe(AdobeConnectEditController.MODERATOR_START_MEETING, false); + boolean moderatorStart; + if(adobeConnectModule.isCreateMeetingImmediately()) { + moderatorStart = config.getBooleanSafe(AdobeConnectEditController.MODERATOR_START_MEETING, false); + } else { + moderatorStart = config.getBooleanSafe(AdobeConnectEditController.MODERATOR_START_MEETING, true); + } accessEl = uifactory.addCheckboxesVertical("vc.access.label", "vc.access.label", formLayout, accessKeys, accessValues, 1); accessEl.select(accessKeys[0], onlyDates); - accessEl.select(accessKeys[1], guestAccess); + accessEl.select(accessKeys[1], !guestAccess); accessEl.select(accessKeys[2], moderatorStart); FormLayoutContainer buttonsCont = FormLayoutContainer.createButtonLayout("buttons", getTranslator()); @@ -78,7 +88,7 @@ public class AdobeConnectConfigForm extends FormBasicController { protected void formOK(UserRequest ureq) { Collection<String> selectedKeys = accessEl.getSelectedKeys(); config.setBooleanEntry(AdobeConnectEditController.ACCESS_BY_DATES, selectedKeys.contains(accessKeys[0])); - config.setBooleanEntry(AdobeConnectEditController.GUEST_ACCESS_ALLOWED, selectedKeys.contains(accessKeys[1])); + config.setBooleanEntry(AdobeConnectEditController.GUEST_ACCESS_ALLOWED, !selectedKeys.contains(accessKeys[1])); config.setBooleanEntry(AdobeConnectEditController.MODERATOR_START_MEETING, selectedKeys.contains(accessKeys[2])); fireEvent(ureq, NodeEditController.NODECONFIG_CHANGED_EVENT); } diff --git a/src/main/java/org/olat/modules/adobeconnect/AdobeConnectManager.java b/src/main/java/org/olat/modules/adobeconnect/AdobeConnectManager.java index 37f3fbf3803..e6f1546bd5e 100644 --- a/src/main/java/org/olat/modules/adobeconnect/AdobeConnectManager.java +++ b/src/main/java/org/olat/modules/adobeconnect/AdobeConnectManager.java @@ -133,7 +133,7 @@ public interface AdobeConnectManager { */ public String open(AdobeConnectMeeting meeting, Identity identity, AdobeConnectErrors error); - public String join(AdobeConnectMeeting meeting, Identity identity, AdobeConnectErrors error); + public String join(AdobeConnectMeeting meeting, Identity identity, boolean moderator, AdobeConnectErrors error); public String linkTo(AdobeConnectSco content, Identity identity, AdobeConnectErrors error); diff --git a/src/main/java/org/olat/modules/adobeconnect/manager/AdobeConnectManagerImpl.java b/src/main/java/org/olat/modules/adobeconnect/manager/AdobeConnectManagerImpl.java index 04aa8af6e84..07c602f0f28 100644 --- a/src/main/java/org/olat/modules/adobeconnect/manager/AdobeConnectManagerImpl.java +++ b/src/main/java/org/olat/modules/adobeconnect/manager/AdobeConnectManagerImpl.java @@ -380,14 +380,18 @@ public class AdobeConnectManagerImpl implements AdobeConnectManager, DeletableGr if(actingUser != null) { getAdapter().setMember(meeting.getScoId(), actingUser, AdobeConnectMeetingPermission.host.permission(), errors); } - return join(meeting, identity, errors); + return join(meeting, identity, true, errors); } @Override - public String join(AdobeConnectMeeting meeting, Identity identity, AdobeConnectErrors error) { - String actingUser = getOrCreateUser(identity, false, error); + public String join(AdobeConnectMeeting meeting, Identity identity, boolean moderator, AdobeConnectErrors errors) { + String actingUser = getOrCreateUser(identity, false, errors); if(actingUser != null) { - AdobeConnectSco sco = getAdapter().getScoMeeting(meeting, error); + if(moderator) {// make sure the moderator can open the meeting + getAdapter().setMember(meeting.getScoId(), actingUser, AdobeConnectMeetingPermission.host.permission(), errors); + } + + AdobeConnectSco sco = getAdapter().getScoMeeting(meeting, errors); String urlPath = sco.getUrlPath(); UriBuilder builder = adobeConnectModule .getAdobeConnectHostUriBuilder() @@ -396,7 +400,7 @@ public class AdobeConnectManagerImpl implements AdobeConnectManager, DeletableGr BreezeSession session = null; Authentication authentication = securityManager.findAuthentication(identity, ACONNECT_PROVIDER); if(authentication != null) { - session = getAdapter().commonInfo(authentication, error); + session = getAdapter().commonInfo(authentication, errors); } if(session != null && StringHelper.containsNonWhitespace(session.getSession())) { diff --git a/src/main/java/org/olat/modules/adobeconnect/ui/AdobeConnectMeetingController.java b/src/main/java/org/olat/modules/adobeconnect/ui/AdobeConnectMeetingController.java index 2bcc7a37702..2b7e52627aa 100644 --- a/src/main/java/org/olat/modules/adobeconnect/ui/AdobeConnectMeetingController.java +++ b/src/main/java/org/olat/modules/adobeconnect/ui/AdobeConnectMeetingController.java @@ -372,13 +372,13 @@ public class AdobeConnectMeetingController extends FormBasicController implement String meetingUrl = null; AdobeConnectErrors errors = new AdobeConnectErrors(); - if(meeting.isOpened() || !moderatorStartMeeting) { - meetingUrl = adobeConnectManager.join(meeting, getIdentity(), errors); - } else if(moderator || administrator) { + if(moderator || administrator) { meetingUrl = adobeConnectManager.open(meeting, getIdentity(), errors); AdobeConnectEvent openEvent = new AdobeConnectEvent(AdobeConnectEvent.OPEN_MEETING, meeting.getKey(), getIdentity().getKey()); CoordinatorManager.getInstance().getCoordinator().getEventBus().fireEventToListenersOf(openEvent, meetingOres); - } + } else if(meeting.isOpened() || !moderatorStartMeeting) { + meetingUrl = adobeConnectManager.join(meeting, getIdentity(), (administrator || moderator), errors); + } if(errors.hasErrors()) { getWindowControl().setError(AdobeConnectErrorHelper.formatErrors(getTranslator(), errors)); -- GitLab