From b3d57785dcd769f93608ac78063b83bd5b42c872 Mon Sep 17 00:00:00 2001 From: Juanjo Menent Date: Fri, 10 Jun 2011 19:44:01 +0000 Subject: [PATCH] task #9747: Can show content of external calendar (ical) into agenda --- htdocs/comm/action/class/ical.class.php | 8 ++++- htdocs/comm/action/index.php | 45 +++++++++++++++++-------- 2 files changed, 38 insertions(+), 15 deletions(-) diff --git a/htdocs/comm/action/class/ical.class.php b/htdocs/comm/action/class/ical.class.php index b374bd9d6f3..67857289cd9 100644 --- a/htdocs/comm/action/class/ical.class.php +++ b/htdocs/comm/action/class/ical.class.php @@ -154,7 +154,13 @@ class ical if (($key == "DTSTAMP") or ($key == "LAST-MODIFIED") or ($key == "CREATED")) $value = $this->ical_date_to_unix($value); if ($key == "RRULE" ) $value = $this->ical_rrule($value); - if (stristr($key,"DTSTART") or stristr($key,"DTEND")) list($key,$value) = $this->ical_dt_date($key,$value); + if (stristr($key,"DTSTART") or stristr($key,"DTEND") or stristr($key,"DTSTART;VALUE=DATE") or stristr($key,"DTEND;VALUE=DATE")) + { + if (stristr($key,"DTSTART;VALUE=DATE") or stristr($key,"DTEND;VALUE=DATE")) + list($key,$value) = array($key,$value); + else + list($key,$value) = $this->ical_dt_date($key,$value); + } switch ($type) { diff --git a/htdocs/comm/action/index.php b/htdocs/comm/action/index.php index e46e6083d3e..b04a3fb859f 100644 --- a/htdocs/comm/action/index.php +++ b/htdocs/comm/action/index.php @@ -503,22 +503,40 @@ if ($conf->global->ENABLE_AGENDA_EXT==1 && $conf->global->AGENDA_EXT_NB>0) foreach($icalevents as $icalevent) { // Create a new object action - if(!is_array($icalevent[DTSTART])) //non-repeatable and not fullday event + $event=new ActionComm($db); + $addevent = false; + if($icalevent['DTSTART;VALUE=DATE']) //fullday event + { + $datestart=$db->jdate($icalevent['DTSTART;VALUE=DATE']); + $dateend=$db->jdate($icalevent['DTEND;VALUE=DATE']); + $event->fulldayevent=true; + $addevent=true; + } + elseif (is_array($icalevent['RRULE'])) //repeatable event + { + $addevent=false; //TODO: a faire + } + elseif(!is_array($icalevent['DTSTART'])) //non-repeatable and not fullday event + { + $datestart=$icalevent['DTSTART']; + $dateend=$icalevent['DTEND']; + $addevent=true; + } + + if($addevent) { - $event=new ActionComm($db); $paramkey='AGENDA_EXT_NAME'.$i; $namecal = $conf->global->$paramkey; $paramkey='AGENDA_EXT_COLOR'.$i; $colorcal = $conf->global->$paramkey; - $event->id=$icalevent[UID]; + $event->id=$icalevent['UID']; $event->icalname=$namecal; $event->icalcolor=$colorcal; $usertime=($_SESSION['dol_tz']*60*60)+($_SESSION['dol_dst']*60*60); - $event->datep=$icalevent[DTSTART]+$usertime; - $event->datef=$icalevent[DTEND]+$usertime; + $event->datep=$datestart+$usertime; + $event->datef=$dateend+$usertime; $event->type_code="ICALEVENT"; - $event->libelle=''.$icalevent[SUMMARY].'
'.str_replace("\\n", "
", "$icalevent[DESCRIPTION]"); - //$event->fulldayevent=$obj->fulldayevent; + $event->libelle=''.$icalevent['SUMMARY'].'
'.str_replace("\\n", "
", $icalevent['DESCRIPTION']); $event->date_start_in_calendar=$event->datep; @@ -559,12 +577,7 @@ if ($conf->global->ENABLE_AGENDA_EXT==1 && $conf->global->AGENDA_EXT_NB>0) while ($loop); } } - else //repeatable or fullday event - { - - } - } - + } } $i++; } @@ -898,7 +911,11 @@ function show_day_events($db, $day, $month, $year, $monthshown, $style, &$eventa if ($linerelatedto) print $linerelatedto.'
'; // Show label - if($event->type_code == 'ICALEVENT') print $event->libelle; + if($event->type_code == 'ICALEVENT') + { + if ($event->fulldayevent) print '('.$event->icalname.')
'; + print $event->libelle; + } else print $event->getNomUrl(0,$maxnbofchar,'cal_event'); } else // It's a birthday