_params['days'])) { $this->_params['days'] = 7; } $this->_name = _("Calendar Summary"); } /** */ protected function _params() { $params = array( 'calendar' => array( 'name' => _("Calendar"), 'type' => 'enum', 'default' => '__all' ), 'days' => array( 'name' => _("The time span to show"), 'type' => 'enum', 'default' => 7, 'values' => array( 1 => '1 ' . _("day"), 2 => '2 ' . _("days"), 3 => '3 ' . _("days"), 4 => '4 ' . _("days"), 5 => '5 ' . _("days"), 6 => '6 ' . _("days"), 7 => '1 ' . _("week"), 14 => '2 ' . _("weeks"), 21 => '3 ' . _("weeks"), 28 => '4 ' . _("weeks") ) ), 'maxevents' => array( 'name' => _("Maximum number of events to display (0 = no limit)"), 'type' => 'int', 'default' => 0 ), 'alarms' => array( 'name' => _("Show only events that have an alarm set?"), 'type' => 'checkbox', 'default' => 0 ) ); $params['calendar']['values']['__all'] = _("All Visible"); foreach (Kronolith::listCalendars(Horde_Perms::SHOW, true) as $id => $cal) { $params['calendar']['values'][$id] = $cal->name(); } return $params; } /** */ protected function _title() { $url = Horde::url($GLOBALS['registry']->getInitialPage(), true); if (isset($this->_params['calendar']) && $this->_params['calendar'] != '__all') { $url->add('display_cal', $this->_params['calendar']); } return $url->link() . htmlspecialchars($GLOBALS['registry']->get('name')) . ''; } /** */ protected function _content() { $GLOBALS['page_output']->addScriptFile('tooltips.js', 'horde'); $now = new Horde_Date($_SERVER['REQUEST_TIME']); $today = date('j'); $startDate = new Horde_Date(array('year' => date('Y'), 'month' => date('n'), 'mday' => date('j'))); $endDate = new Horde_Date(array('year' => date('Y'), 'month' => date('n'), 'mday' => date('j') + $this->_params['days'])); try { if (isset($this->_params['calendar']) && $this->_params['calendar'] != '__all') { $calendars = Kronolith::listCalendars(); if (!isset($calendars[$this->_params['calendar']])) { return _("Calendar not found"); } if (!$calendars[$this->_params['calendar']]->hasPermission(Horde_Perms::READ)) { return _("Permission Denied"); } list($type, $calendar) = explode('_', $this->_params['calendar'], 2); $driver = Kronolith::getDriver($type, $calendar); $all_events = Kronolith::sortEvents( $driver->listEvents( $startDate, $endDate, array('show_recurrence' => true)) ); } else { $all_events = Kronolith::listEvents( $startDate, $endDate, $GLOBALS['calendar_manager']->get(Kronolith::DISPLAY_CALENDARS)); } } catch (Exception $e) { return '' . $e->getMessage() . ''; } $html = ''; $iMax = $today + $this->_params['days']; $firstday = true; $totalevents = 0; for ($i = $today; $i < $iMax; ++$i) { $day = new Kronolith_Day(date('n'), $i); $date_stamp = $day->dateString(); if (empty($all_events[$date_stamp])) { continue; } $firstevent = true; $tomorrow = $day->getTomorrow(); foreach ($all_events[$date_stamp] as $event) { if (!empty($this->_params['maxevents']) && $totalevents >= $this->_params['maxevents']) { break 2; } if ($event->start->compareDate($day) < 0) { $event->start = $day; } if ($event->end->compareDate($tomorrow) >= 0) { $event->end = $tomorrow; } if ($event->end->compareDateTime($now) < 0) { continue; } if (!empty($this->_params['alarms']) && !$event->alarm) { continue; } $event_active = $event->start->compareDateTime($now) < 0 && $event->end->compareDateTime($now) > 0; if ($firstevent) { $html .= '