Link in den Benachrictigungen überschreiben oder eigenen Notification type generieren

In diesem Forum gibt es Starthilfe zum neuen Extension-System von phpBB 3.1/3.2. Fragen zur Entwicklung von Extensions und zur Konvertierung von phpBB 3.0.x MODs sind ebenfalls willkommen.
Kizu
Mitglied
Beiträge: 543
Registriert: 11.05.2007 15:19
Wohnort: Bremen
Kontaktdaten:

Link in den Benachrictigungen überschreiben oder eigenen Notification type generieren

Beitrag von Kizu »

Moin zusammen,

Ich versuche gerade eine alternative Gruppenverwaltung zu programmieren und möchte dazu, wenn das möglich ist, die PHPBB-eigenen Funktionen group_user_add und group_user_del verwenden. Diese erzeugen jedoch eine Benachrichtigung mit dem Link auf das User Control Panel.

Kann ich diesen Link irgendwie überschreiben mit meinem eigenen? Die Methode get_url() in der Klasse group_request gefunden, aber wie kann ich diese überschreiben, ohne den Quelltext im Core zu ändern?

Oder muss ich die oben genannte Funktion nachbauen und meinen eigenen Notification-type definieren? Gibt es dazu eine Dokumentation?

MfG, Daniel
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Re: Link in den Benachrictigungen überschreiben oder eigenen Notification type generieren

Beitrag von gn#36 »

Es gibt diverse Hooks, bei denen du dich in diverse Funktionen einhängen kannst.

Für dich gibt's auch nen nützlichen, zumindest beim hinzufügen von Usern:

Code: Alles auswählen

core.group_add_user_after
Wenn du dich hier einhängst kannst du die übergebenen Daten nutzen, du kannst sie aber auch modifizieren. Da die Notifications erst danach verschickt werden ist es vielleicht möglich, die Listen einfach zu leeren und die Notifications quasi an keine Nutzer zu schicken.

Ob das auch beim löschen geht habe ich nicht nachgesehen.

Ansonsten: Um bestehende Notifications zu verändern müsste es möglich sein, die entsprechende Notification in deiner Erweiterung zu "überschreiben". Hierbei legst du in deiner Erweiterung dieselber Notification noch mal an, allerdings mit anderem Inhalt. In wiefern das zulässig ist in einer auf phpBB.com veröffentlichten Erweiterung weiß ich nicht, kann ich mir fast nicht vorstellen.

Wird dann so angelegt wie eine eigene Notification (im Zweifel einfach mal in Erweiterungen die sowas verschicken nachsehen), allerdings musst du in der services.yml den Namen der ursprünglichen Notification verwenden. Da deine Datei später eingebunden wird als das phpBB original müsste deine Notification dann das original überschreiben.

PS: Ich habe da nur einen sehr kurzen Blick drauf geworfen. Kann sein dass ich mich irre. Für mich sieht das auch so aus als würden Nachrichten nur verschickt, wenn noch bestätigt werden muss, dass jemand in die Gruppe aufgenommen wird.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Kizu
Mitglied
Beiträge: 543
Registriert: 11.05.2007 15:19
Wohnort: Bremen
Kontaktdaten:

Re: Link in den Benachrictigungen überschreiben oder eigenen Notification type generieren

Beitrag von Kizu »

Hallo gn#36,

Das einfache Überschreiben scheint nicht zu funktionieren, oder ich mache irgendwas falsch. Gibt es dafür ein Tutorial? Also wie erstelle ich eine Notification bzw. nutze sie?

Und wie funktionieren die Hooks? Finde ich dazu irgendwo ein Tutourial oder Beispiele? Ich habe zwar hier eine Dokumentation gefunden,, aber ich verstehe nicht, wie ich das anwenden kann.

MfG, Daniel
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Re: Link in den Benachrictigungen überschreiben oder eigenen Notification type generieren

Beitrag von gn#36 »

Ich denke du solltest dich erst mal grundlegend in das Thema Erweiterungen einlesen - Hooks sind die Grundlage jeder Extension die mehr macht als bloß ein paar Templates zu ergänzen (und selbst das nutzt letztlich Hooks).

Lesestoff:
Knowledge Base - Eigene phpBB Erweiterungen erstellen
Knowledge Base - Eigene phpBB Erweiterungen erstellen (Fortgeschrittene Themen)

Wenn du da durch bist kannst du dir einfach in einer existierenden Erweiterung ansehen wie man Benachrichtigungen erstellt (der Teil fehlt noch im zweiten Artikel).

Daneben ist es für Helfer hilfreich, wenn du hier postest was du probierst, also zumindest anonymisierter Beispielcode. "funktioniert nicht" lässt sich nicht anschauen um rauszufinden was falsch ist...
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Kizu
Mitglied
Beiträge: 543
Registriert: 11.05.2007 15:19
Wohnort: Bremen
Kontaktdaten:

Re: Link in den Benachrictigungen überschreiben oder eigenen Notification type generieren

Beitrag von Kizu »

Hallo gn#36,

Ich hatte mich bisher an der englischen Dokumentation langehangelt und hier die Skeleton-Erweiterung gefunden. Diese habe ich installiert und bisher hauptsächlich im Controller meinen Code eingesetzt und das entsprechende Template geschrieben bzw. weitere Templates erstellt. Einiges habe ich durch das ausprobieren, kopieren von anderem Code bzw. das interpretieren der Fehlermeldungen beim "learning by doing" gelernt. :)

Vielen Dank für den Link auf die deutschen Einführungen zur Erweiterungsprogrammierung. die hatte ich bisher nicht gefunden. Werde ich mir mal durchlesen.

MfG, Daniel
Kizu
Mitglied
Beiträge: 543
Registriert: 11.05.2007 15:19
Wohnort: Bremen
Kontaktdaten:

Re: Link in den Benachrictigungen überschreiben oder eigenen Notification type generieren

Beitrag von Kizu »

Moin,

vielen Dank für die Links noch einmal. Ich denke ich habe nun verstanden, wie diese Events funktionieren und werde es demnächst mal ausprobieren.

ich habe mir gerade die erste Anleitung durchgelesen und beim nachbauen mir sind ein paar Fehler aufgefallen. Die zweite Anleitung werde ich mir dann auch noch vornehmen. Datenbankänderungen brauche ich später auch noch.

Hier die Liste der Fehler, die mir aufgefallen sind:
Ein spezieller Eintrag in der config/service.yml
Die Datei müsste doch services.yml heißen.

------------------------------------------------
Die PHP Klasse muss nun entsprechend der Definition in der services.yml unter ext/gn36/infobar/event/ in einer Datei namens global_events liegen.
Die php-Klasse müsste doch in einer Datei mit der Endung php abgespeichert werden. Also ist hier wohl global_events.php gemeint?

------------------------------------------------

Code: Alles auswählen

lang_set'      => 'global', //Name der Datei im Unterverzeichnis ext/gn36/infobar/languages/[iso]/
Der Ordner müsste language (ohne s) heißen. Außerdem wäre es noch gut, drauf hinzuweisen, dass hier die Dateiendung der Datei nicht angegeben wird. Also mein Vorschlag:
//Name der Datei im Unterverzeichnis ext/gn36/infobar/language/[iso]/ ohne Dateiendung
------------------------------------------------
Für ein deutschsprachiges Forum legen wir also nun die Datei ext/gn36/infobar/language/de/global.php mit folgendem Inhalt an:
Ich habe nur einen de-Ordner angelegt. PHPBB hat dann aber einen Fehler angezeigt und wollte die englische Datei auch haben.

------------------------------------------------

Und in der Sprachdatei fehlt eine schließende Klammer:

Code: Alles auswählen

$lang = array_merge($lang, array(
        // Notifications
        'SAMPLE_LANGVAR'                              => 'Generische Sprachvariable. Irgend einen Text eingeben',
);
Die letzte Zeile sollte so aussehen:
));
MfG, Daniel
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Re: Link in den Benachrictigungen überschreiben oder eigenen Notification type generieren

Beitrag von gn#36 »

Faszinierend. :o

Das kommt wohl davon dass ich die Anleitung damals mehr oder weniger aus dem Kopf heraus aufgeschrieben habe :cookie:

Danke jedenfalls. Ich hab's mal weitergegeben - Edit Rechte habe ich inzwischen auch nicht mehr...
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17401
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Re: Link in den Benachrictigungen überschreiben oder eigenen Notification type generieren

Beitrag von Dr.Death »

Danke für die Hinweise, ich passe das an.
Kizu
Mitglied
Beiträge: 543
Registriert: 11.05.2007 15:19
Wohnort: Bremen
Kontaktdaten:

Re: Link in den Benachrictigungen überschreiben oder eigenen Notification type generieren

Beitrag von Kizu »

Moin,

das mit dem Event klappt nun, nur wird in meiner Notification der Name des Benutzers nicht angezeigt:
Group Request from Anonymus to Join the Group test.
Ich rufe die Notification auf mit diesem Code:

Code: Alles auswählen

$phpbb_notifications->add_notifications('kizu.moreusergroups.notification.type.sample', array(
				'group_id'		=> $event['group_id'],
				'user_id'		=> $event['user_id'],
				'group_name'	=> $groupname
));
Und wenn ich das richtig verstanden habe, müsste doch diese Methode dann die Benutzerid als Item id setzen, oder? In der Datenbank steht jedoch bei der Notification die 0 als Item_ID.

Code: Alles auswählen

	public static function get_item_id($group)
	{
		##return $data['notification_id'];
		return (int) $group['user_id'];
	}
Die Parent-ID wird allerdings ordentlich in der Datenbank eingetragen, vermutlich hierdurch?

Code: Alles auswählen

	public static function get_item_parent_id($group)
	{
		// No parent
		#return 0;
		
		// Group id is the parent
		return (int) $group['group_id'];
	}
MfG, Daniel
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Re: Link in den Benachrictigungen überschreiben oder eigenen Notification type generieren

Beitrag von gn#36 »

Welches Event genau benutzt du denn jetzt? Und wie genau überschreibst du die Notification?

Wenn du das Event hier nutzt:

Code: Alles auswählen

/**
2795      * Event after users are added to a group
2796      *
2797      * @event core.group_add_user_after
2798      * @var    int    group_id        ID of the group to which users are added
2799      * @var    string group_name        Name of the group
2800      * @var    array    user_id_ary        IDs of the users which are added
2801      * @var    array    username_ary    names of the users which are added
2802      * @var    int        pending            Pending setting, 1 if user(s) added are pending
2803      * @since 3.1.7-RC1
2804      */
2805      $vars = array(
2806          'group_id',
2807          'group_name',
2808          'user_id_ary',
2809          'username_ary',
2810          'pending',
2811      );
Da gibt's keine user_id, sondern ein Array davon, weil man mit der Funktion mehrere User gleichzeitig der Gruppe hinzufügen kann.
Hängt aber dannn natürlich davon ab wie genau du jetzt die Notification überschreibst. Die Pending Variable auf false deaktiviert den Versand innerhalb der Funktion, danach kannst du dann natürlich machen was du willst (weil das nach dem Hinzufügen zur Gruppe ist ändert das nichts daran, in welchem Zustand die User hinzugefügt werden - normalerweise ist die Variable ja dazu da zwischen Anfragen und tatsächlichem hinzufügen zu unterscheiden). An der Stelle kannst du aber auch sehen wie du es umsetzen könntest.

Übrigens sieht es für mich so aus als wäre die Liste der User Ids ungefiltert - wirklich hinzugefügt wird nämlich die Variable $add_id_ary, die bekommst du aber in dem Event nicht. Du kriegst stattdessen die Liste der User, die hinzugefügt werden sollen. Der Sinn dafür erschließt sich mir nicht - wenn du die Variable brauchst könntest du auf phpBB.com die Ergänzung der Variable beantragen (für eine der nächsten Versionen dann).
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Antworten

Zurück zu „Extension Bastelstube“