Kronolith::addSearchEvents PHP Метод

addSearchEvents() публичный статический Метод

Adds an event to set of search results.
public static addSearchEvents ( array &$events, Kronolith_Event $event, stdClass $query, boolean $json )
$events array The list of events to update with the new event.
$event Kronolith_Event An event from a search result.
$query stdClass A search query.
$json boolean 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)) {
                    $convert = $event->timezone && $event->getDriver()->supportsTimezones();
                    if ($convert) {
                        $timezone = date_default_timezone_get();
                        $event->recurrence->start->setTimezone($event->timezone);
                        if ($event->recurrence->hasRecurEnd()) {
                            $event->recurrence->recurEnd->setTimezone($event->timezone);
                        }
                    }
                    $eventEnd = $event->recurrence->nextRecurrence($now);
                    if (!$eventEnd) {
                        return;
                    }
                    if ($convert) {
                        $eventEnd->setTimezone($timezone);
                    }
                } else {
                    $eventEnd = $query->end;
                }
                if (empty($query->start)) {
                    $eventStart = $event->start;
                    $showRecurrence = false;
                } else {
                    $eventStart = $query->start;
                }
            }
        } else {
            // Don't include any results that are outside the query range.
            if (!empty($query->end) && $event->start->after($query->end) || !empty($query->start) && $event->end->before($query->start)) {
                return;
            }
            $eventStart = $event->start;
            $eventEnd = $event->end;
        }
        self::addEvents($events, $event, $eventStart, $eventEnd, $showRecurrence, $json, false);
    }

Usage Example

Пример #1
0
 /**
  * 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;
 }
All Usage Examples Of Kronolith::addSearchEvents