Eigene Moodle Übungen erstellen mit LTI und PHP

Die Lernplattform Moodle stellt standardmäßig bereits eine Auswahl an Aktivitäten bereit. So können Kurs-Administration beispielsweise Multiple-Choice-Tests, Quizzes und Ja/Nein-Fragen verwenden, um ihren Kurs zu gestalten.

Wer anspruchsvoller ist, wird oftmals bei den unzähligen Plugins fündig, die für Moodle angeboten werden. Das Problem hierbei ist aber, dass diese vom System-Admin explizit installiert werden müssen. Bei größeren Moodles (z.B. von Unis) ist dies nicht immer machbar.

Hier kommt LTI (Learning Tools Interoperability) ins Spiel. Kurz gesagt stellt LTI eine Schnittstelle zwischen mehreren Lernplattformen (LMS) dar. Auf diese Weise lassen sich Inhalte, die von anderen Servern kommen, per iFrame in das eigene Moodle einbinden. Für jede LTI Verbindung braucht es einen LTI Provider, der die externen Inhalte liefert, und einen LTI Consumer, der die externen Inhalte einbindet. Praktischerweise ist Moodle von Haus aus ein LTI Consumer. Daher können wir mit ein wenig Programmieraufwand jede Form von Übungen ins Moodle einbinden, indem wir einen LTI Provider bereitstellen.

PHP-Script Erstellen

Damit externe Inhalte Sinn machen, sollte es zum einen möglich sein, den Nutzer zu identifizieren und zum anderen, bei bestandener Leistung die Note zum Moodle zurückzugeben, damit diese ins Gradebook eingetragen wird. Bei LTI wird dies mittels OAuth realisiert. Glücklicherweise muss uns dies überhaupt nicht interessieren, da es bereits ein vorhandenen Framework für PHP (Mirror) gibt, das dies übernimmt.

Zusätzlich habe ich ein kleines Script geschrieben, dass dieses Framework benutzt, um sehr einfach Bewertungen von Moodle abzufragen und zu übertragen. Es enthält die Funktionen getGrade() (Fragt die aktuelle Bewertung ab [0-1]), sendGrade($grade) (Aktualisiert die Bewertung [0-1]), sowie formatGrade($grade) (Gibt die Bewertung in Prozenten ausgedrückt zurück).

Das Folgende PHP Snippet benutzt beide Scripte um zu zeigen, wie man die aktuelle Bewertung im Moodle anzeigt und wie man diese ändert:

<?php
include_once 'lti/util/lti_util.php';
include_once 'myLti.php';

// Update grade
if(isset($_POST['submit'])) {
    $new_grade = intval($_POST['grade']) / 100;
    sendGrade($new_grade);
}

// Get grade
$old_grade = getGrade();
?>

<div style="padding: 20px; font-size: 1.5em; font-family: verdana; line-height: 1.5em;">
    Hallo <?php echo $_POST['lis_person_name_full']; ?><br>
    Deine aktuelle Bewertung: <?php echo formatGrade($old_grade); ?><br>
    Bewertung ändern:

    <form action="" method="post">
        <input type="hidden" name="lis_person_name_full" value="<?php echo $_POST['lis_person_name_full']; ?>">
        <input type="hidden" name="lis_result_sourcedid" value="<?php echo urlencode($sourcedid); ?>">
        <input type="hidden" name="oauth_consumer_key" value="<?php echo urlencode($oauth_consumer_key); ?>">
        <input type="hidden" name="lis_outcome_service_url" value="<?php echo urlencode($lis_outcome_service_url); ?>">
        <input type="text" name="grade">%
        <input type="submit" value="Ändern" name="submit">
    </form>
</div>

So sieht das dann aus:

LTI Beispiel Script

Das Script sollte einigermaßen selbsterklärend sein. Wichtig ist, dass bei dem Formular die vom Moodle übergebenen LTI-Parameter weitergereicht werden (lis_result_sourcedid, oauth_consumer_key und lis_outcome_service_url). Sie werden benötigt um die Bewertung abzufragen bzw. zu ändern. Es wäre aber auch möglich diese Parameter beispielsweise in einer Datenbank zu speichern.

Einbinden in Moodle

Wenn das Script fertig ist und auf den Server geladen wurde, muss es nurnoch in Moodle eingepflegt werden. Hierfür legen wir eine neue Aktivität des Typs Externes Tool an:

LTI Moodle Externes Tool

In dem darauf folgenden Formular müssen wir neben dem Namen und der Beschreibung noch einige Parameter ändern:

LTI Moodle Externes Tool Formular

Bei Start URL müssen wir die URL unseren PHP-Scripts eintragen.
Beim Anwenderschlüssel können wir einen beliebigen Wert eintragen, da wir diesen nicht benutzen.
Bei Öffentliches Kennwort müssen wir „secret“ eintragen, da unser Script das so festlegt. Dieser Wert kann aber im Script geändert werden, um zu verhindern, das Studenten ihre Note fälschen können.

Nach einem Klick auf Speichern und anzeigen sollte das Ganze wie oben dargestellt aussehen. Wenn man die Bewertung ändert, wird diese auch im Gradebook aktualisiert. Dieses Prinzip können wir nun auf eigene Moodle Übungen wie beispielsweise kleine Games, die am Ende eine Note vergeben, übertragen.

Kommentare