diff --git a/lang/saisies_fr.php b/lang/saisies_fr.php index 024d8661..a31bbf34 100644 --- a/lang/saisies_fr.php +++ b/lang/saisies_fr.php @@ -122,6 +122,12 @@ Vous trouverez la La clé doit être unique, brève, claire et ne doit plus être modifiée par la suite.
', 'option_datas_label' => 'Liste des choix possibles', 'option_datas_sous_groupe_explication' => 'Vous devez indiquez un choix par ligne sous la forme "cle|Label" du choix.
La clé doit être unique, brève, claire et ne doit plus être modifiée par la suite.
Vous pouvez indiquer le début d’un sous-groupe sous la forme "*Titre du sous-groupe". Pour finir un sous-groupe vous pouvez en entamez un autre, ou bien mettre une ligne contenant uniquement "/*".', + 'option_date_modifier_limites_label' => 'Modifier la portée des dates proposées', + 'option_date_min_label' => 'Date minimale', + 'option_date_max_label' => 'Date maximale', + 'option_date_intervalle_bas_label' => 'Limiter à x jours dans le passé', + 'option_date_intervalle_haut_label' => 'Limiter à x jours dans le futur', + 'option_date_limiter_label' => 'Limiter la portée des dates proposées', 'option_defaut_label' => 'Valeur par défaut', 'option_disable_avec_post_explication' => 'Identique à l’option précédente mais poste quand même la valeur dans un champ caché.', 'option_disable_avec_post_label' => 'Désactiver mais poster', diff --git a/saisies/date.html b/saisies/date.html index f190a03e..a4acbc64 100644 --- a/saisies/date.html +++ b/saisies/date.html @@ -54,6 +54,8 @@ ] ] +[(#REM)] +#SET{attributs,#ENV*|unserialize|saisies_date_generer_attributs_limitation} #SET{describedby, #ENV{describedby}|concat{' ',format_date_#ENV{nom}|saisie_nom2name} } @@ -63,6 +65,7 @@ describedby=#GET{describedby}, valeur=#GET{date}, type=text, + attributs=#GET{attributs}, class=[(#ENV{class}) ]date})] [(#ENV{horaire}|oui) [(#INCLURE{fond=saisies/input, diff --git a/saisies/date.yaml b/saisies/date.yaml index 79ff88b8..f6528242 100644 --- a/saisies/date.yaml +++ b/saisies/date.yaml @@ -26,6 +26,48 @@ options: label: '<:saisies:option_label_label:>' explication: '<:saisies:option_label_explication:>' size: 50 + - + saisie: 'case' + options: + nom: 'modifier_limites' + label_case: '<:saisies:option_date_modifier_limites_label:>' + conteneur_class: 'pleine_largeur' + - + saisie: 'input' + options: + nom: 'intervalle_bas' + label: '<:saisies:option_date_intervalle_bas_label:>' + afficher_si: '@modifier_limites@' + verifier: + type: 'entier' + options: + min: '0' + - + saisie: 'input' + options: + nom: 'intervalle_haut' + label: '<:saisies:option_date_intervalle_haut_label:>' + afficher_si: '@modifier_limites@' + verifier: + type: 'entier' + options: + min: '0' + - + saisie: 'date' + options: + nom: 'date_min' + label: '<:saisies:option_date_min_label:>' + afficher_si: '@modifier_limites@' + verifier: + type: 'date' + - + saisie: 'date' + options: + nom: 'date_max' + label: '<:saisies:option_date_max_label:>' + afficher_si: '@modifier_limites@' + verifier: + type: 'date' - saisie: 'input' options: diff --git a/saisies/date_fonctions.php b/saisies/date_fonctions.php new file mode 100644 index 00000000..2a7f527a --- /dev/null +++ b/saisies/date_fonctions.php @@ -0,0 +1,72 @@ +format('d/m/Y').'\''; + } + if (isset($bornes['date_max'])) { + $attributs .= ' data-enddate=\''.$bornes['date_max']->format('d/m/Y').'\''; + } + return $attributs; +} + +/** + * Trouver les bornes d'après les options + * @param array $env les options de la saisie + * @return array ['date_max' => DateTime, 'date_min' => DateTime] +**/ +function saisies_date_trouver_bornes($env) { + $bornes = []; + // Date minimal + if (isset($env['intervalle_bas']) and $env['intervalle_bas'] !== '') { + $intervalle_bas = -valeur_numerique($env['intervalle_bas']); + $date_min_via_intervalle = new DateTime(); + $date_min_via_intervalle->modify("$intervalle_bas day"); + } + if (isset($env['date_min']) and $env['date_min'] !== '') { + $date_min = new DateTime($env['date_min']); + }; + + if (isset($date_min_via_intervalle) and isset ($date_min)) { + $date_min = max($date_min, $date_min_via_intervalle); + } elseif (isset($date_min_via_intervalle)) { + $date_min = $date_min_via_intervalle; + } + + if (isset($date_min)) { + $bornes['date_min'] = $date_min; + } + + // Date max + if (isset($env['intervalle_haut']) and $env['intervalle_haut'] !== '') { + $intervalle_haut = valeur_numerique($env['intervalle_haut']); + $date_max_via_intervalle = new DateTime(); + $date_max_via_intervalle->modify("$intervalle_haut day"); + } + if (isset($env['date_max']) and $env['date_max'] !== '') { + $date_max = new DateTime($env['date_max']); + }; + if (isset($date_max_via_intervalle) and isset ($date_max)) { + $date_max = min($date_max, $date_max_via_intervalle); + } elseif (isset($date_max_via_intervalle)) { + $date_max = $date_max_via_intervalle; + } + + if (isset($date_max)) { + $bornes['date_max'] = $date_max; + } + return $bornes; +}