/***************************************************************************\
* 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. *
}
}
+/*
+ *
+ * [(#CALCUL|set{toto})] enregistre le résultat de #CALCUL
+ * dans la variable toto et renvoie vide
+ *
+ * [(#CALCUL|set{toto,1})] enregistre le résultat de #CALCUL
+ * dans la variable toto et renvoie la valeur
+ *
+ */
+function filtre_set(&$Pile, $val, $key, $continue = null) {
+ $Pile['vars'][$key] = $val;
+ return $continue ? $val : '';
+}
+
+/*
+ * [(#TRUC|debug{avant}|calcul|debug{apres}|etc)] affiche
+ * la valeur de #TRUC avant et après le calcul
+ */
+function filtre_debug($val, $key=null) {
+ $debug = (
+ is_null($key) ? '' : (var_export($key,true)." = ")
+ ) . var_export($val, true);
+
+ include_spip('inc/autoriser');
+ if (autoriser('webmestre'))
+ echo "<div class='spip_debug'>\n",$debug,"</div>\n";
+
+ spip_log($debug, 'debug');
+
+ return $val;
+}
+
+
// fonction generique d'entree des filtres images
// accepte en entree un texte complet, un img-log (produit par #LOGO_XX),
// un tag <img ...> complet, ou encore un nom de fichier *local* (passer
// filtrer
$texte = html2unicode($texte);
// remettre le tout dans le charset cible
- return unicode2charset($texte);
+ $texte = unicode2charset($texte);
+ // cas particulier des " et ' qu'il faut filtrer aussi
+ // (on le faisait deja avec un ")
+ if (strpos($texte,"&#")!==false)
+ $texte = str_replace(array("'","'",""","""), array("'","'",'"','"'), $texte);
+ return $texte;
+}
+
+/**
+ * Version securisee de filtrer_entites
+ * @param string $t
+ * @return string
+ */
+if (!function_exists('filtre_filtrer_entites_dist')) {
+ function filtre_filtrer_entites_dist($t) {
+ include_spip('inc/texte');
+ return interdire_scripts(filtrer_entites($t));
+ }
}
+
// caracteres de controle - http://www.w3.org/TR/REC-xml/#charsets
// http://doc.spip.org/@supprimer_caracteres_illegaux
function supprimer_caracteres_illegaux($texte) {
static $to = null;
if (is_array($texte)) {
- return array_map('corriger_caracteres_windows', $texte);
+ return array_map('supprimer_caracteres_illegaux', $texte);
}
if (!$to) $to = str_repeat('-', strlen($from));
if (preg_match(
",^[[:space:]]*([0-9]+)([.)]|".chr(194).'?'.chr(176).")[[:space:]]+,S",
$texte, $regs))
- return intval($regs[1]);
+ return strval($regs[1]);
else
return '';
}
* - Du 20 fevrier 2007 au 30 mars 2008
* $horaire='oui' ou true permet d'afficher l'horaire, toute autre valeur n'indique que le jour
* $forme peut contenir une ou plusieurs valeurs parmi
- * - abbr (afficher le nom des jours en abbrege)
+ * - abbr (afficher le nom des jours en abrege)
* - hcal (generer une date au format hcal)
* - jour (forcer l'affichage des jours)
* - annee (forcer l'affichage de l'annee)
* @param string $date_fin
* @param string $horaire
* @param string $forme
+ * abbr pour afficher le nom du jour en abrege (Dim. au lieu de Dimanche)
+ * annee pour forcer l'affichage de l'annee courante
+ * jour pour forcer l'affichage du nom du jour
+ * hcal pour avoir un markup microformat abbr
* @return string
*/
function affdate_debut_fin($date_debut, $date_fin, $horaire = 'oui', $forme=''){
}else{
// Le <abbr...>lundi 20 fevrier de 18h00</abbr> a <abbr...>20h00</abbr>
if($dtabbr && $dtstart && $dtend)
- $s = spip_ucfirst(_T('date_fmt_jour_heure_debut_fin_abbr',array('jour'=>$s,'heure_debut'=>$hd,'heure_fin'=>$hf,'dtstart'=>$dtstart,'dtend'=>$dtend,'dtabbr'=>$dtabbr)));
+ $s = _T('date_fmt_jour_heure_debut_fin_abbr',array('jour'=>spip_ucfirst($s),'heure_debut'=>$hd,'heure_fin'=>$hf,'dtstart'=>$dtstart,'dtend'=>$dtend,'dtabbr'=>$dtabbr));
// Le lundi 20 fevrier de 18h00 a 20h00
else
$s = spip_ucfirst(_T('date_fmt_jour_heure_debut_fin',array('jour'=>$s,'heure_debut'=>$hd,'heure_fin'=>$hf)));
if(!$h)
$date_debut = jour($d);
else
- $date_debut = $affdate($d);
+ $date_debut = affdate_jourcourt($d,date("Y",$date_fin));
$date_fin = $affdate($f);
if($jour){
$nomjour_debut = nom_jour($d,$abbr);
$s = _T('date_fmt_periode',array('date_debut' => $date_debut,'date_fin'=>$date_fin));
}
else {
- $date_debut = affdate($d);
- $date_fin = affdate($f);
+ $date_debut = affdate_jourcourt($d,date("Y",$date_fin));
+ $date_fin = $affdate($f);
if($jour){
$nomjour_debut = nom_jour($d,$abbr);
- $date_debut = _T('date_fmt_jour_periode',array('nomjour'=>$nomjour_debut,'jour' => $date_debut));
+ $date_debut = _T('date_fmt_jour',array('nomjour'=>$nomjour_debut,'jour' => $date_debut));
$nomjour_fin = nom_jour($f,$abbr);
- $date_fin = _T('date_fmt_jour_periode',array('nomjour'=>$nomjour_fin,'jour' => $date_fin));
+ $date_fin = _T('date_fmt_jour',array('nomjour'=>$nomjour_fin,'jour' => $date_fin));
}
if ($h){
$date_debut = _T('date_fmt_jour_heure',array('jour'=>$date_debut,'heure'=>$hd));
// http://doc.spip.org/@charge_scripts
-function charge_scripts($scripts) {
- $flux = "";
- $args = is_array($scripts)?$scripts:explode("|",$scripts);
- foreach($args as $script) {
- if(preg_match(",^\w+$,",$script)) {
- $path = find_in_path("javascript/$script.js");
- if($path) $flux .= spip_file_get_contents($path);
- }
- }
- return $flux;
+// http://doc.spip.org/@charge_scripts
+function charge_scripts($files, $script = true) {
+ $flux = "";
+ foreach(is_array($files)?$files:explode("|",$files) as $file) {
+ if (!is_string($file)) continue;
+ if ($script)
+ $file = preg_match(",^\w+$,",$file) ? "javascript/$file.js" : '';
+ if ($file) $path = find_in_path($file);
+ if ($path) $flux .= spip_file_get_contents($path);
+ }
+ return $flux;
}
if (!function_exists('calculer_cle_action'))
include_spip("inc/securiser_action");
- $cle = calculer_cle_action($form.(is_array($c)?serialize($c):$c));
- $c = serialize(array($c,$cle));
+
+ $c = serialize($c);
+ $cle = calculer_cle_action($form . $c);
+ $c = "$cle:$c";
// on ne stocke pas les contextes dans des fichiers caches
// par defaut, sauf si cette configuration a ete forcee
if ($ajaxid AND is_string($ajaxid)){
$class .= ' ajax-id-'.$ajaxid;
}
- $compl = "aria-live='polite' aria-atomic='true' ";
- return "<div class='$class' ".$compl."data-ajax-env='$env'$r>\n$emboite</div><!--ajaxbloc-->\n";
+ return "<div class='$class' "."data-ajax-env='$env'$r>\n$emboite</div><!--ajaxbloc-->\n";
}
// la procedure inverse de encoder_contexte_ajax()
if (function_exists('gzdeflate') && function_exists('gzinflate'))
$c = @gzinflate($c);
}
- list($env, $cle) = @unserialize($c);
- if ($cle == calculer_cle_action($form.(is_array($env)?serialize($env):$env)))
- return $env;
+ // extraire la signature en debut de contexte
+ // et la verifier avant de deserializer
+ // format : signature:donneesserializees
+ if ($p = strpos($c,":")){
+ $cle = substr($c,0,$p);
+ $c = substr($c,$p+1);
+
+ if ($cle == calculer_cle_action($form . $c)) {
+ $env = @unserialize($c);
+ return $env;
+ }
+ }
+
return false;
}
if (!$etoile
AND is_array($traitement)
AND (isset($traitement[$table_sql]) OR isset($traitement[0]))){
+ include_spip('inc/texte');
$traitement = $traitement[isset($traitement[$table_sql]) ? $table_sql : 0];
$traitement = str_replace('%s', "'".texte_script($info_generee)."'", $traitement);
// FIXME: $connect et $Pile[0] font souvent partie des traitements.