[SPIP][PLUGINS] v3.0-->v3.2
[lhc/web/www.git] / www / ecrire / public / styliser.php
index 0790313..df4957e 100644 (file)
@@ -3,53 +3,62 @@
 /***************************************************************************\
  *  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.   *
 \***************************************************************************/
 
+/**
+ * Gestion de la sélection d'un squelette depuis son nom parmi les
+ * chemins connus de SPIP
+ *
+ * Recherche par exemple `contenu\xx` et en absence utilisera `contenu\dist`
+ *
+ * @package SPIP\Core\Public\Styliser
+ **/
 
-if (!defined('_ECRIRE_INC_VERSION')) return;
+if (!defined('_ECRIRE_INC_VERSION')) {
+       return;
+}
 
 // Ce fichier doit imperativement definir la fonction ci-dessous:
 
 /**
- * Determiner le squelette qui sera utilise pour rendre la page ou le bloc
- * a partir de $fond et du $contetxe
- * 
- * Actuellement tous les squelettes se terminent par .html
+ * Déterminer le squelette qui sera utilisé pour rendre la page ou le bloc
+ * à partir de `$fond` et du `$contetxe`
+ *
+ * Actuellement tous les squelettes se terminent par `.html`
  * pour des raisons historiques, ce qui est trompeur
  *
  * @param string $fond
  * @param array $contexte
  * @param string $lang
  * @param string $connect
- * @param string $ext
  * @return array
- *
- * http://doc.spip.org/@public_styliser_dist
  */
-function public_styliser_dist($fond, $contexte, $lang='', $connect='') {
+function public_styliser_dist($fond, $contexte, $lang = '', $connect = '') {
        static $styliser_par_z;
 
        // s'assurer que le fond est licite
        // car il peut etre construit a partir d'une variable d'environnement
-       if (strpos($fond,"../")!==false OR strncmp($fond,'/',1)==0)
+       if (strpos($fond, "../") !== false or strncmp($fond, '/', 1) == 0) {
                $fond = "404";
-  
+       }
+
        // Choisir entre $fond-dist.html, $fond=7.html, etc?
        $id_rubrique = 0;
        // Chercher le fond qui va servir de squelette
-       if ($r = quete_rubrique_fond($contexte))
+       if ($r = quete_rubrique_fond($contexte)) {
                list($id_rubrique, $lang) = $r;
+       }
 
        // trouver un squelette du nom demande
        // ne rien dire si on ne trouve pas, 
        // c'est l'appelant qui sait comment gerer la situation
        // ou les plugins qui feront mieux dans le pipeline
-       $squelette = trouver_fond($fond,"",true);
+       $squelette = trouver_fond($fond, "", true);
        $ext = $squelette['extension'];
 
        $flux = array(
@@ -64,9 +73,10 @@ function public_styliser_dist($fond, $contexte, $lang='', $connect='') {
                'data' => $squelette['fond'],
        );
 
-       if (test_espace_prive() OR defined('_ZPIP')) {
-               if (!$styliser_par_z)
-                       $styliser_par_z = charger_fonction('styliser_par_z','public');
+       if (test_espace_prive() or defined('_ZPIP')) {
+               if (!$styliser_par_z) {
+                       $styliser_par_z = charger_fonction('styliser_par_z', 'public');
+               }
                $flux = $styliser_par_z($flux);
        }
 
@@ -78,40 +88,57 @@ function public_styliser_dist($fond, $contexte, $lang='', $connect='') {
        return array($squelette, $ext, $ext, "$squelette.$ext");
 }
 
-function styliser_par_objets($flux){
+/**
+ * Cherche à échafauder un squelette générique pour un objet éditorial si
+ * aucun squelette approprié n'a été trouvé
+ *
+ * Échaffaude seulement pour des appels à `prive/objets/liste/` ou
+ * `prive/objets/contenu/` pour lesquels aucun squelette n'a été trouvé,
+ * et uniquement si l'on est dans l'espace privé.
+ *
+ * @see prive_echafauder_dist()
+ *
+ * @param array $flux
+ *     Données du pipeline styliser
+ * @return array
+ *     Données du pipeline styliser
+ **/
+function styliser_par_objets($flux) {
        if (test_espace_prive()
-               AND !$squelette = $flux['data']
-         AND strncmp($flux['args']['fond'],'prive/objets/',13)==0
-         AND $echafauder = charger_fonction('echafauder','prive',true)) {
-               if (strncmp($flux['args']['fond'],'prive/objets/liste/',19)==0){
-                       $table = table_objet(substr($flux['args']['fond'],19));
+               and !$squelette = $flux['data']
+               and strncmp($flux['args']['fond'], 'prive/objets/', 13) == 0
+               and $echafauder = charger_fonction('echafauder', 'prive', true)
+       ) {
+               if (strncmp($flux['args']['fond'], 'prive/objets/liste/', 19) == 0) {
+                       $table = table_objet(substr($flux['args']['fond'], 19));
                        $table_sql = table_objet_sql($table);
                        $objets = lister_tables_objets_sql();
-                       if (isset($objets[$table_sql]))
-                               $flux['data'] = $echafauder($table,$table,$table_sql,"prive/objets/liste/objets",$flux['args']['ext']);
+                       if (isset($objets[$table_sql])) {
+                               $flux['data'] = $echafauder($table, $table, $table_sql, "prive/objets/liste/objets", $flux['args']['ext']);
+                       }
                }
-               if (strncmp($flux['args']['fond'],'prive/objets/contenu/',21)==0){
-                       $type = substr($flux['args']['fond'],21);
+               if (strncmp($flux['args']['fond'], 'prive/objets/contenu/', 21) == 0) {
+                       $type = substr($flux['args']['fond'], 21);
                        $table = table_objet($type);
                        $table_sql = table_objet_sql($table);
                        $objets = lister_tables_objets_sql();
-                       if (isset($objets[$table_sql]))
-                               $flux['data'] = $echafauder($type,$table,$table_sql,"prive/objets/contenu/objet",$flux['args']['ext']);
+                       if (isset($objets[$table_sql])) {
+                               $flux['data'] = $echafauder($type, $table, $table_sql, "prive/objets/contenu/objet", $flux['args']['ext']);
+                       }
                }
        }
+
        return $flux;
 }
 
 /**
- * Calcul de la rubrique associee a la requete
- * (selection de squelette specifique par id_rubrique & lang)
+ * Calcul de la rubrique associée à la requête
+ * (sélection de squelette spécifique par id_rubrique & lang)
  *
- * attention, on repete cela a chaque inclusion,
+ * Êttention, on repète cela à chaque inclusion,
  * on optimise donc pour ne faire la recherche qu'une fois
  * par contexte semblable du point de vue des id_xx
  *
- * http://doc.spip.org/@quete_rubrique_fond
- *
  * @staticvar array $liste_objets
  * @param array $contexte
  * @return array
@@ -125,35 +152,41 @@ function quete_rubrique_fond($contexte) {
                include_spip('public/quete');
                $l = urls_liste_objets(false);
                // placer la rubrique en tete des objets
-               $l = array_diff($l,array('rubrique'));
+               $l = array_diff($l, array('rubrique'));
                array_unshift($l, 'rubrique');
-               foreach($l as $objet){
+               foreach ($l as $objet) {
                        $id = id_table_objet($objet);
-                       if (!isset($liste_objets[$id]))
-                               $liste_objets[$id] = objet_type($objet,false);
+                       if (!isset($liste_objets[$id])) {
+                               $liste_objets[$id] = objet_type($objet, false);
+                       }
                }
        }
-       $c = array_intersect_key($contexte,$liste_objets);
-       if (!count($c)) return false;
+       $c = array_intersect_key($contexte, $liste_objets);
+       if (!count($c)) {
+               return false;
+       }
 
-       $c = array_map('intval',$c);
+       $c = array_map('intval', $c);
        $s = serialize($c);
-       if (isset($quete[$s]))
+       if (isset($quete[$s])) {
                return $quete[$s];
+       }
 
-       if (isset($c['id_rubrique']) AND $r = $c['id_rubrique']){
+       if (isset($c['id_rubrique']) and $r = $c['id_rubrique']) {
                unset($c['id_rubrique']);
-               $c = array('id_rubrique'=>$r) + $c;
+               $c = array('id_rubrique' => $r) + $c;
        }
 
-       foreach($c as $_id=>$id) {
+       foreach ($c as $_id => $id) {
                if ($id
-                 AND $row = quete_parent_lang(table_objet_sql($liste_objets[$_id]),$id)) {
+                       and $row = quete_parent_lang(table_objet_sql($liste_objets[$_id]), $id)
+               ) {
                        $lang = isset($row['lang']) ? $row['lang'] : '';
-                       if ($_id=='id_rubrique' OR (isset($row['id_rubrique']) AND $id=$row['id_rubrique']))
-                               return $quete[$s] = array ($id, $lang);
+                       if ($_id == 'id_rubrique' or (isset($row['id_rubrique']) and $id = $row['id_rubrique'])) {
+                               return $quete[$s] = array($id, $lang);
+                       }
                }
        }
+
        return $quete[$s] = false;
 }
-?>