= 1.4 AND $v = $r1[1] ))) return -$v; // Bug ou paquet fait main return 0; } // La matrice est necessaire pour ne filtrer _que_ des fonctions definies dans filtres_images // et laisser passer les fonctions personnelles baptisees image_... $GLOBALS['spip_matrice']['image_graver'] = true;//'inc/filtres_images_mini.php'; $GLOBALS['spip_matrice']['image_select'] = true;//'inc/filtres_images_mini.php'; $GLOBALS['spip_matrice']['image_reduire'] = true;//'inc/filtres_images_mini.php'; $GLOBALS['spip_matrice']['image_reduire_par'] = true;//'inc/filtres_images_mini.php'; $GLOBALS['spip_matrice']['image_passe_partout'] = true;//'inc/filtres_images_mini.php'; $GLOBALS['spip_matrice']['couleur_html_to_hex'] = 'inc/filtres_images_mini.php'; $GLOBALS['spip_matrice']['couleur_foncer'] = 'inc/filtres_images_mini.php'; $GLOBALS['spip_matrice']['couleur_eclaircir'] = 'inc/filtres_images_mini.php'; // ou pour inclure un script au moment ou l'on cherche le filtre $GLOBALS['spip_matrice']['filtre_image_dist'] = 'inc/filtres_mime.php'; $GLOBALS['spip_matrice']['filtre_audio_dist'] = 'inc/filtres_mime.php'; $GLOBALS['spip_matrice']['filtre_video_dist'] = 'inc/filtres_mime.php'; $GLOBALS['spip_matrice']['filtre_application_dist'] = 'inc/filtres_mime.php'; $GLOBALS['spip_matrice']['filtre_message_dist'] = 'inc/filtres_mime.php'; $GLOBALS['spip_matrice']['filtre_multipart_dist'] = 'inc/filtres_mime.php'; $GLOBALS['spip_matrice']['filtre_text_dist'] = 'inc/filtres_mime.php'; $GLOBALS['spip_matrice']['filtre_text_csv_dist'] = 'inc/filtres_mime.php'; $GLOBALS['spip_matrice']['filtre_text_html_dist'] = 'inc/filtres_mime.php'; $GLOBALS['spip_matrice']['filtre_audio_x_pn_realaudio'] = 'inc/filtres_mime.php'; // charge les fonctions graphiques et applique celle demandee // http://doc.spip.org/@filtrer function filtrer($filtre) { if (isset($GLOBALS['spip_matrice'][$filtre]) and is_string($f = $GLOBALS['spip_matrice'][$filtre])){ find_in_path($f,'', true); $GLOBALS['spip_matrice'][$filtre] = true; } $tous = func_get_args(); if (substr($filtre,0,6)=='image_' && $GLOBALS['spip_matrice'][$filtre]) return image_filtrer($tous); elseif($f = chercher_filtre($filtre)) { array_shift($tous); return call_user_func_array($f, $tous); } else { // le filtre n'existe pas, on provoque une erreur $msg = array('zbug_erreur_filtre', array('filtre'=>texte_script($filtre))); erreur_squelette($msg); return ''; } } /* * * [(#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 "
@UiS", " ]*>|
", $texte);
$texte = preg_replace("@^\s*
@S".$u, "", $texte);
return $texte;
}
/**
* lignes_longues assure qu'un texte ne vas pas deborder d'un bloc
* par la faute d'un mot trop long (souvent des URLs)
* Ne devrait plus etre utilise et fait directement en CSS par un style
* word-wrap:break-word;
* cf http://www.alsacreations.com/tuto/lire/1038-gerer-debordement-contenu-css.html
*
* Pour assurer la compatibilite du filtre, on encapsule le contenu par
* un div ou span portant ce style inline.
*
* http://doc.spip.org/@lignes_longues
*
* @param string $texte
* @return string
*/
function lignes_longues($texte) {
if (!strlen(trim($texte))) return $texte;
include_spip('inc/texte');
$tag = preg_match(',?('._BALISES_BLOCS.')[>[:space:]],iS', $texte) ?
'div' : 'span';
return "<$tag style='word-wrap:break-word;'>$texte$tag>";
}
// Majuscules y compris accents, en HTML
// http://doc.spip.org/@majuscules
function majuscules($texte) {
if (!strlen($texte)) return '';
// Cas du turc
if ($GLOBALS['spip_lang'] == 'tr') {
# remplacer hors des tags et des entites
if (preg_match_all(',<[^<>]+>|&[^;]+;,S', $texte, $regs, PREG_SET_ORDER))
foreach ($regs as $n => $match)
$texte = str_replace($match[0], "@@SPIP_TURC$n@@", $texte);
$texte = str_replace('i', 'İ', $texte);
if ($regs)
foreach ($regs as $n => $match)
$texte = str_replace("@@SPIP_TURC$n@@", $match[0], $texte);
}
// Cas general
return "$texte";
}
// "127.4 ko" ou "3.1 Mo"
// http://doc.spip.org/@taille_en_octets
function taille_en_octets ($taille) {
if ($taille < 1) return '';
if ($taille < 1024) {$taille = _T('taille_octets', array('taille' => $taille));}
else if ($taille < 1024*1024) {
$taille = _T('taille_ko', array('taille' => round($taille/1024, 1)));
} else if ($taille < 1024*1024*1024) {
$taille = _T('taille_mo', array('taille' => round($taille/1024/1024, 1)));
} else {
$taille = _T('taille_go', array('taille' => round($taille/1024/1024/1024, 2)));
}
return $taille;
}
// Rend une chaine utilisable sans dommage comme attribut HTML
// http://doc.spip.org/@attribut_html
function attribut_html($texte,$textebrut = true) {
$u = $GLOBALS['meta']['pcre_u'];
if ($textebrut)
$texte = preg_replace(array(",\n,",",\s(?=\s),msS".$u),array(" ",""),textebrut($texte));
$texte = texte_backend($texte);
$texte = str_replace(array("'",'"'),array(''', '"'), $texte);
return preg_replace(array("/&(amp;|#38;)/","/&(?![A-Za-z]{0,4}\w{2,3};|#[0-9]{2,5};)/"),array("&","&") , $texte);
}
// Vider les url nulles comme 'http://' ou 'mailto:'
// et leur appliquer un htmlspecialchars() + gerer les &
// http://doc.spip.org/@vider_url
function vider_url($url, $entites = true) {
# un message pour abs_url
$GLOBALS['mode_abs_url'] = 'url';
$url = trim($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...)
// http://doc.spip.org/@extraire_date
function extraire_date($texte) {
// format = 2001-08
if (preg_match(",([1-2][0-9]{3})[^0-9]*(1[0-2]|0?[1-9]),",$texte,$regs))
return $regs[1]."-".sprintf("%02d", $regs[2])."-01";
}
// Maquiller une adresse e-mail
// http://doc.spip.org/@antispam
function antispam($texte) {
include_spip('inc/acces');
$masque = creer_pass_aleatoire(3);
return preg_replace("/@/", " $masque ", $texte);
}
// http://doc.spip.org/@securiser_acces
function securiser_acces($id_auteur, $cle, $dir, $op='', $args='')
{
include_spip('inc/acces');
if ($op) $dir .= " $op $args";
return verifier_low_sec($id_auteur, $cle, $dir);
}
/**
* La fonction sinon retourne le second parametre lorsque
* le premier est considere vide, sinon retourne le premier parametre.
*
* En php sinon($a, 'rien') retourne $a ou 'rien' si $a est vide.
* En filtre spip |sinon{#TEXTE, rien} : affiche #TEXTE ou "rien" si #TEXTE est vide,
*
* Note : l'utilisation de |sinon en tant que filtre de squelette
* est directement compile dans public/references par la fonction filtre_logique()
*
* @param mixed $texte
* Contenu de reference a tester
* @param mixed $sinon
* Contenu a retourner si le contenu de reference est vide
* @return mixed
* Retourne $texte, sinon $sinon.
**/
function sinon ($texte, $sinon='') {
if ($texte OR (!is_array($texte) AND strlen($texte)))
return $texte;
else
return $sinon;
}
// |choixsivide{vide,pasvide} affiche pasvide si la chaine n'est pas vide...
// http://doc.spip.org/@choixsivide
function choixsivide($a, $vide, $pasvide) {
return $a ? $pasvide : $vide;
}
// |choixsiegal{aquoi,oui,non} affiche oui si la chaine est egal a aquoi ...
// http://doc.spip.org/@choixsiegal
function choixsiegal($a1,$a2,$v,$f) {
return ($a1 == $a2) ? $v : $f;
}
//
// Date, heure, saisons
//
// on normalise la date, si elle vient du contexte (public/parametrer.php), on force le jour
// http://doc.spip.org/@normaliser_date
function normaliser_date($date, $forcer_jour = false) {
$date = vider_date($date);
if ($date) {
if (preg_match("/^[0-9]{8,10}$/", $date))
$date = date("Y-m-d H:i:s", $date);
if (preg_match("#^([12][0-9]{3})([-/]00)?( [-0-9:]+)?$#", $date, $regs))
$date = $regs[1]."-00-00".$regs[3];
else if (preg_match("#^([12][0-9]{3}[-/][01]?[0-9])([-/]00)?( [-0-9:]+)?$#", $date, $regs))
$date = preg_replace("@/@","-",$regs[1])."-00".$regs[3];
else
$date = date("Y-m-d H:i:s", strtotime($date));
if ($forcer_jour)
$date = str_replace('-00', '-01', $date);
}
return $date;
}
// http://doc.spip.org/@vider_date
function vider_date($letexte) {
if (strncmp("0000-00-00", $letexte,10)==0) return '';
if (strncmp("0001-01-01", $letexte,10)==0) return '';
if (strncmp("1970-01-01", $letexte,10)==0) return ''; // eviter le bug GMT-1
return $letexte;
}
// http://doc.spip.org/@recup_heure
function recup_heure($date){
static $d = array(0,0,0);
if (!preg_match('#([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})#', $date, $r))
return $d;
array_shift($r);
return $r;
}
// http://doc.spip.org/@heures
function heures($numdate) {
$date_array = recup_heure($numdate);
if ($date_array)
list($heures, $minutes, $secondes) = $date_array;
return $heures;
}
// http://doc.spip.org/@minutes
function minutes($numdate) {
$date_array = recup_heure($numdate);
if ($date_array)
list($heures, $minutes, $secondes) = $date_array;
return $minutes;
}
// http://doc.spip.org/@secondes
function secondes($numdate) {
$date_array = recup_heure($numdate);
if ($date_array)
list($heures,$minutes,$secondes) = $date_array;
return $secondes;
}
// http://doc.spip.org/@heures_minutes
function heures_minutes($numdate) {
return _T('date_fmt_heures_minutes', array('h'=> heures($numdate), 'm'=> minutes($numdate)));
}
// http://doc.spip.org/@recup_date
function recup_date($numdate, $forcer_jour = true){
if (!$numdate) return '';
$heures = $minutes = $secondes = 0;
if (preg_match('#([0-9]{1,2})/([0-9]{1,2})/([0-9]{4}|[0-9]{1,2})#', $numdate, $regs)) {
$jour = $regs[1];
$mois = $regs[2];
$annee = $regs[3];
if ($annee < 90){
$annee = 2000 + $annee;
} elseif ($annee<100) {
$annee = 1900 + $annee ;
}
list($heures, $minutes, $secondes) = recup_heure($numdate);
}
elseif (preg_match('#([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})#',$numdate, $regs)) {
$annee = $regs[1];
$mois = $regs[2];
$jour = $regs[3];
list($heures, $minutes, $secondes) = recup_heure($numdate);
}
elseif (preg_match('#([0-9]{4})-([0-9]{2})#', $numdate, $regs)){
$annee = $regs[1];
$mois = $regs[2];
$jour ='';
list($heures, $minutes, $secondes) = recup_heure($numdate);
}
elseif (preg_match('#^([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})$#', $numdate, $regs)){
$annee = $regs[1];
$mois = $regs[2];
$jour = $regs[3];
$heures = $regs[4];
$minutes = $regs[5];
$secondes = $regs[6];
} else $annee = $mois = $jour ='';
if ($annee > 4000) $annee -= 9000;
if (substr($jour, 0, 1) == '0') $jour = substr($jour, 1);
if ($forcer_jour AND $jour == '0') $jour = '1';
if ($forcer_jour AND $mois == '0') $mois = '1';
if ($annee OR $mois OR $jour OR $heures OR $minutes OR $secondes)
return array($annee, $mois, $jour, $heures, $minutes, $secondes);
}
// une date pour l'interface : utilise date_relative si le decalage
// avec time() est de moins de douze heures, sinon la date complete
// http://doc.spip.org/@date_interface
function date_interface($date, $decalage_maxi = 43200/* 12*3600 */) {
return sinon(
date_relative($date, $decalage_maxi),
affdate_heure($date)
);
}
// http://doc.spip.org/@date_relative
function date_relative($date, $decalage_maxi=0,$ref_date=null) {
if (is_null($ref_date))
$ref_time = time();
else
$ref_time = strtotime($ref_date);
if (!$date) return;
$decal = date("U",$ref_time) - date("U", strtotime($date));
if ($decalage_maxi AND ($decal > $decalage_maxi OR $decal < 0))
return '';
if ($decal < 0) {
$il_y_a = "date_dans";
$decal = -1 * $decal;
} else {
$il_y_a = "date_il_y_a";
}
if ($decal > 3600 * 24 * 30 * 6)
return affdate_court($date);
if ($decal > 3600 * 24 * 30) {
$mois = floor ($decal / (3600 * 24 * 30));
if ($mois < 2)
$delai = "$mois "._T("date_un_mois");
else
$delai = "$mois "._T("date_mois");
}
else if ($decal > 3600 * 24 * 7) {
$semaines = floor ($decal / (3600 * 24 * 7));
if ($semaines < 2)
$delai = "$semaines "._T("date_une_semaine");
else
$delai = "$semaines "._T("date_semaines");
}
else if ($decal > 3600 * 24) {
$jours = floor ($decal / (3600 * 24));
if ($jours < 2)
return $il_y_a=="date_dans"?_T("date_demain"):_T("date_hier");
else
$delai = "$jours "._T("date_jours");
}
else if ($decal >= 3600) {
$heures = floor ($decal / 3600);
if ($heures < 2)
$delai = "$heures "._T("date_une_heure");
else
$delai = "$heures "._T("date_heures");
}
else if ($decal >= 60) {
$minutes = floor($decal / 60);
if ($minutes < 2)
$delai = "$minutes "._T("date_une_minute");
else
$delai = "$minutes "._T("date_minutes");
} else {
$secondes = ceil($decal);
if ($secondes < 2)
$delai = "$secondes "._T("date_une_seconde");
else
$delai = "$secondes "._T("date_secondes");
}
return _T($il_y_a, array("delai"=> $delai));
}
// http://doc.spip.org/@date_relativecourt
function date_relativecourt($date, $decalage_maxi=0) {
if (!$date) return;
$decal = date("U",strtotime(date('Y-m-d'))-strtotime(date('Y-m-d',strtotime($date))));
if ($decalage_maxi AND ($decal > $decalage_maxi OR $decal < 0))
return '';
if ($decal < -24*3600) {
$retour = date_relative($date, $decalage_maxi);
}
elseif ($decal < 0) {
$retour = _T("date_demain");
}
else if ($decal < (3600 * 24) ) {
$retour = _T("date_aujourdhui");
}
else if ($decal < (3600 * 24 *2) ) {
$retour = _T("date_hier");
}
else {
$retour = date_relative($date, $decalage_maxi);
}
return $retour;
}
/**
* Formatage humain de la date $numdate selon le format $vue
* http://doc.spip.org/@affdate_base
*
* @param $numdate
* @param $vue
* @param array $options
* param : 'abbr' ou 'initiale' permet d'afficher les jours au format court ou initiale
* annee_courante : permet de definir l'annee de reference pour l'affichage des dates courtes
* @return mixed|string
*/
function affdate_base($numdate, $vue, $options = array()) {
if (is_string($options))
$options = array('param'=>$options);
$date_array = recup_date($numdate, false);
if (!$date_array) return;
list($annee, $mois, $jour, $heures, $minutes, $secondes)= $date_array;
// 1er, 21st, etc.
$journum = $jour;
if ($jour == 0) {
$jour = '';
} else {
$njour = intval($jour);
if ($jourth = _T('date_jnum'.$jour))
$jour = $jourth;
}
$mois = intval($mois);
if ($mois > 0 AND $mois < 13) {
$nommois = _T('date_mois_'.$mois);
if ($jour)
$jourmois = _T('date_de_mois_'.$mois, array('j'=>$jour, 'nommois'=>$nommois));
else
$jourmois = $nommois;
} else $nommois = '';
if ($annee < 0) {
$annee = -$annee." "._T('date_avant_jc');
$avjc = true;
}
else $avjc = false;
switch ($vue) {
case 'saison':
case 'saison_annee':
$saison = '';
if ($mois > 0){
$saison = 1;
if (($mois == 3 AND $jour >= 21) OR $mois > 3) $saison = 2;
if (($mois == 6 AND $jour >= 21) OR $mois > 6) $saison = 3;
if (($mois == 9 AND $jour >= 21) OR $mois > 9) $saison = 4;
if (($mois == 12 AND $jour >= 21) OR $mois > 12) $saison = 1;
}
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;
$a = ((isset($options['annee_courante']) AND $options['annee_courante'])?$options['annee_courante']:date('Y'));
if ($annee < ($a - 100) OR $annee > ($a + 100)) return $annee;
if ($annee != $a) return _T('date_fmt_mois_annee', array ('mois'=>$mois, 'nommois'=>spip_ucfirst($nommois), 'annee'=>$annee));
return _T('date_fmt_jour_mois', array ('jourmois'=>$jourmois, 'jour'=>$jour, 'mois'=>$mois, 'nommois'=>$nommois, 'annee'=>$annee));
case 'jourcourt':
if ($avjc) return $annee;
$a = ((isset($options['annee_courante']) AND $options['annee_courante'])?$options['annee_courante']:date('Y'));
if ($annee < ($a - 100) OR $annee > ($a + 100)) return $annee;
if ($annee != $a) return _T('date_fmt_jour_mois_annee', array ('jourmois'=>$jourmois, 'jour'=>$jour, 'mois'=>$mois, 'nommois'=>$nommois, 'annee'=>$annee));
return _T('date_fmt_jour_mois', array ('jourmois'=>$jourmois, 'jour'=>$jour, 'mois'=>$mois, 'nommois'=>$nommois, 'annee'=>$annee));
case 'entier':
if ($avjc) return $annee;
if ($jour)
return _T('date_fmt_jour_mois_annee', array ('jourmois'=>$jourmois, 'jour'=>$jour, 'mois'=>$mois, 'nommois'=>$nommois, 'annee'=>$annee));
elseif ($mois)
return trim(_T('date_fmt_mois_annee', array ('mois'=>$mois, 'nommois'=>$nommois, 'annee'=>$annee)));
else
return $annee;
case 'nom_mois':
$param = ((isset($options['param']) AND $options['param']) ? '_'.$options['param'] : '');
if ($param and $mois) {
return _T('date_mois_'.$mois.$param);
}
return $nommois;
case 'mois':
return sprintf("%02s",$mois);
case 'jour':
return $jour;
case 'journum':
return $journum;
case 'nom_jour':
if (!$mois OR !$njour)
return '';
$nom = mktime(1,1,1,$mois,$njour,$annee);
$nom = 1+date('w',$nom);
$param = ((isset($options['param']) AND $options['param']) ? '_'.$options['param'] : '');
return _T('date_jour_'.$nom.$param);
case 'mois_annee':
if ($avjc) return $annee;
return trim(_T('date_fmt_mois_annee', array('mois'=>$mois, 'nommois'=>$nommois, 'annee'=>$annee)));
case 'annee':
return $annee;
// Cas d'une vue non definie : retomber sur le format
// de date propose par http://www.php.net/date
default:
return date($vue, strtotime($numdate));
}
}
// http://doc.spip.org/@nom_jour
function nom_jour($numdate, $forme = '') {
if(!($forme == 'abbr' OR $forme == 'initiale')) $forme = '';
return affdate_base($numdate, 'nom_jour', $forme);
}
// http://doc.spip.org/@jour
function jour($numdate) {
return affdate_base($numdate, 'jour');
}
// http://doc.spip.org/@journum
function journum($numdate) {
return affdate_base($numdate, 'journum');
}
// http://doc.spip.org/@mois
function mois($numdate) {
return affdate_base($numdate, 'mois');
}
// http://doc.spip.org/@nom_mois
function nom_mois($numdate, $forme='') {
if(!($forme == 'abbr')) $forme = '';
return affdate_base($numdate, 'nom_mois', $forme);
}
// http://doc.spip.org/@annee
function annee($numdate) {
return affdate_base($numdate, 'annee');
}
// http://doc.spip.org/@saison
function saison($numdate) {
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);
}
// http://doc.spip.org/@affdate_court
function affdate_court($numdate, $annee_courante=null) {
return affdate_base($numdate, 'court', array('annee_courante'=>$annee_courante));
}
// http://doc.spip.org/@affdate_jourcourt
function affdate_jourcourt($numdate, $annee_courante=null) {
return affdate_base($numdate, 'jourcourt', array('annee_courante'=>$annee_courante));
}
// http://doc.spip.org/@affdate_mois_annee
function affdate_mois_annee($numdate) {
return affdate_base($numdate, 'mois_annee');
}
// http://doc.spip.org/@affdate_heure
function affdate_heure($numdate) {
$date_array = recup_date($numdate);
if (!$date_array) return;
list($annee, $mois, $jour, $heures, $minutes, $sec)= $date_array;
return _T('date_fmt_jour_heure', array('jour' => affdate($numdate), 'heure' => _T('date_fmt_heures_minutes', array('h'=> $heures, 'm'=> $minutes))));
}
/**
* Afficher de facon textuelle les dates de debut et fin en fonction des cas
* - Lundi 20 fevrier a 18h
* - Le 20 fevrier de 18h a 20h
* - Du 20 au 23 fevrier
* - Du 20 fevrier au 30 mars
* - 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)
* - hcal (generer une date au format hcal)
* - jour (forcer l'affichage des jours)
* - annee (forcer l'affichage de l'annee)
*
* @param string $date_debut
* @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=''){
$abbr = $jour = '';
$affdate = "affdate_jourcourt";
if (strpos($forme,'abbr') !==false) $abbr = 'abbr';
if (strpos($forme,'annee')!==false) $affdate = 'affdate';
if (strpos($forme,'jour') !==false) $jour = 'jour';
$dtstart = $dtend = $dtabbr = "";
if (strpos($forme,'hcal')!==false) {
$dtstart = "";
$dtend = "";
$dtabbr = "";
}
$date_debut = strtotime($date_debut);
$date_fin = strtotime($date_fin);
$d = date("Y-m-d", $date_debut);
$f = date("Y-m-d", $date_fin);
$h = ($horaire==='oui' OR $horaire===true);
$hd = _T('date_fmt_heures_minutes_court', array('h'=> date("H",$date_debut), 'm'=> date("i",$date_debut)));
$hf = _T('date_fmt_heures_minutes_court', array('h'=> date("H",$date_fin), 'm'=> date("i",$date_fin)));
if ($d==$f)
{ // meme jour
$nomjour = nom_jour($d,$abbr);
$s = $affdate($d);
$s = _T('date_fmt_jour',array('nomjour'=>$nomjour,'jour' => $s));
if ($h){
if ($hd==$hf){
// Lundi 20 fevrier a 18h25
$s = spip_ucfirst(_T('date_fmt_jour_heure',array('jour'=>$s,'heure'=>$hd)));
$s = "$dtstart$s$dtabbr";
}else{
// Le