/** * Returns all CalendarEvents in the given time range for the given range_id. * * @param string $range_id Id of Stud.IP object from type user, course, inst * @param DateTime $start The start date time. * @param DateTime $end The end date time. * @return SimpleORMapCollection Collection of found CalendarEvents. */ public static function getEventsByInterval($range_id, DateTime $start, DateTime $end) { $stmt = DBManager::get()->prepare('SELECT * FROM calendar_event ' . 'INNER JOIN event_data USING(event_id) ' . 'WHERE range_id = :range_id ' . 'AND (start BETWEEN :start AND :end OR ' . "(start <= :end AND (expire + end - start) >= :start AND rtype != 'SINGLE') " . 'OR (:start BETWEEN start AND end)) ' . 'ORDER BY start ASC'); $stmt->execute(array(':range_id' => $range_id, ':start' => $start->getTimestamp(), ':end' => $end->getTimestamp())); $i = 0; $event_collection = array(); foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) { $event_collection[$i] = new CalendarEvent(); $event_collection[$i]->setData($row); $event_collection[$i]->setNew(false); $event = new EventData(); $event->setData($row); $event->setNew(false); $event_collection[$i]->event = $event; $i++; } $event_collection = SimpleORMapCollection::createFromArray($event_collection, false); $event_collection->setClassName('Event'); return $event_collection; }