public function getFilteredEvents(PostFilterEventsEvent $event, $name, EventDispatcher $eventDispatcher)
 {
     if ($event->getField() != 'tag') {
         return;
     }
     $events = $event->getEvents();
     $this->filterEvents($events, $event->getFilter());
     $event->setEvents($events);
 }
 /**
  * @param array   $events
  * @param array   $calendars
  * @param         $startTime
  * @param         $endTime
  * @param \Module $eventList
  *
  * @return array
  */
 public function filterAllEvents(array $events, array $calendars, $startTime, $endTime, \Module &$eventList)
 {
     global $container;
     if (!$eventList->calendarFilterField) {
         return $events;
     }
     $eventList->calendarFilterField = deserialize($eventList->calendarFilterField);
     if (!empty($eventList->calendarFilterField)) {
         if (empty($eventList->customTpl)) {
             $eventList->Template->setName('mod_eventlist_filter');
         }
         $eventList->Template->filterForm = '';
         if ($eventList->calendarFilterMergeMonth) {
             $eventList->calendarFilterField = implode(',', $eventList->calendarFilterField);
             $eventList->calendarFilterField = str_replace('startDate', 'startDate,mergeMonth', $eventList->calendarFilterField);
             $eventList->calendarFilterField = explode(',', $eventList->calendarFilterField);
         }
     }
     $this->eventList =& $eventList;
     $this->events = $events;
     $deleteSession = true;
     foreach ($eventList->calendarFilterField as $filterField) {
         if (\Input::post($filterField)) {
             continue;
         }
         $deleteSession = false;
     }
     if ($deleteSession) {
         \Session::getInstance()->remove('eventlistfilterreload_' . $this->eventList->id);
     }
     if (\Input::post('resetFilter') === '') {
         foreach ($eventList->calendarFilterField as $filterField) {
             if (!\Input::post($filterField)) {
                 continue;
             }
             \Input::setPost($filterField, '');
         }
     }
     \Session::getInstance()->set('eventlistfilterreload_' . $this->eventList->id, true);
     $restorePost = \Session::getInstance()->get('eventlistfilterpost_' . $this->eventList->id);
     if ($restorePost) {
         foreach ($restorePost as $postField => $postValue) {
             if (\Input::post($postField) === null) {
                 \Input::setPost($postField, $postValue);
             }
         }
         \Session::getInstance()->set('eventlistfilterreload_' . $this->eventList->id, false);
     }
     /** @var EventDispatcher $eventDispatcher */
     $eventDispatcher = $container['event-dispatcher'];
     if (!($filter = \Session::getInstance()->get('eventlistfilter_' . $this->eventList->id))) {
         $filter = array();
         foreach ($eventList->calendarFilterField as $filterField) {
             $filter[$filterField] = '';
         }
     }
     foreach ($filter as $post => $value) {
         if ($postValue = \Input::post($post)) {
             $filterEventsEvent = new PostFilterEventsEvent($post, $postValue);
             $filterEventsEvent->setEvents($this->events);
             $eventDispatcher->dispatch(PostFilterEventsEvent::NAME, $filterEventsEvent);
             $this->events = $filterEventsEvent->getEvents();
             $filterOptionsEvent = new GetFilterOptionsEvent();
             $eventDispatcher->dispatch(GetFilterOptionsEvent::NAME, $filterOptionsEvent);
             if ($filterOptionsEvent->hasOption($post)) {
                 continue;
             }
             $this->filterCalendar($this->events, array('field' => $post, 'value' => $postValue));
         }
     }
     $this->getFilter($filter);
     $postSession = array();
     foreach (array_keys($filter) as $postField) {
         $postValue = \Input::post($postField);
         if (!$postValue || $postValue === '') {
             continue;
         }
         $postSession[$postField] = $postValue;
     }
     if (count($postSession) > 0) {
         \Session::getInstance()->set('eventlistfilterpost_' . $this->eventList->id, $postSession);
     }
     if (count($postSession) < 1) {
         \Session::getInstance()->set('eventlistfilterpost_' . $this->eventList->id, null);
     }
     $this->eventList->Template->filterForm = $this->compileFilterForm($filter);
     $reload = false;
     if (\Session::getInstance()->get('eventlistfilterreload_' . $this->eventList->id)) {
         foreach ($this->eventList->calendarFilterField as $filterField) {
             if (\Input::post($filterField) != null && \Input::post($filterField) !== '0') {
                 $reload = true;
             }
         }
     }
     if ($reload) {
         \Session::getInstance()->set('eventlistfilterreload_' . $this->eventList->id, true);
         \Controller::reload();
     }
     return $this->events;
 }