elan-ev / studip-meeting Goto Github PK
View Code? Open in Web Editor NEWBigBlueButton, AdobeConnect and MicrosoftTeams Plugin for Stud.IP
License: GNU Affero General Public License v3.0
BigBlueButton, AdobeConnect and MicrosoftTeams Plugin for Stud.IP
License: GNU Affero General Public License v3.0
Das Meetingsplugin verursacht in seiner jetzigen Form wohl eine ziemlich hohe Last auf der Datenbank, das muss analysiert und behoben werden.
Im Verdacht steht die automatische Aktualisierung, vllt. sollte man die einfach weglassen und nur beim neuladen der Seite aktualisieren?
Bisher sind die möglichen Config-Optionen hart codiert, das soll nun dynamisch passieren um bequem weitere Driver hinzufügen zu können.
Dafür muss das DriverInterface erweitert werden, um eine Discovery der möglichen Config-Optionen zu gestatten.
siehe auch: #8
Ist es denkbar, dass durch das Plugin zu realisieren?
Lecturers want to know the names of participant students in a bbb meeting. UID is too impersonally.
Installierte Driver sollten automatisch erkannt und auf einer Admin-Seite zur Konfiguration angeboten werden.
Das Meetings-Plugin fügt Navigationspunkte hinzu und verläßt sich darauf, dass diese Navigationspunkte vorhanden sind. In der JSON-API ist das nicht der Fall, sodass es zu Fehlern kommt.
Wahrscheinlich wäre es so besser:
public function __construct() {
parent::__construct();
$this->assetsUrl = rtrim($this->getPluginURL(), '/').'/assets';
/** @var \Seminar_Perm $perm */
$perm = $GLOBALS['perm'];
if ($perm->have_perm('root')) {
$item = new Navigation(_('Meetings'), PluginEngine::getLink($this, array(), 'index/all'));
$item->setImage(self::getIcon('chat', 'white'));
if (Navigation::hasItem('/admin/locations')) {
Navigation::addItem('/admin/locations/meetings', $item);
} elseif (Navigation::hasItem('/meetings')) {
Navigation::addItem('/meetings', $item);
}
$item = new Navigation(_('Meetings konfigurieren'), PluginEngine::getLink($this, array(), 'admin/index'));
$item->setImage(self::getIcon('chat', 'white'));
if (Navigation::hasItem('/admin/config/meetings')) {
Navigation::addItem('/admin/config/meetings', $item);
}
} elseif ($perm->have_perm('dozent')) {
$item = new Navigation(_('Meine Meetings'), PluginEngine::getLink($this, array(), 'index/my'));
if (Navigation::hasItem('/profile/meetings')) {
Navigation::addItem('/profile/meetings', $item);
}
}
// do nothing if plugin is deactivated in this seminar/institute
if (!$this->isActivated()) {
return;
}
if (!version_compare($GLOBALS['SOFTWARE_VERSION'], '2.3', '>')) {
if (Navigation::hasItem('/course')) {
$navigation = $this->getTabNavigation(Request::get('cid', $GLOBALS['SessSemName'][1]));
Navigation::insertItem('/course/'.self::NAVIGATION_ITEM_NAME, $navigation['VideoConference'], null);
}
}
}
The configuration is stored in the Stud,IP global config variable VC_CONFIG as JSON.
The JSON format is as follows:
{
"BigBlueButton": {
"enable":"1",
"display_name":"BigBlueButton",
"url":"...",
"api-key":"..."
},
"DfnVc":{
"enable":"1",
"display_name":"Adobe Connect VC",
"url":"...",
"login":"...",
"password":"..."
}
}
Every driver can have its own config options. The routes to retrieve and store the data are therefore quite simple
GET /config - get complete config as JSON
POST /config - set complete config, overwriting the existing one
id
name
GET /rooms/{rooms_id}/recordings/ - get list of recordings for room
GET /recordings/{recordings_id} - get json for this room
DELETE /recordings/{recordings_id}
If a meeting ends, people are redirected to the home server of that specific BigBlueButton server which may be confusing. To prevent this, frontends can provide a logoutURL
when creating a room via API. It would be great if the plug-in would leverage that so that everyone would be redirected to the Stud.IP course.
Die URL bezieht sich auf die XML-API, darf sich aber nur auf die Basis-Domain beziehen
Passiert aktuell im Devboard, wenn man dort auf PHP7 umstellt. Wir lokal in Oldenburg haben laut Nico das gleiche Problem.
Warning: Declaration of MeetingsController::url_for($to) should be compatible with StudipController::url_for($to = '') in /home/studip/trunk/public/plugins_packages/elan-ev/MeetingPlugin/app/controllers/meetings_controller.php on line 0
Das Icon zum umschalten der Rechte soll neben den Text in die Box
Das passiert im Moment ziemlich unschön über die Plugin-URL, da muss einmal das trails-root korrekt gesetzt werden, dann lüppt das auch.
Anwender an der UOL die internationale Videokonferenzen durchführen, wünschen sich, dass man die AdobeConnect-Oberfläche auch auf Englisch umstellen kann.
Laut Antwort vom DFN:
(...Wenn Sie die Meetings über Stud.IP erstellen, dann müssen Sie die Meetingeigenschaften auch darüber einstellen. Falls Stud.IP keine Sprachauswahl unterstützt ist dies also auch nicht möglich....)
ist es prinzipiell möglich müsste aber übers Plugin gesteuert werden.
Kannst du (Till) bitte mal den Aufwand abschätzen, ob man das nicht ins Plugin integrieren könnte.
BigBlueButton kann nicht zuverlässig zurückliefern, ob eine Raum existiert, deshalb schlägt der Check vor dem Betreten eines Raumes fehl, ob dieser existiert.
Unsere Dozenten habe kleine Fehler im Meetings Plugin gefunden.
Stud.IP Version: 4.4.1
Wenn sich im Titel eines Meetings Umlaute befinden und man den Titel nachträglich ändert
dann verschwindet alles vom Titel, was nach dem ersten Umlaut im Titel kommt.
Ist der erste Buchstabe im Titel ein Umlaut, verschwindet der komplette Titel.
Die Anwenderhilfe muss komplett erweitert und angepasst werden.
Der unter "Konfiguration" eingegebene Einleitungstext taucht nirgends auf. Des weiteren sollte der WYSIWYG-Editor verwendet werden.
Aktiviert man das Plugin in Einrichtungen und erstellt den ersten Raum, so wird in der Tabelle seminare
ein neuer Eintrag mit der Id der Einrichtung erstellt. Dies bringt Stud.IP dann aus dem Tritt, weil es nicht mehr korrekt erkennen kann, ob der gewählte Kontext eine Veranstaltung oder eine Einrichtung ist.
x
id
identifier - MD5
remote_id - MD5
name
driver
attendee_password
moderator_password
user_id - MD5
join_as_moderator - tinyint/boolean
mkdate
chdate
recording_running - boolean
participants - int
recordings - json -> see recording routes for json details
GET /course/{course_id}/rooms/ - get list of rooms for course
GET /rooms/{rooms_id} - get json for this room
POST /rooms/ - create a new room
PUT /rooms/{rooms_id} - update room settings
DELETE /rooms/{rooms_id}
In einer Veranstaltung soll ein Berechtigter die Möglichkeit haben, sowohl einen AdobeConnect als auch einen BBB Raum erstellen zu können.
Dafür wird beim Erstell-Formular eine Radio-Buttonauswahl ergänzt, welche die konfigurierten Driver zur Auswahl anbietet.
Add a global option to the meetings plug-in, sending the parameter duration
to BigBlueButton when creating rooms to ensure meetings are eventually terminated. A sane default value could be 240 minutes.
Ist das via BBB-API möglich?
Im Moment wird Guzzle immer geladen, sobald die Plugin-Klasse eingebunden wird. Das kann unschöne Nebeneffekt mit anderen Teilen von Stud.IP haben, deshalb soll Guzzle jetzt immer nur geladen werden, wenn das Plugin "perform" aufruft.
Es müssen dafür allerdings die automatisch via Composer geladenen Plugin-Klassen anders geladen werden, z.B. über den Stud.IP-Autoloader.
Wenn man im Meeting-Plugin ein zuvor angelegtes Meeting löscht, wird anschließend die zweite Menüleiste (ehemals "Reiter") oben nicht mehr angezeigt. D.h. man muss erst wieder auf "Veranstaltungen" klicken und die jeweilige Veranstaltung auswählen, in der man im Meeting-Plugin ein Meeting gelöscht hatte.
Aus dem Stud.IP-Trac übernommen: https://develop.studip.de/trac/ticket/8669
Habe ich einen neuen Raum angelegt, und drücke ich auf F5, um das Bild zu aktualisieren, wird ein weiterer Raum angelegt gleichen Namens. Das kann ich x-mal wiederholen, es werden immer neue Räume angelegt.
Bisher wird die URL der Aufzeichnung von Hand eingetragen. Das sollte perspektivisch über die API möglich sein.
Eventuell sollte dafür ein eigenes Interface herhalten und die Driver das optional implementieren können. Benötigt dann allerdings weiterhein das Fallback, die URL von Hand eintragen zu können.
Gehe ich auf das Icon "bearbeiten" eines Raumes und ändere den Namen des Raumes, dann sehe ich nach Speichern zunächst keine Änderung. Wenn ich dann die Ansicht aktualisiere mit F5 habe ich mit der Namensänderung einen neuen Raum angelegt. Sollte das so sein? Falls nicht, sollte dann nicht eher die Bearbeitung des Feldes unmöglich gemacht werden? Eigentlich geht es ja auch eher um den Link, der eingetragen werden könnte. Oder nicht?
Use of undefined constant enable - assumed 'enable' (this will throw an Error in a future version of PHP) in /usr/studip/studip_44/public/plugins_packages/elan-ev/MeetingPlugin/app/views/admin/index.php on line 16
Beim speichern der Konfiguration sollte diese einmal überprüft werden, sonst fällt eine fehlerhafte Konfiguration erst beim ersten Verwenden des Plugins auf.
Currently, Stud.IP does not limit the room size. This can cause a huge room with all features enabled. This is somewhat problematic and does cause problems for users.
Hence, it would be great to present lecturers with a simple „Large room“ switch which enables/disables a few BBB features using the BigBlueButton API.
maxParticipants=50
– If you want larger rooms, enable large rooms. 100 MAY be configurable in the pluginmuteOnStart=true
maxParticipants=150
webcamsOnlyForModerator=true
muteOnStart=true
maxParticipants=300
lockSettingsDisableCam=true
lockSettingsDisableMic=true
lockSettingsDisableNote=true
Details need to be discussed
Beim Aufruf des Plugins in einer Veranstaltung (aktuelle Version).
/cc @nimuelle
wenn ich mit plugin version 1.5.2 (studip 4.2) und der bbb anbindung einen neuen raum betreten will, lande ich nur auf der allgemeinen übersichtsseite des bbb Servers. Mit Plugin-Version 1.3 (studip 3.4) und ansonsten identischen Einstellungen (mit demselben BBB-Server) klappt das ohne Probleme
Er stellt sich etwas in der Art unseres alten Feedback-Plugins vor (das früher mal rosa Link rechts oben zu sehen war), und würde gerne folgende Daten mit abfragen bzw. (soweit möglich) auch schon per JS aus den im Browser abfragbaren Daten vorbelegen:
Es sollte aber auch möglich sein, so eine Meldung ohne einen gewählten Kurs zu machen.
Can we include the course name iin the room name?
Manche Situationen erfordern es Gäste einzuladen, für die man nicht immer lokale Stud.IP Accounts erstellen möchte, und dann noch erklären muss, wie stud.IP aufgebaut ist, damit die das Meeting in einer LV auch finden.
Auch für formlose Adhoc Meetings unter Kollegen wäre die Option mit Einladungslinks einfacher, da keine Stud.IP LVs dafür erfunden werden müssten.
Ich stelle es mir als Option beim Erstellen des Meetings vor: "Create invitation link" oder so ;-)
Da BBB auch bei Klausuren für Durchsagen genutzt werden soll, wäre eine Option beim erstellen des Raumes um Private Chats zu verbieten noch notwendig.
Jeder neu angelegte Raum, der betreten wird, erhält 01.01.1970. Wird er erneut betreten, bleibt es bei dem falschen ersten Datum.
Getestet mit BBB:
mit joinMeeting/ kann man einen Konferenzraum betreten wenn man kein Teilnehmer ist, wenn man die cid weglässt. Bug oder Feature?
diff --git a/app/controllers/index.php b/app/controllers/index.php
index 29d869a..0f06a63 100644
--- a/app/controllers/index.php
+++ b/app/controllers/index.php
@@ -378,7 +378,10 @@ class IndexController extends MeetingsController
/** @var Seminar_User $user */
$user = $GLOBALS['user'];
- $meeting = new Meeting($meetingId);
+ $meeting = Meeting::find($meetingId);
+ if (!($meeting && $meeting->courses->find(Context::getId()))) {
+ throw new Trails_Exception(400);
+ }
$driver = $this->driver_factory->getDriver($meeting->driver);
// ugly hack for BBB
In Stud.IP sollen Aufzeichnungen für Räume immer deaktiviert sein bis das Opencast-Plugin dem Kurs hinzugefügt wurde. Die Aufzeichnungsansicht im Meetings-Plugin soll deaktiviert werden (Später Plugin-Einstellung).
Ist Opencast in dem Kurs aktiv soll ausgewählt werden können ob ein Meeting aufgezeichnet werden kann. Wird ein Raum für Aufzeichnungen freigegeben, so erscheint ein Hinweistext, dass die Veranstaltung grundsärtlich zunächst gecached wird und was aufgezeichnet wird (siehe unten). Basierend auf der Auswahl wird BigBlueButton beim anlegen der Räume „record=true/false“ übergeben.
Wenn „record=true“ wird immer ein zusätzliches Feld „opencast-series-id“ übergeben um zu identifizieren welche Serie in dem Kurs eingebunden wurde.
Wird die Aufzeichnungsfunktion aktiviert, so wird das gesamte Meeting zunächst gecached und nach Beendigung des Meetings weiter verarbeitet. In der Verarbeitung werden alle Teile entfernt bei denen nicht die Aufzeichnung in BigBlueButton gestartet wurde. Eine kurze Zeit nach der Verarbeitung wird das Gesamtvideo vom Server entfernt.
Die URL sollte jedoch sofort sichtbar sein, da hier mit XHR gearbeitet wird.
Der Markierbutton links neben dem Löschen macht nichts. Ich vermutete, wenn ich den Haken setze, dass dann alle markiert werden sollte. es passiert jedoch nichts.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.