[SPIP] ~v3.0.20-->v3.0.25
[lhc/web/clavette_www.git] / www / ecrire / public / balises.php
index 27b8f19..a7c63e6 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -474,45 +474,59 @@ function balise_LESAUTEURS_dist ($p) {
 function balise_RANG_dist($p) {
        $b = index_boucle($p);
        if ($b === '') {
-               $msg = array('zbug_champ_hors_boucle',
-                               array('champ' => '#RANG')
-                         );
+               $msg = array(
+                       'zbug_champ_hors_boucle',
+                       array('champ' => '#RANG')
+               );
                erreur_squelette($msg, $p);
-       }
-       else {
+       } else {
                // chercher d'abord un champ sql rang (mais pas dans le env : defaut '' si on trouve pas de champ sql)
                // dans la boucle immediatement englobante uniquement
                // sinon on compose le champ calcule
                $_rang = champ_sql('rang', $p, '', false);
 
                // si pas trouve de champ sql rang :
-               if (!$_rang){
+               if (!$_rang) {
                        $boucle = &$p->boucles[$b];
-                       $trouver_table = charger_fonction('trouver_table','base');
+                       $trouver_table = charger_fonction('trouver_table', 'base');
                        $desc = $trouver_table($boucle->id_table);
-                       $_titre = ''; # champ dont on extrait le numero
-                       if (isset($desc['titre'])){
-                               $t=$desc['titre'];
-                         if (preg_match(';(^|,)([^,]*titre)(,|$);',$t,$m)){
-                                 $m = preg_replace(",as\s+titre$,i","",$m[2]);
-                                 $m = trim($m);
-                                 if ($m!="''"){
-                                         if (!preg_match(",\W,",$m))
-                                                 $m = $boucle->id_table . ".$m";
-                                         $m .= " AS titre_rang";
-
-                                         $boucle->select[] = $m;
-                                         $_titre = '$Pile[$SP][\'titre_rang\']';
-                                 }
-                         }
+                       $_titre = ''; # où extraire le numero ?
+                       
+                       if (isset($desc['titre'])) {
+                               $t = $desc['titre'];
+                               if (
+                                       // Soit on trouve avec la déclaration de la lang AVANT
+                                       preg_match(';(?:lang\s*,)\s*(.*?titre)\s*(,|$);', $t, $m)
+                                       // Soit on prend depuis le début
+                                       or preg_match(';^(.*?titre)\s*(,|$);', $t, $m)
+                               ) {
+                                       $m = preg_replace(',as\s+titre$,i', '', $m[1]);
+                                       $m = trim($m);
+                                       if ($m != "''") {
+                                               if (!preg_match(",\W,", $m)) {
+                                                       $m = $boucle->id_table . ".$m";
+                                               }
+                                               
+                                               $m .= " AS titre_rang";
+
+                                               $boucle->select[] = $m;
+                                               $_titre = '$Pile[$SP][\'titre_rang\']';
+                                       }
+                               }
                        }
-                       if (!$_titre)
+                       
+                       // si on n'a rien trouvé, on utilise le champ titre classique
+                       if (!$_titre) {
                                $_titre = champ_sql('titre', $p);
+                       }
+                       
                        $_rang = "recuperer_numero($_titre)";
                }
+               
                $p->code = $_rang;
                $p->interdire_scripts = false;
        }
+       
        return $p;
 }
 
@@ -853,7 +867,7 @@ function balise_CHAMP_SQL_dist($p){
        AND $champ = ($p->param[0][1][0]->texte))
                $p->code = champ_sql($champ, $p);
        else {
-               $err_b_s_a = array('zbug_balise_sans_argument', array('balise' => ' URL_'));
+               $err_b_s_a = array('zbug_balise_sans_argument', array('balise' => ' CHAMP_SQL'));
                erreur_squelette($err_b_s_a, $p);
        }
        #$p->interdire_scripts = true;
@@ -886,26 +900,43 @@ function balise_REM_dist($p) {
 }
 
 
-//
-// #HTTP_HEADER
-// pour les entetes de retour http
-// Ne fonctionne pas sur les INCLURE !
-// #HTTP_HEADER{Content-Type: text/css}
-//
-// http://doc.spip.org/@balise_HTTP_HEADER_dist
+
+/**
+ * Compile la balise `#HTTP_HEADER` envoyant des entêtes de retour HTTP
+ *
+ * Doit être placée en tête de fichier et ne fonctionne pas dans une
+ * inclusion.
+ *
+ * @balise
+ * @link http://www.spip.net/4631
+ * @example
+ *     ```
+ *     #HTTP_HEADER{Content-Type: text/csv; charset=#CHARSET}
+ *     ```
+ *
+ * @param Champ $p
+ *     Pile au niveau de la balise
+ * @return Champ
+ *     Pile complétée par le code à générer
+ **/
 function balise_HTTP_HEADER_dist($p) {
 
-       $header = interprete_argument_balise(1,$p);
+       $header = interprete_argument_balise(1, $p);
        if (!$header) {
                $err_b_s_a = array('zbug_balise_sans_argument', array('balise' => 'HTTP_HEADER'));
                erreur_squelette($err_b_s_a, $p);
-       } else  $p->code = "'<'.'?php header(\"' . "
-               . $header
-               . " . '\"); ?'.'>'";
+       } else {
+               $p->code = "'<'.'?php header(' . _q("
+                       . $header
+                       . ") . '); ?'.'>'";
+       }
        $p->interdire_scripts = false;
+
        return $p;
 }
 
+
+
 // Filtre a appliquer a l'ensemble de la page une fois calculee
 // (filtrage fait au niveau du squelette, et sans s'appliquer aux <INCLURE>)
 // http://doc.spip.org/@balise_FILTRE_dist