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