Der bisherige Code, den du rauswerfen möchtest, sorgt dafür, daß alle Kunden die sich noch nicht in der DB-Tabelle
customers_dsgvo befinden dort eingetragen werden.
Das sind ja nicht nur Neukunden sondern auch ältere Kunden, z.B. nach einem Shop-Update oder nach Neuinstallation des DSGVO-Moduls. Die fallen bei deiner Lösung hinten runter.
*EDIT*Nöö, verkehrt meine Aussage, wir haben ja eine Einschränkung in der Query
" AND c.customers_date_added >= '".xtc_db_input($check_dsgvo['date_added'])."'"
folglich könnte dein Ansatz funktionieren.
Allerdings frage ich mich wie denn die von mir erwähnten älteren Kunden in die Tabelle
customers_dsgvo gelangen.
*END_EDIT*Eine Lösung könnte das sein:
Wenn ein Kunde die Datenschutzerklärung bestätigt wird ein temporäres File generiert welches die
customers_id enthält
(
dsgvo_action.php)
$sql_data_array = array( 'customers_id' => (int
)$_SESSION['customer_id'], 'content_group' => (int
)$content_group, 'date_confirmed' => 'now()', ); xtc_db_perform
('customers_dsgvo', $sql_data_array); touch(DIR_FS_CATALOG
.DIR_ADMIN
.'archives/content/.dsgvo_running_'.$_SESSION['customer_id']); //new, noRiddle und in der
dsgvo_create.php ganz oben
if(is_file(DIR_FS_CATALOG
.DIR_ADMIN
.'archives/content/.dsgvo_running_'.$_SESSION['customer_id'])) { unset(DIR_FS_CATALOG
.DIR_ADMIN
.'archives/content/.dsgvo_running_'.$_SESSION['customer_id']);} //new, noRiddle sodaß beim Kunden selbst das generierte temporäre File nach Ausführung des DB-Eintrages gelöscht wird
und im Loop weiter unten (den der andere Kunde auslöst)
while ($check_customers = xtc_db_fetch_array
($check_customers_query)) { if(!file_exists(DIR_FS_CATALOG
.DIR_ADMIN
.'archives/content/.dsgvo_running_'.$check_customers['customers_id'])) { //new, noRiddle $sql_data_array = array( 'customers_id' => (int
)$check_customers['customers_id'], 'content_group' => (int
)$content_group, 'date_confirmed' => $check_customers['customers_date_added'], ); xtc_db_perform
('customers_dsgvo', $sql_data_array); } else { unset((DIR_FS_CATALOG
.DIR_ADMIN
.'archives/content/.dsgvo_running_'.$check_customers['customers_id'])); } } Könnte jedoch sein, daß man da immer noch zwischen kommt.
Zumindest müsste doch das ohnehin minimal kleine Zeitfenster, welches nach deiner Analyse zu dem "Duplicate entry" führte, noch kleiner werden.
Was meinst du ?
[...]
PS: In der create_account.php ist weit und breit kein nutzbarer Hook, deshalb dieser Umweg.
Ja, das ist Schade, Hooks bei Konto-Erstellung, aber auch in den Files für "Mein Konto" haben wir mehrfach erbeten aber leider gibt es Dinge die die Community anregt die entweder aus unbekannten Gründen untergehen oder schlicht ignoriert werden.
Ein Team-Mitglied,
webald, hat 2018 bereits einen Thread dazu aufgemacht (
Hook-Wünsche), soweit ich das sehe ist jedoch von den Vorschlägen nur wenig umgesetzt worden, vor allem nichts aus diesem Vorschlag von
vr:
Antwort #29und nicht zuletzt aus meiner
Antwort #50, welche die letzte in genanntem Thread ist.
Auch könnten wir längst update-sicher und ohne Warnings Sprach-Konstanten neu definieren, wenn die vorhandenen mittels
definiert wären, wie ich bereits
- inklusiver Blitz-Umsetzung mittels Regex-Suchen-Ersetzen in z.B. notepad++ -vorgeschlagen habe.
Gruß,
noRiddle