public function repeatWeekly(Calendar_Event $event) { if (!isset($_POST['weekday_repeat']) || !is_array($_POST['weekday_repeat'])) { $this->message = dgettext('calendar', 'You must choose which weekdays to repeat.'); return false; } $time_unit = $event->start_time + 86400; $copy_event = $event->repeatClone(); $time_diff = $event->end_time - $event->start_time; $max_count = 0; $repeat_days =& $_POST['weekday_repeat']; $dst_start = date('I', $event->start_time); while ($time_unit <= $event->end_repeat) { if (!in_array(strftime('%u', $time_unit), $repeat_days)) { $time_unit += 86400; continue; } $dst_current = date('I', $time_unit); if ($dst_current != $dst_start) { if ($dst_current) { $time_unit -= 3600; } else { $time_unit += 3600; } $dst_start = $dst_current; } $copy_event->id = 0; $max_count++; if ($max_count > CALENDAR_MAXIMUM_REPEATS) { return PHPWS_Error::get(CAL_REPEAT_LIMIT_PASSED, 'calendar', 'Calendar_Admin::repeatWeekly'); } $copy_event->start_time = $time_unit; $copy_event->end_time = $time_unit + $time_diff; $result = $copy_event->save(); if (PHPWS_Error::isError($result)) { return $result; } $time_unit += 86400; } return TRUE; }