/** * Génère une page d'aide listant toutes les saisies et leurs options * * Retourne le résultat du squelette `inclure/saisies_aide` auquel * on a transmis toutes les saisies connues. * * @return string Code HTML */ function saisies_generer_aide() { // On a déjà la liste par saisie $saisies = saisies_lister_disponibles(); // On construit une liste par options $options = array(); foreach ($saisies as $type_saisie => $saisie) { $options_saisie = saisies_lister_par_nom($saisie['options'], false); foreach ($options_saisie as $nom => $option) { // Si l'option n'existe pas encore if (!isset($options[$nom])) { $options[$nom] = _T_ou_typo($option['options']); } // On ajoute toujours par qui c'est utilisé $options[$nom]['utilisee_par'][] = $type_saisie; } ksort($options_saisie); $saisies[$type_saisie]['options'] = $options_saisie; } ksort($options); return recuperer_fond('inclure/saisies_aide', array('saisies' => $saisies, 'options' => $options)); }
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; }
/** * Génère une vue d'une saisie à partir d'un tableau la décrivant * * @see saisies_generer_html() * @param array $saisie * Tableau de description d'une saisie * @param array $env * L'environnement, contenant normalement la réponse à la saisie * @param array $env_obligatoire * ??? * @return string * Code HTML de la vue de la saisie */ function saisies_generer_vue($saisie, $env = array(), $env_obligatoire = array()) { // Si le paramètre n'est pas bon, on génère du vide if (!is_array($saisie)) { return ''; } $contexte = array(); // On sélectionne le type de saisie $contexte['type_saisie'] = $saisie['saisie']; // Peut-être des transformations à faire sur les options textuelles $options = $saisie['options']; foreach ($options as $option => $valeur) { if ($option == 'datas') { // exploser une chaine datas en tableau (applique _T_ou_typo sur chaque valeur) $options[$option] = saisies_chaine2tableau($valeur); } else { $options[$option] = _T_ou_typo($valeur, 'multi'); } } // On ajoute les options propres à la saisie $contexte = array_merge($contexte, $options); // Si env est définie dans les options ou qu'il y a des enfants, on ajoute tout l'environnement if (isset($contexte['env']) or isset($saisie['saisies']) and is_array($saisie['saisies'])) { unset($contexte['env']); // on sauve l'ancien environnement // car les sous-saisies ne doivent pas être affectees // par les modification sur l'environnement servant à generer la saisie mère $contexte['_env'] = $env; // À partir du moment où on passe tout l'environnement, il faut enlever // certains éléments qui ne doivent absolument provenir que des options $saisies_disponibles = saisies_lister_disponibles(); if (is_array($saisies_disponibles[$contexte['type_saisie']]['options'])) { $options_a_supprimer = saisies_lister_champs($saisies_disponibles[$contexte['type_saisie']]['options']); foreach ($options_a_supprimer as $option_a_supprimer) { unset($env[$option_a_supprimer]); } } $contexte = array_merge($env, $contexte); } // Dans tous les cas on récupère de l'environnement la valeur actuelle du champ // On regarde en priorité s'il y a un tableau listant toutes les valeurs if ($env['valeurs'] and is_array($env['valeurs']) and isset($env['valeurs'][$contexte['nom']])) { $contexte['valeur'] = $env['valeurs'][$contexte['nom']]; } elseif (preg_match('/([\\w]+)((\\[[\\w]+\\])+)/', $contexte['nom'], $separe)) { $contexte['valeur'] = $env[$separe[1]]; preg_match_all('/\\[([\\w]+)\\]/', $separe[2], $index); // On va chercher au fond du tableau foreach ($index[1] as $cle) { $contexte['valeur'] = $contexte['valeur'][$cle]; } } else { // certains n'ont pas de nom (fieldset) $contexte['valeur'] = isset($env[$contexte['nom']]) ? $env[$contexte['nom']] : ''; } // Si ya des enfants on les remonte dans le contexte if (isset($saisie['saisies']) and is_array($saisie['saisies'])) { $contexte['saisies'] = $saisie['saisies']; } if (is_array($env_obligatoire)) { $contexte = array_merge($contexte, $env_obligatoire); } // On génère la saisie return recuperer_fond('saisies-vues/_base', $contexte); }
/** * Lister les saisies existantes ayant une définition SQL. * * @return array Un tableau listant des saisies et leurs options */ function saisies_lister_disponibles_sql($saisies_repertoire = "saisies") { $saisies = array(); $saisies_disponibles = saisies_lister_disponibles($saisies_repertoire); foreach ($saisies_disponibles as $type => $saisie) { if (isset($saisie['defaut']['options']['sql']) and $saisie['defaut']['options']['sql']) { $saisies[$type] = $saisie; } } 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; }