Browse Source

Réécriture de la partie JS des afficher-si, pour pouvoir gérer plus

facilement les saisies perso sans avoir à déclarer de nouvelles
fonctions dans 99% des cas (pb #51)

1. Le `data-afficher-si` comporte des appelles à une fonction JS `afficher_si()` qui recoit
en paramètre certains résultats (car on applique un filtre) de l'analyse syntaxique du tests
de base.
2. Cette fonction se base sur `serializeArray()` de jQuery. Mais ce n'est pas des plus pratiques, car celui-ci ne renvoie pas de représentation tabulaire pour ce qui sera pourtant considérés comme un tableau en PHP. De plus, il faut tout restructurer pour pouvoir trouver facilement la valeur d'un champ.
Bref, ca nécessite quand même quelques contorsions.

une fonction qui filtre le résultat du parsage d'afficher_si, idéalement on traiterait cela directement au niveau du regex,... + adaptation du code

Il n'y a que la saisie `fichiers` conditionnante qui demande un traitement à part, que l'on déporte dans cvtupload.

fix #51 #71
pull/82/head
Maïeul 2 years ago
parent
commit
65f104c858
  1. 32
      inc/saisies_afficher_si_commun.php
  2. 177
      inc/saisies_afficher_si_js.php
  3. 6
      inc/saisies_afficher_si_php.php
  4. 89
      javascript/saisies_afficher_si.js
  5. 25
      saisies_afficher_si_js/defaut.php
  6. 328
      tests/saisies_afficher_si/saisies_afficher_si_js.php

32
inc/saisies_afficher_si_commun.php

@ -47,10 +47,39 @@ function saisies_parser_condition_afficher_si($condition, $no_arobase=null) {
$regexp = "#$regexp#";
preg_match_all($regexp, $condition, $tests, PREG_SET_ORDER);
$tests = array_map('saisies_afficher_si_filtrer_parse_condition', $tests);
$cache_ici[$condition] = $tests;
return $tests;
}
/**
* Filtrer le retour d'un parsage d'un test d'afficher_si,
* pour ne pas garder des infos qui ne servent pas par là suite.
* IE : si la REGEXP était optimale, on n'aurai pas besoin de cette fonction
* Note : on garde les fonctions entrées vides, car parfois besoin de distinguer vide de null
* @param array $parse
* @return array $parse
**/
function saisies_afficher_si_filtrer_parse_condition($parse) {
// Pour des raisons de regexp distingue valeur et valeur numerique, mais pas besoin ici
// Supprimer certaines choses dont on n'a pas besoin
$parse['expression'] = $parse[0];
unset($parse['arobase']);
unset($parse['guillemet']);
foreach ($parse as $cle => $valeur) {
if (is_int($cle)) {
unset($parse[$cle]);
}
}
if (isset($parse['valeur_numerique']) and $parse['valeur_numerique'] !== '') {
$parse['valeur'] = $parse['valeur_numerique'];
unset($parse['valeur_numerique']);
}
return $parse;
}
/**
* Retourne le résultat de l'évaluation d'un plugin actif
* @param string $champ (sans les @@)
@ -100,7 +129,6 @@ function saisies_tester_condition_afficher_si($champ, $total, $operateur=null, $
if (is_null($champ)) {
$champ = '';
}
// Dans tous les cas, enlever les guillemets qui sont au sein de valeur
//Si champ est de type string, tenter d'unserializer
$tenter_unserialize = @unserialize($champ);
if ($tenter_unserialize) {
@ -197,7 +225,7 @@ function saisies_afficher_si_secure($condition, $tests=array()) {
$condition_original = $condition;
$hors_test = array('||','&&','!','(',')','true','false');
foreach ($tests as $test) {
$condition = str_replace($test[0], '', $condition);
$condition = str_replace($test['expression'], '', $condition);
}
foreach ($hors_test as $hors) {
$condition = str_replace($hors, '', $condition);

177
inc/saisies_afficher_si_js.php

@ -32,12 +32,12 @@ function saisies_afficher_si_js($condition, $saisies_form = array()) {
return '';
}
foreach ($tests as $test) {
$expression = $test[0];
$expression = $test['expression'];
unset($test['expression']);// Les les fonctions saisies_afficher_si_js n'ont pas besoin de l'expression qui est deja parsée, et cela évite qu'elles l'insèrent dans le js, avec le risque du coup de remplacement recursif et du coup de saisie js invalide.
$negation = isset($test['negation']) ? $test['negation'] : '' ;
$champ = isset($test['champ']) ? $test['champ'] : '' ;
$total = isset($test['total']) ? $test['total'] : '';
$operateur = isset($test['operateur']) ? $test['operateur'] : '' ;
$guillemet = isset($test['guillemet']) ? $test['guillemet'] : '' ;
$negation = isset($test['negation']) ? $test['negation'] : '';
$booleen = isset($test['booleen']) ? $test['booleen'] : '';
$valeur = isset($test['valeur']) ? $test['valeur'] : '' ;
@ -52,7 +52,18 @@ function saisies_afficher_si_js($condition, $saisies_form = array()) {
} elseif ($booleen) {
$condition = $condition;
} else { // et maintenant, on rentre dans le vif du sujet : les champs. On délégue cela à une autre fonction
$condition = str_replace($expression, saisies_afficher_si_js_champ($champ, $total, $operateur, $valeur, $valeur_numerique, $guillemet, $negation, $saisies_form), $condition);
if (!isset($saisies_form[$champ])) {//La saisie conditionnante n'existe pas pour ce formulaire > on laisse tomber
spip_log("Afficher_si incorrect. Champ $champ inexistant", "saisies"._LOG_CRITIQUE);
$condition = '';
} else {
if (!$type_saisie = $saisies_form[$champ]['saisie']) {
$type_saisie = 'defaut';
}
if (!$f = charger_fonction($type_saisie, 'saisies_afficher_si_js', true)) {
$f = charger_fonction('defaut', 'saisies_afficher_si_js');
}
$condition = str_replace($expression, $f($test, $saisies_form), $condition);
}
}
}
} else {
@ -64,163 +75,3 @@ function saisies_afficher_si_js($condition, $saisies_form = array()) {
return str_replace('"', """, $condition);
}
/**
* Génère à partir de l'analyse d'une condition afficher_si le test js, pour les champs
* @param string $champ
* @param string $total
* @param string $operateur
* @param string $valeur
* @param string $valeur_numerique
* @param string $valeur
* @param string $guillemet
* @param string $negation
* @param string $saisies_form listée par nom
* @return string condition_js
**/
function saisies_afficher_si_js_champ($champ, $total, $operateur, $valeur, $valeur_numerique, $guillemet, $negation, $saisies_form) {
if (!isset($saisies_form[$champ])) {//La saisie conditionnante n'existe pas pour ce formulaire > on laisse tomber
spip_log("Afficher_si incorrect. Champ $champ inexistant", "saisies"._LOG_CRITIQUE);
return '';
}
$saisie = $saisies_form[$champ]['saisie'];
if ($saisie == 'radio' or $saisie == 'oui_non' or $saisie == 'true_false') {
$saisie = 'radio';
}
$saisie = pipeline('saisies_afficher_si_js_type', array(
'args' => array('saisie' => $saisies_form[$champ]),
'data' => $saisie
)
);
// Cas d'une valeur numérique : pour le test js, cela ne change rien, on la passe comme valeur
if (strlen($valeur_numerique) and !$valeur) {
$valeur = $valeur_numerique;
}
if (!$f = charger_fonction("saisies_afficher_si_js_$saisie", 'inc', true)) {
if ($operateur === 'MATCH' or $operateur === '!MATCH') {
if ($operateur === '!MATCH') {//Si double negation, on simplifie
$negation = $negation? '' : '!';
}
$cond = "$valeur.test(\$(form).find('[name=\"$champ\"]').val())";
if ($negation) {
$cond = "!($cond)";
}
return $cond;
} else {
return "$negation\$(form).find('[name=\"$champ\"]').val() $operateur $guillemet$valeur$guillemet";
}
}
return $f($champ, $total, $operateur, $valeur, $guillemet, $negation, $saisies_form[$champ]);
}
/**
* Génère les tests js pour les cas de case
* @param string $champ
* @param string $total
* @param string $operateur
* @param string $valeur
* @param string $guillemet
* @param string $negation
* @param array $saisie
**/
function inc_saisies_afficher_si_js_case($champ, $total, $operateur, $valeur, $guillemet, $negation, $saisie) {
if ($valeur and $operateur) {
return "$negation($(form).find(\".checkbox[name='$champ']\").is(':checked') ? $(form).find(\".checkbox[name='$champ']\").val() : '') $operateur $guillemet$valeur$guillemet";
} else {
return "$negation($(form).find(\".checkbox[name='$champ']\").is(':checked') ? $(form).find(\".checkbox[name='$champ']\").val() : '')";
}
}
/**
* Génère les tests js pour les cas de radio
* @param string $champ
* @param string $total
* @param string $operateur
* @param string $valeur
* @param string $guillemet
* @param string $negation
* @param array $saisie;
**/
function inc_saisies_afficher_si_js_radio($champ, $total, $operateur, $valeur, $guillemet, $negation, $saisie) {
return "$negation$(form).find(\"[name='$champ']:checked\").val() $operateur $guillemet$valeur$guillemet";
}
/**
* Génère les tests js pour les cas de fichiers
* @param string $champ
* @param string $total
* @param string $operateur
* @param string $valeur
* @param string $guillemet
* @param string $negation
* @param array $saisie
**/
function inc_saisies_afficher_si_js_fichiers($champ, $total, $operateur, $valeur, $guillemet, $negation, $saisie) {
$nb_fichiers = isset($saisie['options']['nb_fichiers']) ? $saisie['options']['nb_fichiers'] : 0;
if (!$nb_fichiers) {
$nb_fichiers = 1;
} else {
$nb_fichiers = intval($nb_fichiers);
}
$total = "$(form).find(\"[name^='cvtupload_fichiers_precedents[$champ]']\").length";
$i = 0;
while ($i < $nb_fichiers) {
$total .= " + $(form).find(\"[name^='$champ']\")[$i].files.length";
$i++;
}
$total = "($total)";
$result = "$negation $total $operateur $valeur";
return $result;
}
/**
* Génère les tests js pour les cas de checkbox
* @param string $champ
* @param string $total
* @param string $operateur
* @param string $valeur
* @param string $guillemet
* @param string $negation
* @param array $saisie
**/
function inc_saisies_afficher_si_js_checkbox($champ, $total, $operateur, $valeur, $guillemet, $negation, $saisie) {
if ($total) {// Cas 1 : on cherche juste à savoir le nombre total de case coché
$result = "$negation$(form).find(\"[name^='$champ']:checked\").length $operateur $valeur";
return $result;
} else {// Cas 2 : on cherche à savoir s'il y a une case avec une certaine valeur
// Convertir les conditions en test IN (compatibilité historique)
if ($operateur == '==') {
$operateur = 'IN';
} elseif ($operateur == '!=') {
$operateur = '!IN';
}
// La négation de l'opérateur remonte globalement
if ($operateur == '!IN' and $negation) {
$negation = '';
} elseif ($operateur == '!IN') {
$negation = '!';
}
// Spliter la valeur pour trouver toutes les cases qui doivent être cochées (ou pas)
$valeurs = explode(',', $valeur);
$valeurs = array_map('saisies_afficher_si_js_IN_individuel', $valeurs, array_fill(0,count($valeurs),$champ));
$valeurs = implode(' || ', $valeurs);
return "$negation($valeurs)";
}
}
/**
* Génère le sous-test js pour le cas où on a l'operateur IN ou !IN
* c'est-à-dire, en pratique, pour les checkboxes
* Par "sous-test js", nous entendons le test pour une valeur précise d'un checkbox
* Attention : $valeur en premier (car fonction appelée dans un array_map())
* @param string $valeur
* @param string $champ
* @return string
**/
function saisies_afficher_si_js_IN_individuel($valeur, $champ) {
return "$(form).find('[name=\"$champ".'[]"'."][value=\"$valeur\"]').is(':checked')";
}

6
inc/saisies_afficher_si_php.php

@ -216,7 +216,7 @@ function saisies_transformer_condition_afficher_si($condition, $env = null, $sai
}
foreach ($tests as $test) {
$expression = $test[0];
$expression = $test['expression'];
if (!isset($test['booleen'])) {
$nom_champ = $test['champ'];
if (!$no_arobase) {
@ -229,9 +229,7 @@ function saisies_transformer_condition_afficher_si($condition, $env = null, $sai
$operateur = isset($test['operateur']) ? $test['operateur'] : null;
$negation = isset($test['negation']) ? $test['negation'] : '';
if (isset($test['valeur_numerique'])) {
$valeur = intval($test['valeur_numerique']);
} elseif (isset($test['valeur'])) {
if (isset($test['valeur'])) {
$valeur = $test['valeur'];
} else {
$valeur = null;

89
javascript/saisies_afficher_si.js

@ -4,25 +4,44 @@ $(function(){
$(document).ajaxComplete(function() {
afficher_si_init();
});
afficher_si_current_data = '';
function afficher_si_init() {
$('form:not([data-afficher_si-init])').each(function(){
$(this).attr('data-afficher_si-init', true);
form = $(this);
afficher_si = $(this).find('[data-afficher_si]').each(function(){
afficher_si_set_current_data(form);
form.find('[data-afficher_si]').each(function(){
verifier_afficher_si(form, $(this), true);
}
);
$(this).find('textarea, input, select').change(function(){
form = $(this).parents('form');
name = $(this).attr('name').replace(/\\[.*\\]/,'');
name = $(this).attr('name').replace('[]', '');
afficher_si_set_current_data(form);
form.find('[data-afficher_si*=\''+name+'\']').each(function(){
verifier_afficher_si(form, $(this));
})
})
});
$(this).attr('data-afficher_si-init', true);
})
}
function afficher_si_set_current_data(form) {
current_data = form.serializeArray();//Le format de retour n'est pas simple, on transforme en tableau associatif
afficher_si_current_data = [];
$(current_data).each(function() {
if (this.name.includes('[]')) {
this.name = this.name.replace('[]', '');
if (Array.isArray(afficher_si_current_data[this.name])) {
afficher_si_current_data[this.name].push(this.value)
} else {
afficher_si_current_data[this.name] = [this.value];
}
} else {
afficher_si_current_data[this.name] = this.value;
}
});
}
function verifier_afficher_si(form, saisie, chargement) {
var condition = saisie.attr('data-afficher_si');
condition = saisie.attr('data-afficher_si');
condition = eval(condition);
if (condition) {
saisie.removeClass('afficher_si_masque_chargement').removeClass('afficher_si_masque').addClass('afficher_si_visible').removeAttr('aria-hiden');
@ -37,3 +56,63 @@ function verifier_afficher_si(form, saisie, chargement) {
saisie.find('[required]').attr('required', false).attr('data-afficher-si-required', null);
}
}
function afficher_si(args) {
valeur_champ = afficher_si_current_data[args['champ']];
valeur = args['valeur'];
// Compat historique == > IN pour données tabulaires !
if (Array.isArray(valeur_champ) && !args['total']) {
if (args['operateur'] == '==') {
args['operateur'] = 'IN';
} else if(args['operateur'] == '!=') {
args['operateur'] = '!IN';
}
}
// Si on vérifie un total
if (args['total']) {
if (Array.isArray(valeur_champ)) {
valeur_champ = valeur_champ.length;
} else {
valeur_champ = 0;
}
}
// Transformation en tableau des valeurs et valeur_champ, si IN/!IN
if (args['operateur'] == 'IN' || args['operateur'] == '!IN') {
valeur = valeur.split(',');
if (!Array.isArray(valeur_champ)) {
if (valeur_champ) {
valeur_champ = [valeur_champ];
} else {
valeur_champ = [];
}
}
}
// Et maintenant les test
switch (args['operateur']) {
case '==':
return valeur_champ == valeur;
case '!=':
return valeur_champ != valeur;
case '>':
return valeur_champ > valeur;
case '>=':
return valeur_champ >= valeur;
case '<':
return valeur_champ < valeur;
case '<=':
return valeur_champ <= valeur;
case 'MATCH':
return RegExp(valeur).test(valeur_champ);
case 'MATCH':
return !RegExp(valeur).test(valeur_champ);
case 'IN':
return $(valeur).filter(valeur_champ).length ? true : false;
case '!IN':
return $(valeur).filter(valeur_champ).length ? false : true;
default:
return valeur_champ ? true : false;
}
}

25
saisies_afficher_si_js/defaut.php

@ -0,0 +1,25 @@
<?php
/** Gestion de l'affichage conditionnelle des saisies.
* Partie spécifique js
*
* @package SPIP\Saisies\afficher_si_js\defaut
**/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Generation du js d'afficher_si par défaut
* @param array $parse analyse syntaxique du tests à effectuer (sous tableau de résultat de saisies_parser_condition_afficher_si())
* @param array $saisies_form ensemble des saisies du formulaire, listées par nom
**/
function saisies_afficher_si_js_defaut($parse, $saisies_form) {
// Etape 1 : nettoyer parse pour ne pas garder les clés numérique, mais uniquement les clés string, qui permettent reellement de savoir ce qu'il faut faire.
$negation = $parse['negation'];
unset($parse['negation']);
array_filter($parse);
return $negation.'afficher_si('.json_encode($parse).')';
}

328
tests/saisies_afficher_si/saisies_afficher_si_js.php

@ -1,328 +0,0 @@
<?php
/**
* Test unitaire de la fonction saisies_afficher_si_js
* du fichier ../plugins/saisies/inc/saisies_afficher_si_js.php
*
* genere automatiquement par TestBuilder
* le 2018-12-20 23:52
*/
$test = 'saisies_afficher_si_js';
$remonte = "../";
while (!is_dir($remonte."ecrire"))
$remonte = "../$remonte";
require $remonte.'tests/test.inc';
find_in_path("../plugins/saisies/inc/saisies_afficher_si_js.php",'',true);
// chercher la fonction si elle n'existe pas
if (!function_exists($f='saisies_afficher_si_js')){
find_in_path("inc/filtres.php",'',true);
$f = chercher_filtre($f);
}
// Préparer les pseudo config
include_spip("inc/config");
ecrire_config("tests_saisies_config", array("a" => "a", "sous" => array("b" => "b", "c" => "c")));
// les saisies à passer
$saisies_form = array();
foreach (array('case_1','radio_1','checkbox_1','input_1') as $saisie) {
$saisies_form[] = array(
'saisie' => str_replace('_1', '', $saisie),
'options' => array('nom' => $saisie)
);
}
$saisies_form[] = array(
'saisie' => 'case',
'options' => array(
'nom' => 'config[activer_organisation]',
'conteneur_class' => 'pleine_largeur',
'label_case' => _T('profil:champ_config_activer_organisation_label_case'),
),
);
$saisies_form[] = array(
'saisie' => 'fichiers',
'options' => array(
'nb_fichiers' => 2,
'nom' => 'fichiers'
),
);
$saisies_form[] = array(
'saisie' => 'fichiers',
'options' => array(
'nom' => 'fichiers_bis'
),
);
$groupe_contact = array(
'saisie' => 'fieldset',
'options' => array(
'nom' => 'groupe_contact',
'label' => _T('profil:champ_groupe_contact_label'),
),
'saisies' => array(),
);
$groupe_contact['saisies'][] = array(
'saisie' => 'case',
'options' => array(
'nom' => 'config[activer_contact]',
'conteneur_class' => 'pleine_largeur',
'label_case' => _T('profil:champ_config_activer_contact_label_case'),
),
);
$groupe_contact['saisies'][] = array(
'saisie' => 'choix_grille',
'options' => array(
'nom' => 'config[contact]',
'caption' => _T('profil:champ_config_contact_caption'),
'conteneur_class' => 'pleine_largeur',
'multiple' => 'oui',
'afficher_si' => '@config[activer_contact]@ == "on"',
),
);
// Coordoonnées pour le contact si plugin idoine ET configuré
$groupe_contact['saisies'][] = array(
'saisie' => 'case',
'options' => array(
'nom' => 'config[activer_coordonnees_contact]',
'label_case' => _T('profil:champ_config_activer_coordonnees_contact_label_case'),
'conteneur_class' => 'pleine_largeur',
'afficher_si' => '@config[activer_contact]@ == "on"',
),
);
$groupe_contact['saisies'][] = array(
'saisie' => 'profil_coordonnees',
'options' => array(
'nom' => 'config[coordonnees][contact]',
'conteneur_class' => 'pleine_largeur',
'caption' => _T('profil:champ_config_coordonnees_contact_caption'),
'afficher_si' => '@config[activer_contact]@ == "on" && @config[activer_coordonnees_contact]@ == "on"',
'caption_explication' => _T('profil:champ_config_coordonnees_explication'),
),
);
$saisies_form[] = $groupe_contact;
// hop ! on y va
//
$err = tester_fun($f, essais_saisies_afficher_si_js($saisies_form));
effacer_config('tests_saisies_config');
// si le tableau $err est pas vide ca va pas
if ($err) {
die ('<dl>' . join('', $err) . '</dl>');
}
echo "OK";
// On va tester essentiellement sur des set_request, le cas $env étant normalement identique
function essais_saisies_afficher_si_js($saisies_form){
$essais = array (
'input_egalite' => array(
0 => '$(form).find(\'[name=&quot;input_1&quot;]\').val() == \'toto\'',
1 => '@input_1@ == \'toto\'',
2 => $saisies_form
),
'input_egalite_double_quote' => array(
0 => '$(form).find(\'[name=&quot;input_1&quot;]\').val() == &quot;toto&quot;',
1 => '@input_1@ == "toto"',
2 => $saisies_form
),
'input_egalite_nb' => array(
0 => '$(form).find(\'[name=&quot;input_1&quot;]\').val() == 23',
1 => '@input_1@ == 23',
2 => $saisies_form
),
'input_inegalite_zero' => array(
0 => '$(form).find(\'[name=&quot;input_1&quot;]\').val() > 0',
1 => '@input_1@ > 0',
2 => $saisies_form
),
'input_inegalite' => array(
0 => '$(form).find(\'[name=&quot;input_1&quot;]\').val() != \'toto\'',
1 => '@input_1@ != \'toto\'',
2 => $saisies_form
),
'input_egalite_nie' => array(
0 => '!$(form).find(\'[name=&quot;input_1&quot;]\').val() == \'toto\'',
1 => '!@input_1@ == \'toto\'',
2 => $saisies_form
),
'input_inegalite_nie' => array(
0 => '!$(form).find(\'[name=&quot;input_1&quot;]\').val() != \'toto\'',
1 => '!@input_1@ != \'toto\'',
2 => $saisies_form
),
'checkbox_egalite' => array(
0 => '($(form).find(\'[name=&quot;checkbox_1[]&quot;][value=&quot;toto&quot;]\').is(\':checked\'))',
1 => '@checkbox_1@ == \'toto\'',
2 => $saisies_form
),
'checkbox_inegalite' => array(
0 => '!($(form).find(\'[name=&quot;checkbox_1[]&quot;][value=&quot;toto&quot;]\').is(\':checked\'))',
1 => '@checkbox_1@ != \'toto\'',
2 => $saisies_form
),
'checkbox_IN' => array(
0 => '($(form).find(\'[name=&quot;checkbox_1[]&quot;][value=&quot;toto&quot;]\').is(\':checked\'))',
1 => '@checkbox_1@ IN \'toto\'',
2 => $saisies_form
),
'checkbox_TOTAL' => array(
0 => '$(form).find(&quot;[name^=\'checkbox_1\']:checked&quot;).length > 1',
1 => '@checkbox_1@:TOTAL > 1',
2 => $saisies_form
),
'checkbox_NOT_IN' => array(
0 => '!($(form).find(\'[name=&quot;checkbox_1[]&quot;][value=&quot;toto&quot;]\').is(\':checked\'))',
1 => '@checkbox_1@ !IN \'toto\'',
2 => $saisies_form
),
'checkbox_IN_nie' => array(
0 => '!($(form).find(\'[name=&quot;checkbox_1[]&quot;][value=&quot;toto&quot;]\').is(\':checked\'))',
1 => '@checkbox_1@ !IN \'toto\'',
2 => $saisies_form
),
'checkbox_NOT_IN_nie' => array(//cas sans doute rare, mais sait-on jamais
0 => '($(form).find(\'[name=&quot;checkbox_1[]&quot;][value=&quot;toto&quot;]\').is(\':checked\'))',
1 => '!@checkbox_1@ !IN \'toto\'',
2 => $saisies_form
),
'checkbox_IN_MULTIPLE' => array(
0 => '($(form).find(\'[name=&quot;checkbox_1[]&quot;][value=&quot;toto&quot;]\').is(\':checked\') || $(form).find(\'[name=&quot;checkbox_1[]&quot;][value=&quot;tata&quot;]\').is(\':checked\'))',
1 => '@checkbox_1@ IN \'toto,tata\'',
2 => $saisies_form
),
'sous_champ+config' => array(
'0' => '($(form).find(&quot;.checkbox[name=\'config[activer_organisation]\']&quot;).is(\':checked\') ? $(form).find(&quot;.checkbox[name=\'config[activer_organisation]\']&quot;).val() : \'\') == &quot;on&quot;',
'1' => '@config[activer_organisation]@ == "on"',
'2' => $saisies_form
),
'radio_egal' => array(
0 => '$(form).find(&quot;[name=\'radio_1\']:checked&quot;).val() == \'toto\'',
1 => '@radio_1@ == \'toto\'',
2 => $saisies_form
),
'radio_inegal' => array(
0 => '$(form).find(&quot;[name=\'radio_1\']:checked&quot;).val() != \'toto\'',
1 => '@radio_1@ != \'toto\'',
2 => $saisies_form
),
'case' => array(
0 => '($(form).find(&quot;.checkbox[name=\'case_1\']&quot;).is(\':checked\') ? $(form).find(&quot;.checkbox[name=\'case_1\']&quot;).val() : \'\')',
1 => '@case_1@',
2 => $saisies_form
),
'case_on' => array(
'0' => '($(form).find(&quot;.checkbox[name=\'case_1\']&quot;).is(\':checked\') ? $(form).find(&quot;.checkbox[name=\'case_1\']&quot;).val() : \'\') == &quot;on&quot;',
'1' => '@case_1@== "on"',
'2' => $saisies_form
),
'plusieurs_case_on' => array(
'0' => '($(form).find(&quot;.checkbox[name=\'config[activer_contact]\']&quot;).is(\':checked\') ? $(form).find(&quot;.checkbox[name=\'config[activer_contact]\']&quot;).val() : \'\') == &quot;on&quot; && ($(form).find(&quot;.checkbox[name=\'config[activer_coordonnees_contact]\']&quot;).is(\':checked\') ? $(form).find(&quot;.checkbox[name=\'config[activer_coordonnees_contact]\']&quot;).val() : \'\') == &quot;on&quot;',
'1' => '@config[activer_contact]@ == "on" && @config[activer_coordonnees_contact]@ == "on"',
'2' => $saisies_form
),
'hack' => array(
0 => '',
1 => 'alert("maman")'
),
'hack_bis' => array(
0 => '',
1 => 'alert("maman") || @input_1@ == "2"'
),
'false' => array(
0 => 'false',
1 => 'false'
),
'true' => array(
0 => 'true',
1 => 'true'
),
'anti_false' => array(
0 => '!false',
1 => '!false'
),
'anti_true' => array(
0 => '!true',
1 => '!true'
),
'premier_niveau' => array(
0 => 'true',
1 => '@config:tests_saisies_config:a@==\'a\'',
),
'second_niveau' => array(
0 => 'false',
1 => '@config:tests_saisies_config:sous:b@==\'c\'',
),
'premier_niveau_nie' => array(
0 => 'false',
1 => '!@config:tests_saisies_config:a@==\'a\'',
),
'second_niveau_nie' => array(
0 => 'true',
1 => '!@config:tests_saisies_config:sous:b@==\'c\'',
),
'second_niveau_bis' => array(
0 => 'true',
1 => '@config:tests_saisies_config:sous:c@==\'c\'',
),
'second_niveau_et' => array(
0 => 'true && false',
1 => '@config:tests_saisies_config:sous:c@==\'c\' && @config:tests_saisies_config:sous:b@==\'c\'',
),
'second_niveau_ou' => array(
0 => 'true || false',
1 => '@config:tests_saisies_config:sous:c@==\'c\' || @config:tests_saisies_config:sous:b@==\'c\'',
),
'plugin_actif' => array(
0 => 'true',
1 => '@plugin:saisies@'
),
'plugin_inactif' => array(
0 => 'false',
1 => '@plugin:tartempion_de_test@' // en espérant que personne ne nomme un plugin tartempion_de_test
),
'plugin_actif_nie' => array(
0 => 'false',
1 => '!@plugin:saisies@'
),
'plugin_inactif_nie' => array(
0 => 'true',
1 => '!@plugin:tartempion_de_test@' // en espérant que personne ne nomme un plugin tartempion_de_test
),
'fichiers'=> array(
'0' => ' ($(form).find(&quot;[name^=\'cvtupload_fichiers_precedents[fichiers]\']&quot;).length + $(form).find(&quot;[name^=\'fichiers\']&quot;)[0].files.length + $(form).find(&quot;[name^=\'fichiers\']&quot;)[1].files.length) > 2',
'1' => '@fichiers@ > 2',
'2' => $saisies_form
),
'fichiers_bis'=> array(
'0' => ' ($(form).find(&quot;[name^=\'cvtupload_fichiers_precedents[fichiers_bis]\']&quot;).length + $(form).find(&quot;[name^=\'fichiers_bis\']&quot;)[0].files.length) > 2',
'1' => '@fichiers_bis@ > 2',
'2' => $saisies_form
),
'match' => array(
'0' => '/domaine.ext$/.test($(form).find(\'[name=&quot;input_1&quot;]\').val())',
'1' => '@input_1@ MATCH \'/domaine.ext$/\'',
'2' => $saisies_form
),
'match_negation' => array(
'0' => '!(/domaine.ext$/.test($(form).find(\'[name=&quot;input_1&quot;]\').val()))',
'1' => '!@input_1@ MATCH \'/domaine.ext$/\'',
'2' => $saisies_form
),
'not_match' => array(
'0' => '!(/domaine.ext$/.test($(form).find(\'[name=&quot;input_1&quot;]\').val()))',
'1' => '@input_1@ !MATCH \'/domaine.ext$/\'',
'2' => $saisies_form
),
'not_match_negation' => array(
'0' => '/domaine.ext$/.test($(form).find(\'[name=&quot;input_1&quot;]\').val())',
'1' => '!@input_1@ !MATCH \'/domaine.ext$/\'',
'2' => $saisies_form
)
);
return $essais;
}
?>
Loading…
Cancel
Save