Moodle-development
Bei der Entwicklung von Code für Moodle sind die Ressourcen vom Moodle HQ sehr hilfreich, zuvorderst sind hier das "Developer
Resource centre" und die "Moodle Academy" (Developer learning pathway) zu nennen. Zudem bietet der Community-Workshop „Moodle Plugin-Entwicklung“ einen guten Überblick.
Getting Started
Als zentraler Einstieg mit Verweis auf viele weitere Themen, wie z.B. Developer FAQ und Moodle Debugger, eignet sich Getting Started auf moodledev.io. Empfohlen werden der Moodle PHP CodeSniffer zur Prüfung auf die Coding-Standards und PHPdoc check plugin zur Einhaltung der Dokumentationsstandards. Zudem wird zur Nutzung der Community ermutigt, z.B. developer forum oder Matrix-Kanal.
Lokales Moodle
Entwickelter Code, wie z.B. Plugins, sollten auf einem lokalen Moodle-System getestet werden. Die einfachste Möglichkeit Moodle lokal aufzusetzen ist es, sich den Windows Moodle Installer in der gewünschten Version herunterzuladen und dann "Start Moodle.exe" auszuführen. Im Anschluss ist ein betriebsbereites Moodle mit MySQL, PHP und den Moodle-files unter localhost bereitgestellt. Dies hat den Vorteil, dass der Code lokal per IDE bearbeitet werden kann und nicht auf einem Server liegt. Die php-error-logs liegen dann unter "server/apache/logs/error.log". Die andere Möglichkeit ist es Docker zu benutzen: moodle-docker auf github. Die Academy bietet zudem einen Kurs "Set up your Moodle Development Environment".
Plugin-Typ
Plugin-Entwicklung ist die gängigste Entwicklung in der Community. Hier ist zuerst zu entscheiden, was für ein Plugin entwickelt werden soll. Davon abhängig ist es, wie das Plugin aufgebaut werden muss. Admin-Tools unterscheiden sich z.B. grundlegend von Blöcken oder mod-Plugins. Eine Auflistung aller Typen für Plugins findet sich unter Plugin types (auf moodledev.io). Fast jedes Moodle-Plugin benutzt die gleichen, standardisierten Dateitypen und -namen. So wird z.B. in der "version.php" die aktuelle Version des Plugins gespeichert. Durch eine Erhöhung der Version kann zum Beispiel ein Datenbank-Update forciert werden.
Die Moodle Docs bieten auch eine Seite zum Start in die Moodle-Entwicklung: https://docs.moodle.org/dev/Tutorial
Plugin-Entwicklungsprinzipien
- Upgrade-Skripte verwenden
- Capabilities definieren
- Sprachstrings nutzen
- APIs statt eigener Lösungen
Plugin-Struktur
Beispielhafter Aufbau eines Plugins, siehe auch Kapitel 5 "Typische Dateien, die man in jedem Plugin findet, und ihr Zweck".
local_myplugin/
├── version.php
├── settings.php
├── db/
│ ├── access.php
│ ├── install.xml
│ └── events.php
├── classes/
├── lang/
└── lib.php
Coding-Standards
Besonders für Beiträge zum Moodle-core ist es wichtig, sich an den coding style zu halten. Aber auch für Plugin-Entwicklungen ist ein einheitlicher, gut lesbarer und wartbarer Code, der die Zusammenarbeit und Code-Reviews erleichtert, hilfreich. Grundlage bilden die PHP-Standards PSR-12 und PSR-1. Die Richtlinien behandeln Konsistenz, Lesbarkeit, Namenskonventionen, Sicherheit, Automatische Prüfung (Code checker).
Coding style (auf moodledev.io)
API Guide
Moodle bietet viele Programmierschnittstellen (APIs). Diese können bei Entwicklungen z.B. für viele Standardaufgaben genutzt werden und sind nachhaltiger und kompatibler als eigenen Code zu entwickeln. Häufig verwendete APIs sind die Access API (Rechte und Rollen), Data Manipulation API (DML) (Datenbankzugriffe), File API (Dateiverwaltung), Form API (Formulare), Events API (Ereignisse) und External Functions API (Webservices). Die Nutzung von Events, Hooks und weiteren Core-APIs verbessert die Wartbarkeit.
API Guides (auf moodledev.io)
Security
Durch Implementierung von Schutzmaßnahmen sollten Benutzer:innen, Daten und das Moodle-System vor unbefugtem Zugriff, Datenverlust und Angriffen geschützt werden. Zentrale Elemente hierbei sind Berechtigungen, Prüfung von Nutzereingaben, SQL-Injection verhindern durch Nutzung der Moodle Data Manipulation API (DML), Cross-Site-Scripting (XSS) vermeiden, Ändernde Aktionen absichern, Sensible Informationen schützen, Risiken von Capabilities dokumentieren. Sicherheit sollte fester Bestandteil des Entwicklungsprozesses sein.
Security (auf moodledev.io)
Testing
Durch manuelle und automatische Tests sollen frühzeitig Fehler erkannt und die Stabilität über mehrere Versionen hinweg gesichert werden. Bereits während der Entwicklung sollten Tests geschrieben und regelmäßig ausgeführt werden. Moodle unterstützt u. a. PHPUnit für Unit-Tests und Behat für Akzeptanztests der Benutzeroberfläche.
Continuous Integration (CI)
Moodle Plugin CI ist das von Moodle empfohlene Werkzeug, um Plugins automatisiert zu prüfen. Es bündelt die wichtigsten Tests und Qualitätsprüfungen und lässt sich in CI-Systeme wie GitHub Actions integrieren. Dadurch werden Änderungen bei jedem Commit oder Pull Request automatisch validiert und Fehler frühzeitig erkannt. U.a. PHPUnit, Behat, Moodle Code Checker, PHPDoc Check, Mustache Linting und PHP Linting können automatisiert ausgeführt werden.
Moodle an Hochschulen Plugin Guidelines
Maintaining: https://github.com/moodle-an-hochschulen/moodle-plugin-maintaining/wiki
Readme-Vorlage: https://github.com/moodle-an-hochschulen/moodle-readmetemplate
Autor: Klaus Steitz, Technische Universität Darmstadt