From d21bd7232da5f35b7836630d32d7c386f6f75881 Mon Sep 17 00:00:00 2001 From: fredtempez Date: Tue, 18 Jan 2022 16:55:48 +0100 Subject: [PATCH] Form 3.0 WIP --- module/form/form.php | 113 +++++++++++++----- module/form/view/config/config.js.php | 93 +++------------ module/form/view/config/config.php | 164 ++++++-------------------- module/form/view/index/index.php | 2 + module/form/view/layout/layout.css | 18 +++ module/form/view/layout/layout.js.php | 72 +++++++++++ module/form/view/layout/layout.php | 144 ++++++++++++++++++++++ 7 files changed, 372 insertions(+), 234 deletions(-) create mode 100644 module/form/view/layout/layout.css create mode 100644 module/form/view/layout/layout.js.php create mode 100644 module/form/view/layout/layout.php diff --git a/module/form/form.php b/module/form/form.php index 627ad4da..af1b181f 100644 --- a/module/form/form.php +++ b/module/form/form.php @@ -16,7 +16,7 @@ class form extends common { - const VERSION = '2.11'; + const VERSION = '3.0'; const REALNAME = 'Formulaire'; const DELETE = true; const UPDATE = '0.0'; @@ -24,6 +24,7 @@ class form extends common { public static $actions = [ 'config' => self::GROUP_MODERATOR, + 'layout' => self::GROUP_MODERATOR, 'data' => self::GROUP_MODERATOR, 'delete' => self::GROUP_MODERATOR, 'deleteall' => self::GROUP_MODERATOR, @@ -38,6 +39,9 @@ class form extends common { public static $pagination; + // Nombre d'articles dans la page de config: + public static $itemperPage = 20; + // Objets const TYPE_MAIL = 'mail'; @@ -75,38 +79,31 @@ class form extends common { '100' => '100%' ]; + public static $formOffset = [ + 'none' => 'Aucune', + '1' => 'Une colonne', + '2' => 'Deux colonnes', + '3' => 'Trois colonnes', + '4' => 'Quatre colonnes', + ]; + + public static $formWidth = [ + '6' => 'Six colonne', + '7' => 'Sept colonnes', + '8' => 'Huit colonnes', + '9' => 'Neuf colonnes', + '10' => 'Dix colonnes', + '11' => 'Onze colonnes', + '12' => 'Douze colonnes', + ]; + + /** * Configuration */ public function config() { - // Liste des utilisateurs - $userIdsFirstnames = helper::arrayCollumn($this->getData(['user']), 'firstname'); - ksort($userIdsFirstnames); - self::$listUsers [] = ''; - foreach($userIdsFirstnames as $userId => $userFirstname) { - self::$listUsers [] = $userId; - } // Soumission du formulaire if($this->isPost()) { - // Configuration - $this->setData([ - 'module', - $this->getUrl(0), - 'config', - [ - 'button' => $this->getInput('formConfigButton'), - 'captcha' => $this->getInput('formConfigCaptcha', helper::FILTER_BOOLEAN), - 'group' => $this->getInput('formConfigGroup', helper::FILTER_INT), - 'user' => self::$listUsers [$this->getInput('formConfigUser', helper::FILTER_INT)], - 'mail' => $this->getInput('formConfigMail') , - 'pageId' => $this->getInput('formConfigPageIdToggle', helper::FILTER_BOOLEAN) === true ? $this->getInput('formConfigPageId', helper::FILTER_ID) : '', - 'subject' => $this->getInput('formConfigSubject'), - 'replyto' => $this->getInput('formConfigMailReplyTo', helper::FILTER_BOOLEAN), - 'signature' => $this->getInput('formConfigSignature'), - 'logoUrl' => $this->getInput('formConfigLogo'), - 'logoWidth' => $this->getInput('formConfigLogoWidth') - ] - ]); // Génération des données vides if ($this->getData(['module', $this->getUrl(0), 'data']) === null) { $this->setData(['module', $this->getUrl(0), 'data', []]); @@ -148,6 +145,66 @@ class form extends common { ]); } + + public function layout() { + // Liste des utilisateurs + $userIdsFirstnames = helper::arrayCollumn($this->getData(['user']), 'firstname'); + ksort($userIdsFirstnames); + self::$listUsers [] = ''; + foreach ($userIdsFirstnames as $userId => $userFirstname) { + self::$listUsers [] = $userId; + } + // Soumission du formulaire + if ($this->isPost()) { + // Configuration + $this->setData([ + 'module', + $this->getUrl(0), + 'config', + [ + 'button' => $this->getInput('formLayoutButton'), + 'captcha' => $this->getInput('formLayoutCaptcha', helper::FILTER_BOOLEAN), + 'group' => $this->getInput('formLayoutGroup', helper::FILTER_INT), + 'user' => self::$listUsers [$this->getInput('formLayoutUser', helper::FILTER_INT)], + 'mail' => $this->getInput('formLayoutMail') , + 'pageId' => $this->getInput('formLayoutPageIdToggle', helper::FILTER_BOOLEAN) === true ? $this->getInput('formLayoutPageId', helper::FILTER_ID) : '', + 'subject' => $this->getInput('formLayoutSubject'), + 'replyto' => $this->getInput('formLayoutMailReplyTo', helper::FILTER_BOOLEAN), + 'signature' => $this->getInput('formLayoutSignature'), + 'logoUrl' => $this->getInput('formLayoutLogo'), + 'logoWidth' => $this->getInput('formLayoutLogoWidth') + ] + ]); + // Génération des données vides + if ($this->getData(['module', $this->getUrl(0), 'data']) === null) { + $this->setData(['module', $this->getUrl(0), 'data', []]); + } + // Valeurs en sortie + $this->addOutput([ + 'notification' => 'Modifications enregistrées', + 'redirect' => helper::baseUrl() . $this->getUrl(), + 'state' => true + ]); + } else { + // Liste des pages + foreach($this->getHierarchy(null, false) as $parentPageId => $childrenPageIds) { + self::$pages[$parentPageId] = $this->getData(['page', $parentPageId, 'title']); + foreach($childrenPageIds as $childKey) { + self::$pages[$childKey] = '    ' . $this->getData(['page', $childKey, 'title']); + } + } + // Valeurs en sortie + $this->addOutput([ + 'title' => 'Paramètres', + 'vendor' => [ + 'html-sortable', + 'flatpickr' + ], + 'view' => 'layout' + ]); + } + } + /** * Données enregistrées */ @@ -155,7 +212,7 @@ class form extends common { $data = $this->getData(['module', $this->getUrl(0), 'data']); if($data) { // Pagination - $pagination = helper::pagination($data, $this->getUrl(),self::ITEMSPAGE); + $pagination = helper::pagination($data, $this->getUrl(), self::$itemsperPages); // Liste des pages self::$pages = $pagination['pages']; // Inverse l'ordre du tableau diff --git a/module/form/view/config/config.js.php b/module/form/view/config/config.js.php index 1522ee3d..2d64a2aa 100644 --- a/module/form/view/config/config.js.php +++ b/module/form/view/config/config.js.php @@ -54,6 +54,15 @@ function add(inputUid, input) { position(); } +/** + * Afficher/cacher les options supplémentaires + */ + $(document).on("click", ".formConfigMoreToggle", function() { + + $(this).parents(".formConfigInput").find(".formConfigMore").slideToggle(); + $(this).parents(".formConfigInput").find(".formConfigMoreLabel").slideToggle(); +}); + /** * Calcul des positions */ @@ -76,14 +85,6 @@ if(inputs) { }); } -/** - * Afficher/cacher les options supplémentaires - */ -$(document).on("click", ".formConfigMoreToggle", function() { - - $(this).parents(".formConfigInput").find(".formConfigMore").slideToggle(); - $(this).parents(".formConfigInput").find(".formConfigMoreLabel").slideToggle(); -}); /** * Crée un nouveau champ à partir des champs cachés @@ -96,6 +97,12 @@ $("#formConfigAdd").on("click", function() { /** * Actions sur les champs */ + +// Validation auto après ajout d'un champ +$("a#formConfigAdd.button").click(function () { + $("#formConfigForm").submit(); +}); + // Tri entre les champs sortable("#formConfigInputs", { forcePlaceholderSize: true, @@ -143,73 +150,3 @@ $("#formConfigInputs") }); // Simule un changement de type au chargement de la page $(".formConfigType").trigger("change"); - -/** - * Affiche/cache les options de la case à cocher du mail - */ -$("#formConfigMailOptionsToggle").on("change", function() { - if($(this).is(":checked")) { - $("#formConfigMailOptions").slideDown(); - } - else { - $("#formConfigMailOptions").slideUp(function() { - $("#formConfigGroup").val(""); - $("#formConfigSubject").val(""); - $("#formConfigMail").val(""); - $("#formConfigUser").val(""); - }); - } -}).trigger("change"); - -/** - * Affiche/cache les options de la case à cocher de la redirection - */ -$("#formConfigPageIdToggle").on("change", function() { - if($(this).is(":checked")) { - $("#formConfigPageIdWrapper").slideDown(); - } - else { - $("#formConfigPageIdWrapper").slideUp(function() { - $("#formConfigPageId").val(""); - }); - } -}).trigger("change"); - -/** -* Paramètres par défaut au chargement -*/ -$( document ).ready(function() { - - /** - * Masquer ou afficher la sélection du logo - */ - if ($("#formConfigSignature").val() !== "text") { - $("#formConfigLogoWrapper").addClass("disabled"); - $("#formConfigLogoWrapper").slideDown(); - $("#formConfigLogoWidthWrapper").addClass("disabled"); - $("#formConfigLogoWidthWrapper").slideDown(); - } else { - $("#formConfigLogoWrapper").removeClass("disabled"); - $("#formConfigLogoWrapper").slideUp(); - $("#formConfigLogoWidthWrapper").removeClass("disabled"); - $("#formConfigLogoWidthWrapper").slideUp(); - } -}); - -/** - * Masquer ou afficher la sélection du logo - */ -var formConfigSignatureDOM = $("#formConfigSignature"); -formConfigSignatureDOM.on("change", function() { - if ($(this).val() !== "text") { - $("#formConfigLogoWrapper").addClass("disabled"); - $("#formConfigLogoWrapper").slideDown(); - $("#formConfigLogoWidthWrapper").addClass("disabled"); - $("#formConfigLogoWidthWrapper").slideDown(); - } else { - $("#formConfigLogoWrapper").removeClass("disabled"); - $("#formConfigLogoWrapper").slideUp(); - $("#formConfigLogoWidthWrapper").removeClass("disabled"); - $("#formConfigLogoWidthWrapper").slideUp(); - } -}); diff --git a/module/form/view/config/config.php b/module/form/view/config/config.php index 6631a20a..60cf1b6c 100644 --- a/module/form/view/config/config.php +++ b/module/form/view/config/config.php @@ -49,140 +49,48 @@ -
-
- 'buttonGrey', - 'href' => helper::baseUrl() . 'page/edit/' . $this->getUrl(0), - 'ico' => 'left', - 'value' => 'Retour' - ]); ?> -
-
- helper::baseUrl() . $this->getUrl(0) . '/data', - 'value' => 'Gérer les données' - ]); ?> -
-
+
+
+ 'buttonGrey', + 'href' => helper::baseUrl() . 'page/edit/' . $this->getUrl(0), + 'ico' => 'left', + 'value' => 'Retour' + ]); ?> +
+
+ helper::baseUrl() . $this->getUrl(0) . '/data', + 'value' => 'Données' + ]); ?> +
+
+ helper::baseUrl() . $this->getUrl(0) . '/layout', + 'value' => 'Paramètres', + 'ico' => 'cog-alt' + ]); ?> +
+
+
+
+

Liste des champs

+
+
+
-
-
-

Configuration

- 'Laissez vide afin de conserver le texte par défaut.', - 'label' => 'Texte du bouton de soumission', - 'value' => $this->getData(['module', $this->getUrl(0), 'config', 'button']) - ]); ?> - (bool) $this->getData(['module', $this->getUrl(0), 'config', 'group']) || - !empty($this->getData(['module', $this->getUrl(0), 'config', 'user'])) || - !empty($this->getData(['module', $this->getUrl(0), 'config', 'mail'])), - 'help' => 'Sélectionnez au moins un groupe, un utilisateur ou saississez un email. Votre serveur doit autoriser les envois de mail.' - ]); ?> -
-
-
- 'Laissez vide afin de conserver le texte par défaut.', - 'label' => 'Sujet du mail', - 'value' => $this->getData(['module', $this->getUrl(0), 'config', 'subject']) - ]); ?> -
-
- -
-
- 'Aux groupes à partir de', - 'selected' => $this->getData(['module', $this->getUrl(0), 'config', 'group']), - 'help' => 'Editeurs = éditeurs + administrateurs
Membres = membres + éditeurs + administrateurs' - ]); ?> -
-
- 'A un membre', - 'selected' => array_search($this->getData(['module', $this->getUrl(0), 'config', 'user']),$module::$listUsers) - ]); ?> -
-
- 'A une adresse email', - 'value' => $this->getData(['module', $this->getUrl(0), 'config', 'mail']), - 'help' => 'Un email ou une liste de diffusion' - ]); ?> -
-
-
-
- (bool) $this->getData(['module', $this->getUrl(0), 'config', 'replyto']), - 'help' => 'Cette option permet de réponse drectement à l\'expéditeur du message si celui-ci a indiqué un email valide.' - ]); ?> -
-
-
-
-
- 'Sélectionner le type de signature', - 'selected' => $this->getData(['module', $this->getUrl(0), 'config', 'signature']) - ]); ?> -
-
- 'Sélectionnez le logo du site', - 'label' => 'Logo', - 'value' => $this->getData(['module', $this->getUrl(0), 'config', 'logoUrl']) - ]); ?> -
-
- 'Sélectionner la largeur du logo', - 'selected' => $this->getData(['module', $this->getUrl(0), 'config', 'logoWidth']) - ]); ?> -
-
-
-
- (bool) $this->getData(['module', $this->getUrl(0), 'config', 'pageId']) - ]); ?> -
-
- 'displayNone', - 'label' => 'Sélectionner une page du site :', - 'selected' => $this->getData(['module', $this->getUrl(0), 'config', 'pageId']) - ]); ?> -
-
- $this->getData(['module', $this->getUrl(0), 'config', 'captcha']) - ]); ?> -
-
-

Liste des champs

-
- -
-
-
-
- template::ico('plus') - ]); ?> -
-
-
+
+ template::ico('plus'), + 'class' => 'buttonGreen' + ]); ?>
+
+
Version n° diff --git a/module/form/view/index/index.php b/module/form/view/index/index.php index 6eba5cc9..8d3b9a91 100644 --- a/module/form/view/index/index.php +++ b/module/form/view/index/index.php @@ -1,4 +1,5 @@ getData(['module', $this->getUrl(0), 'input'])): ?> +
getData(['module', $this->getUrl(0), 'input']) as $index => $input): ?> @@ -61,6 +62,7 @@ ]); ?>
+
diff --git a/module/form/view/layout/layout.css b/module/form/view/layout/layout.css new file mode 100644 index 00000000..52709ea6 --- /dev/null +++ b/module/form/view/layout/layout.css @@ -0,0 +1,18 @@ +/** + * This file is part of Zwii. + * + * For full copyright and license information, please see the LICENSE + * file that was distributed with this source code. + * + * @author Rémi Jean + * @copyright Copyright (C) 2008-2018, Rémi Jean + * @author Frédéric Tempez + * @copyright Copyright (C) 2018-2022, Frédéric Tempez + * @license GNU General Public License, version 3 + * @link http://zwiicms.fr/ + */ + + +/** NE PAS EFFACER +* admin.css +*/ \ No newline at end of file diff --git a/module/form/view/layout/layout.js.php b/module/form/view/layout/layout.js.php new file mode 100644 index 00000000..8970a0fe --- /dev/null +++ b/module/form/view/layout/layout.js.php @@ -0,0 +1,72 @@ + + + +/* +* Affiche/cache les options de la case à cocher du mail +*/ +$("#formLayoutMailOptionsToggle").on("change", function() { + if($(this).is(":checked")) { + $("#formLayoutMailOptions").slideDown(); + } + else { + $("#formLayoutMailOptions").slideUp(function() { + $("#formLayoutGroup").val(""); + $("#formLayoutSubject").val(""); + $("#formLayoutMail").val(""); + $("#formLayoutUser").val(""); + }); + } +}).trigger("change"); + +/** +* Affiche/cache les options de la case à cocher de la redirection +*/ +$("#formLayoutPageIdToggle").on("change", function() { + if($(this).is(":checked")) { + $("#formLayoutPageIdWrapper").slideDown(); + } + else { + $("#formLayoutPageIdWrapper").slideUp(function() { + $("#formLayoutPageId").val(""); + }); + } +}).trigger("change"); + +/** +* Paramètres par défaut au chargement +*/ +$( document ).ready(function() { + + /** + * Masquer ou afficher la sélection du logo + */ + if ($("#formLayoutSignature").val() !== "text") { + $("#formLayoutLogoWrapper").addClass("disabled"); + $("#formLayoutLogoWrapper").slideDown(); + $("#formLayoutLogoWidthWrapper").addClass("disabled"); + $("#formLayoutLogoWidthWrapper").slideDown(); + } else { + $("#formLayoutLogoWrapper").removeClass("disabled"); + $("#formLayoutLogoWrapper").slideUp(); + $("#formLayoutLogoWidthWrapper").removeClass("disabled"); + $("#formLayoutLogoWidthWrapper").slideUp(); + } +}); + +/** +* Masquer ou afficher la sélection du logo +*/ +var formLayoutSignatureDOM = $("#formLayoutSignature"); +formLayoutSignatureDOM.on("change", function() { + if ($(this).val() !== "text") { + $("#formLayoutLogoWrapper").addClass("disabled"); + $("#formLayoutLogoWrapper").slideDown(); + $("#formLayoutLogoWidthWrapper").addClass("disabled"); + $("#formLayoutLogoWidthWrapper").slideDown(); + } else { + $("#formLayoutLogoWrapper").removeClass("disabled"); + $("#formLayoutLogoWrapper").slideUp(); + $("#formLayoutLogoWidthWrapper").removeClass("disabled"); + $("#formLayoutLogoWidthWrapper").slideUp(); + } +}); \ No newline at end of file diff --git a/module/form/view/layout/layout.php b/module/form/view/layout/layout.php new file mode 100644 index 00000000..83e80079 --- /dev/null +++ b/module/form/view/layout/layout.php @@ -0,0 +1,144 @@ + +
+
+ 'buttonGrey', + 'href' => helper::baseUrl() . $this->getUrl(0) . '/config', + 'ico' => 'left', + 'value' => 'Retour' + ]); ?> +
+
+ +
+
+
+
+
+

Validation du formulaire

+
+
+ $this->getData(['module', $this->getUrl(0), 'config', 'captcha']) + ]); ?> +
+
+ 'Laissez vide afin de conserver le texte par défaut.', + 'label' => 'Etiquette du bouton de soumission', + 'value' => $this->getData(['module', $this->getUrl(0), 'config', 'button']) + ]); ?> +
+
+
+
+ (bool) $this->getData(['module', $this->getUrl(0), 'config', 'pageId']) + ]); ?> +
+
+ 'displayNone', + 'label' => 'Page du site :', + 'selected' => $this->getData(['module', $this->getUrl(0), 'config', 'pageId']) + ]); ?> +
+
+
+
+
+
+
+
+

Courriel

+ (bool) $this->getData(['module', $this->getUrl(0), 'config', 'group']) || + !empty($this->getData(['module', $this->getUrl(0), 'config', 'user'])) || + !empty($this->getData(['module', $this->getUrl(0), 'config', 'mail'])), + 'help' => 'Sélectionnez au moins un groupe, un utilisateur ou saisissez un email. Votre serveur doit autoriser les envois de mail.' + ]); ?> +
+
+
+ 'Laissez vide afin de conserver le texte par défaut.', + 'label' => 'Sujet du mail', + 'value' => $this->getData(['module', $this->getUrl(0), 'config', 'subject']) + ]); ?> +
+
+ +
+
+ 'Aux groupes à partir de', + 'selected' => $this->getData(['module', $this->getUrl(0), 'config', 'group']), + 'help' => 'Editeurs = éditeurs + administrateurs
Membres = membres + éditeurs + administrateurs' + ]); ?> +
+
+ 'A un membre', + 'selected' => array_search($this->getData(['module', $this->getUrl(0), 'config', 'user']),$module::$listUsers) + ]); ?> +
+
+ 'A une adresse email', + 'value' => $this->getData(['module', $this->getUrl(0), 'config', 'mail']), + 'help' => 'Un email ou une liste de diffusion' + ]); ?> +
+
+
+
+ 'Sélectionner le type de signature', + 'selected' => $this->getData(['module', $this->getUrl(0), 'config', 'signature']) + ]); ?> +
+
+ 'Sélectionnez le logo du site', + 'label' => 'Logo', + 'value' => $this->getData(['module', $this->getUrl(0), 'config', 'logoUrl']) + ]); ?> +
+
+ 'Sélectionner la largeur du logo', + 'selected' => $this->getData(['module', $this->getUrl(0), 'config', 'logoWidth']) + ]); ?> +
+
+
+
+ (bool) $this->getData(['module', $this->getUrl(0), 'config', 'replyto']), + 'help' => 'Cette option permet de réponse directement à l\'expéditeur du message si celui-ci a indiqué un email valide.' + ]); ?> +
+
+
+
+
+
+
+
+
+

Gabarit

+
+
+ +
+
+ +
+
+
+
+
+
\ No newline at end of file