GithubHelp home page GithubHelp logo

elan-ev / studip-meeting Goto Github PK

View Code? Open in Web Editor NEW
10.0 13.0 17.0 4.22 MB

BigBlueButton, AdobeConnect and MicrosoftTeams Plugin for Stud.IP

License: GNU Affero General Public License v3.0

PHP 64.83% JavaScript 4.82% Vue 28.70% SCSS 1.56% Shell 0.06% Hack 0.03%

studip-meeting's People

Contributors

crosscodr avatar davka avatar dependabot[bot] avatar felix-itz avatar ferishili avatar lkiesow avatar luniki avatar noackorama avatar rillke avatar rlucke avatar schuettloeffel-elsa avatar sebwert avatar superjamp avatar tgloeggl avatar tibroc avatar tleilax avatar xabbuh avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

studip-meeting's Issues

Lastprobleme

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?

Driver können eigene Konfigurationsoptionen mitbringen

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

Fehler im Zusammenspiel mit der JSON:API

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);
            }
        }
    }

Routes for config

The configuration is stored in the Stud,IP global config variable VC_CONFIG as JSON.

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

Routes

GET /config - get complete config as JSON

POST /config - set complete config, overwriting the existing one

Routes for recordings

Fields

Generated

id
name

Routes

GET /rooms/{rooms_id}/recordings/ - get list of recordings for room

GET /recordings/{recordings_id} - get json for this room

DELETE /recordings/{recordings_id}

Redirect back to Stud.IP when the meeting ends

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.

PHP7-Fehler

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

$this->redirect() reparieren

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.

Sprachauswahl über Stud.IP

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.

Umlaute im Titel verschwinden

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.

Anwenderhilfe

Die Anwenderhilfe muss komplett erweitert und angepasst werden.

Plugin defekt für Einrichtungen

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

x

Routes for rooms in seminars

Fields

DB

id
identifier - MD5
remote_id - MD5
name
driver
attendee_password
moderator_password
user_id - MD5
join_as_moderator - tinyint/boolean
mkdate
chdate

Generated

recording_running - boolean
participants - int
recordings - json -> see recording routes for json details

Routes

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}

Auswahl zur Erstellung von AdobeConnect oder BBB Raum

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.

Limit Maximum Meeting Time

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.

Guzzle nur bei Bedarf laden

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.

Sichtbarkeit von Räumen

  • Text in die Box rein über den aktuellen Status
  • Standard auf sichtbar stellen
  • Icon ebenfalls direkt neben den Statustext

Administration

In der Administrationsoberfläche kann man pro Konferenzsystem eine Anbindung mit mehreren Servern einrichten.
Die benötigten Konfigurationsvariablen richten sich dabei nach dem verwendeten Konferenzsystem.

AdminKonfiguration

Reiter-Ebene verschwindet

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

Raumduplikation durch F5 (page reload)

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.

Aufzeichnungen aus Stud.IP heraus verwalten

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.

Raumnamen ändern erstellt neuen Raum

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?

PHP-7.2 warning

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

Konfiguration überprüfen

Beim speichern der Konfiguration sollte diese einmal überprüft werden, sonst fällt eine fehlerhafte Konfiguration erst beim ersten Verwenden des Plugins auf.

Large vs Small Rooms

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.

Small rooms:

  • maxParticipants=50 – If you want larger rooms, enable large rooms. 100 MAY be configurable in the plugin
  • muteOnStart=true

Medium rooms

  • maxParticipants=150
  • webcamsOnlyForModerator=true
  • muteOnStart=true

Large rooms

  • maxParticipants=300
  • lockSettingsDisableCam=true
  • lockSettingsDisableMic=true
  • lockSettingsDisableNote=true

Details need to be discussed

BBB-Raum betreten klappt nicht

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

Feedbackfunktion

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:

  • Browser-Name und -Version
  • Netzwerk-Information (WLAN o.ä.)
  • Prozessortyp
  • Alter des Rechners
  • Anzahl der CPU-Kerne
  • RAM (Hauptspeicher)
  • Upload/Download-Geschwindigkeit
  • Kurs- oder Meeting-ID

Es sollte aber auch möglich sein, so eine Meldung ohne einen gewählten Kurs zu machen.

Einladungslink über Stud.IP erzeugen

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 ;-)

Option Private Chats verbieten

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.

Konferenzen in BBB können über die URL geöffnet werden

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

Kursseite

Die Kursseite wird ähnlich dem folgenden Mockup gestaltet.

Startseite

MeetingHinzufügen

Meetings-Aufzeichnungen und Opencast

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.

Hinweistext

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.

Aufzeichnungen

Der Dialog zum Listen der Aufzeichnungen soll wie folgt aussehen:

Aufzeichnungen

Markierbutton tut nichts

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.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.