Browse code

API-Authtoken, Idle-Warnung, Abstraktion

Bernd Wurst authored on07/06/2020 07:15:34
Showing12 changed files
... ...
@@ -1 +1,2 @@
1 1
 vendor
2
+config.php
... ...
@@ -1,4 +1,6 @@
1 1
 <?php
2
+require_once "lib/api.php";
3
+require_once "lib/auftrag.php";
2 4
 session_start();
3 5
 
4 6
 if (!isset($_SESSION['phone']) || (!isset($_SESSION['name']) && !isset($_SESSION['firma']) && !isset($_SESSION['lname']))) {
... ...
@@ -6,55 +8,6 @@ if (!isset($_SESSION['phone']) || (!isset($_SESSION['name']) && !isset($_SESSION
6 8
     die();
7 9
 }
8 10
 
9
-function suche_kunde($name, $number) {
10
-        global $content;
11
-        if (! $number) {
12
-            return NULL;
13
-        }
14
-       $data = array("name" => $name, "telefon" => $number);
15
-
16
-        $curl = curl_init();
17
-
18
-        curl_setopt_array($curl, array(
19
-          CURLOPT_URL => "https://api.mosterei-wurst.de/api/v1/kunde/pruefen",
20
-          CURLOPT_RETURNTRANSFER => true,
21
-          CURLOPT_ENCODING => "",
22
-          CURLOPT_MAXREDIRS => 10,
23
-          CURLOPT_TIMEOUT => 30,
24
-          CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
25
-          CURLOPT_HTTPHEADER => array("Content-Type: application/json"),
26
-          CURLOPT_CUSTOMREQUEST => "POST"));
27
-
28
-        curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
29
-
30
-        $response = curl_exec($curl);
31
-        $err = curl_error($curl);
32
-        
33
-        $ret = @json_decode($response, true);
34
-        if (!$ret || $ret["status"] == 'error' || !$ret["kundennr"]) {
35
-            if (isset($ret["errno"]) && $ret["errno"] == "429") {
36
-                $content .= '<div class="card text-white bg-danger mb-3">
37
-                <div class="card-header">Fehler</div>
38
-                <div class="card-body">Die Suche anhand der Telefonnummer wurde verweigert, weil zu viele Zugriffe auf diese Funktion vorgenommen wurden. Bitte geben Sie Ihre Daten neu ein oder versuchen Sie es in wenigen Minuten noch einmal.</div>
39
-                </div>';
40
-            }
41
-            return null;
42
-        }
43
-        
44
-         return $ret;
45
-
46
-        /*
47
-        $kundenliste = json_decode(file_get_contents('../kunden.json'), TRUE);
48
-        foreach ($kundenliste as $k) {
49
-                foreach ($k['kontakt'] as $kon) {
50
-                        if ($kon['wert'] == $number) {
51
-                                return $k;
52
-                        }
53
-                }
54
-        }
55
-        */
56
-}
57
-
58 11
 
59 12
 $content = '';
60 13
 $kunde = null;
... ...
@@ -64,6 +17,9 @@ if (isset($_SESSION['name'])) {
64 17
 if ($kunde) {
65 18
     $fields = array("kundennr" => "kundennr", "firma" => "firma", "fname" => "vorname", "lname" => "nachname", "address" => "adresse", "zip" => "plz", "city" => "ort");
66 19
     foreach ($fields as $sesskey => $arrkey) {
20
+        if (isset($_SESSION[$sesskey]) && $_SESSION[$sesskey] != '' && $_SESSION[$sesskey] != 'bekannt') {
21
+            $kunde[$arrkey] = $_SESSION[$sesskey];
22
+        }
67 23
         if (isset($kunde[$arrkey])) {
68 24
             $_SESSION[$sesskey] = $kunde[$arrkey];
69 25
         }
... ...
@@ -4,6 +4,11 @@ if (isset($_SESSION['mode']) && $_SESSION['mode'] == 'local') {
4 4
     header("Location: gitterbox.php");
5 5
     die();
6 6
 }
7
+// hardcoded, Vorabanmeldung ist momentan nicht vorgesehen
8
+header("Location: gitterbox.php");
9
+die();
10
+
11
+
7 12
 
8 13
 $headline = 'Anlieferung';
9 14
 $content = '';
... ...
@@ -1,9 +1,24 @@
1
+var idleTimeout = 2*60*1000; // 2 minuten
2
+
1 3
 $( function () {
2 4
     $('#allesloeschen-dialog').on('show.bs.modal', function(e) {
3 5
             $(this).find('.btn-ok').attr('href', $(e.relatedTarget).prop('href'));
4 6
         });
5 7
 });
8
+
9
+function idleAlert() {
10
+    $('#idle-dialog').modal({ show: true});
11
+    // Der Dialog wird nur angezeigt. Automatischer Reset passiert dann über den Kiosk-Browser
12
+}
13
+
6 14
 $(document).ready( function () {
7 15
     $('body').fadeIn(200);
8 16
     document.body.scrollIntoView();
17
+    if ($('input[name=form]').val() != 'start') {
18
+        // Wenn nicht auf der Startseite, dann nach der Wartezeit fragen wie man weiter machen möchte.
19
+        setTimeout(idleAlert, idleTimeout); 
20
+    }
21
+    $('#dismiss-idle').click( function() {
22
+        setTimeout(idleAlert, idleTimeout);
23
+    });
9 24
 });
... ...
@@ -31,7 +31,7 @@ $content = '<p>Der Verarbeitungscode lautet: '.$_REQUEST['handle'].'</p>
31 31
 if (substr($number, 0, 5) == '+49 1') {
32 32
     $content .= '<p>Wenn Sie möchten, können Sie den Link auch per SMS erhalten.</p>
33 33
     <div class="form-group form-group-lg">
34
-        <div><a class="btn btn-outline-secondary btn-lg" href="smsauftrag.php">Diesen Link per SMS erhalten</a></div>
34
+        <div><a class="btn btn-outline-secondary btn-lg" href="smsauftrag.php?handle='.$_REQUEST['handle'].'">Diesen Link per SMS erhalten</a></div>
35 35
     </div>
36 36
 ';
37 37
 }
... ...
@@ -13,6 +13,8 @@ if (isset($_REQUEST['type'])) {
13 13
         $_SESSION['angeliefert'] = true;
14 14
     }
15 15
 }
16
+// hardcoded, voranmeldung ist im Moment nicht unterstützt
17
+$_SESSION['angeliefert'] = true;
16 18
 $content = '';
17 19
 $number = '';
18 20
 $name = '';
19 21
new file mode 100644
... ...
@@ -0,0 +1 @@
1
+Require all denied
0 2
new file mode 100644
... ...
@@ -0,0 +1,36 @@
1
+<?php
2
+
3
+require_once dirname(__DIR__).'/config.php';
4
+
5
+$curl = curl_init();
6
+
7
+curl_setopt_array($curl, array(
8
+      CURLOPT_RETURNTRANSFER => true,
9
+      CURLOPT_ENCODING => "",
10
+      CURLOPT_MAXREDIRS => 10,
11
+      CURLOPT_TIMEOUT => 30,
12
+      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
13
+      CURLOPT_HTTPHEADER => array("Content-Type: application/json"),
14
+      CURLOPT_CUSTOMREQUEST => "POST"));
15
+
16
+
17
+function api_call($path, $data)
18
+{
19
+    global $curl;
20
+    global $config;
21
+
22
+    $data['authtoken'] = $config['api_token'];
23
+    curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
24
+    curl_setopt($curl, CURLOPT_URL, $config['api_url'].$path);
25
+
26
+    $response = curl_exec($curl);
27
+    $err = curl_error($curl);
28
+
29
+    $ret = @json_decode($response, true);
30
+    if (!isset($ret['status']) || $ret['status'] == 'error') {
31
+        echo $response;
32
+    }
33
+    return $ret;
34
+}
35
+
36
+
0 37
new file mode 100644
... ...
@@ -0,0 +1,65 @@
1
+<?php
2
+
3
+
4
+function suche_kunde($name, $number) {
5
+        global $content;
6
+        if (! $number) {
7
+            return NULL;
8
+        }
9
+        $data = array("name" => $name, "telefon" => $number);
10
+
11
+        $ret = api_call('kunde/pruefen', $data);
12
+
13
+        if (!$ret || $ret["status"] == 'error' || !$ret["kundennr"]) {
14
+            if (isset($ret["errno"]) && $ret["errno"] == "429") {
15
+                $content .= '<div class="card text-white bg-danger mb-3">
16
+                <div class="card-header">Fehler</div>
17
+                <div class="card-body">Die Suche anhand der Telefonnummer wurde verweigert, weil zu viele Zugriffe auf diese Funktion vorgenommen wurden. Bitte geben Sie Ihre Daten neu ein oder versuchen Sie es in wenigen Minuten noch einmal.</div>
18
+                </div>';
19
+            }
20
+            return null;
21
+        }
22
+        
23
+         return $ret;
24
+
25
+        /*
26
+        $kundenliste = json_decode(file_get_contents('../kunden.json'), TRUE);
27
+        foreach ($kundenliste as $k) {
28
+                foreach ($k['kontakt'] as $kon) {
29
+                        if ($kon['wert'] == $number) {
30
+                                return $k;
31
+                        }
32
+                }
33
+        }
34
+        */
35
+}
36
+
37
+
38
+require_once('vendor/autoload.php');
39
+
40
+function format_number_national($number) {
41
+    $phoneNumberUtil = \libphonenumber\PhoneNumberUtil::getInstance();
42
+    try {
43
+        $phoneNumber = $phoneNumberUtil->parse($number, 'DE');
44
+    } catch (Exception $e) {
45
+        return NULL;
46
+    }
47
+    if ($phoneNumberUtil->isValidNumber($phoneNumber)) {
48
+        return $phoneNumberUtil->format($phoneNumber, \libphonenumber\PhoneNumberFormat::NATIONAL);
49
+    }
50
+    return NULL;
51
+}
52
+
53
+function format_number($number) {
54
+    $phoneNumberUtil = \libphonenumber\PhoneNumberUtil::getInstance();
55
+    try {
56
+        $phoneNumber = $phoneNumberUtil->parse($number, 'DE');
57
+    } catch (Exception $e) {
58
+        return NULL;
59
+    }
60
+    if ($phoneNumberUtil->isValidNumber($phoneNumber)) {
61
+        return $phoneNumberUtil->format($phoneNumber, \libphonenumber\PhoneNumberFormat::INTERNATIONAL);
62
+    }
63
+    return NULL;
64
+}
65
+
... ...
@@ -1,9 +1,12 @@
1 1
 <?php
2
+require_once "lib/api.php";
3
+require_once "lib/auftrag.php";
2 4
 session_start();
3 5
 
6
+$handle_length = 8;
4 7
 if (! isset($_SESSION['handle']) || !$_SESSION['handle']) {
5 8
     $random = base64_encode(md5(microtime()));
6
-    $_SESSION['handle'] = substr(str_replace(array('+', '=', '/'), '', $random), 0, 5);
9
+    $_SESSION['handle'] = substr(str_replace(array('+', '=', '/'), '', $random), 0, $handle_length);
7 10
     $_SESSION['date'] = date('Y-m-d H:i:s.v');
8 11
     $_SESSION['complete'] = false;
9 12
 }
... ...
@@ -31,21 +34,7 @@ if (isset($_REQUEST['form'])) {
31 34
                 $number = '07192'.$number;
32 35
             }
33 36
 
34
-            require_once('vendor/autoload.php');
35
-
36
-            function format_number($number) {
37
-                $phoneNumberUtil = \libphonenumber\PhoneNumberUtil::getInstance();
38
-                try {
39
-                    $phoneNumber = $phoneNumberUtil->parse($number, 'DE');
40
-                } catch (Exception $e) {
41
-                    return NULL;
42
-                }
43
-                if ($phoneNumberUtil->isValidNumber($phoneNumber)) {
44
-                    return $phoneNumberUtil->format($phoneNumber, \libphonenumber\PhoneNumberFormat::NATIONAL);
45
-                }
46
-                return NULL;
47
-            }
48
-            $number = format_number($number);
37
+           $number = format_number_national($number);
49 38
 
50 39
             $_SESSION['name'] = htmlspecialchars($name);
51 40
             $_SESSION['phone'] = htmlspecialchars($number);
... ...
@@ -163,24 +152,7 @@ if (isset($_REQUEST['form'])) {
163 152
 
164 153
 $data = array("handle" => $_SESSION['handle']);
165 154
 
166
-$curl = curl_init();
167
-
168
-curl_setopt_array($curl, array(
169
-  CURLOPT_URL => "https://api.mosterei-wurst.de/api/v1/auftrag/lesen",
170
-  CURLOPT_RETURNTRANSFER => true,
171
-  CURLOPT_ENCODING => "",
172
-  CURLOPT_MAXREDIRS => 10,
173
-  CURLOPT_TIMEOUT => 30,
174
-  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
175
-  CURLOPT_HTTPHEADER => array("Content-Type: application/json"),
176
-  CURLOPT_CUSTOMREQUEST => "POST"));
177
-
178
-curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
179
-
180
-$response = curl_exec($curl);
181
-$err = curl_error($curl);
182
-
183
-$ret = @json_decode($response, true);
155
+$ret = api_call('auftrag/lesen', $data);
184 156
 
185 157
 if (!isset($ret['auftrag'])) {
186 158
     echo 'Es gibt ein Problem beim Speichern der Auftragsdaten. Bitte wenden Sie sich persönlich an uns oder verwenden Sie einen Papierauftrag.';
... ...
@@ -200,6 +172,7 @@ foreach ($addrfields as $sesskey => $apikey) {
200 172
         $auftrag['kundendaten'][$apikey] = $_SESSION[$sesskey];
201 173
     }
202 174
 }
175
+$auftrag['kundendate']['telefon'] = format_number($auftrag['kundendate']['telefon']);
203 176
 
204 177
 if (count($auftrag['bestellung']) > 1) {
205 178
     echo 'Diese Bestellung wurde auf anderem Wege an uns übermittelt und kann mit dieser Oberfläche leider nicht verändert werden';
... ...
@@ -254,13 +227,7 @@ if (isset($_SESSION['complete']) && $_SESSION['complete'] == true) {
254 227
     $auftrag['status'] = 'bestellt';
255 228
 }
256 229
 
257
-curl_setopt($curl, CURLOPT_URL, "https://api.mosterei-wurst.de/api/v1/auftrag/anlieferung");
258
-curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($auftrag));
259
-
260
-$response = curl_exec($curl);
261
-$err = curl_error($curl);
262
-
263
-$ret = @json_decode($response, true);
230
+$ret = api_call('auftrag/anlieferung', $auftrag);
264 231
 
265 232
 if ($ret['status'] == 'error') {
266 233
     echo 'Es gibt ein Problem beim Speichern des Auftrags. Bitte verwenden Sie diesmal einen Papier-Auftrag.';
... ...
@@ -80,7 +80,7 @@ $adresse = $_SESSION['fname'].' '.$_SESSION['lname'];
80 80
 if ($_SESSION['fname'] == 'bekannt') {
81 81
     $adresse = $_SESSION['lname'];
82 82
 }
83
-if ($_SESSION['address'] == 'bekannt' || $_SESSION['city'] == 'bekannt') {
83
+if ($_SESSION['address'] == 'bekannt' && $_SESSION['city'] == 'bekannt') {
84 84
     $adresse .= '<br><i>Adresse wie beim letzten Besuch</i>';
85 85
 } else {
86 86
     $adresse .= '<br>'.$_SESSION['address'].'<br>'.$_SESSION['zip'].' '.$_SESSION['city'];
... ...
@@ -89,6 +89,24 @@ if ($previous > 0) {
89 89
 <?php } /* if (basename($_SERVER['PHP_SELF']) != 'finish.php') */ ?>
90 90
 
91 91
     </div>
92
+    <div class="modal fade" id="idle-dialog" tabindex="-1" role="dialog" aria-labelledby="Bestaetigung" aria-hidden="true">
93
+        <div class="modal-dialog">
94
+            <div class="modal-content">
95
+                <div class="modal-header">
96
+                    <h4 class="modal-title">Weitermachen?</h4>
97
+                </div>
98
+
99
+                <div class="modal-body">
100
+                    <p>An diesem Gerät wurde lange nichts eingegeben. Möchten Sie am laufenden Auftrag weiter machen oder neu beginnen?</p>
101
+                </div>
92 102
 
103
+                <div class="modal-footer">
104
+                    <button type="button" class="btn btn-primary" data-dismiss="modal" id="dismiss-idle">Weiter machen!</button>
105
+                    <a class="btn btn-danger btn-ok" href="clear.php<?= (isset($_SESSION['mode']) ? '?mode='.$_SESSION['mode'] : '') ?>">Neu beginnen</a>
106
+                </div>
107
+            </div>
108
+        </div>
109
+    </div>
110
+ 
93 111
  </body>
94 112
 </html>