zZzzZ.
home
/
histoio
/
www
/
plugins
/
auto
/
saisies
/
v3.54.7
/
inc
New Folder
Editing: saisies_formulaire.php
Save
Cancel
<?php /** * Oautils pour faciliter la construction de formulaires CVT sous formes de listes de saisies * * @package SPIP\Saisies\Saisies **/ // Sécurité if (!defined('_ECRIRE_INC_VERSION')) { return; } /** * Cherche la description des saisies d'un formulaire CVT dont on donne le nom * * @param string $form Nom du formulaire dont on cherche les saisies * @param array $args Tableau d'arguments du formulaire * @return array Retourne les saisies du formulaire sinon false */ function saisies_chercher_formulaire($form, $args, $je_suis_poste=false) { $saisies = array(); if ($fonction_saisies = charger_fonction('saisies', 'formulaires/'.$form, true)) { $saisies = call_user_func_array($fonction_saisies, $args); } // Si on a toujours un tableau, on passe les saisies dans un pipeline normé comme pour CVT if (is_array($saisies)) { $saisies = pipeline( 'formulaire_saisies', array( 'args' => array('form' => $form, 'args' => $args, 'je_suis_poste' => $je_suis_poste), 'data' => $saisies ) ); } if (!is_array($saisies)) { $saisies = false; } return $saisies; } /** * Génère un nom unique pour un champ d'un formulaire donné * * @param array $formulaire * Le formulaire à analyser * @param string $type_saisie * Le type de champ dont on veut un identifiant * @return string * Un nom unique par rapport aux autres champs du formulaire */ function saisies_generer_nom($formulaire, $type_saisie) { $champs = saisies_lister_champs($formulaire); // Tant que type_numero existe, on incrémente le compteur $compteur = 1; while (array_search($type_saisie.'_'.$compteur, $champs) !== false) { $compteur++; } // On a alors un compteur unique pour ce formulaire return $type_saisie.'_'.$compteur; } /** * Détermine si peut faire une avance rapide en sautant des étapes qui sont "masquées" par afficher_si * @param array $saisies le tableau d'ensemble des saisies * @param int $etape l'étape à partir de laquelle on commence à tester les étapes suivantes * @return int l'étape où avancer **/ function saisies_determiner_avance_rapide($saisies, $etape) { return saisies_determiner_deplacement_rapide($saisies, $etape, +1); } /** * Détermine si peut faire un recul rapide en sautant des étapes qui sont "masquées" par afficher_si * @param array $saisies le tableau d'ensemble des saisies * @param int $etape l'étape à partir de laquelle on commence à tester les étapes suivantes * @return int l'étape où avancer **/ function saisies_determiner_recul_rapide($saisies, $etape) { return saisies_determiner_deplacement_rapide($saisies, $etape, -1); } /** * Détermine si peut faire un déplacement rapide en sautant des étapes qui sont "masquées" par afficher_si * Pour le confort de lecture, on pourra préférer les fonctions appellantes * `saisies_determiner_avance_rapide()` et `saisies_determiner_recul_rapide()` * @param array $saisies le tableau d'ensemble des saisies * @param int $etape l'étape à partir de laquelle on commence à tester les étapes suivantes * @param int $sens 1 (avance) ou -1 (recule) * @return int l'étape où avancer **/ function saisies_determiner_deplacement_rapide($saisies, $etape, $sens) { if (abs($sens) != 1) { spip_log("Argument $sens invalide dans saisies_determiner_deplacement_rapide ($sens)", 'saisies.'._LOG_ERREUR); return $etape; } $saisies_par_etapes = saisies_lister_par_etapes($saisies); $saisies_afficher_si_liste_masquees = saisies_afficher_si_liste_masquees('get'); $nb_total_etapes = count($saisies_par_etapes); $i = $etape + $sens; $etape_a_conserver = false;//Basculé à true dès qu'un afficher_si réussit ou si pas d'afficher_si while (!$etape_a_conserver and $i <= $nb_total_etapes) {//Tester les futures étapes 1 par 1 $etape = $saisies_par_etapes["etape_$i"]; if (!isset($etape['options']['afficher_si']) or !$etape['options']['afficher_si']) { $etape_a_conserver = true; } elseif (!in_array($etape, $saisies_afficher_si_liste_masquees)) { $etape_a_conserver = true; } else { $i = $i + $sens; } } return $i; }