[3.3] Quick Activation in Profile

In diesem Forum können Extension-Autoren ihre Extensions vorstellen, die sich noch im Entwicklungsstatus befinden. Der Einbau in Foren im produktiven Betrieb wird nicht empfohlen.
Benutzeravatar
chris1278
Mitglied
Beiträge: 3841
Registriert: 12.11.2007 06:20
Wohnort: Euskirchen
Kontaktdaten:

Re: [3.3] Quick Activation in Profile

Beitrag von chris1278 »

Hallo Joe. Ich mal die listner.php bearbeitet bezüglich einrückungen und klammersetzunngen. hier mal die von mir korrigierte version:

Code: Alles auswählen

<?php

namespace moemorox\qaip\event;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use const PROFILE_FIELDS_DATA_TABLE;


class listener implements EventSubscriberInterface
{
	protected $db;
	protected $language;
	protected $template;
	protected $user;
	protected $auth;

	public function __construct(
		\phpbb\db\driver\driver_interface $db,
		\phpbb\language\language $language,
		\phpbb\template\template $template,
		\phpbb\user $user,
		\phpbb\auth\auth $auth
	)
	{
		$this->db = $db;
		$this->language = $language;
		$this->user = $user;
		$this->auth = $auth;
		$this->template = $template;
		$this->language->add_lang('common', 'moemorox/qaip');
	}

	public static function getSubscribedEvents()
	{
		return [
			'core.memberlist_modify_view_profile_template_vars' => 'memberlist_modify_view_profile_template_vars',
		];
	}

	public function memberlist_modify_view_profile_template_vars($event)
	{
		$this->add_activate_url($event);
		$this->inject_email($event);
		$this->inject_website($event);
		$this->inject_ip($event);
	}

	public function add_activate_url($event)
	{
		$tpl = $event['template_ary'];

		// Admin check
		if (!$this->user->data['is_registered'] || !($this->auth->acl_get('a_') || $this->user->data['user_type'] == USER_FOUNDER))
		{
			return;
		}

		if (!isset($tpl['U_CANONICAL']))
		{
			return;
		}

		// Extract user_id from URL
		if (!preg_match('/[&|&amp;|\?]u=(\d+)/', $tpl['U_CANONICAL'], $matches))
		{
			return;
		}

		$user_id = (int) $matches[1];

		// Get user_actkey from DB
		$sql = 'SELECT user_actkey FROM ' . USERS_TABLE . ' WHERE user_id = ' . $user_id . ' AND user_type = 1;';
		$result = $this->db->sql_query($sql);
		$row = $this->db->sql_fetchrow($result);
		$this->db->sql_freeresult($result);

		if (!empty($row['user_actkey']))
		{
			$activate_link = generate_board_url() . "/ucp.php?mode=activate&u={$user_id}&k=" . $row['user_actkey'];

			$this->template->assign_vars([
				'U_ACTIVATE' => $activate_link,
				'L_USER_ACTIVATE' => $this->language->lang('USER_ACTIVATE')
			]);
		}
	}

	public function inject_email($event)
	{
		if (!$this->user->data['is_registered'] || !($this->auth->acl_get('a_') || $this->user->data['user_type'] == USER_FOUNDER))
		{
			return;
		}

		$tpl = $event['template_ary'];

		if (!isset($tpl['U_CANONICAL']))
		{
			return;
		}

		if (!preg_match('/[&|&amp;|\?]u=(\d+)/', $tpl['U_CANONICAL'], $matches))
		{
			return;
		}

		$user_id = (int) $matches[1];

		$sql = 'SELECT user_email FROM ' . USERS_TABLE . ' WHERE user_id = ' . $user_id;
		$result = $this->db->sql_query($sql);
		$row = $this->db->sql_fetchrow($result);
		$this->db->sql_freeresult($result);

		if (!empty($row['user_email']))
		{
			$this->template->assign_vars([
				'USER_REAL_EMAIL' => $row['user_email']
			]);
		}
	}

	public function inject_website($event)
	{
		if (!$this->user->data['is_registered'] || !($this->auth->acl_get('a_') || $this->user->data['user_type'] == USER_FOUNDER))
		{
			return;
		}

		$tpl = $event['template_ary'];

		if (!isset($tpl['U_CANONICAL']))
		{
			return;
		}

		if (!preg_match('/[&|&amp;|\\?]u=(\\d+)/', $tpl['U_CANONICAL'], $matches))
		{
			return;
		}

		$user_id = (int) $matches[1];

		$sql = "SHOW COLUMNS FROM " . PROFILE_FIELDS_DATA_TABLE . " LIKE 'pf_phpbb_website'";
		$result = $this->db->sql_query($sql);
		$exists = (bool) $this->db->sql_fetchrow($result);
		$this->db->sql_freeresult($result);

		if (!$exists)
		{
			return; // no website custom profile field
		}

		$sql = 'SELECT pf_phpbb_website FROM ' . PROFILE_FIELDS_DATA_TABLE . ' WHERE user_id = ' . $user_id;
		$result = $this->db->sql_query($sql);
		$row = $this->db->sql_fetchrow($result);
		$this->db->sql_freeresult($result);

		if (!empty($row['pf_phpbb_website']))
		{
			$this->template->assign_vars([
				'USER_WEBSITE_RAW' => $row['pf_phpbb_website'],
			]);
		}
	}

	public function inject_ip($event)
	{
		if (!$this->user->data['is_registered']	|| !($this->auth->acl_get('a_') || $this->user->data['user_type'] == USER_FOUNDER))
		{
			return;
		}

		$tpl = $event['template_ary'];

		if (!isset($tpl['U_CANONICAL']))
		{
			return;
		}

		if (!preg_match('/[&|&amp;|\\?]u=(\\d+)/', $tpl['U_CANONICAL'], $matches))
		{
			return;
		}

		$user_id = (int) $matches[1];

		$sql = 'SELECT user_ip FROM ' . USERS_TABLE . ' WHERE user_id = ' . $user_id;
		$result = $this->db->sql_query($sql);
		$row = $this->db->sql_fetchrow($result);
		$this->db->sql_freeresult($result);

		if (!empty($row['user_ip']))
		{
			$this->template->assign_vars([
				'USER_IP' => $row['user_ip'],
				'USER_IP_URL' => 'https://ipinfo.io/' . $row['user_ip'],
			]);
		}
	}
}

Du hast z.b. Viel so gemacht:

Code: Alles auswählen

if (bedingung) {
    return;
}
die besserer Variante wäre:

Code: Alles auswählen

if (bedingung) 
{
    return;
}
Joe Kolade
Mitglied
Beiträge: 217
Registriert: 27.02.2023 19:59

Re: [3.3] Quick Activation in Profile

Beitrag von Joe Kolade »

Hallo, und vielen Dank für die vielen hilfreichen Hinweise!
Mein Sohn hat gestern in einer größeren Aktion die Code-Formatierung an die Vorgaben angepasst und einige Kleinigkeiten optimiert. Zudem sind die Templates jetzt "twiggy" und hinsichtlich einer besseren Übersichtlichkeit verbessert.
Ein neues Release wird in Kürze via Github veröffentlicht und natürlich im Startbeitrag mit neuer Versionsnummer angegeben.

Gruß Joe
Benutzeravatar
Dref
Mitglied
Beiträge: 137
Registriert: 13.01.2022 15:36

Re: [3.3] Quick Activation in Profile

Beitrag von Dref »

Joe Kolade hat geschrieben: 15.04.2025 15:46 Danke! Kannst Du etwas konkretisieren, was mit "Konto direkt unter der IP-Adresse ablehnen" gemeint ist?
Die Möglichkeit, die Registrierung des Mitglieds über sein Profil abzulehnen.
Ich schlug vor, diesen Opt-out-Link direkt unter der IP-Adresse anzuzeigen
Joe Kolade
Mitglied
Beiträge: 217
Registriert: 27.02.2023 19:59

Re: [3.3] Quick Activation in Profile

Beitrag von Joe Kolade »

Du meinst "Benutzer löschen"? Die Möglichkeit, einen Benutzer (aufgrund seiner IP) "abzulehnen", ist mir aktuell nicht bekannt... :oops:
Benutzeravatar
Dref
Mitglied
Beiträge: 137
Registriert: 13.01.2022 15:36

Re: [3.3] Quick Activation in Profile

Beitrag von Dref »

Wenn man ein Mitglied akzeptieren kann, das sich über sein Profil anmeldet, so kann man dieses Mitglied genauso ablehnen wie man es von der GPA aus tun kann
Benutzeravatar
LukeWCS
Supporter
Supporter
Beiträge: 2962
Registriert: 15.12.2014 10:19
Kontaktdaten:

Re: [3.3] Quick Activation in Profile

Beitrag von LukeWCS »

@Joe

Zu der listener.php die euch chris1278 überarbeitet hat ein paar Worte: Chris hat diese Datei konform zu den offiziellen phpBB Programmier-Richtlinien gestaltet. In der Version 1.0.0 von euch, hat Ext Check noch 166 Richtlinienfehler bei dieser Datei gemeldet, bei Chris' Variante sind es nur noch 2. Das sind die Richtlinien nach denen alle arbeiten, die Ext Check nutzen.

@chris1278

Fast perfekt. :) Wie angedeutet, 2 Sachen passen noch nicht. Hier das Log vom PPSSE Prüfmodul:

Code: Alles auswählen

FILE: moemorox\qaip\event\listener.php
--------------------------------------------------------------------------------
FOUND 2 ERRORS AFFECTING 1 LINE
--------------------------------------------------------------------------------
 6 | ERROR | There must be one blank line after the last USE statement; 2
   |       | found;
 6 | ERROR | There must not be unused USE statements.
--------------------------------------------------------------------------------
1 sollte klar sein. 2 muss ich selber erst schauen, wenn die neue Version bereit steht, kann ich grad nicht aus dem Stand beantworten. Das klären wir aber dann im EC Thema, wenn Joe den ersten EC Bericht hat.
Möge das Backup mit dir sein. Immer.
Kein Support via PN! Siehe den Punkt "Private Nachrichten" im phpBB.de-Knigge.
Erweiterungen - Infos zur artgerechten Haltung / phpBB Ext Check - Analyse von Erweiterungen bezüglich Vorgaben und Kompatibilität
Schneeflocke
Mitglied
Beiträge: 8
Registriert: 31.03.2024 22:35

Re: [3.3] Quick Activation in Profile

Beitrag von Schneeflocke »

Vielen Dank für die Erweiterung :)
Benutzeravatar
IMC
Mitglied
Beiträge: 724
Registriert: 25.11.2018 20:32
Wohnort: Lüneburg
Kontaktdaten:

Re: [3.3] Quick Activation in Profile

Beitrag von IMC »

LukeWCS hat geschrieben: 16.04.2025 23:022 muss ich selber erst schauen,
Das Konstrukt kannte ich auch noch nicht. Deshalb habe ich mir das Gestern mal angeschaut.
use const wird wohl benutzt wenn man Konstanten aus anderen Namensräumen nutzen möchte.
https://www.php.net/manual/de/language. ... orting.php
Zuletzt geändert von IMC am 17.04.2025 17:03, insgesamt 1-mal geändert.
Gruß, Thorsten
Benutzeravatar
LukeWCS
Supporter
Supporter
Beiträge: 2962
Registriert: 15.12.2014 10:19
Kontaktdaten:

Re: [3.3] Quick Activation in Profile

Beitrag von LukeWCS »

Merci Thorsten. Jupp, bin heute beim ersten Kaffee auch darauf gestossen, als ich das recherchiert habe. Da ich diese PPSSE Meldung bei einer Ext bisher noch nie gesehen habe in Kombination mit einer Konstanten, war ich reichlich irritiert. Und PPSSE war da wohl auch etwas irritiert, weil diese Fehlermeldung ist in Kombination mit einer Konstante sowas von nicht hilfreich. :lol: Sprich, dieser Fall ist gar nicht vorgesehen bei PPSSE, darum diese "unpräzise" Fehlermeldung die wir eigentlich von anderen Szenarien kennen.

@Joe

Diese Zeile hier benötigt ihr gar nicht:

Code: Alles auswählen

use const PROFILE_FIELDS_DATA_TABLE;
Diese könnt ihr komplett entfernen weil: PROFILE_FIELDS_DATA_TABLE ist eine globale Konstante von phpBB und muss deshalb nicht explizit in eurer Klasse bekannt gemacht werden.
Möge das Backup mit dir sein. Immer.
Kein Support via PN! Siehe den Punkt "Private Nachrichten" im phpBB.de-Knigge.
Erweiterungen - Infos zur artgerechten Haltung / phpBB Ext Check - Analyse von Erweiterungen bezüglich Vorgaben und Kompatibilität
Joe Kolade
Mitglied
Beiträge: 217
Registriert: 27.02.2023 19:59

Re: [3.3] Quick Activation in Profile

Beitrag von Joe Kolade »

Antworten

Zurück zu „Extensions in Entwicklung“