Blogpotato

Datenschutz für xt:Commerce [upd]

08.02.2007 86 Kommentare

[update]: Da WordPress dazu neigt, Hochkommas im Codebereich falsch darzustellen und xt:Commerce davon leider reichlich Gebrauch macht ist für den Einbau dringend zu empfehlen, die Codeteile aus der Textdatei zu kopieren!

Neues Jahr, neue Gesetze, neue Vorschriften. Seit Jahresbeginn gelten unter anderem neue Formvorschriften für E-Mails und, mit der Novelle des Telemediengesetzes, kommen gerade auf Shopbetreiber neue Anforderungen in Bezug auf die Datenschutzerklärung zu.

Während sich das Überarbeiten der dreizehn verschiedenen E-Mail-Texte, die sich für alle Sprachen, jeweils in einer reinen Text und einer HTML-Ausprägung sowohl in templates/[template]/mail/ als auch in templates/[template]/admin/mail befinden, allenfalls als Fleißaufgabe erweisen dürfte, da xt:Commerce keine Möglichkeit bietet, an alle E-Mails eine gleichlautende Signatur anzuhängen (aber vielleicht poste ich hier in Kürze mal was entsprechendes), müssen für die Erfordernisse des neuen Telemediengesetzes in Bezug auf Datenschutz stärkere Geschütze aufgefahren werden:

Wörtlich genommen müsste der Nutzer einer gewerblichen Webseite beim ersten Aufruf auf die Datenschutzerklärung hingewiesen werden. Es wird wohl allerdings ausreichend sein, einen entsprechenden aussagekräftigen Link auf die Belehrung in der Fusszeile anzubringen. Spätestens jedoch, wenn ein Bestellvorgang gestartet wird, bei dem der Nutzer seine persönlichen Daten eingibt, muss die Belehrung deutlich eingeblendet werden. Der Vorgang darf erst dann fortgesetzt werden können, wenn der Nutzer die Belehrung akzeptiert hat. Die Zustimmung muss nachprüfbar gespeicht werden.

Nach der Einverständniserklärung muss der Nutzer jederzeit den Inhalt seiner Erklärung abrufen können. Eine per Email versendete Bestellbestätigung sollte neben einem Link auf etwa akzeptierte AGB auch einen Link oder den Volltext der Datenschutzbelehrung enthalten.

Weiterhin ist sicherzustellen, dass der Nutzer des Dienstes die Nutzung jederzeit beenden kann. Wenn etwa ein Benutzer-Account angeboten wird muss dem Nutzer die Möglichkeit geboten werden, diesen zu deaktivieren, die gespeicherten Daten zu löschen bzw. zu sperren.

Tja, ich würde sagen, das sind gleich drei Wünsche auf einmal. Und wer ungern russisches Abmahnroulette spielt und daher nicht darauf warten will, bis die Änderungen in das nach wie vor nicht terminierte SP 2.2 einfließen, findet hier eine Einbauanleitung.

Ein Satz vorab

Wie immer gilt: Alle Änderungen beziehen sich auf xt:Commerce 3.04 SP2.1, der Einbau erfolgt auf eigene Gefahr und nicht nur für diese Anpassungen empfiehlt sich ein Backup, Fragen werden in den Kommentaren beantwortet.

Datenschutzerklärung abnicken

Zunächst mal sollte man wie bei Lübeck online vorgeschlagen und sofern noch nicht vorhanden eine Seite mit der Datenschutzerklärung erstellen und diese in eine der beiden Boxen verlinken.
Als nächsten Schritt gilt es, ähnlich wie bei den AGBs während des Checkout-Prozesses, beim Registrieren eines Accounts oder beim Checkout über den Gastaccount eine Checkbox zu integrieren, mit der der Kunde bestätigt, die Datenschutzrichtlinien akzeptiert zu haben.
Alle Angaben für create_account.php gelten analog auch für create_guest_account.php:
In create_account.php nach

$smarty->assign('INPUT_TEL', xtc_draw_input_fieldNote(array ('name' => 'telephone', 'text' => (xtc_not_null(ENTRY_TELEPHONE_NUMBER_TEXT) ? '<span class="inputRequirement">'.ENTRY_TELEPHONE_NUMBER_TEXT.'</span>' : ''))));

suchen und davor einfügen:

	// BEGIN privacy policy
	$smarty->assign('PRIVACY_LINK', $main->getContentLink(2, ACCEPT_PRIVACY, "class='popup'"));
	$smarty->assign('CHECKBOX_PRIVACY', '<input type="checkbox" value="privacy" name="privacy" id="field_privacy" />');
	// END privacy policy

Dadurch haben wir im Template sowohl einen Link auf die Datenschutzerklärung als auch die Checkbox zur Verfügung. Die 2 in $main->getContentLink steht dabei für die coID (Sprachgruppe) der Datenschutzerklärung, die man im Contentmanager findet oder indem man auf den Link klickt.
Wer nicht die jsPopUp-Klasse von Dirk Ginader nutzt muss natürlich selber wissen, ob und wie er die Erklärung in einem neuen Fenster öffnet.

Damit der Link auch einen sinnvollen Text hat, muss man die Konstante für alle im Einsatz befindlichen Sprachen definieren, beispielsweise in lang/german/german.php:

	define('ACCEPT_PRIVACY', 'Ich akzeptiere Ihre Datenschutzrichtlinien');

Das platziert man dann an geeigneter Stelle im Template, sowohl in templates/[template]/modules/create_account.html als auch in templates/[template]/modules/create_account_guest.html, was bei mir am Ende so aussieht:

	<fieldset>
	        <legend>{#title_privacy#}</legend>
	        <p class="conditions">
	                {$CHECKBOX_PRIVACY}
	                <label for="field_privacy">{$PRIVACY_LINK}</label><span class="inputRequirement">*</span>
	        </p>
	</fieldset>

Jetzt nur noch prüfen, ob die Box auch angehakt war und das ganze zusammen mit allen Informationen in die Datenbank schreiben. Dazu widmen wir uns noch einmal create_account.php:
Nach

$telephone = xtc_db_prepare_input($_POST['telephone']);

fügend wir folgendes ein:

	// BEGIN privacy policy
	$privacy = xtc_db_prepare_input($_POST['privacy']);
	// END privacy policy

Vor

if ($customers_status == 0 || !$customers_status)

fügen wir folgendes ein:

	// BEGIN privacy policy
	if(!isset($privacy) || empty($privacy)) {
            $error = true;
            $messageStack->add('create_account', ENTRY_PRIVACY_POLICY_ERROR);
    }
	// END privacy policy

Hier trennen sich die Wege von create_account.php und create_guest_account.php. In create_account.php ändern wir

$sql_data_array = array ('customers_vat_id' => $vat, 'customers_vat_id_status' => $customers_vat_id_status, 'customers_status' => $customers_status, 'customers_firstname' => $firstname, 'customers_lastname' => $lastname, 'customers_email_address' => $email_address, 'customers_telephone' => $telephone, 'customers_fax' => $fax, 'customers_newsletter' => $newsletter, 'customers_password' => xtc_encrypt_password($password),'customers_date_added' => 'now()','customers_last_modified' => 'now()');

zu

$sql_data_array = array ('customers_vat_id' => $vat, 'customers_vat_id_status' => $customers_vat_id_status, 'customers_status' => $customers_status, 'customers_firstname' => $firstname, 'customers_lastname' => $lastname, 'customers_email_address' => $email_address, 'customers_telephone' => $telephone, 'customers_fax' => $fax, 'customers_newsletter' => $newsletter, 'customers_password' => xtc_encrypt_password($password),'customers_date_added' => 'now()','customers_last_modified' => 'now()', 'privacy' => 'now()');

und in create_guest_account.php ersetzen wir

$sql_data_array = array ('customers_vat_id' => $vat, 'customers_vat_id_status' => $customers_vat_id_status, 'customers_status' => $customers_status, 'customers_firstname' => $firstname, 'customers_lastname' => $lastname, 'customers_email_address' => $email_address, 'customers_telephone' => $telephone, 'customers_fax' => $fax, 'customers_newsletter' => $newsletter, 'account_type' => '1', 'customers_password' => xtc_encrypt_password($password));

mit

$sql_data_array = array ('customers_vat_id' => $vat, 'customers_vat_id_status' => $customers_vat_id_status, 'customers_status' => $customers_status, 'customers_firstname' => $firstname, 'customers_lastname' => $lastname, 'customers_email_address' => $email_address, 'customers_telephone' => $telephone, 'customers_fax' => $fax, 'customers_newsletter' => $newsletter, 'account_type' => '1', 'customers_password' => xtc_encrypt_password($password), 'privacy' => 'now()');

Zwei Sachen sind noch zu erledigen, dann sind wir mit dem ersten Punkt auch schon durch. Die Fehlermeldung ist in allen Sprachdateien zu hinterlegen

define('ENTRY_PRIVACY_POLICY_ERROR', 'Sofern Sie unsere Datenschutzrichtlinien nicht akzeptieren k&ouml;nnen wir Ihre Bestellung bedauerlicherweise nicht entgegennehmen und auch kein Konto f&uuml;r Sie anlegen!');

und die Tabelle customers ist um das neue Feld privacy zu erweitern:

ALTER TABLE  `customers` ADD  `privacy` DATETIME NOT NULL AFTER  `refferers_id` ;

Da die Codedarstellung in WordPress eher dürftig ist gibt es das ganze in dateiweiser Abfolge auch noch einmal in Textform.

Link in der E-Mail

Man kann den Link zur Datenschutzerklärung natürlich einfach kopieren und in die fraglichen Mailtexte templates/[template]/mail/[language]/order_mail.[txt|html] sowie templates/[template]/mail/[language]/create_account_mail.[txt|html] einfügen. Ein hartkodierter Link ist aber nicht wirklich die Ideallösung und sorgt bei einem eventuellen Domainwechsel für unbändige Freude und in der Form http://www.shop.de/shop_content.php/coID/2/content/Privatsphaere-und-Datenschutz/ sieht das auch nicht wirklich prickelnd aus.

Da hilft ein kurzer Eingriff in create_account.php, dort ersetzen wir

$module_content = array ('MAIL_NAME' => $name, 'MAIL_REPLY_ADDRESS' => EMAIL_SUPPORT_REPLY_ADDRESS, 'MAIL_GENDER' => $gender, 'MAIL_ADDRESS' => $gender =="m" ? EMAIL_ADDRESS_M : EMAIL_ADDRESS_F, 'MAIL_LASTNAME' => $lastname, 'MAIL_FIRSTNAME' => $firstname, 'MAIL_USERNAME' => $email_address, 'MAIL_PASSWORD' => $password);

mit

$module_content = array ('MAIL_NAME' => $name, 'MAIL_REPLY_ADDRESS' => EMAIL_SUPPORT_REPLY_ADDRESS, 'MAIL_GENDER' => $gender, 'MAIL_ADDRESS' => $gender =="m" ? EMAIL_ADDRESS_M : EMAIL_ADDRESS_F, 'MAIL_LASTNAME' => $lastname, 'MAIL_FIRSTNAME' => $firstname, 'MAIL_USERNAME' => $email_address, 'MAIL_PASSWORD' => $password, 'HTTP_SERVER' => HTTP_SERVER);

. In send_order.php fügen wir nach

$smarty->assign('PAYMENT_METHOD', $payment_method);

folgendes ein:

$smarty->assign("HTTP_SERVER", HTTP_SERVER);.
 
In den Bestellmails steht dann {$HTTP_SERVER} als Smarty-Variable zur Verfügung, in <tt>create_account_mail.[txt|html]</tt> ist es {$content.HTTP_SERVER}.
 
Dem eher unschönen Link rücken wir anschließend noch mit mod_rewrite zu Leibe und erstellen uns eine .htaccess-Datei oder ergänzen eine bereits vorhandene:
	### BEGIN privacy policy ###
	RewriteRule ^datenschutz/$ shop_content.php?coID=2&language=de
	RewriteRule ^privacy/$ shop_content.php?coID=2&language=en
	### END privacy policy ###

Konto löschen

Aller guten Dinge sind drei. Fangen wir bei den Sprachdateien an. In lang/[language]/[language].php brauchen wir für die Breadbrumb-Navigation entsprechende Angaben:

	define('NAVBAR_TITLE_1_ACCOUNT_DELETE', 'Ihr Konto');
	define('NAVBAR_TITLE_2_ACCOUNT_DELETE', 'Konto l&ouml;schen');

Der Rest wird aus lang/[language]/lang_[language].conf beigesteuert. Den Abschnitt [account] ergänzen wir:

text_delete = 'Konto l&ouml;schen'

Und den Abschnitt fügen wir komplett neu hinzu:

	[account_delete]
	heading_delete_account = 'Konto l&ouml;schen'
	heading_account_deleted = 'Konto gel&ouml;scht'
	delete_account = 'Mit einem Klick auf den Weiter-Button l&ouml;schen Sie Ihr Konto bei uns. Dadurch werden alle mit diesem Konto verkn&uuml;pften personenbezogenen Daten gem&auml;&szlig; den gesetzlichen Vorgaben unwiederbringlich gel&ouml;scht bzw. gesperrt.<p>Bitte beachten Sie, dass sie nach dem L&ouml;schen des Kontos daher auch keinerlei Zugriff mehr auf ihre get&auml;tigten Bestellungen haben!</p><p>Sie k&ouml;nnen nat&uuml;rlich jederzeit wieder ein neues Konto erstellen.'
	account_deleted = 'Ihr Konto wurde erfolgreich gel&ouml;scht.'
</p>

In includes/filenames.php definieren wir noch einen Dateinamen für unsere Datei:

define('FILENAME_ACCOUNT_DELETE', 'account_delete.php');

In account.php bauen wir uns einen Link zur Löschfunktion, nach

$smarty->assign('LINK_PASSWORD', xtc_href_link(FILENAME_ACCOUNT_PASSWORD, '', 'SSL'));

fügen wir

$smarty->assign('LINK_DELETE', xtc_href_link(FILENAME_ACCOUNT_DELETE, '', 'SSL'));

ein.

Die Variable {$LINK_DELETE} steht somit im Template templates/[template]/module/account.html zur Verfügung und kann dort an passender Stelle, beispielsweise unter dem Link zur Passwortänderung, platziert werden.

Auch diese Änderungen finden sich der Übersicht halber nochmal in der Textdatei, account_delete.php und das zugehörige Template stehen ebenfalls zum Download bereit.

Wichtiger Hinweis: Derzeit sieht die “Account löschen”-Funktionalität keine weiteren Sicherheitsabfragen vor! Wer das braucht muss es selbst implementieren! Da xt:Commerce sämtliche Informationen bei einer Bestellung in die order-Tabelle kopiert sind durch das Löschen eines Benutzeraccounts weiterhin alle Rechnungen im vollen Umfang abrufbar.

[tags]xtc, xt:commerce, datenschutz, privacy[/tags]

86 Kommentare Kommentieren

  1. IaN

    Zu den E-Mail-Formvorschriften hätte ich folgende Idee (…im Core, bäh…):

    In der inc/xtc_php_mail.inc.php jeweils (gibbet zweimal, für HTML und Plain Text Mails) nach

    $message_body_plain=strip_tags($message_body_plain);

    ungefähr folgendes einsetzen:

    // add by IaN
    $message_body_html .= "----------Main Shop<br />Max Mustermann<br />
    Mustergasse 12<br />D-12345 Musterhausen<br />Deutschland / Germany<br />
    Tel.: +49-(1234)-12 34 56<br />Fax: +49-(1234)-12 34 57<br />
    E-Mail: info@da.de<br />Internet: http://www.da.de";
    
    $message_body_plain .= "\\n\\n----------\\nMein Shop\\nMax Mustermann\\n
    Mustergasse 12\\nD-12345 Musterhausen\\nDeutschland / Germany\\n
    Tel.: +49-(1234)-12 34 56\\nFax: +49-(1234)-12 34 57\\n\\n
    E-Mail: info@da.de\\nInternet: http://www.da.de";
    // end add
    

    Im Text-Block kann man auf die Angaben für $message_body_html verzichten.

    Cheers,
    IaN


  2. IaN

    Ach, Mist, im HTML-Block fehlen die <br> – hab’ doch glatt den BBCode vergessen…


  3. Matt

    Ich war so frei das mal zu korrigieren.


  4. Caruni

    Funktioniert bei mir nicht.
    Habe Folgendes eingegeben:
    ————-
    $message_body_html .= “———-VIVARISJ.Carlos Q.Fernandes
    Pfaffenberg 50D-42659 SolingenDeutschland
    Tel.: +49-212-2442948Fax: +49-212-2442949
    E-Mail: kontakt@vivaris.deInternet: http://www.vivaris.de“;
    $message_body_plain .= “\n\n———-\nVIVARIS\nCarlos Fernandes\n
    Pfaffenberg 50\nD-42659 Solingen\nDeutschland\n
    Tel.: +49-212-2442948\nFax: +49-212-2442949\n\n
    E-Mail: kontakt@vivaris.de\nInternet: http://www.vivaris.de“;
    // end add
    $mail->AltBody = $message_body_plain;
    } else {
    $mail->IsHTML(false);
    //remove html tags
    $message_body_plain = str_replace(”, ” \n”, $message_body_plain);
    $message_body_plain = strip_tags($message_body_plain);
    $mail->Body = $message_body_plain;
    ——————


  5. zool

    huhu, wirklich gute arbeit, funktioniert soweit alles. habe es auf 3.04 getestet. wie schaut es btw mit der version 3.03 aus? ist die anleitung übertragbar? grüße


  6. Matt

    Ian (der erste hier) hat im xt:Commerce-Forum gepostet, dass für 3.03 nur zwei Änderungen notwendig wären. Vielleicht kann er die ja hier kurz offenbaren ;-)


  7. Thomas

    Hallo,
    super, habe es bei uns installiert, funktioniert
    soweit.
    Nur eine Frage hätte ich noch, wie sieht es mit
    den bestehenden Kunden aus, die müssten doch
    der Datenschutzerklärung auch noch zustimmen?

    Gruss
    Thomas


  8. Friesen

    Bei mir geht es Leider nicht muß an dieser Zeile liegen

    $smarty->assign(‘PRIVACY_LINK’, $main->getContentLink(2, ACCEPT_PRIVACY, “class=’popup’”));

    bekomme immer diesen Fehler
    Fatal error: Call to a member function on a non-object in /var/www/web2/html/create_guest_account.php on line 369

    Die Content ID ist aber richtig
    https://www.it-friesen.de/shop_content.php/coID/2/content/Privatsph-re-und-Datenschutz

    Hat eine ne Idee maß ich ändern muß


  9. Matt

    Welche Shop-Version hast du im Einsatz?

    Für Bestandskunden habe ich nichts in petto.




  10. Matt

    Hab das gerade noch einmal mit einer unmodifizierten 3.04 SP 2.1 getestet, da sind sowohl $smarty als auch $main ein Objekt.

    Du kannst mal versuchen, dir den Link über xtc_href_link() selbst zusammenzuschrauben, um Probleme mit dem $main-Objekt auszuschließen, denn das $smarty-Objekt brauchst du ja auf jeden Fall, sonst würdest du keinerlei Ausgabe haben.


  11. ui

    Vielen Dank für die Lösung.

    Alle Links sind da, das “abnicken” bei Konto-erstellen funktioniert.

    Klickt man jedoch auf “Konto löschen” dann wird die account_delete.php angezeigt aber nicht ausgeführt. Was habe ich vergessen?

    Die filename.php wurde auch ergänzt.

    Danke und Grüße!


  12. Matt

    Was meinst du mit ‘wird angezeigt, aber nicht ausgeführt’? Siehst du eine weiße Seite, Fehlermeldungen?


  13. Uli

    Hallo.

    Erst einmal vielen Dank für diese Lösung.

    Es funktioniert auch alles soweit bis auf das Löschen des Kundenkontos. Bei mir wird die account_delete.php lediglich angezeigt und nicht ausgeführt.

    Was habe ich vergessen?


  14. Mike

    Hallo

    Nette Anleitung. Nur Leider stimmt die Anleitung mit der SP2.1 nicht.

    Es fehlen Einträge in der create_account.php
    if ($customers_status == 0 || !$customers_status)

    Das gibt es nicht.

    und

    $sql_data_array = array (‘customers_vat_id’ => $vat, ‘customers_vat_id_status’ => $customers_vat_id_status, ‘customers_status’ => $customers_status, ‘customers_firstname’ => $firstname, ‘customers_lastname’ => $lastname, ‘customers_email_address’ => $email_address, ‘customers_telephone’ => $telephone, ‘customers_fax’ => $fax, ‘customers_newsletter’ => $newsletter, ‘customers_password’ => xtc_encrypt_password($password),’customers_date_added’ => ‘now()’,'customers_last_modified’ => ‘now()’);

    das auch nicht.

    Was kann ich nun tun ??

    Danke
    Mike


  15. Mike

    Hallo

    Nette Anleitung. Nur Leider stimmt die Anleitung mit der SP2.1 nicht.

    Es fehlen Einträge in der create_account.php
    if ($customers_status == 0 || !$customers_status)

    Das gibt es nicht.

    Was kann ich nun tun ??

    Danke
    Mike


  16. Matt

    Genau hinschauen.

    if ($customers_status == 0 || !$customers_status)

    ist in Zeile 213

    $sql_data_array = array (‘customers_vat_id’ => $vat, ‘customers_vat_id_status’ => $customers_vat_id_status, ‘customers_status’ => $customers_status, ‘customers_firstname’ => $firstname, ‘customers_lastname’ => $lastname, ‘customers_email_address’ => $email_address, ‘customers_telephone’ => $telephone, ‘customers_fax’ => $fax, ‘customers_newsletter’ => $newsletter, ‘customers_password’ => xtc_encrypt_password($password),’customers_date_added’ => ‘now()’,'customers_last_modified’ => ‘now()’);

    in Zeile 218 (jeweils unmodifiziertes, frisch geladenes xt:Commerce 3.04 SP 2.1)


  17. Marcus

    Hi Matt,

    vielen Dank für diese super Anleitung! Funktioniert auf Anhieb!

    Gruß
    Marcus


  18. Jan

    Hi Matt,
    templates/[template]/modules und templates/[template]/modules/create_account.html:
    /*———————————————————————————————–*/
    An passender Stelle den Codeblock einfügen:
    {#text_delete#}
    **********************
    Ich denke, dass dieser Link NUR in der account.html eingebaut werden soll! Oder liege ich da falsch?
    Sonst vielen, vielen Dank für diesen genialen “hack� ;-)
    Gruß
    Jan


  19. Jan

    Hi Matt,

    templates/[template]/modules und templates/[template]/modules/create_account.html:
    /*———————————————————————————————–*/
    An passender Stelle den Codeblock einfügen:
    {#text_delete#}

    **********************

    Ich denke, dass dieser Link NUR in der account.html eingebaut werden soll ujnd sicher nicht in der create_account.html (so steht es in Deiner Textdatei geschrieben)! Oder liege ich da falsch?

    Sonst vielen, vielen Dank für diesen genialen “hack� ;-)

    Gruß

    Jan


  20. Matt

    Ja, muss natürlich account.txt sein. Danke für den Hinweis, wurde korrigiert.


  21. Sebi

    Hallo,

    ich möchte bei meinem Shop gerne auch dsas der Kunde den Datenschutz, so wie die AGBs auch beim Bestellen bestätigen muss.

    Wie kann ich das probieren?
    Ich habe schon alles so einfach in checkout_payment.html eingefügt, aber es funktioniert nicht…


  22. Sebi

    Hallo Matt,

    bei meinem Shop möchte ich dass der Kunde den Datenschutz, so wie die AGBs auch, beim Bestellen bestätigen muss.

    Wie kann ich das umsetzen?
    Ich habe schon alles in checkout_payment.html eingefügt, aber es funktioniert nicht…

    Kannst Du mir bitte sagen, wie ich das anstellen kann?


  23. heiko

    bei meinem xtc3.03 funktionierts nicht, zur Zeit hänge ich bei der Meldung

    Fatal error: Call to undefined function: getcontentlink() in /var/www/web7/html/xtc/create_account.php on line 508

    Kann mir jemand helfen?


  24. Friesen

    Du musst folgendes ändern

    create_account_guest.html und create_account.html:
    An passender Stelle die Smarty-Variablen einfügen:
    {$CHECKBOX_PRIVACY}
    {$PRIVACY_LINK}
    nicht {$PRIVACY_LINK} eintragen sondern den direkten Link
    <a href=”https://www.it-friesen.de/shop_content.php?coID=2″ rel=”nofollow”>Ich akzeptiere Ihre Datenschutzrichtlinien</a>


  25. Friesen

    #<a href=”https://www.it-friesen.de/shop_content.php?coID=2″ rel=”nofollow”>Ich akzeptiere Ihre Datenschutzrichtlinien</a>#

    du musst natürlich deine webseite angeben.


  26. heiko

    bei mir kommt immer noch die Meldung

    Fatal error: Call to undefined function: getcontentlink() in /var/www/web7/html/xtc/create_account.php

    Wo und wie muß die Funktion getcontentlink() definiert werden?

    Vielleicht kannst Du mir mal alle Änderungen beschreiben die bei einem xtc3.03 abweichen von der Beschreibung Oben, ich finde z.B. auch nicht die Zeile

    if ($customers_status == 0 || !$customers_status)

    in der create_account.php.


  27. nero

    und diemal hoffentlich mit link…

    Davor einfügen (’coID=x’ und class anpassen):
    // BEGIN privacy policy
    $smarty->assign(‘PRIVACY_LINK’,'#<a href=”‘.xtc_href_link(FILENAME_CONTENT, ‘coID=2′, ‘SSL’).’” rel=”nofollow”>’.ACCEPT_PRIVACY.’</a>#’);
    $smarty->assign(‘CHECKBOX_PRIVACY’, ”);
    // END privacy policy


  28. heiko

    Nun funktionierts auch in meinen Shops.

    Dank an alle die mir halfen.


  29. Marcel

    Danke schön!


  30. Sebi

    hat sich erledigt, es funktioniert doch mit C&P, habe nur eine Funktion vergessen ^^


  31. IaN

    So, nun… Ich hatte ja immer noch vor, die notwendigen Änderungen für die Version 3.0.3 zu posten – also, sind tatsächlich drei, nicht zwei:

    Zunächst mal die Änderung an der Datenbank:

    ALTER TABLE `customers` ADD `privacy` DATETIME NOT NULL AFTER `refferers_id`;

    …wird nicht gehen, da es das Feld refferers_id in der 3.0.3 nicht gibt. Kein Problem, nimmt man halt das, was da ist:

    ALTER TABLE `customers` ADD `privacy` DATETIME NOT NULL AFTER `password_request_key`;

    Dann das Datenbank-Update in der create_account.php und create_guest_account.php:

    In der 3.0.3 heisst die Variable mit der Kundengruppe NICHT $customers_status, sondern $customer_group – lässt man den $customers_status drin, werden alle neuen kunden Admin…

    ALSO: Anstatt nach

    if ($customers_status == 0 || !$customers_status)

    suchen nach

    if ($customer_group == 0 || !$customer_group)

    und Matts Code danach einfügen. Und ganz wichtig:

    In $sql_data_array

    ‘customers_status’ => $customers_status

    ersetzen durch

    ‘customers_status’ => $customer_group

    Die dritte Änderung betrifft das getcontentlink, aber da hat Friesen schon den richtigen Weg aufgezeigt – ich hab’s auch erstmal mit nem hart codierten Link gemacht, werde aber wohl früher oder später noch versuchen, die getcontentlink aus einer 3.0.4 (ist in der main.php) in meinen 3.0.3 reinzupfriemeln – sieht halt besser aus, wenn man nur die Datenschutzerklärung hat ohne den “Rest” des Shops drumrum…

    So, hoffe, ich hab nix vergessen!

    Cheers,
    IaN



  32. Matt

    Habs heut auch gelesen. Allerdings frage ich mich, warum sich Trusted Shops mit dieser ‘Erklärung’ so lange Zeit läßt und das erst nach dem Inkrafttreten des Gesetzes per Newsletter veröffentlicht.

    Ich sach ma:

    Drinlassen schadet nicht. IANAL, aber wenn ich mir den Text des TMG durchlese (beispielsweise hier: http://www.telemedien-und-recht.de/#a10), dann sehe ich das schon für erforderlich an:
    Bei einem automatisierten Verfahren, das eine spätere Identifizierung des Nutzers ermöglicht und eine Erhebung oder Verwendung personenbezogener Daten vorbereitet, ist der Nutzer zu Beginn dieses Verfahrens zu unterrichten.

    Ist halt die Frage: Wie definiert man ‘automatisiertes Verfahren’? Denn personenbezogene Daten werden bei einer Bestellung auf jeden Fall erhoben…


  33. peter

    Was macht eigentlich der absolute Laie, der ich nun mal bin. Gibt es irgend wo Hilfe oder jemanden der einem die Änderungen einspielt?
    Ich habe folgende Version: xt:Commerce v3.0.4 SP1
    Besten Dank für eine Antwort.

    Peter


  34. IaN

    >> Denn personenbezogene Daten werden bei einer Bestellung auf jeden Fall erhoben…

    Diese stehen aber schon seit jeher unter dem Schutz des BDSG. Und das zur Abwicklung einer Bestellung Name und Adresse (online ggf. E-Mail) nötig sind, steht ausser Frage. Die bisherige und bewährte Praxis, eine Zustimmung NUR zu erfordern, wenn die Daten an Dritte weitergegeben werden (sieht man auf jedem Papier-Bestellschein: “Wenn Sie auch Angebote von unseren Partnern erhalten wollen…”) müsste doch ausreichen?!?

    Okay, inwieweit z.B. Google Analytics als “Dritter” gewertet wird – es geht ja hier um Cookies (die die zuständigen Politiker wahrscheinlich immer noch für Kekse halten) bleibt nach wie vor offen.

    Ganz abgesehen davon scheint die Datenschutzerklärung wettbewerbsrechtlich nicht relevant, so dass eine Abmahnung in diesem Punkt sowieso unwirksam wäre. Dazu zitiere ich nochmal aus dem TrustedShops-Blog:

    “Andererseits haben bislang mehrere Gerichte entschieden, dass Datenschutzverstöße nicht abmahnfähig sind, so. z.B. das LG Essen 2003: “§ 4 TDDSG ist eine wertneutrale Vorschrift, so dass ein Verstoß gegen § 4 TDDSG nicht die Wettbewerbswidrigkeit zur Folge hat.â€? Nicht nachvollziehbar ist, warum dies bei § 13 TMG anders sein sollte.”

    Link zum LG Essen:
    http://www.jurpc.de/rechtspr/20030312.htm

    Für mich ist das Ganze ein zweischneidiges Schwert – einerseits lese *ich* mir Datenschuzuerklärungen jetzt auch durch, wenn ich sie extra akzeptieren muss, andererseits ist unser Umsatz im Shop seit Einbau der Checkbox um ca. 30% eingebrochen…


  35. tobb

    Hallo,

    finds klasse, dass hier so tolle Hilfe angeboten wird!!!
    Ich werde mir auf jeden Fall die DSE einbauen, wenn auch nicht abmahnfähig so trotzdem bußgeldfähig (bis 50.000 Euro) …

    Trotzdem, ich hab Probleme beim “verstehen”.
    Als Info – bin total neu was das hier betrifft und versuche mich an einem shop und hoffe, dass es mir gelingt.

    Vielleicht kann mir jemand auf die Sprünge helfen – ich schnalls nicht:

    wo (welche Datei)muß das hier eingebaut werden:

    Neues Feld in der Tabelle ‘customers hinzufügen:
    /*———————————————————————————————–*/

    ALTER TABLE `customers` ADD `privacy` DATETIME NOT NULL AFTER `refferers_id` ;

    Schon mal ganz herzlichen Dank!!!


  36. Matt

    Das wird nicht in eine Datei eingetragen, sondern ist ein SQL-Statement zum ändern der customers-Tabelle.

    Mit einem Tool deiner Wahl, beispielsweise phpMyAdmin, kannst du mit diesem Statement die Datenbank entsprechend modifizieren.



  37. tobb

    Hi Matt,

    ganz herzlichen Dank für die Hilfe – sogar ich als Laie habe das hinbekommen!

    Grüße
    tobb


  38. Jan

    Hi Matt,

    was passiert eigentlich, wenn ich meinen Neukunden einen Rabatt einräume?

    Nun löscht Kunde XY gleich nach der ersten Bestellung sein Konto (weil er vielleicht der Meinung ist, er würde sowieso nie wieder was bei mir bestellen) und registriert sich kurze Zeit später erneut (weil er nun doch noch mehrere meiner Artikel kaufen will)! Wird für diesen Kunden erneut der “Neukundenrabatt” fällig, oder “merkt” das System, dass dieser Kunde (vorrausgesetzt die angegebenen Daten sind identisch) bereits irgend wann einmal ein Neukunde war? Ich gehe mal davon aus, dass so etwas nicht unbedingt mutwillig passieren muss!

    Danke und Gruß

    Jan


  39. Matt

    Jan, das Problem ließe sich lösen, indem du die Daten anstatt zu löschen sperrst und bei der Neuanmeldung eine Überprüfung auf diese gesperrten Daten loslässt, um den Kunden somit als Altkunden zu identifizieren.

    Allerdings bin ich kein Anwalt und kann dir daher auch nicht sagen, ob so eine Prüfung mit gesperrten Daten zulässig ist.


  40. Jan

    OK Mantt, das kann dann wahrscheinlich wirklich nur ein Anwalt entscheiden.

    Ich denke, ich werde einfach meinen Neukunden keinen Rabatt gewähren und umgehe das Problem auf diese Art ;-)

    Vielen Dank für Deinen Beitrag

    Jan


  41. Mirko

    Hallo,

    tolle Erweiterung (auch wenn ich die Privacy schon drin hatte – aber ohne eMail-Link und Lösch-Funktion) ;-)

    Nun aber mal eine Frage Du schreibst ja:

    “Die Zustimmung muss nachprüfbar gespeicht werden.”

    Wo kann ich das denn im Notfall nachweisen, das der Kunde das akzeptiert hat? Finde das nirgends im Admin-Bereich, bis jetzt nur in der SQL Datenbank gesehen, aber reicht das als Nachweis wenn das ne “Laie” (z.B. Anwalt) sehen will?

    Gruß
    Mirko


  42. Gunnar

    Hallo,

    wirklich super Matt.
    Ich habe alles eingebaut un soweit funktioniert es auch. Nur wenn ich die Datenschutzrichtlinien akzeptiere und auf weiter klicke bekomme ich die Meldung, dass ich die Richtlinien akzeptieren muss.

    Die Abfrage findet doch hier statt:
    // BEGIN privacy policy
    if(!isset($privacy) || empty($privacy)) {
    $error = true;
    $messageStack->add(‘create_account’, ENTRY_PRIVACY_POLICY_ERROR);
    }
    // END privacy policy

    Ich benutze local XAMPP aber auf dem Webserver funktioniert es auch nicht.


  43. Matt

    Ja, aber das hier nicht vergessen:
    // BEGIN privacy policy
    $privacy = xtc_db_prepare_input($_POST['privacy']);
    // END privacy policy


  44. Matt

    @Mirko: Da hab ich noch nicht wirklich drüber nachgedacht. Aber es macht ja eigentlich keinen Unterschied, ob du dem Anwalt das mit phpMyAdmin oder mit dem Admin-Tool vom Shop zeigst. IMHO.


  45. Mirko

    Naja stimmt eigentlich, würde aber noch schöner sein das im admin bereich zu sehen ;-)

    Gruß
    Mirko


  46. Micha

    Hi, nett e Sache nur kann man die Sache mit der DB nicht bebildert darstellen? Also für Newbies weil ich hab da meine Probleme und weis nicht, was in welches Feld kommt.

    Anbei ein Screenshot damit du weist wovon ich rede

    http://img168.imageshack.us/img168/8230/dbtt1.jpg


Kommentieren





zurücksetzen