public function search($query, $json = false)
{
/* Our default implementation first gets <em>all</em> events in a
* specific period, and then filters based on the actual values that
* are filled in. Drivers can optimize this behavior if they have the
* ability. */
$results = array();
$events = $this->listEvents(!empty($query->start) ? $query->start : null, !empty($query->end) ? $query->end : null);
foreach ($events as $day_events) {
foreach ($day_events as $event) {
if (((!isset($query->start) || $event->end->compareDateTime($query->start) > 0) && (!isset($query->end) || $event->end->compareDateTime($query->end) < 0) || $event->recurs() && $event->end->compareDateTime($query->start) >= 0 && $event->start->compareDateTime($query->end) <= 0) && (empty($query->title) || stristr($event->getTitle(), $query->title)) && (empty($query->location) || stristr($event->location, $query->location)) && (empty($query->description) || stristr($event->description, $query->description)) && (empty($query->creator) || stristr($event->creator, $query->creator)) && (!isset($query->status) || $event->status == $query->status) && (empty($query->baseid) || $event->baseid == $query->baseid)) {
Kronolith::addEvents($results, $event, $event->start, $event->end, false, $json, false);
}
}
}
return $results;
}