Das Plugin registriert sich rein über osTickets Signal-System und nimmt keine Core-Modifikationen vor:
bootstrap() ruft das Plugin Signal::connect('api', ...) auf — das funktioniert sowohl mit der Standard-API als auch mit dem API Key Wildcard PluginExtendedTicketApiController erweitert osTickets eigenen TicketApiController um die zusätzlichen Parameter und EndpunkteSubticketApiController kapselt die Subticket-Endpunkte als eigenständigen Controllerapi-endpoints/
├── api/ # Endpunkt-Einstiegspunkte
│ ├── tickets-get.php
│ ├── tickets-update.php
│ ├── tickets-delete.php
│ ├── tickets-search.php
│ ├── tickets-stats.php
│ ├── tickets-statuses.php
│ ├── tickets-attachment-download.php
│ └── tickets-subtickets-*.php
├── assets/ # Admin-UI JavaScript/CSS
├── controllers/
│ ├── ExtendedTicketApiController.php
│ └── SubticketApiController.php
├── lib/
│ ├── ApiBootstrap.php
│ ├── Enums/
│ └── Services/
├── tests/ # PHPUnit-Tests
├── docs/
├── class.ApiEndpointsPlugin.php # Haupt-Plugin-Klasse
├── config.php # ApiEndpointsConfig
├── plugin.php # Plugin-Manifest
├── htaccess.template # Vorlage für /api/.htaccess
└── openapi.yaml # OpenAPI-Spezifikation
Die zusätzlichen Berechtigungs-Checkboxen auf der API-Key-Verwaltungsseite kommen nicht aus dem osTicket-Core, sondern werden vom Plugin selbst eingeblendet:
injectAdminUi() injiziert bei Aufrufen von /scp/apikeys.php ein JavaScript, das die zusätzlichen Berechtigungsfelder (can_create_tickets, can_read_tickets usw.) in das bestehende Formular einfügthandleApiKeyFormSubmission() übernimmt diese Felder beim Speichern des API-Keys in die DatenbankDadurch bleibt die osTicket-Core-Oberfläche unverändert, obwohl sie zusätzliche Optionen anzeigt.
file_id tatsächlich in ost_ticket_attachment verknüpft ist. Beliebige Datei-IDs aus ost_file (z.B. Logos, Canned Responses, Knowledgebase-Dateien) werden mit 403 abgelehntAlle GET-Endpunkte unterstützen sowohl JSON (.json) als auch XML (.xml) über die Datei-Endung in der URL. Die XML-Ausgabe übernimmt lib/XmlHelper.php.
Das Plugin wird mit PHPUnit getestet (composer test). Die Validierungslogik liegt gezielt in den Controllern statt in den API-Einstiegspunkten, damit sie isoliert testbar ist.