Magento – DSGVO – Telefonnummer nicht mehr anzeigen in der Kasse und weitere Datensparsamkeit

Am 25.05.2018 geht es los – die DSGVO “geht live”. Der neue Wahnsinn und Stress pur für mehr oder weniger jeden, der im Internet eine Präsenz unterhält. Natürlich wird aktuell unglaublich viel Panik gemacht – denn mit Panik kann man gutes Geld verdienen.

Selbstverständlich schauen auch wir an welchen Stellen was geändert sein muss. Leider kann man nicht wirklich viel Konkretes für Magento-Shop-Benutzer als Tipp verzapfen, einen Tipp können und wollen wir aber geben.

Ein -nicht wirklich schlechter- Punkt der DSGVO ist die Datensparsamkeit. Das heißt nur Daten erfassen, die wirklich, wirklich, wirklich notwendig zur Auftragsverarbeitung sind. Das heißt wiederum, dass die Angabe des Geburtsdatums bei der Registrierung oder im Kassenbereich in den allermeisten Fällen entfernt werden solle. Im Falle eines Shops mit jugendschutzrelevanten Produkten ist das aber wahrscheinlich noch erlaubt. Da man dies aber ganz einfach im Backend einstellen kann, soll es hierum auch gar nicht gehen.

Es soll um die Angabe der Telefonnummer gehen. Diese ist im Magento-Standard Pflicht. Eine Adresse ohne Telefonnummer kennt Magento nicht. Somit ist der Kunde u.a. im Checkout gezwungen seine Telefonnummer anzugeben, wenn er bestellen möchte. Nun muss man sich als Shopbetreiber die Frage stellen, ob die generelle Angabe der Telefonnummer WIRKLICH notwendig ist, um die Bestellung auszuführen. Ich denke: Nein.

Leider gibt Magento aber keine einfache Möglichkeit die Telefonnummer die Telefonnummer aus dem Checkout zu entfernen noch sie optional zu machen (was wahrscheinlich auch nicht DSGVO-konform wäre).

Man muss also selber Hand anlegen, um das Telefonnummernfeld aus der Rechnungs- und auch Versandadresse zu entfernen. Leider ist dies nicht ganz trivial, aber machbar.

Es müssen drei Dateien geändert werden sowie eine Anpassung in der Datenbank gemacht werden.

  1. Den Telefonnummern-Prüfprozess aus der PHP-Datei entfernen: Hierzu kopieren wir die Abstract.php aus dem Verzeichnis app/code/core/Mage/Customer/Model/Address in das Verzeichnis app/code/local/Mage/Customer/Model/Address
    Anschließend entfernen wir den Prüfprozess (oder kommentieren ihn aus) für die Telefonnummer aus dieser.

          if (!Zend_Validate::is($this->getTelephone(), 'NotEmpty')) {
               $this->addError(Mage::helper('customer')->__('Please enter the telephone number.'));
           }
  2. Den Telefonnummern-Prüfprozess aus der Datenbank entfernen: Warum die Entwickler von Magento an zwei Stellen einen solchen Prüfprozess hinterlegt haben, ist mir schleierhaft. Nunja, er ist nunmal da, daher muss er auch hier weg. In der Datenbank in der Tabelle “eav_attributes” suchen wir in der Spalte “attribute_code” nach “telephone” (dies sollte auf der zweiten Seite sein oder meist bei ID 31). Dort wird dann bei “is_required” der Wert von “1” auf “0” gesetzt und gespeichert.
    Wem das zu nervig ist, kann dies auch mit einem kleinen PHP-Skript machen, welches ich angepasst habe:

        <?php
    
        /* Anmeldung an eine MySQL-Datenbank
    
        In der nächsten Zeile die entsprechenden Paramter mit den eigenen DB-Daten ersetzen. Diese gibt es in der local.xml im Verzeichnis app/etc */
    
        $link = mysqli_connect("localhost", "user", "password", "db-name");
    
         
    
        // Verbindung prüfen
    
        if($link === false){
    
            die("ERROR: Not able to connect. " . mysqli_connect_error());
    
        }
    
         
    
        // Die gewünschte Stelle anpassen
    
        $sql = "UPDATE eav_attribute SET is_required='0' WHERE attribute_code='telephone'";
    
        if(mysqli_query($link, $sql)){
    
            echo "Records were updated successfully.";
    
        } else {
    
            echo "ERROR: Was not able to execute $sql. " . mysqli_error($link);
    
        }
    
         
    
        // Verbindung zur DB abbauen
    
        mysqli_close($link);
    
        ?>

    Diesen Code einfach in eine Datei mit der Endung .php auf dem Server in das Magento-Root-Verzeichnis legen. Nach Anpassung der Datenbank-Daten (s. Hinweise in der Datei) einfach nur die Datei per Browser aufrufen (Bsp. www.shop.de/removephonerequirement.php). Anschließend wird das gemacht, was man sonst per Hand wie oben beschrieben machen müsste.

  3. Telefonnummer aus der Rechnungsadresse entfernen: Hierzu muss die für das eigene Template verwendete billing.phtml angepasst werden. Nutzt man das RWD-Theme, läge diese im Verzeichnis app/design/frontend/rwd/default/template/persistent/checkout/onepage
                        <div class="field">
                            <label for="billing:telephone" class="required"><em>*</em><?php echo $this->__('Telephone') ?></label>
                            <div class="input-box">
                                <input type="tel" name="billing[telephone]" value="<?php echo $this->escapeHtml($this->getAddress()->getTelephone()) ?>" title="<?php echo $this->__('Telephone') ?>" class="input-text <?php echo $this->helper('customer/address')->getAttributeValidationClass('telephone') ?>" id="billing:telephone" />
                            </div>
                        </div>

    Diesen Part einfach entfernen oder auskommentieren.

  4. Telefonnummer aus der Versandadresse entfernen: Hier gehen wir ebenso vor und wählen die shipping.phtml in unserem Fall im Verzeichnis app/design/frontend/rwd/default/template/checkout/onepage
                            <div class="field">
                                <label for="shipping:telephone" class="required"><em>*</em><?php echo $this->__('Telephone') ?></label>
                                <div class="input-box">
                                    <input type="tel" name="shipping[telephone]" value="<?php echo $this->escapeHtml($this->getAddress()->getTelephone()) ?>" title="<?php echo Mage::helper('core')->quoteEscape($this->__('Telephone')) ?>" class="input-text <?php echo $this->helper('customer/address')->getAttributeValidationClass('telephone') ?>" id="shipping:telephone" onchange="shipping.setSameAsBilling(false);" />
                                </div>
                            </div>

    Einfach ebenso vorgehen wie vorher.

  5. Wenn wir schon einmal dabei sind, können wir die Telefonnummer auch noch schnell aus dem Kunden-Adressbuch nehmen. Hierzu suchen wir die edit.phtml im Template-Verzeichnis. Bei uns app/design/frontend/rwd/default/template/customer/address
                    <div class="field">
                        <label for="telephone" class="required"><em>*</em><?php echo $this->__('Telephone') ?></label>
                        <div class="input-box">
                            <input type="tel" name="telephone" value="<?php echo $this->escapeHtml($this->getAddress()->getTelephone()) ?>" title="<?php echo Mage::helper('core')->quoteEscape($this->__('Telephone')) ?>" class="input-text  <?php echo $this->helper('customer/address')->getAttributeValidationClass('telephone') ?>" id="telephone" />
                        </div>
                    </div>

    Hier wird dann ebenfalls der für die Telefonnummer relevante Part entfernt.

Dies sollte alles gewesen sein, um diesem Teil der DSGVO zu entsprechen. Ich hoffe es hilft dem einen und anderen.

Ich freue mich über Kommentare und Meinungen zur DSGVO.

Update vom 08.06.2018

Im Rahmen der geforderten Datensparsamkeit geht es auch dem Kontaktformular an den Kragen. “Ist es denn für die Beantwortung einer Frage wirklich wichtig den Namen des Fragenden zu kennen?” – und damit ist die verpflichtende Angabe des Namensfeldes fraglich. Somit wird von einigen Experten empfohlen das Namensfeld bei der Kontaktaufnahme nur optional und nicht verpflichtend anzuzeigen. Generell übrigens der Hinweis, dass man Pflichtfelder auch deutlich als solche kennzeichnen soll. Für mich übrigens falsch herum ausgedrückt. Das System sorgt schon dafür, dass diese Felder ausgefüllt sind. IMHO ist es viel wichtiger zu kennzeichnen, welche Felder NICHT verpflichtend also optional sind. Somit gibt der Kunde nicht ungewollt Daten ein, die er nicht angeben müsste.

Aber zurück zum Kontaktformular. Welche Felder braucht man also, welche nicht? Das “Name”-Feld sollte also optional sein. Die Angabe einer Website, Faxnummer, Betreff…. usw. ist nur in den seltensten Fällen notwendig, sollte also entfernt sein oder optional. Wie sieht es mit den Kontaktmöglichkeiten aus? Telefon, E-Mail? Dürfen beide ein Pflichtfeld sein? In den meisten Fällen wohl ein klares “NEIN”. Eine Art der Kontaktaufnahme reicht. Nimmt man also das Mail-Feld als Pflichtangabe und Telefon optional, sollte es in Ordnung sein. Möglich wäre sonst vielleicht auch das verpflichtende Feld einfach “E-Mail oder Telefonnummer” zu nennen und dem Kunden die Wahl zu überlassen wie er kontaktiert werden möchte. Den eingegebenen Wert systemisch zu verifizieren, wird dann natürlich schwieriger.
Fakt ist nun aber, dass Magento die Angabe des Namens im Kontakt-Formular als Pflichtfeld angibt. Dies muss also geändert werden, um optional zu sein. Dazu benötigen wir zwei Änderungen.

  1. Wird die verwendete form.phtml angepasst (bei RWD zum Beispiel im Ordner app/design/frontend/rwd/default/template/contacts). Hier steht ca. in Zeile 41
    <input name="name" id="name" title="<?php echo Mage::helper('core')->quoteEscape(Mage::helper('contacts')->__('Name')) ?>" value="<?php echo $this->escapeHtml($this->helper('contacts')->getUserName()) ?>" class="input-text required-entry" type="text" />

    Aus dieser Zeile entfernen wir nur “required-entry”.
    Weiterhin wird zwei Zeilen drüber

    <label for="name" class="required"><em>*</em><?php echo Mage::helper('contacts')->__('Name') ?></label>

    noch

    class="required"><em>*</em

    entfernt, so dass nur noch

    <label for="name"><?php echo Mage::helper('contacts')->__('Name') ?></label>

    übrig bleibt.

  2. Als nächstes öffnen wir die Datei app/code/core/Mage/Contacts/controllers/IndexController.php. Hier wird geprüft, ob die Felder ausgefüllt sind (und teilwese auch wie). Ca. in Zeile 75 steht der Bereich, der für den Namen zuständig ist.
                    if (!Zend_Validate::is(trim($post['name']) , 'NotEmpty')) {
                        $error = true;
                    }

    Dieser wird ersatzlos gestrichen. Leider ist es nicht möglich durch eine Kopie der Ordnerstruktur und der Datei in den “code/local”-Ordner die Kerndatei in Ruhe zu lassen und nur eine Kopie zu erstellen, die die Originaldatei überstimmt. Hierzu müsste ein echter Rewrite erstellt werden und dazu bedarf es optimalerweise einer kleinen Extension.

Nun ist das Feld für den Namen kein Pflichtfeld mehr.

Nun könnte man noch auf die Idee kommen eine Checkbox einzubauen, die der Nutzer anklicken muss als Einverständnis zur Übermittlung der Daten. Natürlich gibt es hier keine klare Rechtsprechung. Ich schließe mich der Meinung an, dass man in der Datenschutzinformation über das Kontaktformular und die Verwendung der Daten informieren muss. Eine Checkbox ist m.E. nicht notwendig. Sind wir mal ehrlich: Kann man in ein Kontaktformular Daten eingeben, auf den “Senden”-Button klicken und dann überrascht sein, dass seine Daten übermittelt werden und dann im schlimmsten Fall sogar jemand antwortet? Jeder halbwegs zurechnungsfähige Mensch, sollte sich also im Klaren darüber sein, dass er durch einen Klick die von ihm eingegebenen Daten übermittelt. An wen und was damit geschieht, kann er dann in den DS-Informationen nachlesen (wenn er denn will).

Wer als Seiten-Betreiber sicher gehen möchte, packt noch einen Hinweis mit Link auf die Kontaktseite. Dies kann man ganz einfach durch Hinzufügen eines Statischen Blocks (siehe HIER) oder durch Hinzufügen des Textes direkt in der Datei machen. Ist die Seite einsprachig reicht zum Beispiel

<p>Wir verwenden die eingegebenen Daten ausschließlich zur Beantwortung Ihres Anliegens. Weiteres in unseren <a href="/datenschutz">Datenschutzinformationen</a>.</p>

Arbeitet man multilingual könnte man auch

<p><?php echo $this->__('We use the entered data exclusively to answer your request. See our <a href="/privacy">privacy policy</a>.')?></p>

verwenden und dies dann übersetzen mit der translate.csv oder der allgemeinen Mage_Contacts.csv

"We use the entered data exclusively to answer your request. See our <a href=""/privacy"">privacy policy</a>.","Wir verwenden die eingegebenen Daten ausschließlich zur Beantwortung Ihres Anliegens. Weiteres in unseren <a href=""/datenschutz"">Datenschutzinformationen</a>."

So, wieder etwas zur Datensicherheit beigetragen….oder?

Genutzt in Magento Versionen 1.7 – 1.9 Kommentare? Ergänzungen? Hinweise? Gerne!

Published by Covos

Seit 2009 arbeite ich nun intensiv mit Magento. Begonnen habe ich mit der Erstellung und dem Betrieb von B2C-Shops. Ausgeweitet wurde dies durch meine Tätigkeit im Logistik-Sektor. Hieraus entstanden erste spezialisierte B2E-Systeme. Heute arbeite ich tag-täglich mit spannenden B2C-, B2B- und B2E-Projekten und berichte in diesem Blog über Herausforderungen und gebe Insider-Tipps.

One comment on “Magento – DSGVO – Telefonnummer nicht mehr anzeigen in der Kasse und weitere Datensparsamkeit”

  1. Danke für die Anleitung, wie man das Telefonfeld als Pflichtfeld absetzt. Ich habe das so wie oben geschrieben umgesetzt, mit der Ausnahme dass ich bei billing, shipping und edit.phtml den Part zur Telefonnummer nicht komplett entfernt habe, sondern nur den Part, welcher die Telefonnummer als “required” kennzeichnet:
    class=”required”>*<

Leave a Reply to Toby

Your email address will not be published. Required fields are marked *