DeskHub-Plugins
Jedes Plugin liegt in einem eigenen Ordner plugins/<slug>/. Installation, Aktivierung und Entfernung erfolgen im Adminportal unter Plugins.
Dieser Ordner wird bei System-Updates nie überschrieben.
Sicherheit: Plugins sind PHP-Code und laufen mit allen Rechten des Systems (auch Datenbankzugriff). Es gibt keine Sandbox. Nur Plugins aus vertrauenswürdiger Quelle installieren. Bei Problemen: Datei
plugins/.disabledanlegen – dann wird kein Plugin geladen. nginx: PHP-Dateien unter/plugins/perlocation ~ ^/plugins/.*\.php$ { deny all; }sperren (die mitgelieferte.htaccessgilt nur für Apache).
Aufbau
plugins/mein-plugin/
plugin.json Pflicht
plugin.php Startdatei (Standard), registriert Hooks/Menüs/API
pages/*.php Seiten (als Menüpunkt registriert)
migrations/*.sql Datenbank-Änderungen (beim Aktivieren einmalig). Dialekt: name.sqlite.sql / name.mysql.sql laufen nur auf der jeweiligen Datenbank, name.sql auf beiden
assets/ js/css/Bilder
plugin.json:
{
"slug": "mein-plugin",
"name": "Mein Plugin",
"version": "1.0.0",
"description": "Kurze Beschreibung",
"author": "Name",
"requires": "1.0.6",
"permissions": ["hooks.tickets", "ui.menu"]
}
permissions nennt die Erweiterungspunkte, die das Plugin nutzt (hooks.tickets, hooks.cron, ui.menu, ui.sidebar, api.endpoints, db.migrations). Der Admin bestätigt sie bei der Aktivierung; nicht deklarierte Erweiterungspunkte werden abgelehnt. Das ist keine Sandbox. Vollständige Dokumentation inklusive Signieren: README.md im Hauptverzeichnis.
Erweiterungspunkte
| Funktion | Zweck |
|---|---|
plugin_add_hook($hook, $fn) |
auf Ereignisse reagieren |
plugin_add_filter($hook, $fn) |
Inhalte/Werte ergänzen oder verändern |
plugin_register_menu($label, $seite, $recht = null) |
Menüpunkt → pages/<seite>.php (Variablen $staff, $pdo) |
plugin_register_api($name, $fn, $recht = null) |
Endpunkt /api/staff/v1/plugin.php?p=<slug>&endpoint=<name> |
plugin_setting($slug, $key) / plugin_set_setting(...) |
eigene Einstellungen |
Ereignisse (Hooks): ticket.created, ticket.replied, ticket.status_changed, ticket.assigned (Daten: event, ticketId, …),
cron.run (alle ~5 Minuten), plugin.uninstall.<slug> (beim Entfernen mit „Daten löschen“).
Filter: ticket.view.sidebar (HTML-Block in der Ticketansicht; Plugin ist für das Escapen von Ausgaben selbst verantwortlich).
Fehlerverhalten
Wirft ein Plugin einen Fehler, wird er protokolliert und das Ticket/die Seite läuft normal weiter. Nach 3 Fehlern wird das Plugin automatisch deaktiviert (Fehlertext im Adminportal sichtbar). Schwere Fehler (Fatal Error) deaktivieren das gerade ausgeführte Plugin beim nächsten Start.
Ein Beispiel liegt unter docs/plugin-beispiel/.