/***************************************************************************\
* 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. *
}
}
+/*
+ *
+ * [(#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
OR strpbrk($texte, "&\"'<>")==false
) return $texte;
include_spip('inc/texte');
- $texte = htmlspecialchars(echappe_retour(echappe_html($texte,'',true),'','proteger_amp'),$quote?ENT_QUOTES:(ENT_COMPAT|ENT_HTML401));
+ $flags = !defined('PHP_VERSION_ID') OR PHP_VERSION_ID < 50400 ? ENT_COMPAT : ENT_COMPAT|ENT_HTML401;
+ $texte = spip_htmlspecialchars(echappe_retour(echappe_html($texte, '', true), '', 'proteger_amp'), $quote?ENT_QUOTES:$flags);
if ($tout)
return corriger_toutes_entites_html($texte);
else
// 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;
}
// caracteres de controle - http://www.w3.org/TR/REC-xml/#charsets
$texte = preg_replace('/\s{2,}/S'.$u, " ", $texte);
// ne pas echapper les sinqle quotes car certains outils de syndication gerent mal
$texte = entites_html($texte, false, false);
+ // mais bien echapper les double quotes !
+ $texte = str_replace('"','"',$texte);
// verifier le charset
$texte = charset2unicode($texte);
if (preg_match(
",^[[:space:]]*([0-9]+)([.)]|".chr(194).'?'.chr(176).")[[:space:]]+,S",
$texte, $regs))
- return intval($regs[1]);
+ return strval($regs[1]);
else
return '';
}
function vider_url($url, $entites = true) {
# un message pour abs_url
$GLOBALS['mode_abs_url'] = 'url';
-
$url = trim($url);
- if (preg_match(",^(http:?/?/?|mailto:?)$,iS", $url))
- return '';
-
- if ($entites) $url = entites_html($url);
-
- return $url;
+ $r = ",^(?:" . _PROTOCOLES_STD . '):?/?/?$,iS';
+ return preg_match($r, $url) ? '': ($entites ? entites_html($url) : $url);
}
// Extraire une date de n'importe quel champ (a completer...)
switch ($vue) {
case 'saison':
+ case 'saison_annee':
$saison = '';
if ($mois > 0){
$saison = 1;
if (($mois == 9 AND $jour >= 21) OR $mois > 9) $saison = 4;
if (($mois == 12 AND $jour >= 21) OR $mois > 12) $saison = 1;
}
- return $saison?_T('date_saison_'.$saison):'';
+ if($vue == 'saison')
+ return $saison?_T('date_saison_'.$saison):'';
+ else
+ return $saison?trim(_T('date_fmt_saison_annee', array('saison'=>_T('date_saison_'.$saison), 'annee'=>$annee))) :'';
case 'court':
if ($avjc) return $annee;
return affdate_base($numdate, 'saison');
}
+// http://doc.spip.org/@saison_annee
+function saison_annee($numdate) {
+ return affdate_base($numdate, 'saison_annee');
+}
+
// http://doc.spip.org/@affdate
function affdate($numdate, $format='entier') {
return affdate_base($numdate, $format);
* @param string $date_fin
* @param string $horaire
* @param string $forme
+ * abbr pour afficher le nom du jour en abbrege (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 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)));
}
}else{
if($dtabbr && $dtstart)
- $s = $dtstart.spip_ucfirst($s).$dabbr;
+ $s = $dtstart.spip_ucfirst($s).$dtabbr;
else
$s = spip_ucfirst($s);
}
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));
return $trads;
}
+// Calculer l'initiale d'un nom
+function initiale($nom){
+ return spip_substr(trim(strtoupper(extraire_multi($nom))),0,1);
+}
+
//
// Ce filtre retourne la donnee si c'est la premiere fois qu'il la voit ;
// possibilite de gerer differentes "familles" de donnees |unique{famille}
} else {
$r[4] = trim($r[2]);
}
- $att = filtrer_entites(str_replace("'", "'", $r[4]));
+ $att = $r[4];
+ if (strpos($att,"&#")!==false)
+ $att = str_replace(array("'","'",""","""), array("'","'",'"','"'), $att);
+ $att = filtrer_entites($att);
}
else
$att = NULL;
}
+/**
+ * Vérifie qu'un nom (d'auteur) ne comporte pas d'autres tags que <multi>
+ * et ceux volontairement spécifiés dans la constante
+ *
+ * @param string $nom
+ * Nom (signature) proposé
+ * @return bool
+ * - false si pas conforme,
+ * - true sinon
+**/
+function nom_acceptable($nom) {
+ if (!is_string($nom)) {
+ return false;
+ }
+ if (!defined('_TAGS_NOM_AUTEUR')) define('_TAGS_NOM_AUTEUR','');
+ $tags_acceptes = array_unique(explode(',', 'multi,' . _TAGS_NOM_AUTEUR));
+ foreach($tags_acceptes as $tag) {
+ if (strlen($tag)) {
+ $remp1[] = '<'.trim($tag).'>';
+ $remp1[] = '</'.trim($tag).'>';
+ $remp2[] = '\x60'.trim($tag).'\x61';
+ $remp2[] = '\x60/'.trim($tag).'\x61';
+ }
+ }
+ $v_nom = str_replace($remp2, $remp1, supprimer_tags(str_replace($remp1, $remp2, $nom)));
+ return str_replace('<', '<', $v_nom) == $nom;
+}
+
// Verifier la conformite d'une ou plusieurs adresses email
// retourne false ou la normalisation de la derniere adresse donnee
// http://doc.spip.org/@email_valide
}
$fichier = basename($url);
return '<a rel="enclosure"'
- . ($url? ' href="'.htmlspecialchars($url).'"' : '')
- . ($type? ' type="'.htmlspecialchars($type).'"' : '')
- . ($length? ' title="'.htmlspecialchars($length).'"' : '')
+ . ($url? ' href="'.spip_htmlspecialchars($url).'"' : '')
+ . ($type? ' type="'.spip_htmlspecialchars($type).'"' : '')
+ . ($length? ' title="'.spip_htmlspecialchars($length).'"' : '')
. '>'.$fichier.'</a>';
}
// La fonction inverse
$length = intval(extraire_attribut($e, 'length')); # vieux data
$fichier = basename($url);
$enclosures[] = '<enclosure'
- . ($url? ' url="'.htmlspecialchars($url).'"' : '')
- . ($type? ' type="'.htmlspecialchars($type).'"' : '')
+ . ($url? ' url="'.spip_htmlspecialchars($url).'"' : '')
+ . ($type? ' type="'.spip_htmlspecialchars($type).'"' : '')
. ($length? ' length="'.$length.'"' : '')
. ' />';
}
// 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 (!$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.