User-Registrierung bei zwei Webmastern

Hast du einen Fehler in der aktuellen Version gefunden ? Diesen kannst du uns hier mitteilen und uns bei der Fehlersuche helfen.
Antworten
oliver
Beiträge: 238
Registriert: 25. Nov 2014, 19:47

User-Registrierung bei zwei Webmastern

Beitrag von oliver »

Hallo zusammen,

der Bug ist mir in meiner Version 3.01 aufgefallen, scheint aber auch noch in der 3.1 drin zu sein.

Wenn man zwei Webmaster hat, die beide bei einer Neuregistrierung per Mail benachrichtigt werden, passiert folgendes:
In der Klasse "userregistration", im Script ganz unten, werden die zu benachrichtigenden Administratoren aus der Datenbank gelesen und in einer Schleife werden die Mails verschickt.

Code: Alles auswählen

while($row = $this->db->fetch_array($result))
{
    // send mail that a new registration is available
    $sysmail = new SystemMail($this->db);
    $sysmail->addRecipient($row['email'], $row['first_name']. ' '. $row['last_name']);

    $sysmail->sendSystemMail('SYSMAIL_REGISTRATION_WEBMASTER', $this);
}
Es wird je eine Klasse SystemMail (extends Email) erstellt. Die Klasse Email wiederum ruft (im __construct) bei SMTP-Versand die Funktion PHPMailerAutoload() auf (aus dem gleichnamigen Script), welche require $filename; ausführt.
So - erstmal Luft holen...

Durch die Schleife wird also letztendlich mehrmals der require-Befehl aufgerufen, was natürlich zum Error "Cannot redeclare class SMTP" führt.

Vielleicht gibt es auch noch andere Lösungen, aber ich habe aus dem require ein require_once gemacht und nun geht's.

Besten Gruß
Oliver
Benutzeravatar
fasse
Administrator
Beiträge: 6187
Registriert: 12. Nov 2005, 16:06

Re: User-Registrierung bei zwei Webmastern

Beitrag von fasse »

Hallo Oliver,

in der 3.1 wird AutoLoad bereits mit require_once aufgerufen. Da sollte das Problem nicht auftreten. Ansonsten ist dein Lösungsvorschlag aber gut so.

Viele Grüße
Fasse
oliver
Beiträge: 238
Registriert: 25. Nov 2014, 19:47

Re: User-Registrierung bei zwei Webmastern

Beitrag von oliver »

Hallo Fasse,

ich hatte natürlich nur in der 3.1 Beta geschaut, und da war das noch nicht. Aber wenn's jetzt behoben ist, bin ich wunschlos glücklich! :-)

Besten Gruß
Oliver
Benutzeravatar
fasse
Administrator
Beiträge: 6187
Registriert: 12. Nov 2005, 16:06

Re: User-Registrierung bei zwei Webmastern

Beitrag von fasse »

Hi Oliver,

ok, jetzt habe ich es falsch verstanden. Der AutoLoader wird mit require_once aufgerufen. Die einzelnen Dateien darin aber nur mit require. Also besteht das Problem immer noch.

Ich schau mir das mal an.

Viele Grüße
Fasse
Benutzeravatar
fasse
Administrator
Beiträge: 6187
Registriert: 12. Nov 2005, 16:06

Re: User-Registrierung bei zwei Webmastern

Beitrag von fasse »

Hallo Oliver,

ich bekomme dein Problem auf der Spielwiese nicht nachvollzogen. Dort habe ich jetzt die Registrierungsbenachrichtigung an 2 Rollen schicken lassen und es hat funktioniert.

Aktuell gibt er noch einen Hinweis aus, dass an 1 Adresse nicht versendet werden kann, aber alle anderen bekommen die Mail.

Es dürfte dieses doppelte Laden auch eigentlich nicht passieren, da der Autoloader eigentlich feststellen muss, dass die Klasse bereits geladen ist.

Viele Grüße
Fasse
oliver
Beiträge: 238
Registriert: 25. Nov 2014, 19:47

Re: User-Registrierung bei zwei Webmastern

Beitrag von oliver »

Hallo fasse,

hab's gerade auch in der Spielwiese ausprobiert. Die Registrierung wurde gespeichert und eine (allerdings nur eine!) Mail habe ich erhalten. Hm... muss wohl an meiner Umgebung liegen. (bisher unbekannter neuer PHP.ini-Eintrag "autodetec redeclare = 0") ;-) Keine Ahnung. Stört denn eine generelle Umstellung auf require_once in irgendeiner Form? Ich vergesse mit Sicherheit beim nächsten Update daran zu denken!

Was beim Test in der Spielwiese aufgetreten ist: Die Info-Mail hatte den Betreff "Neue Registrierung bei #organization_long_name#" :-)

Schönes Wochenende!
Benutzeravatar
fasse
Administrator
Beiträge: 6187
Registriert: 12. Nov 2005, 16:06

Re: User-Registrierung bei zwei Webmastern

Beitrag von fasse »

Hi Oliver,

das Problem ist, dass dieser Autoloader von der externen Library ist und da hätten wir dann dasselbe Problem wie du. Wenn wir die aktualisieren, dann vergessen wir die Anpassung dann auch.

Ich habe jetzt mal den Aufruf der PHPMailer-Klassen in unseren Autoloader integriert. Vielleicht hilft das ja schon.

Übernehm mal die Änderungen aus diesem Commit und probier das mal aus:
https://github.com/Admidio/admidio/comm ... 5f0438ef67

Viele Grüße
Fasse
Antworten