From 78ece5f05cab71f415d8ece4e3014a28d9a734d6 Mon Sep 17 00:00:00 2001
From: Anton Georgiev
Date: Tue, 20 Feb 2024 09:21:57 -0500
Subject: [PATCH] feat(config): Add option to disabled "Download session data"
on Learning Dashboard (backport) (#19641)
* Add option disabledFeatures=learningDashboardDownloadSessionData
* docs: document learningDashboardDownloadSessionData
---------
Co-authored-by: Gustavo Trott
---
.../redis/LearningDashboardActor.scala | 2 ++
bbb-learning-dashboard/src/App.js | 33 ++++++++++++-------
.../grails-app/conf/bigbluebutton.properties | 9 ++---
docs/docs/data/create.tsx | 2 +-
docs/docs/development/api.md | 2 +-
5 files changed, 30 insertions(+), 18 deletions(-)
diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/LearningDashboardActor.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/LearningDashboardActor.scala
index 63ded0f632..4fddd78310 100644
--- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/LearningDashboardActor.scala
+++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/LearningDashboardActor.scala
@@ -20,6 +20,7 @@ case class Meeting(
intId: String,
extId: String,
name: String,
+ downloadSessionDataEnabled: Boolean,
users: Map[String, User] = Map(),
polls: Map[String, Poll] = Map(),
screenshares: Vector[Screenshare] = Vector(),
@@ -585,6 +586,7 @@ class LearningDashboardActor(
msg.body.props.meetingProp.intId,
msg.body.props.meetingProp.extId,
msg.body.props.meetingProp.name,
+ downloadSessionDataEnabled = !msg.body.props.meetingProp.disabledFeatures.contains("learningDashboardDownloadSessionData"),
)
meetings += (newMeeting.intId -> newMeeting)
diff --git a/bbb-learning-dashboard/src/App.js b/bbb-learning-dashboard/src/App.js
index 2709f906c9..6c055860a4 100644
--- a/bbb-learning-dashboard/src/App.js
+++ b/bbb-learning-dashboard/src/App.js
@@ -54,8 +54,11 @@ class App extends React.Component {
const { intl } = this.props;
const { activitiesJson } = this.state;
const {
- name: meetingName, createdOn, users, polls,
+ name: meetingName, createdOn, users, polls, downloadSessionDataEnabled,
} = activitiesJson;
+
+ if (downloadSessionDataEnabled === false) return;
+
const link = document.createElement('a');
const data = makeUserCSVData(users, polls, intl);
const filename = `LearningDashboard_${meetingName}_${new Date(createdOn).toISOString().substr(0, 10)}.csv`.replace(/ /g, '-');
@@ -581,17 +584,23 @@ class App extends React.Component {
}
-
+ {
+ (activitiesJson.downloadSessionDataEnabled || false)
+ ? (
+
+ )
+ : null
+ }
);
diff --git a/bigbluebutton-web/grails-app/conf/bigbluebutton.properties b/bigbluebutton-web/grails-app/conf/bigbluebutton.properties
index 370396db30..4a117043fd 100644
--- a/bigbluebutton-web/grails-app/conf/bigbluebutton.properties
+++ b/bigbluebutton-web/grails-app/conf/bigbluebutton.properties
@@ -430,10 +430,11 @@ endWhenNoModeratorDelayInMinutes=1
# List of features to disable (comma-separated)
# Available options:
-# chat, sharedNotes, polls, screenshare, externalVideos, presentation, downloadPresentationWithAnnotations
-# learningDashboard, layouts, captions, liveTranscription, virtualBackgrounds, customVirtualBackgrounds
-# breakoutRooms, importSharedNotesFromBreakoutRooms, importPresentationWithAnnotationsFromBreakoutRooms,
-# downloadPresentationOriginalFile, downloadPresentationConvertedToPdf
+# breakoutRooms, captions, chat, customVirtualBackgrounds, downloadPresentationConvertedToPdf
+# downloadPresentationOriginalFile, downloadPresentationWithAnnotations, externalVideos
+# importPresentationWithAnnotationsFromBreakoutRooms, importSharedNotesFromBreakoutRooms, layouts
+# learningDashboard, learningDashboardDownloadSessionData, liveTranscription, polls, presentation
+# screenshare, sharedNotes, virtualBackgrounds
disabledFeatures=
# Notify users that recording is on
diff --git a/docs/docs/data/create.tsx b/docs/docs/data/create.tsx
index 11bfd16337..17eac2e6e5 100644
--- a/docs/docs/data/create.tsx
+++ b/docs/docs/data/create.tsx
@@ -344,7 +344,7 @@ const createEndpointTableData = [
"name": "disabledFeatures",
"required": false,
"type": "String",
- "description": (<>List (comma-separated) of features to disable in a particular meeting. (added 2.5)
Available options to disable:
breakoutRooms
- Breakout Rooms captions
- Closed Caption chat
- ChatdownloadPresentationWithAnnotations
- Annotated presentation downloadsnapshotOfCurrentSlide
- Allow snapshot of the current slideexternalVideos
- Share an external video importPresentationWithAnnotationsFromBreakoutRooms
- Capture breakout presentationimportSharedNotesFromBreakoutRooms
- Capture breakout shared noteslayouts
- Layouts (allow only default layout)learningDashboard
- Learning Analytics Dashboardpolls
- Polls screenshare
- Screen SharingsharedNotes
- Shared NotesvirtualBackgrounds
- Virtual BackgroundscustomVirtualBackgrounds
- Virtual Backgrounds UploadliveTranscription
- Live Transcriptionpresentation
- PresentationcameraAsContent
-Enables/Disables camera as a contenttimer
- disables timer
>)
+ "description": (<>List (comma-separated) of features to disable in a particular meeting. (added 2.5)
Available options to disable:
breakoutRooms
- Breakout Rooms captions
- Closed Caption chat
- ChatdownloadPresentationWithAnnotations
- Annotated presentation downloadsnapshotOfCurrentSlide
- Allow snapshot of the current slideexternalVideos
- Share an external video importPresentationWithAnnotationsFromBreakoutRooms
- Capture breakout presentationimportSharedNotesFromBreakoutRooms
- Capture breakout shared noteslayouts
- Layouts (allow only default layout)learningDashboard
- Learning Analytics DashboardlearningDashboardDownloadSessionData
- Learning Analytics Dashboard Download Session Data (prevents the option to download)polls
- Polls screenshare
- Screen SharingsharedNotes
- Shared NotesvirtualBackgrounds
- Virtual BackgroundscustomVirtualBackgrounds
- Virtual Backgrounds UploadliveTranscription
- Live Transcriptionpresentation
- PresentationcameraAsContent
-Enables/Disables camera as a contenttimer
- disables timer
>)
},
{
"name": "disabledFeaturesExclude",
diff --git a/docs/docs/development/api.md b/docs/docs/development/api.md
index 9caa409ada..d7e9e22460 100644
--- a/docs/docs/development/api.md
+++ b/docs/docs/development/api.md
@@ -104,7 +104,7 @@ Updated in 2.6:
Updated in 2.7:
-- **create** - **Added:** `preUploadedPresentation`, `preUploadedPresentationName`, `disabledFeatures` options`cameraAsContent`, `snapshotOfCurrentSlide`, `downloadPresentationOriginalFile`, `downloadPresentationConvertedToPdf`, `timer`.
+- **create** - **Added:** `preUploadedPresentation`, `preUploadedPresentationName`, `disabledFeatures` options`cameraAsContent`, `snapshotOfCurrentSlide`, `downloadPresentationOriginalFile`, `downloadPresentationConvertedToPdf`, `timer`, `learningDashboardDownloadSessionData` (2.7.5).
- **join** - **Added:** `redirectErrorUrl`, `userdata-bbb_fullaudio_bridge`