[SPIP] ~v3.0.21-->v3.0.22
[lhc/web/www.git] / www / ecrire / public / balises.php
index 27b8f19..dc042dd 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;