Browse Source

fix #137

- l'option disable_choix est normalisée via
`saisies_normaliser_disable_choix` qui prend tableau ou chaine et renvoi
un tableau, avec les choix trimés
- on utilise la convention d'une entrée `explication_dev` pour la doc (cf. #157)
pull/178/head
Maïeul 7 months ago
parent
commit
5543edc815
  1. 21
      formulaires/saisies_cvt.php
  2. 21
      inc/saisies_data.php
  3. 3
      lang/saisies_fr.php
  4. 5
      saisies/checkbox.html
  5. 1
      saisies/checkbox.yaml
  6. 5
      saisies/radio.html
  7. 1
      saisies/radio.yaml
  8. 1
      saisies/selection.html
  9. 3
      saisies/selection.php
  10. 1
      saisies/selection.yaml
  11. 2
      saisies/selection_multiple.html
  12. 3
      saisies/selection_multiple.php
  13. 1
      saisies/selection_multiple.yaml

21
formulaires/saisies_cvt.php

@ -7,7 +7,7 @@ if (!defined('_ECRIRE_INC_VERSION')) {
function formulaires_saisies_cvt_saisies_dist() {
include_spip('inc/saisies');
$saisies = array(
'options' => array(
'texte_submit' => 'Pouet !',
@ -57,6 +57,19 @@ function formulaires_saisies_cvt_saisies_dist() {
'label_case' => 'Un champ à l’extérieur des groupes'
),
),
array(
'saisie' => 'radio',
'options' => array(
'nom' => 'radio avec disable',
'data' => array(
'a' => 'a',
'b' => 'b',
'c' => 'c',
'd' => 'd'
),
'disable_choix' => array('b', 'c')
)
),
array(
'saisie' => 'fieldset',
'options' => array(
@ -87,13 +100,13 @@ function formulaires_saisies_cvt_saisies_dist() {
),
),
);
$chemin = saisies_chercher($saisies, 'a_supprimer', true);
$saisies = saisies_supprimer($saisies, $chemin);
$saisies = saisies_dupliquer($saisies, 'message');
$saisies = saisies_deplacer($saisies, 'tableau[cle][email]', 'tableau[cle][nom]');
//var_dump($saisies);
return $saisies;
}
@ -101,6 +114,6 @@ function formulaires_saisies_cvt_charger() {
$contexte = array(
'saisies_texte_submit' => 'Prout !',
);
return $contexte;
}

21
inc/saisies_data.php

@ -254,3 +254,24 @@ function saisies_trouver_data($description, $disable_choix = false) {
}
return $data;
}
/**
* Prend une option disable_choix en entrée
* Si tableau, renvoi presque tel quel
* Si chaine, l'explose au niveau des virgules
* Trim dans tous les cas les différents choix
* @param array|string $disable
* @return array
**/
function saisies_normaliser_disable_choix($disable): array {
if (is_array($disable)) {
$disable = $disable;
} elseif (strlen($disable)) {
$disable = explode(',', trim($disable));
} else {
$disable = [];
}
$disable = array_filter($disable);
$disable = array_map('trim', $disable);
return $disable;
}

3
lang/saisies_fr.php

@ -129,7 +129,8 @@ Vous trouverez la <a href="https://contrib.spip.net/5080" target="_blank" rel="n
'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',
'option_disable_choix_explication' => 'Indiquer les choix séparés par une virgule, exemple : choix1,choix3',
'option_disable_choix_explication' => 'Indiquer les choix séparés par une virgule, exemple : <code>choix1,choix3</code>.',
'option_disable_choix_explication_dev' => 'Indiquer les choix sous forme de tableau, exemple : <code>["choix1","choix3"]</code>.',
'option_disable_choix_label' => 'Désactiver certains choix',
'option_disable_explication' => 'Le champ ne peut plus obtenir le focus.',
'option_disable_label' => 'Désactiver le champ',

5
saisies/checkbox.html

@ -37,8 +37,9 @@
[(#GET{disabled}|strlen|non) #SET{disabled,#ARRAY} ]
[(#GET{disabled}|oui) #SET{disabled,#ARRAY|push{#GET{disabled}}} ]
]
[(#ENV{disable_choix,''}|strlen|oui)
#SET{disabled, #ENV{disable_choix}|explode{','}}
[(#ENV{disable_choix,''}|oui)
#SET{disabled, #ENV{disable_choix}|saisies_normaliser_disable_choix}
]
[(#ENV{tout_selectionner}|oui)
<div class="[(#ENV{choix,choix})][ (#ENV{choix,choix})_tout_selectionner ][ (#ENV{class}) ]none-nojs">

1
saisies/checkbox.yaml

@ -87,6 +87,7 @@ options:
nom: 'disable_choix'
label: '<:saisies:option_disable_choix_label:>'
explication: '<:saisies:option_disable_choix_explication:>'
explication_dev: '<:saisies:option_disable_choix_explication_dev:>'
-
saisie: 'input'
options:

5
saisies/radio.html

@ -17,10 +17,7 @@
#SET{data, #ENV*{data, #ENV*{datas}}}
#SET{disable_choix,#ARRAY}
[(#ENV{disable_choix,''}|strlen|oui)
#SET{disable_choix, #ENV{disable_choix}|trim|explode{','}}
]
#SET{disable_choix, #ENV{disable_choix}|saisies_normaliser_disable_choix}
#SET{compteur_id,0}
<BOUCLE_radio(DATA){source tableau, #GET{data}}>

1
saisies/radio.yaml

@ -68,6 +68,7 @@ options:
nom: 'disable_choix'
label: '<:saisies:option_disable_choix_label:>'
explication: '<:saisies:option_disable_choix_explication:>'
explication_dev: '<:saisies:option_disable_choix_explication_dev:>'
-
saisie: 'oui_non'
options:

1
saisies/selection.html

@ -46,6 +46,7 @@
#SET{disabled, #ARRAY}
[(#ENV{disable_choix,''}|strlen|oui) #SET{disabled, #ENV{disable_choix}|explode{','}}]
#SET{disabled, #ENV{disable_choix}|saisies_normaliser_disable_choix}
<select [(#HTML5|oui)[(#ENV{obligatoire}|et{#ENV{obligatoire}|!={non}}|oui) required="required"]] name="#ENV{nom}[(#ENV{multiple}|?{\[\],''})]" id="champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]"[ class="(#ENV{class})"][ disabled="(#ENV{disable})"][ size="(#ENV{size})"][ (#ENV*{attributs})][ multiple="(#ENV{multiple})"]>
[(#ENV{cacher_option_intro}|non)<option value="">[(#ENV{option_intro})]</option>]

3
saisies/selection.php

@ -31,7 +31,8 @@ function selection_valeurs_acceptables($valeur, $description) {
$data = saisies_aplatir_tableau($data);
$data = array_keys($data);
if (isset($options['disable_choix'])) {
$disable_choix = explode(',', $options['disable_choix']);
include_spip('inc/saisies');
$disable_choix = saisies_normaliser_disable_choix($options['disable_choix']);
$data = array_diff($data, $disable_choix);
}
return (in_array($valeur ,$data));

1
saisies/selection.yaml

@ -93,6 +93,7 @@ options:
nom: 'disable_choix'
label: '<:saisies:option_disable_choix_label:>'
explication: '<:saisies:option_disable_choix_explication:>'
explication_dev: '<:saisies:option_disable_choix_explication_dev:>'
-
saisie: 'fieldset'
options:

2
saisies/selection_multiple.html

@ -27,7 +27,7 @@
[(#REM) valeur peut être une chaine (plusieurs valeurs ou pas) qu'on sait décomposer ]
#SET{valeur, #ENV{valeur}|saisies_valeur2tableau}
[(#ENV{disable_choix,''}|strlen|oui) #SET{disabled, #ENV{disable_choix}|explode{','}} ]
#SET{disabled, #ENV{disable_choix}|saisies_normaliser_disable_choix}
<select name="#ENV{nom}[]" id="champ_[(#ENV{id,#ENV{nom}}|saisie_nom2classe)]" multiple="multiple"[ class="(#ENV{class})"][ disabled="(#ENV{disable})"][ size="(#ENV{size,10})"][ (#ENV*{attributs})]>
[(#ENV{cacher_option_intro}|non)<option value="">[(#ENV{option_intro})]</option>]
<BOUCLE_selection(DATA){source tableau, #GET{data}}>

3
saisies/selection_multiple.php

@ -50,7 +50,8 @@ function selection_multiple_valeurs_acceptables($valeur, $description) {
//A-t-on essayé des poster des valeurs supplémentaires?
$choix_possibles = array_keys($data, true);
if (isset($description['options']['disable_choix'])) {
$disable_choix = explode(',', $description['options']['disable_choix']);
include_spip('inc/saisies')
$disable_choix = saisies_normaliser_disable_choix($description['options']['disable_choix']);
$choix_possibles = array_diff($choix_possibles, $disable_choix);
}
$diff = array_diff($valeur, $choix_possibles);

1
saisies/selection_multiple.yaml

@ -76,6 +76,7 @@ options:
nom: 'disable_choix'
label: '<:saisies:option_disable_choix_label:>'
explication: '<:saisies:option_disable_choix_explication:>'
explication_dev: '<:saisies:option_disable_choix_explication_dev:>'
-
saisie: 'fieldset'
options:

Loading…
Cancel
Save