From 0ac364670ab5611c31c25657f540c85d59a9333d Mon Sep 17 00:00:00 2001 From: vince Date: Sun, 28 Nov 2021 22:10:45 +0100 Subject: [PATCH] =?UTF-8?q?impl=C3=A9mente=20une=20preuve=20de=20concept?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 + README.md | 15 +++++- index.php | 156 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 172 insertions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 index.php diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..dcf32a9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +data.php +config.php diff --git a/README.md b/README.md index 74790aa..f0bc877 100644 --- a/README.md +++ b/README.md @@ -19,4 +19,17 @@ bien utile) et le stockage de données directement dans les sources. Le contexte serait le tiers et l'événement concerné. Pour un contexte donné on peut s'inscrire et se désinscrire. Via la configuration on peut cadrer la -récurrence des événements ainsi que leschoix disponibles à l'inscription. +récurrence des événements ainsi que les choix disponibles à l'inscription. + +## test + +On peut tester en local avec le serveur PHP embarqué et la commande `php -S +localhost:8000 -t .` à la racine du projet puis en lançant un navigateur pour +visiter `localhost:8000`. + +## todo + +* gérer les erreur potentielles partout où c'est susceptible d'arriver et afficher de jolis messages explicites si ça se produit +* prévoir un accueil avec le liste des suppliers ? +* prévoir un export ics des événements (synchro caldendrier téléphone) selon le HTTP_ACCEPT +* prévoir une interface d'admin qui créérait le config.php à la volée avec protection par auth basic si on met un mot de passe diff --git a/index.php b/index.php new file mode 100644 index 0000000..147ba6f --- /dev/null +++ b/index.php @@ -0,0 +1,156 @@ + '%supplier% %event%', + 'description' => '', + 'choices' => [], + 'start' => 'now 00:00:00', + 'end' => '+1 year', + 'frequency' => '1 day', + + ], + $config[$supplier] +); + +$action = isset($_REQUEST['action']) ? $_REQUEST['action'] : null; + +$hasEvent = isset($_REQUEST['event']); +if (!$hasEvent) { + $now = new \DateTime('now'); + $current = new \DateTime($config[$supplier]['start']); + $frequency = \DateInterval::createFromDateString($config[$supplier]['frequency']); + $maxIterations = 1000; + while ( + ($current->getTimestamp() < $now->getTimestamp()) + and ($maxIterations-- > 0) + ) $current->add($frequency); + $nextEvent = $current->format('Y-m-d'); + header(sprintf('Location: %s?supplier=%s&event=%s', $requestUrl, $supplier, $nextEvent)); + die(); +} + +$event = $_REQUEST['event']; + +switch ($action) { +case 'insert' : +case 'delete' : + $isBeginning = (!file_exists(DATA_FILE) or in_array(filesize(DATA_FILE), [ false, 0 ])); + $output = fopen(DATA_FILE, 'a+'); + if (!$output) break; + if (!flock($output, LOCK_EX)) break; + if ($isBeginning) + fwrite($output, ' $prevItem) + if ($prevItem['hash'] === $item['hash']) + unset($items[$index]); + } +} + +while (preg_match('/%([^%]+)%/i', $config[$supplier]['title'], $match)) + $config[$supplier]['title'] = str_replace( + $match[0], + ${$match[1]}, + $config[$supplier]['title'] + ); + + +?> + + + + + <?php echo strip_tags($config[$supplier]['title']); ?> + + +

+ +

+ + + +