Hallo,
ich entwickle im Rahmen meines Studiums gerade ein Plugin für Moodle. Leider erhalte ich jetzt immer die Fehlermeldung "Fehler beim Schreiben der Datenbank" und ich komme einfach nicht weiter.
Bisher habe ich mittels der Moodle-Dokumentation die Plugin-DB-Tabellen spezifiziert und sie werden auch korrekt aufgesetzt und befüllt. Bisher hatte ich auch eher selten Probleme mit dem Datenbankhandling. Allerdings scheitere ich nun daran, eine Instanz des Plugins einem existierenden Kurs hinzuzufügen. Das Formular zur Bearbeitung (Name, Beschreibung, etc.) wird korrekt angezeigt. Sobald ich auf "Speichern und …" klicke bekomme ich allerdings besagten Fehler.
Um eine Lösung zu finden habe ich zum einen Debug-Ausgaben (echo) in meinen Code eingebaut. Außerdem habe ich mir das Query-Log genau angesehen (dieser eine Klick auf "Speichern" erzeugt bei mir ~400 Zeilen Query-Log). Noch dazu habe ich sogar eine zusätzliche DB-Tabelle angelegt, in die ich mittels $DB->insert_record(…) Debug-Ausgaben schreibe. Alles ohne jede Fehlermeldung. Auch habe ich mir andere Plugins angesehen und den Code verglichen. Ich bin nur einfach nicht in der Lage einen Fehler zu finden. Alle anderen Plugins, die ich zum Vergleich herangezogen habe funktionieren einwanfrei.
Für die Entwicklung habe ich mir folgende Umgebung aufgebaut:
- Moodle 3.3.2
- MySQL 5.7.20
- PHP 7.0.22
- Lighttpd 1.4.35 (ssl)
Laut dem Query-Log passiert folgendes:
1. INSERT INTO mdl_PLUGIN (name,course,intro,introformat) VALUES('Name','2','<p>Beschreibung<br></p>','1')
2. SELECT * FROM mdl_context WHERE contextlevel = '70' AND instanceid = '24' (=> NULL)
3. DELETE FROM mdl_course_modules WHERE id = '24' (Scheint zu funktionieren, weil ein SELECT NULL liefert)
4. ROLLBACK
5. ein 37-zeiliges SELECT, das ich nicht verstehe und das u.a. pagetype = 'mod-PLUGIN-mod' enthält
Ich habe auch versucht die Aufrufe nachzuvollziehen. Bei mir wird die Funktion instance(…) aus moodle/lib/accesslib.php:6910 zuerst 3x aufgerufen. Danach wird 1x meine mod_form.php aufgerufen. Anschließend wieder 3x die accesslib.php, 1x mod_form.php und schließlich noch 3x die accesslib.php. Danach ist Ruhe. Meine eigene PLUGIN_add_instance($instance) aus meiner lib.php wird gar nicht aufgerufen.
Hier auch mal eine Übersicht der Dateien, die ich für mein Plugin bereits erstellt habe:
- db
-- install.php
-- install.xml (via XMLDB-Manager)
-- services.php
-- uninstall.php
-- upgrade.php
-- upgradelib.php
- lang
-- en
--- PLUGIN.php
- externallib.php
- index.php
- lib.php
- mod_form.php
- settings.php
- version.php
- view.php
Gibt es irgendwelche Vorschläge oder Ideen, die mir helfen können den Fehler zu finden und ggf. zu beheben? Das es nicht an meiner Test-Umgebung liegt, weiß ich. Denn ich habe zusätzlich zu meiner lokalen Installation noch eine zweite auf einem Webserver installiert (ebenfalls Moodle 3.3.2, aber MariaDB 10 und PHP 5).
Freue mich über jede sinnvolle Anregung.
Beste Grüß,
Lars