[SPIP][PLUGINS] v3.0-->v3.2
[lhc/web/www.git] / www / ecrire / public / boucles.php
index 37c0b1b..8ad3142 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  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.     *
 \***************************************************************************/
 
 
-//
-// Ce fichier definit les boucles standard de SPIP
-//
+/**
+ * Ce fichier definit les boucles standard de SPIP
+ *
+ * @package SPIP\Core\Compilateur\Boucles
+ **/
+
+if (!defined('_ECRIRE_INC_VERSION')) {
+       return;
+}
 
-if (!defined('_ECRIRE_INC_VERSION')) return;
 
-//
-// Boucle standard, sans condition rajoutee
-//
-// http://doc.spip.org/@boucle_DEFAUT_dist
+/**
+ * Compile une boucle standard, sans condition rajoutée
+ *
+ * @param string $id_boucle
+ *     Identifiant de la boucle
+ * @param array $boucles
+ *     AST du squelette
+ * @return string
+ *     Code PHP compilé de la boucle
+ **/
 function boucle_DEFAUT_dist($id_boucle, &$boucles) {
-       return calculer_boucle($id_boucle, $boucles); 
+       return calculer_boucle($id_boucle, $boucles);
 }
 
 
-//
-// <BOUCLE(BOUCLE)> boucle dite recursive
-//
-// http://doc.spip.org/@boucle_BOUCLE_dist
+/**
+ * Compile une boucle récursive
+ *
+ * `<BOUCLE(BOUCLE)>`
+ *
+ * @link http://www.spip.net/914
+ *
+ * @param string $id_boucle
+ *     Identifiant de la boucle
+ * @param array $boucles
+ *     AST du squelette
+ * @return string
+ *     Code PHP compilé de la boucle
+ **/
 function boucle_BOUCLE_dist($id_boucle, &$boucles) {
-
-       return calculer_boucle($id_boucle, $boucles); 
+       return calculer_boucle($id_boucle, $boucles);
 }
 
 
-//
-// <BOUCLE(HIERARCHIE)>
-//
-// http://doc.spip.org/@boucle_HIERARCHIE_dist
+/**
+ * Compile une boucle HIERARCHIE
+ *
+ * La boucle `<BOUCLE(HIERARCHIE)>` retourne la liste des RUBRIQUES
+ * qui mènent de la racine du site à la rubrique ou à l’article en cours.
+ *
+ * Cette boucle (aliasée sur la table RUBRIQUES)
+ *
+ * - recherche un id_rubrique dans les boucles parentes,
+ * - extrait sa hiérarchie, en prenant ou non la rubrique en cours en fonction du critère {tout}
+ * - crée une condition WHERE avec ces identifiants ansi qu'une clause ORDER
+ * - compile la boucle.
+ *
+ * Le code compilé calculant la hierarchie est ajouté au tout début de la
+ * fonction de boucle et quitte la boucle si aucune rubrique n'est trouvée.
+ *
+ * @link http://www.spip.net/913
+ *
+ * @param string $id_boucle
+ *     Identifiant de la boucle
+ * @param array $boucles
+ *     AST du squelette
+ * @return string
+ *     Code PHP compilé de la boucle
+ **/
 function boucle_HIERARCHIE_dist($id_boucle, &$boucles) {
        $boucle = &$boucles[$id_boucle];
        $id_table = $boucle->id_table . ".id_rubrique";
@@ -49,23 +90,22 @@ function boucle_HIERARCHIE_dist($id_boucle, &$boucles) {
        // ou {id_article} qui positionne aussi le {tout}
 
        $boucle->hierarchie = 'if (!($id_rubrique = intval('
-       . calculer_argument_precedent($boucle->id_boucle, 'id_rubrique', $boucles)
-       . ")))\n\t\treturn '';\n\t"
-       . "include_spip('inc/rubriques');\n\t"
-       . '$hierarchie = calcul_hierarchie_in($id_rubrique,'
-       . (isset($boucle->modificateur['tout']) ? 'true':'false')
-       . ");\n\t"
-       . 'if (!$hierarchie) return "";'."\n\t";
+               . calculer_argument_precedent($boucle->id_boucle, 'id_rubrique', $boucles)
+               . ")))\n\t\treturn '';\n\t"
+               . "include_spip('inc/rubriques');\n\t"
+               . '$hierarchie = calcul_hierarchie_in($id_rubrique,'
+               . (isset($boucle->modificateur['tout']) ? 'true' : 'false')
+               . ");\n\t"
+               . 'if (!$hierarchie) return "";' . "\n\t";
 
-       $boucle->where[]= array("'IN'", "'$id_table'", '"($hierarchie)"');
+       $boucle->where[] = array("'IN'", "'$id_table'", '"($hierarchie)"');
 
        $order = "FIELD($id_table, \$hierarchie)";
-       if (!isset($boucle->default_order[0]) OR $boucle->default_order[0] != " DESC")
+       if (!isset($boucle->default_order[0]) or $boucle->default_order[0] != " DESC") {
                $boucle->default_order[] = "\"$order\"";
-       else
+       } else {
                $boucle->default_order[0] = "\"$order DESC\"";
-       return calculer_boucle($id_boucle, $boucles); 
-}
-
+       }
 
-?>
+       return calculer_boucle($id_boucle, $boucles);
+}