From 8392ab1f502edfbae6a68acc43b6680a7a39a628 Mon Sep 17 00:00:00 2001 From: Jan Schneider Date: Thu, 15 Apr 2010 14:56:35 +0200 Subject: [PATCH] Search for tags too, when searching for events. --- kronolith/lib/Ajax/Application.php | 8 +++++++ kronolith/lib/Driver/Sql.php | 29 +------------------------ kronolith/lib/Kronolith.php | 44 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+), 28 deletions(-) diff --git a/kronolith/lib/Ajax/Application.php b/kronolith/lib/Ajax/Application.php index 71d16ad64..89406c690 100644 --- a/kronolith/lib/Ajax/Application.php +++ b/kronolith/lib/Ajax/Application.php @@ -265,6 +265,7 @@ class Kronolith_Ajax_Application extends Horde_Ajax_Application_Base break; } + $tagger = new Kronolith_Tagger(); $cals = Horde_Serialize::unserialize($this->_vars->cals, Horde_Serialize::JSON); $events = array(); foreach ($cals as $cal) { @@ -279,6 +280,13 @@ class Kronolith_Ajax_Application extends Horde_Ajax_Application_Base } 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; diff --git a/kronolith/lib/Driver/Sql.php b/kronolith/lib/Driver/Sql.php index eb25a98b8..7f98651a7 100644 --- a/kronolith/lib/Driver/Sql.php +++ b/kronolith/lib/Driver/Sql.php @@ -186,36 +186,9 @@ class Kronolith_Driver_Sql extends Kronolith_Driver $query->end, $cond, $values); - $now = new Horde_Date($_SERVER['REQUEST_TIME']); $events = array(); foreach ($eventIds as $eventId) { - $event = $this->getEvent($eventId); - $showRecurrence = true; - if ($event->recurs()) { - if (empty($query->start) && empty($query->end)) { - $eventStart = $event->start; - $eventEnd = $event->end; - } else { - if (empty($query->end)) { - $eventEnd = $event->recurrence->nextRecurrence($now); - if (!$eventEnd) { - continue; - } - } else { - $eventEnd = $query->end; - } - if (empty($query->start)) { - $eventStart = $event->start; - $showRecurrence = false; - } else { - $eventStart = $query->start; - } - } - } else { - $eventStart = $event->start; - $eventEnd = $event->end; - } - Kronolith::addEvents($events, $event, $eventStart, $eventEnd, $showRecurrence, $json, false); + Kronolith::addSearchEvents($events, $this->getEvent($eventId), $query, $json); } return $events; diff --git a/kronolith/lib/Kronolith.php b/kronolith/lib/Kronolith.php index b6f5242d7..cbb0a66a8 100644 --- a/kronolith/lib/Kronolith.php +++ b/kronolith/lib/Kronolith.php @@ -801,6 +801,50 @@ class Kronolith } /** + * Adds an event to set of search results. + * + * @param array $events The list of events to update with the new + * event. + * @param Kronolith_Event $event An event from a search result. + * @param stdClass $query A search query. + * @param boolean $json Store the results of the events' toJson() + * method? + */ + public static function addSearchEvents(&$events, $event, $query, $json) + { + static $now; + if (!isset($now)) { + $now = new Horde_Date($_SERVER['REQUEST_TIME']); + } + $showRecurrence = true; + if ($event->recurs()) { + if (empty($query->start) && empty($query->end)) { + $eventStart = $event->start; + $eventEnd = $event->end; + } else { + if (empty($query->end)) { + $eventEnd = $event->recurrence->nextRecurrence($now); + if (!$eventEnd) { + continue; + } + } else { + $eventEnd = $query->end; + } + if (empty($query->start)) { + $eventStart = $event->start; + $showRecurrence = false; + } else { + $eventStart = $query->start; + } + } + } else { + $eventStart = $event->start; + $eventEnd = $event->end; + } + Kronolith::addEvents($events, $event, $eventStart, $eventEnd, $showRecurrence, $json, false); + } + + /** * Returns the number of events in calendars that the current user owns. * * @return integer The number of events. -- 2.11.0