/** * Ajouter les champs extras sur la visualisation de l'objet * * S'il y a des champs extras sur l'objet, la fonction les ajoute * à la vue de l'objet, en enlevant les saisies que la personne n'a * pas l'autorisation de voir. * * @pipeline afficher_contenu_objet * @param array $flux Données du pipeline * @return array Données du pipeline **/ function cextras_afficher_contenu_objet($flux) { // recuperer les saisies de l'objet en cours $objet = $flux['args']['type']; include_spip('inc/cextras'); if ($saisies = champs_extras_objet($table = table_objet_sql($objet))) { // ajouter au contexte les noms et valeurs des champs extras $saisies_sql = champs_extras_saisies_lister_avec_sql($saisies); $valeurs = sql_fetsel(array_keys($saisies_sql), $table, id_table_objet($table) . '=' . sql_quote($flux['args']['id_objet'])); if (!$valeurs) { $valeurs = array(); } else { // on applique les eventuels traitements definis // /!\ La saisies-vues/_base applique |propre par defaut si elle ne trouve pas de saisie // Dans ce cas, certains traitements peuvent être effectués 2 fois ! $saisies_traitees = saisies_lister_avec_traitements($saisies_sql); unset($saisies_sql); // Fournir $connect et $Pile[0] au traitement si besoin (l'evil eval) $connect = ''; $Pile = array(0 => isset($flux['args']['contexte']) ? $flux['args']['contexte'] : array()); foreach ($saisies_traitees as $saisie) { $traitement = $saisie['options']['traitements']; $traitement = defined($traitement) ? constant($traitement) : $traitement; $nom = $saisie['options']['nom']; list($avant, $apres) = explode('%s', $traitement); eval('$val = ' . $avant . ' $valeurs[$nom] ' . $apres . ';'); $valeurs[$nom] = $val; } } $contexte = isset($flux['args']['contexte']) ? $flux['args']['contexte'] : array(); $contexte = array_merge($contexte, $valeurs); // restreindre la vue selon les autorisations $saisies = champs_extras_autorisation('voir', $objet, $saisies, $flux['args']); // ajouter les vues $flux['data'] .= recuperer_fond('inclure/voir_saisies', array_merge($contexte, array('saisies' => $saisies, 'valeurs' => $valeurs))); } return $flux; }
/** * Déclarer les nouvelles infos sur les champs extras ajoutés * en ce qui concerne les traitements automatiques sur les balises. * * @pipeline declarer_tables_interfaces * @param array $interfaces * Déclarations d'interface pour le compilateur * @return array * Déclarations d'interface pour le compilateur **/ function cextras_declarer_tables_interfaces($interfaces) { include_spip('inc/cextras'); include_spip('inc/saisies'); // si saisies a ete supprime par ftp, on sort tranquilou sans tuer SPIP. // champs extras sera ensuite desactive par admin plugins. if (!function_exists('saisies_lister_avec_sql')) { return $tables; } // recuperer les champs crees par les plugins $saisies_tables = pipeline('declarer_champs_extras', array()); if (!$saisies_tables) { return $interfaces; } foreach ($saisies_tables as $table => $saisies) { $saisies = champs_extras_saisies_lister_avec_sql($saisies); $saisies = saisies_lister_avec_traitements($saisies); foreach ($saisies as $saisie) { $traitement = $saisie['options']['traitements']; $balise = strtoupper($saisie['options']['nom']); // definir if (!isset($interfaces['table_des_traitements'][$balise])) { $interfaces['table_des_traitements'][$balise] = array(); } // le traitement peut etre le nom d'un define $traitement = defined($traitement) ? constant($traitement) : $traitement; // SPIP 3 permet de declarer par la table sql directement. $interfaces['table_des_traitements'][$balise][$table] = $traitement; } } // ajouter les champs au tableau spip return $interfaces; }