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

OO-4584: allow coach in course to create meeting

Allow coach in course to create a meeting, unify the method to calculate
the available templates to a user, wording
parent fcce3fe2
No related branches found
No related tags found
No related merge requests found
......@@ -97,9 +97,9 @@ public class BigBlueButtonCourseNode extends AbstractAccessableCourseNode {
String message = trans.translate("guestnoaccess.message");
controller = MessageUIFactory.createInfoMessage(ureq, wControl, title, message);
} else {
// check if user is moderator of the virtual classroom
boolean admin = userCourseEnv.isAdmin();
boolean moderator = admin || userCourseEnv.isCoach();
// check if user is admin. / moderator of the virtual classroom
boolean admin = userCourseEnv.isAdmin() || userCourseEnv.isCoach();
boolean moderator = userCourseEnv.isAdmin() || userCourseEnv.isCoach();
// create run controller
RepositoryEntry entry = userCourseEnv.getCourseEnvironment().getCourseGroupManager().getCourseEntry();
......
......@@ -23,6 +23,7 @@ import java.util.Date;
import java.util.List;
import org.olat.core.id.Identity;
import org.olat.core.id.Roles;
import org.olat.group.BusinessGroup;
import org.olat.modules.bigbluebutton.model.BigBlueButtonErrors;
import org.olat.repository.RepositoryEntry;
......@@ -70,6 +71,10 @@ public interface BigBlueButtonManager {
public List<BigBlueButtonMeetingTemplate> getTemplates();
public List<BigBlueButtonMeetingTemplate> getTemplates(List<BigBlueButtonRoles> editionRoles);
public List<BigBlueButtonRoles> calculatePermittedRoles(RepositoryEntry entry, BusinessGroup businessGroup, Identity identity, Roles userRoles);
public BigBlueButtonMeetingTemplate updateTemplate(BigBlueButtonMeetingTemplate template);
public void deleteTemplate(BigBlueButtonMeetingTemplate template);
......
......@@ -139,6 +139,16 @@ public interface BigBlueButtonMeetingTemplate extends ModifiedInfo, CreateInfo {
public GuestPolicyEnum getGuestPolicyEnum();
public void setGuestPolicyEnum(GuestPolicyEnum guestPolicy);
public default boolean availableTo(List<BigBlueButtonRoles> editionRoles) {
List<BigBlueButtonRoles> roles = getPermittedRolesEnum();
for(BigBlueButtonRoles role:roles) {
for(BigBlueButtonRoles editionRole:editionRoles) {
if(role.accept(editionRole)) {
return true;
}
}
}
return false;
}
}
......@@ -20,6 +20,7 @@
package org.olat.modules.bigbluebutton.manager;
import java.net.URI;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
......@@ -35,6 +36,7 @@ import org.olat.commons.calendar.model.Kalendar;
import org.olat.commons.calendar.model.KalendarEvent;
import org.olat.commons.calendar.ui.components.KalendarRenderWrapper;
import org.olat.core.id.Identity;
import org.olat.core.id.Roles;
import org.olat.core.id.User;
import org.olat.core.id.context.BusinessControlFactory;
import org.olat.core.logging.Tracing;
......@@ -44,6 +46,7 @@ import org.olat.core.util.WebappHelper;
import org.olat.course.CourseFactory;
import org.olat.course.ICourse;
import org.olat.group.BusinessGroup;
import org.olat.group.BusinessGroupService;
import org.olat.modules.bigbluebutton.BigBlueButtonManager;
import org.olat.modules.bigbluebutton.BigBlueButtonMeeting;
import org.olat.modules.bigbluebutton.BigBlueButtonMeetingTemplate;
......@@ -56,7 +59,9 @@ import org.olat.modules.bigbluebutton.model.BigBlueButtonErrorCodes;
import org.olat.modules.bigbluebutton.model.BigBlueButtonErrors;
import org.olat.repository.RepositoryEntry;
import org.olat.repository.RepositoryEntryRef;
import org.olat.repository.RepositoryManager;
import org.olat.repository.manager.RepositoryEntryDAO;
import org.olat.repository.model.RepositoryEntrySecurity;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -76,10 +81,14 @@ public class BigBlueButtonManagerImpl implements BigBlueButtonManager, Initializ
@Autowired
private CalendarManager calendarManager;
@Autowired
private RepositoryManager repositoryManager;
@Autowired
private RepositoryEntryDAO repositoryEntryDao;
@Autowired
private BigBlueButtonModule bigBlueButtonModule;
@Autowired
private BusinessGroupService businessGroupService;
@Autowired
private BigBlueButtonMeetingDAO bigBlueButtonMeetingDao;
@Autowired
private BigBlueButtonMeetingTemplateDAO bigBlueButtonMeetingTemplateDao;
......@@ -249,6 +258,19 @@ public class BigBlueButtonManagerImpl implements BigBlueButtonManager, Initializ
return bigBlueButtonMeetingTemplateDao.getTemplates();
}
@Override
public List<BigBlueButtonMeetingTemplate> getTemplates(List<BigBlueButtonRoles> editionRoles) {
List<BigBlueButtonMeetingTemplate> templates = getTemplates();
List<BigBlueButtonMeetingTemplate> authorisedTemplates = new ArrayList<>();
for(BigBlueButtonMeetingTemplate template:templates) {
if(template.isEnabled() && template.availableTo(editionRoles)) {
authorisedTemplates.add(template);
}
}
return authorisedTemplates;
}
@Override
public List<BigBlueButtonMeeting> getAllMeetings() {
return bigBlueButtonMeetingDao.getAllMeetings();
......@@ -334,6 +356,38 @@ public class BigBlueButtonManagerImpl implements BigBlueButtonManager, Initializ
}
return wrapper == null ? null: wrapper.getKalendar();
}
@Override
public List<BigBlueButtonRoles> calculatePermittedRoles(RepositoryEntry entry, BusinessGroup businessGroup, Identity identity, Roles userRoles) {
List<BigBlueButtonRoles> editionRoles = new ArrayList<>();
if(userRoles.isAdministrator() || userRoles.isSystemAdmin()) {
editionRoles.add(BigBlueButtonRoles.administrator);
}
if(userRoles.isAuthor() || userRoles.isLearnResourceManager()) {
// global authors / LR-managers can use author templates also in groups
editionRoles.add(BigBlueButtonRoles.author);
}
if(businessGroup != null) {
if(businessGroupService.isIdentityInBusinessGroup(identity, businessGroup)) {
// all group user can choose the group templates (if they are allowed to create group online-meetings)
editionRoles.add(BigBlueButtonRoles.group);
if(businessGroupService.isIdentityInBusinessGroup(identity, businessGroup.getKey(), true, false, null)) {
editionRoles.add(BigBlueButtonRoles.coach);
}
}
} else if(entry != null) {
RepositoryEntrySecurity reSecurity = repositoryManager.isAllowed(identity, userRoles, entry);
if(reSecurity.isEntryAdmin()) {
editionRoles.add(BigBlueButtonRoles.owner);
}
if(reSecurity.isCourseCoach()) {
editionRoles.add(BigBlueButtonRoles.coach);
}
}
return editionRoles;
}
@Override
public boolean isMeetingRunning(BigBlueButtonMeeting meeting) {
......
......@@ -19,7 +19,6 @@
*/
package org.olat.modules.bigbluebutton.ui;
import java.util.ArrayList;
import java.util.List;
import org.olat.core.commons.persistence.SortKey;
......@@ -42,9 +41,7 @@ import org.olat.core.gui.control.WindowControl;
import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController;
import org.olat.core.gui.control.generic.modal.DialogBoxController;
import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory;
import org.olat.core.id.Roles;
import org.olat.group.BusinessGroup;
import org.olat.group.BusinessGroupService;
import org.olat.modules.bigbluebutton.BigBlueButtonManager;
import org.olat.modules.bigbluebutton.BigBlueButtonMeeting;
import org.olat.modules.bigbluebutton.BigBlueButtonModule;
......@@ -53,8 +50,6 @@ import org.olat.modules.bigbluebutton.model.BigBlueButtonErrors;
import org.olat.modules.bigbluebutton.ui.BigBlueButtonMeetingTableModel.BMeetingsCols;
import org.olat.modules.gotomeeting.ui.GoToMeetingTableModel.MeetingsCols;
import org.olat.repository.RepositoryEntry;
import org.olat.repository.RepositoryManager;
import org.olat.repository.model.RepositoryEntrySecurity;
import org.springframework.beans.factory.annotation.Autowired;
/**
......@@ -78,14 +73,10 @@ public class BigBlueButtonEditMeetingsController extends FormBasicController {
private final RepositoryEntry entry;
private final BusinessGroup businessGroup;
@Autowired
private RepositoryManager repositoryManager;
@Autowired
private BigBlueButtonModule bigBlueButtonModule;
@Autowired
private BigBlueButtonManager bigBlueButtonManager;
@Autowired
private BusinessGroupService businessGroupService;
public BigBlueButtonEditMeetingsController(UserRequest ureq, WindowControl wControl,
RepositoryEntry entry, String subIdentifier, BusinessGroup group, boolean readOnly) {
......@@ -194,7 +185,8 @@ public class BigBlueButtonEditMeetingsController extends FormBasicController {
private void doAddMeeting(UserRequest ureq) {
if(guardModalController(editMeetingCtlr)) return;
List<BigBlueButtonRoles> editionRoles= getPermittedRoles(ureq);
List<BigBlueButtonRoles> editionRoles= bigBlueButtonManager
.calculatePermittedRoles(entry, businessGroup, getIdentity(), ureq.getUserSession().getRoles());
editMeetingCtlr = new EditBigBlueButtonMeetingController(ureq, getWindowControl(),
entry, subIdent, businessGroup, editionRoles);
listenTo(editMeetingCtlr);
......@@ -208,7 +200,8 @@ public class BigBlueButtonEditMeetingsController extends FormBasicController {
private void doEditMeeting(UserRequest ureq, BigBlueButtonMeeting meeting) {
if(guardModalController(editMeetingCtlr)) return;
List<BigBlueButtonRoles> editionRoles= getPermittedRoles(ureq);
List<BigBlueButtonRoles> editionRoles= bigBlueButtonManager
.calculatePermittedRoles(entry, businessGroup, getIdentity(), ureq.getUserSession().getRoles());
editMeetingCtlr = new EditBigBlueButtonMeetingController(ureq, getWindowControl(),
meeting, editionRoles);
listenTo(editMeetingCtlr);
......@@ -219,40 +212,6 @@ public class BigBlueButtonEditMeetingsController extends FormBasicController {
listenTo(cmc);
}
private List<BigBlueButtonRoles> getPermittedRoles(UserRequest ureq) {
Roles roles = ureq.getUserSession().getRoles();
List<BigBlueButtonRoles> editionRoles = new ArrayList<>();
if(businessGroup != null) {
if(roles.isAdministrator() || roles.isSystemAdmin()) {
editionRoles.add(BigBlueButtonRoles.administrator);
}
if(roles.isAuthor() || roles.isLearnResourceManager()) {
// global authors / LR-managers can use author templates also in groups
editionRoles.add(BigBlueButtonRoles.author);
}
if(businessGroupService.isIdentityInBusinessGroup(getIdentity(), businessGroup)) {
// all group user can choose the group templates (if they are allowed to create group online-meetings)
editionRoles.add(BigBlueButtonRoles.group);
}
} else if(entry != null) {
RepositoryEntrySecurity reSecurity = repositoryManager.isAllowed(getIdentity(), roles, entry);
if(roles.isAdministrator() || roles.isSystemAdmin()) {
editionRoles.add(BigBlueButtonRoles.administrator);
}
if(reSecurity.isAuthor() || roles.isLearnResourceManager()) {
editionRoles.add(BigBlueButtonRoles.author);
}
if(reSecurity.isEntryAdmin()) {
editionRoles.add(BigBlueButtonRoles.owner);
}
if(reSecurity.isCourseCoach()) {
editionRoles.add(BigBlueButtonRoles.coach);
}
}
return editionRoles;
}
private void doConfirmDelete(UserRequest ureq, BigBlueButtonMeeting meeting) {
String confirmDeleteTitle = translate("confirm.delete.meeting.title", new String[]{ meeting.getName() });
String confirmDeleteText = translate("confirm.delete.meeting", new String[]{ meeting.getName() });
......
......@@ -19,7 +19,6 @@
*/
package org.olat.modules.bigbluebutton.ui;
import java.util.ArrayList;
import java.util.List;
import org.olat.core.gui.UserRequest;
......@@ -35,12 +34,10 @@ import org.olat.core.gui.control.Event;
import org.olat.core.gui.control.WindowControl;
import org.olat.core.gui.control.controller.BasicController;
import org.olat.core.gui.control.generic.dtabs.Activateable2;
import org.olat.core.id.Roles;
import org.olat.core.id.context.ContextEntry;
import org.olat.core.id.context.StateEntry;
import org.olat.core.util.resource.OresHelper;
import org.olat.group.BusinessGroup;
import org.olat.group.BusinessGroupService;
import org.olat.modules.bigbluebutton.BigBlueButtonManager;
import org.olat.modules.bigbluebutton.BigBlueButtonMeeting;
import org.olat.modules.bigbluebutton.BigBlueButtonMeetingTemplate;
......@@ -79,8 +76,6 @@ public class BigBlueButtonRunController extends BasicController implements Activ
@Autowired
private BigBlueButtonManager bigBlueButtonManager;
@Autowired
private BusinessGroupService businessGroupService;
public BigBlueButtonRunController(UserRequest ureq, WindowControl wControl, RepositoryEntry entry, String subIdentifier,
BusinessGroup group, BigBlueButtonMeetingDefaultConfiguration configuration, boolean admin, boolean moderator, boolean readOnly) {
......@@ -122,40 +117,15 @@ public class BigBlueButtonRunController extends BasicController implements Activ
private boolean hasAtLeastOneTemplate(UserRequest ureq) {
// TODO: refactor: copy paste from BigBlueButtonEditMeetingsController.getPermittedRoles()
// should also apply to group config form: don't let regular students enable bbb in groups when they have no
// TODO bbb should also apply to group config form: don't let regular students enable bbb in groups when they have no
// template to choose from.
Roles userRoles = ureq.getUserSession().getRoles();
List<BigBlueButtonRoles> editionRoles = new ArrayList<>();
if(userRoles.isAdministrator() || userRoles.isSystemAdmin()) {
editionRoles.add(BigBlueButtonRoles.administrator);
}
if(userRoles.isAuthor() || userRoles.isLearnResourceManager()) {
// global authors / LR-managers can use author templates also in groups
editionRoles.add(BigBlueButtonRoles.author);
}
if(businessGroupService.isIdentityInBusinessGroup(getIdentity(), group)) {
// all group user can choose the group templates (if they are allowed to create group online-meetings)
editionRoles.add(BigBlueButtonRoles.group);
}
List<BigBlueButtonMeetingTemplate> templates = bigBlueButtonManager.getTemplates();
for(BigBlueButtonMeetingTemplate template:templates) {
if(!template.isEnabled()) continue;
List<BigBlueButtonRoles> roles = template.getPermittedRolesEnum();
for(BigBlueButtonRoles role:roles) {
for(BigBlueButtonRoles editionRole:editionRoles) {
if(role.accept(editionRole)) {
return true;
}
}
}
}
return false;
}
List<BigBlueButtonRoles> editionRoles = bigBlueButtonManager
.calculatePermittedRoles(entry, group, getIdentity(), ureq.getUserSession().getRoles());
bigBlueButtonManager.getTemplates(editionRoles);
List<BigBlueButtonMeetingTemplate> templates = bigBlueButtonManager.getTemplates(editionRoles);
return !templates.isEmpty();
}
@Override
protected void doDispose() {
......
......@@ -131,7 +131,8 @@ public class EditBigBlueButtonMeetingController extends FormBasicController {
? null : meeting.getTemplate().getKey();
KeyValues templatesKeyValues = new KeyValues();
for(BigBlueButtonMeetingTemplate template:templates) {
if(accept(template) || template.getKey().equals(selectedTemplateKey)) {
if((template.isEnabled() && template.availableTo(editionRoles))
|| template.getKey().equals(selectedTemplateKey)) {
templatesKeyValues.add(KeyValues.entry(template.getKey().toString(), template.getName()));
}
}
......@@ -196,20 +197,6 @@ public class EditBigBlueButtonMeetingController extends FormBasicController {
uifactory.addFormSubmitButton("save", buttonLayout);
}
private boolean accept(BigBlueButtonMeetingTemplate template) {
if(!template.isEnabled()) return false;
List<BigBlueButtonRoles> roles = template.getPermittedRolesEnum();
for(BigBlueButtonRoles role:roles) {
for(BigBlueButtonRoles editionRole:editionRoles) {
if(role.accept(editionRole)) {
return true;
}
}
}
return false;
}
private void updateUI() {
boolean permanent = permanentEl.isAtLeastSelected(1);
startDateEl.setVisible(!permanent);
......
......@@ -47,7 +47,7 @@ meeting.welcome=Welcome message
meetings.admin.title=Meeting management
meetings.past=Past online-meetings
meetings.title=Online-meetings
meetings.upcoming=Current and upcoming onlin-meetings
meetings.upcoming=Current and upcoming online-meetings
minutes={0} min.
no.meeting.configured=There are no online-meetings available at this time.
no.recordings=There is no recording available for this online-meeting at this time.
......
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