function get_repeats_between($event, $gmt_start, $gmt_end, $limit, $events) { global $ICAL_EVENTS_REPEAT_INTERVALS; $rrule = $event['Repeat']; $repeats = array(); //print_r($rrule); if (isset($ICAL_EVENTS_REPEAT_INTERVALS[$rrule['Interval']])) { $interval = $ICAL_EVENTS_REPEAT_INTERVALS[$rrule['Interval']] * ($rrule['Frequency'] ? $rrule['Frequency'] : 1); $repeat_days = ICalEvents::get_repeat_days($rrule['RepeatDays']); $t = getdate($event['StartTime']); $exceptions_array = array(); $exceptions_array = $rrule['Exceptions']; foreach ($events as $value) { if ($value['UID'] == $event['UID'] && !empty($value['RecurrenceID'])) { $exceptions_array[] = $value['RecurrenceID']; } } $repeat = null; $count = 0; while ($count <= ICAL_EVENTS_MAX_REPEATS) { if (isset($rrule['ByMonthDay'])) { if ($count > 0) { $repeat = $event; unset($repeat['Repeat']); $repeat['StartTime'] = mktime($t['hours'], $t['minutes'], $t['seconds'], $t['mon'] + $count, $rrule['ByMonthDay'], $t['year']); $repeat['EndTime'] = $repeat['StartTime'] - $event['StartTime']; if (!ICalEvents::is_duplicate($repeat, $event) && ICalEvents::falls_between($repeat, $gmt_start, $gmt_end) && !@in_array($repeat['StartTime'], $exceptions_array)) { $repeats[] = $repeat; } } } else { if ($repeat_days) { foreach ($repeat_days as $repeat_day => $repeat_week) { $repeat = ICalEvents::get_repeat($event, $interval, $count, $repeat_day, $repeat_week); if (!ICalEvents::is_duplicate($repeat, $event) and ICalEvents::falls_between($repeat, $gmt_start, $gmt_end) && !@in_array($repeat['StartTime'], $exceptions_array)) { $repeats[] = $repeat; } if (ICalEvents::after_rrule_end_time($repeat, $rrule)) { break; } } } else { $repeat = ICalEvents::get_simple_repeat($event, $interval, $count); if (!ICalEvents::is_duplicate($repeat, $event) and ICalEvents::falls_between($repeat, $gmt_start, $gmt_end) && !@in_array($repeat['StartTime'], $exceptions_array)) { $repeats[] = $repeat; } } } if (ICalEvents::after_rrule_end_time($repeat, $rrule)) { break; } // Don't repeat past the user-defined limit, if one exists if ($limit and $count >= $limit) { break; } ++$count; } } else { echo "Unknown repeat interval: {$rr['Interval']}"; } return $repeats; }