[SPIP] ~maj v2.1.25-->2.1.26
[velocampus/web/www.git] / www / plugins / auto / couteau_suisse / couteau_suisse / outils / titre_parent_fonctions.php
1 <?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>
9 if(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 }
24
25 // filtre 'titre_id', s'applique aux #ID_OBJET
26 // Renvoie le titre trouve dans la $table_parent, la ou $champ_id = $id
27 function 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
35 function cs_titre_champ($table) {
36 return $table=='auteurs'?'nom':'titre';
37 }
38
39 // cherche le titre/nom d'un objet en base
40 function 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 !
53 return '';
54 }
55
56 // Rubrique parente de tout objet possedant un 'id_rubrique' ou groupe de mot-clef
57 function balise_TITRE_PARENT_dist($p) {
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;
79 return $p;
80 }
81
82 // juste le groupe d'un mot-clef
83 function 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
89 if(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
142 include_spip('public/interfaces');
143 global $table_des_traitements;
144
145 // TITRE_PARENT et TITRE_GROUPE sont des TITREs !
146 if (!isset($table_des_traitements['TITRE_PARENT']))
147 $table_des_traitements['TITRE_PARENT'] = $table_des_traitements['TITRE'];
148 if (!isset($table_des_traitements['TITRE_GROUPE']))
149 $table_des_traitements['TITRE_GROUPE'] = $table_des_traitements['TITRE'];
150
151 ?>