4 |
david |
1 |
<?php
|
|
|
2 |
|
|
|
3 |
/***************************************************************************\
|
|
|
4 |
* SPIP, Systeme de publication pour l'internet *
|
|
|
5 |
* *
|
|
|
6 |
* Copyright (c) 2001-2005 *
|
|
|
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 |
//
|
|
|
15 |
// Des fonctions diverses utilisees lors du calcul d'une page ; ces fonctions
|
|
|
16 |
// bien pratiques n'ont guere de logique organisationnelle ; elles sont
|
|
|
17 |
// appelees par certaines balises au moment du calcul des pages. (Peut-on
|
|
|
18 |
// trouver un modele de donnees qui les associe physiquement au fichier
|
|
|
19 |
// definissant leur balise ???
|
|
|
20 |
//
|
|
|
21 |
|
|
|
22 |
// ON TROUVERA EN QUEUE DE FICHIER LES FONCTIONS FAISANT DES APPELS SQL
|
|
|
23 |
|
|
|
24 |
|
|
|
25 |
// Ce fichier ne sera execute qu'une fois
|
|
|
26 |
if (defined("_INC_CALCUL_OUTILS")) return;
|
|
|
27 |
define("_INC_CALCUL_OUTILS", "1");
|
|
|
28 |
|
|
|
29 |
// Pour les documents comme pour les logos, le filtre |fichier donne
|
|
|
30 |
// le chemin du fichier apres 'IMG/' ; peut-etre pas d'une purete
|
|
|
31 |
// remarquable, mais a conserver pour compatibilite ascendante.
|
|
|
32 |
// -> http://www.spip.net/fr_article901.html
|
|
|
33 |
function calcule_fichier_logo($on) {
|
|
|
34 |
$r = ereg_replace("^" . _DIR_IMG, "", $on);
|
|
|
35 |
return $r;
|
|
|
36 |
}
|
|
|
37 |
|
|
|
38 |
// Renvoie le code html pour afficher un logo, avec ou sans survol, lien, etc.
|
|
|
39 |
|
|
|
40 |
function affiche_logos($logos, $lien, $align) {
|
|
|
41 |
|
|
|
42 |
list ($arton, $artoff) = $logos;
|
|
|
43 |
|
|
|
44 |
if (!$arton) return $artoff;
|
|
|
45 |
|
|
|
46 |
if ($taille = @getimagesize($arton)) {
|
|
|
47 |
$taille = " ".$taille[3];
|
|
|
48 |
}
|
|
|
49 |
|
|
|
50 |
if ($artoff)
|
|
|
51 |
$mouseover = " onmouseover=\"this.src='$artoff'\" "
|
|
|
52 |
."onmouseout=\"this.src='$arton'\"";
|
|
|
53 |
|
|
|
54 |
$milieu = "<img src=\"$arton\" alt=\"\""
|
|
|
55 |
. ($align ? " align='$align'" : '')
|
|
|
56 |
. $taille
|
|
|
57 |
. $mouseover
|
|
|
58 |
. " style='border-width: 0px;' class='spip_logos' />";
|
|
|
59 |
|
|
|
60 |
return ($lien ? http_href($lien, $milieu) : $milieu);
|
|
|
61 |
}
|
|
|
62 |
|
|
|
63 |
//
|
|
|
64 |
// Retrouver le logo d'un objet (et son survol)
|
|
|
65 |
//
|
|
|
66 |
|
|
|
67 |
function calcule_logo($type, $onoff, $id, $id_rubrique, $ff) {
|
|
|
68 |
include_ecrire('inc_logos.php3');
|
|
|
69 |
|
|
|
70 |
$table_logos = array (
|
|
|
71 |
'ARTICLE' => 'art',
|
|
|
72 |
'AUTEUR' => 'aut',
|
|
|
73 |
'BREVE' => 'breve',
|
|
|
74 |
'MOT' => 'mot',
|
|
|
75 |
'RUBRIQUE' => 'rub',
|
|
|
76 |
'SITE' => 'site'
|
|
|
77 |
);
|
|
|
78 |
$type = $table_logos[$type];
|
|
|
79 |
$nom = strtolower($onoff);
|
|
|
80 |
# attention au cas $id = '0' pour LOGO_SITE_SPIP : utiliser intval()
|
|
|
81 |
while (1) {
|
|
|
82 |
$on = cherche_image_nommee($type . $nom . intval($id));
|
|
|
83 |
if ($on) {
|
|
|
84 |
if ($ff)
|
|
|
85 |
return (array('', "$on[1].$on[2]"));
|
|
|
86 |
else {
|
|
|
87 |
$off = ($onoff != 'ON') ? '' :
|
|
|
88 |
cherche_image_nommee($type . 'off' . $id);
|
|
|
89 |
return array ("$on[0]$on[1].$on[2]",
|
|
|
90 |
($off ? ("$off[0]$off[1].$off[2]") : ''));
|
|
|
91 |
}
|
|
|
92 |
}
|
|
|
93 |
else if ($id_rubrique) {
|
|
|
94 |
$type = 'rub';
|
|
|
95 |
$id = $id_rubrique;
|
|
|
96 |
$id_rubrique = 0;
|
|
|
97 |
} else if ($id AND $type == 'rub')
|
|
|
98 |
$id = sql_parent($id);
|
|
|
99 |
else return array('','');
|
|
|
100 |
}
|
|
|
101 |
}
|
|
|
102 |
|
|
|
103 |
//
|
|
|
104 |
// fonction standard de calcul de la balise #INTRODUCTION
|
|
|
105 |
// on peut la surcharger en definissant dans mes_fonctions.php3 :
|
|
|
106 |
// function introduction($type,$texte,$chapo,$descriptif) {...}
|
|
|
107 |
//
|
|
|
108 |
function calcul_introduction ($type, $texte, $chapo='', $descriptif='') {
|
|
|
109 |
if (function_exists("introduction"))
|
|
|
110 |
return introduction ($type, $texte, $chapo, $descriptif);
|
|
|
111 |
|
|
|
112 |
switch ($type) {
|
|
|
113 |
case 'articles':
|
|
|
114 |
if ($descriptif)
|
|
|
115 |
return propre($descriptif);
|
|
|
116 |
else if (substr($chapo, 0, 1) == '=') // article virtuel
|
|
|
117 |
return '';
|
|
|
118 |
else
|
|
|
119 |
return PtoBR(propre(supprimer_tags(couper_intro($chapo."\n\n\n".$texte, 500))));
|
|
|
120 |
break;
|
|
|
121 |
case 'breves':
|
|
|
122 |
return PtoBR(propre(supprimer_tags(couper_intro($texte, 300))));
|
|
|
123 |
break;
|
|
|
124 |
case 'forums':
|
|
|
125 |
return PtoBR(propre(supprimer_tags(couper_intro($texte, 600))));
|
|
|
126 |
break;
|
|
|
127 |
case 'rubriques':
|
|
|
128 |
if ($descriptif)
|
|
|
129 |
return propre($descriptif);
|
|
|
130 |
else
|
|
|
131 |
return PtoBR(propre(supprimer_tags(couper_intro($texte, 600))));
|
|
|
132 |
break;
|
|
|
133 |
}
|
|
|
134 |
}
|
|
|
135 |
|
|
|
136 |
|
|
|
137 |
//
|
|
|
138 |
// Balises dynamiques
|
|
|
139 |
//
|
|
|
140 |
|
|
|
141 |
// elles sont traitees comme des inclusions
|
|
|
142 |
function synthetiser_balise_dynamique($nom, $args, $file, $lang, $ligne) {
|
|
|
143 |
return
|
|
|
144 |
('<'.'?php
|
|
|
145 |
include_ecrire(\'inc_lang.php3\');
|
|
|
146 |
lang_select("'.$lang.'");
|
|
|
147 |
include_local("'
|
|
|
148 |
. $file
|
|
|
149 |
. '");
|
|
|
150 |
inclure_balise_dynamique(balise_'
|
|
|
151 |
. $nom
|
|
|
152 |
. '_dyn(\''
|
|
|
153 |
. join("', '", array_map('texte_script', $args))
|
|
|
154 |
. "'),1, $ligne);
|
|
|
155 |
lang_dselect();
|
|
|
156 |
?"
|
|
|
157 |
.">");
|
|
|
158 |
}
|
|
|
159 |
|
|
|
160 |
// verifier leurs arguments et filtres, et calculer le code a inclure
|
|
|
161 |
function executer_balise_dynamique($nom, $args, $filtres, $lang, $ligne) {
|
|
|
162 |
if ($file = find_in_path('inc-' . strtolower($nom) . _EXTENSION_PHP))
|
|
|
163 |
include_local($file);
|
|
|
164 |
else
|
|
|
165 |
die ("pas de balise dynamique pour #". strtolower($nom)." !");
|
|
|
166 |
|
|
|
167 |
// Y a-t-il une fonction de traitement filtres-arguments ?
|
|
|
168 |
$f = 'balise_' . $nom . '_stat';
|
|
|
169 |
if (function_exists($f))
|
|
|
170 |
$r = $f($args, $filtres);
|
|
|
171 |
else
|
|
|
172 |
$r = $args;
|
|
|
173 |
if (!is_array($r))
|
|
|
174 |
return $r;
|
|
|
175 |
else
|
|
|
176 |
return synthetiser_balise_dynamique($nom, $r, $file, $lang, $ligne);
|
|
|
177 |
}
|
|
|
178 |
|
|
|
179 |
|
|
|
180 |
//
|
|
|
181 |
// FONCTIONS FAISANT DES APPELS SQL
|
|
|
182 |
//
|
|
|
183 |
|
|
|
184 |
# NB : a l'exception des fonctions pour les balises dynamiques
|
|
|
185 |
|
|
|
186 |
function calcul_exposer ($id, $type, $reference) {
|
|
|
187 |
static $exposer;
|
|
|
188 |
static $ref_precedente;
|
|
|
189 |
|
|
|
190 |
// Que faut-il exposer ? Tous les elements de $reference
|
|
|
191 |
// ainsi que leur hierarchie ; on ne fait donc ce calcul
|
|
|
192 |
// qu'une fois (par squelette) et on conserve le resultat
|
|
|
193 |
// en static.
|
|
|
194 |
if ($reference<>$ref_precedente) {
|
|
|
195 |
$ref_precedente = $reference;
|
|
|
196 |
|
|
|
197 |
$exposer = array();
|
|
|
198 |
foreach ($reference as $element=>$id_element) {
|
|
|
199 |
if ($element == 'id_secteur') $element = 'id_rubrique';
|
|
|
200 |
if ($x = table_from_primary($element)) {
|
|
|
201 |
list($table,$hierarchie) = $x;
|
|
|
202 |
$exposer[$element][$id_element] = true;
|
|
|
203 |
if ($hierarchie) {
|
|
|
204 |
list ($id_rubrique) = spip_abstract_fetsel(
|
|
|
205 |
array('id_rubrique'),
|
|
|
206 |
array($table),
|
|
|
207 |
array("$element=$id_element"));
|
|
|
208 |
$hierarchie = substr(calculer_hierarchie($id_rubrique), 2);
|
|
|
209 |
foreach (split(',',$hierarchie) as $id_rubrique)
|
|
|
210 |
$exposer['id_rubrique'][$id_rubrique] = true;
|
|
|
211 |
}
|
|
|
212 |
}
|
|
|
213 |
}
|
|
|
214 |
}
|
|
|
215 |
|
|
|
216 |
// And the winner is...
|
|
|
217 |
return $exposer[$type][$id];
|
|
|
218 |
}
|
|
|
219 |
|
|
|
220 |
function table_from_primary($id) {
|
|
|
221 |
global $tables_principales;
|
|
|
222 |
include_ecrire('inc_serialbase.php3');
|
|
|
223 |
foreach ($tables_principales as $k => $v) {
|
|
|
224 |
if ($v['key']['PRIMARY KEY'] == $id)
|
|
|
225 |
return array($k, array_key_exists('id_rubrique', $v['field']));
|
|
|
226 |
}
|
|
|
227 |
return '';
|
|
|
228 |
}
|
|
|
229 |
|
|
|
230 |
function calcul_generation ($generation) {
|
|
|
231 |
$lesfils = array();
|
|
|
232 |
$result = spip_abstract_select(array('id_rubrique'),
|
|
|
233 |
array('spip_rubriques AS rubriques'),
|
|
|
234 |
array(calcul_mysql_in('id_parent',
|
|
|
235 |
$generation,
|
|
|
236 |
'')));
|
|
|
237 |
while ($row = spip_abstract_fetch($result))
|
|
|
238 |
$lesfils[] = $row['id_rubrique'];
|
|
|
239 |
return join(",",$lesfils);
|
|
|
240 |
}
|
|
|
241 |
|
|
|
242 |
function calcul_branche ($generation) {
|
|
|
243 |
if (!$generation)
|
|
|
244 |
return '0';
|
|
|
245 |
else {
|
|
|
246 |
$branche[] = $generation;
|
|
|
247 |
while ($generation = calcul_generation ($generation))
|
|
|
248 |
$branche[] = $generation;
|
|
|
249 |
return join(",",$branche);
|
|
|
250 |
}
|
|
|
251 |
}
|
|
|
252 |
|
|
|
253 |
// fonction appelee par la balise #LOGO_DOCUMENT
|
|
|
254 |
function calcule_logo_document($id_document, $doubdoc, &$doublons, $flag_fichier, $lien, $align, $params) {
|
|
|
255 |
if (!$id_document) return '';
|
|
|
256 |
if ($doubdoc) $doublons["documents"] .= ','.$id_document;
|
|
|
257 |
|
|
|
258 |
if (!($row = spip_abstract_select(array('id_type', 'id_vignette', 'fichier', 'mode'), array('spip_documents AS documents'), array("id_document = $id_document"))))
|
|
|
259 |
// pas de document. Ne devrait pas arriver
|
|
|
260 |
return '';
|
|
|
261 |
|
|
|
262 |
list($id_type, $id_vignette, $fichier, $mode) = spip_abstract_fetch($row);
|
|
|
263 |
|
|
|
264 |
// Lien par defaut = l'adresse du document
|
|
|
265 |
## if (!$lien) $lien = $fichier;
|
|
|
266 |
|
|
|
267 |
// Y a t il une vignette personnalisee ?
|
|
|
268 |
if ($id_vignette) {
|
|
|
269 |
if ($res = spip_abstract_select(array('fichier'),
|
|
|
270 |
array('spip_documents AS documents'),
|
|
|
271 |
array("id_document = $id_vignette"))) {
|
|
|
272 |
list($vignette) = spip_abstract_fetch($res);
|
|
|
273 |
if (@file_exists($vignette))
|
|
|
274 |
$logo = generer_url_document($id_vignette);
|
|
|
275 |
}
|
|
|
276 |
} else if ($mode == 'vignette') {
|
|
|
277 |
$logo = generer_url_document($id_document);
|
|
|
278 |
if (!@file_exists($logo))
|
|
|
279 |
$logo = '';
|
|
|
280 |
}
|
|
|
281 |
|
|
|
282 |
// taille maximum [(#LOGO_DOCUMENT{300,52})]
|
|
|
283 |
list($x,$y) = split(',', ereg_replace("[}{]", "", $params));
|
|
|
284 |
|
|
|
285 |
|
|
|
286 |
if ($logo AND @file_exists($logo)) {
|
|
|
287 |
if ($x OR $y)
|
|
|
288 |
$logo = reduire_image($logo, $x, $y);
|
|
|
289 |
else {
|
|
|
290 |
$size = @getimagesize($logo);
|
|
|
291 |
$logo = "<img src='$logo' ".$size[3]." />";
|
|
|
292 |
}
|
|
|
293 |
}
|
|
|
294 |
else {
|
|
|
295 |
// Retrouver l'extension
|
|
|
296 |
list($extension) =
|
|
|
297 |
spip_abstract_fetch(spip_abstract_select(array('extension'),
|
|
|
298 |
array('spip_types_documents AS documents'),
|
|
|
299 |
array("id_type = " . intval($id_type))));
|
|
|
300 |
if (!$extension) $extension = 'txt';
|
|
|
301 |
|
|
|
302 |
// Pas de vignette, mais un fichier image -- creer la vignette
|
|
|
303 |
if (strstr(lire_meta('formats_graphiques'), $extension)) {
|
|
|
304 |
if ($img = copie_locale($fichier)
|
|
|
305 |
AND @file_exists($img)) {
|
|
|
306 |
if (!$x AND !$y) {
|
|
|
307 |
$logo = reduire_image($img);
|
|
|
308 |
} else {
|
|
|
309 |
# eviter une double reduction
|
|
|
310 |
$size = @getimagesize($img);
|
|
|
311 |
$logo = "<img src='$img' ".$size[3]." />";
|
|
|
312 |
}
|
|
|
313 |
}
|
|
|
314 |
}
|
|
|
315 |
|
|
|
316 |
// Document sans vignette ni image : vignette par defaut
|
|
|
317 |
if (!$logo) {
|
|
|
318 |
$img = vignette_par_defaut($extension, false);
|
|
|
319 |
$size = @getimagesize($img);
|
|
|
320 |
$logo = "<img src='$img' ".$size[3]." />";
|
|
|
321 |
}
|
|
|
322 |
}
|
|
|
323 |
|
|
|
324 |
// Reduire si une taille precise est demandee
|
|
|
325 |
if ($x OR $y)
|
|
|
326 |
$logo = reduire_image($logo, $x, $y);
|
|
|
327 |
|
|
|
328 |
// flag_fichier : seul le fichier est demande
|
|
|
329 |
if ($flag_fichier)
|
|
|
330 |
# supprimer le IMG/
|
|
|
331 |
return calcule_fichier_logo(extraire_attribut($logo, 'src'));
|
|
|
332 |
|
|
|
333 |
|
|
|
334 |
// Calculer le code html complet (cf. calcule_logo)
|
|
|
335 |
$logo = inserer_attribut($logo, 'alt', '');
|
|
|
336 |
$logo = inserer_attribut($logo, 'style', 'border-width: 0px;');
|
|
|
337 |
$logo = inserer_attribut($logo, 'class', 'spip_logos');
|
|
|
338 |
if ($align)
|
|
|
339 |
$logo = inserer_attribut($logo, 'align', $align);
|
|
|
340 |
|
|
|
341 |
if ($lien)
|
|
|
342 |
$logo = "<a href='$lien'>$logo</a>";
|
|
|
343 |
|
|
|
344 |
return $logo;
|
|
|
345 |
}
|
|
|
346 |
|
|
|
347 |
|
|
|
348 |
// fonction appelee par la balise #EMBED
|
|
|
349 |
function calcule_embed_document($id_document, $filtres, &$doublons, $doubdoc) {
|
|
|
350 |
if ($doubdoc && $id_document) $doublons["documents"] .= ', ' . $id_document;
|
|
|
351 |
return embed_document($id_document, $filtres, false);
|
|
|
352 |
}
|
|
|
353 |
|
|
|
354 |
// les balises dynamiques et EMBED ont des filtres sans arguments
|
|
|
355 |
// car en fait ce sont des arguments pas des filtres.
|
|
|
356 |
// Si le besoin s'en fait sentir, il faudra récuperer la 2e moitie du tableau
|
|
|
357 |
|
|
|
358 |
function argumenter_balise($fonctions, $sep) {
|
|
|
359 |
$res = array();
|
|
|
360 |
if ($fonctions)
|
|
|
361 |
foreach ($fonctions as $f) $res[] =
|
|
|
362 |
str_replace('\'', '\\\'', str_replace('\\', '\\\\',$f[0]));
|
|
|
363 |
return ("'" . join($sep, $res) . "'");
|
|
|
364 |
}
|
|
|
365 |
|
|
|
366 |
// fonction appelee par la balise #NOTES
|
|
|
367 |
function calculer_notes() {
|
|
|
368 |
$r = $GLOBALS["les_notes"];
|
|
|
369 |
$GLOBALS["les_notes"] = "";
|
|
|
370 |
$GLOBALS["compt_note"] = 0;
|
|
|
371 |
$GLOBALS["marqueur_notes"] ++;
|
|
|
372 |
return $r;
|
|
|
373 |
}
|
|
|
374 |
|
|
|
375 |
# retourne la profondeur d'une rubrique
|
|
|
376 |
|
|
|
377 |
function sql_profondeur($id) {
|
|
|
378 |
$n = 0;
|
|
|
379 |
while ($id) {
|
|
|
380 |
$n++;
|
|
|
381 |
$id = sql_parent($id);
|
|
|
382 |
}
|
|
|
383 |
return $n;
|
|
|
384 |
}
|
|
|
385 |
|
|
|
386 |
|
|
|
387 |
function sql_parent($id_rubrique) {
|
|
|
388 |
$row = spip_abstract_fetsel(array(id_parent),
|
|
|
389 |
array('spip_rubriques'),
|
|
|
390 |
array("id_rubrique=" . intval($id_rubrique)));
|
|
|
391 |
return $row['id_parent'];
|
|
|
392 |
}
|
|
|
393 |
|
|
|
394 |
function sql_rubrique($id_article) {
|
|
|
395 |
$row = spip_abstract_fetsel(array('id_rubrique'),
|
|
|
396 |
array('spip_articles'),
|
|
|
397 |
array("id_article=" . intval($id_article)));
|
|
|
398 |
return $row['id_rubrique'];
|
|
|
399 |
}
|
|
|
400 |
|
|
|
401 |
function sql_auteurs($id_article, $table, $id_boucle, $serveur='') {
|
|
|
402 |
$auteurs = "";
|
|
|
403 |
if ($id_article) {
|
|
|
404 |
$result_auteurs = spip_abstract_select(array('auteurs.nom', 'auteurs.email'),
|
|
|
405 |
array('spip_auteurs AS auteurs',
|
|
|
406 |
'spip_auteurs_articles AS lien'),
|
|
|
407 |
array("lien.id_article=$id_article",
|
|
|
408 |
"auteurs.id_auteur=lien.id_auteur"),
|
|
|
409 |
'',array(),'','',1,
|
|
|
410 |
$table, $id_boucle, $serveur);
|
|
|
411 |
|
|
|
412 |
while($row_auteur = spip_abstract_fetch($result_auteurs, $serveur)) {
|
|
|
413 |
$nom_auteur = typo($row_auteur["nom"]);
|
|
|
414 |
$email_auteur = $row_auteur["email"];
|
|
|
415 |
if ($email_auteur) {
|
|
|
416 |
$auteurs[] = "<a href=\"mailto:$email_auteur\">$nom_auteur</a>";
|
|
|
417 |
} else {
|
|
|
418 |
$auteurs[] = "$nom_auteur";
|
|
|
419 |
}
|
|
|
420 |
}
|
|
|
421 |
}
|
|
|
422 |
return (!$auteurs) ? "" : join($auteurs, ", ");
|
|
|
423 |
}
|
|
|
424 |
|
|
|
425 |
function sql_petitions($id_article, $table, $id_boucle, $serveur, &$Cache) {
|
|
|
426 |
$retour = spip_abstract_fetsel(
|
|
|
427 |
array('texte'),
|
|
|
428 |
array('spip_petitions'),
|
|
|
429 |
array("id_article=".intval($id_article)),
|
|
|
430 |
'',array(),'','',1,
|
|
|
431 |
$table, $id_boucle, $serveur);
|
|
|
432 |
|
|
|
433 |
if (!$retour) return '';
|
|
|
434 |
# cette page est invalidee par toute petition
|
|
|
435 |
$Cache['varia']['pet'.$id_article] = 1;
|
|
|
436 |
# ne pas retourner '' car le texte sert aussi de presence
|
|
|
437 |
return ($retour['texte'] ? $retour['texte'] : ' ');
|
|
|
438 |
}
|
|
|
439 |
|
|
|
440 |
# retourne le chapeau d'un article, et seulement s'il est publie
|
|
|
441 |
|
|
|
442 |
function sql_chapo($id_article) {
|
|
|
443 |
if ($id_article)
|
|
|
444 |
return spip_abstract_fetsel(array('chapo'),
|
|
|
445 |
array('spip_articles'),
|
|
|
446 |
array("id_article=".intval($id_article),
|
|
|
447 |
"statut='publie'"));
|
|
|
448 |
}
|
|
|
449 |
|
|
|
450 |
# retourne le champ 'accepter_forum' d'un article
|
|
|
451 |
function sql_accepter_forum($id_article) {
|
|
|
452 |
static $cache = array();
|
|
|
453 |
|
|
|
454 |
if (!$id_article) return;
|
|
|
455 |
|
|
|
456 |
if (!isset($cache[$id_article])) {
|
|
|
457 |
$row = spip_abstract_fetsel(array('accepter_forum'),
|
|
|
458 |
array('spip_articles'),
|
|
|
459 |
array("id_article=".intval($id_article)));
|
|
|
460 |
$cache[$id_article] = $row['accepter_forum'];
|
|
|
461 |
}
|
|
|
462 |
|
|
|
463 |
return $cache[$id_article];
|
|
|
464 |
}
|
|
|
465 |
|
|
|
466 |
|
|
|
467 |
// Calcul de la rubrique associee a la requete
|
|
|
468 |
// (selection de squelette specifique par id_rubrique & lang)
|
|
|
469 |
|
|
|
470 |
function sql_rubrique_fond($contexte) {
|
|
|
471 |
|
|
|
472 |
if ($id = intval($contexte['id_rubrique'])) {
|
|
|
473 |
$row = spip_abstract_fetsel(array('lang'),
|
|
|
474 |
array('spip_rubriques'),
|
|
|
475 |
array("id_rubrique=$id"));
|
|
|
476 |
if ($row['lang'])
|
|
|
477 |
$lang = $row['lang'];
|
|
|
478 |
return array ($id, $lang);
|
|
|
479 |
}
|
|
|
480 |
|
|
|
481 |
if ($id = intval($contexte['id_breve'])) {
|
|
|
482 |
$row = spip_abstract_fetsel(array('id_rubrique', 'lang'),
|
|
|
483 |
array('spip_breves'),
|
|
|
484 |
array("id_breve=$id"));
|
|
|
485 |
$id_rubrique_fond = $row['id_rubrique'];
|
|
|
486 |
if ($row['lang'])
|
|
|
487 |
$lang = $row['lang'];
|
|
|
488 |
return array($id_rubrique_fond, $lang);
|
|
|
489 |
}
|
|
|
490 |
|
|
|
491 |
if ($id = intval($contexte['id_syndic'])) {
|
|
|
492 |
$row = spip_abstract_fetsel(array('id_rubrique'),
|
|
|
493 |
array('spip_syndic'),
|
|
|
494 |
array("id_syndic=$id"));
|
|
|
495 |
$id_rubrique_fond = $row['id_rubrique'];
|
|
|
496 |
$row = spip_abstract_fetsel(array('lang'),
|
|
|
497 |
array('spip_rubriques'),
|
|
|
498 |
array("id_rubrique='$id_rubrique_fond'"));
|
|
|
499 |
if ($row['lang'])
|
|
|
500 |
$lang = $row['lang'];
|
|
|
501 |
return array($id_rubrique_fond, $lang);
|
|
|
502 |
}
|
|
|
503 |
|
|
|
504 |
if ($id = intval($contexte['id_article'])) {
|
|
|
505 |
$row = spip_abstract_fetsel(array('id_rubrique', 'lang'),
|
|
|
506 |
array('spip_articles'),
|
|
|
507 |
array("id_article=$id"));
|
|
|
508 |
$id_rubrique_fond = $row['id_rubrique'];
|
|
|
509 |
if ($row['lang'])
|
|
|
510 |
$lang = $row['lang'];
|
|
|
511 |
return array($id_rubrique_fond, $lang);
|
|
|
512 |
}
|
|
|
513 |
}
|
|
|
514 |
|
|
|
515 |
// Ajouter "&lang=..." si la langue de base n'est pas celle du site
|
|
|
516 |
function lang_parametres_forum($s) {
|
|
|
517 |
|
|
|
518 |
// ne pas se fatiguer si le site est unilingue (plus rapide)
|
|
|
519 |
if (strstr(lire_meta('langues_utilisees'), ',')
|
|
|
520 |
// chercher l'identifiant qui nous donnera la langue
|
|
|
521 |
AND preg_match(',id_(article|breve|rubrique|syndic)=([0-9]+),', $s, $r)){
|
|
|
522 |
$objet = $r[1];
|
|
|
523 |
$id = $r[2];
|
|
|
524 |
list($lang) = spip_fetch_array(spip_query(
|
|
|
525 |
"SELECT lang FROM spip_${objet}s WHERE id_$objet=$id"
|
|
|
526 |
));
|
|
|
527 |
// Si ce n'est pas la meme que celle du site, l'ajouter aux parametres
|
|
|
528 |
if ($lang AND $lang <> lire_meta('langue_site'))
|
|
|
529 |
$s .= "&lang=$lang";
|
|
|
530 |
}
|
|
|
531 |
|
|
|
532 |
return $s;
|
|
|
533 |
}
|
|
|
534 |
|
|
|
535 |
?>
|