X-Git-Url: http://git.cyclocoop.org/?p=lhc%2Fweb%2Fclavette_www.git;a=blobdiff_plain;f=www%2Fecrire%2Fpublic%2Fbalises.php;h=a7c63e63debbc3967070190fb374aa73c5d08044;hp=27b8f1975cc56da55ad68d86a0fa5c2a8c705036;hb=cc641eb476987612f6d6df1a5417c1c5582a8ab8;hpb=7d84a490677fb716a1fd4df260f8eab35f6a8506 diff --git a/www/ecrire/public/balises.php b/www/ecrire/public/balises.php index 27b8f19..a7c63e6 100644 --- a/www/ecrire/public/balises.php +++ b/www/ecrire/public/balises.php @@ -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 ) // http://doc.spip.org/@balise_FILTRE_dist