MartinThoma / ics-parser

Automatically exported from code.google.com/p/ics-parser
47 stars 28 forks source link

eventsFromRange should allow arbitrary range #1

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
To allow an arbitrary range to be selected using the eventsFromRange method I 
altered the code to the following, bool start and end are still accepted and 
should give same result as before (i.e. shouldn't break existing 
implementations)

/**
 * Returns false when the current calendar has no events in range, else the
 * events.
 * 
 * Note that this function makes use of a UNIX timestamp. This might be a 
 * problem on January the 29th, 2038.
 * See http://en.wikipedia.org/wiki/Unix_time#Representing_the_number
 *
 * @param {boolean} or {time} $rangeStart Either true or false or unix timestamp
 * @param {boolean} or {time} $rangeEnd   Either true or false or unix timestamp
 *
 * @return {mixed}
 */
public function eventsFromRange($rangeStart = false, $rangeEnd = false) 
{
    $events = $this->sortEventsWithOrder($this->events(), SORT_ASC);

    if (!$events) {
        return false;
    }

    $extendedEvents = array();

    if ($rangeStart === true) {
        $rangeStart = time();
    } else if ($rangeStart === false) {
        $rangeStart = 0;
    }

    if ($rangeEnd === true or ($rangeEnd <= $rangeStart && $rangeStart <= time())) {
        $rangeEnd = time();
    } else if ($rangeEnd === false or $rangeEnd <= $rangeStart) {
        $rangeEnd = strtotime('2038-01-18');
    }

    // loop through all events by adding two new elements
    foreach ($events as $anEvent) {
        $dtStart = $this->iCalDateToUnixTimestamp($anEvent['DTSTART']);
        $dtEnd = $this->iCalDateToUnixTimestamp($anEvent['DTEND']);
        if ($dtEnd >= $rangeStart && $dtStart <= $rangeEnd) $extendedEvents[] = $anEvent;
    }

    return $extendedEvents;
}

Original issue reported on code.google.com by maw.des...@gmail.com on 29 Jan 2012 at 9:09