function parseRrule($data) { $rrule = array(); switch ($data['event_repeatkind']) { case 'daily' : case 'yearly' : $rrule['kind'] = $data['event_repeatkind']; break; case 'monthlybydate' : $rrule['kind'] = 'monthly'; break; case 'monthlybyday' : $rrule['kind'] = 'monthly'; $date = new Of_Date($data['event_date'], 'GMT'); $day = $date->get(Of_Date::WEEKDAY_ICS); $num = ceil($date->getDay()/7); $rrule['byday'] = array($num.$day); break; case 'weekly' : $rrule['kind'] = 'weekly'; foreach($this->weekDays as $longDay => $shortDay) { $index = date('w', strtotime($longDay)); if($data['event_repeatdays'][$index] == '1') { $days[] = $shortDay; } } $rrule['byday'] = $days; break; } if ($data['event_endrepeat']) $rrule['until'] = $this->parseDate($data['event_endrepeat']); $rrule['interval'] = $data['event_repeatfrequence']; return $rrule; }
/** * Parse a date with the given format, preferably with ICS_DATETIME if possible. * * @param Of_Date $date * @param string $format Date format. Can be Of_Date::ICS_DATETIME or Of_Date::ICS_DATE. */ function parseTZIDedDate($date, $format=Of_Date::ICS_DATETIME) { if ($date->getOriginalTimeZone() && $format == Of_Date::ICS_DATETIME) { $date->setTimezone(new DateTimeZone($date->getOriginalTimeZone())); $res = ';TZID='. $date->getOriginalTimeZone().':'. $date->get($format); $date->setDefaultTimezone(); } else { $res = ':'. $this->parseDate($date, $format); } return $res; }