Files
2026-11-05 21:23:51 +00:00

36 lines
1.6 KiB
PHP

<?php
// Beispiel-Plugin: protokolliert Ticket-Ereignisse in einer eigenen Tabelle.
// Wird beim Aktivieren geladen; hier werden nur Erweiterungen registriert.
plugin_add_hook('ticket.created', function (array $e) {
$pdo = get_db();
$pdo->prepare('INSERT INTO plugin_beispiel_log (ticket_id, event, created_at) VALUES (?,?,?)')->execute([$e['ticketId'], 'created', db_now()]);
});
plugin_add_hook('ticket.status_changed', function (array $e) {
$pdo = get_db();
$pdo->prepare('INSERT INTO plugin_beispiel_log (ticket_id, event, created_at) VALUES (?,?,?)')->execute([$e['ticketId'], 'status_changed', db_now()]);
});
// Baustein in der Ticketansicht (Plugins liefern fertiges HTML und müssen Ausgaben selbst escapen)
plugin_add_filter('ticket.view.sidebar', function (string $html, array $ctx) {
$stmt = get_db()->prepare('SELECT COUNT(*) FROM plugin_beispiel_log WHERE ticket_id = ?');
$stmt->execute([$ctx['ticketId']]);
return $html . '<div class="card" style="margin-top:16px;padding:14px 16px"><strong>Protokoll-Plugin</strong><br>'
. (int) $stmt->fetchColumn() . ' Ereignis(se) zu diesem Ticket</div>';
});
plugin_register_menu('Ticket-Protokoll', 'log');
plugin_register_api('count', function (array $staff, array $request): array {
return ['count' => (int) get_db()->query('SELECT COUNT(*) FROM plugin_beispiel_log')->fetchColumn()];
});
plugin_add_hook('cron.run', function () {
plugin_set_setting('beispiel', 'last_cron', db_now());
});
// Aufräumen beim Entfernen mit "Daten löschen"
plugin_add_hook('plugin.uninstall.beispiel', function () {
get_db()->exec('DROP TABLE IF EXISTS plugin_beispiel_log');
});