[SPIP][PLUGINS] v3.0-->v3.2
[lhc/web/www.git] / www / ecrire / action / menu_rubriques.php
index c6a8877..0e864a1 100644 (file)
@@ -3,39 +3,58 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2016                                                *
+ *  Copyright (c) 2001-2017                                                *
  *  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;
+/**
+ * Gestion de l'action d'affichage du navigateur de rubrique du bandeau
+ *
+ * @package SPIP\Core\Rubriques
+ **/
+
+if (!defined('_ECRIRE_INC_VERSION')) {
+       return;
+}
 
 include_spip('inc/autoriser');
 include_spip('inc/texte');
 include_spip('inc/filtres');
 
+/**
+ * Action d'affichage en ajax du navigateur de rubrique du bandeau
+ *
+ * @uses gen_liste_rubriques()
+ * @uses menu_rubriques()
+ *
+ * @return string
+ *     Code HTML présentant la liste des rubriques
+ **/
 function action_menu_rubriques_dist() {
 
        // si pas acces a ecrire, pas acces au menu
        // on renvoi un 401 qui fait echouer la requete ajax silencieusement
-       if (!autoriser('ecrire')){
-               $retour = "<ul class='cols_1'><li class='toutsite'><a href='".generer_url_ecrire('accueil')."'>"._T('public:lien_connecter')."</a></li></ul>";
+       if (!autoriser('ecrire')) {
+               $retour = "<ul class='cols_1'><li class='toutsite'><a href='" . generer_url_ecrire('accueil') . "'>" . _T('public:lien_connecter') . "</a></li></ul>";
                include_spip('inc/actions');
                ajax_retour($retour);
                exit;
        }
 
-       if ($date = intval(_request('date')))
-               header("Last-Modified: ".gmdate("D, d M Y H:i:s", $date)." GMT");
+       if ($date = intval(_request('date'))) {
+               header("Last-Modified: " . gmdate("D, d M Y H:i:s", $date) . " GMT");
+       }
 
        $r = gen_liste_rubriques();
        if (!$r
-       AND isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])
-       AND !strstr($_SERVER['SERVER_SOFTWARE'],'IIS/')) {
+               and isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])
+               and !strstr($_SERVER['SERVER_SOFTWARE'], 'IIS/')
+       ) {
                include_spip('inc/headers');
-               header('Content-Type: text/html; charset='. $GLOBALS['meta']['charset']);
+               header('Content-Type: text/html; charset=' . $GLOBALS['meta']['charset']);
                http_status(304);
                exit;
        } else {
@@ -45,14 +64,24 @@ function action_menu_rubriques_dist() {
        }
 }
 
-function menu_rubriques($complet = true){
-       $ret = "<li class='toutsite'><a href='".generer_url_ecrire('plan')."'>"._T('info_tout_site')."</a></li>";
+/**
+ * Retourne une liste HTML des rubriques et rubriques enfants
+ *
+ * @param bool $complet
+ *     - false pour n'avoir que le bouton racine «plan du site»
+ *     - true pour avoir l'ensemble des rubriques en plus
+ *
+ * @return string
+ *     Code HTML présentant la liste des rubriques
+ **/
+function menu_rubriques($complet = true) {
+       $ret = "<li class='toutsite'><a href='" . generer_url_ecrire('plan') . "'>" . _T('info_tout_site') . "</a></li>";
 
        if (!$complet) {
                return "<ul class='cols_1'>$ret\n</ul>\n";
        }
 
-       if (!isset($GLOBALS['db_art_cache'])){
+       if (!isset($GLOBALS['db_art_cache'])) {
                gen_liste_rubriques();
        }
        $arr_low = extraire_article(0, $GLOBALS['db_art_cache']);
@@ -60,38 +89,55 @@ function menu_rubriques($complet = true){
        $total_lignes = $i = sizeof($arr_low);
 
        if ($i > 0) {
-               $nb_col = min(8,ceil($total_lignes / 30));
-               if ($nb_col <= 1) $nb_col =  ceil($total_lignes / 10);
-               foreach( $arr_low as $id_rubrique => $titre_rubrique) {
-                       if (autoriser('voir','rubrique',$id_rubrique)){
-                         $ret .= bandeau_rubrique($id_rubrique, $titre_rubrique, $i);
-                         $i++;
+               $nb_col = min(8, ceil($total_lignes / 30));
+               if ($nb_col <= 1) {
+                       $nb_col = ceil($total_lignes / 10);
+               }
+               foreach ($arr_low as $id_rubrique => $titre_rubrique) {
+                       if (autoriser('voir', 'rubrique', $id_rubrique)) {
+                               $ret .= bandeau_rubrique($id_rubrique, $titre_rubrique, $i);
+                               $i++;
                        }
                }
 
                $ret = "<ul class='cols_$nb_col'>"
-                 . $ret
-                 . "\n</ul>\n";
-       }
-       else
+                       . $ret
+                       . "\n</ul>\n";
+       } else {
                $ret = "<ul class='cols_1'>$ret\n</ul>\n";
-       
+       }
+
        return $ret;
 }
 
-// http://doc.spip.org/@bandeau_rubrique
+/**
+ * Retourne une liste HTML des rubriques enfants d'une rubrique
+ *
+ * @uses extraire_article()
+ *
+ * @param int $id_rubrique
+ *     Identifiant de la rubrique parente
+ * @param string $titre_rubrique
+ *     Titre de cette rubrique
+ * @param int $zdecal
+ *     Décalage vertical, en nombre d'élément
+ *
+ * @return string
+ *     Code HTML présentant la liste des rubriques
+ **/
 function bandeau_rubrique($id_rubrique, $titre_rubrique, $zdecal) {
        static $zmax = 6;
 
        $nav = "<a href='"
-       . generer_url_entite($id_rubrique,'rubrique','','',false)
-       . "'>"
-       . supprimer_tags(preg_replace(',[\x00-\x1f]+,', ' ', $titre_rubrique))
-       . "</a>\n";
+               . generer_url_entite($id_rubrique, 'rubrique', '', '', false)
+               . "'>"
+               . supprimer_tags(preg_replace(',[\x00-\x1f]+,', ' ', $titre_rubrique))
+               . "</a>\n";
 
        // Limiter volontairement le nombre de sous-menus
        if (!(--$zmax)) {
                $zmax++;
+
                return "\n<li>$nav</li>";
        }
 
@@ -99,46 +145,73 @@ function bandeau_rubrique($id_rubrique, $titre_rubrique, $zdecal) {
        $i = sizeof($arr_rub);
        if (!$i) {
                $zmax++;
+
                return "\n<li>$nav</li>";
        }
 
 
        $nb_col = 1;
        if ($nb_rub = count($arr_rub)) {
-               $nb_col = min(10,max(1,ceil($nb_rub / 10)));
+               $nb_col = min(10, max(1, ceil($nb_rub / 10)));
        }
        $ret = "<li class='haschild'>$nav<ul class='cols_$nb_col'>";
-       foreach$arr_rub as $id_rub => $titre_rub) {
-               if (autoriser('voir','rubrique',$id_rub)){
+       foreach ($arr_rub as $id_rub => $titre_rub) {
+               if (autoriser('voir', 'rubrique', $id_rub)) {
                        $titre = supprimer_numero(typo($titre_rub));
-                       $ret .= bandeau_rubrique($id_rub, $titre, $zdecal+$i);
+                       $ret .= bandeau_rubrique($id_rub, $titre, $zdecal + $i);
                        $i++;
                }
        }
        $ret .= "</ul></li>\n";
        $zmax++;
+
        return $ret;
 }
 
 
-// http://doc.spip.org/@extraire_article
+/**
+ * Obtient la liste des rubriques enfants d'une rubrique, prise dans le cache
+ * du navigateur de rubrique
+ *
+ * @see gen_liste_rubriques() pour le calcul du cache
+ *
+ * @param int $id_p
+ *     Identifiant de la rubrique parente des articles
+ * @param array $t
+ *     Cache des rubriques
+ * @return array
+ *     Liste des rubriques enfants de la rubrique (et leur titre)
+ **/
 function extraire_article($id_p, $t) {
-       return array_key_exists($id_p, $t) ?  $t[$id_p]: array();
+       return array_key_exists($id_p, $t) ? $t[$id_p] : array();
 }
 
-// http://doc.spip.org/@gen_liste_rubriques
+/**
+ * Génère le cache de la liste des rubriques pour la navigation du bandeau
+ *
+ * Le cache, qui comprend pour chaque rubrique ses rubriques enfants et leur titre, est :
+ *
+ * - réactualisé en fonction de la meta `date_calcul_rubriques`
+ * - mis en cache dans le fichier défini par la constante `_CACHE_RUBRIQUES`
+ * - stocké également dans la globale `db_art_cache`
+ *
+ * @return bool true.
+ **/
 function gen_liste_rubriques() {
 
        include_spip('inc/config');
        // ici, un petit fichier cache ne fait pas de mal
        $last = lire_config('date_calcul_rubriques', 0);
        if (lire_fichier(_CACHE_RUBRIQUES, $cache)) {
-               list($date,$GLOBALS['db_art_cache']) = @unserialize($cache);
-               if ($date == $last) return false; // c'etait en cache :-)
+               list($date, $GLOBALS['db_art_cache']) = @unserialize($cache);
+               if ($date == $last) {
+                       return false;
+               } // c'etait en cache :-)
        }
        // se restreindre aux rubriques utilisees recemment +secteurs
 
-       $where = sql_in_select("id_rubrique", "id_rubrique", "spip_rubriques", "", "", "id_parent=0 DESC, date DESC", _CACHE_RUBRIQUES_MAX);
+       $where = sql_in_select("id_rubrique", "id_rubrique", "spip_rubriques", "", "", "id_parent=0 DESC, date DESC",
+               _CACHE_RUBRIQUES_MAX);
 
        // puis refaire la requete pour avoir l'ordre alphabetique
 
@@ -154,6 +227,6 @@ function gen_liste_rubriques() {
 
        $t = array($last ? $last : time(), $GLOBALS['db_art_cache']);
        ecrire_fichier(_CACHE_RUBRIQUES, serialize($t));
+
        return true;
 }
-?>