/**
* TODO
*/
public function searchEvents()
{
$query = Horde_Serialize::unserialize($this->vars->query, Horde_Serialize::JSON);
if (!isset($query->start)) {
$query->start = new Horde_Date($_SERVER['REQUEST_TIME']);
}
if (!isset($query->end)) {
$query->end = null;
}
switch ($this->vars->time) {
case 'all':
$query->start = null;
$query->end = null;
break;
case 'future':
$query->start = new Horde_Date($_SERVER['REQUEST_TIME']);
$query->end = null;
break;
case 'past':
$query->start = null;
$query->end = new Horde_Date($_SERVER['REQUEST_TIME']);
break;
}
$tagger = new Kronolith_Tagger();
$cals = Horde_Serialize::unserialize($this->vars->cals, Horde_Serialize::JSON);
$events = array();
foreach ($cals as $cal) {
if (!($kronolith_driver = $this->_getDriver($cal))) {
continue;
}
try {
$result = $kronolith_driver->search($query, true);
if ($result) {
$events[$cal] = $result;
}
} catch (Exception $e) {
$GLOBALS['notification']->push($e, 'horde.error');
}
$split = explode('|', $cal);
if ($split[0] == 'internal') {
$result = $tagger->search($query->title, array('type' => 'event', 'calendar' => $split[1]));
foreach ($result['events'] as $uid) {
Kronolith::addSearchEvents($events[$cal], $kronolith_driver->getByUID($uid), $query, true);
}
}
}
$result = new stdClass();
$result->view = 'search';
$result->query = $this->vars->query;
if ($events) {
$result->events = $events;
}
return $result;
}