public static function readRecurrenceForm($start, $timezone, $recurrence = null) { $recur = Horde_Util::getFormData('recur'); if (!strlen($recur)) { return $recurrence; } if (!isset($recurrence)) { $recurrence = new Horde_Date_Recurrence($start); } else { $recurrence->setRecurStart($start); } if (Horde_Util::getFormData('recur_end_type') == 'date') { if ($end_date = Horde_Util::getFormData('recur_end_date')) { // From ajax interface. $date_ob = Kronolith::parseDate($end_date, false); $recur_enddate = array('year' => $date_ob->year, 'month' => $date_ob->month, 'day' => $date_ob->mday); } else { // From traditional interface. $recur_enddate = Horde_Util::getFormData('recur_end'); } if ($recurrence->hasRecurEnd()) { $recurEnd = $recurrence->recurEnd; $recurEnd->month = $recur_enddate['month']; $recurEnd->mday = $recur_enddate['day']; $recurEnd->year = $recur_enddate['year']; } else { $recurEnd = new Horde_Date(array('hour' => 23, 'min' => 59, 'sec' => 59, 'month' => $recur_enddate['month'], 'mday' => $recur_enddate['day'], 'year' => $recur_enddate['year']), $timezone); } $recurrence->setRecurEnd($recurEnd); } elseif (Horde_Util::getFormData('recur_end_type') == 'count') { $recurrence->setRecurCount(Horde_Util::getFormData('recur_count')); } elseif (Horde_Util::getFormData('recur_end_type') == 'none') { $recurrence->setRecurCount(0); $recurrence->setRecurEnd(null); } $recurrence->setRecurType($recur); switch ($recur) { case Horde_Date_Recurrence::RECUR_DAILY: $recurrence->setRecurInterval(Horde_Util::getFormData('recur_daily_interval', 1)); break; case Horde_Date_Recurrence::RECUR_WEEKLY: $weekly = Horde_Util::getFormData('weekly'); $weekdays = 0; if (is_array($weekly)) { foreach ($weekly as $day) { $weekdays |= $day; } } if ($weekdays == 0) { // Sunday starts at 0. switch ($start->dayOfWeek()) { case 0: $weekdays |= Horde_Date::MASK_SUNDAY; break; case 1: $weekdays |= Horde_Date::MASK_MONDAY; break; case 2: $weekdays |= Horde_Date::MASK_TUESDAY; break; case 3: $weekdays |= Horde_Date::MASK_WEDNESDAY; break; case 4: $weekdays |= Horde_Date::MASK_THURSDAY; break; case 5: $weekdays |= Horde_Date::MASK_FRIDAY; break; case 6: $weekdays |= Horde_Date::MASK_SATURDAY; break; } } $recurrence->setRecurInterval(Horde_Util::getFormData('recur_weekly_interval', 1)); $recurrence->setRecurOnDay($weekdays); break; case Horde_Date_Recurrence::RECUR_MONTHLY_DATE: switch (Horde_Util::getFormData('recur_monthly_scheme')) { case Horde_Date_Recurrence::RECUR_MONTHLY_WEEKDAY: $recurrence->setRecurType(Horde_Date_Recurrence::RECUR_MONTHLY_WEEKDAY); case Horde_Date_Recurrence::RECUR_MONTHLY_DATE: $recurrence->setRecurInterval(Horde_Util::getFormData('recur_monthly') ? 1 : Horde_Util::getFormData('recur_monthly_interval', 1)); break; default: $recurrence->setRecurInterval(Horde_Util::getFormData('recur_day_of_month_interval', 1)); break; } break; case Horde_Date_Recurrence::RECUR_MONTHLY_WEEKDAY: $recurrence->setRecurInterval(Horde_Util::getFormData('recur_week_of_month_interval', 1)); break; case Horde_Date_Recurrence::RECUR_YEARLY_DATE: switch (Horde_Util::getFormData('recur_yearly_scheme')) { case Horde_Date_Recurrence::RECUR_YEARLY_WEEKDAY: case Horde_Date_Recurrence::RECUR_YEARLY_DAY: $recurrence->setRecurType(Horde_Util::getFormData('recur_yearly_scheme')); case Horde_Date_Recurrence::RECUR_YEARLY_DATE: $recurrence->setRecurInterval(Horde_Util::getFormData('recur_yearly') ? 1 : Horde_Util::getFormData('recur_yearly_interval', 1)); break; default: $recurrence->setRecurInterval(Horde_Util::getFormData('recur_yearly_interval', 1)); break; } break; case Horde_Date_Recurrence::RECUR_YEARLY_DAY: $recurrence->setRecurInterval(Horde_Util::getFormData('recur_yearly_day_interval', $yearly_interval)); break; case Horde_Date_Recurrence::RECUR_YEARLY_WEEKDAY: $recurrence->setRecurInterval(Horde_Util::getFormData('recur_yearly_weekday_interval', $yearly_interval)); break; } if ($exceptions = Horde_Util::getFormData('exceptions')) { foreach ($exceptions as $exception) { $recurrence->addException((int) substr($exception, 0, 4), (int) substr($exception, 4, 2), (int) substr($exception, 6, 2)); } } return $recurrence; }