/** * Retourne la description d'un champ extra indiqué * * Retourne le tableau de description des options de saisies * ou un des attributs de ce tableau * * @param string $objet * Type d'objet * @param string $colonne * Nom de la colonne SQL * @param string $demande * Nom du paramètre demandé. * Non renseigné, tout le tableau de description est retourné * @return mixed * - Tableau si toute la description est demandée * - Indéfini si un élément spécifique de la description est demandé. * - Chaine vide si le champs extra n'est pas trouvé */ function calculer_balise_CHAMP_EXTRA($objet, $colonne, $demande='') { // Si la balise n'est pas dans une boucle, on cherche un objet explicite dans le premier argument // de la forme "trucs/colonne" ou "spip_trucs/colonne" if (!$objet and $decoupe = explode('/', $colonne) and count($decoupe) == 2){ $objet = $decoupe[0]; $colonne = $decoupe[1]; } // recuperer la liste des champs extras existants include_spip('cextras_pipelines'); if (!$saisies = champs_extras_objet( $table = table_objet_sql($objet) )) { return ''; } include_spip('inc/saisies'); if (!$saisie = saisies_chercher($saisies, $colonne)) { return ''; } if (!$demande) { return $saisie['options']; // retourne la description de la saisie... } if (array_key_exists($demande, $saisie['options'])) { return $saisie['options'][$demande]; } return ''; }
/** * Cherche une saisie par son id, son nom ou son chemin et renvoie soit la saisie, soit son chemin * * @param array $saisies Un tableau décrivant les saisies * @param unknown_type $id_ou_nom_ou_chemin L'identifiant ou le nom de la saisie à chercher ou le chemin sous forme d'une liste de clés * @param bool $retourner_chemin Indique si on retourne non pas la saisie mais son chemin * @return array Retourne soit la saisie, soit son chemin, soit null */ function saisies_chercher($saisies, $id_ou_nom_ou_chemin, $retourner_chemin = false) { if (is_array($saisies) and $id_ou_nom_ou_chemin) { if (is_string($id_ou_nom_ou_chemin)) { $nom = $id_ou_nom_ou_chemin; // identifiant ? premier caractere @ $id = $nom[0] == '@'; foreach ($saisies as $cle => $saisie) { $chemin = array($cle); // notre saisie est la bonne ? if ($nom == ($id ? $saisie['identifiant'] : $saisie['options']['nom'])) { return $retourner_chemin ? $chemin : $saisie; // sinon a telle des enfants ? et si c'est le cas, cherchons dedans } elseif (isset($saisie['saisies']) and is_array($saisie['saisies']) and $saisie['saisies'] and $retour = saisies_chercher($saisie['saisies'], $nom, $retourner_chemin)) { return $retourner_chemin ? array_merge($chemin, array('saisies'), $retour) : $retour; } } } elseif (is_array($id_ou_nom_ou_chemin)) { $chemin = $id_ou_nom_ou_chemin; $saisie = $saisies; // On vérifie l'existence quand même foreach ($chemin as $cle) { if (isset($saisie[$cle])) { $saisie = $saisie[$cle]; } else { return null; } } // Si c'est une vraie saisie if ($saisie['saisie'] and $saisie['options']['nom']) { return $retourner_chemin ? $chemin : $saisie; } } } return null; }
/** * Modifie une saisie * * @param array $saisies Un tableau décrivant les saisies * @param unknown_type $id_ou_nom_ou_chemin L'identifiant unique ou le nom ou le chemin de la saisie à modifier * @param array $modifs Le tableau des modifications à apporter à la saisie * @return Retourne le tableau décrivant les saisies, mais modifié */ function saisies_modifier($saisies, $id_ou_nom_ou_chemin, $modifs) { $chemin = saisies_chercher($saisies, $id_ou_nom_ou_chemin, true); $position = array_pop($chemin); $parent =& $saisies; foreach ($chemin as $cle) { $parent =& $parent[$cle]; } // On récupère le type tel quel $modifs['saisie'] = $parent[$position]['saisie']; // On récupère le nom s'il n'y est pas if (!isset($modifs['options']['nom'])) { $modifs['options']['nom'] = $parent[$position]['options']['nom']; } // On récupère les enfants tels quels s'il n'y a pas des enfants dans la modif if (!isset($modifs['saisies']) and isset($parent[$position]['saisies']) and is_array($parent[$position]['saisies'])) { $modifs['saisies'] = $parent[$position]['saisies']; } // Si une option 'nouveau_type_saisie' est donnee, c'est que l'on souhaite // peut être changer le type de saisie ! if (isset($modifs['options']['nouveau_type_saisie']) and $type = $modifs['options']['nouveau_type_saisie']) { $modifs['saisie'] = $type; unset($modifs['options']['nouveau_type_saisie']); } // On remplace tout $parent[$position] = $modifs; // Cette méthode ne marche pas trop //$parent[$position] = array_replace_recursive($parent[$position], $modifs); return $saisies; }
function formidable_generer_saisie_configurable($saisie, $env){ // On récupère le nom $nom = $saisie['options']['nom']; $identifiant = isset($saisie['identifiant']) ? $saisie['identifiant'] : ""; // On cherche si ya un formulaire de config $formulaire_config = isset($env['erreurs']['configurer_'.$nom]) ? $env['erreurs']['configurer_'.$nom] : ""; // On ajoute une classe if (!isset($saisie['options']['conteneur_class'])) { $saisie['options']['conteneur_class'] = ''; // initialisation } // Compat ancien nom li_class if (isset($saisie['options']['li_class'])) { $saisie['options']['conteneur_class'] .= " " . $saisie['options']['li_class']; // initialisation } $saisie['options']['conteneur_class'] .= ' configurable'; // On ajoute l'option "tout_afficher" $saisie['options']['tout_afficher'] = 'oui'; // On ajoute les boutons d'actions, mais seulement s'il n'y a pas de configuration de lancée if (!$env['erreurs']) { $saisie = saisies_inserer_html( $saisie, recuperer_fond( 'formulaires/inc-construire_formulaire-actions', array( 'nom' => $nom, 'identifiant' => $identifiant, 'formulaire_config' => $formulaire_config, 'deplacable' => $env['_chemin_ui'] ) ), 'debut' ); } // On ajoute une ancre pour s'y déplacer $saisie = saisies_inserer_html( $saisie, "\n<a id=\"configurer_$nom\"></a>\n", 'debut' ); // Si ya un form de config on l'ajoute à la fin if (is_array($formulaire_config)){ // On double l'environnement $env2 = $env; // On ajoute une classe $saisie['options']['conteneur_class'] .= ' en_configuration'; // Si possible on met en readonly $saisie['options']['readonly'] = 'oui'; // On vire les sous-saisies s'il y en a if (isset($saisie['saisies']) and $saisie['saisies'] and is_array($saisie['saisies'])){ $nb_champs_masques = count(saisies_lister_champs($saisie['saisies'])); $saisie['saisies'] = array( array( 'saisie' => 'explication', 'options' => array( 'nom' => 'truc', 'texte' => _T('saisies:construire_info_nb_champs_masques', array('nb'=>$nb_champs_masques)), ) ) ); } // On va ajouter le champ pour la position if (!($chemin_description = saisies_chercher($formulaire_config, "saisie_modifiee_${nom}[options][description]", true))){ $chemin_description = array(0); $formulaire_config = saisies_inserer( $formulaire_config, array( 'saisie' => 'fieldset', 'options' => array( 'nom' => "saisie_modifiee_${nom}[options][description]", 'label' => _T('saisies:option_groupe_description') ), 'saisies' => array() ), 0 ); } $chemin_description[] = 'saisies'; $chemin_description[] = '0'; // tout au début $formulaire_config = saisies_inserer( $formulaire_config, array( 'saisie' => 'position_construire_formulaire', 'options' => array( 'nom' => "saisie_modifiee_${nom}[position]", 'label' => _T('saisies:construire_position_label'), 'explication' => _T('saisies:construire_position_explication'), 'formulaire' => $env['_contenu'], 'saisie_a_positionner' => $nom ) ), $chemin_description ); $env2['saisies'] = $formulaire_config; // Un test pour savoir si on prend le _request ou bien $erreurs_test = $env['erreurs']; unset($erreurs_test['configurer_'.$nom]); unset($erreurs_test['positionner']); unset($erreurs_test['message_erreur']); if ($erreurs_test){ // Là aussi on désinfecte à la main if (isset($env2["saisie_modifiee_$nom"]['options']) and is_array($env2["saisie_modifiee_$nom"]['options'])) { spip_desinfecte($env2["saisie_modifiee_$nom"]['options']); } } else{ $env2["saisie_modifiee_$nom"] = $env2['_saisies_par_nom'][$nom]; // il n'y a pas toujours de verification... if (isset($env2["saisie_modifiee_$nom"]['verifier'])) { $env2["saisie_modifiee_$nom"]['verifier'][ $env2["saisie_modifiee_$nom"]['verifier']['type'] ] = $env2["saisie_modifiee_$nom"]['verifier']['options']; } } $env2['fond_generer'] = 'inclure/generer_saisies'; $saisie = saisies_inserer_html( $saisie, '<div class="formulaire_configurer"><'.saisie_balise_structure_formulaire('ul').' class="editer-groupe formulaire_configurer-contenus">' .recuperer_fond( 'inclure/generer_saisies', $env2 ) .'<'.saisie_balise_structure_formulaire('li').' class="boutons"> <input type="hidden" name="enregistrer_saisie" value="'.$nom.'" /> <button type="submit" class="submit link" name="enregistrer_saisie" value="">'._T('bouton_annuler').'</button> <input type="submit" class="submit" name="enregistrer" value="'._T('bouton_valider').'" /> </'.saisie_balise_structure_formulaire('li').'>' .'</'.saisie_balise_structure_formulaire('ul').'></div>', 'fin' ); } // On génère le HTML de la saisie $html = saisies_generer_html($saisie, $env); return $html; }