[SPIP] ~2.1.12 -->2.1.25
[velocampus/web/www.git] / www / ecrire / public / interfaces.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2014 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
8 * *
9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
11 \***************************************************************************/
12
13
14 if (!defined('_ECRIRE_INC_VERSION')) return;
15
16
17 // Definition des noeuds de l'arbre de syntaxe abstraite
18
19 // http://doc.spip.org/@Texte
20 class Texte {
21 var $type = 'texte';
22 var $texte;
23 var $avant, $apres = ""; // s'il y avait des guillemets autour
24 var $ligne = 0;
25 }
26
27 // http://doc.spip.org/@Inclure
28 class Inclure {
29 var $type = 'include';
30 var $texte;
31 var $avant, $apres = ''; // inutilises mais generiques
32 var $ligne = 0;
33 var $param = array(); // valeurs des params
34 }
35
36 //
37 // encodage d'une boucle SPIP en un objet PHP
38 //
39 // http://doc.spip.org/@Boucle
40 class Boucle {
41 var $type = 'boucle';
42 var $id_boucle;
43 var $id_parent ='';
44 var $avant, $milieu, $apres, $altern = '';
45 var $lang_select;
46 var $type_requete;
47 var $table_optionnelle = false; # si ? dans <BOUCLE_x(table ?)>
48 var $sql_serveur = '';
49 var $param = array();
50 var $criteres = array();
51 var $separateur = array();
52 var $jointures = array();
53 var $jointures_explicites = false;
54 var $doublons;
55 var $partie, $total_parties,$mode_partie='';
56 var $externe = ''; # appel a partir d'une autre boucle (recursion)
57 // champs pour la construction de la requete SQL
58 var $select = array();
59 var $from = array();
60 var $from_type = array();
61 var $where = array();
62 var $join = array();
63 var $having = array();
64 var $limit;
65 var $group = array();
66 var $order = array();
67 var $default_order = array();
68 var $date = 'date' ;
69 var $hash = "" ;
70 var $in = "" ;
71 var $sous_requete = false;
72 var $hierarchie = '';
73 var $statut = false; # definition/surcharge du statut des elements retournes
74 // champs pour la construction du corps PHP
75 var $show = array();
76 var $id_table;
77 var $primary;
78 var $return;
79 var $numrows = false;
80 var $cptrows = false;
81 var $ligne = 0;
82 var $descr = array(); # noms des fichiers source et but etc
83
84 var $modificateur = array(); // table pour stocker les modificateurs de boucle tels que tout, plat ..., utilisable par les plugins egalement
85
86 // obsoletes, conserves provisoirement pour compatibilite
87 var $tout = false;
88 var $plat = false;
89 var $lien = false;
90 }
91
92 // sous-noeud du precedent
93
94 // http://doc.spip.org/@Critere
95 class Critere {
96 var $op;
97 var $not;
98 var $exclus;
99 var $param = array();
100 var $ligne = 0;
101 }
102
103 // http://doc.spip.org/@Champ
104 class Champ {
105 var $type = 'champ';
106 var $nom_champ;
107 var $nom_boucle= ''; // seulement si boucle explicite
108 var $avant, $apres; // tableaux d'objets
109 var $etoile;
110 var $param = array(); // filtre explicites
111 var $fonctions = array(); // source des filtres (compatibilite)
112 // champs pour la production de code
113 var $id_boucle;
114 var $boucles;
115 var $type_requete;
116 // resultat de la compilation: toujours une expression PHP.
117 // Chaine vide comme valeur par defaut (pour balise indefinie etc)
118 var $code = '';
119 var $interdire_scripts = true; // false si on est sur de cette balise
120 // tableau pour la production de code dependant du contexte
121 // id_mere; pour TOTAL_BOUCLE hors du corps
122 // document; pour embed et img dans les textes
123 // sourcefile; pour DOSSIER_SQUELETTE
124 var $descr = array();
125 // pour localiser les erreurs
126 var $ligne = 0;
127 }
128
129
130 // http://doc.spip.org/@Idiome
131 class Idiome {
132 var $type = 'idiome';
133 var $nom_champ = ""; // la chaine a traduire
134 var $module = ""; // son module de definition
135 var $arg = array(); // les arguments a passer a la chaine
136 var $param = array(); // les filtres a appliquer au resultat
137 var $fonctions = array(); // source des filtres (compatibilite)
138 var $avant, $apres; // inutilises mais faut = ci-dessus
139 // champs pour la production de code, cf ci-dessus
140 var $id_boucle;
141 var $boucles;
142 var $type_requete;
143 // resultat de la compilation: toujours une expression PHP.
144 // Chaine vide comme valeur par defaut (n'arrive pas normalement)
145 var $code = '';
146 var $interdire_scripts = false;
147 var $descr = array();
148 var $ligne = 0;
149 }
150
151 // http://doc.spip.org/@Polyglotte
152 class Polyglotte {
153 var $type = 'polyglotte';
154 var $traductions = array(); // les textes ou choisir
155 var $ligne = 0;
156 }
157
158 // Une structure necessaire au traitement d'erreur a l'execution
159 // Le champ code est inutilise, mais harmonise le traitement d'erreurs.
160 class Contexte {
161 var $descr = array();
162 var $id_boucle = '';
163 var $ligne = 0;
164 var $lang = '';
165 var $code = '';
166 }
167
168 global $table_criteres_infixes;
169 $table_criteres_infixes = array('<', '>', '<=', '>=', '==', '===', '!=', '!==', '<>', '?');
170
171 global $exception_des_connect;
172 $exception_des_connect[] = ''; // ne pas transmettre le connect='' par les inclure
173 //
174 // Globales de description de la base
175
176 //ces variables ne sont pas initialisees par "$var = array()"
177 // afin de permettre leur extension dans mes_options.php etc
178
179 // http://doc.spip.org/@declarer_interfaces
180 function declarer_interfaces(){
181 global $exceptions_des_tables, $table_des_tables, $table_date, $table_titre;
182
183 $table_des_tables['articles']='articles';
184 $table_des_tables['auteurs']='auteurs';
185 $table_des_tables['breves']='breves';
186 $table_des_tables['forums']='forum';
187 $table_des_tables['signatures']='signatures';
188 $table_des_tables['documents']='documents';
189 $table_des_tables['types_documents']='types_documents';
190 $table_des_tables['mots']='mots';
191 $table_des_tables['groupes_mots']='groupes_mots';
192 $table_des_tables['rubriques']='rubriques';
193 $table_des_tables['syndication']='syndic';
194 $table_des_tables['syndic']='syndic';
195 $table_des_tables['syndic_articles']='syndic_articles';
196 $table_des_tables['hierarchie']='rubriques';
197 $table_des_tables['messages']='messages';
198 $table_des_tables['petitions']='petitions';
199
200 $exceptions_des_tables['breves']['id_secteur']='id_rubrique';
201 $exceptions_des_tables['breves']['date']='date_heure';
202 $exceptions_des_tables['breves']['nom_site']='lien_titre';
203 $exceptions_des_tables['breves']['url_site']='lien_url';
204
205 $exceptions_des_tables['forums']['date']='date_heure';
206 $exceptions_des_tables['forums']['nom']='auteur';
207 $exceptions_des_tables['forums']['email']='email_auteur';
208
209 $exceptions_des_tables['signatures']['date']='date_time';
210 $exceptions_des_tables['signatures']['nom']='nom_email';
211 $exceptions_des_tables['signatures']['email']='ad_email';
212
213 $exceptions_des_tables['documents']['type_document']=array('types_documents'
214 , 'titre');
215 $exceptions_des_tables['documents']['extension_document']=array('types_documents', 'extension');
216 $exceptions_des_tables['documents']['mime_type']=array('types_documents'
217 , 'mime_type');
218
219 # ne sert plus ? verifier balise_URL_ARTICLE
220 $exceptions_des_tables['syndic_articles']['url_article']='url';
221 # ne sert plus ? verifier balise_LESAUTEURS
222 $exceptions_des_tables['syndic_articles']['lesauteurs']='lesauteurs';
223 $exceptions_des_tables['syndic_articles']['url_site']=array('syndic', 'url_site');
224 $exceptions_des_tables['syndic_articles']['nom_site']=array('syndic', 'nom_site');
225
226 $table_titre['mots']= "titre, '' AS lang";
227 $table_titre['breves']= 'titre , lang';
228 $table_titre['articles']= 'titre, lang';
229 $table_titre['rubriques']= 'titre, lang';
230 $table_titre['forums']= "titre, '' AS lang";
231 $table_titre['messages']= "titre, '' AS lang";
232 $table_titre['auteurs']= "nom AS titre, '' AS lang";
233 $table_titre['site']= "nom_site AS titre, '' AS lang";
234 $table_titre['syndic']= "nom_site AS titre, '' AS lang";
235 $table_titre['documents']= "titre, fichier AS surnom, '' AS lang";
236
237 $table_date['articles']='date';
238 $table_date['auteurs']='date';
239 $table_date['breves']='date_heure';
240 $table_date['forums']='date_heure';
241 $table_date['signatures']='date_time';
242 $table_date['documents']='date';
243 $table_date['types_documents']='date';
244 $table_date['groupes_mots']='date';
245 $table_date['mots']='date';
246 $table_date['rubriques']='date';
247 $table_date['syndication']='date';
248 $table_date['syndic_articles']='date';
249
250 //
251 // tableau des tables de jointures
252 // Ex: gestion du critere {id_mot} dans la boucle(ARTICLES)
253
254 global $tables_jointures;
255
256 $tables_jointures['spip_articles'][]= 'mots_articles';
257 $tables_jointures['spip_articles']['id_auteur']= 'auteurs_articles';
258 $tables_jointures['spip_articles'][]= 'documents_liens';
259 $tables_jointures['spip_articles'][]= 'mots';
260 $tables_jointures['spip_articles'][]= 'signatures';
261 $tables_jointures['spip_articles'][]= 'petitions';
262
263 $tables_jointures['spip_auteurs'][]= 'auteurs_articles';
264
265 $tables_jointures['spip_breves'][]= 'mots_breves';
266 $tables_jointures['spip_breves'][]= 'documents_liens';
267 $tables_jointures['spip_breves'][]= 'mots';
268
269 $tables_jointures['spip_documents'][]= 'documents_liens';
270 $tables_jointures['spip_documents'][]= 'mots_documents';
271 $tables_jointures['spip_documents'][]= 'types_documents';
272 $tables_jointures['spip_documents'][]= 'mots';
273
274 $tables_jointures['spip_forum'][]= 'mots_forum';
275 $tables_jointures['spip_forum'][]= 'mots';
276 $tables_jointures['spip_forum'][]= 'documents_liens';
277
278 $tables_jointures['spip_rubriques'][]= 'mots_rubriques';
279 $tables_jointures['spip_rubriques'][]= 'documents_liens';
280 $tables_jointures['spip_rubriques'][]= 'mots';
281
282 $tables_jointures['spip_syndic'][]= 'mots_syndic';
283 $tables_jointures['spip_syndic'][]= 'mots';
284
285 $tables_jointures['spip_syndic_articles'][]= 'syndic';
286 $tables_jointures['spip_syndic_articles'][]= 'mots_syndic';
287 $tables_jointures['spip_syndic_articles'][]= 'mots';
288
289 $tables_jointures['spip_mots'][]= 'mots_articles';
290 $tables_jointures['spip_mots'][]= 'mots_breves';
291 $tables_jointures['spip_mots'][]= 'mots_forum';
292 $tables_jointures['spip_mots'][]= 'mots_rubriques';
293 $tables_jointures['spip_mots'][]= 'mots_syndic';
294 $tables_jointures['spip_mots'][]= 'mots_documents';
295
296 $tables_jointures['spip_groupes_mots'][]= 'mots';
297
298
299 global $exceptions_des_jointures;
300 $exceptions_des_jointures['titre_mot'] = array('spip_mots', 'titre');
301 $exceptions_des_jointures['type_mot'] = array('spip_mots', 'type');
302 $exceptions_des_jointures['id_mot_syndic']= array('spip_mots_syndic','id_mot');
303 $exceptions_des_jointures['titre_mot_syndic']= array('spip_mots','titre');
304 $exceptions_des_jointures['type_mot_syndic']= array('spip_mots','type');
305 $exceptions_des_jointures['petition'] = array('spip_petitions', 'texte');
306 $exceptions_des_jointures['id_signature']= array('spip_signatures', 'id_signature');
307
308 global $table_des_traitements;
309
310 define('_TRAITEMENT_TYPO', 'typo(%s, "TYPO", $connect)');
311 define('_TRAITEMENT_RACCOURCIS', 'propre(%s, $connect)');
312
313 $table_des_traitements['BIO'][]= _TRAITEMENT_RACCOURCIS;
314 $table_des_traitements['CHAPO'][]= _TRAITEMENT_RACCOURCIS;
315 $table_des_traitements['DATE'][]= 'normaliser_date(%s)';
316 $table_des_traitements['DATE_REDAC'][]= 'normaliser_date(%s)';
317 $table_des_traitements['DATE_MODIF'][]= 'normaliser_date(%s)';
318 $table_des_traitements['DATE_NOUVEAUTES'][]= 'normaliser_date(%s)';
319 $table_des_traitements['DESCRIPTIF'][]= _TRAITEMENT_RACCOURCIS;
320 $table_des_traitements['FICHIER']['documents']= 'get_spip_doc(%s)';
321 $table_des_traitements['INTRODUCTION'][]= 'PtoBR('. _TRAITEMENT_RACCOURCIS .')';
322 $table_des_traitements['LIEN_TITRE'][]= _TRAITEMENT_TYPO;
323 $table_des_traitements['LIEN_URL'][]= 'vider_url(%s)';
324 $table_des_traitements['MESSAGE'][]= _TRAITEMENT_RACCOURCIS;
325 $table_des_traitements['NOM_SITE_SPIP'][]= _TRAITEMENT_TYPO;
326 $table_des_traitements['NOM_SITE'][]= _TRAITEMENT_TYPO;
327 $table_des_traitements['NOM'][]= _TRAITEMENT_TYPO;
328 $table_des_traitements['AUTEUR'][]= _TRAITEMENT_TYPO;
329 $table_des_traitements['PARAMETRES_FORUM'][]= 'htmlspecialchars(%s)';
330 $table_des_traitements['PS'][]= _TRAITEMENT_RACCOURCIS;
331 $table_des_traitements['SOURCE'][]= _TRAITEMENT_TYPO;
332 $table_des_traitements['SOUSTITRE'][]= _TRAITEMENT_TYPO;
333 $table_des_traitements['SURTITRE'][]= _TRAITEMENT_TYPO;
334 $table_des_traitements['TAGS'][]= '%s';
335 $table_des_traitements['TEXTE'][]= _TRAITEMENT_RACCOURCIS;
336 $table_des_traitements['TITRE'][]= _TRAITEMENT_TYPO;
337 $table_des_traitements['TYPE'][]= _TRAITEMENT_TYPO;
338 $table_des_traitements['DESCRIPTIF_SITE_SPIP'][]= _TRAITEMENT_RACCOURCIS;
339 $table_des_traitements['ENV'][]= 'entites_html(%s,true)';
340
341 $table_des_traitements['TEXTE']['forums']= "safehtml("._TRAITEMENT_RACCOURCIS.")";
342 $table_des_traitements['TITRE']['forums']= "safehtml("._TRAITEMENT_TYPO.")";
343 $table_des_traitements['NOTES']['forums']= "safehtml("._TRAITEMENT_RACCOURCIS.")";
344 $table_des_traitements['NOM_SITE']['forums']= "safehtml("._TRAITEMENT_TYPO.")";
345 $table_des_traitements['URL_SITE']['forums']= 'safehtml(vider_url(%s))';
346 $table_des_traitements['AUTEUR']['forums']= 'safehtml(vider_url(%s))';
347 $table_des_traitements['EMAIL_AUTEUR']['forums']= 'safehtml(vider_url(%s))';
348
349 // gerer les sauts de ligne dans les textes des forums
350 $table_des_traitements['TEXTE']['forums'] =
351 str_replace('%s', 'post_autobr(%s)',
352 $table_des_traitements['TEXTE']['forums']
353 );
354
355
356 // Articles syndiques : passage des donnees telles quelles, sans traitement typo
357 // A noter, dans applique_filtres la securite et conformite XHTML de ces champs
358 // est assuree par safehtml()
359 foreach(array('TITRE','DESCRIPTIF','SOURCE') as $balise)
360 if (!isset($table_des_traitements[$balise]['syndic_articles']))
361 $table_des_traitements[$balise]['syndic_articles'] = '%s';
362
363 // gerer l'affectation en 2 temps car si le pipe n'est pas encore declare, on ecrase les globales
364 $interfaces = pipeline('declarer_tables_interfaces',
365 array(
366 'table_des_tables'=>$table_des_tables,
367 'exceptions_des_tables'=>$exceptions_des_tables,
368 'table_date'=>$table_date,
369 'table_titre'=>$table_titre,
370 'tables_jointures'=>$tables_jointures,
371 'exceptions_des_jointures'=>$exceptions_des_jointures,
372 'table_des_traitements'=>$table_des_traitements,
373 ));
374 if ($interfaces){
375 $table_des_tables = $interfaces['table_des_tables'];
376 $exceptions_des_tables = $interfaces['exceptions_des_tables'];
377 $table_date = $interfaces['table_date'];
378 $table_titre = $interfaces['table_titre'];
379 $tables_jointures = $interfaces['tables_jointures'];
380 $exceptions_des_jointures = $interfaces['exceptions_des_jointures'];
381 $table_des_traitements = $interfaces['table_des_traitements'];
382 }
383 }
384
385 declarer_interfaces();
386
387 ?>