Newer
Older
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
//
// Des fonctions diverses utilisees lors du calcul d'une page ; ces fonctions
// bien pratiques n'ont gure de logique organisationnelle ; elles sont
// appelees par certaines balises au moment du calcul des pages. (Peut-on
// trouver un modele de donnees qui les associe physiquement au fichier
// definissant leur balise ???
//
// ON TROUVERA EN QUEUE DE FICHIER LES FONCTIONS FAISANT DES APPELS SQL
// Ce fichier ne sera execute qu'une fois
if (defined("_INC_CALCUL_OUTILS")) return;
define("_INC_CALCUL_OUTILS", "1");
#
# AFFREUX !! Passer tout ca en CSS au plus vite !
#
tester_variable('espace_logos',3);
// HSPACE=xxx VSPACE=xxx pour les logos (#LOGO_ARTICLE)
tester_variable('espace_images',3);
// HSPACE=xxx VSPACE=xxx pour les images integrees
//
// Retrouver le logo d'un objet (et son survol)
//
function cherche_image($id_objet, $type_objet) {
// cherche l'image liee a l'objet
$on = cherche_image_nommee($type_objet.'on'.$id_objet);
// cherche un survol
$off =(!$on ? '' :
cherche_image_nommee($type_objet.'off'.$id_objet));
if (!$on)
return false;
return array($on, $off);
}
function cherche_logo_objet ($type, $id_objet, $on = false, $off = false, $flag_fichier=false) {
# spip_log("cherche logo $type $id_objet $on $off $flag_fichier");
switch($type) {
case 'ARTICLE':
$logo = cherche_image($id_objet, 'art');
break;
case 'AUTEUR':
$logo = cherche_image($id_objet, 'aut');
break;
case 'BREVE':
$logo = cherche_image($id_objet, 'breve');
break;
case 'SITE':
$logo = cherche_image($id_objet, 'site');
break;
case 'MOT':
$logo = cherche_image($id_objet, 'mot');
break;
// recursivite
case 'RUBRIQUE':
if (!($logo = cherche_image ($id_objet, 'rub'))
AND $id_objet > 0)
$logo = cherche_logo_objet('RUBRIQUE',
sql_parent($id_objet), true, true);
break;
default:
spip_log("cherche_logo_objet: type '$type' inconnu");
}
// Quelles images sont demandees ?
if (!$on) unset($logo[0]);
if (!$off) unset($logo[1]);
if ($logo[0] OR $logo[1])
return $logo;
}
// Renvoie le code html pour afficher le logo, avec ou sans survol, avec ou sans lien, etc.
function affiche_logos($logo, $lien, $align, $flag_fichier) {
global $num_survol;
global $espace_logos;
list($arton,$artoff) = $logo;
// Pour les documents comme pour les logos, le filtre |fichier donne
// le chemin du fichier apres 'IMG/' ; peut-etre pas d'une purete
// remarquable, mais a conserver pour compatibilite ascendante.
// -> http://www.spip.net/fr_article901.html
if ($flag_fichier) {
$on = ereg_replace("^IMG/","",$arton);
$off = ereg_replace("^IMG/","",$artoff);
return $on ? $on : $off;
}
$num_survol++;
if ($arton) {
//$imgsize = @getimagesize("$arton");
//$taille_image = ereg_replace("\"","'",$imgsize[3]);
if ($align) $align="align='$align' ";
$milieu = "<img src='$arton' $align".
" name='image$num_survol' ".$taille_image." border='0' alt=''".
" hspace='$espace_logos' vspace='$espace_logos' class='spip_logos' />";
if ($artoff) {
if ($lien) {
$afflien = "<a href='$lien'";
$afflien2 = "a>";
}
else {
$afflien = "<div";
$afflien2 = "div>";
}
$milieu = "$afflien onMouseOver=\"image$num_survol.src=".
"'$artoff'\" onMouseOut=\"image$num_survol.src=".
"'$arton'\">$milieu</$afflien2";
}
else if ($lien) {
$milieu = "<a href='$lien'>$milieu</a>";
}
} else {
$milieu="";
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
//
// fonction standard de calcul de la balise #INTRODUCTION
// on peut la surcharger en definissant dans mes_fonctions.php3 :
// function introduction($type,$texte,$descriptif) {...}
//
function calcul_introduction ($type, $texte, $chapo='', $descriptif='') {
if (function_exists("introduction"))
return introduction ($type, $texte, $chapo, $descriptif);
switch ($type) {
case 'articles':
if ($descriptif)
return propre($descriptif);
else if (substr($chapo, 0, 1) == '=') // article virtuel
return '';
else
return PtoBR(propre(supprimer_tags(couper_intro($chapo."\n\n\n".$texte, 500))));
break;
case 'breves':
return PtoBR(propre(supprimer_tags(couper_intro($texte, 300))));
break;
case 'forums':
return PtoBR(propre(supprimer_tags(couper_intro($texte, 600))));
break;
case 'rubriques':
if ($descriptif)
return propre($descriptif);
else
return PtoBR(propre(supprimer_tags(couper_intro($texte, 600))));
break;
}
//
// FONCTIONS FAISANT DES APPELS SQL
//
# NB : a l'exception des fonctions de forum regroupees dans inc-forum.
function calcul_exposer ($id, $type, $reference) {
static $exposer;
// Que faut-il exposer ? Tous les elements de $reference
// ainsi que leur hierarchie ; on ne fait donc ce calcul
// qu'une fois (par squelette) et on conserve le resultat
// en static.
if ($reference<>$ref_precedente) {
$ref_precedente = $reference;
$exposer = array();
foreach ($reference as $element=>$id_element) {
if ($element == 'id_secteur') $element = 'id_rubrique';
if (ereg("id_(article|breve|rubrique|syndic)", $element, $regs)) {
$exposer[$element][$id_element] = true;
$table = "spip_".table_objet($regs[1]);
list ($id_rubrique) = spip_fetch_array(spip_query(
"SELECT id_rubrique FROM $table WHERE $element=$id_element"));
$hierarchie = substr(calculer_hierarchie($id_rubrique), 2);
foreach (split(',',$hierarchie) as $id_rubrique)
$exposer['id_rubrique'][$id_rubrique] = true;
// And the winner is...
return $exposer[$type][$id];
function calcul_generation ($generation) {
$lesfils = array();
$result = spip_abstract_select(array('id_rubrique'),
array('rubriques AS rubriques'),
array(calcul_mysql_in('id_parent',
$generation,
'')),
return join(",",$lesfils);
}
function calcul_branche ($generation) {
if (!$generation)
return '0';
else {
$branche[] = $generation;
while ($generation = calcul_generation ($generation))
$branche[] = $generation;
return join(",",$branche);
# fonction appele par la balise #EMBED
function calcule_embed_document($id_document, $filtres, &$doublons, $doubdoc){
esj
a validé
if ($doubdoc && $id_document) $doublons["documents"] .= ', ' . $id_document;
return embed_document($id_document, $filtres, false);
}
# fonction appele par la balise #NOTES
{
$r = $GLOBALS["les_notes"];
$GLOBALS["les_notes"] = "";
$GLOBALS["compt_note"] = 0;
$GLOBALS["marqueur_notes"] ++;
return $r;
}
# retourne la profondeur d'une rubrique
function sql_profondeur($id)
{
$n = 0;
while ($id) {
$n++;
$id = sql_parent($id);
}
return $n;
}
function sql_parent($id_rubrique)
{
$row = spip_fetch_array(spip_query("
SELECT id_parent FROM spip_rubriques WHERE id_rubrique='$id_rubrique'
"));
return $row['id_parent'];
}
function sql_rubrique($id_article)
{
$row = spip_fetch_array(spip_query("
SELECT id_rubrique FROM spip_articles WHERE id_article='$id_article'
"));
return $row['id_rubrique'];
}
function sql_auteurs($id_article)
{
$result_auteurs = spip_query("
SELECT auteurs.nom, auteurs.email
FROM spip_auteurs AS auteurs,
spip_auteurs_articles AS lien
AND auteurs.id_auteur=lien.id_auteur
");
while($row_auteur = spip_fetch_array($result_auteurs)) {
$nom_auteur = typo($row_auteur["nom"]);
$email_auteur = $row_auteur["email"];
if ($email_auteur) {
$auteurs[] = "<a href=\"mailto:$email_auteur\">$nom_auteur</a>";
}
else {
$auteurs[] = "$nom_auteur";
}
}
}
return (!$auteurs) ? "" : join($auteurs, ", ");
}
function sql_petitions($id_article) {
$q = spip_query("SELECT
id_article, email_unique, site_obli, site_unique, message, texte
FROM spip_petitions
WHERE id_article=".intval($id_article));
return spip_fetch_array($q);
}
# retourne le chapeau d'un article, et seulement s'il est publie
{
return spip_fetch_array(spip_query("
SELECT chapo
FROM spip_articles
WHERE id_article='$id_article' AND statut='publie'
"));
}
// Calcul de la rubrique associee a la requete
// (selection de squelette specifique par id_rubrique & lang)
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
function sql_rubrique_fond($contexte, $lang) {
if ($id = intval($contexte['id_rubrique'])) {
$row = spip_fetch_array(spip_query(
"SELECT lang FROM spip_rubriques WHERE id_rubrique='$id'"));
if ($row['lang'])
$lang = $row['lang'];
return array ($id, $lang);
}
if ($id = intval($contexte['id_breve'])) {
$row = spip_fetch_array(spip_query(
"SELECT id_rubrique, lang FROM spip_breves WHERE id_breve='$id'"));
$id_rubrique_fond = $row['id_rubrique'];
if ($row['lang'])
$lang = $row['lang'];
return array($id_rubrique_fond, $lang);
}
if ($id = intval($contexte['id_syndic'])) {
$row = spip_fetch_array(spip_query("SELECT id_rubrique
FROM spip_syndic WHERE id_syndic='$id'"));
$id_rubrique_fond = $row['id_rubrique'];
$row = spip_fetch_array(spip_query("SELECT lang
FROM spip_rubriques WHERE id_rubrique='$id_rubrique_fond'"));
if ($row['lang'])
$lang = $row['lang'];
return array($id_rubrique_fond, $lang);
}
if ($id = intval($contexte['id_article'])) {
$row = spip_fetch_array(spip_query("SELECT id_rubrique,lang
FROM spip_articles WHERE id_article='$id'"));
$id_rubrique_fond = $row['id_rubrique'];
if ($row['lang'])
$lang = $row['lang'];
return array($id_rubrique_fond, $lang);
}