/** * Startup callback * * @param Event $event Controller::startup event * @return void */ public function startup(\Cake\Event\Event $event) { $this->_controller = $event->subject(); $controllerListFilters = $this->getFilters(); if (empty($controllerListFilters)) { return; } // Redirect on Form Session Data if ($this->config['FormSession']['active']) { $formSessionData = $this->_controller->request->session()->read($this->_getSessionKey()); if (!empty($formSessionData) && empty($this->_controller->request->query['Filterredirect'])) { $redirectUrl = $this->getRedirectUrlFromPostData(['Filter' => $formSessionData]); $redirectUrl['Filterredirect'] = 1; return $this->_controller->redirect($redirectUrl); } } if ($this->_controller->request->is('post') && !empty($this->_controller->request->data['Filter'])) { $redirectUrl = $this->getRedirectUrlFromPostData($this->_controller->request->data); // Remove page param to paginate from the first page unset($redirectUrl['page']); // Save ListFilter Form Selection in Session if ($this->config['FormSession']['active']) { $this->_controller->request->session()->write($this->_getSessionKey(), $this->_controller->request->data['Filter']); } return $this->_controller->redirect($redirectUrl); } $filterConditions = []; if (!empty($this->_controller->request->query)) { $filterConditions = $this->_prepareFilterConditions($controllerListFilters); $conditions = isset($this->_controller->paginate['conditions']) ? $this->_controller->paginate['conditions'] : []; $this->_controller->paginate = Hash::merge($this->_controller->paginate, ['conditions' => Hash::merge($conditions, $filterConditions)]); } foreach ($controllerListFilters['fields'] as $field => $options) { if (!empty($controllerListFilters['fields'][$field]['options'])) { $tmpOptions = $controllerListFilters['fields'][$field]['options']; } $controllerListFilters['fields'][$field] = Hash::merge($this->defaultListFilter, $options); if (isset($tmpOptions)) { $controllerListFilters['fields'][$field]['options'] = $tmpOptions; } unset($tmpOptions); } $this->_controller->set('filters', $controllerListFilters['fields']); $this->_controller->set('filterActive', !empty($filterConditions)); }
/** * Handles filters which were persisted through cookies and / or the session. * * @return void */ protected function _handlePersistedFilters() { if (isset($this->request->query['resetFilter'])) { $this->_controller->request->session()->delete($this->_getPersistendStorageKey('FormSession')); $this->Cookie->delete($this->_getPersistendStorageKey('FormCookie')); return $this->_controller->redirect($this->request->here); } $persistedFilterData = []; if ($this->config['FormSession']['active']) { $persistedFilterData = Hash::merge($persistedFilterData, $this->_controller->request->session()->read($this->_getPersistendStorageKey('FormSession'))); } if ($this->config['FormCookie']['active']) { $persistedFilterData = Hash::merge($persistedFilterData, $this->Cookie->read($this->_getPersistendStorageKey('FormCookie'))); } if (!empty($persistedFilterData)) { // Redirect the first time, $persistedFilterData is present (Filterredirect param not set) if (empty($this->_controller->request->query['Filterredirect'])) { if (!empty($persistedFilterData['Pagination']['page'])) { $this->_controller->passedArgs['page'] = $persistedFilterData['Pagination']['page']; } if (!empty($persistedFilterData['Pagination']['sort'])) { $this->_controller->passedArgs['sort'] = $persistedFilterData['Pagination']['sort']; } if (!empty($persistedFilterData['Pagination']['direction'])) { $this->_controller->passedArgs['direction'] = $persistedFilterData['Pagination']['direction']; } unset($persistedFilterData['Pagination']); $redirectUrl = $this->getRedirectUrlFromPostData(['Filter' => $persistedFilterData]); $redirectUrl['Filterredirect'] = 1; // Redirect return $this->_controller->redirect($redirectUrl); } // Reset Session, if no Filter is set if (!$this->filterUrlParameterStatus()) { unset($persistedFilterData); $this->_controller->request->session()->delete($this->_getPersistendStorageKey('FormSession')); $this->Cookie->delete($this->_getPersistendStorageKey('FormCookie')); } $persistedFilterData['Pagination'] = []; if (!empty($this->_controller->request->query['page'])) { $persistedFilterData['Pagination']['page'] = $this->_controller->request->query['page']; } if (!empty($this->_controller->request->query['sort'])) { $persistedFilterData['Pagination']['sort'] = $this->_controller->request->query['sort']; } if (!empty($this->_controller->request->query['direction'])) { $persistedFilterData['Pagination']['direction'] = $this->_controller->request->query['direction']; } $this->_controller->request->session()->write($this->_getPersistendStorageKey('FormSession'), $persistedFilterData); $this->Cookie->write($this->_getPersistendStorageKey('FormCookie'), $persistedFilterData); } }