コード例 #1
0
 /**
  * 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));
 }
コード例 #2
0
 /**
  * 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);
     }
 }