C'est fait et ca donne le code ci-dessous (un peu plus compliqué à cause
des additions et conversions de date)
MAIS
si un petit malin met une date de fin très très postérieure à la date de
début, il y a un risque non ?
D'autre part, étant donné la complexité du filtre (X)agenda_memo, et la
difficulté d'écrire la doc, peut-on trouver une solution en coupant en
deux avec
- COLLECT_AGENDA_MEMO (partie récupération)
- AGENDA_MEMO (partie sortie)
avec l'array $agenda en GLOBAL plutôt que STATIC, c'est pensable ou
dangereux ? à ce moment là je me sens capable d'écrire la documentation
sur le spikini.
MJ
> j'ai tracé le problème... coton.
>
> Pour que http_calendrier_init fonctionne correctement avec les
> évènements à cheval plusieurs jours, il faut que dans le tableau $evt,
> l'évènement en question soit répété chaque jour où il s'applique.
> C'est ce qui se passe en tout cas pour les messages dans l'espace
> privé.
>
> Ceci oblige dans le cas général à un traitement que je n'ai pas
> réussi à
> maîtriser...
> Il faut garder en mémoire les évènements répétitifs et les
> intercaler,
> mais en tenant compte des dates de fin de période demandée.. Si qqun a
> une idée je prends.
Dans ton filtre Xagenda_memo, il faut que tu fasse une boucle pour $i
allant de date_debut a date_fin pour faire $agenda[$cal]
[(date_anneemoisjour($i))] = array(...)
------ Le Code -----
<?
// A chaque appel de moins 5 arguments,cette fonction memorise un
evenement
// decrit par une date, un descriptif, un titre et une URL.
// A l'appel avec 6 arguments, l'ensemble sera mis en page selon le type
// indique par le 6e argument et la couleur indiquee par le 5e
// (nombre indexant le tableau $contraste de inc_calendrier -- a
CSS-iser)
// Ce 5e argument sert aussi d'index de memorisation
// pour avoir plusieurs calendriers dans une meme page sans
interferences
function Xagenda_memo($date_fin='',$date_deb='', $descriptif='',
$titre='', $url='', $cal='', $type='')
{
static $agenda = array();
if (!$type)
{
if($date_deb=="") $date_deb=$date_fin;
if($date_fin < $date_deb) {
$k=$date_deb;
$date_deb=$date_fin;
$date_fin=$k;
}
$date_courante=date_anneemoisjour($date_deb);
$start=strtotime($date_deb);
$end=strtotime($date_fin);
$a = array(
'CATEGORIES' => $cal,
'DTSTART' => date_ical($date_deb),
'DTEND' => date_ical($date_fin),
'DESCRIPTION' => texte_script($descriptif),
'SUMMARY' => texte_script($titre),
'URL' => $url);
for($i=$start;$i<=$end;$i+=3600*24)
$agenda[$cal][date("Ymd",$i)]= $a;
// signifier qu'il y a qqch
return " ";
} else {
if ($type != 'periode')
$evt = array('', $agenda[$cal]);
else
{
$d = array_keys($agenda[$cal]);
$mindate = min($d);
$min = substr($mindate,6,2);
$max = $min + ((strtotime(max($d)) - strtotime($mindate)) /
(3600 * 24));
if ($max < 31) $max = 0;
$evt = array('', $agenda[$cal], $min, $max);
$type = 'mois';
}
# print_r($evt);die();
include('ecrire/inc_calendrier.php');
return http_calendrier_init('', $type, '', '', '', $evt);
}
}