function saisies_groupe_inserer($formulaire_actuel, $saisie){ include_spip('inclure/configurer_saisie_fonctions'); //le groupe de saisies $saisies_charger_infos = saisies_charger_infos($saisie,$saisies_repertoire = "saisies/groupes"); //le tableau est-il en options ou en saisies ? $classique_yaml=count($saisies_charger_infos['options']); $formidable_yaml=count($saisies_charger_infos['saisies']); if($classique_yaml>0) { $champ_options = 'options'; } if($formidable_yaml>0) { $champ_options = 'saisies'; } //les champs du groupe foreach($saisies_charger_infos[$champ_options] as $info_saisie){ unset($info_saisie['identifiant']); $saisies_disponibles = saisies_lister_disponibles(); $construire_nom = $info_saisie[$champ_options]['nom'] ? $info_saisie[$champ_options]['nom'] : $info_saisie['saisie']; $nom = $info_saisie[$champ_options]['nom'] = saisies_generer_nom($formulaire_actuel,$construire_nom); $formulaire_actuel = saisies_inserer($formulaire_actuel, $info_saisie); } return $formulaire_actuel; }
/** * Transforme les noms d'une liste de saisies pour qu'ils soient * uniques dans le formulaire donné. * * @param array $formulaire * Le formulaire à analyser * @param array $saisies * Un tableau décrivant les saisies. * @return array * Retourne le tableau modifié des saisies */ function saisies_transformer_noms_auto($formulaire, $saisies) { if (is_array($saisies)) { foreach ($saisies as $cle => $saisie) { $saisies[$cle]['options']['nom'] = saisies_generer_nom($formulaire, $saisie['saisie']); // il faut prendre en compte dans $formulaire les saisies modifiees // sinon on aurait potentiellement 2 champs successifs avec le meme nom. // on n'ajoute pas les saisies dont les noms ne sont pas encore calculees. $new = $saisies[$cle]; unset($new['saisies']); $formulaire[] = $new; if (is_array($saisie['saisies'])) { $saisies[$cle]['saisies'] = saisies_transformer_noms_auto($formulaire, $saisie['saisies']); } } } return $saisies; }
function formulaires_construire_formulaire_traiter($identifiant, $formulaire_initial = array(), $options = array()) { include_spip('inc/saisies'); $retours = array(); $saisies_disponibles = saisies_lister_disponibles(); // On ajoute un préfixe devant l'identifiant $identifiant = 'constructeur_formulaire_' . $identifiant; // On récupère le formulaire à son état actuel $formulaire_actuel = session_get($identifiant); // Si on demande à ajouter une saisie if ($ajouter_saisie = _request('ajouter_saisie')) { $nom = saisies_generer_nom($formulaire_actuel, $ajouter_saisie); $saisie = array('saisie' => $ajouter_saisie, 'options' => array('nom' => $nom)); // S'il y a des valeurs par défaut pour ce type de saisie, on les ajoute if ($defaut = $saisies_disponibles[$ajouter_saisie]['defaut'] and is_array($defaut)) { $defaut = _T_ou_typo($defaut, 'multi'); //Compatibilite PHP<5.3.0 //source : http://www.php.net/manual/en/function.array-replace-recursive.php#92574 if (!function_exists('array_replace_recursive')) { function array_replace_recursive($array, $array1) { function recurse($array, $array1) { foreach ($array1 as $key => $value) { // create new key in $array, if it is empty or not an array if (!isset($array[$key]) || isset($array[$key]) && !is_array($array[$key])) { $array[$key] = array(); } // overwrite the value in the base array if (is_array($value)) { $value = recurse($array[$key], $value); } $array[$key] = $value; } return $array; } // handle the arguments, merge one by one $args = func_get_args(); $array = $args[0]; if (!is_array($array)) { return $array; } for ($i = 1; $i < count($args); $i++) { if (is_array($args[$i])) { $array = recurse($array, $args[$i]); } } return $array; } } $saisie = array_replace_recursive($saisie, $defaut); } $formulaire_actuel = saisies_inserer($formulaire_actuel, $saisie); } // Si on demande à dupliquer une saisie if ($dupliquer_saisie = _request('dupliquer_saisie')) { $formulaire_actuel = saisies_dupliquer($formulaire_actuel, $dupliquer_saisie); } // Si on demande à supprimer une saisie if ($supprimer_saisie = _request('supprimer_saisie')) { $formulaire_actuel = saisies_supprimer($formulaire_actuel, $supprimer_saisie); } // Si on enregistre la conf d'une saisie if ($nom = _request('enregistrer_saisie')) { // On récupère ce qui a été modifié $saisie_modifiee = _request("saisie_modifiee_{$nom}"); // On regarde s'il y a une position à modifier if (isset($saisie_modifiee['position'])) { $position = $saisie_modifiee['position']; unset($saisie_modifiee['position']); // On ne déplace que si ce n'est pas la même chose if ($position != $nom) { $formulaire_actuel = saisies_deplacer($formulaire_actuel, $nom, $position); } } // On regarde s'il y a des options de vérification à modifier if (isset($saisie_modifiee['verifier']['type']) and ($type_verif = $saisie_modifiee['verifier']['type']) != '') { $saisie_modifiee['verifier'] = array('type' => $type_verif, 'options' => $saisie_modifiee['verifier'][$type_verif]); } else { unset($saisie_modifiee['verifier']); } // On récupère les options postées en enlevant les chaines vides $saisie_modifiee['options'] = array_filter($saisie_modifiee['options'], 'saisie_option_contenu_vide'); if (isset($saisie_modifiee['verifier']['options']) and $saisie_modifiee['verifier']['options']) { $saisie_modifiee['verifier']['options'] = array_filter($saisie_modifiee['verifier']['options'], 'saisie_option_contenu_vide'); } // On désinfecte à la main if (is_array($saisie_modifiee['options'])) { spip_desinfecte($saisie_modifiee['options']); } // On modifie enfin $formulaire_actuel = saisies_modifier($formulaire_actuel, $nom, $saisie_modifiee); } // Si on demande à réinitialiser if (_request('reinitialiser') == 'oui') { $formulaire_actuel = $formulaire_initial; } // On enregistre en session la nouvelle version du formulaire session_set($identifiant, $formulaire_actuel); // Le formulaire reste éditable $retours['editable'] = true; return $retours; }