Die Klasse SubticketPlugin stellt fünf Methoden bereit, die anderer PHP-Code (etwa ein weiteres osTicket-Plugin) nutzen kann. Die Klasse steht zur Verfügung, sobald osTicket das aktive Plugin geladen hat.
| Methode | Rückgabe | Beschreibung |
|---|---|---|
getChildren($parentId) |
Liste von Arrays mit id, number, subject, status, created |
Children eines Tickets, nach Erstellungsdatum aufsteigend |
getParent($childId) |
Array mit ticket_id, number, subject, status oder null |
Parent eines Tickets |
linkTicket($childId, $parentId) |
bool |
Verknüpft per interner Ticket-ID |
linkTicketByNumber($childId, $parentNumber) |
bool |
Verknüpft per Ticketnummer des Parents |
unlinkTicket($childId) |
bool |
Setzt ticket_pid des Childs auf NULL |
if (class_exists('SubticketPlugin')) {
$plugin = new SubticketPlugin();
$children = $plugin->getChildren($ticket->getId());
}
Beim Verknüpfen prüft das Plugin positive IDs, Selbst-Verknüpfung, Existenz beider Tickets und Schleifen (bis zehn Ebenen). Die Methoden prüfen keine Abteilungsrechte und keine Ticket-Zustände. Das ist Aufgabe des aufrufenden Codes. Bei Fehlern liefern sie false und schreiben eine Zeile mit dem Präfix [SUBTICKET-PLUGIN] ins PHP-Error-Log.
Das Plugin API Endpoints bringt Subticket-Endpunkte für die REST-API mit (tickets-subtickets-parent.php, tickets-subtickets-list.php, tickets-subtickets-create.php, tickets-subtickets-unlink.php), die über die Berechtigung can_manage_subtickets je API-Key freigeschaltet werden.
class_exists('SubticketPlugin'), ob der Subticket Manager geladen ist, und erzeugt eine Instanz. Fehlt die Klasse, antworten die Subticket-Endpunkte mit 501 (Subticket plugin not available).getParent, getChildren, linkTicket und unlinkTicket.Eine Verknüpfung über die REST-API erscheint sofort im Panel und im Queue-Indikator, weil beide dieselbe Spalte ticket_pid lesen.
| Signal | Handler | Wirkung |
|---|---|---|
object.view |
onTicketView() |
Rendert das Panel, wenn ein Ticket im Staff-Bereich angezeigt wird. Registriert nur im Staff-Bereich |
model.created |
onTicketCreated() |
Setzt bei einem neuen Ticket ticket_pid auf die in der Session gemerkte Parent-ID |
model.updated |
onTicketStatusChanged() |
Registriert, hat aber keine Funktion: Die Methode ist leer |
Die Datei queue-decoration.php definiert die Klasse ParentTicketDecoration als Unterklasse von QueueColumnAnnotation. Sie wird früh geladen, damit osTicket sie über die deklarierten Klassen findet. Sie ergänzt die Abfrage um eine Unterabfrage, die die Children je Ticket zählt (Feld _child_count), und rendert Icon icon-code-fork mit Zähler und dem Tooltip „%d sub-ticket(s)“.