From c515a2654fc922e9e1b072992bf6fd8fc84bc9f7 Mon Sep 17 00:00:00 2001 From: srosse <stephane.rosse@frentix.com> Date: Thu, 26 Mar 2020 14:37:46 +0100 Subject: [PATCH] OO-4584: delete recordings with the meeting in OpenOlat --- .../bigbluebutton/BigBlueButtonRecording.java | 2 + .../manager/BigBlueButtonManagerImpl.java | 31 +++++++++++++ .../manager/BigBlueButtonUtils.java | 5 ++- .../model/BigBlueButtonRecordingImpl.java | 13 ++++-- .../ui/_i18n/LocalStrings_de.properties | 3 +- .../ui/_i18n/LocalStrings_en.properties | 1 + .../ui/_i18n/LocalStrings_fr.properties | 43 ++++++++++++++++++- 7 files changed, 90 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/olat/modules/bigbluebutton/BigBlueButtonRecording.java b/src/main/java/org/olat/modules/bigbluebutton/BigBlueButtonRecording.java index 77282cb99e1..384000083ec 100644 --- a/src/main/java/org/olat/modules/bigbluebutton/BigBlueButtonRecording.java +++ b/src/main/java/org/olat/modules/bigbluebutton/BigBlueButtonRecording.java @@ -29,6 +29,8 @@ import java.util.Date; */ public interface BigBlueButtonRecording { + public String getRecordId(); + public String getUrl(); public String getType(); diff --git a/src/main/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonManagerImpl.java b/src/main/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonManagerImpl.java index d64dcb0966f..29baa187fdd 100644 --- a/src/main/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonManagerImpl.java +++ b/src/main/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonManagerImpl.java @@ -290,10 +290,41 @@ public class BigBlueButtonManagerImpl implements BigBlueButtonManager, Initializ public boolean deleteMeeting(BigBlueButtonMeeting meeting, BigBlueButtonErrors errors) { BigBlueButtonMeeting reloadedMeeting = bigBlueButtonMeetingDao.loadByKey(meeting.getKey()); removeCalendarEvent(reloadedMeeting); + deleteRecordings(meeting, errors); bigBlueButtonMeetingDao.deleteMeeting(reloadedMeeting); return false; } + private void deleteRecordings(BigBlueButtonMeeting meeting, BigBlueButtonErrors errors) { + StringBuilder sb = new StringBuilder(); + + List<BigBlueButtonRecording> recordings = getRecordings(meeting, errors); + if(recordings != null && !recordings.isEmpty()) { + for(BigBlueButtonRecording recording:recordings) { + String recordId = recording.getRecordId(); + if(StringHelper.containsNonWhitespace(recordId)) { + if(sb.length() > 0) sb.append(","); + sb.append(recordId); + } + } + } + + if(sb.length() > 0) { + deleteRecording(sb.toString(), errors); + } + } + + private void deleteRecording(String recordId, BigBlueButtonErrors errors) { + BigBlueButtonUriBuilder uriBuilder = getUriBuilder(); + uriBuilder + .operation("deleteRecordings") + .parameter("recordID", recordId); + + Document doc = sendRequest(uriBuilder, errors); + BigBlueButtonUtils.print(doc); + BigBlueButtonUtils.checkSuccess(doc, errors); + } + private void removeCalendarEvent(BigBlueButtonMeeting meeting) { Kalendar calendar = getCalendar(meeting); if(calendar == null) return; diff --git a/src/main/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonUtils.java b/src/main/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonUtils.java index 92a6435d3ff..7535be26ba2 100644 --- a/src/main/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonUtils.java +++ b/src/main/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonUtils.java @@ -106,7 +106,8 @@ public class BigBlueButtonUtils { NodeList recordingList = document.getElementsByTagName("recording"); for(int i=recordingList.getLength(); i-->0; ) { Element recordingEl = (Element)recordingList.item(i); - String meetingId = getFirstElementValue(recordingEl, "meetingID"); + String recordId = getFirstElementValue(recordingEl, "recordID"); + String meetingId = getFirstElementValue(recordingEl, "meetingID"); String name = getFirstElementValue(recordingEl, "name"); Date startTime = toDate(getFirstElementValue(recordingEl, "startTime")); Date endTime = toDate(getFirstElementValue(recordingEl, "endTime")); @@ -119,7 +120,7 @@ public class BigBlueButtonUtils { Element formatEl = (Element)formatList.item(k); String url = getFirstElementValue(formatEl, "url"); String type = getFirstElementValue(formatEl, "type"); - recordings.add(BigBlueButtonRecordingImpl.valueOf(name, meetingId, startTime, endTime, url, type)); + recordings.add(BigBlueButtonRecordingImpl.valueOf(recordId, name, meetingId, startTime, endTime, url, type)); } } } diff --git a/src/main/java/org/olat/modules/bigbluebutton/model/BigBlueButtonRecordingImpl.java b/src/main/java/org/olat/modules/bigbluebutton/model/BigBlueButtonRecordingImpl.java index a54d2b42799..215259c2de7 100644 --- a/src/main/java/org/olat/modules/bigbluebutton/model/BigBlueButtonRecordingImpl.java +++ b/src/main/java/org/olat/modules/bigbluebutton/model/BigBlueButtonRecordingImpl.java @@ -31,6 +31,7 @@ import org.olat.modules.bigbluebutton.BigBlueButtonRecording; */ public class BigBlueButtonRecordingImpl implements BigBlueButtonRecording { + private final String recordId; private final String url; private final String type; private final String name; @@ -39,7 +40,8 @@ public class BigBlueButtonRecordingImpl implements BigBlueButtonRecording { private final Date start; private final Date end; - private BigBlueButtonRecordingImpl(String name, String meetingId, Date start, Date end, String url, String type) { + private BigBlueButtonRecordingImpl(String recordId, String name, String meetingId, Date start, Date end, String url, String type) { + this.recordId = recordId; this.url = url; this.type = type; this.start = start; @@ -48,10 +50,15 @@ public class BigBlueButtonRecordingImpl implements BigBlueButtonRecording { this.meetingId = meetingId; } - public static BigBlueButtonRecording valueOf(String name, String meetingId, Date start, Date end, String url, String type) { - return new BigBlueButtonRecordingImpl(name, meetingId, start, end, url, type); + public static BigBlueButtonRecording valueOf(String recordId, String name, String meetingId, Date start, Date end, String url, String type) { + return new BigBlueButtonRecordingImpl(recordId, name, meetingId, start, end, url, type); } + @Override + public String getRecordId() { + return recordId; + } + @Override public String getUrl() { return url; diff --git a/src/main/java/org/olat/modules/bigbluebutton/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/modules/bigbluebutton/ui/_i18n/LocalStrings_de.properties index 48d943e2baa..fd14056c80c 100644 --- a/src/main/java/org/olat/modules/bigbluebutton/ui/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/modules/bigbluebutton/ui/_i18n/LocalStrings_de.properties @@ -28,8 +28,9 @@ error.prefix=Ein Fehler ist aufgetreten\: error.server.raw={1} <small>Schl\u00FCssel\: {0}</small> error.start.after.end=Das Enddatum darf nicht vor dem Beginndatum sein. error.too.long.time=Zeit ist zu lang. Es sind maximal {0} Minuten erlaubt. -meeting.create.intro=Der Online-Termin wurde vom Betreuer noch nicht er\u00f6ffnet. Teilnehmer k\u00F6nnen den Raum f\u00fcr noch nicht betreten. +meeting.create.intro=Der Online-Termin wurde vom Betreuer noch nicht er\u00F6ffnet. Teilnehmer k\u00F6nnen den Raum f\u00fcr noch nicht betreten. meeting.description=Beschreibung +meeting.deleted=Das Meeting wurde erfolgreich gel\u00F6scht. meeting.end=Ende meeting.ended=Der Online-Termin wurde bereits beendet. meeting.followupTime=Nachlaufzeit (Min.) diff --git a/src/main/java/org/olat/modules/bigbluebutton/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/modules/bigbluebutton/ui/_i18n/LocalStrings_en.properties index 7d64804bda7..c88ff0d1b41 100644 --- a/src/main/java/org/olat/modules/bigbluebutton/ui/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/modules/bigbluebutton/ui/_i18n/LocalStrings_en.properties @@ -30,6 +30,7 @@ error.start.after.end=The end date must not be before the start date. error.too.long.time=Time is too long. It is limited to {0} minutes. meeting.create.intro=The meeting has not yet been started by the coach. Participants are not able to enter the classroom. meeting.description=Description +meeting.deleted=The meeting was successfully deleted. meeting.end=End date meeting.ended=The online-meeting has already ended. meeting.followupTime=Follow-up (min.) diff --git a/src/main/java/org/olat/modules/bigbluebutton/ui/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/modules/bigbluebutton/ui/_i18n/LocalStrings_fr.properties index 9aee62b80ba..a2782cc2526 100644 --- a/src/main/java/org/olat/modules/bigbluebutton/ui/_i18n/LocalStrings_fr.properties +++ b/src/main/java/org/olat/modules/bigbluebutton/ui/_i18n/LocalStrings_fr.properties @@ -1,15 +1,17 @@ -#Fri Mar 20 14:49:27 CET 2020 +#Thu Mar 26 14:36:51 CET 2020 account.configuration=Configuration add.meeting=Ajouter un meeting add.template=Ajouter un mod\u00E8le admin.menu.title=BigBlueButton admin.menu.title.alt=BigBlueButton -bigbluebutton.intro=Configuration de BigBlueButton, solution de conférences en ligne +bigbluebutton.intro=Configuration de BigBlueButton, solution de conf\u00E9rences en ligne bigbluebutton.module.enabled=Module "BigBlueButton" bigbluebutton.module.enabled.for=Activer pour bigbluebutton.module.enabled.for.courses=Cours bigbluebutton.module.enabled.for.groups=Groupes bigbluebutton.title=BigBlueButton +calendar.open=Voire les r\u00E9servations des salles +calendar.title=Calendrier check=Tester la connection confirm.delete.meeting=Voulez-vous vraiment effacer le meeting "{0}"? confirm.delete.meeting.title=Effacer le meeting "{0}" @@ -18,10 +20,16 @@ confirm.delete.template.title=Effacer le mod\u00E8le "{0}" connection.failed=L'authentification a \u00E9chou\u00E9e. connection.successful=L'authentication a r\u00E9ussi. edit.template=\u00C9diter le mod\u00E8le "{0}" +enable.adhoc.meeting=Adhoc meeting en ligne +enable.permanent.meeting=Meeting en ligne sans date +error.duration=Dur\u00E9e du meeting est trop longue. Dur\u00E9e maximum\: {0} minutes. +error.end.past=Un meeting en ligne ne peut pas \u00EAtre planifi\u00E9 dans le pass\u00E9. error.prefix=Une erreur s'est produite\: error.server.raw={1} <small>Cl\u00E9\: {0}</small> error.start.after.end=La date de fin du rendez-vous ne peut se trouver avant la date de d\u00E9but. +error.too.long.time=Le temps est trop long. Il est limit\u00E9 \u00E0 {0} minutes. meeting.create.intro=Le meeting n'est pas encore disponible. Les participants \u00E0 cette classe ne peuvent pas encore y acc\u00E9der. +meeting.deleted=Le meeting a \u00E9t\u00E9 effac\u00E9. meeting.description=Description meeting.end=Date de fin meeting.ended=Le meeting est termin\u00E9. @@ -42,7 +50,9 @@ meetings.admin.title=Configuration meetings.past=Meetings anciens meetings.title=Meetings meetings.upcoming=Meetings \u00E0 venir +minutes={0} min. no.meeting.configured=Aucun meeting n'a \u00E9t\u00E9 configur\u00E9 pour l'instant. +no.recordings=Il n'y a pour l'instant pas d'enregistrements disponibles pour ce meeting. no.template.configured=Aucun mod\u00E8le n'a \u00E9t\u00E9 configur\u00E9 pour l'instant. no.upcoming.meetings=Vous n'avez pas meeting pr\u00E9vu \u00E0 l'avenir. option.baseurl=URL du serveur BigBlueButton @@ -51,10 +61,39 @@ option.bigbluebutton.secret=Secret option.bigbluebutton.shared.secret=Secret partag\u00E9 option.clean.meetings=Nettoy\u00E9 les meetings (jours) option.dont.clean.meetings=Jamais +recording.browser.infos=Les enregistrements ne peuvent \u00EAtre vus qu'avec Google Chrome ou Firefox. +recording.type.podcast=Podcast +recording.type.presentation=Pr\u00E9sentation +recordings=Enregistrements +role.administrator=Administrateur +role.author=Auteur +role.coach=Coach +role.group=Membre d'un groupe +role.owner=Propri\u00E9taire de cours +server.overloaded=Il n'y pas de salle de r\u00E9union disponible pour la p\u00E9riode choisie. Choisissez une autre date ou un autre mod\u00E8le de salle de r\u00E9union. +table.header.enabled=Activ\u00E9 +table.header.max.concurrent.meetings=Salles de r\u00E9union +table.header.max.duration=Dur\u00E9e +table.header.max.participants=Participants table.header.permanent=Permanent +table.header.recording.end=Fin +table.header.recording.name=Nom +table.header.recording.open=Ouvrir +table.header.recording.start=D\u00E9but +table.header.recording.type=Type table.header.system=Syst\u00E8me +table.header.template=Mod\u00E8le de salle de r\u00E9union +table.header.webcams.only.moderator=Webcam mod\u00E9rateurs seuls +template.autoStartRecording=D\u00E9marrer automatiquement l'enregistrement template.description=Description +template.enabled=Activer le mod\u00E8le de salle de r\u00E9union +template.explain.max.participants=Nombre max. de participants\: {0} ({1} salles de r\u00E9union disponibles) +template.explain.max.participants.with.webcams.mod=Nombre max. de participants\: {0}, webcam pour mod\u00E9rateurs seulement ({1} salles de r\u00E9union disponibles) +template.max.concurrent.meetings=Nombre de salles de r\u00E9union +template.maxDuration=Dur\u00E9e (minutes) template.maxParticipants=Nombre max. de participants template.name=Nom templates.title=Mod\u00E8les +view=Regarder +view.template=Mod\u00E8le de salle de r\u00E9union "{0}" warning.template.in.use=Le mod\u00E8le ne peut pas \u00EAtre effacer car il est encore utilis\u00E9. -- GitLab