Event um auf Löschung eines Nutzers zu reagieren

  • Betroffene Version
    WoltLab Suite 5.3

    Hallo,

    ich möchte gerne eigenen Code ausführen, bevor oder nachdem ein Benutzer gelöscht wird.

    Mein Ansatz hierfür ist es, einen Event Listener zu registrieren:

    Code
            <eventlistener name="myUserDeletion">
                <eventclassname>wcf\data\user\UserAction</eventclassname>
                <eventname>initializeAction</eventname>
                <listenerclassname>system\event\listener\MyUserDeletionListener</listenerclassname>
                <inherit>0</inherit>
                <environment>all</environment>
            </eventlistener>

    Mit dieser Klasse:

    Nach meinem Verständnis müsste doch der Listener mit "initializeAction" vor der Löschung oder aber mit "finalizeAction" nach der Aktion aufgerufen werden.

    Allerdings wird bei einem Test mit "initializeAction" die Löschung durchgeführt, ohne dass der Listener aufgerufen wird.

    Was übersehe ich hier?

    • Offizieller Beitrag

    Der Listener-Klassenname in der eventListener.xml-Datei ist falsch:

    Diff
    - <listenerclassname>system\event\listener\MyUserDeletionListener</listenerclassname>
    + <listenerclassname>wcf\system\event\listener\MyUserDeletionListener</listenerclassname>

    Du kannst auch AbstractEventListener verwenden und musst dann nur eine Methode onInitializeActionDelete(UserAction $userAction, array &$parameters) implementieren.

  • Am Namespace liegt es leider nicht: ich habe das innerhalb des VieCode-Shops gemacht (also "shop\system\..."), aber das "shop" am Anfang entfernt, um hier keine Verwirrung zu schaffen.

    Das mit der Methode onInitializeActionDelete schaue ich mir an, danke!

    • Offizieller Beitrag

    Bitte immer den konkreten, möglichst unveränderten Code bereitstellen, ansonsten kann keine sinnvolle Hilfe erfolgen!

    Existiert denn die Event-Listener-Datei auch im korrekten Verzeichnis und ist der namespace innerhalb der Event-Listener-Klasse auch korrekt?

    PS: 'delete' !== $eventName ist immer falsch, weil $eventName === 'initializeAction'. Bei der Verwendung von AbstractEventListener und onInitializeActionDelete fällt diese Zeile aber sowieso weg.

  • Ah, das war's, natürlich! Danke für den Anstupser!

    Es muß natürlich if ('delete' !== $eventObj->getActionName()) { sein.

    Update: jawohl, damit funktioniert es!

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!