acp listener

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.
Antworten
Benutzeravatar
chris1278
Mitglied
Beiträge: 3533
Registriert: 12.11.2007 06:20
Wohnort: Euskirchen
Kontaktdaten:

acp listener

Beitrag von chris1278 »

Hallo ich würde gerne eine acp listener in eine meiner Erweiterungen einbauen.

Und zwar möchte ich gerne im Bereich Benutzer verwalten -> übersicht:

https://prnt.sc/JxYYCV0xKLh0

Eine Checkbox eingebaut. Das html event hab ich schon vorbereitet:

https://prnt.sc/MKTvc_4BENvf

Das ist kein Problem.

Ich würde gerne für meine Listener die core.events wissen welche ich benötige.

Ich hab mal ne test listener erstellt aber da lädt nix:

Hier mal im pastbin hochgeladen:

acp_listener

Den dazu gehöhrigen eintrag in der services.yml hab ich auch:

Code: Alles auswählen

    chris1278.callsigndb.listener:
        class: chris1278\callsigndb\event\acp_listener
        arguments:
            - '@request'
            - '@user'
            - '@dbal.conn'
            - '@template'
            - '@language'
            - '@controller.helper'
            - '%chris1278.callsigndb.callsign%' 
            - '%core.root_path%'
            - '%core.php_ext%'
        tags:
            - { name: event.listener }


Und die event datei:

Code: Alles auswählen

<dl>
	<dt><label for="csstamp">{{ lang('CSSTAMP_DEL') ~ lang('COLON') }}</label></dt>
	<dd><input type="checkbox" id="csstamp_del" name="csstamp_del" value="csstamp_del" autocomplete="off" /></dd>
</dl>
<br><br>
{{ '12345' }}
Leider wenn ich dann den Benutzer aufrufe tut sich nix. Evtl. jemand typ was ich falsch mache.
Benutzeravatar
LukeWCS
Supporter
Supporter
Beiträge: 2119
Registriert: 15.12.2014 10:19
Kontaktdaten:

Re: acp listener

Beitrag von LukeWCS »

Hey Chris

Ich habs mir jetzt nicht direkt in phpBB angeschaut, aber als erster Anlaufpunkt solltest du dir mal anschauen, welche PHP Events auf der betreffenden ACP Seite überhaupt getriggert werden.

Du benutzt doch auch "Show phpBB Events", oder? Da werden ganz unten auch die PHP Events gelistet, die bei der betreffenden Seite involviert sind. Diese Events müsstest dir mal im Einzelnen anschauen und denn passenden raussuchen der in Frage kommen könnte und dann die Infos dazu aus der Event Liste anschauen:

https://area51.phpbb.com/docs/dev/3.3.x ... _list.html
chris1278 hat geschrieben: 01.06.2023 21:21 Eine Checkbox eingebaut. Das html event hab ich schon vorbereitet:
Wie genau hast du das realisiert? Welches HTML Event nutzt du dazu?

edit: Okay, habs, du nutzt acp_users_overview_options_append dafür, das würde schon mal passen, da das innerhalb der FORM ist.

edit2:

Was den PHP Event angeht, würde ich mal bei core.acp_users_overview_modify_data ansetzen.

Wegen deiner Event Registrierung:

Code: Alles auswählen

                        'core.acp_users_avatar_sql'                                                                     => 'test',
                        'core.acp_users_display_overview'                                                                       => 'test',
                        'core.acp_users_mode_add'                                                                       => 'test',
                        'core.acp_users_modify_profile'                                                                 => 'test',
                        'core.acp_users_modify_profile'                                                                 => 'test',
                        'core.acp_users_overview_before'                                                                        => 'test',
                        'core.acp_users_overview_modify_data'                                                                   => 'test',
                        'core.acp_users_prefs_modify_data'                                                                      => 'test',
                        'core.acp_users_prefs_modify_data'                                                                      => 'test',
                        'core.acp_users_prefs_modify_template_data'                                                                     => 'test',
                        'core.acp_users_profile_modify_sql_ary'                                                                 => 'test',
                        'core.acp_users_profile_validate' 
Du hast da 2 Core Events doppelt drin, das ist sinnfrei. So verkalkt ist phpBB noch nicht, das man ständig alle Anweisungen wiederholen müsste. :D
Möge das Backup mit dir sein. Immer.

Erweiterungen - Infos zur artgerechten Haltung
phpBB Ext Check - Analysesystem für phpBB Erweiterungen (Entwickler Werkzeug)
Benutzeravatar
chris1278
Mitglied
Beiträge: 3533
Registriert: 12.11.2007 06:20
Wohnort: Euskirchen
Kontaktdaten:

Re: acp listener

Beitrag von chris1278 »

Ich habe es schon realisiert aber ich hab das in die normale listener.php mit integriert.

Und zwar so:

Code: Alles auswählen

'core.acp_users_overview_before'				=> 'del_csstamp_user',
Das event passt für beide optionen.

Das Problem ist das dier Checkbox zwar funkltioniert wenn aktiv ist aber wenn der Benutzer gelöscht wird durch den Admin bleiben die Einträge in meiner Rufzeichen Datenbank erhalten. Das liegt daran das die Checkbox und die Option Benutzer löschen zwei verschiedene formulare sind. Auch wenn diese in der Übersichtseite beide angezeigt werden.

Der dazu gehögrige funktionsaufruf in der listener sieht dann so aus:

Code: Alles auswählen

//die nachfolgende public funktion ist für die checkbox  im acp zum rufzeichen löschen
public function del_csstamp_user($event)
{
	$this->language->add_lang('acp_delcs_callsigndb', 'chris1278/callsigndb');
	$del_info			= $event['user_row'];
	$cssatmp_for_del	= $del_info['csstamp'];
	$del_id				= $this->read_csstamp_value('id', $cssatmp_for_del);
	$delete				= $this->request->variable('delete', 0);

	if ($delete == 1)
	{
		if (confirm_box(true))
		{
			$this->db->sql_query('DELETE FROM ' . $this->callsign_table . ' WHERE id = "' . $del_id . '"');
		}
	}

	if ($this->request->variable('csstamp_del', '') == 'csstamp_del')
	{
		$this->db->sql_query('DELETE FROM ' . $this->callsign_table . ' WHERE id = "' . $del_id . '"');
	}
}

Und zwar der teil hier:

Code: Alles auswählen

if ($delete == 1)
{
	if (confirm_box(true))
	{
		$this->db->sql_query('DELETE FROM ' . $this->callsign_table . ' WHERE id = "' . $del_id . '"');
	}
}

Der führt den sql befehl aus wenn die option Benutzer löschen aktiviert ist und auch nur dann wenn die confirm box mit ja bestätigt.

Code: Alles auswählen

if ($this->request->variable('csstamp_del', '') == 'csstamp_del')
{
	$this->db->sql_query('DELETE FROM ' . $this->callsign_table . ' WHERE id = "' . $del_id . '"');
}

Das ist dann der Code der ausgeführt wird wenn nur alle Einträge in der Rufzeichen Datenbank gelöscht werden sollen der Benutzer aber erhalten bleiben soll.

Optimal wäre zwar das die Checkbox im Formular der Benutzer Löschung liegt aber dafür fehlt das event. Aber so passt das für meine Zwecke.
Benutzeravatar
LukeWCS
Supporter
Supporter
Beiträge: 2119
Registriert: 15.12.2014 10:19
Kontaktdaten:

Re: acp listener

Beitrag von LukeWCS »

chris1278 hat geschrieben: 05.06.2023 16:46 Ich habe es schon realisiert
...
Aber so passt das für meine Zwecke.
Chris, wenn du das Problem zwischenzeitlich schon selbst gelöst hast, wäre ein kurzes Update in deinem Thema sinnvoll gewesen, weil man sich sonst - wie in meinem Fall jetzt - unnötig mit etwas befasst, das schon erledigt ist. :wink:
Möge das Backup mit dir sein. Immer.

Erweiterungen - Infos zur artgerechten Haltung
phpBB Ext Check - Analysesystem für phpBB Erweiterungen (Entwickler Werkzeug)
Benutzeravatar
chris1278
Mitglied
Beiträge: 3533
Registriert: 12.11.2007 06:20
Wohnort: Euskirchen
Kontaktdaten:

Re: acp listener

Beitrag von chris1278 »

Ja recht hast du sorry.
Antworten

Zurück zu „Extension Bastelstube“