From: Raphaël Gertz <git@rapsys.eu> Date: Mon, 2 Nov 2020 00:13:18 +0000 (+0100) Subject: Split address in address, zipcode and city X-Git-Url: https://git.rapsys.eu/cdn/commitdiff_plain/d0d1c2aeeeeb5140259ffb4c7fd2c8891a8b2c9d Split address in address, zipcode and city Add autocomplete to the form Improve workplaces Improve datefixing Fix invalid date display format Fix invalid date in qrdata format Change empty section to div Add colors for invalid and valid input or select Add html5 doctype Add html lang Add autocomplete hints Add script to floor time to closest 5 minutes Add region and country to workplaces --- diff --git a/public/ausweis.php b/public/ausweis.php index 0eaeb91..3966d7f 100644 --- a/public/ausweis.php +++ b/public/ausweis.php @@ -30,6 +30,8 @@ if ( empty($_REQUEST['birthdate']) || empty($_REQUEST['birthplace']) || empty($_REQUEST['address']) || + empty($_REQUEST['zipcode']) || + empty($_REQUEST['city']) || empty($_REQUEST['function']) || empty($_REQUEST['location']) || empty($_REQUEST['date']) || @@ -65,7 +67,8 @@ if ( } } ?> -<html> +<!DOCTYPE html> +<html lang="fr"> <head> <title>Ausweis generator</title> <style> @@ -73,33 +76,50 @@ if ( color: red; font-weight: bold; } + div, section { margin: 1rem auto; text-align: center; } - div { + div div { display: flex; - width: 25rem; - margin: 0 auto; justify-content: space-between; + margin: 0 auto; + width: 25rem; } span { - font-style: italic; color: #ccc; + font-style: italic; } - select, - input { + input, + select { border: .1rem solid black; border-radius: .2rem; + box-sizing: border-box; width: 12rem; } - input.date { - width: 5rem; + input:invalid, + select:invalid { + border-color: #c33333; + background-color: #f9c3c3; + color: #c33333; + } + input:valid, + select:valid { + background-color: #c3f9c3; + border-color: #33c333; + color: #33c333; } - input.time { - width: 3rem; + input[type="date"] { + width: 9rem; + } + input[type="time"] { + width: 6rem; } input[type="submit"] { + background-color: #efefef; + border-color: black; + color: black; margin: 0 .5rem; } input[type="submit"]:first-child, @@ -112,11 +132,11 @@ if ( <section> <h1>Generateur d'attestation</h1> <p>Tous les champs sont obligatoires, format de date jj/mm/aaaa, format horaire hh:mm</p> - <form action="<?php echo htmlspecialchars($_SERVER['REQUEST_URI']); ?>" method="post"> - <section> + <form action="<?php echo htmlspecialchars($_SERVER['REQUEST_URI']); ?>" method="post" autocomplete="on"> + <div> <div> <label for="type">Type</label> - <select name="type"> + <select id="type" name="type" required="required"> <optgroup label="Professional"> <option value="bnp"<?php echo empty($selected)||$selected=='bnp'?' selected="selected"':''; ?>>Bnp</option> <option value="poltrone"<?php echo !empty($selected)&&$selected=='poltrone'?' selected="selected"':''; ?>>Poltrone</option> @@ -134,84 +154,118 @@ if ( </optgroup> </select> </div> - </section> - <section> + </div> + <div> <div> <label for="firstname">Prénom</label> - <input type="text" name="firstname" value="<?php echo htmlspecialchars($_REQUEST['firstname']??''); ?>" /> + <input type="text" id="firstname" name="firstname" value="<?php echo htmlspecialchars($_REQUEST['firstname']??''); ?>" autocomplete="given-name" required="required" /> </div> <div> <span>Jean</span> </div> - </section> - <section> + </div> + <div> <div> <label for="lastname">Nom</label> - <input type="text" name="lastname" value="<?php echo htmlspecialchars($_REQUEST['lastname']??''); ?>" /> + <input type="text" id="lastname" name="lastname" value="<?php echo htmlspecialchars($_REQUEST['lastname']??''); ?>" autocomplete="family-name" required="required" /> </div> <div> <span>Dupont</span> </div> - </section> - <section> + </div> + <div> <div> <label for="birthdate">Date de naissance</label> - <input class="date" type="text" name="birthdate" value="<?php echo htmlspecialchars($_REQUEST['birthdate']??''); ?>" /> + <input type="date" id="birthdate" name="birthdate" value="<?php echo htmlspecialchars($_REQUEST['birthdate']??''); ?>" autocomplete="bday" required="required" /> </div> <div> <span>01/01/1970</span> </div> - </section> - <section> + </div> + <div> <div> <label for="birthplace">Lieu de naissance</label> - <input type="text" name="birthplace" value="<?php echo htmlspecialchars($_REQUEST['birthplace']??''); ?>" /> + <input type="text" id="birthplace" name="birthplace" value="<?php echo htmlspecialchars($_REQUEST['birthplace']??''); ?>" required="required" /> </div> <div> <span>Lyon</span> </div> - </section> - <section> + </div> + <div> <div> <label for="address">Adresse</label> - <input type="text" name="address" value="<?php echo htmlspecialchars($_REQUEST['address']??''); ?>" /> + <input type="text" id="address" name="address" value="<?php echo htmlspecialchars($_REQUEST['address']??''); ?>" autocomplete="address-line1" required="required" /> + </div> + <div> + <span>10 rue Colbert</span> + </div> + </div> + <div> + <div> + <label for="zipcode">Code postal</label> + <input type="text" id="zipcode" name="zipcode" value="<?php echo htmlspecialchars($_REQUEST['zipcode']??''); ?>" autocomplete="postal-code" required="required" /> + </div> + <div> + <span>75002</span> </div> + </div> + <div> <div> - <span>30 rue des boulets 75011 Paris</span> + <label for="city">Ville</label> + <input type="text" id="city" name="city" value="<?php echo htmlspecialchars($_REQUEST['city']??''); ?>" autocomplete="address-level2" required="required" /> </div> - </section> - <section> + <div> + <span>Paris</span> + </div> + </div> + <div> <div> <label for="function">Fonction</label> - <input type="text" name="function" value="<?php echo htmlspecialchars($_REQUEST['function']??'Technicien(e) d\'astreint(e)'); ?>" /> + <input type="text" id="function" name="function" value="<?php echo htmlspecialchars($_REQUEST['function']??'Technicien(e) d\'astreint(e)'); ?>" autocomplete="organization-title" required="required" /> </div> <div> <span>Technicien(e) d'astreint(e)</span> </div> - </section> - <section> + </div> + <div> <div> <label for="location">Fait à </label> - <input type="text" name="location" value="<?php echo htmlspecialchars($_REQUEST['location']??'Paris'); ?>" /> + <input type="text" id="location" name="location" value="<?php echo htmlspecialchars($_REQUEST['location']??'Paris'); ?>" autocomplete="address-level2" required="required" /> </div> <div> <span>Paris</span> </div> - </section> - <section> + </div> + <div> <div> <label for="date">Sortie</label> - <input class="date" type="text" name="date" value="<?php echo htmlspecialchars($_REQUEST['date']??date('d/m/Y', $time)); ?>" /> + <input type="date" id="date" name="date" value="<?php echo htmlspecialchars($_REQUEST['date']??date('Y-m-d', $time)); ?>" required="required" /> <label for="time">a</label> - <input class="time" type="text" name="time" value="<?php echo htmlspecialchars($_REQUEST['time']??date('H:i', $time)); ?>" /> + <?php /*<datalist id="timelist"> + <?php for($h = 0; $h < 24; $h++): for($m = 0; $m < 55; $m += 5): ?> + <option value="<?php printf('%02d:%02d', $h, $m); ?>"<?php if ($_REQUEST['time']??date('H:i', $time) == sprintf('%02d:%02d', $h, $m)): ?> selected="selected"<?php endif; ?>> + <?php endfor; endfor ?> + </datalist> */ ?> + <input type="time" id="time" name="time" value="<?php echo htmlspecialchars($_REQUEST['time']??date('H:i', $time)); ?>" step="300"<?php # list="timelist" ?> required="required" /> </div> - </section> - <section> + </div> + <script> + document.getElementById("time").onchange = function () { + //Extract time array + var time = document.getElementById("time").value.split(':'); + //Floor time minutes to closest value + time[1] = (parseInt(time[1]/5)*5).toString().padStart(2, "0"); + //Set back value + document.getElementById("time").value = time.join(':'); + } + </script> + <div> <div> <input type="submit" value="Afficher" /> <input type="submit" name="download" value="Télécharger" /> <input type="submit" name="download" value="iBug" /> </div> + </div> </form> </section> </body> @@ -235,12 +289,14 @@ class Ausweis { static function fixDate($date) { $return = preg_replace( [ + '%^([0-9]{4})-([0-9]{2})-([0-9]{2})$%', '%^([0-9]{2})/([0-9]{2})/([0-9]{4})$%', '%^([0-9]{2})/([0-9]{2})/([0-9]{2})$%', '%^([0-9]{2})([0-9]{2})([0-9]{4})$%', '%^([0-9]{2})([0-9]{2})([0-9]{2})$%' ], [ + '\1-\2-\3', '\3-\2-\1', '20\3-\2-\1', '\3-\2-\1', @@ -553,7 +609,7 @@ class Ausweis { $birthdate = self::fixDate($birthdate); //Add birth - $p->Cell(63, 8, utf8_decode($birthdate), 0, 0, 'L'); + $p->Cell(63, 8, utf8_decode(date('d/m/Y', strtotime($birthdate))), 0, 0, 'L'); $p->Cell(0, 8, utf8_decode($birthplace), 0, 0, 'L'); //Set y @@ -581,7 +637,7 @@ class Ausweis { $time = self::fixTime($time); //Add date - $p->Cell(58, 4, utf8_decode($date), 0, 0, 'L'); + $p->Cell(58, 4, utf8_decode(date('d/m/Y', strtotime($date))), 0, 0, 'L'); $p->Cell(0, 4, utf8_decode($time), 0, 0, 'L'); //Set xy @@ -598,7 +654,7 @@ class Ausweis { //Set qrdata $qrData = [ - 'Cree le: '.date('d/m/Y \a H:i', strtotime('-'.$delay.' minutes', strtotime($date.' '.$time))), + 'Cree le: '.date('d/m/Y \a H\hi', strtotime('-'.$delay.' minutes', strtotime($date.' '.$time))), 'Nom: '.$lastname, 'Prenom: '.$firstname, 'Naissance: '.date('d/m/Y', strtotime($birthdate)).' a '.$birthplace, @@ -1029,8 +1085,8 @@ if ($_REQUEST['type'] == 'bnp') { 66204244920897 => '109 rue de Tolbiac 75013 Paris', 66204244941265 => '160 boulevard Macdonald 75019 Paris', 66204244925110 => '4 place Saint Fargeau 75020 Paris', - 00000000000000 => 'Ãle-de-France', - 99999999999999 => 'France', + 00000000000000 => 'Toute l\'Ãle-de-France', + 99999999999999 => 'Toute la France' ]; //Set pictures @@ -1066,7 +1122,9 @@ if ($_REQUEST['type'] == 'bnp') { 42203690500434 => 'Route Nationale 10 78210 Coignières', 42203690500186 => 'Avenue Henri Barbusse 78340 Les Clayes-sous-Bois', 42203690500152 => 'La Saussaie Beauclair 93110 Rosny-sous-Bois', - 42203690500095 => '234 Boulevard du Havre 95220 Pierrelaye' + 42203690500095 => '234 Boulevard du Havre 95220 Pierrelaye', + 00000000000000 => 'Toute l\'Ãle-de-France', + 99999999999999 => 'Toute la France' ]; //Set pictures @@ -1165,7 +1223,7 @@ Ausweis::addAttestation( $_REQUEST['lastname'], $_REQUEST['birthdate'], $_REQUEST['birthplace'], - $_REQUEST['address'], + $_REQUEST['address'].' '.$_REQUEST['zipcode'].' '.$_REQUEST['city'], $_REQUEST['location'], $_REQUEST['date'], $_REQUEST['time'] @@ -1193,7 +1251,7 @@ if (!empty($data['employer'])) { $_REQUEST['lastname'], $_REQUEST['birthdate'], $_REQUEST['birthplace'], - $_REQUEST['address'], + $_REQUEST['address'].' '.$_REQUEST['zipcode'].' '.$_REQUEST['city'], $_REQUEST['function'] ); } @@ -1209,7 +1267,7 @@ if ($data['reason'] == 'sport_animaux' || $data['reason'] == 'achats') { $p, $_REQUEST['firstname'], $_REQUEST['lastname'], - $_REQUEST['address'], + $_REQUEST['address'].' '.$_REQUEST['zipcode'].' '.$_REQUEST['city'], 'M.', 'Jean', 'Larivière',