Plugins

Eigene Plugins erstellen

Plugins können im Verzeichnis /share/plugins/[plugin_type]/ eingebunden werden.

Aktuell werden die folgende [plugin_type]unterstützt:

  • auth

  • repository

  • webservice

Aufbau eines Plugins

Ordnerstruktur:
/pluginname/plugin.php 
           /(config.php)
           /(install.php)
           /(classes/)
           /(processors/)
           /(request/)
           

Die Datei plugin.php erweitert die entsprechende [plugin_type]_plugin_base Klasse. Hier ein Beispiel für ein Repository-Plugin.

class repository_plugin_meinPlugin extends repository_plugin_base {
    const PLUGINNAME = 'meinPlugin';
    
    /**
     * optionale const HIDE_IN_CONFIG
     * Wenn HIDE_IN_CONFIG gesetzt ist, wird kein Tab in config.tpl angezeigt.
     * Dies ist meist bei Subklassen von Plugins der Fall
     */
    const HIDE_IN_CONFIG = true;
    
    /**
     * Optionale Funktion
     * plugin_config wird (falls definiert) in config.tpl über die folgende Renderfunktion aufgerufen
     * {RENDER::plugin_config("{$plugin.type}_plugin_{$plugin.name}")}
     * So können zusätzliche Konfigurationen geladen werden. 
     */
    public function plugin_config(){
        return "Config is working";
    }
}        

Plugin einbinden

Damit ein Plugin genutzt werden kann, muss es aktiviert werden.

Dies geschieht durch einen Eintrag in die Tabelle config. Um z.B. das oAuth2 Plugin zu aktivieren, muss der folgende Eintrag gemacht werden.

Erläuterung:

  • name: Typ des Plugins

  • value: Name des Plugins

  • context_id: 19 (entspricht config Tabelle)

  • type: string (benötigt, damit das Feld value in php den passenden Datentyp erhält)

Alle Einträge mit dem context config (context_id 19) werden in der Datei setup.php über die Funktion $config->load(); //config.class.php line 41geladen.

Die Plugin-Klasse wird über den Klassennamen sowie über $CFG verfügbar gemacht. Die Klasse kann dann folgt instanziert werden:

// Beispiel 1: Wenn ein bestimmtes Plugin aufgerufen werden soll
$auth = $CFG->settings->auth->oauth2;
$auth->test();

$auth1 = new auth_plugin_oauth2();
$auth1->test();

// Beispiel 2: Wenn alle Klassen eines Plugin-Types instanziert werden sollen. 
// Hier das Beispiel zum Laden von Dateien. Es werden alle aktiven Repos aufgerufen.
foreach ($CFG->settings->repository as $r) {
    if (method_exists($r,'getFiles')){
        $files = $r->getFiles($dependency, $id, $files); 
    }
}

Konfiguration

Für plugins ohne eigene Datenbank-Tabelle bietet curriculum die Möglichkeit Konfigurationen in der Tabelle config_plugins zu speichern. Dazu muss die Konfiguration dem Plugin zugeordnet werden. Dazu werden in plugin der Plugin-Bezeichner wie folgt gespeichert: plugintyp/pluginname. Unter name wird der Variablenname und unter value der Wert gespeichert.

Die Konfigurations-Einträge können dann über die Konfigurationsseite (config.tpl) eingesehen und bearbeitet werden.

Last updated