$type, 'label' => $label, 'weight' => 400, ]; if (!isset($_SESSION['containers'])) { $_SESSION['containers'] = []; } foreach ($_SESSION['containers'] as $cont) { if ($cont['label'] == $label && $label != '') { // Box schon vorhanden $redirect = 'index.php?error=Container schon vorhanden'; break 2; } } $_SESSION['containers'][] = $box; $redirect = 'index.php'; break; case 'delete_container': $num = htmlspecialchars($_REQUEST['index']); if ($num != $_REQUEST['index']) { $redirect = 'index.php?error=Container nicht gefunden'; } $num = (int) $num; if (isset($_SESSION['containers'][$num])) { unset($_SESSION['containers'][$num]); // Array neu aufbauen $_SESSION['containers'] = array_values($_SESSION['containers']); } $redirect = 'index.php'; break; case 'containers_complete': $_SESSION['containers_done'] = true; $redirect = nextPage(); break; case 'customer': $lname = ''; if (isset($_REQUEST['lname']) && trim($_REQUEST['lname']) != '') { $lname = namen_korrigieren($_REQUEST['lname']); } $fname = ''; if (isset($_REQUEST['fname']) && trim($_REQUEST['fname']) != '') { $fname = namen_korrigieren($_REQUEST['fname']); } $number = ''; if (isset($_REQUEST['phone']) && trim($_REQUEST['phone']) != '') { $number = trim($_REQUEST['phone']); } if (substr($number, 0, 1) != "0" && substr($number, 0, 3) != '+49') { $number = '07192'.$number; } $number = format_number_national($number); if (! $number || !$lname || !format_number_api($number)) { $redirect = 'kunde.php?error&num='.urlencode($number).'&lname='.urlencode($lname).'&fname='.urlencode($fname); break; } $_SESSION['lname'] = htmlspecialchars($lname); $_SESSION['fname'] = htmlspecialchars($fname); if ($_SESSION['fname'] != '') { $_SESSION['name'] = $_SESSION['lname'].', '.$_SESSION['fname']; } else { $_SESSION['name'] = $_SESSION['lname']; } $_SESSION['phone'] = htmlspecialchars($number); if (isset($_REQUEST['save']) && $_REQUEST['save'] == 'yes' && $_SESSION['mode'] != 'local') { setcookie('LNAME', $lname, time() + 24*3600*500, ""); setcookie('FNAME', $fname, time() + 24*3600*500, ""); setcookie('NUMBER', $number, time() + 24*3600*500, ""); } $redirect = 'address.php'; break; case 'address': $fields = array("firma", "fname", "lname", "address", "zip", "city", "email"); foreach ($fields as $f) { if (isset($_REQUEST[$f]) && trim($_REQUEST[$f]) != '') { $_SESSION[$f] = trim(htmlspecialchars($_REQUEST[$f])); } else { if (! isset($_SESSION[$f])) { $_SESSION[$f] = ''; } } } if ($_SESSION['lname'] == '') { $redirect = 'address.php?error'; break; } if ($_SESSION['fname'] != '') { $_SESSION['name'] = $_SESSION['lname'].', '.$_SESSION['fname']; } else { $_SESSION['name'] = $_SESSION['lname']; } if (!isset($_SESSION['kundennr']) || !$_SESSION['kundennr']) { $_SESSION['kundennr'] = erstelle_kunde($_SESSION); $_SESSION['phonenumbers'] = [format_number_api($_SESSION['phone'])]; $_SESSION['emailaddrs'] = []; if ($_SESSION['email'] != '') { $_SESSION['emailaddrs'][] = $_SESSION['email']; } if (!$_SESSION['kundennr']) { showError(); } } else { if (isset($_SESSION['email']) && $_SESSION['email']) { // Not implemented //update_kunde($_SESSION['kundennr'], ['email' => $_SESSION['email']]); } } $_SESSION['address_done'] = true; $redirect = nextPage(); break; case 'notification': if (isset($_REQUEST['notification'])) { list($schema, $content) = explode(':', $_REQUEST['notification']); if ($schema == 'sms' or $schema == 'whatsapp') { $content = format_number_api($content); } $_SESSION['notificationPreference'] = $schema.':'.$content; $_SESSION['notification_done'] = true; } $redirect = nextPage(); break; case 'obstart': $_SESSION['obstart'] = $_REQUEST['obstart']; $_SESSION['obstart_done'] = true; $redirect = nextPage(); case 'gebrauchte': if (isset($_REQUEST['kartonsja'])) { $_SESSION['kartons'] = true; $_SESSION['gebrauchte_3er'] = ($_REQUEST['gebrauchte_3er'] == 1); $_SESSION['gebrauchte_5er'] = ($_REQUEST['gebrauchte_5er'] == 1); $_SESSION['gebrauchte_10er'] = ($_REQUEST['gebrauchte_10er'] == 1); $_SESSION['gebrauchte_prio'] = $_REQUEST['gebrauchte_prio'] ?: null; } if (isset($_REQUEST['kartonsnein'])) { $_SESSION['kartons'] = false; $_SESSION['gebrauchte_3er'] = 0; $_SESSION['gebrauchte_5er'] = 0; $_SESSION['gebrauchte_10er'] = 0; $_SESSION['gebrauchte_prio'] = null; } $_SESSION['gebrauchte_done'] = true; $redirect = nextPage(); break; case 'auftrag': if (isset($_REQUEST['3er'])) { $_SESSION['neue'] = '3er'; } if (isset($_REQUEST['5er'])) { $_SESSION['neue'] = '5er'; } if (isset($_REQUEST['10er'])) { $_SESSION['neue'] = '10er'; } if (isset($_REQUEST['submit']) && isset($_REQUEST['sonstiges']) && $_REQUEST['sonstiges'] != '') { $_SESSION['neue'] = 'sonstiges'; $_SESSION['sonstiges'] = htmlspecialchars($_REQUEST['sonstiges']); } elseif (isset($_REQUEST['sonstiges'])) { $_SESSION['neue'] = 'sonstiges'; $redirect = 'auftrag.php?sonstiges'; break; } $_SESSION['auftrag_done'] = true; $redirect = nextPage(); break; case 'frischsaft': if (isset($_REQUEST['frischsaftnein'])) { $_SESSION['frischsaft'] = 0; } elseif (isset($_REQUEST['frischsaft'])) { $_SESSION['frischsaft'] = htmlspecialchars($_REQUEST['frischsaft']); } $_SESSION['frischsaft_done'] = true; $redirect = nextPage(); break; case 'summary': if (isset($_REQUEST['anmerkungen'])) { $_SESSION['anmerkungen'] = htmlspecialchars($_REQUEST['anmerkungen']); } $_SESSION['complete'] = true; $redirect = 'finish.php'; break; } } /* * Um das Speichern in der API kümmern wir uns, wenn Kundendaten, Obstart und grundsätzliche Auftragsdaten feststehen */ if (isset($_SESSION['neue'])) { // Bevor dieses Datenfeld vorhanden ist, macht Speichern keinen Sinn $auftrag = []; /* Herunterladen bringt nichts, da wir einfach immer unsere bekannten Daten rein schieben. Parallelität ist nicht gewünscht * if (isset($auftrag['id'])) { // Auftrag ist schon in der API, aktuellen Stand herunter laden $auftrag = api_call('GET', 'orders/'.$auftrag['id']); }*/ // customer if (isset($_SESSION['kundennr'])) { $auftrag['customer'] = $_SESSION['kundennr']; $auftrag['name'] = $_SESSION['name'] ?? $_SESSION['lname']; $auftrag['phone'] = $_SESSION['phone']; $auftrag['email'] = isset($_SESSION['email']) ? $_SESSION['email'] : null; $auftrag['notificationPreference'] = $_SESSION['notificationPreference']; $auftrag['fruitTypeName'] = $_SESSION['obstart']; } // containers if (isset($_SESSION['containers']) && count($_SESSION['containers']) > 0) { $auftrag['containers'] = array_values($_SESSION['containers']); } // Array mit allen verfügbaren Kartongrößen $groessen = ['3er', '5er', '10er']; // Alle vom Kunden mitgebrachten Größen filtern $mitgebrachteGroessen = array_filter($groessen, function($groesse) { return !empty($_SESSION['gebrauchte_' . $groesse]); }); // Initialisierung der Zielstruktur $auftrag['haveUsed'] = !empty($mitgebrachteGroessen); $auftrag['usedFirst'] = null; if (! isset($auftrag['wishes'])) { $auftrag['wishes'] = []; } if ($auftrag['haveUsed']) { // Priorität (usedFirst) bestimmen: // Falls explizit in 'gebrauchte_prio' gesetzt, sonst die einzige mitgebrachte Größe if ($_SESSION['gebrauchte_prio']) { $auftrag['usedFirst'] = $_SESSION['gebrauchte_prio']; } elseif (count($mitgebrachteGroessen) === 1) { $auftrag['usedFirst'] = reset($mitgebrachteGroessen); } } // Kundenwunsch für neue Kartons $wunschNeue = $_SESSION['neue'] ?? null; // 'wishes'-Array gemäß deiner Datenstruktur aufbauen foreach ($groessen as $groesse) { if ($groesse === $wunschNeue) { // Die primär gewünschte Größe erhält "rest" $auftrag['wishes'][] = [ 'packageType' => $groesse, 'wish' => 'rest' ]; } elseif (in_array($groesse, $mitgebrachteGroessen)) { // Alle weiteren mitgebrachten Größen erhalten "only-used" $auftrag['wishes'][] = [ 'packageType' => $groesse, 'wish' => 'only-used' ]; } } // frischsaft if (($_SESSION['frischsaft'] ?? 0) > 0) { $auftrag['wishes'][] = [ 'packageType' => 'frischsaft', 'wish' => $_SESSION['frischsaft'] ]; } // notes $auftrag['notes'] = ''; if (($_SESSION['neue'] ?? '') == 'sonstiges' && isset($_SESSION['sonstiges'])) { $auftrag['notes'] .= "Sonstiger Wunsch: ".$_SESSION['sonstiges']."\n\n"; } if (isset($_SESSION['anmerkungen']) && $_SESSION['anmerkungen'] != '') { $auftrag['notes'] .= $_SESSION['anmerkungen']; } if ($_SESSION['mode'] != 'local') { $auftrag['notes'] .= "\nAuftrag wurde mit einem eigenen Gerät erstellt."; } if (!isset($_SESSION['complete']) || $_SESSION['complete'] == false) { $auftrag['notes'] .= "\nAuftrag unvollständig erfasst."; } // Auftrag lokal speichern $filename = "../data/".date('Y').'/'.time().'.json'; if (isset($_SESSION['orderid'])) { $filename = "../data/".date('Y').'/'.time().'-'.$_SESSION['orderid'].'.json'; } @file_put_contents($filename, json_encode($auftrag)); if (isset($_SESSION['orderid']) && $_SESSION['orderid']) { // update $ret = api_call('PUT', 'anonymous/updateorder/'.$_SESSION['orderid'], $auftrag); } else { // neu $ret = api_call('POST', 'anonymous/neworder', $auftrag); } if ($ret['status_code'] >= 400) { foreach ($ret['data']['validation_errors'] as $item) { $_SESSION['warnings'][] = $item['key'].': '.$item['message']; } return showError(); } $ret = $ret['data']; $_SESSION['orderid'] = $ret['uuid']; if (!isset($ret['id'])) { echo "Es gabe einen Fehler beim Abspeichern des Auftrags. Wir bitten dies zu entschuldigen und einen Papierauftrag auszufüllen."; file_put_contents("../error.log", date("Y-m-d H:i:s") . ': '.json_encode($auftrag). print_r($ret, true).'\n', FILE_APPEND | LOCK_EX); die(); } // Auftrag lokal speichern if (isset($_SESSION['orderid'])) { $filename = "../data/".date('Y').'/'.time().'-'.$_SESSION['orderid'].'.json'; } // Session-Daten mit dran hängen $auftrag['session'] = $_SESSION; @file_put_contents($filename, json_encode($auftrag)); // ========================================================================= // E-Mail-Benachrichtigung an den Kunden (Einmaliger Versand bei Fertigstellung) // ========================================================================= // Bedingungen: // 1. Auftrag ist als abgeschlossen markiert ($_SESSION['complete'] == true) // 2. Der Text 'Auftrag unvollständig erfasst' ist NICHT mehr in den Notizen // 3. E-Mail-Adresse des Kunden ist vorhanden // 4. E-Mail wurde für diese Session/diesen Auftrag noch NICHT versendet if ( !empty($_SESSION['complete']) && !empty($_SESSION['email']) && empty($_SESSION['mail_sent']) ) { $to = $_SESSION['email']; $orderId = $_SESSION['orderid'] ?? 'N/A'; $subject = "Bestätigung: Ihr Auftrag bei der Mosterei wurde erfasst"; // Stamm- und Auftragsdaten aus der Session aufbereiten $fname = $_SESSION['fname'] ?? ''; $lname = $_SESSION['lname'] ?? ''; $name = $_SESSION['name'] ?? trim("$fname $lname"); // Benachrichtigungswunsch parsen ("method:data") $notificationText = "Keine Angabe"; if (!empty($_SESSION['notificationPreference'])) { $parts = explode(':', $_SESSION['notificationPreference'], 2); $method = strtolower($parts[0] ?? ''); $target = $parts[1] ?? ''; switch ($method) { case 'whatsapp': $notificationText = "WhatsApp ($target)"; break; case 'sms': $notificationText = "SMS ($target)"; break; case 'email': $notificationText = "E-Mail ($target)"; break; default: $notificationText = !empty($target) ? ucfirst($method) . " ($target)" : ucfirst($method); break; } } // 1. Container-Liste aufbereiten $containerText = ""; if (!empty($_SESSION['containers']) && is_array($_SESSION['containers'])) { foreach ($_SESSION['containers'] as $cont) { $type = ($cont['type'] == 'box') ? 'Box' : 'Anhänger'; $label = !empty($cont['label']) ? " " . $cont['label'] . "" : " (mit Name beschriftet)"; $containerText .= " - " . $type . $label . "\n"; } } else { $containerText = " - Keine Container angegeben\n"; } // 2. Abfüllung (Logik analog zu summary.php) $groessenLabels = ['3er' => '3-Liter-Kartons', '5er' => '5-Liter-Kartons', '10er' => '10-Liter-Kartons']; $mitgebrachte = []; foreach (['3er', '5er', '10er'] as $g) { if (!empty($_SESSION['gebrauchte_' . $g])) { $mitgebrachte[] = $groessenLabels[$g]; } } $abfuellungText = ""; if (($_SESSION['neue'] ?? '') == 'sonstiges') { $abfuellungText = "Sonstiger Wunsch: " . ($_SESSION['sonstiges'] ?? 'Keine Details angegeben'); } else { $neuerKarton = $groessenLabels[$_SESSION['neue'] ?? ''] ?? ''; if (!empty($mitgebrachte)) { $gebText = (count($mitgebrachte) === 1) ? 'Ihre gebrauchten ' . $mitgebrachte : 'Ihre gebrauchten Kartons (' . implode(' und ', $mitgebrachte) . ')'; $abfuellungText = $neuerKarton ? "Befüllung zuerst in $gebText, verbleibender Rest in neue $neuerKarton." : "Alles in $gebText."; } elseif ($neuerKarton) { $abfuellungText = "Befüllung in neue $neuerKarton."; } else { $abfuellungText = "Keine spezielle Abfüllung ausgewählt."; } } // 3. Frischsaft $frischsaftText = (($_SESSION['frischsaft'] ?? 0) > 0) ? $_SESSION['frischsaft'] . " Liter (unpasteurisiert in bereitgestelltes Gefäß)" : "Kein Frischsaft gewünscht"; // 4. Anmerkungen $anmerkungen = !empty($_SESSION['anmerkungen']) ? $_SESSION['anmerkungen'] : 'Keine'; // E-Mail-Text zusammenbauen $message = "Hallo " . ($fname ?: $name) . ",\n\n"; $message .= "vielen Dank für Ihren Auftrag! Wir haben Ihre Angaben erfolgreich aufgenommen.\n\n"; $message .= "--- AUFTRAGSDATEN ---\n"; //$message .= "Auftrags-ID: " . $orderId . "\n"; $message .= "Name: " . $name . "\n"; $message .= "Telefon: " . ($_SESSION['phone'] ?? 'k. A.') . "\n"; $message .= "Benachrichtigung: " . $notificationText . "\n\n"; $message .= "Anlieferung / Container:\n" . $containerText . "\n"; $message .= "Abfüllung:\n " . $abfuellungText . "\n\n"; $message .= "Frischsaft:\n " . $frischsaftText . "\n\n"; $message .= "Ihre Anmerkungen:\n " . $anmerkungen . "\n"; $message .= "----------------------\n\n"; $message .= "Wir werden Ihren Auftrag innerhalb von 3 Tagen verarbeiten und Ihnen eine Nachricht senden.\n"; $message .= "Bitte stellen Sie eine zeitnahe Abholung nach unserer Fertigmeldung sicher.\n\n"; $message .= "Viele Grüße,\nIhr Team von der Mosterei Wurst\n\n"; $message .= "-- \n"; $message .= "Diese Nachricht wurde automatisch versendet. Sollten Sie Änderungen an Ihrem Auftrag wünschen,\nantworten Sie gerne auf diese Nachricht oder rufen Sie uns an: 07192-936434\n\n"; $message .= "Impressum: https://mosterei-wurst.de/impressum/"; // E-Mail senden und Flag in Session speichern, um Mehrfachversand zu verhindern if (sendMail($subject, $message, $to, $name)) { $_SESSION['mail_sent'] = true; } else { die(); } } /* if ($ret['status'] == 'error') { echo 'Es gibt ein Problem beim Speichern des Auftrags. Bitte verwenden Sie diesmal einen Papier-Auftrag.'; die(); } */ } header('Location: '.$redirect);