/***************************************************************************\
* 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. *
$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]) {
// 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)
* %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(
%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;'
);
// afin que le corps de boucle affecte la globale directement
$init_lang = "lang_select(\$GLOBALS['spip_lang']);\n\t";
$fin_lang = "lang_select();\n\t";
+ $fin_lang_select_public = "\n\t\tlang_select();";
$corps .=
"\n\t\tlang_select_public("
else {
$init_lang = '';
$fin_lang = '';
+ $fin_lang_select_public = '';
// sortir les appels au traducteur (invariants de boucle)
if (strpos($return, '?php') === false
AND preg_match_all("/\W(_T[(]'[^']*'[)])/", $return, $r)) {
. $boucle->partie
. $corps;
+ // depiler la lang de la boucle si besoin
+ $corps .= $fin_lang_select_public;
+
// si le corps est une constante, ne pas appeler le serveur N fois!
if (preg_match(CODE_MONOTONE,str_replace("\\'",'',$corps), $r)) {
$init_lang,
$corps,
$fin_lang,
- $trace
+ $trace,
+ 'BOUCLE'.$id_boucle .' @ '.($boucle->descr['sourcefile'])
);
# var_dump($a);exit;
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;