/** * set current event filter for exdate computations * * @param Calendar_Model_EventFilter * @return Calendar_Model_EventFilter */ public function setEventFilter($_filter) { $oldFilter = $this->_eventFilter; if ($_filter !== NULL) { if (!$_filter instanceof Calendar_Model_EventFilter) { throw new Tinebase_Exception_UnexpectedValue('not a valid filter'); } $this->_eventFilter = clone $_filter; $periodFilters = $this->_eventFilter->getFilter('period', TRUE, TRUE); foreach ((array) $periodFilters as $periodFilter) { $periodFilter->setDisabled(); } } else { $this->_eventFilter = NULL; } return $oldFilter; }
/** * merge recurrences amd remove all events that do not match period filter * * @param Tinebase_Record_RecordSet $_events * @param Calendar_Model_EventFilter $_filter */ public static function mergeAndRemoveNonMatchingRecurrences(Tinebase_Record_RecordSet $_events, Calendar_Model_EventFilter $_filter = null) { if (!$_filter) { return; } $period = $_filter->getFilter('period', false, true); if ($period) { self::mergeRecurrenceSet($_events, $period->getFrom(), $period->getUntil()); foreach ($_events as $event) { if (!$event->isInPeriod($period)) { if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) { Tinebase_Core::getLogger()->trace(__METHOD__ . ' (' . __LINE__ . ') Removing not matching event ' . $event->summary); } $_events->removeRecord($event); } } } }