[SPIP] v3.2.1-->v3.2.2
[lhc/web/www.git] / www / ecrire / public / interfaces.php
index 168148a..9f75f65 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2012                                                *
+ *  Copyright (c) 2001-2019                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
 /**
  * Définition des noeuds de l'arbre de syntaxe abstraite
  *
- * @package SPIP\Compilateur\AST
-**/
+ * @package SPIP\Core\Compilateur\AST
+ **/
 
-if (!defined('_ECRIRE_INC_VERSION')) return;
+if (!defined('_ECRIRE_INC_VERSION')) {
+       return;
+}
 
 
 /**
@@ -25,11 +27,11 @@ if (!defined('_ECRIRE_INC_VERSION')) return;
  * Objet simple pour stocker le nom du fichier, la ligne, la boucle
  * permettant entre autre de localiser le lieu d'une erreur de compilation.
  * Cette structure est nécessaire au traitement d'erreur à l'exécution.
- * 
+ *
  * Le champ code est inutilisé dans cette classe seule, mais harmonise
  * le traitement d'erreurs.
  *
- * @package SPIP\Compilateur\AST
+ * @package SPIP\Core\Compilateur\AST
  */
 class Contexte {
        /**
@@ -38,6 +40,7 @@ class Contexte {
         * Sert pour la gestion d'erreur et la production de code dependant du contexte
         *
         * Peut contenir les index :
+        *
         * - nom : Nom du fichier de cache
         * - gram : Nom de la grammaire du squelette (détermine le phraseur à utiliser)
         * - sourcefile : Chemin du squelette
@@ -47,27 +50,36 @@ class Contexte {
         * - session : Pour un cache sessionné par auteur
         * - niv : Niveau de tabulation
         *
-        * @var array */
+        * @var array
+        */
        public $descr = array();
 
        /**
         * Identifiant de la boucle
-        * @var string */
+        *
+        * @var string
+        */
        public $id_boucle = '';
 
        /**
         * Numéro de ligne dans le code source du squelette
-        * @var int */
+        *
+        * @var int
+        */
        public $ligne = 0;
 
        /**
         * Langue d'exécution
-        * @var string */
+        *
+        * @var string
+        */
        public $lang = '';
 
        /**
         * Résultat de la compilation: toujours une expression PHP
-        * @var string */
+        *
+        * @var string
+        */
        public $code = '';
 }
 
@@ -75,76 +87,98 @@ class Contexte {
 /**
  * Description d'un texte
  *
- * @package SPIP\Compilateur\AST
-**/
+ * @package SPIP\Core\Compilateur\AST
+ **/
 class Texte {
        /**
-        * Type de noeud 
-        * @var string */
+        * Type de noeud
+        *
+        * @var string
+        */
        public $type = 'texte';
 
        /**
         * Le texte
-        * @var string */
+        *
+        * @var string
+        */
        public $texte;
 
        /**
         * Contenu avant le texte.
         *
         * Vide ou apostrophe simple ou double si le texte en était entouré
-        * @var string|array */
+        *
+        * @var string|array
+        */
        public $avant = "";
 
        /**
         * Contenu après le texte.
         *
         * Vide ou apostrophe simple ou double si le texte en était entouré
-        * @var string|array */
+        *
+        * @var string|array
+        */
        public $apres = "";
 
        /**
         * Numéro de ligne dans le code source du squelette
-        * @var int  */
+        *
+        * @var int
+        */
        public $ligne = 0;
 }
 
 /**
  * Description d'une inclusion de squelette
  *
- * @package SPIP\Compilateur\AST
-**/
+ * @package SPIP\Core\Compilateur\AST
+ **/
 class Inclure {
        /**
-        * Type de noeud 
-        * @var string */
+        * Type de noeud
+        *
+        * @var string
+        */
        public $type = 'include';
 
        /**
         * Nom d'un fichier inclu
-        * 
+        *
         * - Objet Texte si inclusion d'un autre squelette
         * - chaîne si inclusion d'un fichier PHP directement
-        * @var string|Texte */
+        *
+        * @var string|Texte
+        */
        public $texte;
 
        /**
         * Inutilisé, propriété générique de l'AST
-        * @var string|array */
+        *
+        * @var string|array
+        */
        public $avant = '';
 
        /**
         * Inutilisé, propriété générique de l'AST
-        * @var string|array */
+        *
+        * @var string|array
+        */
        public $apres = '';
 
        /**
         * Numéro de ligne dans le code source du squelette
-        * @var int  */
+        *
+        * @var int
+        */
        public $ligne = 0;
 
        /**
         * Valeurs des paramètres
-        * @var array */
+        *
+        * @var array
+        */
        public $param = array();
 }
 
@@ -152,83 +186,110 @@ class Inclure {
 /**
  * Description d'une boucle
  *
- * @package SPIP\Compilateur\AST
-**/
+ * @package SPIP\Core\Compilateur\AST
+ **/
 class Boucle {
        /**
-        * Type de noeud 
-        * @var string */
+        * Type de noeud
+        *
+        * @var string
+        */
        public $type = 'boucle';
 
        /**
         * Identifiant de la boucle
-        * @var string */
+        *
+        * @var string
+        */
        public $id_boucle;
 
        /**
         * Identifiant de la boucle parente
-        * @var string */
-       public $id_parent ='';
+        *
+        * @var string
+        */
+       public $id_parent = '';
 
        /**
         * Partie optionnelle avant
-        * @var string|array */
+        *
+        * @var string|array
+        */
        public $avant = '';
 
        /**
         * Pour chaque élément
-        * @var string|array */
+        *
+        * @var string|array
+        */
        public $milieu = '';
 
        /**
         * Partie optionnelle après
-        * @var string|array */
+        *
+        * @var string|array
+        */
        public $apres = '';
 
        /**
         * Partie alternative, si pas de résultat dans la boucle
-        * @var string|array */
+        *
+        * @var string|array
+        */
        public $altern = '';
 
        /**
         * La boucle doit-elle sélectionner la langue ?
-        * @var string|null */
+        *
+        * @var string|null
+        */
        public $lang_select;
 
        /**
         * Alias de table d'application de la requête ou nom complet de la table SQL
-        * @var string|null */
+        *
+        * @var string|null
+        */
        public $type_requete;
 
        /**
         * La table est elle optionnelle ?
-        * 
+        *
         * Si oui, aucune erreur ne sera générée si la table demandée n'est pas présente
-        * @var bool */
+        *
+        * @var bool
+        */
        public $table_optionnelle = false;
 
        /**
         * Nom du fichier de connexion
-        * @var string */
+        *
+        * @var string
+        */
        public $sql_serveur = '';
 
        /**
         * Paramètres de la boucle
-        * 
+        *
         * Description des paramètres passés à la boucle, qui servent ensuite
         * au calcul des critères
         *
-        * @var array */
+        * @var array
+        */
        public $param = array();
 
        /**
         * Critères de la boucle
-        * @var Critere[] */
+        *
+        * @var Critere[]
+        */
        public $criteres = array();
 
        /**
         * Textes insérés entre 2 éléments de boucle (critère inter)
-        * @var string[] */
+        *
+        * @var string[]
+        */
        public $separateur = array();
 
        /**
@@ -236,8 +297,10 @@ class Boucle {
         *
         * Les jointures par défaut de la table sont complétées en priorité
         * des jointures déclarées explicitement sur la boucle
+        *
         * @see base_trouver_table_dist()
-        * @var array */
+        * @var array
+        */
        public $jointures = array();
 
        /**
@@ -246,40 +309,199 @@ class Boucle {
         * Ces jointures sont utilisées en priorité par rapport aux jointures
         * normales possibles pour retrouver les colonnes demandées extérieures
         * à la boucle.
-        * @var string|bool */
+        *
+        * @var string|bool
+        */
        public $jointures_explicites = false;
 
        /**
         * Nom de la variable PHP stockant le noms de doublons utilisés "$doublons_index"
-        * @var string|null */
+        *
+        * @var string|null
+        */
        public $doublons;
 
-       var $partie, $total_parties,$mode_partie='';
-       var $externe = ''; # appel a partir d'une autre boucle (recursion)
+       /**
+        * Code PHP ajouté au début de chaque itération de boucle.
+        *
+        * Utilisé entre autre par les critères {pagination}, {n-a,b}, {a/b}...
+        *
+        * @var string
+        */
+       public $partie = "";
+
+       /**
+        * Nombre de divisions de la boucle, d'éléments à afficher,
+        * ou de soustractions d'éléments à faire
+        *
+        * Dans les critères limitant le nombre d'éléments affichés
+        * {a,b}, {a,n-b}, {a/b}, {pagination b}, b est affecté à total_parties.
+        *
+        * @var string
+        */
+       public $total_parties = "";
+
+       /**
+        * Code PHP ajouté avant l'itération de boucle.
+        *
+        * Utilisé entre autre par les critères {pagination}, {a,b}, {a/b}
+        * pour initialiser les variables de début et de fin d'itération.
+        *
+        * @var string
+        */
+       public $mode_partie = '';
+
+       /**
+        * Identifiant d'une boucle qui appelle celle-ci de manière récursive
+        *
+        * Si une boucle est appelée de manière récursive quelque part par
+        * une autre boucle comme <BOUCLE_rec(boucle_identifiant) />, cette
+        * boucle (identifiant) reçoit dans cette propriété l'identifiant
+        * de l'appelant (rec)
+        *
+        * @var string
+        */
+       public $externe = '';
+
        // champs pour la construction de la requete SQL
-       var $select = array();
-       var $from = array();
-       var $from_type = array();
-       var $where = array();
-       var $join = array();
-       var $having = array();
-       var $limit;
-       var $group = array();
-       var $order = array();
-       var $default_order = array();
-       var $date = 'date' ;
-       var $hash = "" ;
-       var $in = "" ;
-       var $sous_requete = false;
-       var $hierarchie = '';
-       var $statut = false; # definition/surcharge du statut des elements retournes
+
+       /**
+        * Liste des champs à récupérer par la boucle
+        *
+        * Expression 'table.nom_champ' ou calculée 'nom_champ AS x'
+        *
+        * @var string[]
+        */
+       public $select = array();
+
+       /**
+        * Liste des alias / tables SQL utilisées dans la boucle
+        *
+        * L'index est un identifiant (xx dans spip_xx assez souvent) qui servira
+        * d'alias au nom de la table ; la valeur est le nom de la table SQL désirée.
+        *
+        * L'index 0 peut définir le type de sources de données de l'itérateur DATA
+        *
+        * @var string[]
+        */
+       public $from = array();
+
+       /**
+        * Liste des alias / type de jointures utilisées dans la boucle
+        *
+        * L'index est le nom d'alias (comme pour la propriété $from), et la valeur
+        * un type de jointure parmi 'INNER', 'LEFT', 'RIGHT', 'OUTER'.
+        *
+        * Lorsque le type n'est pas déclaré pour un alias, c'est 'INNER'
+        * qui sera utilisé par défaut (créant donc un INNER JOIN).
+        *
+        * @var string[]
+        */
+       public $from_type = array();
+
+       /**
+        * Liste des conditions WHERE de la boucle
+        *
+        * Permet de restreindre les éléments retournés par une boucle
+        * en fonctions des conditions transmises dans ce tableau.
+        *
+        * Ce tableau peut avoir plusieurs niveaux de profondeur.
+        *
+        * Les éléments du premier niveau sont reliés par des AND, donc
+        * chaque élément ajouté directement au where par
+        * $boucle->where[] = array(...) ou $boucle->where[] = "'expression'"
+        * est une condition AND en plus.
+        *
+        * Par contre, lorsqu'on indique un tableau, il peut décrire des relations
+        * internes différentes. Soit $expr un tableau d'expressions quelconques de 3 valeurs :
+        * $expr = array(operateur, val1, val2)
+        *
+        * Ces 3 valeurs sont des expressions PHP. L'index 0 désigne l'opérateur
+        * à réaliser tel que :
+        *
+        * - "'='" , "'>='", "'<'", "'IN'", "'REGEXP'", "'LIKE'", ... :
+        *    val1 et val2 sont des champs et valeurs à utiliser dans la comparaison
+        *    suivant cet ordre : "val1 operateur val2".
+        *    Exemple : $boucle->where[] = array("'='", "'articles.statut'", "'\"publie\"'");
+        * - "'AND'", "'OR'", "'NOT'" :
+        *    dans ce cas val1 et val2 sont également des expressions
+        *    de comparaison complètes, et peuvent être eux-même des tableaux comme $expr
+        *    Exemples :
+        *    $boucle->where[] = array("'OR'", $expr1, $expr2);
+        *    $boucle->where[] = array("'NOT'", $expr); // val2 n'existe pas avec NOT
+        *
+        * D'autres noms sont possibles pour l'opérateur (le nombre de valeurs diffère) :
+        * - "'SELF'", "'SUBSELECT'" : indiquent des sous requêtes
+        * - "'?'" : indique une condition à faire évaluer (val1 ? val2 : val3)
+        *
+        * @var array
+        */
+       public $where = array();
+
+       public $join = array();
+       public $having = array();
+       public $limit;
+       public $group = array();
+       public $order = array();
+       public $default_order = array();
+       public $date = 'date';
+       public $hash = "";
+       public $in = "";
+       public $sous_requete = false;
+
+       /**
+        * Code PHP qui sera ajouté en tout début de la fonction de boucle
+        *
+        * Il sert à insérer le code calculant une hierarchie
+        *
+        * @var string
+        */
+       public $hierarchie = '';
+
+       /**
+        * Indique la présence d'un critère sur le statut
+        *
+        * @deprecated Remplacé par $boucle->modificateur['criteres']['statut']
+        * @var bool
+        */
+       public $statut = false;
+
        // champs pour la construction du corps PHP
-       var $show = array();
-       var $id_table;
-       var $primary;
-       var $return;
-       var $numrows = false;
-       var $cptrows = false;
+
+       /**
+        * Description des sources de données de la boucle
+        *
+        * Description des données de la boucle issu de trouver_table
+        * dans le cadre de l'itérateur SQL et contenant au moins l'index 'field'.
+        *
+        * @see base_trouver_table_dist()
+        * @var array
+        */
+       public $show = array();
+
+       /**
+        * Nom de la table SQL principale de la boucle, sans son préfixe
+        *
+        * @var string
+        */
+       public $id_table;
+
+       /**
+        * Nom de la clé primaire de la table SQL principale de la boucle
+        *
+        * @var string
+        */
+       public $primary;
+
+       /**
+        * Code PHP compilé de la boucle
+        *
+        * @var string
+        */
+       public $return;
+
+       public $numrows = false;
+       public $cptrows = false;
 
        /**
         * Description du squelette
@@ -287,6 +509,7 @@ class Boucle {
         * Sert pour la gestion d'erreur et la production de code dependant du contexte
         *
         * Peut contenir les index :
+        *
         * - nom : Nom du fichier de cache
         * - gram : Nom de la grammaire du squelette (détermine le phraseur à utiliser)
         * - sourcefile : Chemin du squelette
@@ -296,23 +519,34 @@ class Boucle {
         * - session : Pour un cache sessionné par auteur
         * - niv : Niveau de tabulation
         *
-        * @var array */
+        * @var array
+        */
        public $descr = array();
 
        /**
         * Numéro de ligne dans le code source du squelette
-        * @var int */
+        *
+        * @var int
+        */
        public $ligne = 0;
 
 
-       var $modificateur = array(); // table pour stocker les modificateurs de boucle tels que tout, plat ..., utilisable par les plugins egalement
+       public $modificateur = array(); // table pour stocker les modificateurs de boucle tels que tout, plat ..., utilisable par les plugins egalement
 
-       var $iterateur = ''; // type d'iterateur
+       /**
+        * Type d'itérateur utilisé pour cette boucle
+        *
+        * - 'SQL' dans le cadre d'une boucle sur une table SQL
+        * - 'DATA' pour l'itérateur DATA, ...
+        *
+        * @var string
+        */
+       public $iterateur = ''; // type d'iterateur
 
        // obsoletes, conserves provisoirement pour compatibilite
-       var $tout = false;
-       var $plat = false;
-       var $lien = false;
+       public $tout = false;
+       public $plat = false;
+       public $lien = false;
 }
 
 /**
@@ -320,71 +554,100 @@ class Boucle {
  *
  * Sous-noeud de Boucle
  *
- * @package SPIP\Compilateur\AST
-**/
+ * @package SPIP\Core\Compilateur\AST
+ **/
 class Critere {
        /**
-        * Type de noeud 
-        * @var string */
+        * Type de noeud
+        *
+        * @var string
+        */
        public $type = 'critere';
 
        /**
-        * Opérateur (>, <, >=, IN, ...) 
-        * @var null|string */
+        * Opérateur (>, <, >=, IN, ...)
+        *
+        * @var null|string
+        */
        public $op;
 
        /**
         * Présence d'une négation (truc !op valeur)
-        * @var null|string */
+        *
+        * @var null|string
+        */
        public $not;
 
        /**
         * Présence d'une exclusion (!truc op valeur)
-        * @var null|string */
+        *
+        * @var null|string
+        */
        public $exclus;
 
+       /**
+        * Présence d'une condition dans le critère (truc ?)
+        *
+        * @var bool
+        */
+       public $cond = false;
+
        /**
         * Paramètres du critère
         * - $param[0] : élément avant l'opérateur
         * - $param[1..n] : éléments après l'opérateur
-        * @var array */
-       var $param = array();
+        *
+        * @var array
+        */
+       public $param = array();
 
        /**
         * Numéro de ligne dans le code source du squelette
-        * @var int */
+        *
+        * @var int
+        */
        public $ligne = 0;
 }
 
 /**
  * Description d'un champ (balise SPIP)
  *
- * @package SPIP\Compilateur\AST
-**/
+ * @package SPIP\Core\Compilateur\AST
+ **/
 class Champ {
        /**
-        * Type de noeud 
-        * @var string */
+        * Type de noeud
+        *
+        * @var string
+        */
        public $type = 'champ';
 
        /**
-        * Nom du champ demandé. Exemple 'ID_ARTICLE' 
-        * @var string|null */
+        * Nom du champ demandé. Exemple 'ID_ARTICLE'
+        *
+        * @var string|null
+        */
        public $nom_champ;
 
        /**
         * Identifiant de la boucle parente si explicité
-        * @var string|null */
-       public $nom_boucle= '';
+        *
+        * @var string|null
+        */
+       public $nom_boucle = '';
 
        /**
         * Partie optionnelle avant
-        * @var null|string|array */
+        *
+        * @var null|string|array
+        */
        public $avant;
 
        /**
         * Partie optionnelle après
-        * @var null|string|array */
+        *
+        * @var null|string|array
+        */
        public $apres;
 
        /**
@@ -392,47 +655,64 @@ class Champ {
         *
         * - '*' annule les filtres automatiques
         * - '**' annule en plus les protections de scripts
-        * @var null|string */
+        *
+        * @var null|string
+        */
        public $etoile;
 
        /**
         * Arguments et filtres explicites sur la balise
+        *
         * - $param[0] contient les arguments de la balise
         * - $param[1..n] contient les filtres à appliquer à la balise
-        * @var array */
-       public $param = array(); 
+        *
+        * @var array
+        */
+       public $param = array();
 
        /**
         * Source des filtres  (compatibilité) (?)
-        * @var array|null */
+        *
+        * @var array|null
+        */
        public $fonctions = array();
 
        /**
         * Identifiant de la boucle
-        * @var string */
+        *
+        * @var string
+        */
        public $id_boucle = '';
 
        /**
         * AST du squelette, liste de toutes les boucles
-        * @var Boucles[] */
+        *
+        * @var Boucles[]
+        */
        public $boucles;
 
        /**
         * Alias de table d'application de la requête ou nom complet de la table SQL
-        * @var string|null */
+        *
+        * @var string|null
+        */
        public $type_requete;
 
        /**
         * Résultat de la compilation: toujours une expression PHP
-        * @var string */
+        *
+        * @var string
+        */
        public $code = '';
 
        /**
         * Interdire les scripts
-        * 
+        *
         * false si on est sûr de cette balise
+        *
         * @see interdire_scripts()
-        * @var bool */
+        * @var bool
+        */
        public $interdire_scripts = true;
 
        /**
@@ -441,6 +721,7 @@ class Champ {
         * Sert pour la gestion d'erreur et la production de code dependant du contexte
         *
         * Peut contenir les index :
+        *
         * - nom : Nom du fichier de cache
         * - gram : Nom de la grammaire du squelette (détermine le phraseur à utiliser)
         * - sourcefile : Chemin du squelette
@@ -450,89 +731,120 @@ class Champ {
         * - session : Pour un cache sessionné par auteur
         * - niv : Niveau de tabulation
         *
-        * @var array */
+        * @var array
+        */
        public $descr = array();
 
        /**
         * Numéro de ligne dans le code source du squelette
-        * @var int */
+        *
+        * @var int
+        */
        public $ligne = 0;
 
        /**
         * Drapeau pour reperer les balises calculées par une fonction explicite
-        * @var bool */
+        *
+        * @var bool
+        */
        public $balise_calculee = false;
 }
 
 
 /**
  * Description d'une chaîne de langue
-**/
+ **/
 class Idiome {
        /**
-        * Type de noeud 
-        * @var string */
+        * Type de noeud
+        *
+        * @var string
+        */
        public $type = 'idiome';
 
        /**
         * Clé de traduction demandée. Exemple 'item_oui'
-        * @var string */
+        *
+        * @var string
+        */
        public $nom_champ = "";
 
        /**
         * Module de langue où chercher la clé de traduction. Exemple 'medias'
-        * @var string */
+        *
+        * @var string
+        */
        public $module = "";
 
        /**
         * Arguments à passer à la chaîne
-        * @var array */
+        *
+        * @var array
+        */
        public $arg = array();
 
        /**
         * Filtres à appliquer au résultat
-        * @var array */
+        *
+        * @var array
+        */
        public $param = array();
 
        /**
         * Source des filtres  (compatibilité) (?)
-        * @var array|null */
+        *
+        * @var array|null
+        */
        public $fonctions = array();
 
        /**
         * Inutilisé, propriété générique de l'AST
-        * @var string|array */
+        *
+        * @var string|array
+        */
        public $avant = '';
 
        /**
         * Inutilisé, propriété générique de l'AST
-        * @var string|array */
+        *
+        * @var string|array
+        */
        public $apres = '';
 
        /**
         * Identifiant de la boucle
-        * @var string */
+        *
+        * @var string
+        */
        public $id_boucle = '';
 
        /**
         * AST du squelette, liste de toutes les boucles
-        * @var Boucles[] */
+        *
+        * @var Boucles[]
+        */
        public $boucles;
 
        /**
         * Alias de table d'application de la requête ou nom complet de la table SQL
-        * @var string|null */
+        *
+        * @var string|null
+        */
        public $type_requete;
 
        /**
         * Résultat de la compilation: toujours une expression PHP
-        * @var string */
+        *
+        * @var string
+        */
        public $code = '';
 
        /**
         * Interdire les scripts
+        *
         * @see interdire_scripts()
-        * @var bool */
+        * @var bool
+        */
        public $interdire_scripts = false;
 
        /**
@@ -550,145 +862,144 @@ class Idiome {
         * - session : Pour un cache sessionné par auteur
         * - niv : Niveau de tabulation
         *
-        * @var array */
+        * @var array
+        */
        public $descr = array();
 
        /**
         * Numéro de ligne dans le code source du squelette
-        * @var int */
+        *
+        * @var int
+        */
        public $ligne = 0;
 }
 
 /**
  * Description d'un texte polyglotte (<multi>)
  *
- * @package SPIP\Compilateur\AST
-**/
+ * @package SPIP\Core\Compilateur\AST
+ **/
 class Polyglotte {
        /**
-        * Type de noeud 
-        * @var string */
+        * Type de noeud
+        *
+        * @var string
+        */
        public $type = 'polyglotte';
 
        /**
         * Tableau des traductions possibles classées par langue
         *
         * Tableau code de langue => texte
-        * @var array */
-       var $traductions = array();
+        *
+        * @var array
+        */
+       public $traductions = array();
 
        /**
         * Numéro de ligne dans le code source du squelette
-        * @var int */
+        *
+        * @var int
+        */
        public $ligne = 0;
 }
 
 
-
 global $table_criteres_infixes;
-$table_criteres_infixes = array('<', '>', '<=', '>=', '==', '===', '!=', '!==', '<>',  '?');
+$table_criteres_infixes = array('<', '>', '<=', '>=', '==', '===', '!=', '!==', '<>', '?');
 
 global $exception_des_connect;
 $exception_des_connect[] = ''; // ne pas transmettre le connect='' par les inclure
 
 
-
 /**
  * Déclarer les interfaces de la base pour le compilateur
- * 
+ *
  * On utilise une fonction qui initialise les valeurs,
  * sans écraser d'eventuelles prédéfinition dans mes_options
  * et les envoie dans un pipeline
  * pour les plugins
  *
- * @link http://doc.spip.org/@declarer_interfaces
+ * @link http://code.spip.net/@declarer_interfaces
  *
  * @return void
  */
-function declarer_interfaces(){
-       global $exceptions_des_tables, $table_des_tables, $table_date, $table_titre, $table_statut;
+function declarer_interfaces() {
 
-       $table_des_tables['articles']='articles';
-       $table_des_tables['auteurs']='auteurs';
-       $table_des_tables['rubriques']='rubriques';
-       $table_des_tables['hierarchie']='rubriques';
+       $GLOBALS['table_des_tables']['articles'] = 'articles';
+       $GLOBALS['table_des_tables']['auteurs'] = 'auteurs';
+       $GLOBALS['table_des_tables']['rubriques'] = 'rubriques';
+       $GLOBALS['table_des_tables']['hierarchie'] = 'rubriques';
 
        // definition des statuts de publication
-       global $tables_statut;
-       $table_statut = array();
+       $GLOBALS['table_statut'] = array();
 
        //
        // tableau des tables de jointures
        // Ex: gestion du critere {id_mot} dans la boucle(ARTICLES)
-       global $tables_jointures;
-       $tables_jointures = array();
-       $tables_jointures['spip_jobs'][] = 'jobs_liens';
+       $GLOBALS['tables_jointures'] = array();
+       $GLOBALS['tables_jointures']['spip_jobs'][] = 'jobs_liens';
 
-       global  $exceptions_des_jointures;
-       #$exceptions_des_jointures['titre_mot'] = array('spip_mots', 'titre'); // pour exemple
-       $exceptions_des_jointures['profondeur'] = array('spip_rubriques', 'profondeur');
-
-       global  $table_des_traitements;
+       // $GLOBALS['exceptions_des_jointures']['titre_mot'] = array('spip_mots', 'titre'); // pour exemple
+       $GLOBALS['exceptions_des_jointures']['profondeur'] = array('spip_rubriques', 'profondeur');
 
        define('_TRAITEMENT_TYPO', 'typo(%s, "TYPO", $connect, $Pile[0])');
        define('_TRAITEMENT_RACCOURCIS', 'propre(%s, $connect, $Pile[0])');
-       define('_TRAITEMENT_TYPO_SANS_NUMERO', 'typo(supprimer_numero(%s), "TYPO", $connect, $Pile[0])');
-
-       $table_des_traitements['BIO'][]= _TRAITEMENT_RACCOURCIS;
-       $table_des_traitements['CHAPO'][]= _TRAITEMENT_RACCOURCIS;
-       $table_des_traitements['DATE'][]= 'normaliser_date(%s)';
-       $table_des_traitements['DATE_REDAC'][]= 'normaliser_date(%s)';
-       $table_des_traitements['DATE_MODIF'][]= 'normaliser_date(%s)';
-       $table_des_traitements['DATE_NOUVEAUTES'][]= 'normaliser_date(%s)';
-       $table_des_traitements['DESCRIPTIF'][]= _TRAITEMENT_RACCOURCIS;
-       $table_des_traitements['INTRODUCTION'][]= 'PtoBR('. _TRAITEMENT_RACCOURCIS .')';
-       $table_des_traitements['NOM_SITE_SPIP'][]= _TRAITEMENT_TYPO;
-       $table_des_traitements['NOM'][]= _TRAITEMENT_TYPO_SANS_NUMERO;
-       $table_des_traitements['AUTEUR'][]= _TRAITEMENT_TYPO;
-       $table_des_traitements['PS'][]= _TRAITEMENT_RACCOURCIS;
-       $table_des_traitements['SOURCE'][]= _TRAITEMENT_TYPO;
-       $table_des_traitements['SOUSTITRE'][]= _TRAITEMENT_TYPO;
-       $table_des_traitements['SURTITRE'][]= _TRAITEMENT_TYPO;
-       $table_des_traitements['TAGS'][]= '%s';
-       $table_des_traitements['TEXTE'][]= _TRAITEMENT_RACCOURCIS;
-       $table_des_traitements['TITRE'][]= _TRAITEMENT_TYPO_SANS_NUMERO;
-       $table_des_traitements['TYPE'][]= _TRAITEMENT_TYPO;
-       $table_des_traitements['DESCRIPTIF_SITE_SPIP'][]= _TRAITEMENT_RACCOURCIS;
-       $table_des_traitements['SLOGAN_SITE_SPIP'][]= _TRAITEMENT_TYPO;
-       $table_des_traitements['ENV'][]= 'entites_html(%s,true)';
+       define('_TRAITEMENT_TYPO_SANS_NUMERO', 'supprimer_numero(typo(%s), "TYPO", $connect, $Pile[0])');
+
+       $GLOBALS['table_des_traitements']['BIO'][] = _TRAITEMENT_RACCOURCIS;
+       $GLOBALS['table_des_traitements']['CHAPO'][] = _TRAITEMENT_RACCOURCIS;
+       $GLOBALS['table_des_traitements']['DATE'][] = 'normaliser_date(%s)';
+       $GLOBALS['table_des_traitements']['DATE_REDAC'][] = 'normaliser_date(%s)';
+       $GLOBALS['table_des_traitements']['DATE_MODIF'][] = 'normaliser_date(%s)';
+       $GLOBALS['table_des_traitements']['DATE_NOUVEAUTES'][] = 'normaliser_date(%s)';
+       $GLOBALS['table_des_traitements']['DESCRIPTIF'][] = _TRAITEMENT_RACCOURCIS;
+       $GLOBALS['table_des_traitements']['INTRODUCTION'][] = _TRAITEMENT_RACCOURCIS;
+       $GLOBALS['table_des_traitements']['NOM_SITE_SPIP'][] = _TRAITEMENT_TYPO;
+       $GLOBALS['table_des_traitements']['NOM'][] = _TRAITEMENT_TYPO_SANS_NUMERO;
+       $GLOBALS['table_des_traitements']['AUTEUR'][] = _TRAITEMENT_TYPO;
+       $GLOBALS['table_des_traitements']['PS'][] = _TRAITEMENT_RACCOURCIS;
+       $GLOBALS['table_des_traitements']['SOURCE'][] = _TRAITEMENT_TYPO;
+       $GLOBALS['table_des_traitements']['SOUSTITRE'][] = _TRAITEMENT_TYPO;
+       $GLOBALS['table_des_traitements']['SURTITRE'][] = _TRAITEMENT_TYPO;
+       $GLOBALS['table_des_traitements']['TAGS'][] = '%s';
+       $GLOBALS['table_des_traitements']['TEXTE'][] = _TRAITEMENT_RACCOURCIS;
+       $GLOBALS['table_des_traitements']['TITRE'][] = _TRAITEMENT_TYPO_SANS_NUMERO;
+       $GLOBALS['table_des_traitements']['TYPE'][] = _TRAITEMENT_TYPO;
+       $GLOBALS['table_des_traitements']['DESCRIPTIF_SITE_SPIP'][] = _TRAITEMENT_RACCOURCIS;
+       $GLOBALS['table_des_traitements']['SLOGAN_SITE_SPIP'][] = _TRAITEMENT_TYPO;
+       $GLOBALS['table_des_traitements']['ENV'][] = 'entites_html(%s,true)';
 
        // valeur par defaut pour les balises non listees ci-dessus
-       $table_des_traitements['*'][]= false; // pas de traitement, mais permet au compilo de trouver la declaration suivante
+       $GLOBALS['table_des_traitements']['*'][] = false; // pas de traitement, mais permet au compilo de trouver la declaration suivante
        // toujours securiser les DATA
-       $table_des_traitements['*']['DATA']= 'safehtml(%s)';
+       $GLOBALS['table_des_traitements']['*']['DATA'] = 'safehtml(%s)';
        // expliciter pour VALEUR qui est un champ calcule et ne sera pas protege par le catch-all *
-       $table_des_traitements['VALEUR']['DATA']= 'safehtml(%s)';
+       $GLOBALS['table_des_traitements']['VALEUR']['DATA'] = 'safehtml(%s)';
 
 
        // gerer l'affectation en 2 temps car si le pipe n'est pas encore declare, on ecrase les globales
        $interfaces = pipeline('declarer_tables_interfaces',
-                       array(
-                       'table_des_tables'=>$table_des_tables,
-                       'exceptions_des_tables'=>$exceptions_des_tables,
-                       'table_date'=>$table_date,
-                       'table_titre'=>$table_titre,
-                       'tables_jointures'=>$tables_jointures,
-                       'exceptions_des_jointures'=>$exceptions_des_jointures,
-                       'table_des_traitements'=>$table_des_traitements,
-                       'table_statut'=>$table_statut,
-                       ));
-       if ($interfaces){
-                       $table_des_tables = $interfaces['table_des_tables'];
-                       $exceptions_des_tables = $interfaces['exceptions_des_tables'];
-                       $table_date = $interfaces['table_date'];
-                       $table_titre = $interfaces['table_titre'];
-                       $tables_jointures = $interfaces['tables_jointures'];
-                       $exceptions_des_jointures = $interfaces['exceptions_des_jointures'];
-                       $table_des_traitements = $interfaces['table_des_traitements'];
-           $table_statut = $interfaces['table_statut'];
+               array(
+                       'table_des_tables' => $GLOBALS['table_des_tables'],
+                       'exceptions_des_tables' => $GLOBALS['exceptions_des_tables'],
+                       'table_date' => $GLOBALS['table_date'],
+                       'table_titre' => $GLOBALS['table_titre'],
+                       'tables_jointures' => $GLOBALS['tables_jointures'],
+                       'exceptions_des_jointures' => $GLOBALS['exceptions_des_jointures'],
+                       'table_des_traitements' => $GLOBALS['table_des_traitements'],
+                       'table_statut' => $GLOBALS['table_statut'],
+               ));
+       if ($interfaces) {
+               $GLOBALS['table_des_tables'] = $interfaces['table_des_tables'];
+               $GLOBALS['exceptions_des_tables'] = $interfaces['exceptions_des_tables'];
+               $GLOBALS['table_date'] = $interfaces['table_date'];
+               $GLOBALS['table_titre'] = $interfaces['table_titre'];
+               $GLOBALS['tables_jointures'] = $interfaces['tables_jointures'];
+               $GLOBALS['exceptions_des_jointures'] = $interfaces['exceptions_des_jointures'];
+               $GLOBALS['table_des_traitements'] = $interfaces['table_des_traitements'];
+               $GLOBALS['table_statut'] = $interfaces['table_statut'];
        }
 }
 
 declarer_interfaces();
-
-?>