[SPIP] +spip v3.0.17
[lhc/web/clavette_www.git] / www / ecrire / inc / presenter_enfants.php
diff --git a/www/ecrire/inc/presenter_enfants.php b/www/ecrire/inc/presenter_enfants.php
new file mode 100644 (file)
index 0000000..4502ceb
--- /dev/null
@@ -0,0 +1,194 @@
+<?php
+
+/***************************************************************************\
+ *  SPIP, Systeme de publication pour l'internet                           *
+ *                                                                         *
+ *  Copyright (c) 2001-2014                                                *
+ *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
+ *                                                                         *
+ *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
+ *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
+\***************************************************************************/
+
+
+if (!defined('_ECRIRE_INC_VERSION')) return;
+
+include_spip('inc/autoriser');
+include_spip('inc/presentation');
+
+/**
+ * Crée l'affichage des listes de rubriques dans le privé
+ * 
+ * @param int $collection
+ *  L'identifiant numérique de la rubrique à lister
+ * @param int $debut
+ *     Le numéro de la pagination si paginé (> 500)
+ * @param int $limite
+ *     Le pas de pagination si paginé (> 500)
+ * @return array $res
+ *     Un tableau des sous rubriques
+ */
+function enfant_rub($collection,$debut=0,$limite=500){
+       $voir_logo = (isset($GLOBALS['meta']['image_process']) AND $GLOBALS['meta']['image_process'] != "non");
+       $logo = "";
+
+       if ($voir_logo) {
+               $chercher_logo = charger_fonction('chercher_logo', 'inc');
+               include_spip('inc/filtres_images_mini');
+       }
+
+       $res = array();
+       
+       $result = sql_select("id_rubrique, id_parent, titre, descriptif, lang ", "spip_rubriques", "id_parent=$collection",'', '0+titre,titre',"$debut,$limite");
+       while($row=sql_fetch($result)){
+               $id_rubrique=$row['id_rubrique'];
+               $id_parent=$row['id_parent'];
+               $titre=generer_info_entite($id_rubrique,'rubrique','titre'); // pour etre sur de passer par tous les traitements
+               if ('' !== ($rang = recuperer_numero($row['titre'])))
+                       $rang = "$rang. ";
+
+               if (autoriser('voir','rubrique',$id_rubrique)){
+
+                       $les_sous_enfants = sous_enfant_rub($id_rubrique);
+
+                       changer_typo($row['lang']);
+                       $lang_dir = lang_dir($row['lang']);
+                       $descriptif=propre($row['descriptif']);
+
+                       if ($voir_logo) {
+                               if ($logo = $chercher_logo($id_rubrique, 'id_rubrique', 'on')) {
+                                       list($fid, $dir, $nom, $format) = $logo;
+                                       $logo = image_reduire("<img src='$fid' alt='' />", 48, 36);
+                                       if ($logo)
+                                               $logo =  inserer_attribut($logo,'class','logo');
+                               }
+                       }
+
+                       $lib_bouton = (!acces_restreint_rubrique($id_rubrique) ? "" :
+                          http_img_pack('auteur-0minirezo-16.png', '', " width='16' height='16'", _T('image_administrer_rubrique'))) .
+                         " <a dir='$lang_dir' href='" .
+                         generer_url_entite($id_rubrique,'rubrique') .
+                         "'>".
+                               $rang . $titre .
+                         "</a>";
+
+                       $titre = (is_string($logo) ? $logo : '') .
+                               bouton_block_depliable($lib_bouton,$les_sous_enfants ?false:-1,"enfants$id_rubrique");
+
+                       $res[] =
+                         debut_cadre_sous_rub(($id_parent ? "rubrique-24.png" : "secteur-24.png"), true, "", $titre) .
+                         (!$descriptif ? '' : "\n<div class='descriptif'>$descriptif</div>") .
+                         $les_sous_enfants .
+                         fin_cadre_sous_rub(true);
+               }
+       }
+
+       changer_typo($GLOBALS['spip_lang']); # remettre la typo de l'interface pour la suite
+       return $res;
+}
+
+/**
+ * Affiche les enfants d'une sous rubrique dans un bloc dépliable
+ * (Utilisé dans les pages du privé)
+ * 
+ * @param int $collection2
+ *     L'identifiant numérique de la rubrique parente
+ * @return string
+ *     Le contenu du bloc dépliable 
+ */
+function sous_enfant_rub($collection2){
+       $nb = sql_countsel('spip_rubriques',"id_parent=$collection2");
+       
+       $retour = '';
+       $pagination = '';
+       $debut = 0;
+       $limite = 500;
+       
+       /**
+        * On ne va afficher que 500 résultats max
+        * Si > 500 on affiche une pagination
+        */
+       if($nb > $limite){
+               $debut = _request('debut_rubrique'.$collection2) ? _request('debut_rubrique'.$collection2) : $debut;
+               $pagination = chercher_filtre('pagination');
+               $pagination = '<p class="pagination">'.$pagination($nb, '_rubrique'.$collection2, $debut, $limite, true, 'prive').'</p>';
+               $limite = $debut + $limite;
+       }
+       
+       $result =  sql_select("id_rubrique, id_parent, titre, lang", "spip_rubriques", "id_parent=$collection2",'', '0+titre,titre',"$debut,$limite");
+       
+       while($row=sql_fetch($result)){
+               $id_rubrique2=$row['id_rubrique'];
+               $id_parent2=$row['id_parent'];
+               $titre2=generer_info_entite($id_rubrique2,'rubrique','titre'); // pour etre sur de passer par tous les traitements
+               if ('' !== ($rang2 = recuperer_numero($row['titre'])))
+                       $rang2 = "$rang2. ";
+
+               changer_typo($row['lang']);
+               $lang_dir = lang_dir($row['lang']);
+               if (autoriser('voir','rubrique',$id_rubrique2))
+                       $retour.="\n<li class='item' dir='$lang_dir'><a href='" . generer_url_entite($id_rubrique2,'rubrique') . "'>".$rang2.$titre2."</a></li>\n";
+       }
+       
+       $retour = $pagination.$retour.$pagination;
+        
+       if (!$retour) return '';
+       
+       return debut_block_depliable($debut > 0 ? true : false,"enfants$collection2")
+       ."\n<ul class='liste-items sous-sous-rub'>\n"
+       . $retour
+       . "</ul>\n".fin_block()."\n\n";
+}
+
+/**
+ * Affiche la liste des rubriques enfants d'une rubrique
+ * (Utilisé dans les pages du privé notamment ?exec=rubriques)
+ * 
+ * Si plus de 500 rubriques enfants, on pagine par 500 les résultats
+ * 
+ * @param int $id_rubrique
+ *     L'identifiant numérique de la rubrique parente (0 par défaut, la racine)
+ * @return string $res
+ *     Le contenu textuel affiché, la liste des sous rubriques
+ */
+function afficher_enfant_rub($id_rubrique=0) {
+       $pagination = '';
+       $debut = 0;
+       $limite = 500;
+
+       $nb = sql_countsel('spip_rubriques',"id_parent=$id_rubrique");
+       
+       if($nb > $limite){
+               $debut = _request('debut_rubrique'.$collection2) ? _request('debut_rubrique'.$collection2) : $debut;
+               $pagination = chercher_filtre('pagination');
+               $pagination = '<br class="nettoyeur"><p class="pagination">'.$pagination($nb, '_rubrique'.$collection2, $debut, $limite, true, 'prive').'</p>';
+       }
+
+       $les_enfants = enfant_rub($id_rubrique,$debut,$limite);
+
+       if (!$n = count($les_enfants)) return "";
+
+       if ($n==1) {
+               $les_enfants=reset($les_enfants);
+               $les_enfants2="";
+       }
+       else{
+               $n = ceil($n/2);
+               $les_enfants2 = implode('',array_slice($les_enfants,$n));
+               $les_enfants = implode('',array_slice($les_enfants,0,$n));
+       }
+       
+       $res =
+       $pagination
+       . "<div class='gauche'>"
+       . $les_enfants
+       . "</div>"
+       . "<div class='droite'>"
+       . $les_enfants2
+       . "</div>"
+       . $pagination;
+
+       return $res;
+}
+
+?>