| Eigenschaft | Wert |
|---|---|
| Plugin-Name | Plugin Update Checker |
| Plugin-ID | net.michalski:update-check |
| Composer-Paket | mmd/osticket-plugin-update-check (Typ osticket-plugin) |
| Plugin-Klasse | UpdateCheckPlugin in class.UpdateCheckPlugin.php |
| Konfigurationsklasse | UpdateCheckConfig in config.php |
| Instanzen | Singleton, wird beim Aktivieren automatisch angelegt |
bootstrap() läuft nur, wenn das aufgerufene Skript plugins.php heißt, also auf der Plugin-Liste des Admin Panels. Bei AJAX-Anfragen (X-Requested-With: XMLHttpRequest) passiert nichts.UpdateCheckPlugin liest die Einstellungen aus der ersten aktiven Instanz.PluginUpdateCollector geht alle über PluginManager::allInstalled() bekannten Plugins durch und liest deren Metadaten per PluginManager::getInfoForPath().GitHubReleaseChecker holt je Plugin mit GitHub-URL das neueste Release, zuerst aus dem Cache, sonst von GitHub.AssetInjector fügt das CSS vor </head> und die Update-Daten samt JavaScript vor </body> ein.ids[] (ihr Wert ist die Plugin-ID) und hängt das Badge an die dritte Spalte, die Versionsspalte.Gibt es kein Update, bleibt die Seite unverändert und es wird nichts eingefügt.
Geprüft wird jedes installierte Plugin, dessen plugin.php im Feld url ein GitHub-Repository nennt. Das gilt für Plugins beliebiger Entwickler, auch für den Plugin Update Checker selbst.
https://github.com/owner/repo, http://github.com/owner/repo, github.com/owner/repo, jeweils mit optionalem .git und optionalem Schrägstrich am Ende./tree/main) werden nicht erkannt.owner/my.plugin wird übersprungen.releases/latest lautet.version aus den Plugin-Metadaten des geprüften Plugins.Vom Tag-Namen und von der installierten Version wird ein führendes v entfernt. Danach entscheidet PHP version_compare(): Ein Badge erscheint nur, wenn die Release-Version größer ist als die installierte. Gleiche oder ältere Versionen und leere Werte erzeugen kein Badge. Pre-Release-Suffixe werden nicht eigens behandelt, sie folgen den Regeln von version_compare().
| Fall | Dauer | Inhalt |
|---|---|---|
| Erfolgreiche Abfrage | Einstellung Cache Duration (hours), Standard 6 Stunden | tag_name und html_url des Releases |
| Fehler oder kein Release | fest 1 Stunde | Marker none |
osticket-update-check im PHP-Temp-Verzeichnis (sys_get_temp_dir()), angelegt mit den Rechten 0755.github_release_<owner>_<repo>.json mit den Feldern expires_at und data. Der Token steht nicht im Cache.| Eigenschaft | Wert |
|---|---|
| URL | https://api.github.com/repos/<owner>/<repo>/releases/latest |
| Methode | GET, über cURL |
| Header | Accept: application/vnd.github.v3+json, User-Agent: osTicket-Plugin-UpdateChecker/..., optional Authorization: Bearer <Token> |
| Timeout | 5 Sekunden Gesamtdauer und 5 Sekunden für den Verbindungsaufbau |
| Weiterleitungen | bis zu 3 |
| TLS | Zertifikat und Hostname werden geprüft |
Die Abfragen laufen nacheinander während des Seitenaufbaus der Plugin-Liste. Bei kaltem Cache und nicht erreichbarem GitHub kann sich die Ladezeit je geprüftem Plugin um bis zu 5 Sekunden verlängern. Danach merkt sich das Plugin den Fehler für eine Stunde. Welche Daten dabei an GitHub gehen, steht unter Datenschutz.
Das CSS und das JavaScript des Plugins liegen im Ordner assets/ und werden inline in die Seite geschrieben, nicht als externe Dateien eingebunden. So braucht es keine Webserver-Anpassung. Die Update-Daten stehen als JSON in window.__pluginUpdates.
Das Badge ist ein Link mit dem Text der neuen Version. Er führt auf die Release-Seite bei GitHub, öffnet in einem neuen Tab (rel="noopener noreferrer") und hat den Tooltip Update available: v<Version>. Das Skript registriert sich außerdem auf pjax:end, damit die Badges nach einer PJAX-Navigation erneut gesetzt werden.
JSON_HEX_TAG und JSON_HEX_APOS kodiert, damit sie kein Script-Tag beenden können.http: oder https: beginnt, und schreibt die Werte per textContent.data-plugin="update-check" verhindert eine doppelte Einfügung.[UpdateCheck] Asset injection failed ins PHP-Fehlerprotokoll.include/plugins/update-check/
+-- plugin.php Plugin-Metadaten
+-- class.UpdateCheckPlugin.php Plugin-Klasse
+-- config.php Konfigurationsformular
+-- src/
| +-- AssetInjector.php Einfügen von CSS/JS in den Output Buffer
| +-- FileCache.php Dateibasierter Cache mit Ablaufzeit
| +-- GitHubReleaseChecker.php URL-Erkennung, GitHub-Abfrage, Versionsvergleich
| +-- PluginUpdateCollector.php Durchläuft die installierten Plugins
+-- assets/
| +-- update-badges.css Badge-Stil
| +-- update-badges.js Badges in die Tabelle setzen
+-- vendor/ Composer-Autoloader (nach composer install)