From 85fa7724338d7ffafa0a1e3c42837156f4a76862 Mon Sep 17 00:00:00 2001 From: Daniel Merino Date: Thu, 29 Jun 2017 12:44:00 +0200 Subject: [PATCH] BBB-116 - Only admin user can enable recordings when configuring a meeting. New patch that use new configuration options. --- .../bbb/api/BBBMeetingManager.java | 5 ++++ bundle/src/resources/ToolMessages.properties | 1 + .../src/resources/ToolMessages_en.properties | 1 + .../src/resources/ToolMessages_es.properties | 1 + .../sakaiproject/bbb/impl/BBBAPIWrapper.java | 7 +++++ .../bbb/impl/BBBMeetingManagerImpl.java | 9 +++++++ .../tool/entity/BBBMeetingEntityProvider.java | 8 ++++++ tool/src/webapp/WEB-INF/bootstrap.vm | 26 +++++++++++++------ tool/src/webapp/js/bbb.js | 2 ++ 9 files changed, 52 insertions(+), 8 deletions(-) diff --git a/api/src/java/org/sakaiproject/bbb/api/BBBMeetingManager.java b/api/src/java/org/sakaiproject/bbb/api/BBBMeetingManager.java index c002735e..7c457e41 100644 --- a/api/src/java/org/sakaiproject/bbb/api/BBBMeetingManager.java +++ b/api/src/java/org/sakaiproject/bbb/api/BBBMeetingManager.java @@ -68,6 +68,7 @@ public interface BBBMeetingManager { public final static String CFG_GROUPSESSIONS_DEFAULT = "bbb.groupsessions.default"; public final static String CFG_RECORDINGSTATS_ENABLED = "bbb.recordingstats.enabled"; public final static String CFG_RECORDINGSTATS_USERID = "bbb.recordingstats.userid"; + public final static String CFG_ADMIN_RECORDING_ENABLED = "bbb.admin.recording.enabled"; // Permissions public static final String FN_PREFIX = "bbb."; @@ -332,6 +333,10 @@ public String getJoinUrl(BBBMeeting meeting, User user) public String isRecordingEnabled(); public String isRecordingEditable(); + + public String isAdminRecordingEnabled(); + + public String isCurrentUserAdmin(); public String getRecordingDefault(); diff --git a/bundle/src/resources/ToolMessages.properties b/bundle/src/resources/ToolMessages.properties index ff4cbc4a..3678beeb 100644 --- a/bundle/src/resources/ToolMessages.properties +++ b/bundle/src/resources/ToolMessages.properties @@ -73,6 +73,7 @@ bbb_info_title = Title: bbb_info_description = Description: bbb_info_duration = Meeting duration: bbb_info_recording = Recording: +bbb_admin_info_recording = Currently only admin users can enable or disable recordings. If you want to modify this meeting, contact with your administrator. bbb_info_recording_description = Recording description: bbb_info_recording_duration = Recording duration: bbb_info_recording_duration_units = minutes diff --git a/bundle/src/resources/ToolMessages_en.properties b/bundle/src/resources/ToolMessages_en.properties index ff4cbc4a..3678beeb 100644 --- a/bundle/src/resources/ToolMessages_en.properties +++ b/bundle/src/resources/ToolMessages_en.properties @@ -73,6 +73,7 @@ bbb_info_title = Title: bbb_info_description = Description: bbb_info_duration = Meeting duration: bbb_info_recording = Recording: +bbb_admin_info_recording = Currently only admin users can enable or disable recordings. If you want to modify this meeting, contact with your administrator. bbb_info_recording_description = Recording description: bbb_info_recording_duration = Recording duration: bbb_info_recording_duration_units = minutes diff --git a/bundle/src/resources/ToolMessages_es.properties b/bundle/src/resources/ToolMessages_es.properties index feb7b0ef..053a3374 100644 --- a/bundle/src/resources/ToolMessages_es.properties +++ b/bundle/src/resources/ToolMessages_es.properties @@ -74,6 +74,7 @@ bbb_info_title = T\u00EDtulo: bbb_info_description = Descripci\u00F3n: bbb_info_duration = Duraci\u00F3n de la sesi\u00F3n: bbb_info_recording = Grabaci\u00F3n: +bbb_admin_info_recording = Currently only admin users can enable or disable recordings. If you want to modify this meeting, contact with your administrator. bbb_info_recording_description = Descripci\u00F3n de la grabaci\u00F3n: bbb_info_recording_duration = M\u00E1xima duraci\u00F3n de la sesi\u00F3n: bbb_info_recording_duration_units = minutos diff --git a/impl/src/java/org/sakaiproject/bbb/impl/BBBAPIWrapper.java b/impl/src/java/org/sakaiproject/bbb/impl/BBBAPIWrapper.java index 6a86fe54..eb464116 100644 --- a/impl/src/java/org/sakaiproject/bbb/impl/BBBAPIWrapper.java +++ b/impl/src/java/org/sakaiproject/bbb/impl/BBBAPIWrapper.java @@ -97,6 +97,8 @@ public class BBBAPIWrapper/* implements Runnable */{ private boolean bbbRecordingStatsEnabled = false; /** Sakai userid used for linking events with users when 'recording status' feature is enabled (default to eid) */ private String bbbRecordingStatsUserId = "eid"; + /** BBB default value for adminRecordingEnabled property (default to false) */ + private boolean bbbAdminRecordingEnabled = false; /** BBB API */ private BBBAPI api = null; @@ -170,6 +172,7 @@ public void start() { bbbGroupSessionsDefault = (boolean) config.getBoolean(BBBMeetingManager.CFG_GROUPSESSIONS_DEFAULT, bbbGroupSessionsDefault); bbbRecordingStatsEnabled = (boolean) config.getBoolean(BBBMeetingManager.CFG_RECORDINGSTATS_ENABLED, bbbRecordingStatsEnabled); bbbRecordingStatsUserId = (String) config.getString(BBBMeetingManager.CFG_RECORDINGSTATS_USERID, bbbRecordingStatsUserId); + bbbAdminRecordingEnabled = (boolean) config.getBoolean(BBBMeetingManager.CFG_ADMIN_RECORDING_ENABLED, bbbAdminRecordingEnabled); } public void destroy() { @@ -455,6 +458,10 @@ public boolean getGroupSessionsDefault() { public int getMaxLengthForDescription() { return bbbDescriptionMaxLength; } + + public boolean isAdminRecordingEnabled(){ + return bbbAdminRecordingEnabled; + } public String getTextBoxTypeForDescription() { return bbbDescriptionType; diff --git a/impl/src/java/org/sakaiproject/bbb/impl/BBBMeetingManagerImpl.java b/impl/src/java/org/sakaiproject/bbb/impl/BBBMeetingManagerImpl.java index 19805551..68682712 100644 --- a/impl/src/java/org/sakaiproject/bbb/impl/BBBMeetingManagerImpl.java +++ b/impl/src/java/org/sakaiproject/bbb/impl/BBBMeetingManagerImpl.java @@ -802,6 +802,15 @@ public String isRecordingEditable(){ return "" + bbbAPI.isRecordingEditable(); } + public String isAdminRecordingEnabled(){ + return "" + bbbAPI.isAdminRecordingEnabled(); + } + + public String isCurrentUserAdmin(){ + User currentUser = userDirectoryService.getCurrentUser(); + return "" + ((currentUser.getEid().equals(userDirectoryService.ADMIN_EID)) || (currentUser.getType().equals(userDirectoryService.ADMIN_EID))); + } + public String getRecordingDefault(){ return "" + bbbAPI.getRecordingDefault(); } diff --git a/tool/src/java/org/sakaiproject/bbb/tool/entity/BBBMeetingEntityProvider.java b/tool/src/java/org/sakaiproject/bbb/tool/entity/BBBMeetingEntityProvider.java index 0011ae29..a0f9a4fa 100644 --- a/tool/src/java/org/sakaiproject/bbb/tool/entity/BBBMeetingEntityProvider.java +++ b/tool/src/java/org/sakaiproject/bbb/tool/entity/BBBMeetingEntityProvider.java @@ -639,6 +639,14 @@ private Map getAddUpdateFormConfigParameters() { if (descriptionType != null) { map.put("descriptionType", descriptionType); } + Boolean adminRecordingEnabled = Boolean.parseBoolean(meetingManager.isAdminRecordingEnabled()); + if (adminRecordingEnabled != null) { + map.put("adminRecordingEnabled", adminRecordingEnabled); + } + Boolean currentUserAdmin = Boolean.parseBoolean(meetingManager.isCurrentUserAdmin()); + if (currentUserAdmin != null) { + map.put("currentUserAdmin", currentUserAdmin); + } return map; } diff --git a/tool/src/webapp/WEB-INF/bootstrap.vm b/tool/src/webapp/WEB-INF/bootstrap.vm index dcd352c3..e6bf568f 100644 --- a/tool/src/webapp/WEB-INF/bootstrap.vm +++ b/tool/src/webapp/WEB-INF/bootstrap.vm @@ -279,15 +279,25 @@ {if recordingEnabled} {var recordingChecked = isNew ? recordingDefault : meeting.recording } - {if recordingEditable} - - ${D}{bbb_info_recording} - - - - + {if recordingEditable || (adminRecordingEnabled && currentUserAdmin)} + + ${D}{bbb_info_recording} + + + + {else} - + {if adminRecordingEnabled} + + ${D}{bbb_info_recording} + + + ${bbb_admin_info_recording} + + + {else} + + {/if} {/if} {/if} {if durationEnabled} diff --git a/tool/src/webapp/js/bbb.js b/tool/src/webapp/js/bbb.js index 681c2eb2..bfd5aa67 100644 --- a/tool/src/webapp/js/bbb.js +++ b/tool/src/webapp/js/bbb.js @@ -251,6 +251,8 @@ meetings.switchState = function (state, arg) { 'groupsessionsEnabled': meetings.settings.config.addUpdateFormParameters.groupsessionsEnabled, 'groupsessionsEditable': meetings.settings.config.addUpdateFormParameters.groupsessionsEditable, 'groupsessionsDefault': meetings.settings.config.addUpdateFormParameters.groupsessionsDefault, + 'adminRecordingEnabled': meetings.settings.config.addUpdateFormParameters.adminRecordingEnabled, + 'currentUserAdmin': meetings.settings.config.addUpdateFormParameters.currentUserAdmin, 'actionUrl': isNew ? "/direct/bbb-tool/new" : "/direct/bbb-tool/"+meeting.id+"/edit" };