Oxuser.php mit Modul überschreiben

Hallo zusammen

Bin dabei ein Modul zu schreiben das in der oxuser.php die Klasse _setAutoGroups überschreibt. Dazu habe ich die folgende metadata.php angelegt:


$aModule = array (
    'id'           => 'vtech_autogrp',
    'title'        => 'Vendingtechnik | automatische Gruppenzuordnung nach PLZ',
    'description'  => 'Ordnet Benutzer anhand der PLZ einer bestimmten Benutzergruppe zu.',
    'thumbnail'    => 'autogroup.png',
    'version'      => '1.0',
    'author'       => 'Pasquale Pari',
    'url'          => 'http://www.vendingtechnik.com',
    'email'        => '[email protected]',
    'extend'       => array (
        'oxuser' => 'vtech_autogroup/vtech_autogroup',),
    'settings'     => array
    (
        array(
                'group'     => 'main',
                'name'      => 'vtechGruppe',
                'type'      => 'str',
                'value'     => 'b673a96dfe19ed06cded8ede40ba8241',
              ),
        array(
                'group'     => 'main',
                'name'      => 'vtechPLZ',
                'type'      => 'arr',
                'value'     => '8868','8752'
              ),
    )          
);

Die _setAutoGroups habe ich so erweitert (vorheriger Code absichtlich nicht eingefügt…) in der Datei vtech_autogroup.php:


/** prüfen ob automatische Gruppenzuordnung deaktiviert ist,
         *  falls nicht -> PLZ prüfen und evt. zuordnen... */
      if ( !$this->oxuser__oxdisableautogrp->value ) {
    
        $user_gruppe = oxConfig::getInstance()->getConfigParam('vtechGruppe');
        
        $plzGruppe = oxConfig::getInstance()->getConfigParam('vtechPLZ');
        
        $plzRechnung = $this->oxuser__oxzip->value ;
        $plzLieferung = $this->oxaddress__oxzip->value ;

        
        foreach ($plzGruppe as $einzelPLZ) {
            if ($einzelPLZ == $plzRechnung || $einzelPLZ == $plzLieferung) {
                $this->addToGroup($user_gruppe);
            }
}

Das Modul kann aktiviert werden und auch die Werte lassen sich in den Modul-Einstellungen eintragen und speichern. Das Modul ordnet jedoch die Kunden mit entsrechender PLZ nicht zur gewünschten Gruppe. Auch wird die PLZ der einer abweichenden Lieferadresse ignoriert. Vielleicht spreche ich ja die Liefer PLZ nur falsch an…:confused:
Hat jemand eine Idee wie ich das Modul zum Laufen bringe?
Danke schon zum Voraus für die Mithilfe!

LG Pasquale

Hallo zusammen

Hab den Fehler wegen der Zuordnung gefunden: in der metadata.php war das 2. array falsch:


array(
                'group'     => 'main',
                'name'      => 'vtechPLZ',
                'type'      => 'arr',
                'value'     => array('8868','8752'),
              ),

Jetzt funktioniert die Zuordung… fehlt nur noch die Lieferadressen PLZ.

LG Pasquale

Hallo Zusammen

Wie bekomme ich den die PLZ der Lieferadresse(?), mit diesem Aufruf gehts nicht:


$plzLieferung = $this->oxaddress__oxzip->value ;

Habs auch mit $oAddress-> und $sDelAddress-> probiert, hat aber zu keinem Ergebniss geführt. Müsste ich hier evt. in einer anderen Funktion einhaken? Wenn ja, wo?

Danke und LG Pasquale

Meiner Meinung nach wird die Lieferadresse nur in der Bestellung erfasst,
zumindest gibt es dort ein Feld Namens “oxdelzip”

oxorder->oxdelzip

der User ansich hat keine Lieferadresse, Lieferadresse gibt es nur im Zusammenhang mit einer Bestellung.
Deshalb wird es wahrscheinlich nur über Umwege möglich sein in oxuser diesen Wert zu bekommen.

Hoffe das hilft dir weiter

hab noch was vergessen…
Die Lieferadressen werden in oxadress zu dem jeweilgen User gespeichert, das ist richtig. Aber du hast in oxuser nicht unbedingt die Möglichkeit auf diese Werte zuzugreifen.
In der Kasse jedoch wird ja im 2. Schritt nach der Liefer bzw. Rechnungsadresse gefragt, vielleicht schauste die Vorgehensweise dort mal an und kommst auf den richtigen Weg.

Da kann ja mehr als eine PLZ rauskommen. So könnte es gehen. Zusatz in rot:

...
$plzRechnung = $this->oxuser__oxzip->value ;
        $plzLieferung = $this->oxaddress__oxzip->value ;

         [B]$sSelect = "select * from oxaddress where oxaddress.oxuserid = " . oxDb::getDb()->quote( $this->oxuser__oxid->value );
		
	$alladdresses = oxNew( "oxlist" );
        $alladdresses->init( "oxaddress" );
        $alladdresses->selectString( $sSelect );
		
		foreach ( $alladdresses as $sKey => $oAddress ) {
		
		//...PLZs in Array sammeln und unten vergleichen oder direkt hier...
						
		}[/B]

        foreach ($plzGruppe as $einzelPLZ) ...{

:wink:

Hallo mediaworker und rubbercut

Besten Dank für Eure Anregungen und Vorschläge, werde das mal versuchen umzusetzen resp. zu testen. Poste dann hier das Ergebnis.!

Herzlichen Dank und LG Pasquale