Changeset 90008 in spip-zone


Ignore:
Timestamp:
Jun 7, 2015, 9:19:27 PM (6 years ago)
Author:
tetue@…
Message:

La balise #TITRE_PARENT s'utilise désormais aussi dans une boucle BREVES pour afficher la rubrique parente, et dans une boucle MOTS, pour afficher le groupe parent, par reprise de http://zone.spip.org/trac/spip-zone/browser/_plugins_/couteau_suisse/outils/titre_parent_fonctions.php

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/titre_parent/trunk/titre_parent_fonctions.php

    r90004 r90008  
    11<?php
     2// filtre 'titre_rubrique' a utiliser sur #ID_RUBRIQUE d'un objet ou #ID_PARENT d'une rubrique
     3// Ex :  : <BOUCLE_a(ARTICLES)>[(#ID_RUBRIQUE|titre_rubrique)]</BOUCLE_a>
     4// Ex :  : <BOUCLE_b(BREVES)>[(#ID_RUBRIQUE|titre_rubrique)]</BOUCLE_b>
     5// Ex :  : <BOUCLE_r(RUBRIQUES)>[(#ID_PARENT|titre_rubrique)]</BOUCLE_r>
     6//
     7// filtre 'titre_groupe' a utiliser sur #ID_GROUPE d'un mot-clef
     8// Ex :  : <BOUCLE_m(MOTS)>[(#ID_GROUPE|titre_groupe)]</BOUCLE_m>
     9if(defined('_SPIP19300')) {
     10        function filtre_titre_rubrique($id_rubrique, $table='rubriques', $id='id_rubrique') {
     11                return cs_titre_id($id_rubrique, $table, $id);
     12        }
     13        function filtre_titre_groupe($id_mot, $table='groupes_mots', $id='id_groupe') {
     14                return cs_titre_id($id_mot, $table, $id);
     15        }
     16} else {
     17        function titre_rubrique($id_rubrique, $table='rubriques', $id='id_rubrique') {
     18                return cs_titre_id($id_rubrique, $table, $id);
     19        }
     20        function titre_groupe($id_mot, $table='groupes_mots', $id='id_groupe') {
     21                return cs_titre_id($id_mot, $table, $id);
     22        }
     23}
    224
    3 // Le filtre [(#ID_RUBRIQUE|titre_parent)]
    4 function titre_parent($id_rubrique) {
    5         $fetch = function_exists('sql_fetch') ? 'sql_fetch' : 'spip_fetch_array';
    6         if(!($id_rubrique = intval($id_rubrique))) return '';
    7         $q = 'SELECT titre FROM spip_rubriques WHERE id_rubrique='.$id_rubrique;
    8         if($r = spip_query($q))
    9                 if($row = $fetch($r))
    10                         return $row['titre'];
     25// filtre 'titre_id', s'applique aux #ID_OBJET
     26// Renvoie le titre trouve dans la $table_parent, la ou $champ_id = $id
     27function cs_titre_id($id, $table_parent='rubriques', $champ_id='id_rubrique') {
     28// spip_log("#TITRE_PARENT SELECTED FROM spip_$table_parent WHERE $champ_id=$id".(!$id?' : requete non executee':''));
     29        // retour nul si pas de parent a priori
     30        if(!$id) return '';
     31        return cs_titre_sql($table_parent, "$champ_id=$id");
     32}
     33
     34// choix du champ qui correspond a un titre
     35function cs_titre_champ($table) {
     36        return $table=='auteurs'?'nom':'titre';
     37}
     38
     39// cherche le titre/nom d'un objet en base
     40function cs_titre_sql($table, $where) {
     41        $titre = cs_titre_champ($table);
     42        // Utiliser la bonne requete en fonction de la version de SPIP
     43        if(function_exists('sql_getfetsel') && function_exists('table_objet_sql')) {
     44                // SPIP 2.0
     45                if($r = sql_getfetsel($titre, table_objet_sql($table), $where))
     46                        return $r;
     47        } else {
     48                if($r = spip_query("SELECT $titre FROM spip_$table WHERE $where"))
     49                        // s'il existe un champ, on le retourne
     50                        if($row = spip_fetch_array($r)) return $row[$titre];
     51        }
     52        // sinon, rien !
    1153        return '';
    1254}
    1355
    14 // La balise
     56// Rubrique parente de tout objet possedant un 'id_rubrique' ou groupe de mot-clef
    1557function balise_TITRE_PARENT_dist($p) {
    16         $id_rubrique = champ_sql('id_rubrique', $p);
    17         $p->code = "titre_parent(".$id_rubrique.")";
     58        // examen du contexte
     59        switch ($p->type_requete) {
     60                case 'rubriques':
     61                        $table_parent = 'rubriques';
     62                        $champ_parent = 'id_rubrique';
     63                        $id = 'id_parent';
     64                        break;
     65                case 'mots':
     66                        $table_parent = 'groupes_mots';
     67                        $id = $champ_parent = 'id_groupe';
     68                        break;
     69                default:
     70                        $table_parent = 'rubriques';
     71                        $id = $champ_parent = 'id_rubrique';
     72                        break;
     73        }
     74        // id de l'objet a trouver pour retourner son titre
     75        $id = champ_sql($id, $p);
     76        // le code php a executer
     77        $p->code = "cs_titre_id(intval($id), '$table_parent', '$champ_parent')";
     78        $p->interdire_scripts = false;
    1879        return $p;
    1980}
    2081
    21 // Positionner les filtres standards en recopiant ceux de #TITRE
    22 // attention, ca ne positionne pas la langue_typo (mais tant pis)
     82// juste le groupe d'un mot-clef
     83function balise_TITRE_GROUPE_dist($p) {
     84        $p->code = "''";
     85        $p->interdire_scripts = false;
     86        return $p->type_requete=='mots'?balise_TITRE_PARENT_dist($p):$p;
     87}
     88
     89if(defined('_SPIP19300') && defined('_PARENTS_ETENDUS')) {
     90
     91        // recherche de la table associee a l'objet
     92        function cs_table_objet($objet) {
     93                switch($objet) {
     94                        case 'trad': return 'articles';
     95                        case 'thread': /*case 'forum':*/ return 'forum';
     96                        case 'secteur': return 'rubriques';
     97#                       case 'import': return ''; // a quoi ca sert ?
     98                }
     99                return table_objet($objet);
     100        }
     101       
     102        // balise #TITRE_QQCHOSE
     103        // voire #TITRE_QQCHOSE{id_qqchose}
     104        function balise_TITRE__dist($p) {
     105                $champ = $p->nom_champ;
     106                if ($f = charger_fonction($champ, 'balise', true))
     107                        return $f($p);
     108                $code = champ_sql($champ, $p);
     109                if (strpos($code, '@$Pile[0]') !== false) {
     110                        // le champ est absent de la base, on peut calculer la balise
     111                        preg_match(",^TITRE_([A-Z_]+)?$,i", $champ, $regs);
     112                        $objet = strtolower($regs[1]);
     113                        $table = cs_table_objet($objet);
     114                        $champ_parent = id_table_objet($table);
     115                        // id de l'objet a trouver pour retourner son titre
     116                        $id = ($v = interprete_argument_balise(1,$p))!==NULL ? $v : champ_sql('id_'.$objet, $p);
     117                        // le code php a executer, avant de le passer aux traitements
     118                        $p->code = cs_titre_traitements("cs_titre_id(intval($id), '$table', '$champ_parent')", $table);
     119                } else
     120                        // puisque le champ est present dans la base, on le renvoie
     121                        $p->code = champ_sql($champ, $p);
     122                $p->interdire_scripts = false;
     123                return $p;
     124        }
     125
     126        // voir la fonction champs_traitements($p) dans : public/refereces.php
     127        function cs_titre_traitements($code, $table) {
     128                global $table_des_traitements;
     129                $ps = $table_des_traitements[strtoupper(cs_titre_champ($table))];
     130                if (is_array($ps))
     131                        $ps = $ps[isset($ps[$table])?$table:0];
     132                if (!$ps) return $code;
     133                // champs sensibles
     134                if(in_array($table, array('messages', 'forums', 'signatures', 'syndic_articles')))
     135                        $ps = "safehtml($ps)";
     136                // remplacement final
     137                return str_replace('%s', $code, $ps);
     138        }
     139
     140} // if(defined('_SPIP19300'))
     141
    23142include_spip('public/interfaces');
    24143global $table_des_traitements;
    25 if (!isset($table_des_traitements['TITRE_PARENT'])) {
     144
     145// TITRE_PARENT et TITRE_GROUPE sont des TITREs !
     146if (!isset($table_des_traitements['TITRE_PARENT']))
    26147        $table_des_traitements['TITRE_PARENT'] = $table_des_traitements['TITRE'];
    27 }
     148if (!isset($table_des_traitements['TITRE_GROUPE']))
     149        $table_des_traitements['TITRE_GROUPE'] = $table_des_traitements['TITRE'];
     150
     151?>
Note: See TracChangeset for help on using the changeset viewer.