Upload via GUI (258 Dateien)
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
# Plugin-Code ist nie direkt per URL aufrufbar – nur über die Hostseiten (staff/plugin.php, api/staff/v1/plugin.php).
|
||||
# Statische Dateien (js, css, Bilder) bleiben erreichbar.
|
||||
<FilesMatch "\.(php|phtml|sql|json|md|txt|log)$">
|
||||
<IfModule mod_authz_core.c>
|
||||
Require all denied
|
||||
</IfModule>
|
||||
<IfModule !mod_authz_core.c>
|
||||
Order deny,allow
|
||||
Deny from all
|
||||
</IfModule>
|
||||
</FilesMatch>
|
||||
Options -Indexes
|
||||
@@ -0,0 +1,56 @@
|
||||
# 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/.disabled` anlegen – dann wird kein Plugin geladen.
|
||||
> nginx: PHP-Dateien unter `/plugins/` per `location ~ ^/plugins/.*\.php$ { deny all; }` sperren (die mitgelieferte `.htaccess` gilt 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`:
|
||||
|
||||
```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/`.
|
||||
Reference in New Issue
Block a user