Skip to content
Snippets Groups Projects
Commit 63dc7089 authored by srosse's avatar srosse
Browse files

OO-3887: ensure the moderator is host if it joins the meeting

parent f3ada3ac
No related branches found
No related tags found
No related merge requests found
......@@ -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());
......
......@@ -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);
}
......
......@@ -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);
......
......@@ -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())) {
......
......@@ -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));
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment