Startseite » Blog » Web Development » 📁 Moodle File API – Überblick & Grundlagen

📁 Moodle File API – Überblick & Grundlagen

Die File API ist ein zentraler Bestandteil von Moodle und spielt eine entscheidende Rolle für Sicherheit, Zugriffskontrolle und Dateiverwaltung.


🗄️ Speicherung von Dateien in Moodle

📌 Wichtig zu wissen:

  • Hochgeladene Dateien werden physisch im moodledata-Verzeichnis auf dem Server gespeichert
  • Die Datenbank speichert nur Metadaten, z. B.:
    • Referenzen
    • Strukturinformationen
    • Zugriffslogik

Ein vollständiges Backup benötigt daher zwingend:

  • die Datenbank
  • UND den Ordner moodledata

🧩 File Areas – Wie Moodle Dateien organisiert

Nach dem Upload werden Dateien in sogenannten File Areas abgelegt.
Diese sind in der Datenbank definiert und sorgen dafür, dass jede Datei:

  • einen eindeutigen Identifikator erhält
  • nur in berechtigten Kontexten ausgeliefert werden kann 🔐

🧱 Eine File Area wird definiert durch:

🔹 contextid – aus welchem Kontext stammt die Datei
🔹 component – z. B. course, mod_forum, block_html (Frankenstyle)
🔹 filearea – z. B. intro, post
🔹 itemid

  • 0, wenn es nur eine Instanz gibt
  • sonst die ID des zugehörigen Datensatzes (z. B. Forenbeitrag)

📘 Beispiel:

  • Kurseinführung → itemid = 0
  • Forenbeitrag → itemid = post_id

🌍 Contexts – Zugriffsbereiche in Moodle

📂 Dateien sind immer an einen Context gebunden:

ContextBedeutung
🏛️ context_systemGesamte Moodle-Seite (Root)
👤 context_userEinzelner Benutzer
📚 context_coursecatKurskategorie
🎓 context_courseKurs
🧩 context_moduleAktivität
🧱 context_blockBlock

👉 Eine Datei ist nur im jeweiligen Context verfügbar, z. B.:

  • Datei im Kurs → nur context_course
  • Datei im Block → nur context_block

🌐 Dateien an Nutzer ausliefern (Serving Files)

📎 Dateien werden nicht direkt vom Dateisystem ausgeliefert, sondern über die File API.

🔑 Entscheidend ist:

  • make_pluginfile_url()
  • Optional: force_download
$url = moodle_url::make_pluginfile_url(
    $file->get_contextid(),
    $file->get_component(),
    $file->get_filearea(),
    $file->get_itemid(),
    $file->get_filepath(),
    $file->get_filename(),
    false // kein Zwangsdownload
);

🔐 Zugriffskontrolle: componentname_pluginfile()

Jedes Plugin, das Dateien ausliefert, muss eine Pluginfile-Funktion haben:

📌 Beispiel:

function mod_myplugin_pluginfile(...) {
    require_login($course, true, $cm);

    if (!has_capability('mod/myplugin:view', $context)) {
        return false;
    }

    send_stored_file($file, DAY_SECS, 0, $forcedownload);
}

✔️ Hier wird geprüft:

  • Context
  • Filearea
  • Login
  • Berechtigungen
  • Zugehörigkeit zum Datensatz

🛠️ Dateien erstellen mit der File API

🧱 Grundstruktur ($fileinfo):

  • contextid
  • component
  • filearea
  • itemid
  • filepath
  • filename

📂 Datei aus dem Dateisystem

$fs->create_file_from_pathname($fileinfo, '/tmp/file.txt');

🌍 Datei von einer URL

$fs->create_file_from_url($fileinfo, 'https://example.com/file.txt');

🧵 Datei aus einem String

$fs->create_file_from_string($fileinfo, 'Hello World');

🔁 Datei aus einer bestehenden Datei

$fs->create_file_from_storedfile($fileinfo, $existingfile);

🔍 Weitere wichtige File-API-Funktionen

📑 Alle Dateien einer File Area auflisten

$files = $fs->get_area_files($contextid, 'mod_myplugin', 'post', $postid);

📖 Dateiinhalt lesen

$content = $file->get_content();

oder als File-Handle:

$fh = $file->get_content_file_handle();

⚠️ Nur lesen – niemals schreiben!
⚠️ Immer fclose() aufrufen


💾 Datei lokal speichern (z. B. für Verarbeitung)

$file->copy_content_to('/tmp/file.txt');

🗑️ Datei löschen

$file->delete();

🔄 Dateien verschieben / umbenennen

  • Im selben Bereich: rename()
  • In andere File Area:
    • neue Datei anlegen
    • alte Datei löschen

🔄 Dateikonvertierung (z. B. zu PDF)

📌 Voraussetzung: unoconv installiert

$convertedfile = $fs->get_converted_document($file, 'pdf');

🧠 Fazit

✨ Die Moodle File API sorgt für:

  • 🔐 Sicherheit
  • 🎯 Kontextbasierte Zugriffe
  • 🧱 Saubere Struktur
  • 🚫 Kein direkter Dateisystem-Zugriff

➡️ Alle Dateioperationen laufen ausschließlich über die File API

,

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

error: Content is protected !!