/**
  * 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);
             }
         }
     }
 }