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; }