[SPIP] v3.2.1-->v3.2.2
[lhc/web/www.git] / www / ecrire / public / boucles.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2019 *
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 definit les boucles standard de SPIP
16 *
17 * @package SPIP\Core\Compilateur\Boucles
18 **/
19
20 if (!defined('_ECRIRE_INC_VERSION')) {
21 return;
22 }
23
24
25 /**
26 * Compile une boucle standard, sans condition rajoutée
27 *
28 * @param string $id_boucle
29 * Identifiant de la boucle
30 * @param array $boucles
31 * AST du squelette
32 * @return string
33 * Code PHP compilé de la boucle
34 **/
35 function boucle_DEFAUT_dist($id_boucle, &$boucles) {
36 return calculer_boucle($id_boucle, $boucles);
37 }
38
39
40 /**
41 * Compile une boucle récursive
42 *
43 * `<BOUCLE(BOUCLE)>`
44 *
45 * @link http://www.spip.net/914
46 *
47 * @param string $id_boucle
48 * Identifiant de la boucle
49 * @param array $boucles
50 * AST du squelette
51 * @return string
52 * Code PHP compilé de la boucle
53 **/
54 function boucle_BOUCLE_dist($id_boucle, &$boucles) {
55 return calculer_boucle($id_boucle, $boucles);
56 }
57
58
59 /**
60 * Compile une boucle HIERARCHIE
61 *
62 * La boucle `<BOUCLE(HIERARCHIE)>` retourne la liste des RUBRIQUES
63 * qui mènent de la racine du site à la rubrique ou à l’article en cours.
64 *
65 * Cette boucle (aliasée sur la table RUBRIQUES)
66 *
67 * - recherche un id_rubrique dans les boucles parentes,
68 * - extrait sa hiérarchie, en prenant ou non la rubrique en cours en fonction du critère {tout}
69 * - crée une condition WHERE avec ces identifiants ansi qu'une clause ORDER
70 * - compile la boucle.
71 *
72 * Le code compilé calculant la hierarchie est ajouté au tout début de la
73 * fonction de boucle et quitte la boucle si aucune rubrique n'est trouvée.
74 *
75 * @link http://www.spip.net/913
76 *
77 * @param string $id_boucle
78 * Identifiant de la boucle
79 * @param array $boucles
80 * AST du squelette
81 * @return string
82 * Code PHP compilé de la boucle
83 **/
84 function boucle_HIERARCHIE_dist($id_boucle, &$boucles) {
85 $boucle = &$boucles[$id_boucle];
86 $id_table = $boucle->id_table . ".id_rubrique";
87
88 // Si la boucle mere est une boucle RUBRIQUES il faut ignorer la feuille
89 // sauf en presence du critere {tout} (vu par phraser_html)
90 // ou {id_article} qui positionne aussi le {tout}
91
92 $boucle->hierarchie = 'if (!($id_rubrique = intval('
93 . calculer_argument_precedent($boucle->id_boucle, 'id_rubrique', $boucles)
94 . ")))\n\t\treturn '';\n\t"
95 . "include_spip('inc/rubriques');\n\t"
96 . '$hierarchie = calcul_hierarchie_in($id_rubrique,'
97 . (isset($boucle->modificateur['tout']) ? 'true' : 'false')
98 . ");\n\t"
99 . 'if (!$hierarchie) return "";' . "\n\t";
100
101 $boucle->where[] = array("'IN'", "'$id_table'", '"($hierarchie)"');
102
103 $order = "FIELD($id_table, \$hierarchie)";
104 if (!isset($boucle->default_order[0]) or $boucle->default_order[0] != " DESC") {
105 $boucle->default_order[] = "\"$order\"";
106 } else {
107 $boucle->default_order[0] = "\"$order DESC\"";
108 }
109
110 return calculer_boucle($id_boucle, $boucles);
111 }