[SPIP] +2.1.12
[velocampus/web/www.git] / www / ecrire / public / styliser.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2011 *
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 // Ce fichier doit imperativement definir la fonction ci-dessous:
17
18 // Actuellement tous les squelettes se terminent par .html
19 // pour des raisons historiques, ce qui est trompeur
20
21 // http://doc.spip.org/@public_styliser_dist
22 function public_styliser_dist($fond, $contexte, $lang='', $connect='', $ext='html') {
23
24 // s'assurer que le fond et licite
25 // car il peut etre construit a partir d'une variable d'environnement
26 if (strpos($fond,"../")!==false OR strncmp($fond,'/',1)==0)
27 $fond = "404";
28
29 // Choisir entre $fond-dist.html, $fond=7.html, etc?
30 $id_rubrique = 0;
31 // Chercher le fond qui va servir de squelette
32 if ($r = quete_rubrique_fond($contexte))
33 list($id_rubrique, $lang) = $r;
34
35 // trouver un squelette du nom demande
36 // ne rien dire si on ne trouve pas,
37 // c'est l'appelant qui sait comment gerer la situation
38 $base = find_in_path("$fond.$ext");
39
40 // supprimer le ".html" pour pouvoir affiner par id_rubrique ou par langue
41 $squelette = substr($base, 0, - strlen(".$ext"));
42
43 // pipeline styliser
44 $squelette = pipeline('styliser', array(
45 'args' => array(
46 'id_rubrique' => $id_rubrique,
47 'ext' => $ext,
48 'fond' => $fond,
49 'lang' => $lang,
50 'contexte' => $contexte, // le style d'un objet peut dependre de lui meme
51 'connect' => $connect
52 ),
53 'data' => $squelette,
54 ));
55
56 return array($squelette, $ext, $ext, "$squelette.$ext");
57 }
58
59
60 /*
61 * Options de recherche de squelette par le styliseur, appele par le pipeline 'styliser' :
62 * Squelette par rubrique squelette-XX.html ou squelette=XX.html
63 */
64 function styliser_par_rubrique($flux) {
65
66 // uniquement si un squelette a ete trouve
67 if ($squelette = $flux['data']) {
68 $ext = $flux['args']['ext'];
69
70 // On selectionne, dans l'ordre :
71 // fond=10
72 if ($id_rubrique = $flux['args']['id_rubrique']) {
73 $f = "$squelette=$id_rubrique";
74 if (@file_exists("$f.$ext"))
75 $squelette = $f;
76 else {
77 // fond-10 fond-<rubriques parentes>
78 do {
79 $f = "$squelette-$id_rubrique";
80 if (@file_exists("$f.$ext")) {
81 $squelette = $f;
82 break;
83 }
84 } while ($id_rubrique = quete_parent($id_rubrique));
85 }
86 // sauver le squelette
87 $flux['data'] = $squelette;
88 }
89 }
90
91 return $flux;
92 }
93
94 /*
95 * Options de recherche de squelette par le styliseur, appele par le pipeline 'styliser' :
96 * Squelette par langue squelette.en.html
97 */
98 function styliser_par_langue($flux) {
99
100 // uniquement si un squelette a ete trouve
101 if ($squelette = $flux['data']) {
102 $ext = $flux['args']['ext'];
103
104 // Affiner par lang
105 if ($lang = $flux['args']['lang']) {
106 $l = lang_select($lang);
107 $f = "$squelette.".$GLOBALS['spip_lang'];
108 if ($l) lang_select();
109 if (@file_exists("$f.$ext")) {
110 // sauver le squelette
111 $flux['data'] = $f;
112 }
113 }
114 }
115
116 return $flux;
117 }
118
119 // Calcul de la rubrique associee a la requete
120 // (selection de squelette specifique par id_rubrique & lang)
121
122 // http://doc.spip.org/@quete_rubrique_fond
123 function quete_rubrique_fond($contexte) {
124
125 if (isset($contexte['id_rubrique'])
126 AND $id = intval($contexte['id_rubrique'])
127 AND $row = quete_parent_lang('spip_rubriques',$id)) {
128 $lang = isset($row['lang']) ? $row['lang'] : '';
129 return array ($id, $lang);
130 }
131
132 if (isset($contexte['id_breve'])
133 AND $id = intval($contexte['id_breve'])
134 AND $row = quete_parent_lang('spip_breves',$id)
135 AND $id_rubrique_fond = $row['id_rubrique']) {
136 $lang = isset($row['lang']) ? $row['lang'] : '';
137 return array($id_rubrique_fond, $lang);
138 }
139
140 if (isset($contexte['id_syndic'])
141 AND $id = intval($contexte['id_syndic'])
142 AND $row = quete_parent_lang('spip_syndic',$id)
143 AND $id_rubrique_fond = $row['id_rubrique']
144 AND $row = quete_parent_lang('spip_rubriques',$id_rubrique_fond)) {
145 $lang = isset($row['lang']) ? $row['lang'] : '';
146 return array($id_rubrique_fond, $lang);
147 }
148
149 if (isset($contexte['id_article'])
150 AND $id = intval($contexte['id_article'])
151 AND $row = quete_parent_lang('spip_articles',$id)
152 AND $id_rubrique_fond = $row['id_rubrique']) {
153 $lang = isset($row['lang']) ? $row['lang'] : '';
154 return array($id_rubrique_fond, $lang);
155 }
156 }
157 ?>