Benutzerbenachrichtigungen

  • hallo zusammen,

    in meinem Plugin gibt es die Möglichkeit in verschiedensten Kategorien Einträge zu erstellen. Jetzt würde ich gerne die Benutzer bei neuen/geänderte Einträgen benachrichtigen. Dazu habe ich gesehen, dass es "user notification events" gibt, welche man zu einem Stack zusammenfassen kann.

    Dazu hätte ich zwei Fragen:

    • ist es möglich pro Kategorie einen Stack zu machen? Wenn ja, wie müsste das dann programmtechnisch aussehen?
    • Wie funktioniert das mit dem abonnieren genau? Das Reverse Engineering hat mich da nicht zu 100 % weiter gebracht

    Wäre super, wenn mir jemand helfen könnte :)

    Viele Grüße und schönen Abend
    Dominik

    ich werfe niemandem etwas vor, höchstens hinterher :whistling:

  • ist es möglich pro Kategorie einen Stack zu machen? Wenn ja, wie müsste das dann programmtechnisch aussehen?

    Klar, genau das ist ja der Sinn vom Stacking. Relevent ist dafür der Event-Hash (getEventHash()), dieser wird vom Event bereitgestellt und erlaubt es WCF automatisch zu entscheiden ob eine neue Notification erzeugt wird oder aber das Stacking zum Einsatz kommt.

    Wie funktioniert das mit dem abonnieren genau? Das Reverse Engineering hat mich da nicht zu 100 % weiter gebracht

    Das läuft alles über den UserObjectWatchHandler, eine Referenzimplementierung findest du in Burning Board, aufgerufen etwa in PostEditor::triggerPublication().

  • Habe die Funktion, die Du erwähnt hattest, gefunden. Darin wird im Beispiel folgendes aufgerufen:

    PHP: PostAction.class.php
    // update watched objects
    				if (!$post->isDeleted) {
    					UserObjectWatchHandler::getInstance()->updateObject('com.woltlab.wbb.thread', $threadEditor->threadID, 'post', 'com.woltlab.wbb.post', new PostUserNotificationObject($post->getDecoratedObject()));
    				}

    im PostUserNotificationObject jedoch steht nichts über die eigentliche Benachrichtigung, sondern lediglich über Informationen zum übergebenen Post in diesem Falle. Was ist noch nötig, um z.B. eine Benachrichtung, wie folgende zu erreichen (und dabei eben das Stacking je Kategorie durchzuführen)?


    Außerdem habe ich herausgefunden, dass das 'post' (übergeben hier) in der userNotificationEvent.xml vorkommt. Wofür wird das benötigt? Spielt das mit einer weiteren PHP-Klasse zusammen?


    Sorry für die doofen Fragen, aber irgendwie steh ich diesbezüglich gerade ziemlich auf dem Schlauch :S


    Viele Grüße & schönen Freitagabend
    Dominik

    ich werfe niemandem etwas vor, höchstens hinterher :whistling:

  • Der UserObjectWatchHandler hat nichts mit den Benachrichtigungen zu tun. Du suchst den UserNotificationHandler.
    Du brauchst eine Klasse, die das Interface IUserNotificationEvent bzw. von AbstractUserNotificationEvent erbt.
    Der Eintrag in der userNotificationEvent.xml ist dazu da, um das Benachrichtigungsevent im System zu registrieren. Sonst wüsste der UserNotificationHandler nicht was er machen soll.

  • Super, vielen Dank!
    Was heißt denn die Option preset in der userNotificationEvent.xml? Ist das der Anzeiger, ob die Option beim Benutzer im Profil standardmäßig aktiviert sein soll?

    Dann hätte ich nur noch als Frage, was denn dann der UserObjectWatchHandler macht. Ist der dafür da, dass Benutzer sich Themen (oder in meinem Fall Kategorien) abonnieren können? Sollte dies der Fall sein, würde ich schätzungsweise doch auf diesen zurückgreifen.

    ich werfe niemandem etwas vor, höchstens hinterher :whistling:

  • Was heißt denn die Option preset in der userNotificationEvent.xml? Ist das der Anzeiger, ob die Option beim Benutzer im Profil standardmäßig aktiviert sein soll?

    Korrekt.

    Dann hätte ich nur noch als Frage, was denn dann der UserObjectWatchHandler macht. Ist der dafür da, dass Benutzer sich Themen (oder in meinem Fall Kategorien) abonnieren können? Sollte dies der Fall sein, würde ich schätzungsweise doch auf diesen zurückgreifen.

    Du brauchst ihn auch, denn er verwaltet die Logik hinter Abos. Der UserObjectWatchHandler selbst nutzt aber das Benachrichtigungssystem und daher brauchst du beides.

  • Okay - vielen Dank!
    Dann werde ich das die Tage einmal ausprobieren und für diejenigen, die auch soetwas vor haben die Ergebnisse hier posten.

    ich werfe niemandem etwas vor, höchstens hinterher :whistling:

  • Hallo zusammen,

    ich bin nun so weit gekommen, dass pro Dateiupload in eine meiner Kategorien eine Benachrichtigung erstellt wird. Ziel von mir war es jedoch, pro Kategorie alle Dateiuploads zu schachteln.
    Woran liegt das bzw. was müsste ich ändern, um das zu erreichen?
    @Alexander Ebert: Du meintest etwas bzgl. der Methode getEventHash(). Wird diese verwendet, um z.B. das Stacking durchzuführen? Bei mir sieht diese aktuell so aus:

    PHP
    /**
    	 * @see    \wcf\system\user\notification\event\AbstractUserNotificationEvent::getEventHash()
    	 */
    	public function getEventHash(){
    	    return sha1($this->eventID.'-'.$this->userNotificationObject->getObjectID());
    	}


    Das userNotificationObject ist die hochgeladene Datei. Wenn ich die ID der Kategorie verwende, in welches die Datei hochgeladen wurde, wird die bestehende Notification nicht geändert, aber auch keine neue erzeugt.

    Wo liegt mein Fehler?

    Hier ist einmal meine komplette Klasse:


    Hinweis: Diese Klasse ist noch nicht fertiggestellt, da ich erst die grundsätzliche Funktionsweise sicherstellen wollte.

    Viele Grüße
    Dominik


    #edit: hat sich erledigt - Fehler gefunden. Sobald es fertig ist, werde ich es als kleines HowTo als eigenes Thema posten und hier verlinken.

    ich werfe niemandem etwas vor, höchstens hinterher :whistling:

    Edited once, last by dominik4545: Fehler behoben (February 10, 2016 at 5:52 PM).

  • Guten Abend zusammen,

    jetzt stehe ich leider doch nochmal vor einem Problem, bei welchem ich nicht weiterkomme...
    Es funktioniert alles, außer der E-Mail-Versand. Hierbei werden sämtliche Informationen nicht geladen. So bleibt z.B. die notification leer und $this->notification->timesTriggered ergibt 0. Mich verwundert das sehr, da die Benachrichtigung im WCF vollkommend korrekt angezeigt wird. Eventuell könnte sich jemand nochmals meine Klasse anschauen (die jetzt eigentlich fertig wäre :) ) :

    Vielen Dank & viele Grüße
    Dominik

    ich werfe niemandem etwas vor, höchstens hinterher :whistling:

  • Guten Abend zusammen,

    hat jemand von Euch eine Idee? Würde gerne über's Wochenende weitermachen :)

    Vielen Dank & schönes Wochenende
    Dominik

    ich werfe niemandem etwas vor, höchstens hinterher :whistling:

  • Ich stehe noch immer vor einem Rätsel :S

    Folgende Ausgabe ergibt print_r zum Zeitpunkt von getMessage() der Klasse oben:


    Ein print_r zum Zeitpunkt von getEmailMessage() aus derselben Klasse ergibt jedoch folgendes:


    Wisst ihr, wo meine Autoren und meine Notification hin ist? Vor allem die Information timesTriggered der Notification wäre essentiell, da eine Auswertung der Anzahl von Autoren irrelevant ist. Schließlich kann ein Autor 25 Dateien hochladen, dabei sollen dem Benutzer dann aber auch angezeigt werden, dass 25 neue Dateien und nicht 1 neue Datei hochgeladen wurde.

    Vielen Dank im Voraus für Eure Hilfe!

    Viele Grüße
    Dominik

    ich werfe niemandem etwas vor, höchstens hinterher :whistling:

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!