/**
 * 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;
}
Exemplo n.º 2
0
/**
 * 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;
}