recurs() public method

Returns whether this event is a recurring event.
public recurs ( ) : boolean
return boolean True if this is a recurring event.
Ejemplo n.º 1
0
 public function html($active = true)
 {
     if (!$this->_event) {
         echo '<h3>' . _("Event not found") . '</h3>';
         exit;
     }
     if (is_string($this->_event)) {
         echo '<h3>' . $this->_event . '</h3>';
         exit;
     }
     if ($datetime = Horde_Util::getFormData('datetime')) {
         $datetime = new Horde_Date($datetime);
         $month = $datetime->month;
         $year = $datetime->year;
         $day = $datetime->mday;
     } else {
         $month = Horde_Util::getFormData('month', date('n'));
         $day = Horde_Util::getFormData('mday', date('j'));
         $year = Horde_Util::getFormData('year', date('Y'));
     }
     $url = Horde_Util::getFormData('url');
     echo '<div id="DeleteEvent"' . ($active ? '' : ' style="display:none"') . '>';
     if (!$this->_event->recurs()) {
         require KRONOLITH_TEMPLATES . '/delete/one.inc';
     } else {
         require KRONOLITH_TEMPLATES . '/delete/delete.inc';
     }
     echo '</div>';
     if ($active && $GLOBALS['browser']->hasFeature('dom')) {
         if ($this->_event->hasPermission(Horde_Perms::READ)) {
             $view = new Kronolith_View_Event($this->_event);
             $view->html(false);
         }
         if ($this->_event->hasPermission(Horde_Perms::READ) && Kronolith::getDefaultCalendar(Horde_Perms::EDIT)) {
             $edit = new Kronolith_View_EditEvent($this->_event);
             $edit->html(false);
         }
     }
 }
Ejemplo n.º 2
0
 /**
  * Saves an event in the backend.
  *
  * If it is a new event, it is added, otherwise the event is updated.
  *
  * @param Kronolith_Event $event  The event to save.
  *
  * @return string  The event id.
  * @throws Horde_Mime_Exception
  * @throws Kronolith_Exception
  */
 public function saveEvent(Kronolith_Event $event)
 {
     if ($event->stored || $event->exists()) {
         // If this event recurs and has bound exceptions, we must make sure
         // that the exceptionoriginaldate is updated in those exceptions as
         // well. See Bug: 13512
         if ($event->recurs()) {
             foreach ($event->boundExceptions() as $bound) {
                 $t = $event->start->strftime('%T');
                 $bound->exceptionoriginaldate = new Horde_Date($bound->start->strftime('%Y-%m-%d') . 'T' . $t);
                 $bound->save();
             }
         }
         return $this->_updateEvent($event);
     }
     return $this->_addEvent($event);
 }
Ejemplo n.º 3
0
 public function html($active = true)
 {
     if (!$this->_event) {
         echo '<h3>' . _("Event not found") . '</h3>';
         exit;
     }
     if (is_string($this->_event)) {
         echo '<h3>' . $this->_event . '</h3>';
         exit;
     }
     $identity = $GLOBALS['injector']->getInstance('Horde_Core_Factory_Identity')->create();
     if ($this->_event->hasPermission(Horde_Perms::EDIT)) {
         $calendar_id = $this->_event->calendarType . '_' . $this->_event->calendar;
     } else {
         $calendar_id = 'internal_' . Kronolith::getDefaultCalendar(Horde_Perms::EDIT);
     }
     if (!$this->_event->hasPermission(Horde_Perms::EDIT)) {
         try {
             $calendar_id .= '\\' . $this->_event->getShare()->get('owner');
         } catch (Exception $e) {
         }
     }
     $GLOBALS['session']->set('kronolith', 'attendees', $this->_event->attendees);
     $GLOBALS['session']->set('kronolith', 'resources', $this->_event->getResources());
     if ($datetime = Horde_Util::getFormData('datetime')) {
         $datetime = new Horde_Date($datetime);
         $month = $datetime->month;
         $year = $datetime->year;
     } else {
         $month = Horde_Util::getFormData('month', date('n'));
         $year = Horde_Util::getFormData('year', date('Y'));
     }
     $url = Horde_Util::getFormData('url');
     $perms = Horde_Perms::EDIT;
     if ($this->_event->creator == $GLOBALS['registry']->getAuth()) {
         $perms |= Kronolith::PERMS_DELEGATE;
     }
     $calendars = Kronolith::listCalendars($perms, true);
     $buttons = array();
     if (!$this->_event->hasPermission(Horde_Perms::EDIT) && ($GLOBALS['injector']->getInstance('Horde_Core_Perms')->hasAppPermission('max_events') === true || $GLOBALS['injector']->getInstance('Horde_Core_Perms')->hasAppPermission('max_events') > Kronolith::countEvents())) {
         $buttons[] = '<input type="submit" class="horde-create" name="saveAsNew" value="' . _("Save As New") . '" />';
     } else {
         if ($this->_event->hasPermission(Horde_Perms::EDIT)) {
             $buttons[] = '<input type="submit" class="horde-default" name="save" value="' . _("Save Event") . '" />';
         }
         if ($this->_event->initialized) {
             if (!$this->_event->recurs() && ($GLOBALS['injector']->getInstance('Horde_Core_Perms')->hasAppPermission('max_events') === true || $GLOBALS['injector']->getInstance('Horde_Core_Perms')->hasAppPermission('max_events') > Kronolith::countEvents())) {
                 $buttons[] = '<input type="submit" class="horde-create" name="saveAsNew" value="' . _("Save As New") . '" />';
             }
         }
     }
     if (isset($url)) {
         $cancelurl = new Horde_Url($url);
     } else {
         $cancelurl = Horde::url('month.php', true)->add(array('month' => $month, 'year' => $year));
     }
     $event =& $this->_event;
     $tags = implode(',', array_values($event->tags));
     Horde_Core_Ui_JsCalendar::init(array('full_weekdays' => true));
     global $page_output;
     $page_output->addScriptFile('hordecore.js', 'horde');
     $page_output->addScriptFile('edit.js');
     $page_output->addScriptFile('popup.js', 'horde');
     echo '<div id="EditEvent"' . ($active ? '' : ' style="display:none"') . '>';
     require KRONOLITH_TEMPLATES . '/edit/edit.inc';
     echo '</div>';
     if ($active && $GLOBALS['browser']->hasFeature('dom')) {
         if ($this->_event->hasPermission(Horde_Perms::READ)) {
             $view = new Kronolith_View_Event($this->_event);
             $view->html(false);
         }
         if ($this->_event->hasPermission(Horde_Perms::DELETE)) {
             $delete = new Kronolith_View_DeleteEvent($this->_event);
             $delete->html(false);
         }
     }
 }
Ejemplo n.º 4
0
 /**
  * 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)) {
                 $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 {
         $eventStart = $event->start;
         $eventEnd = $event->end;
     }
     self::addEvents($events, $event, $eventStart, $eventEnd, $showRecurrence, $json, false);
 }
Ejemplo n.º 5
0
 /**
  * Handles updating/saving this event's resources. Unless this event recurs,
  * this will delete this event from any resource calendars that are no
  * longer needed (as when a resource is removed from an existing event). If
  * this event is an exception, i.e., contains a baseid, AND $existing is
  * provided, the resources from the original event are used for purposes
  * of determining any resources that need to be removed.
  *
  *
  * @param  Kronolith_Event|null $existing  An existing base event.
  * @since 4.2.6
  */
 protected function _handleResources(Kronolith_Event $existing = null)
 {
     global $session;
     if (Horde_Util::getFormData('isajax', false)) {
         $resources = array();
     } else {
         $resources = $session->get('kronolith', 'resources', Horde_Session::TYPE_ARRAY);
     }
     $existingResources = $this->_resources;
     $newresources = Horde_Util::getFormData('resources');
     if (!empty($newresources)) {
         foreach (explode(',', $newresources) as $id) {
             try {
                 $resource = Kronolith::getDriver('Resource')->getResource($id);
             } catch (Kronolith_Exception $e) {
                 $GLOBALS['notification']->push($e->getMessage(), 'horde.error');
                 continue;
             }
             if (!$resource instanceof Kronolith_Resource_Group || $resource->isFree($this)) {
                 $resources[$resource->getId()] = array('attendance' => Kronolith::PART_REQUIRED, 'response' => Kronolith::RESPONSE_NONE, 'name' => $resource->get('name'));
             } else {
                 $GLOBALS['notification']->push(_("No resources from this group were available"), 'horde.error');
             }
         }
     }
     $this->_resources = $resources;
     // Have the base event, and this is an exception so we must
     // match the recurrence in the resource's copy of the base event.
     if (!empty($existing) && $existing->recurs() && !$this->recurs()) {
         foreach ($existing->getResources() as $rid => $data) {
             $resource = Kronolith::getDriver('Resource')->getResource($key);
             $r_event = Kronolith::getDriver('Resource')->getByUID($existing->uid, $resource->calendar);
             $r_event->recurrence = $event->recurrence;
             $r_event->save();
         }
     }
     // If we don't recur, check for removal of any resources so we can
     // update those resources' calendars.
     if (!$this->recurs()) {
         $merged = $existingResources + $this->_resources;
         $delete = array_diff(array_keys($existingResources), array_keys($this->_resources));
         foreach ($delete as $key) {
             // Resource might be declined, in which case it won't have the event
             // on it's calendar.
             if ($merged[$key]['response'] != Kronolith::RESPONSE_DECLINED) {
                 try {
                     Kronolith::getDriver('Resource')->getResource($key)->removeEvent($this);
                 } catch (Kronolith_Exception $e) {
                     $GLOBALS['notification']->push('foo', 'horde.error');
                 }
             }
         }
     }
 }