Completed
Push — master ( 7c570b...e1e48d )
by cam
04:19
created
ecrire/inc/rubriques.php 2 patches
Indentation   +498 added lines, -498 removed lines patch added patch discarded remove patch
@@ -17,7 +17,7 @@  discard block
 block discarded – undo
17 17
  */
18 18
 
19 19
 if (!defined('_ECRIRE_INC_VERSION')) {
20
-	return;
20
+    return;
21 21
 }
22 22
 
23 23
 
@@ -54,37 +54,37 @@  discard block
 block discarded – undo
54 54
  *     true si le statut change effectivement
55 55
  **/
56 56
 function calculer_rubriques_if($id_rubrique, $modifs, $statut_ancien = '', $postdate = false) {
57
-	$neuf = false;
58
-	if ($statut_ancien == 'publie') {
59
-		if (isset($modifs['statut'])
60
-			or isset($modifs['id_rubrique'])
61
-			or ($postdate and strtotime($postdate) > time())
62
-		) {
63
-			$neuf |= depublier_branche_rubrique_if($id_rubrique);
64
-		}
65
-		// ne publier que si c'est pas un postdate, ou si la date n'est pas dans le futur
66
-		if ($postdate) {
67
-			calculer_prochain_postdate(true);
68
-			$neuf |= (strtotime($postdate) <= time()); // par securite
69
-		} elseif (isset($modifs['id_rubrique'])) {
70
-			$neuf |= publier_branche_rubrique($modifs['id_rubrique']);
71
-		}
72
-	} elseif (isset($modifs['statut']) and $modifs['statut'] == 'publie') {
73
-		if ($postdate) {
74
-			calculer_prochain_postdate(true);
75
-			$neuf |= (strtotime($postdate) <= time()); // par securite
76
-		} else {
77
-			$neuf |= publier_branche_rubrique($id_rubrique);
78
-		}
79
-	}
80
-
81
-	if ($neuf) // Sauver la date de la derniere mise a jour (pour menu_rubriques)
82
-	{
83
-		ecrire_meta("date_calcul_rubriques", date("U"));
84
-	}
85
-
86
-	$langues = calculer_langues_utilisees();
87
-	ecrire_meta('langues_utilisees', $langues);
57
+    $neuf = false;
58
+    if ($statut_ancien == 'publie') {
59
+        if (isset($modifs['statut'])
60
+            or isset($modifs['id_rubrique'])
61
+            or ($postdate and strtotime($postdate) > time())
62
+        ) {
63
+            $neuf |= depublier_branche_rubrique_if($id_rubrique);
64
+        }
65
+        // ne publier que si c'est pas un postdate, ou si la date n'est pas dans le futur
66
+        if ($postdate) {
67
+            calculer_prochain_postdate(true);
68
+            $neuf |= (strtotime($postdate) <= time()); // par securite
69
+        } elseif (isset($modifs['id_rubrique'])) {
70
+            $neuf |= publier_branche_rubrique($modifs['id_rubrique']);
71
+        }
72
+    } elseif (isset($modifs['statut']) and $modifs['statut'] == 'publie') {
73
+        if ($postdate) {
74
+            calculer_prochain_postdate(true);
75
+            $neuf |= (strtotime($postdate) <= time()); // par securite
76
+        } else {
77
+            $neuf |= publier_branche_rubrique($id_rubrique);
78
+        }
79
+    }
80
+
81
+    if ($neuf) // Sauver la date de la derniere mise a jour (pour menu_rubriques)
82
+    {
83
+        ecrire_meta("date_calcul_rubriques", date("U"));
84
+    }
85
+
86
+    $langues = calculer_langues_utilisees();
87
+    ecrire_meta('langues_utilisees', $langues);
88 88
 }
89 89
 
90 90
 
@@ -102,19 +102,19 @@  discard block
 block discarded – undo
102 102
  *     true si le statut change effectivement
103 103
  */
104 104
 function publier_branche_rubrique($id_rubrique) {
105
-	$id_pred = $id_rubrique;
106
-	while (true) {
107
-		sql_updateq('spip_rubriques', array('statut' => 'publie', 'date' => date('Y-m-d H:i:s')),
108
-			"id_rubrique=" . intval($id_rubrique));
109
-		$id_parent = sql_getfetsel('id_parent', 'spip_rubriques AS R', "R.id_rubrique=" . intval($id_rubrique));
110
-		if (!$id_parent) {
111
-			break;
112
-		}
113
-		$id_rubrique = $id_parent;
114
-	}
105
+    $id_pred = $id_rubrique;
106
+    while (true) {
107
+        sql_updateq('spip_rubriques', array('statut' => 'publie', 'date' => date('Y-m-d H:i:s')),
108
+            "id_rubrique=" . intval($id_rubrique));
109
+        $id_parent = sql_getfetsel('id_parent', 'spip_rubriques AS R', "R.id_rubrique=" . intval($id_rubrique));
110
+        if (!$id_parent) {
111
+            break;
112
+        }
113
+        $id_rubrique = $id_parent;
114
+    }
115 115
 
116 116
 #	spip_log(" publier_branche_rubrique($id_rubrique $id_pred");
117
-	return $id_pred != $id_rubrique;
117
+    return $id_pred != $id_rubrique;
118 118
 }
119 119
 
120 120
 /**
@@ -132,21 +132,21 @@  discard block
 block discarded – undo
132 132
  *     true si le statut change effectivement
133 133
  */
134 134
 function depublier_branche_rubrique_if($id_rubrique) {
135
-	$date = date('Y-m-d H:i:s'); // figer la date
135
+    $date = date('Y-m-d H:i:s'); // figer la date
136 136
 
137
-	#	spip_log("depublier_branche_rubrique($id_rubrique ?");
138
-	$id_pred = $id_rubrique;
139
-	while ($id_pred) {
137
+    #	spip_log("depublier_branche_rubrique($id_rubrique ?");
138
+    $id_pred = $id_rubrique;
139
+    while ($id_pred) {
140 140
 
141
-		if (!depublier_rubrique_if($id_pred, $date)) {
142
-			return $id_pred != $id_rubrique;
143
-		}
144
-		// passer au parent si on a depublie
145
-		$r = sql_fetsel("id_parent", "spip_rubriques", "id_rubrique=" . intval($id_pred));
146
-		$id_pred = $r['id_parent'];
147
-	}
141
+        if (!depublier_rubrique_if($id_pred, $date)) {
142
+            return $id_pred != $id_rubrique;
143
+        }
144
+        // passer au parent si on a depublie
145
+        $r = sql_fetsel("id_parent", "spip_rubriques", "id_rubrique=" . intval($id_pred));
146
+        $id_pred = $r['id_parent'];
147
+    }
148 148
 
149
-	return $id_pred != $id_rubrique;
149
+    return $id_pred != $id_rubrique;
150 150
 }
151 151
 
152 152
 /**
@@ -163,57 +163,57 @@  discard block
 block discarded – undo
163 163
  *    true si la rubrique a été dépubliée
164 164
  */
165 165
 function depublier_rubrique_if($id_rubrique, $date = null) {
166
-	if (is_null($date)) {
167
-		$date = date('Y-m-d H:i:s');
168
-	}
169
-	$postdates = ($GLOBALS['meta']["post_dates"] == "non") ?
170
-		" AND date <= " . sql_quote($date) : '';
171
-
172
-	if (!$id_rubrique = intval($id_rubrique)) {
173
-		return false;
174
-	}
175
-
176
-	// verifier qu'elle existe et est bien publiee
177
-	$r = sql_fetsel('id_rubrique,statut', 'spip_rubriques', "id_rubrique=" . intval($id_rubrique));
178
-	if (!$r or $r['statut'] !== 'publie') {
179
-		return false;
180
-	}
181
-
182
-	// On met le nombre de chaque type d'enfants dans un tableau
183
-	// Le type de l'objet est au pluriel
184
-	$compte = array(
185
-		'articles' => sql_countsel("spip_articles",
186
-			"id_rubrique=" . intval($id_rubrique) . " AND statut='publie'$postdates"),
187
-		'rubriques' => sql_countsel("spip_rubriques", "id_parent=" . intval($id_rubrique) . " AND statut='publie'"),
188
-		'documents' => sql_countsel(
189
-			"spip_documents AS D JOIN spip_documents_liens AS L ON D.id_document=L.id_document", 
190
-			"L.id_objet=" . intval($id_rubrique) . " AND L.objet='rubrique' and D.mode NOT IN('logoon', 'logooff') ")
191
-	);
192
-
193
-	// On passe le tableau des comptes dans un pipeline pour que les plugins puissent ajouter (ou retirer) des enfants
194
-	$compte = pipeline('objet_compte_enfants',
195
-		array(
196
-			'args' => array(
197
-				'objet' => 'rubrique',
198
-				'id_objet' => $id_rubrique,
199
-				'statut' => 'publie',
200
-				'date' => $date
201
-			),
202
-			'data' => $compte
203
-		)
204
-	);
205
-
206
-	// S'il y a au moins un enfant de n'importe quoi, on ne dépublie pas
207
-	foreach ($compte as $objet => $n) {
208
-		if ($n) {
209
-			return false;
210
-		}
211
-	}
212
-
213
-	sql_updateq("spip_rubriques", array("statut" => 'prepa'), "id_rubrique=" . intval($id_rubrique));
166
+    if (is_null($date)) {
167
+        $date = date('Y-m-d H:i:s');
168
+    }
169
+    $postdates = ($GLOBALS['meta']["post_dates"] == "non") ?
170
+        " AND date <= " . sql_quote($date) : '';
171
+
172
+    if (!$id_rubrique = intval($id_rubrique)) {
173
+        return false;
174
+    }
175
+
176
+    // verifier qu'elle existe et est bien publiee
177
+    $r = sql_fetsel('id_rubrique,statut', 'spip_rubriques', "id_rubrique=" . intval($id_rubrique));
178
+    if (!$r or $r['statut'] !== 'publie') {
179
+        return false;
180
+    }
181
+
182
+    // On met le nombre de chaque type d'enfants dans un tableau
183
+    // Le type de l'objet est au pluriel
184
+    $compte = array(
185
+        'articles' => sql_countsel("spip_articles",
186
+            "id_rubrique=" . intval($id_rubrique) . " AND statut='publie'$postdates"),
187
+        'rubriques' => sql_countsel("spip_rubriques", "id_parent=" . intval($id_rubrique) . " AND statut='publie'"),
188
+        'documents' => sql_countsel(
189
+            "spip_documents AS D JOIN spip_documents_liens AS L ON D.id_document=L.id_document", 
190
+            "L.id_objet=" . intval($id_rubrique) . " AND L.objet='rubrique' and D.mode NOT IN('logoon', 'logooff') ")
191
+    );
192
+
193
+    // On passe le tableau des comptes dans un pipeline pour que les plugins puissent ajouter (ou retirer) des enfants
194
+    $compte = pipeline('objet_compte_enfants',
195
+        array(
196
+            'args' => array(
197
+                'objet' => 'rubrique',
198
+                'id_objet' => $id_rubrique,
199
+                'statut' => 'publie',
200
+                'date' => $date
201
+            ),
202
+            'data' => $compte
203
+        )
204
+    );
205
+
206
+    // S'il y a au moins un enfant de n'importe quoi, on ne dépublie pas
207
+    foreach ($compte as $objet => $n) {
208
+        if ($n) {
209
+            return false;
210
+        }
211
+    }
212
+
213
+    sql_updateq("spip_rubriques", array("statut" => 'prepa'), "id_rubrique=" . intval($id_rubrique));
214 214
 
215 215
 #		spip_log("depublier_rubrique $id_pred");
216
-	return true;
216
+    return true;
217 217
 }
218 218
 
219 219
 
@@ -236,18 +236,18 @@  discard block
 block discarded – undo
236 236
  **/
237 237
 function calculer_rubriques() {
238 238
 
239
-	calculer_rubriques_publiees();
239
+    calculer_rubriques_publiees();
240 240
 
241
-	// Apres chaque (de)publication 
242
-	// recalculer les langues utilisees sur le site
243
-	$langues = calculer_langues_utilisees();
244
-	ecrire_meta('langues_utilisees', $langues);
241
+    // Apres chaque (de)publication 
242
+    // recalculer les langues utilisees sur le site
243
+    $langues = calculer_langues_utilisees();
244
+    ecrire_meta('langues_utilisees', $langues);
245 245
 
246
-	// Sauver la date de la derniere mise a jour (pour menu_rubriques)
247
-	ecrire_meta("date_calcul_rubriques", date("U"));
246
+    // Sauver la date de la derniere mise a jour (pour menu_rubriques)
247
+    ecrire_meta("date_calcul_rubriques", date("U"));
248 248
 
249
-	// on calcule la date du prochain article post-date
250
-	calculer_prochain_postdate();
249
+    // on calcule la date du prochain article post-date
250
+    calculer_prochain_postdate();
251 251
 }
252 252
 
253 253
 
@@ -264,51 +264,51 @@  discard block
 block discarded – undo
264 264
  **/
265 265
 function calculer_rubriques_publiees() {
266 266
 
267
-	// Mettre les compteurs a zero
268
-	sql_updateq('spip_rubriques', array('date_tmp' => '0000-00-00 00:00:00', 'statut_tmp' => 'prepa'));
269
-
270
-	//
271
-	// Publier et dater les rubriques qui ont un article publie
272
-	//
273
-
274
-	// Afficher les articles post-dates ?
275
-	$postdates = ($GLOBALS['meta']["post_dates"] == "non") ?
276
-		"AND A.date <= " . sql_quote(date('Y-m-d H:i:s')) : '';
277
-
278
-	$r = sql_select(
279
-		"R.id_rubrique AS id, max(A.date) AS date_h",
280
-		"spip_rubriques AS R JOIN spip_articles AS A ON R.id_rubrique = A.id_rubrique",
281
-		"A.date>R.date_tmp AND A.statut='publie' $postdates ", "R.id_rubrique");
282
-	while ($row = sql_fetch($r)) {
283
-		sql_updateq("spip_rubriques", array("statut_tmp" => 'publie', "date_tmp" => $row['date_h']),
284
-			"id_rubrique=" . intval($row['id']));
285
-	}
286
-
287
-	// point d'entree pour permettre a des plugins de gerer le statut
288
-	// autrement (par ex: toute rubrique est publiee des sa creation)
289
-	// Ce pipeline fait ce qu'il veut, mais s'il touche aux statuts/dates
290
-	// c'est statut_tmp/date_tmp qu'il doit modifier
291
-	// [C'est un trigger... a renommer en trig_calculer_rubriques ?]
292
-	pipeline('calculer_rubriques', null);
293
-
294
-
295
-	// Les rubriques qui ont une rubrique fille plus recente
296
-	// on tourne tant que les donnees remontent vers la racine.
297
-	do {
298
-		$continuer = false;
299
-		$r = sql_select(
300
-			"R.id_rubrique AS id, max(SR.date_tmp) AS date_h",
301
-			"spip_rubriques AS R JOIN spip_rubriques AS SR ON R.id_rubrique = SR.id_parent",
302
-			"(SR.date_tmp>R.date_tmp OR R.statut_tmp<>'publie') AND SR.statut_tmp='publie' ", "R.id_rubrique");
303
-		while ($row = sql_fetch($r)) {
304
-			sql_updateq('spip_rubriques', array('statut_tmp' => 'publie', 'date_tmp' => $row['date_h']),
305
-				"id_rubrique=" . intval($row['id']));
306
-			$continuer = true;
307
-		}
308
-	} while ($continuer);
309
-
310
-	// Enregistrement des modifs
311
-	sql_update('spip_rubriques', array('date' => 'date_tmp', 'statut' => 'statut_tmp'));
267
+    // Mettre les compteurs a zero
268
+    sql_updateq('spip_rubriques', array('date_tmp' => '0000-00-00 00:00:00', 'statut_tmp' => 'prepa'));
269
+
270
+    //
271
+    // Publier et dater les rubriques qui ont un article publie
272
+    //
273
+
274
+    // Afficher les articles post-dates ?
275
+    $postdates = ($GLOBALS['meta']["post_dates"] == "non") ?
276
+        "AND A.date <= " . sql_quote(date('Y-m-d H:i:s')) : '';
277
+
278
+    $r = sql_select(
279
+        "R.id_rubrique AS id, max(A.date) AS date_h",
280
+        "spip_rubriques AS R JOIN spip_articles AS A ON R.id_rubrique = A.id_rubrique",
281
+        "A.date>R.date_tmp AND A.statut='publie' $postdates ", "R.id_rubrique");
282
+    while ($row = sql_fetch($r)) {
283
+        sql_updateq("spip_rubriques", array("statut_tmp" => 'publie', "date_tmp" => $row['date_h']),
284
+            "id_rubrique=" . intval($row['id']));
285
+    }
286
+
287
+    // point d'entree pour permettre a des plugins de gerer le statut
288
+    // autrement (par ex: toute rubrique est publiee des sa creation)
289
+    // Ce pipeline fait ce qu'il veut, mais s'il touche aux statuts/dates
290
+    // c'est statut_tmp/date_tmp qu'il doit modifier
291
+    // [C'est un trigger... a renommer en trig_calculer_rubriques ?]
292
+    pipeline('calculer_rubriques', null);
293
+
294
+
295
+    // Les rubriques qui ont une rubrique fille plus recente
296
+    // on tourne tant que les donnees remontent vers la racine.
297
+    do {
298
+        $continuer = false;
299
+        $r = sql_select(
300
+            "R.id_rubrique AS id, max(SR.date_tmp) AS date_h",
301
+            "spip_rubriques AS R JOIN spip_rubriques AS SR ON R.id_rubrique = SR.id_parent",
302
+            "(SR.date_tmp>R.date_tmp OR R.statut_tmp<>'publie') AND SR.statut_tmp='publie' ", "R.id_rubrique");
303
+        while ($row = sql_fetch($r)) {
304
+            sql_updateq('spip_rubriques', array('statut_tmp' => 'publie', 'date_tmp' => $row['date_h']),
305
+                "id_rubrique=" . intval($row['id']));
306
+            $continuer = true;
307
+        }
308
+    } while ($continuer);
309
+
310
+    // Enregistrement des modifs
311
+    sql_update('spip_rubriques', array('date' => 'date_tmp', 'statut' => 'statut_tmp'));
312 312
 }
313 313
 
314 314
 /**
@@ -323,99 +323,99 @@  discard block
 block discarded – undo
323 323
  * @return void
324 324
  **/
325 325
 function propager_les_secteurs() {
326
-	// Profondeur 0
327
-	// Toutes les rubriques racines sont de profondeur 0
328
-	// et fixer les id_secteur des rubriques racines
329
-	sql_update('spip_rubriques', array('id_secteur' => 'id_rubrique', 'profondeur' => 0), "id_parent=0");
330
-	// Toute rubrique non racine est de profondeur >0
331
-	sql_updateq('spip_rubriques', array('profondeur' => 1), "id_parent<>0 AND profondeur=0");
332
-
333
-	// securite : pas plus d'iteration que de rubriques dans la base
334
-	$maxiter = sql_countsel("spip_rubriques");
335
-
336
-	// reparer les rubriques qui n'ont pas l'id_secteur de leur parent
337
-	// on fait profondeur par profondeur
338
-
339
-	$prof = 0;
340
-	do {
341
-		$continuer = false;
342
-
343
-		// Par recursivite : si toutes les rubriques de profondeur $prof sont bonnes
344
-		// on fixe le profondeur $prof+1
345
-
346
-		// Toutes les rubriques dont le parent est de profondeur $prof ont une profondeur $prof+1
347
-		// on teste A.profondeur > $prof+1 car :
348
-		// - toutes les rubriques de profondeur 0 à $prof sont bonnes
349
-		// - si A.profondeur = $prof+1 c'est bon
350
-		// - cela nous protege de la boucle infinie en cas de reference circulaire dans les rubriques
351
-		$maxiter2 = $maxiter;
352
-		while ($maxiter2--
353
-			and $rows = sql_allfetsel(
354
-				"A.id_rubrique AS id, R.id_secteur AS id_secteur, R.profondeur+1 as profondeur",
355
-				"spip_rubriques AS A JOIN spip_rubriques AS R ON A.id_parent = R.id_rubrique",
356
-				"R.profondeur=" . intval($prof) . " AND (A.id_secteur <> R.id_secteur OR A.profondeur > R.profondeur+1)",
357
-				"", "R.id_secteur", "0,100")) {
358
-
359
-			$id_secteur = null;
360
-			$ids = array();
361
-			while ($row = array_shift($rows)) {
362
-				if ($row['id_secteur'] !== $id_secteur) {
363
-					if (count($ids)) {
364
-						sql_updateq("spip_rubriques", array("id_secteur" => $id_secteur, 'profondeur' => $prof + 1),
365
-							sql_in('id_rubrique', $ids));
366
-					}
367
-					$id_secteur = $row['id_secteur'];
368
-					$ids = array();
369
-				}
370
-				$ids[] = $row['id'];
371
-			}
372
-			if (count($ids)) {
373
-				sql_updateq("spip_rubriques", array("id_secteur" => $id_secteur, 'profondeur' => $prof + 1),
374
-					sql_in('id_rubrique', $ids));
375
-			}
376
-		}
377
-
378
-
379
-		// Toutes les rubriques de profondeur $prof+1 qui n'ont pas un parent de profondeur $prof sont decalees
380
-		$maxiter2 = $maxiter;
381
-		while ($maxiter2--
382
-			and $rows = sql_allfetsel(
383
-				"id_rubrique as id",
384
-				"spip_rubriques",
385
-				"profondeur=" . intval($prof + 1) . " AND id_parent NOT IN (" . sql_get_select("zzz.id_rubrique",
386
-					"spip_rubriques AS zzz", "zzz.profondeur=" . intval($prof)) . ")", '', '', '0,100')) {
387
-			$rows = array_column($rows, 'id');
388
-			sql_updateq("spip_rubriques", array('profondeur' => $prof + 2), sql_in("id_rubrique", $rows));
389
-		}
390
-
391
-		// ici on a fini de valider $prof+1, toutes les rubriques de prondeur 0 a $prof+1 sont OK
392
-		// si pas de rubrique a profondeur $prof+1 pas la peine de continuer
393
-		// si il reste des rubriques non vues, c'est une branche morte ou reference circulaire (base foireuse)
394
-		// on arrete les frais
395
-		if (sql_countsel("spip_rubriques", "profondeur=" . intval($prof + 1))) {
396
-			$prof++;
397
-			$continuer = true;
398
-		}
399
-	} while ($continuer and $maxiter--);
400
-
401
-	// loger si la table des rubriques semble foireuse
402
-	// et mettre un id_secteur=0 sur ces rubriques pour eviter toute selection par les boucles
403
-	if (sql_countsel("spip_rubriques", "profondeur>" . intval($prof + 1))) {
404
-		spip_log("Les rubriques de profondeur>" . ($prof + 1) . " semblent suspectes (branches morte ou reference circulaire dans les parents)",
405
-			_LOG_CRITIQUE);
406
-		sql_update("spip_rubriques", array('id_secteur' => 0), "profondeur>" . intval($prof + 1));
407
-	}
408
-
409
-	// reparer les articles
410
-	$r = sql_select("A.id_article AS id, R.id_secteur AS secteur", "spip_articles AS A, spip_rubriques AS R",
411
-		"A.id_rubrique = R.id_rubrique AND A.id_secteur <> R.id_secteur");
412
-
413
-	while ($row = sql_fetch($r)) {
414
-		sql_update("spip_articles", array("id_secteur" => $row['secteur']), "id_article=" . intval($row['id']));
415
-	}
416
-
417
-	// avertir les plugins qui peuvent faire leur mises a jour egalement
418
-	pipeline('trig_propager_les_secteurs', '');
326
+    // Profondeur 0
327
+    // Toutes les rubriques racines sont de profondeur 0
328
+    // et fixer les id_secteur des rubriques racines
329
+    sql_update('spip_rubriques', array('id_secteur' => 'id_rubrique', 'profondeur' => 0), "id_parent=0");
330
+    // Toute rubrique non racine est de profondeur >0
331
+    sql_updateq('spip_rubriques', array('profondeur' => 1), "id_parent<>0 AND profondeur=0");
332
+
333
+    // securite : pas plus d'iteration que de rubriques dans la base
334
+    $maxiter = sql_countsel("spip_rubriques");
335
+
336
+    // reparer les rubriques qui n'ont pas l'id_secteur de leur parent
337
+    // on fait profondeur par profondeur
338
+
339
+    $prof = 0;
340
+    do {
341
+        $continuer = false;
342
+
343
+        // Par recursivite : si toutes les rubriques de profondeur $prof sont bonnes
344
+        // on fixe le profondeur $prof+1
345
+
346
+        // Toutes les rubriques dont le parent est de profondeur $prof ont une profondeur $prof+1
347
+        // on teste A.profondeur > $prof+1 car :
348
+        // - toutes les rubriques de profondeur 0 à $prof sont bonnes
349
+        // - si A.profondeur = $prof+1 c'est bon
350
+        // - cela nous protege de la boucle infinie en cas de reference circulaire dans les rubriques
351
+        $maxiter2 = $maxiter;
352
+        while ($maxiter2--
353
+            and $rows = sql_allfetsel(
354
+                "A.id_rubrique AS id, R.id_secteur AS id_secteur, R.profondeur+1 as profondeur",
355
+                "spip_rubriques AS A JOIN spip_rubriques AS R ON A.id_parent = R.id_rubrique",
356
+                "R.profondeur=" . intval($prof) . " AND (A.id_secteur <> R.id_secteur OR A.profondeur > R.profondeur+1)",
357
+                "", "R.id_secteur", "0,100")) {
358
+
359
+            $id_secteur = null;
360
+            $ids = array();
361
+            while ($row = array_shift($rows)) {
362
+                if ($row['id_secteur'] !== $id_secteur) {
363
+                    if (count($ids)) {
364
+                        sql_updateq("spip_rubriques", array("id_secteur" => $id_secteur, 'profondeur' => $prof + 1),
365
+                            sql_in('id_rubrique', $ids));
366
+                    }
367
+                    $id_secteur = $row['id_secteur'];
368
+                    $ids = array();
369
+                }
370
+                $ids[] = $row['id'];
371
+            }
372
+            if (count($ids)) {
373
+                sql_updateq("spip_rubriques", array("id_secteur" => $id_secteur, 'profondeur' => $prof + 1),
374
+                    sql_in('id_rubrique', $ids));
375
+            }
376
+        }
377
+
378
+
379
+        // Toutes les rubriques de profondeur $prof+1 qui n'ont pas un parent de profondeur $prof sont decalees
380
+        $maxiter2 = $maxiter;
381
+        while ($maxiter2--
382
+            and $rows = sql_allfetsel(
383
+                "id_rubrique as id",
384
+                "spip_rubriques",
385
+                "profondeur=" . intval($prof + 1) . " AND id_parent NOT IN (" . sql_get_select("zzz.id_rubrique",
386
+                    "spip_rubriques AS zzz", "zzz.profondeur=" . intval($prof)) . ")", '', '', '0,100')) {
387
+            $rows = array_column($rows, 'id');
388
+            sql_updateq("spip_rubriques", array('profondeur' => $prof + 2), sql_in("id_rubrique", $rows));
389
+        }
390
+
391
+        // ici on a fini de valider $prof+1, toutes les rubriques de prondeur 0 a $prof+1 sont OK
392
+        // si pas de rubrique a profondeur $prof+1 pas la peine de continuer
393
+        // si il reste des rubriques non vues, c'est une branche morte ou reference circulaire (base foireuse)
394
+        // on arrete les frais
395
+        if (sql_countsel("spip_rubriques", "profondeur=" . intval($prof + 1))) {
396
+            $prof++;
397
+            $continuer = true;
398
+        }
399
+    } while ($continuer and $maxiter--);
400
+
401
+    // loger si la table des rubriques semble foireuse
402
+    // et mettre un id_secteur=0 sur ces rubriques pour eviter toute selection par les boucles
403
+    if (sql_countsel("spip_rubriques", "profondeur>" . intval($prof + 1))) {
404
+        spip_log("Les rubriques de profondeur>" . ($prof + 1) . " semblent suspectes (branches morte ou reference circulaire dans les parents)",
405
+            _LOG_CRITIQUE);
406
+        sql_update("spip_rubriques", array('id_secteur' => 0), "profondeur>" . intval($prof + 1));
407
+    }
408
+
409
+    // reparer les articles
410
+    $r = sql_select("A.id_article AS id, R.id_secteur AS secteur", "spip_articles AS A, spip_rubriques AS R",
411
+        "A.id_rubrique = R.id_rubrique AND A.id_secteur <> R.id_secteur");
412
+
413
+    while ($row = sql_fetch($r)) {
414
+        sql_update("spip_articles", array("id_secteur" => $row['secteur']), "id_article=" . intval($row['id']));
415
+    }
416
+
417
+    // avertir les plugins qui peuvent faire leur mises a jour egalement
418
+    pipeline('trig_propager_les_secteurs', '');
419 419
 }
420 420
 
421 421
 
@@ -430,17 +430,17 @@  discard block
 block discarded – undo
430 430
  *     true si un changement a eu lieu
431 431
  **/
432 432
 function calculer_langues_rubriques_etape() {
433
-	$s = sql_select("A.id_rubrique AS id_rubrique, R.lang AS lang", "spip_rubriques AS A, spip_rubriques AS R",
434
-		"A.id_parent = R.id_rubrique AND A.langue_choisie != 'oui' AND R.lang<>'' AND R.lang<>A.lang");
433
+    $s = sql_select("A.id_rubrique AS id_rubrique, R.lang AS lang", "spip_rubriques AS A, spip_rubriques AS R",
434
+        "A.id_parent = R.id_rubrique AND A.langue_choisie != 'oui' AND R.lang<>'' AND R.lang<>A.lang");
435 435
 
436
-	$t = false;
437
-	while ($row = sql_fetch($s)) {
438
-		$id_rubrique = $row['id_rubrique'];
439
-		$t = sql_updateq('spip_rubriques', array('lang' => $row['lang'], 'langue_choisie' => 'non'),
440
-			"id_rubrique=" . intval($id_rubrique));
441
-	}
436
+    $t = false;
437
+    while ($row = sql_fetch($s)) {
438
+        $id_rubrique = $row['id_rubrique'];
439
+        $t = sql_updateq('spip_rubriques', array('lang' => $row['lang'], 'langue_choisie' => 'non'),
440
+            "id_rubrique=" . intval($id_rubrique));
441
+    }
442 442
 
443
-	return $t;
443
+    return $t;
444 444
 }
445 445
 
446 446
 /**
@@ -460,30 +460,30 @@  discard block
 block discarded – undo
460 460
  **/
461 461
 function calculer_langues_rubriques() {
462 462
 
463
-	// rubriques (recursivite)
464
-	sql_updateq("spip_rubriques", array("lang" => $GLOBALS['meta']['langue_site'], "langue_choisie" => 'non'),
465
-		"id_parent=0 AND langue_choisie != 'oui'");
466
-	while (calculer_langues_rubriques_etape()) {
467
-		;
468
-	}
469
-
470
-	// articles
471
-	$s = sql_select("A.id_article AS id_article, R.lang AS lang", "spip_articles AS A, spip_rubriques AS R",
472
-		"A.id_rubrique = R.id_rubrique AND A.langue_choisie != 'oui' AND (length(A.lang)=0 OR length(R.lang)>0) AND R.lang<>A.lang");
473
-	while ($row = sql_fetch($s)) {
474
-		$id_article = $row['id_article'];
475
-		sql_updateq('spip_articles', array("lang" => $row['lang'], 'langue_choisie' => 'non'),
476
-			"id_article=" . intval($id_article));
477
-	}
478
-
479
-	if ($GLOBALS['meta']['multi_rubriques'] == 'oui') {
480
-
481
-		$langues = calculer_langues_utilisees();
482
-		ecrire_meta('langues_utilisees', $langues);
483
-	}
484
-
485
-	// avertir les plugins qui peuvent faire leur mises a jour egalement
486
-	pipeline('trig_calculer_langues_rubriques', '');
463
+    // rubriques (recursivite)
464
+    sql_updateq("spip_rubriques", array("lang" => $GLOBALS['meta']['langue_site'], "langue_choisie" => 'non'),
465
+        "id_parent=0 AND langue_choisie != 'oui'");
466
+    while (calculer_langues_rubriques_etape()) {
467
+        ;
468
+    }
469
+
470
+    // articles
471
+    $s = sql_select("A.id_article AS id_article, R.lang AS lang", "spip_articles AS A, spip_rubriques AS R",
472
+        "A.id_rubrique = R.id_rubrique AND A.langue_choisie != 'oui' AND (length(A.lang)=0 OR length(R.lang)>0) AND R.lang<>A.lang");
473
+    while ($row = sql_fetch($s)) {
474
+        $id_article = $row['id_article'];
475
+        sql_updateq('spip_articles', array("lang" => $row['lang'], 'langue_choisie' => 'non'),
476
+            "id_article=" . intval($id_article));
477
+    }
478
+
479
+    if ($GLOBALS['meta']['multi_rubriques'] == 'oui') {
480
+
481
+        $langues = calculer_langues_utilisees();
482
+        ecrire_meta('langues_utilisees', $langues);
483
+    }
484
+
485
+    // avertir les plugins qui peuvent faire leur mises a jour egalement
486
+    pipeline('trig_calculer_langues_rubriques', '');
487 487
 }
488 488
 
489 489
 
@@ -500,77 +500,77 @@  discard block
 block discarded – undo
500 500
  *    Liste des langues utilisées séparées par des virgules
501 501
  **/
502 502
 function calculer_langues_utilisees($serveur = '') {
503
-	include_spip('public/interfaces');
504
-	include_spip('public/compiler');
505
-	include_spip('public/composer');
506
-	include_spip('public/phraser_html');
507
-	$langues = array();
508
-
509
-	$langues[$GLOBALS['meta']['langue_site']] = 1;
510
-
511
-	include_spip('base/objets');
512
-	$tables = lister_tables_objets_sql();
513
-	$trouver_table = charger_fonction('trouver_table', 'base');
514
-
515
-	foreach (array_keys($tables) as $t) {
516
-		$desc = $trouver_table($t, $serveur);
517
-		// c'est une table avec des langues
518
-		if ($desc['exist']
519
-			and isset($desc['field']['lang'])
520
-			and isset($desc['field']['langue_choisie'])
521
-		) {
522
-
523
-			$boucle = new Boucle();
524
-			$boucle->show = $desc;
525
-			$boucle->nom = 'calculer_langues_utilisees';
526
-			$boucle->id_boucle = $desc['table_objet'];
527
-			$boucle->id_table = $desc['table_objet'];
528
-			$boucle->sql_serveur = $serveur;
529
-			$boucle->select[] = "DISTINCT lang";
530
-			$boucle->from[$desc['table_objet']] = $t;
531
-			$boucle->separateur[] = ',';
532
-			$boucle->return = '$Pile[$SP][\'lang\']';
533
-			$boucle->iterateur = 'sql';
534
-
535
-			$boucle->descr['nom'] = 'objet_test_si_publie'; // eviter notice php
536
-			$boucle->descr['sourcefile'] = 'internal';
537
-
538
-			$boucle = pipeline('pre_boucle', $boucle);
539
-
540
-			if (isset($desc['statut'])
541
-				and $desc['statut']
542
-			) {
543
-				$boucles = array(
544
-					'calculer_langues_utilisees' => $boucle,
545
-				);
546
-				// generer un nom de fonction "anonyme" unique
547
-				do {
548
-					$functionname = 'f_calculer_langues_utilisees_' . $boucle->id_table . '_' . time() . '_' . rand();
549
-				} while (function_exists($functionname));
550
-				$code = calculer_boucle('calculer_langues_utilisees', $boucles);
551
-				$code = '$SP=0; $command=array();$command["connect"] = $connect = "' . $serveur . '"; $Pile=array(0=>array());' . "\n" . $code;
552
-				$code = 'function ' . $functionname . '(){' . $code . '};$res = ' . $functionname . '();';
553
-				$res = '';
554
-				eval($code);
555
-				$res = explode(',', $res);
556
-				foreach ($res as $lang) {
557
-					$langues[$lang] = 1;
558
-				}
559
-			} else {
560
-				$res = sql_select(implode(',', $boucle->select), $boucle->from);
561
-				while ($row = sql_fetch($res)) {
562
-					$langues[$row['lang']] = 1;
563
-				}
564
-			}
565
-		}
566
-	}
567
-
568
-	$langues = array_filter(array_keys($langues));
569
-	sort($langues);
570
-	$langues = join(',', $langues);
571
-	spip_log("langues utilisees: $langues");
572
-
573
-	return $langues;
503
+    include_spip('public/interfaces');
504
+    include_spip('public/compiler');
505
+    include_spip('public/composer');
506
+    include_spip('public/phraser_html');
507
+    $langues = array();
508
+
509
+    $langues[$GLOBALS['meta']['langue_site']] = 1;
510
+
511
+    include_spip('base/objets');
512
+    $tables = lister_tables_objets_sql();
513
+    $trouver_table = charger_fonction('trouver_table', 'base');
514
+
515
+    foreach (array_keys($tables) as $t) {
516
+        $desc = $trouver_table($t, $serveur);
517
+        // c'est une table avec des langues
518
+        if ($desc['exist']
519
+            and isset($desc['field']['lang'])
520
+            and isset($desc['field']['langue_choisie'])
521
+        ) {
522
+
523
+            $boucle = new Boucle();
524
+            $boucle->show = $desc;
525
+            $boucle->nom = 'calculer_langues_utilisees';
526
+            $boucle->id_boucle = $desc['table_objet'];
527
+            $boucle->id_table = $desc['table_objet'];
528
+            $boucle->sql_serveur = $serveur;
529
+            $boucle->select[] = "DISTINCT lang";
530
+            $boucle->from[$desc['table_objet']] = $t;
531
+            $boucle->separateur[] = ',';
532
+            $boucle->return = '$Pile[$SP][\'lang\']';
533
+            $boucle->iterateur = 'sql';
534
+
535
+            $boucle->descr['nom'] = 'objet_test_si_publie'; // eviter notice php
536
+            $boucle->descr['sourcefile'] = 'internal';
537
+
538
+            $boucle = pipeline('pre_boucle', $boucle);
539
+
540
+            if (isset($desc['statut'])
541
+                and $desc['statut']
542
+            ) {
543
+                $boucles = array(
544
+                    'calculer_langues_utilisees' => $boucle,
545
+                );
546
+                // generer un nom de fonction "anonyme" unique
547
+                do {
548
+                    $functionname = 'f_calculer_langues_utilisees_' . $boucle->id_table . '_' . time() . '_' . rand();
549
+                } while (function_exists($functionname));
550
+                $code = calculer_boucle('calculer_langues_utilisees', $boucles);
551
+                $code = '$SP=0; $command=array();$command["connect"] = $connect = "' . $serveur . '"; $Pile=array(0=>array());' . "\n" . $code;
552
+                $code = 'function ' . $functionname . '(){' . $code . '};$res = ' . $functionname . '();';
553
+                $res = '';
554
+                eval($code);
555
+                $res = explode(',', $res);
556
+                foreach ($res as $lang) {
557
+                    $langues[$lang] = 1;
558
+                }
559
+            } else {
560
+                $res = sql_select(implode(',', $boucle->select), $boucle->from);
561
+                while ($row = sql_fetch($res)) {
562
+                    $langues[$row['lang']] = 1;
563
+                }
564
+            }
565
+        }
566
+    }
567
+
568
+    $langues = array_filter(array_keys($langues));
569
+    sort($langues);
570
+    $langues = join(',', $langues);
571
+    spip_log("langues utilisees: $langues");
572
+
573
+    return $langues;
574 574
 }
575 575
 
576 576
 /**
@@ -600,9 +600,9 @@  discard block
 block discarded – undo
600 600
  *     incluant les rubriques noeuds et toutes leurs descendances
601 601
  */
602 602
 function calcul_branche_in($id) {
603
-	$calcul_branche_in = charger_fonction('calcul_branche_in', 'inc');
603
+    $calcul_branche_in = charger_fonction('calcul_branche_in', 'inc');
604 604
 
605
-	return $calcul_branche_in($id);
605
+    return $calcul_branche_in($id);
606 606
 }
607 607
 
608 608
 /**
@@ -620,9 +620,9 @@  discard block
 block discarded – undo
620 620
  *     incluant les rubriques transmises et toutes leurs parentées
621 621
  */
622 622
 function calcul_hierarchie_in($id, $tout = true) {
623
-	$calcul_hierarchie_in = charger_fonction('calcul_hierarchie_in', 'inc');
623
+    $calcul_hierarchie_in = charger_fonction('calcul_hierarchie_in', 'inc');
624 624
 
625
-	return $calcul_hierarchie_in($id, $tout);
625
+    return $calcul_hierarchie_in($id, $tout);
626 626
 }
627 627
 
628 628
 
@@ -643,38 +643,38 @@  discard block
 block discarded – undo
643 643
  *     incluant les rubriques noeuds et toutes leurs descendances
644 644
  */
645 645
 function inc_calcul_branche_in_dist($id) {
646
-	static $b = array();
647
-
648
-	// normaliser $id qui a pu arriver comme un array, comme un entier, ou comme une chaine NN,NN,NN
649
-	if (!is_array($id)) {
650
-		$id = explode(',', $id);
651
-	}
652
-	$id = join(',', array_map('intval', $id));
653
-	if (isset($b[$id])) {
654
-		return $b[$id];
655
-	}
656
-
657
-	// Notre branche commence par la rubrique de depart
658
-	$branche = $r = $id;
659
-
660
-	// On ajoute une generation (les filles de la generation precedente)
661
-	// jusqu'a epuisement, en se protegeant des references circulaires
662
-	$maxiter = 10000;
663
-	while ($maxiter-- and $filles = sql_allfetsel(
664
-			'id_rubrique',
665
-			'spip_rubriques',
666
-			sql_in('id_parent', $r) . " AND " . sql_in('id_rubrique', $r, 'NOT')
667
-		)) {
668
-		$r = join(',', array_column($filles, 'id_rubrique'));
669
-		$branche .= ',' . $r;
670
-	}
671
-
672
-	# securite pour ne pas plomber la conso memoire sur les sites prolifiques
673
-	if (strlen($branche) < 10000) {
674
-		$b[$id] = $branche;
675
-	}
676
-
677
-	return $branche;
646
+    static $b = array();
647
+
648
+    // normaliser $id qui a pu arriver comme un array, comme un entier, ou comme une chaine NN,NN,NN
649
+    if (!is_array($id)) {
650
+        $id = explode(',', $id);
651
+    }
652
+    $id = join(',', array_map('intval', $id));
653
+    if (isset($b[$id])) {
654
+        return $b[$id];
655
+    }
656
+
657
+    // Notre branche commence par la rubrique de depart
658
+    $branche = $r = $id;
659
+
660
+    // On ajoute une generation (les filles de la generation precedente)
661
+    // jusqu'a epuisement, en se protegeant des references circulaires
662
+    $maxiter = 10000;
663
+    while ($maxiter-- and $filles = sql_allfetsel(
664
+            'id_rubrique',
665
+            'spip_rubriques',
666
+            sql_in('id_parent', $r) . " AND " . sql_in('id_rubrique', $r, 'NOT')
667
+        )) {
668
+        $r = join(',', array_column($filles, 'id_rubrique'));
669
+        $branche .= ',' . $r;
670
+    }
671
+
672
+    # securite pour ne pas plomber la conso memoire sur les sites prolifiques
673
+    if (strlen($branche) < 10000) {
674
+        $b[$id] = $branche;
675
+    }
676
+
677
+    return $branche;
678 678
 }
679 679
 
680 680
 
@@ -696,43 +696,43 @@  discard block
 block discarded – undo
696 696
  *     incluant les rubriques transmises et toutes leurs parentées
697 697
  */
698 698
 function inc_calcul_hierarchie_in_dist($id, $tout = true) {
699
-	static $b = array();
700
-
701
-	// normaliser $id qui a pu arriver comme un array, comme un entier, ou comme une chaine NN,NN,NN
702
-	if (!is_array($id)) {
703
-		$id = explode(',', $id);
704
-	}
705
-	$id = join(',', array_map('intval', $id));
706
-
707
-	if (isset($b[$id])) {
708
-		// Notre branche commence par la rubrique de depart si $tout=true
709
-		return $tout ? (strlen($b[$id]) ? $b[$id] . ",$id" : $id) : $b[$id];
710
-	}
711
-
712
-	$hier = "";
713
-
714
-	// On ajoute une generation (les filles de la generation precedente)
715
-	// jusqu'a epuisement, en se protegeant des references circulaires
716
-	$ids_nouveaux_parents = $id;
717
-	$maxiter = 10000;
718
-	while ($maxiter-- and $parents = sql_allfetsel(
719
-			'id_parent',
720
-			'spip_rubriques',
721
-			sql_in('id_rubrique', $ids_nouveaux_parents) . " AND " . sql_in('id_parent', $hier, 'NOT')
722
-		)) {
723
-		$ids_nouveaux_parents = join(',', array_column($parents, 'id_parent'));
724
-		$hier = $ids_nouveaux_parents . (strlen($hier) ? ',' . $hier : '');
725
-	}
726
-
727
-	# securite pour ne pas plomber la conso memoire sur les sites prolifiques
728
-	if (strlen($hier) < 10000) {
729
-		$b[$id] = $hier;
730
-	}
731
-
732
-	// Notre branche commence par la rubrique de depart si $tout=true
733
-	$hier = $tout ? (strlen($hier) ? "$hier,$id" : $id) : $hier;
734
-
735
-	return $hier;
699
+    static $b = array();
700
+
701
+    // normaliser $id qui a pu arriver comme un array, comme un entier, ou comme une chaine NN,NN,NN
702
+    if (!is_array($id)) {
703
+        $id = explode(',', $id);
704
+    }
705
+    $id = join(',', array_map('intval', $id));
706
+
707
+    if (isset($b[$id])) {
708
+        // Notre branche commence par la rubrique de depart si $tout=true
709
+        return $tout ? (strlen($b[$id]) ? $b[$id] . ",$id" : $id) : $b[$id];
710
+    }
711
+
712
+    $hier = "";
713
+
714
+    // On ajoute une generation (les filles de la generation precedente)
715
+    // jusqu'a epuisement, en se protegeant des references circulaires
716
+    $ids_nouveaux_parents = $id;
717
+    $maxiter = 10000;
718
+    while ($maxiter-- and $parents = sql_allfetsel(
719
+            'id_parent',
720
+            'spip_rubriques',
721
+            sql_in('id_rubrique', $ids_nouveaux_parents) . " AND " . sql_in('id_parent', $hier, 'NOT')
722
+        )) {
723
+        $ids_nouveaux_parents = join(',', array_column($parents, 'id_parent'));
724
+        $hier = $ids_nouveaux_parents . (strlen($hier) ? ',' . $hier : '');
725
+    }
726
+
727
+    # securite pour ne pas plomber la conso memoire sur les sites prolifiques
728
+    if (strlen($hier) < 10000) {
729
+        $b[$id] = $hier;
730
+    }
731
+
732
+    // Notre branche commence par la rubrique de depart si $tout=true
733
+    $hier = $tout ? (strlen($hier) ? "$hier,$id" : $id) : $hier;
734
+
735
+    return $hier;
736 736
 }
737 737
 
738 738
 
@@ -750,38 +750,38 @@  discard block
 block discarded – undo
750 750
  * @return void
751 751
  **/
752 752
 function calculer_prochain_postdate($check = false) {
753
-	include_spip('base/abstract_sql');
754
-	if ($check) {
755
-		$postdates = ($GLOBALS['meta']["post_dates"] == "non") ?
756
-			"AND A.date <= " . sql_quote(date('Y-m-d H:i:s')) : '';
757
-
758
-		$r = sql_select("DISTINCT A.id_rubrique AS id",
759
-			"spip_articles AS A LEFT JOIN spip_rubriques AS R ON A.id_rubrique=R.id_rubrique",
760
-			"R.statut != 'publie' AND A.statut='publie'$postdates");
761
-		while ($row = sql_fetch($r)) {
762
-			publier_branche_rubrique($row['id']);
763
-		}
764
-
765
-		pipeline('trig_calculer_prochain_postdate', '');
766
-	}
767
-
768
-	$t = sql_fetsel("date", "spip_articles", "statut='publie' AND date > " . sql_quote(date('Y-m-d H:i:s')), "", "date",
769
-		"1");
770
-
771
-	if ($t) {
772
-		$t = $t['date'];
773
-		if (!isset($GLOBALS['meta']['date_prochain_postdate'])
774
-			or $t <> $GLOBALS['meta']['date_prochain_postdate']
775
-		) {
776
-			ecrire_meta('date_prochain_postdate', strtotime($t));
777
-			ecrire_meta('derniere_modif', time());
778
-		}
779
-	} else {
780
-		effacer_meta('date_prochain_postdate');
781
-		ecrire_meta('derniere_modif', time());
782
-	}
783
-
784
-	spip_log("prochain postdate: $t");
753
+    include_spip('base/abstract_sql');
754
+    if ($check) {
755
+        $postdates = ($GLOBALS['meta']["post_dates"] == "non") ?
756
+            "AND A.date <= " . sql_quote(date('Y-m-d H:i:s')) : '';
757
+
758
+        $r = sql_select("DISTINCT A.id_rubrique AS id",
759
+            "spip_articles AS A LEFT JOIN spip_rubriques AS R ON A.id_rubrique=R.id_rubrique",
760
+            "R.statut != 'publie' AND A.statut='publie'$postdates");
761
+        while ($row = sql_fetch($r)) {
762
+            publier_branche_rubrique($row['id']);
763
+        }
764
+
765
+        pipeline('trig_calculer_prochain_postdate', '');
766
+    }
767
+
768
+    $t = sql_fetsel("date", "spip_articles", "statut='publie' AND date > " . sql_quote(date('Y-m-d H:i:s')), "", "date",
769
+        "1");
770
+
771
+    if ($t) {
772
+        $t = $t['date'];
773
+        if (!isset($GLOBALS['meta']['date_prochain_postdate'])
774
+            or $t <> $GLOBALS['meta']['date_prochain_postdate']
775
+        ) {
776
+            ecrire_meta('date_prochain_postdate', strtotime($t));
777
+            ecrire_meta('derniere_modif', time());
778
+        }
779
+    } else {
780
+        effacer_meta('date_prochain_postdate');
781
+        ecrire_meta('derniere_modif', time());
782
+    }
783
+
784
+    spip_log("prochain postdate: $t");
785 785
 }
786 786
 
787 787
 /**
@@ -806,42 +806,42 @@  discard block
 block discarded – undo
806 806
  */
807 807
 function creer_rubrique_nommee($titre, $id_parent = 0, $serveur = '') {
808 808
 
809
-	// eclater l'arborescence demandee
810
-	// echapper les </multi> et autres balises fermantes html
811
-	$titre = preg_replace(",</([a-z][^>]*)>,ims", "<@\\1>", $titre);
812
-	$arbo = explode('/', preg_replace(',^/,', '', $titre));
813
-	include_spip('base/abstract_sql');
814
-	foreach ($arbo as $titre) {
815
-		// retablir les </multi> et autres balises fermantes html
816
-		$titre = preg_replace(",<@([a-z][^>]*)>,ims", "</\\1>", $titre);
817
-		$r = sql_getfetsel("id_rubrique", "spip_rubriques",
818
-			"titre = " . sql_quote($titre) . " AND id_parent=" . intval($id_parent),
819
-			$groupby = array(), $orderby = array(), $limit = '', $having = array(), $serveur);
820
-		if ($r !== null) {
821
-			$id_parent = $r;
822
-		} else {
823
-			$id_rubrique = sql_insertq('spip_rubriques', array(
824
-					'titre' => $titre,
825
-					'id_parent' => $id_parent,
826
-					'statut' => 'prepa'
827
-				), $desc = array(), $serveur);
828
-			if ($id_parent > 0) {
829
-				$data = sql_fetsel("id_secteur,lang", "spip_rubriques", "id_rubrique=$id_parent",
830
-					$groupby = array(), $orderby = array(), $limit = '', $having = array(), $serveur);
831
-				$id_secteur = $data['id_secteur'];
832
-				$lang = $data['lang'];
833
-			} else {
834
-				$id_secteur = $id_rubrique;
835
-				$lang = $GLOBALS['meta']['langue_site'];
836
-			}
837
-
838
-			sql_updateq('spip_rubriques', array('id_secteur' => $id_secteur, "lang" => $lang),
839
-				"id_rubrique=" . intval($id_rubrique), $desc = '', $serveur);
840
-
841
-			// pour la recursion
842
-			$id_parent = $id_rubrique;
843
-		}
844
-	}
845
-
846
-	return intval($id_parent);
809
+    // eclater l'arborescence demandee
810
+    // echapper les </multi> et autres balises fermantes html
811
+    $titre = preg_replace(",</([a-z][^>]*)>,ims", "<@\\1>", $titre);
812
+    $arbo = explode('/', preg_replace(',^/,', '', $titre));
813
+    include_spip('base/abstract_sql');
814
+    foreach ($arbo as $titre) {
815
+        // retablir les </multi> et autres balises fermantes html
816
+        $titre = preg_replace(",<@([a-z][^>]*)>,ims", "</\\1>", $titre);
817
+        $r = sql_getfetsel("id_rubrique", "spip_rubriques",
818
+            "titre = " . sql_quote($titre) . " AND id_parent=" . intval($id_parent),
819
+            $groupby = array(), $orderby = array(), $limit = '', $having = array(), $serveur);
820
+        if ($r !== null) {
821
+            $id_parent = $r;
822
+        } else {
823
+            $id_rubrique = sql_insertq('spip_rubriques', array(
824
+                    'titre' => $titre,
825
+                    'id_parent' => $id_parent,
826
+                    'statut' => 'prepa'
827
+                ), $desc = array(), $serveur);
828
+            if ($id_parent > 0) {
829
+                $data = sql_fetsel("id_secteur,lang", "spip_rubriques", "id_rubrique=$id_parent",
830
+                    $groupby = array(), $orderby = array(), $limit = '', $having = array(), $serveur);
831
+                $id_secteur = $data['id_secteur'];
832
+                $lang = $data['lang'];
833
+            } else {
834
+                $id_secteur = $id_rubrique;
835
+                $lang = $GLOBALS['meta']['langue_site'];
836
+            }
837
+
838
+            sql_updateq('spip_rubriques', array('id_secteur' => $id_secteur, "lang" => $lang),
839
+                "id_rubrique=" . intval($id_rubrique), $desc = '', $serveur);
840
+
841
+            // pour la recursion
842
+            $id_parent = $id_rubrique;
843
+        }
844
+    }
845
+
846
+    return intval($id_parent);
847 847
 }
Please login to merge, or discard this patch.
Spacing   +34 added lines, -34 removed lines patch added patch discarded remove patch
@@ -105,8 +105,8 @@  discard block
 block discarded – undo
105 105
 	$id_pred = $id_rubrique;
106 106
 	while (true) {
107 107
 		sql_updateq('spip_rubriques', array('statut' => 'publie', 'date' => date('Y-m-d H:i:s')),
108
-			"id_rubrique=" . intval($id_rubrique));
109
-		$id_parent = sql_getfetsel('id_parent', 'spip_rubriques AS R', "R.id_rubrique=" . intval($id_rubrique));
108
+			"id_rubrique=".intval($id_rubrique));
109
+		$id_parent = sql_getfetsel('id_parent', 'spip_rubriques AS R', "R.id_rubrique=".intval($id_rubrique));
110 110
 		if (!$id_parent) {
111 111
 			break;
112 112
 		}
@@ -142,7 +142,7 @@  discard block
 block discarded – undo
142 142
 			return $id_pred != $id_rubrique;
143 143
 		}
144 144
 		// passer au parent si on a depublie
145
-		$r = sql_fetsel("id_parent", "spip_rubriques", "id_rubrique=" . intval($id_pred));
145
+		$r = sql_fetsel("id_parent", "spip_rubriques", "id_rubrique=".intval($id_pred));
146 146
 		$id_pred = $r['id_parent'];
147 147
 	}
148 148
 
@@ -167,14 +167,14 @@  discard block
 block discarded – undo
167 167
 		$date = date('Y-m-d H:i:s');
168 168
 	}
169 169
 	$postdates = ($GLOBALS['meta']["post_dates"] == "non") ?
170
-		" AND date <= " . sql_quote($date) : '';
170
+		" AND date <= ".sql_quote($date) : '';
171 171
 
172 172
 	if (!$id_rubrique = intval($id_rubrique)) {
173 173
 		return false;
174 174
 	}
175 175
 
176 176
 	// verifier qu'elle existe et est bien publiee
177
-	$r = sql_fetsel('id_rubrique,statut', 'spip_rubriques', "id_rubrique=" . intval($id_rubrique));
177
+	$r = sql_fetsel('id_rubrique,statut', 'spip_rubriques', "id_rubrique=".intval($id_rubrique));
178 178
 	if (!$r or $r['statut'] !== 'publie') {
179 179
 		return false;
180 180
 	}
@@ -183,11 +183,11 @@  discard block
 block discarded – undo
183 183
 	// Le type de l'objet est au pluriel
184 184
 	$compte = array(
185 185
 		'articles' => sql_countsel("spip_articles",
186
-			"id_rubrique=" . intval($id_rubrique) . " AND statut='publie'$postdates"),
187
-		'rubriques' => sql_countsel("spip_rubriques", "id_parent=" . intval($id_rubrique) . " AND statut='publie'"),
186
+			"id_rubrique=".intval($id_rubrique)." AND statut='publie'$postdates"),
187
+		'rubriques' => sql_countsel("spip_rubriques", "id_parent=".intval($id_rubrique)." AND statut='publie'"),
188 188
 		'documents' => sql_countsel(
189 189
 			"spip_documents AS D JOIN spip_documents_liens AS L ON D.id_document=L.id_document", 
190
-			"L.id_objet=" . intval($id_rubrique) . " AND L.objet='rubrique' and D.mode NOT IN('logoon', 'logooff') ")
190
+			"L.id_objet=".intval($id_rubrique)." AND L.objet='rubrique' and D.mode NOT IN('logoon', 'logooff') ")
191 191
 	);
192 192
 
193 193
 	// On passe le tableau des comptes dans un pipeline pour que les plugins puissent ajouter (ou retirer) des enfants
@@ -210,7 +210,7 @@  discard block
 block discarded – undo
210 210
 		}
211 211
 	}
212 212
 
213
-	sql_updateq("spip_rubriques", array("statut" => 'prepa'), "id_rubrique=" . intval($id_rubrique));
213
+	sql_updateq("spip_rubriques", array("statut" => 'prepa'), "id_rubrique=".intval($id_rubrique));
214 214
 
215 215
 #		spip_log("depublier_rubrique $id_pred");
216 216
 	return true;
@@ -273,7 +273,7 @@  discard block
 block discarded – undo
273 273
 
274 274
 	// Afficher les articles post-dates ?
275 275
 	$postdates = ($GLOBALS['meta']["post_dates"] == "non") ?
276
-		"AND A.date <= " . sql_quote(date('Y-m-d H:i:s')) : '';
276
+		"AND A.date <= ".sql_quote(date('Y-m-d H:i:s')) : '';
277 277
 
278 278
 	$r = sql_select(
279 279
 		"R.id_rubrique AS id, max(A.date) AS date_h",
@@ -281,7 +281,7 @@  discard block
 block discarded – undo
281 281
 		"A.date>R.date_tmp AND A.statut='publie' $postdates ", "R.id_rubrique");
282 282
 	while ($row = sql_fetch($r)) {
283 283
 		sql_updateq("spip_rubriques", array("statut_tmp" => 'publie', "date_tmp" => $row['date_h']),
284
-			"id_rubrique=" . intval($row['id']));
284
+			"id_rubrique=".intval($row['id']));
285 285
 	}
286 286
 
287 287
 	// point d'entree pour permettre a des plugins de gerer le statut
@@ -302,7 +302,7 @@  discard block
 block discarded – undo
302 302
 			"(SR.date_tmp>R.date_tmp OR R.statut_tmp<>'publie') AND SR.statut_tmp='publie' ", "R.id_rubrique");
303 303
 		while ($row = sql_fetch($r)) {
304 304
 			sql_updateq('spip_rubriques', array('statut_tmp' => 'publie', 'date_tmp' => $row['date_h']),
305
-				"id_rubrique=" . intval($row['id']));
305
+				"id_rubrique=".intval($row['id']));
306 306
 			$continuer = true;
307 307
 		}
308 308
 	} while ($continuer);
@@ -353,7 +353,7 @@  discard block
 block discarded – undo
353 353
 			and $rows = sql_allfetsel(
354 354
 				"A.id_rubrique AS id, R.id_secteur AS id_secteur, R.profondeur+1 as profondeur",
355 355
 				"spip_rubriques AS A JOIN spip_rubriques AS R ON A.id_parent = R.id_rubrique",
356
-				"R.profondeur=" . intval($prof) . " AND (A.id_secteur <> R.id_secteur OR A.profondeur > R.profondeur+1)",
356
+				"R.profondeur=".intval($prof)." AND (A.id_secteur <> R.id_secteur OR A.profondeur > R.profondeur+1)",
357 357
 				"", "R.id_secteur", "0,100")) {
358 358
 
359 359
 			$id_secteur = null;
@@ -382,8 +382,8 @@  discard block
 block discarded – undo
382 382
 			and $rows = sql_allfetsel(
383 383
 				"id_rubrique as id",
384 384
 				"spip_rubriques",
385
-				"profondeur=" . intval($prof + 1) . " AND id_parent NOT IN (" . sql_get_select("zzz.id_rubrique",
386
-					"spip_rubriques AS zzz", "zzz.profondeur=" . intval($prof)) . ")", '', '', '0,100')) {
385
+				"profondeur=".intval($prof + 1)." AND id_parent NOT IN (".sql_get_select("zzz.id_rubrique",
386
+					"spip_rubriques AS zzz", "zzz.profondeur=".intval($prof)).")", '', '', '0,100')) {
387 387
 			$rows = array_column($rows, 'id');
388 388
 			sql_updateq("spip_rubriques", array('profondeur' => $prof + 2), sql_in("id_rubrique", $rows));
389 389
 		}
@@ -392,7 +392,7 @@  discard block
 block discarded – undo
392 392
 		// si pas de rubrique a profondeur $prof+1 pas la peine de continuer
393 393
 		// si il reste des rubriques non vues, c'est une branche morte ou reference circulaire (base foireuse)
394 394
 		// on arrete les frais
395
-		if (sql_countsel("spip_rubriques", "profondeur=" . intval($prof + 1))) {
395
+		if (sql_countsel("spip_rubriques", "profondeur=".intval($prof + 1))) {
396 396
 			$prof++;
397 397
 			$continuer = true;
398 398
 		}
@@ -400,10 +400,10 @@  discard block
 block discarded – undo
400 400
 
401 401
 	// loger si la table des rubriques semble foireuse
402 402
 	// et mettre un id_secteur=0 sur ces rubriques pour eviter toute selection par les boucles
403
-	if (sql_countsel("spip_rubriques", "profondeur>" . intval($prof + 1))) {
404
-		spip_log("Les rubriques de profondeur>" . ($prof + 1) . " semblent suspectes (branches morte ou reference circulaire dans les parents)",
403
+	if (sql_countsel("spip_rubriques", "profondeur>".intval($prof + 1))) {
404
+		spip_log("Les rubriques de profondeur>".($prof + 1)." semblent suspectes (branches morte ou reference circulaire dans les parents)",
405 405
 			_LOG_CRITIQUE);
406
-		sql_update("spip_rubriques", array('id_secteur' => 0), "profondeur>" . intval($prof + 1));
406
+		sql_update("spip_rubriques", array('id_secteur' => 0), "profondeur>".intval($prof + 1));
407 407
 	}
408 408
 
409 409
 	// reparer les articles
@@ -411,7 +411,7 @@  discard block
 block discarded – undo
411 411
 		"A.id_rubrique = R.id_rubrique AND A.id_secteur <> R.id_secteur");
412 412
 
413 413
 	while ($row = sql_fetch($r)) {
414
-		sql_update("spip_articles", array("id_secteur" => $row['secteur']), "id_article=" . intval($row['id']));
414
+		sql_update("spip_articles", array("id_secteur" => $row['secteur']), "id_article=".intval($row['id']));
415 415
 	}
416 416
 
417 417
 	// avertir les plugins qui peuvent faire leur mises a jour egalement
@@ -437,7 +437,7 @@  discard block
 block discarded – undo
437 437
 	while ($row = sql_fetch($s)) {
438 438
 		$id_rubrique = $row['id_rubrique'];
439 439
 		$t = sql_updateq('spip_rubriques', array('lang' => $row['lang'], 'langue_choisie' => 'non'),
440
-			"id_rubrique=" . intval($id_rubrique));
440
+			"id_rubrique=".intval($id_rubrique));
441 441
 	}
442 442
 
443 443
 	return $t;
@@ -473,7 +473,7 @@  discard block
 block discarded – undo
473 473
 	while ($row = sql_fetch($s)) {
474 474
 		$id_article = $row['id_article'];
475 475
 		sql_updateq('spip_articles', array("lang" => $row['lang'], 'langue_choisie' => 'non'),
476
-			"id_article=" . intval($id_article));
476
+			"id_article=".intval($id_article));
477 477
 	}
478 478
 
479 479
 	if ($GLOBALS['meta']['multi_rubriques'] == 'oui') {
@@ -545,11 +545,11 @@  discard block
 block discarded – undo
545 545
 				);
546 546
 				// generer un nom de fonction "anonyme" unique
547 547
 				do {
548
-					$functionname = 'f_calculer_langues_utilisees_' . $boucle->id_table . '_' . time() . '_' . rand();
548
+					$functionname = 'f_calculer_langues_utilisees_'.$boucle->id_table.'_'.time().'_'.rand();
549 549
 				} while (function_exists($functionname));
550 550
 				$code = calculer_boucle('calculer_langues_utilisees', $boucles);
551
-				$code = '$SP=0; $command=array();$command["connect"] = $connect = "' . $serveur . '"; $Pile=array(0=>array());' . "\n" . $code;
552
-				$code = 'function ' . $functionname . '(){' . $code . '};$res = ' . $functionname . '();';
551
+				$code = '$SP=0; $command=array();$command["connect"] = $connect = "'.$serveur.'"; $Pile=array(0=>array());'."\n".$code;
552
+				$code = 'function '.$functionname.'(){'.$code.'};$res = '.$functionname.'();';
553 553
 				$res = '';
554 554
 				eval($code);
555 555
 				$res = explode(',', $res);
@@ -663,10 +663,10 @@  discard block
 block discarded – undo
663 663
 	while ($maxiter-- and $filles = sql_allfetsel(
664 664
 			'id_rubrique',
665 665
 			'spip_rubriques',
666
-			sql_in('id_parent', $r) . " AND " . sql_in('id_rubrique', $r, 'NOT')
666
+			sql_in('id_parent', $r)." AND ".sql_in('id_rubrique', $r, 'NOT')
667 667
 		)) {
668 668
 		$r = join(',', array_column($filles, 'id_rubrique'));
669
-		$branche .= ',' . $r;
669
+		$branche .= ','.$r;
670 670
 	}
671 671
 
672 672
 	# securite pour ne pas plomber la conso memoire sur les sites prolifiques
@@ -706,7 +706,7 @@  discard block
 block discarded – undo
706 706
 
707 707
 	if (isset($b[$id])) {
708 708
 		// Notre branche commence par la rubrique de depart si $tout=true
709
-		return $tout ? (strlen($b[$id]) ? $b[$id] . ",$id" : $id) : $b[$id];
709
+		return $tout ? (strlen($b[$id]) ? $b[$id].",$id" : $id) : $b[$id];
710 710
 	}
711 711
 
712 712
 	$hier = "";
@@ -718,10 +718,10 @@  discard block
 block discarded – undo
718 718
 	while ($maxiter-- and $parents = sql_allfetsel(
719 719
 			'id_parent',
720 720
 			'spip_rubriques',
721
-			sql_in('id_rubrique', $ids_nouveaux_parents) . " AND " . sql_in('id_parent', $hier, 'NOT')
721
+			sql_in('id_rubrique', $ids_nouveaux_parents)." AND ".sql_in('id_parent', $hier, 'NOT')
722 722
 		)) {
723 723
 		$ids_nouveaux_parents = join(',', array_column($parents, 'id_parent'));
724
-		$hier = $ids_nouveaux_parents . (strlen($hier) ? ',' . $hier : '');
724
+		$hier = $ids_nouveaux_parents.(strlen($hier) ? ','.$hier : '');
725 725
 	}
726 726
 
727 727
 	# securite pour ne pas plomber la conso memoire sur les sites prolifiques
@@ -753,7 +753,7 @@  discard block
 block discarded – undo
753 753
 	include_spip('base/abstract_sql');
754 754
 	if ($check) {
755 755
 		$postdates = ($GLOBALS['meta']["post_dates"] == "non") ?
756
-			"AND A.date <= " . sql_quote(date('Y-m-d H:i:s')) : '';
756
+			"AND A.date <= ".sql_quote(date('Y-m-d H:i:s')) : '';
757 757
 
758 758
 		$r = sql_select("DISTINCT A.id_rubrique AS id",
759 759
 			"spip_articles AS A LEFT JOIN spip_rubriques AS R ON A.id_rubrique=R.id_rubrique",
@@ -765,7 +765,7 @@  discard block
 block discarded – undo
765 765
 		pipeline('trig_calculer_prochain_postdate', '');
766 766
 	}
767 767
 
768
-	$t = sql_fetsel("date", "spip_articles", "statut='publie' AND date > " . sql_quote(date('Y-m-d H:i:s')), "", "date",
768
+	$t = sql_fetsel("date", "spip_articles", "statut='publie' AND date > ".sql_quote(date('Y-m-d H:i:s')), "", "date",
769 769
 		"1");
770 770
 
771 771
 	if ($t) {
@@ -815,7 +815,7 @@  discard block
 block discarded – undo
815 815
 		// retablir les </multi> et autres balises fermantes html
816 816
 		$titre = preg_replace(",<@([a-z][^>]*)>,ims", "</\\1>", $titre);
817 817
 		$r = sql_getfetsel("id_rubrique", "spip_rubriques",
818
-			"titre = " . sql_quote($titre) . " AND id_parent=" . intval($id_parent),
818
+			"titre = ".sql_quote($titre)." AND id_parent=".intval($id_parent),
819 819
 			$groupby = array(), $orderby = array(), $limit = '', $having = array(), $serveur);
820 820
 		if ($r !== null) {
821 821
 			$id_parent = $r;
@@ -836,7 +836,7 @@  discard block
 block discarded – undo
836 836
 			}
837 837
 
838 838
 			sql_updateq('spip_rubriques', array('id_secteur' => $id_secteur, "lang" => $lang),
839
-				"id_rubrique=" . intval($id_rubrique), $desc = '', $serveur);
839
+				"id_rubrique=".intval($id_rubrique), $desc = '', $serveur);
840 840
 
841 841
 			// pour la recursion
842 842
 			$id_parent = $id_rubrique;
Please login to merge, or discard this patch.