Skip to main content

Für Entwickler: Ereignisse

WirdFileshelf synchronisiertlässt sich mit eigenen Plugins erweitern – genau so, wie es die Pro-Version tut. Alle Plugins der Gruppe fileshelf lädt Fileshelf, bevor es seine Ereignisse feuert. Die Klassen liegen in Graup\Component\Fileshelf\Administrator\Event.

Die Ereignisse sind die öffentliche Schnittstelle von Fileshelf. Name, Argumente und öffentliche Methoden ändern sich nur mit einer neuen Hauptversion.

Die Ereignisse

EreignisKlasseWannWas ein Plugin tun kann onFileshelfResolveTokenResolveTokenEventDie Anfrage trägt einen Token (t).grant() überspringt Zugriffsebene und Passwort, reject() sperrt mit Grund token. onFileshelfAccessAccessEventNach Status, Token, Zugriffsebene und Passwort; auch in Listen (Kontext list).deny($reason, $message, $redirect) sperrt. In Listen nichts zählen oder schreiben. onFileshelfBeforeSendBeforeSendEventZugriff erteilt, vor dem Zähler.setFile() tauscht die Datei; Fileshelf prüft sie danach erneut gegen die Ablage. onFileshelfAfterCountAfterCountEventNach dem Hochzählen, vor dem ersten Byte.Nur Meldung; getRequestId() verbindet mit dem nächsten Ereignis. onFileshelfAfterSendAfterSendEventNach dem Senden, auch bei Abbruch.isCompleted(), getBytesSent(), getMethod(). onFileshelfDownloadDisplayDownloadDisplayEventDetailseite, je Position.addHtml() mit fertig maskiertem HTML. onFileshelfDashboardDashboardEventDashboard im Backend.addTile($id, $title, $html, $order); eigenes Recht vorher prüfen. onFileshelfAdminPagesAdminPagesEventDashboard und jede Plugin-Seite.addPage($name, $title, $right, $icon) meldet eine Seite view=page&page=… an; Fileshelf prüft das Recht. onFileshelfAdminPageAdminPageEventDie Plugin-Seite wird angezeigt.addHtml(), addAction($action, $label, $icon, $confirm). onFileshelfAdminActionAdminActionEventEine Aktion der Seite läuft; Token, Recht und Bestätigung sind geprüft.handled($message, $type). onFileshelfFilesInUseFilesInUseEventWerkzeuge, Download-Formular und Medienmanager fragen, welche Dateien der Ablage Plugins gehören.claim($path) für eigene Dateien (z. B. ältere Versionen); sie gelten nie als verwaist. onFileshelfResolveScopesResolveScopesEventVon der Pro-Version (Limits) gefeuert, sobald ein Limit einen Scope-Typ eines anderen Plugins nutzt; die Free-Version feuert es nicht.addScope($type, $id).

Der Download kommt als schreibgeschütztes DownloadRecord (ohne Passwort-Hash), nie als Table-Objekt. Eigene Sperrgründe beginnen mit x-<plugin>-; die Website zeigt dann nur die Nachricht.

Beispiel

final class Example extends CMSPlugin implements SubscriberInterface
{
    public static function getSubscribedEvents(): array
    {
        return ['onFileshelfAccess' => 'onAccess'];
    }

    public function onAccess(AccessEvent $event): void
    {
        if ($event->getContext() !== 'list' && !$this->allowed($event->getUser())) {
            $event->deny('x-example-hours', 'Downloads sind nur werktags möglich.');
        }
    }
}

Formular-Reiter am Download fügen Plugins wie bei Beiträgen mit onContentPrepareForm (Formular com_fileshelf.download) ein und speichern sie in onContentAfterSave (Kontext com_fileshelf.download).