/**
* Obtain a recurrence object. Note this returns a Horde_Date_Recurrence
* object, not Horde_ActiveSync_Message_Recurrence.
*
* @return Horde_Date_Recurrence
*/
public function getRecurrence()
{
if (!($recurrence = $this->_getAttribute('recurrence'))) {
return false;
}
$d = clone $this->_getAttribute('starttime');
$d->setTimezone($this->getTimezone());
$rrule = new Horde_Date_Recurrence($d);
/* Map MS AS type field to Horde_Date_Recurrence types */
switch ($recurrence->type) {
case Horde_ActiveSync_Message_Recurrence::TYPE_DAILY:
$rrule->setRecurType(Horde_Date_Recurrence::RECUR_DAILY);
break;
case Horde_ActiveSync_Message_Recurrence::TYPE_WEEKLY:
$rrule->setRecurType(Horde_Date_Recurrence::RECUR_WEEKLY);
$rrule->setRecurOnDay($recurrence->dayofweek);
break;
case Horde_ActiveSync_Message_Recurrence::TYPE_MONTHLY:
$rrule->setRecurType(Horde_Date_Recurrence::RECUR_MONTHLY_DATE);
break;
case Horde_ActiveSync_Message_Recurrence::TYPE_MONTHLY_NTH:
$rrule->setRecurType(Horde_Date_Recurrence::RECUR_MONTHLY_WEEKDAY);
$rrule->setRecurOnDay($recurrence->dayofweek);
break;
case Horde_ActiveSync_Message_Recurrence::TYPE_YEARLY:
$rrule->setRecurType(Horde_Date_Recurrence::RECUR_YEARLY_DATE);
break;
case Horde_ActiveSync_Message_Recurrence::TYPE_YEARLYNTH:
$rrule->setRecurType(Horde_Date_Recurrence::RECUR_YEARLY_WEEKDAY);
$rrule->setRecurOnDay($recurrence->dayofweek);
break;
}
if ($rcnt = $recurrence->occurrences) {
$rrule->setRecurCount($rcnt);
}
if ($runtil = $recurrence->until) {
$rrule->setRecurEnd(new Horde_Date($runtil));
}
if ($interval = $recurrence->interval) {
$rrule->setRecurInterval($interval);
}
return $rrule;
}