gelöst CustomerInputValidator und schreiben von Daten

Thema wurde von Anonymous, 9. Januar 2018 erstellt.

  1. Anonymous

    Anonymous Mitglied

    Registriert seit:
    4. Januar 2018
    Beiträge:
    18
    Danke erhalten:
    1
    Danke vergeben:
    7
    Dank Euren tollen Tipps habe ich es nun hinbekommen und den CustomerInputValidator, CreateAccountContentView und CustomerInputToCollectionTransformer überladen und meine eigenen Felder in die Registrierung per create_account-USERMOD.html eingefügt.

    Es funktioniert wie erwartet, kann diese Felder validieren und bei fehlerhafter Eingabe auch mit Fehlermeldungen versehen etc. Nun hier die Frage, dieses ganze war ein Personalausweiß-Prüfsummen-Check. Das Ganze klappt nun auch aber auch wenn ich nun ein Geburtsdatum habe und zumindest im klaren bin ob die Ausweisnummern zumindest Sinn ergeben möchte ich nun diesen ermittelten Geburtstag auch in der Standard-Customer Tabelle ablegen lassen (customers -> customers_dob).

    Da der User ja noch nicht angelegt ist und sich ja durch das Formular gerade registrieren möchte, gibt es eine Möglichkeit nach der Valdierung der Custom-Felder dem x3 einfach vorzugaukeln das mit in der Form auch ein Geburtsdatumsfeld ausgefüllt wurde?

    LG Daniel
     
  2. Anonymous

    Anonymous Administrator
    Mitarbeiter

    Registriert seit:
    26. April 2011
    Beiträge:
    1.671
    Danke erhalten:
    1.265
    Danke vergeben:
    300
    @dbick

    wenn du in der Datei CustomerInputToCollectionTransformer die Funktion _getCustomerCollectionFromInputArray überlädt und erst die parent:getCustomerCollectionFromInputArray aufrufst und danach dann nochmal das Feld dob mit
    $customerCollection->setValue('dob', xtc_db_prepare_input($inputArray['dob'])); ausfüllst und hier dein eigenes Geburtsdatum einträgst, sollte es ohne Probleme in die Datenbank übernommen werden.

    PHP:
    protected function _getCustomerCollectionFromInputArray(array $inputArrayCountryServiceInterface $countryService)
        {
         
    $customerCollection parent:_getCustomerCollectionFromInputArray($inputArray,$countryService);
    $customerCollection->setValue('dob''dd-mm-yyyy');

         
            return 
    $customerCollection;
        }
     
  3. Anonymous

    Anonymous Mitglied

    Registriert seit:
    4. Januar 2018
    Beiträge:
    18
    Danke erhalten:
    1
    Danke vergeben:
    7
    #3 Anonymous, 10. Januar 2018
    Zuletzt bearbeitet: 10. Januar 2018
    Aber eine Frage hätte ich noch dazu:

    Die Auswertung findet doch in der überladenen CustomerInputValidator statt, demnach wird das Geburtsdatum auch da ermittelt aus den Ausweisdaten gelesen und auf Volljährigkeit überprüft. Wie weiß ich jetzt in der überladenen
    _getCustomerAddonValuesFromInputArray, ob dabei nicht Fehler aufgetreten sind und wie man nun das Geburtsdatum vom CustomerInputValidator an _getCustomerAddonValuesFromInputArray übergibt?

    Inhalt vom überladenen CustomerInputToCollectionTransformer:
    PHP:
    class MyCustomerAddonValues extends MyCustomerAddonValues_parent
    {
        protected function 
    _getCustomerAddonValuesFromInputArray(array $inputArray)
        {
            
    $myAddonValues = array('perso'=>$inputArray['perso']);
            return 
    MainFactory::create('EditableKeyValueCollection'$myAddonValues);
        }
    }
    Ist mir halt noch unklar, wie ich das anstelle :p
     
  4. Anonymous

    Anonymous Mitglied

    Registriert seit:
    4. Januar 2018
    Beiträge:
    18
    Danke erhalten:
    1
    Danke vergeben:
    7
    #4 Anonymous, 10. Januar 2018
    Zuletzt bearbeitet: 10. Januar 2018
    @Till Hilfe :)

    PHP:
    protected function _getCustomerCollectionFromInputArray(array $inputArrayCountryServiceInterface $countryService)
    {

        
    $customerCollection parent::_getCustomerCollectionFromInputArray($inputArray,$countryService);
        
    $dob $this->_getBirthdayFromID($inputArray['persob']);
        
    $customerCollection->setValue('dob'xtc_db_prepare_input($dob));


        return 
    $customerCollection;
    }
    Sie wird aufgerufen habe ich mit Testausgaben gecheckt. Überprüft habe ich auch ob ein vernünftiges Datum zurück kommt und auch das ist der Fall (YYYY-MM-DD). Die Registrierung klappt auch und der Nutzer wird angelegt nur das Datumsfeld (customer_dob) bleibt leer (bzw. laut phpmyadmin 1000-01-01 00:00:00).

    Ich habe in den Shopeinstellungen (Kunden -> Kunden-Details) Geburtsdatum disabled. Da ich ja nicht möchte, das dieses bei der Registrierung abgefragt wird. Es wird ja durch den Personalausweischeck ermittelt und soll auch hinterher nicht mehr änderbar sein.
     
  5. Anonymous

    Anonymous Mitglied

    Registriert seit:
    4. Januar 2018
    Beiträge:
    18
    Danke erhalten:
    1
    Danke vergeben:
    7
    Weil einfach nicht wollte habe ich es mal mit folgendem Format probiert:

    PHP:
    $customerCollection->setValue('dob','dd-mm-yyyy');
    Und siehe da, es hat geklappt!

    Vielen Dank für Eure Hilfe. Thema kann nun als gelöst makiert werden :p