$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); $_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']; $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)); /* if ($ret['status'] == 'error') { echo 'Es gibt ein Problem beim Speichern des Auftrags. Bitte verwenden Sie diesmal einen Papier-Auftrag.'; die(); } */ } header('Location: '.$redirect);