Subversion Repositories Sites.tela-botanica.org

Rev

Rev 609 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
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
// Ce fichier ne sera execute qu'une fois
16
if (defined("_ECRIRE_INC_RUBRIQUES")) return;
17
define("_ECRIRE_INC_RUBRIQUES", "1");
18
 
19
 
20
//
21
// Recalculer l'ensemble des donnees associees a l'arborescence des rubriques
22
// (cette fonction est a appeler a chaque modification sur les rubriques)
23
//
24
function calculer_rubriques() {
25
	if (!spip_get_lock("calcul_rubriques")) return;
26
 
27
	// Mettre les compteurs a zero
28
	// Attention, faute de SQL transactionnel on travaille sur
29
	// des champs temporaires afin de ne pas  casser la base
30
	// pendant la demi seconde de recalculs
31
	spip_query("UPDATE spip_rubriques
32
	SET date_tmp='0000-00-00 00:00:00', statut_tmp='prive'");
33
 
34
 
35
	//
36
	// Publier et dater les rubriques qui ont un article publie
37
	//
38
 
39
	// Afficher les articles post-dates ?
40
	include_ecrire('inc_meta.php3');
41
	$postdates = (lire_meta("post_dates") == "non") ?
42
		"AND fille.date <= NOW()" : '';
43
 
44
	$r = spip_query("SELECT rub.id_rubrique AS id, max(fille.date) AS date_h
45
	FROM spip_rubriques AS rub, spip_articles AS fille
46
	WHERE rub.id_rubrique = fille.id_rubrique AND fille.statut='publie'
47
	$postdates GROUP BY rub.id_rubrique");
48
	while ($row = spip_fetch_array($r))
49
		spip_query("UPDATE spip_rubriques
50
		SET statut_tmp='publie', date_tmp='".$row['date_h']."'
51
		WHERE id_rubrique=".$row['id']);
52
 
53
	// Publier et dater les rubriques qui ont une breve publie
54
	$r = spip_query("SELECT rub.id_rubrique AS id,
55
	max(fille.date_heure) AS date_h
56
	FROM spip_rubriques AS rub, spip_breves AS fille
57
	WHERE rub.id_rubrique = fille.id_rubrique
58
	AND rub.date_tmp <= fille.date_heure AND fille.statut='publie'
59
	GROUP BY rub.id_rubrique");
60
	while ($row = spip_fetch_array($r))
61
		spip_query("UPDATE spip_rubriques
62
		SET statut_tmp='publie', date_tmp='".$row['date']."'
63
		WHERE id_rubrique=".$row['id']);
64
 
65
	// Publier et dater les rubriques qui ont un site publie
66
	$r = spip_query("SELECT rub.id_rubrique AS id, max(fille.date) AS date_h
67
	FROM spip_rubriques AS rub, spip_syndic AS fille
68
	WHERE rub.id_rubrique = fille.id_rubrique AND rub.date_tmp <= fille.date
69
	AND fille.statut='publie'
70
	GROUP BY rub.id_rubrique");
71
	while ($row = spip_fetch_array($r))
72
		spip_query("UPDATE spip_rubriques
73
		SET statut_tmp='publie', date_tmp='".$row['date_h']."'
74
		WHERE id_rubrique=".$row['id']);
75
 
76
	// Publier et dater les rubriques qui ont un document publie
77
	$r = spip_query("SELECT rub.id_rubrique AS id, max(fille.date) AS date_h
78
	FROM spip_rubriques AS rub, spip_documents AS fille,
79
	spip_documents_rubriques AS lien
80
	WHERE rub.id_rubrique = lien.id_rubrique
81
	AND lien.id_document=fille.id_document AND rub.date_tmp <= fille.date
82
	GROUP BY rub.id_rubrique");
83
	while ($row = spip_fetch_array($r))
84
		spip_query("UPDATE spip_rubriques
85
		SET statut_tmp='publie', date_tmp='".$row['date_h']."'
86
		WHERE id_rubrique=".$row['id']);
87
 
88
 
89
	// Les rubriques qui ont une rubrique fille plus recente
90
	// on tourne tant que les donnees remontent vers la racine.
91
	do {
92
		$continuer = false;
93
		$r = spip_query("SELECT rub.id_rubrique AS id,
94
		max(fille.date_tmp) AS date_h
95
		FROM spip_rubriques AS rub, spip_rubriques AS fille
96
		WHERE rub.id_rubrique = fille.id_parent
97
		AND (rub.date_tmp < fille.date_tmp OR rub.statut_tmp<>'publie')
98
		AND fille.statut_tmp='publie'
99
		GROUP BY rub.id_rubrique");
100
		while ($row = spip_fetch_array($r)) {
101
			spip_query("UPDATE spip_rubriques
102
			SET statut_tmp='publie', date_tmp='".$row['date_h']."'
103
			WHERE id_rubrique=".$row['id']);
104
			$continuer = true;
105
		}
106
	} while ($continuer);
107
 
108
	// "Commit" des modifs
109
	spip_query("UPDATE spip_rubriques SET date=date_tmp, statut=statut_tmp");
110
 
111
 
112
	//
113
	// Propager les secteurs
114
	//
115
 
116
	// fixer les id_secteur des rubriques racines
117
	spip_query("UPDATE spip_rubriques SET id_secteur=id_rubrique
118
	WHERE id_parent=0");
119
 
120
	// reparer les rubriques qui n'ont pas l'id_secteur de leur parent
121
	do {
122
		$continuer = false;
123
		$r = spip_query("SELECT fille.id_rubrique AS id,
124
		maman.id_secteur AS secteur
125
		FROM spip_rubriques AS fille, spip_rubriques AS maman
126
		WHERE fille.id_parent = maman.id_rubrique
127
		AND fille.id_secteur <> maman.id_secteur");
128
		while ($row = spip_fetch_array($r)) {
129
			spip_query("UPDATE spip_rubriques
130
			SET id_secteur=".$row['secteur']." WHERE id_rubrique=".$row['id']);
131
			$continuer = true;
132
		}
133
	} while ($continuer);
134
 
135
	// reparer les articles
136
	$r = spip_query("SELECT fille.id_article AS id, maman.id_secteur AS secteur
137
	FROM spip_articles AS fille, spip_rubriques AS maman
138
	WHERE fille.id_rubrique = maman.id_rubrique
139
	AND fille.id_secteur <> maman.id_secteur");
140
	while ($row = spip_fetch_array($r))
141
		spip_query("UPDATE spip_articles
142
		SET id_secteur=".$row['secteur']." WHERE id_article=".$row['id']);
143
 
144
	// reparer les sites
145
	$r = spip_query("SELECT fille.id_syndic AS id, maman.id_secteur AS secteur
146
	FROM spip_syndic AS fille, spip_rubriques AS maman
147
	WHERE fille.id_rubrique = maman.id_rubrique
148
	AND fille.id_secteur <> maman.id_secteur");
149
	while ($row = spip_fetch_array($r))
150
		spip_query("UPDATE spip_syndic SET id_secteur=".$row['secteur']."
151
		WHERE id_syndic=".$row['id']);
152
 
153
	// Sauver la date de la derniere mise a jour (pour menu_rubriques)
154
	ecrire_meta("date_calcul_rubriques", date("U"));
155
	ecrire_metas();
156
 
157
}
158
 
159
//
160
// Calculer la langue des sous-rubriques et des articles
161
//
162
function calculer_langues_rubriques_etape() {
163
	$s = spip_query ("SELECT fille.id_rubrique AS id_rubrique, mere.lang AS lang
164
		FROM spip_rubriques AS fille, spip_rubriques AS mere
165
		WHERE fille.id_parent = mere.id_rubrique
166
		AND fille.langue_choisie != 'oui' AND mere.lang<>''
167
		AND mere.lang<>fille.lang");
168
 
169
	while ($row = spip_fetch_array($s)) {
170
		$lang = addslashes($row['lang']);
171
		$id_rubrique = $row['id_rubrique'];
172
		$t = spip_query ("UPDATE spip_rubriques
173
		SET lang='$lang', langue_choisie='non' WHERE id_rubrique=$id_rubrique");
174
	}
175
 
176
	return $t;
177
}
178
 
179
function calculer_langues_rubriques() {
180
 
181
	// rubriques (recursivite)
182
	$langue_site = addslashes(lire_meta('langue_site'));
183
	spip_query ("UPDATE spip_rubriques
184
	SET lang='$langue_site', langue_choisie='non'
185
	WHERE id_parent=0 AND langue_choisie != 'oui'");
186
	while (calculer_langues_rubriques_etape());
187
 
188
	// articles
189
	$s = spip_query ("SELECT fils.id_article AS id_article, mere.lang AS lang
190
		FROM spip_articles AS fils, spip_rubriques AS mere
191
		WHERE fils.id_rubrique = mere.id_rubrique
192
		AND fils.langue_choisie != 'oui' AND (fils.lang='' OR mere.lang<>'')
193
		AND mere.lang<>fils.lang");
194
	while ($row = spip_fetch_array($s)) {
195
		$lang = addslashes($row['lang']);
196
		$id_article = $row['id_article'];
197
		spip_query ("UPDATE spip_articles
198
		SET lang='$lang', langue_choisie='non' WHERE id_article=$id_article");
199
	}
200
 
201
	// breves
202
	$s = spip_query ("SELECT fils.id_breve AS id_breve, mere.lang AS lang
203
		FROM spip_breves AS fils, spip_rubriques AS mere
204
		WHERE fils.id_rubrique = mere.id_rubrique
205
		AND fils.langue_choisie != 'oui' AND (fils.lang='' OR mere.lang<>'')
206
		AND mere.lang<>fils.lang");
207
	while ($row = spip_fetch_array($s)) {
208
		$lang = addslashes($row['lang']);
209
		$id_breve = $row['id_breve'];
210
		spip_query ("UPDATE spip_breves
211
		SET lang='$lang', langue_choisie='non' WHERE id_breve=$id_breve");
212
	}
213
 
214
	if (lire_meta('multi_rubriques') == 'oui') {
215
		// Ecrire meta liste langues utilisees dans rubriques
216
		include_ecrire('inc_meta.php3');
217
		$s = spip_query ("SELECT lang FROM spip_rubriques
218
		WHERE lang != '' GROUP BY lang");
219
		while ($row = spip_fetch_array($s)) {
220
			$lang_utilisees[] = $row['lang'];
221
		}
222
		if ($lang_utilisees) {
223
			$lang_utilisees = join (',', $lang_utilisees);
224
			ecrire_meta('langues_utilisees', $lang_utilisees);
225
		} else {
226
			ecrire_meta('langues_utilisees', "");
227
		}
228
	}
229
}
230
 
231
 
232
function enfant_rub($collection){
233
	global $les_enfants, $couleur_foncee, $lang_dir;
234
	global $spip_display, $spip_lang_left, $spip_lang_right, $spip_lang;
235
	global $connect_id_auteur;
236
 
237
	$query2 = "SELECT * FROM spip_rubriques WHERE id_parent='$collection' ORDER BY 0+titre,titre";
238
	$result2 = spip_query($query2);
239
 
240
 
241
	if ($spip_display == 4) $les_enfants .= "<ul>";
242
 
243
	while($row=spip_fetch_array($result2)){
244
		$id_rubrique=$row['id_rubrique'];
245
		$id_parent=$row['id_parent'];
246
		$titre=$row['titre'];
247
 
248
		$bouton_layer = bouton_block_invisible("enfants$id_rubrique");
249
		$les_sous_enfants = sous_enfant_rub($id_rubrique);
250
 
251
		changer_typo($row['lang']);
252
		$descriptif=propre($row['descriptif']);
253
 
254
		if ($spip_display == 4) $les_enfants .= "<li>";
255
		$les_enfants.= "<div class='enfants'>";
256
 
257
 
258
		if ($id_parent == "0") $logo_rub = "secteur-24.gif";
259
		else $logo_rub = "rubrique-24.gif";
260
 
261
		$les_enfants .= debut_cadre_sous_rub($logo_rub, true);
262
 
263
		if ($spip_display != 1
264
		AND $spip_display!=4
265
		AND lire_meta('image_process') != "non") {
266
			include_ecrire("inc_logos.php3");
267
			$logo = decrire_logo("rubon$id_rubrique");
268
			if ($logo) {
269
				$fichier = $logo[0];
270
					$les_enfants .= "<div style='float: $spip_lang_right; margin-$spip_lang_right: -6px; margin-top: -6px;'>";
271
					$les_enfants .= reduire_image_logo(_DIR_IMG.$fichier, 48, 36);
272
					$les_enfants .= "</div>";
273
			}
274
		}
275
 
276
		if (strlen($les_sous_enfants) > 0){
277
			$les_enfants .= $bouton_layer;
278
		}
279
 
280
		if (acces_restreint_rubrique($id_rubrique))
281
		  $les_enfants .= http_img_pack("admin-12.gif", '', "width='12' height='12'", _T('image_administrer_rubrique'));
282
 
283
		$les_enfants.= "<span dir='$lang_dir'><B><A HREF='naviguer.php3?id_rubrique=$id_rubrique'><font color='$couleur_foncee'>".typo($titre)."</font></A></B></span>";
284
		if (strlen($descriptif)) {
285
			$les_enfants .= "<div class='verdana1'>$descriptif</div>";
286
		}
287
 
288
		if ($spip_display != 4) $les_enfants .= $les_sous_enfants;
289
 
290
		$les_enfants .= "<div style='clear:both;'></div>";
291
 
292
 
293
		$les_enfants .= fin_cadre_sous_rub(true);
294
		$les_enfants .= "</div>";
295
		if ($spip_display == 4) $les_enfants .= "</li>";
296
	}
297
	if ($spip_display == 4) $les_enfants .= "</ul>";
298
 
299
	changer_typo($spip_lang); # remettre la typo de l'interface pour la suite
300
}
301
 
302
function sous_enfant_rub($collection2){
303
	global $lang_dir, $spip_lang_dir, $spip_lang_left;
304
	$query3 = "SELECT * FROM spip_rubriques WHERE id_parent='$collection2' ORDER BY 0+titre,titre";
305
	$result3 = spip_query($query3);
306
 
307
	if (spip_num_rows($result3) > 0){
308
		$retour = debut_block_invisible("enfants$collection2")."\n<ul style='margin: 0px; padding: 0px; padding-top: 3px;'>\n";
309
		while($row=spip_fetch_array($result3)){
310
			$id_rubrique2=$row['id_rubrique'];
311
			$id_parent2=$row['id_parent'];
312
			$titre2=$row['titre'];
313
			changer_typo($row['lang']);
314
 
315
			$retour.="<div class='arial11' " .
316
			  http_style_background('rubrique-12.gif', "left center no-repeat; padding: 2px; padding-$spip_lang_left: 18px; margin-$spip_lang_left: 3px") . "><A HREF='naviguer.php3?id_rubrique=$id_rubrique2'><span dir='$lang_dir'>".typo($titre2)."</span></a></div>\n";
317
		}
318
		$retour .= "</ul>\n\n".fin_block()."\n\n";
319
	}
320
 
321
	return $retour;
322
}
323
 
324
function afficher_enfant_rub($id_rubrique, $afficher_bouton_creer=false) {
325
	global $les_enfants, $spip_lang_right;
326
 
327
	enfant_rub($id_rubrique);
328
 
329
	$les_enfants2=substr($les_enfants,round(strlen($les_enfants)/2),strlen($les_enfants));
330
	if (strpos($les_enfants2,"<div class='enfants'>")){
331
		$les_enfants2=substr($les_enfants2,strpos($les_enfants2,"<div class='enfants'>"),strlen($les_enfants2));
332
		$les_enfants1=substr($les_enfants,0,strlen($les_enfants)-strlen($les_enfants2));
333
	}else{
334
		$les_enfants1=$les_enfants;
335
		$les_enfants2="";
336
	}
337
 
338
 
339
	// Afficher les sous-rubriques
340
	echo "<div>&nbsp;</div>";
341
	echo "<table cellpadding=0 cellspacing=0 border=0 width='100%'>";
342
	echo "<tr><td valign='top' width=50% rowspan=2>$les_enfants1</td>";
343
	echo "<td width='20' rowspan='2'>", http_img_pack("rien.gif", ' ', "width='20'") ."</td>\n";
344
	echo "<td valign='top' width='50%'>$les_enfants2 &nbsp;";
345
	if (strlen($les_enfants2) > 0) echo "<p>";
346
	echo "</td></tr>";
347
 
348
	echo "<tr><td style='text-align: $spip_lang_right;' valign='bottom'><div align='$spip_lang_right'>";
349
	if ($afficher_bouton_creer) {
350
		if ($id_rubrique == "0") icone(_T('icone_creer_rubrique'), "rubriques_edit.php3?new=oui&retour=nav", "secteur-24.gif", "creer.gif");
351
		else  icone(_T('icone_creer_sous_rubrique'), "rubriques_edit.php3?new=oui&retour=nav&id_parent=$id_rubrique", "rubrique-24.gif", "creer.gif");
352
		echo "<p>";
353
	}
354
	echo "</div></td></tr>";
355
	echo "</table><p />";
356
	//////
357
 
358
 
359
}
360
 
361
?>