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:

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

Beitrag von Kizu »

Moin,

das hier war der Punkt:
Da gibt's keine user_id, sondern ein Array davon, weil man mit der Funktion mehrere User gleichzeitig der Gruppe hinzufügen kann.
vielen Dank.
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
Jep. Genau das mache ich. Dankeschön. Ich überschreibe die Notification nicht wirklich, sondern erstelle eine neue und verhindere mit pending = 0 die eingebaute Notification.
Ü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).
In welchem Fall würden sich die beiden Listen denn unterscheiden? Und wo könnte man diese Änderung beantragen? Im Forum von phpBB.com?
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 »

Schau besser einfach in die Funktion rein wenn du es genau wissen willst, sonst schreib' ich hier noch was falsches wenn ich da nur kurz rein schaue.

Auf den ersten Blick sieht's so aus als würde die Funktion die Liste nehmen und prüfen ob irgendwer schon in der Gruppe drin ist. Wenn ja fliegen sie aus der Liste raus (sonst gäb's ja auch einen SQL Fehler).

Zusätzlich werden auch die Statusänderungen dann noch abgefertigt (also z.B. user akzeptiert, die das beantragt haben und in der Liste sind) mit function group_user_attributes($action, $group_id, $user_id_ary = false, $username_ary = false, $group_name = false, $group_attributes = false)

Die Variable die du bekommst sieht für mich aber auf den ersten Blick ungefiltert aus, d.h. wenn du versuchst Personen hinzuzufügen die schon drin sind, aber auch Personen in der Liste sind die noch nicht drin sind kriegst du am Ende alle Personen aufgelistet, selbst wenn bei einigen nix zu tun war.
Und wo könnte man diese Änderung beantragen? Im Forum von phpBB.com?
Ich habe das lange nicht mehr gemacht, in sofern ist meine Info vielleicht veraltet:

Im Grunde musst du es als Code-Änderung einreichen mit Begründung: https://www.phpbb.com/community/viewtop ... &t=2290536
Achtung, das Tutorial ist was älter, ich glaube die Branch-Namen die im Beispiel verwendet werden sind inzwischen nicht mehr richtig.

Hier ist ein aktueller Beispiel PR, das zugehörige Ticket auf phpBB.com ist verlinkt: https://github.com/phpbb/phpbb/pull/5871

Ansonsten gibt's bestimmt auch noch jede Menge Infos dazu irgendwo hier: https://area51.phpbb.com/docs/dev/3.3.x/index.html

Hier gibt's noch nen älteren Post dazu: https://area51.phpbb.com/phpBB/viewtopi ... 26&t=47511

Der PR den du erstellst muss normalerweise für die älteste noch unterstützte phpBB Version erstellt werden, so dass das Event in die Version noch reinkommt - alle neueren kriegen dass dann auch. Heißt: Wenn die erweiterung noch in phpBB 3.2 funktionieren soll, dann muss der PR auch für 3.2 erstellt werden.
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 »

au weih.

Das ist ja ein Aufwand. Ich denke nicht, dass ich das unbedingt brauche. In der Praxis dürften sich die Listen nicht unterscheiden. Vor r allem in mienem Fall, da ich die Liste ja selbst fülle mit den Benutzern, die hinzugefügt werden sollen.

Mir ist allerdings aufgefallen, dass ich beim "approve" es nicht so machen kann. Dort kann ich nicht einfach die Variabel auf 0 setzen, um die Notification zu verhindern. Aber mir ist in der Datenbank die Spalte "notification_type_enabled" aufgefallen. Kann ich dort den entsprechenden Typ nicht einfach deaktivieren, damit das Board keine Default-Benachrichtigung erstellt? Ich habe es eben getestet, indem ich den Datenbankwert manuell verändert habe. Das brachte das gewünschte verhalten.

Gibt es einen offiziellen Weg, um die Notification zu deaktivieren (bei der Installation der Erweiterung) und später wieder zu aktivieren (bei der Deinstallation der Erweiterung)?

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,

habe eine Lösung gefunden. In der ext.php deaktiviere und aktiviere ich die Systemnotification.
gn#36, vielen Dank für deine Unterstützung.

Code: Alles auswählen

public function enable_step($old_state)
	{
		if ($old_state === false)
		{
			$this->container->get('notification_manager')
				->enable_notifications('kizu.moreusergroups.notification.type.grouprequest');
			$this->container->get('notification_manager')
				->enable_notifications('kizu.moreusergroups.notification.type.grouprequest_approve');
			
			$this->container->get('notification_manager')
				->disable_notifications('notification.type.group_request_approved');

			
			return 'notification';
		}

		return parent::enable_step($old_state);
	}

Code: Alles auswählen

	public function disable_step($old_state)
	{
		if ($old_state === false)
		{
			$this->container->get('notification_manager')
				->disable_notifications('kizu.moreusergroups.notification.type.grouprequest');
			$this->container->get('notification_manager')
				->disable_notifications('kizu.moreusergroups.notification.type.grouprequest_approve');

			$this->container->get('notification_manager')
				->enable_notifications('notification.type.group_request_approved');

			return 'notification';
		}

		return parent::disable_step($old_state);
	}
MfG, Daniel
Antworten

Zurück zu „Extension Bastelstube“