/** * 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 Cookie or Form Session Data $this->_handlePersistedFilters(); // Redirect POST to GET, include FormSession and FormCookie Data 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->_getPersistendStorageKey('FormSession'), $this->_controller->request->data['Filter']); } if ($this->config['FormCookie']['active']) { $this->Cookie->write($this->_getPersistendStorageKey('FormCookie'), $this->_controller->request->data['Filter']); } return $this->_controller->redirect($redirectUrl); } // Do the ListFilter Job $filterConditions = []; if (!empty($this->_controller->request->query)) { $filterConditions = $this->_prepareFilterConditions($controllerListFilters); $conditions = isset($this->_controller->paginate['conditions']) ? $this->_controller->paginate['conditions'] : []; // Handle namespaced ListFilter if (isset($this->_controller->paginate[$this->_controller->name])) { $conditions = [$this->_controller->name => ['conditions' => Hash::merge($conditions, $filterConditions)]]; } else { $conditions = ['conditions' => Hash::merge($conditions, $filterConditions)]; } $this->_controller->paginate = Hash::merge($this->_controller->paginate, $conditions); } 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)); }
/** * 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)); }