git.schokokeks.org
Repositories
Help
Report an Issue
bibweb.git
Code
Commits
Branches
Tags
Suche
Strukturansicht:
4963b3d
Branches
Tags
master
bibweb.git
save.php
Auswahl, ob per E-Mail oder SMS benachrichtigt werden soll
Bernd Wurst
commited
4963b3d
at 2024-09-20 07:41:52
save.php
Blame
History
Raw
<?php require_once "lib/api.php"; require_once "lib/auftrag.php"; if (!file_exists("../data/".date("Y"))) { mkdir("../data/".date("Y")); } session_start(); if (isset($_SESSION['last_activity']) && $_SESSION['last_activity'] < time()-(20*60)) { // Session seit 20 Minuten nicht benutzt if (isset($_SESSION['kundennr']) || isset($_SESSION['orderid'])) { // Session hat Inhalt // Auftrag lokal speichern $filename = "../data/".date('Y').'/'.time().'-canceledsession.json'; if (isset($_SESSION['orderid'])) { $filename = "../data/".date('Y').'/'.time().'-canceledsession-'.$_SESSION['orderid'].'.json'; } @file_put_contents($filename, json_encode($_SESSION)); header('Location: clear.php'); die(); } } $_SESSION['last_activity'] = time(); $_SESSION['warnings'] = []; $_SESSION['angeliefert'] = true; $handle_length = 8; if (! isset($_SESSION['handle']) || !$_SESSION['handle']) { $random = base64_encode(md5(microtime())); $_SESSION['handle'] = substr(str_replace(array('+', '=', '/'), '', $random), 0, $handle_length); $_SESSION['date'] = date('Y-m-d H:i:s.v'); $_SESSION['complete'] = false; } function showError() { switch ($_REQUEST['form']) { case 'start': $redirect = 'index.php?error&num='.urlencode($number).'&name='.urlencode($name); break; case 'address': $redirect = 'address.php?error'; break; case 'anlieferung': $redirect = 'anlieferung.php?error'; break; case 'gitterbox': $redirect = 'gitterbox.php?error'; break; case 'obstart': $redirect = 'obstart.php?error'; break; case 'gebrauchte': $redirect = 'gebrauchte.php?error'; break; case 'auftrag': $redirect = 'auftrag.php?error'; break; case 'frischsaft': $redirect = 'frischsaft.php?error'; break; case 'summary': $redirect = 'summary.php?error'; break; } header('Location: '.$redirect); die(); } $redirect = NULL; if (isset($_REQUEST['form'])) { switch ($_REQUEST['form']) { case 'start': $number = ''; if (isset($_REQUEST['phone']) && trim($_REQUEST['phone']) != '') { $number = trim($_REQUEST['phone']); } $name = ''; if (isset($_REQUEST['name']) && trim($_REQUEST['name']) != '') { $name = trim($_REQUEST['name']); } if (substr($number, 0, 1) != 0 && substr($number, 0, 3) != '+49') { $number = '07192'.$number; } $number = format_number_national($number); if (! $number || !$name || !format_number_api($number)) { $redirect = 'index.php?error&num='.urlencode($number).'&name='.urlencode($name); break; } $_SESSION['name'] = htmlspecialchars($name); $_SESSION['phone'] = htmlspecialchars($number); if (isset($_REQUEST['save']) && $_REQUEST['save'] == 'yes' && $_SESSION['mode'] != 'local') { setcookie('NAME', $name, 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 (!isset($_SESSION['kundennr']) || !$_SESSION['kundennr']) { $_SESSION['kundennr'] = erstelle_kunde($_SESSION); if (!$_SESSION['kundennr']) { showError(); } } else { if (isset($_SESSION['email']) && $_SESSION['email']) { update_kunde($_SESSION['kundennr'], ['email' => $_SESSION['email']]); } } $redirect = 'notification.php'; break; case 'notification': if (isset($_REQUEST['notification'])) { if ($_REQUEST['notification'] == 'sms') { $_SESSION['notificationPreference'] = 'sms'; } elseif ($_REQUEST['notification'] == 'whatsapp') { $_SESSION['notificationPreference'] = 'whatsapp'; } elseif ($_REQUEST['notification'] == 'email') { $_SESSION['notificationPreference'] = 'email'; } else { $_SESSION['notificationPreference'] = ''; } } if ($_SESSION['mode'] == 'local') { $_SESSION['angeliefert'] = true; $redirect = 'gitterbox.php'; } elseif (isset($_SESSION['angeliefert'])) { if ($_SESSION['angeliefert']) { $redirect = 'gitterbox.php'; } else { $redirect = 'gitterbox_spaeter.php'; } } else { $redirect = 'anlieferung.php'; } break; case 'anlieferung': if (isset($_REQUEST['schonda'])) { $_SESSION['angeliefert'] = true; $redirect = 'gitterbox.php'; } if (isset($_REQUEST['kommtnoch'])) { $_SESSION['angeliefert'] = false; $redirect = 'gitterbox_spaeter.php'; } break; case 'gitterbox': if (isset($_REQUEST['lieferart'])) { if ($_REQUEST['lieferart'] == 'gitterbox') { $_SESSION['lieferart'] = 'gitterbox'; $_SESSION['gbcount'] = htmlspecialchars($_REQUEST['gbcount']); } if ($_REQUEST['lieferart'] == 'anhaenger') { $_SESSION['lieferart'] = 'anhaenger'; $_SESSION['kennz'] = htmlspecialchars($_REQUEST['kennz']); if ($_SESSION['angeliefert'] === false && ! $_SESSION['kennz']) { $redirect = 'gitterbox_spaeter.php?error'; break; } } } $redirect = 'obstart.php'; break; case 'obstart': $_SESSION['obstart'] = $_REQUEST['obstart']; $redirect = 'gebrauchte.php'; case 'gebrauchte': if (isset($_REQUEST['kartonsja'])) { $_SESSION['kartons'] = true; } if (isset($_REQUEST['kartonsnein'])) { $_SESSION['kartons'] = false; } $redirect = 'auftrag.php'; 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']); } $redirect = 'frischsaft.php'; break; case 'frischsaft': if (isset($_REQUEST['frischsaftnein'])) { $_SESSION['frischsaft'] = 0; } elseif (isset($_REQUEST['frischsaft'])) { $_SESSION['frischsaft'] = htmlspecialchars($_REQUEST['frischsaft']); } $redirect = 'summary.php'; 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['notificationName'] = $_SESSION['name']; $auftrag['notificationPhone'] = $_SESSION['phone']; $auftrag['notificationEmail'] = isset($_SESSION['email']) ? $_SESSION['email'] : null; $auftrag['notificationPreference'] = $_SESSION['notificationPreference']; } // fruitType $ret = api_call('GET', 'fruitTypes'); $ret = $ret['data']; foreach ($ret as $fruit) { if ($_SESSION['obstart'] == $fruit['label']) { $auftrag['fruitType'] = $fruit['id']; } } // containers if (isset($_SESSION['lieferart']) && $_SESSION['lieferart'] == 'gitterbox' && isset($_SESSION['gbcount']) && $_SESSION['gbcount'] > 0) { $auftrag['containers'] = array_fill(0, $_SESSION['gbcount'], [ "type" => "box", "weight" => 400 ]); } if (isset($_SESSION['lieferart']) && $_SESSION['lieferart'] == 'anhaenger') { if (!isset($_SESSION['kennz'])) { $_SESSION['kennz'] = null; } $auftrag['containers'] = [ ["type" => "trailer", "weight" => 0, "label" => $_SESSION['kennz']] ]; } // usedPackages if (isset($_SESSION['kartons'])) { $auftrag['usedPackages'] = (bool) $_SESSION['kartons']; } // plannedPackagings if (isset($_SESSION['neue'])) { if ($_SESSION['neue'] == 'sonstiges') { $auftrag['notes'] = (isset($_SESSION['anmerkungen']) ? $_SESSION['anmerkungen'] . "\n\n" : '') . $_SESSION["sonstiges"]; } $plan = []; $ret = api_call('GET', 'packageTypes'); $ret = $ret['data']; foreach ($ret as $pt) { if ($pt['label'] == $_SESSION['neue']) { $plan[] = [ "packageType" => $pt['id'], "rest" => true ]; } if ($pt['label'] == 'frischsaft' && isset($_SESSION['frischsaft']) && $_SESSION['frischsaft'] > 0) { $plan[] = [ "packageType" => $pt['id'], "count" => $_SESSION['frischsaft']]; } } $auftrag['plannedPackagings'] = $plan; } // notes if (!isset($auftrag['notes'])) { $auftrag['notes'] = ''; } if (isset($_SESSION['anmerkungen']) && $_SESSION['anmerkungen'] != '') { $auftrag['notes'] = $_SESSION['anmerkungen'] . (isset($_SESSION["sonstiges"]) ? "\n\n" . $_SESSION["sonstiges"] : ''); } $auftrag['notes'] .= "\nAuftrag wurde " . ($_SESSION['mode'] == 'local' ? 'am Terminal' : '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', 'orders/'.$_SESSION['orderid'], $auftrag); } else { // neu $ret = api_call('POST', 'orders', $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['id']; 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'; } @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);