Es muss halt richtig zurückvererbt werden damit auch die Kompatibilität zu xtmembers gewährleistet ist.
Die zExtendedRegistration versendet keine Mails. Sie unterdrückt Mails wenn bestimmte Ereignisse nicht zu treffen (falls aktiviert). Wenn Mails verschickt werden, dann nur über parent::compile(), auch wenn ich die createNewUser() Funktion erweitert habe, was in diesem Fall entweder die Standard Registrierung ist, oder per Vererbung die xtmembers.
Das werde ich aber noch rausnehmen und nur per Hook arbeiten. Das ist sauberer.
Um nun alle Erweiterungen kompatibel zu machen, sehe ich nur einen Weg:
die xtmembers ist die älteste der Erweiterungen und lang etabliert, auch wenn sie alphabetisch nach der registration_extended kommt. Also beziehen wir uns erstmal auf die xtmembers
Die Kette sehe dann so aus:
xtmembers extends ModuleRegistration
registration_extended extends xtmembers
zRegistrationExtended extends registration_extended
natürlich muss in jeder config.php überprüft werden ob die Kette noch genauso in Takt ist:
Hier als Beispiel mit der xtmembers (zRegistrationExtended: config.php)
PHP-Code:
// Check if xtmembers is in use, use compabtible
if(in_array('xtmembers', $this->getActiveModules()) )
{
$GLOBALS['FE_MOD']['user']['registration'] = 'ModuleExtendedRegistrationCompatible';
}
else
{
$GLOBALS['FE_MOD']['user']['registration'] = 'ModuleExtendedRegistration';
}
Die ModuleExtendedRegistrationCompatible sieht so aus: WICHTIG: Diese erweitert die Hauptklasse der xtmembers
PHP-Code:
// extend xtmembers -> inherited call to zExtendedRegistration
class ModuleExtendedRegistrationCompatible extends ModuleRegistrationExtended
{
protected function compile()
{
$objModule = $this->Database->prepare("SELECT * FROM tl_module WHERE id=?")
->limit(1)
->execute($this->id);
$objModule->editable = deserialize($objModule->editable);
$objModuleExtReg = new ModuleExtendedRegistration($objModule);
$objModuleExtReg->compile();
// compile ModuleRegistrationExtended from xtmembers
parent::compile();
}
}
Man sieht, es wird einfach ein neues ModuleExtendedRegistration (Hauptklasse) Objekt initialisiert und ausgeführt. Dannach wird die xtmembers ausgeführt.
Fällt jemand ein besserer Weg ein?