[SPIP] v3.2.1-->v3.2.2
[lhc/web/www.git] / www / ecrire / inc / presenter_enfants.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 if (!defined('_ECRIRE_INC_VERSION')) {
15 return;
16 }
17
18 include_spip('inc/autoriser');
19 include_spip('inc/presentation');
20
21 /**
22 * Crée l'affichage des listes de rubriques dans le privé
23 *
24 * @param int $collection
25 * L'identifiant numérique de la rubrique à lister
26 * @param int $debut
27 * Le numéro de la pagination si paginé (> 500)
28 * @param int $limite
29 * Le pas de pagination si paginé (> 500)
30 * @return array $res
31 * Un tableau des sous rubriques
32 */
33 function enfant_rub($collection, $debut = 0, $limite = 500) {
34 $voir_logo = (isset($GLOBALS['meta']['image_process']) and $GLOBALS['meta']['image_process'] != 'non');
35 $logo = '';
36
37 if ($voir_logo) {
38 $chercher_logo = charger_fonction('chercher_logo', 'inc');
39 include_spip('inc/filtres_images_mini');
40 }
41
42 $res = array();
43
44 $result = sql_select(
45 'id_rubrique, id_parent, titre, descriptif, lang',
46 'spip_rubriques',
47 'id_parent='.intval($collection),
48 '',
49 '0+titre,titre',
50 "$debut,$limite"
51 );
52 while ($row = sql_fetch($result)) {
53 $id_rubrique = $row['id_rubrique'];
54 $id_parent = $row['id_parent'];
55 // pour etre sur de passer par tous les traitements
56 $titre = generer_info_entite($id_rubrique, 'rubrique', 'titre');
57 if ('' !== ($rang = recuperer_numero($row['titre']))) {
58 $rang = "$rang. ";
59 }
60
61 if (autoriser('voir', 'rubrique', $id_rubrique)) {
62 $les_sous_enfants = sous_enfant_rub($id_rubrique);
63
64 changer_typo($row['lang']);
65 $lang_dir = lang_dir($row['lang']);
66 $descriptif = propre($row['descriptif']);
67
68 if ($voir_logo) {
69 if ($logo = $chercher_logo($id_rubrique, 'id_rubrique', 'on')) {
70 list($fid, $dir, $nom, $format) = $logo;
71 $logo = image_reduire("<img src='$fid' alt='' />", 48, 36);
72 if ($logo) {
73 $logo = inserer_attribut($logo, 'class', 'logo');
74 }
75 }
76 }
77
78 $lib_bouton = (!acces_restreint_rubrique($id_rubrique) ? '' :
79 http_img_pack(
80 'auteur-0minirezo-16.png',
81 '',
82 " width='16' height='16'",
83 _T('image_administrer_rubrique')
84 )) .
85 " <a dir='$lang_dir'" .
86 ($row['lang'] !== $GLOBALS['spip_lang'] ? " hreflang='" . $row['lang'] . "'" : '') .
87 " href='" .
88 generer_url_entite($id_rubrique, 'rubrique') .
89 "'>" .
90 $rang . $titre .
91 '</a>';
92
93 $titre = (is_string($logo) ? $logo : '') .
94 bouton_block_depliable($lib_bouton, $les_sous_enfants ? false : -1, "enfants$id_rubrique");
95
96 $res[] =
97 debut_cadre_sous_rub(($id_parent ? 'rubrique-24.png' : 'secteur-24.png'), true, '', $titre) .
98 (!$descriptif ? '' : "\n<div class='descriptif'>$descriptif</div>") .
99 $les_sous_enfants .
100 fin_cadre_sous_rub(true);
101 }
102 }
103
104 changer_typo($GLOBALS['spip_lang']); # remettre la typo de l'interface pour la suite
105 return $res;
106 }
107
108 /**
109 * Affiche les enfants d'une sous rubrique dans un bloc dépliable
110 * (Utilisé dans les pages du privé)
111 *
112 * @param int $collection2
113 * L'identifiant numérique de la rubrique parente
114 * @return string
115 * Le contenu du bloc dépliable
116 */
117 function sous_enfant_rub($collection2) {
118 $nb = sql_countsel('spip_rubriques', 'id_parent='.intval($collection2));
119
120 $retour = '';
121 $pagination = '';
122 $debut = 0;
123 $limite = 500;
124
125 /**
126 * On ne va afficher que 500 résultats max
127 * Si > 500 on affiche une pagination
128 */
129 if ($nb > $limite) {
130 $debut = _request('debut_rubrique' . $collection2) ? _request('debut_rubrique' . $collection2) : $debut;
131 $pagination = chercher_filtre('pagination');
132 $pagination = '<p class="pagination">' . $pagination($nb, '_rubrique' . $collection2, $debut, $limite, true,
133 'prive') . '</p>';
134 $limite = $debut + $limite;
135 }
136
137 $result = sql_select(
138 'id_rubrique, id_parent, titre, lang',
139 'spip_rubriques',
140 'id_parent='.intval($collection2),
141 '',
142 '0+titre,titre',
143 "$debut,$limite"
144 );
145
146 while ($row = sql_fetch($result)) {
147 $id_rubrique2 = $row['id_rubrique'];
148 $titre2 = generer_info_entite(
149 $id_rubrique2,
150 'rubrique',
151 'titre'
152 ); // pour etre sur de passer par tous les traitements
153 if ('' !== ($rang2 = recuperer_numero($row['titre']))) {
154 $rang2 = "$rang2. ";
155 }
156
157 changer_typo($row['lang']);
158 $lang_dir = lang_dir($row['lang']);
159 if (autoriser('voir', 'rubrique', $id_rubrique2)) {
160 $retour .= "\n<li class='item' dir='$lang_dir'><a href='" . generer_url_entite(
161 $id_rubrique2,
162 'rubrique'
163 ) . "'>" . $rang2 . $titre2 . "</a></li>\n";
164 }
165 }
166
167 $retour = $pagination . $retour . $pagination;
168
169 if (!$retour) {
170 return '';
171 }
172
173 return debut_block_depliable($debut > 0 ? true : false, "enfants$collection2")
174 . "\n<ul class='liste-items sous-sous-rub'>\n"
175 . $retour
176 . "</ul>\n" . fin_block() . "\n\n";
177 }
178
179 /**
180 * Affiche la liste des rubriques enfants d'une rubrique
181 * (Utilisé dans les pages du privé notamment ?exec=rubriques)
182 *
183 * Si plus de 500 rubriques enfants, on pagine par 500 les résultats
184 *
185 * @param int $id_rubrique
186 * L'identifiant numérique de la rubrique parente (0 par défaut, la racine)
187 * @return string $res
188 * Le contenu textuel affiché, la liste des sous rubriques
189 */
190 function afficher_enfant_rub($id_rubrique = 0) {
191 $pagination = '';
192 $debut = 0;
193 $limite = 500;
194
195 $nb = sql_countsel('spip_rubriques', 'id_parent='.intval($id_rubrique));
196
197 if ($nb > $limite) {
198 $debut = _request('debut_rubrique' . $id_rubrique) ? _request('debut_rubrique' . $id_rubrique) : $debut;
199 $pagination = chercher_filtre('pagination');
200 $pagination = '<br class="nettoyeur"><p class="pagination">' .
201 $pagination($nb, '_rubrique' . $id_rubrique, $debut, $limite, true, 'prive') .
202 '</p>';
203 }
204
205 $les_enfants = enfant_rub($id_rubrique, $debut, $limite);
206
207 if (!$n = count($les_enfants)) {
208 return '';
209 }
210
211 if ($n == 1) {
212 $les_enfants = reset($les_enfants);
213 $les_enfants2 = '';
214 } else {
215 $n = ceil($n / 2);
216 $les_enfants2 = implode('', array_slice($les_enfants, $n));
217 $les_enfants = implode('', array_slice($les_enfants, 0, $n));
218 }
219
220 $res =
221 $pagination
222 . "<div class='gauche'>"
223 . $les_enfants
224 . '</div>'
225 . "<div class='droite'>"
226 . $les_enfants2
227 . '</div>'
228 . $pagination;
229
230 return $res;
231 }