[SPIP] ~v3.0.17-->v3.0.19
[ptitvelo/web/www.git] / www / ecrire / public / compiler.php
index c21b6f2..7341b0a 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2012                                                *
+ *  Copyright (c) 2001-2014                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -72,10 +72,11 @@ function argumenter_inclure($params, $rejet_filtres, $p, &$boucles, $id_boucle,
                                $erreur_p_i_i = array('zbug_parametres_inclus_incorrects',
                                         array('param' => $var->nom_champ));
                                erreur_squelette($erreur_p_i_i, $p);
-                         } else $l[1] = calculer_liste($val, $p->descr, $boucles, $id_boucle);
-                         break;
+                                 break;
+                         }
+                         else $l[1] = calculer_liste($val, $p->descr, $boucles, $id_boucle);
                        } else {
-                               preg_match(",^([^=]*)(=?)(.*)$,", $var->texte,$m);
+                               preg_match(",^([^=]*)(=?)(.*)$,m", $var->texte,$m);
                                $var = $m[1];
                                $auto = false;;
                                if ($m[2]) {
@@ -184,7 +185,7 @@ function calculer_inclure($p, &$boucles, $id_boucle) {
 
        // s'il y a une extension .php, ce n'est pas un squelette
        if (preg_match('/^.+[.]php$/s', $fichier)) {
-               $code = sandbox_composer_inclure_php($fichier, $p);
+               $code = sandbox_composer_inclure_php($fichier, $p, $contexte);
        } else  {
                $_options[] = "\"compil\"=>array($compil)";
                if ($ajax)
@@ -380,6 +381,7 @@ function calculer_boucle_rec($id_boucle, &$boucles, $trace) {
  * %s8: code de trace eventuel avant le retour
 **/
 define('CODE_CORPS_BOUCLE', '%s
+       if (defined("_BOUCLE_PROFILER")) $timer = time()+microtime();
        $t0 = "";
        // REQUETE
        $iter = IterFactory::create(
@@ -393,6 +395,9 @@ define('CODE_CORPS_BOUCLE', '%s
        %s
        %s$iter->free();
        }%s
+       if (defined("_BOUCLE_PROFILER")
+       AND 1000*($timer = (time()+microtime())-$timer) > _BOUCLE_PROFILER)
+               spip_log(intval(1000*$timer)."ms %s","profiler"._LOG_AVERTISSEMENT);
        return $t0;'
 );
 
@@ -549,7 +554,8 @@ function calculer_boucle_nonrec($id_boucle, &$boucles, $trace) {
                $init_lang,
                $corps,
                $fin_lang,
-               $trace
+               $trace,
+               'BOUCLE'.$id_boucle .' @ '.($boucle->descr['sourcefile'])
        );
 
 #      var_dump($a);exit;
@@ -862,11 +868,28 @@ function compile_cas($tableau, $descr, &$boucles, $id_boucle) {
 
                case 'idiome':
                        $l = array();
+                       $code = '';
                        foreach ($p->arg as $k => $v) {
-                         if ($k) $l[]= _q($k).' => '.calculer_liste($v,$p->descr,$boucles,$id_boucle);
+                               $_v = calculer_liste($v, $descr, $boucles, $id_boucle);
+                               if ($k) {
+                                       $l[] = _q($k) . ' => ' . $_v;
+                               } else {
+                                       $code = $_v;
+                               }
+                       }
+                       // Si le module n'est pas fourni, l'expliciter sauf si calculé
+                       if ($p->module) {
+                               $m = $p->module .':'.$p->nom_champ;
+                       } elseif ($p->nom_champ) {
+                               $m = MODULES_IDIOMES .':'.$p->nom_champ;
+                       } else {
+                               $m = '';
                        }
-                       $l = !$l ? '' : (", array(".implode(",\n",$l).")");
-                       $code = "_T('" . $p->module . ":" .$p->nom_champ . "'$l)";
+                       $code = (!$code ? "'$m'" :
+                                               ($m ? "'$m' . $code" :
+                                                       ("(strpos(\$x=$code, ':') ? \$x : ('" . MODULES_IDIOMES . ":' . \$x))")))
+                                       . (!$l ? '' : (", array(" . implode(",\n", $l) . ")"));
+                       $code = "_T($code)";
                        if ($p->param) {
                                $p->id_boucle = $id_boucle;
                                $p->boucles = &$boucles;