function FilterPluginBase::storeGroupInput

Same name and namespace in other branches
  1. 9 core/modules/views/src/Plugin/views/filter/FilterPluginBase.php \Drupal\views\Plugin\views\filter\FilterPluginBase::storeGroupInput()
  2. 8.9.x core/modules/views/src/Plugin/views/filter/FilterPluginBase.php \Drupal\views\Plugin\views\filter\FilterPluginBase::storeGroupInput()
  3. 10 core/modules/views/src/Plugin/views/filter/FilterPluginBase.php \Drupal\views\Plugin\views\filter\FilterPluginBase::storeGroupInput()

If set to remember exposed input in the session, store it there.

This function is similar to storeExposedInput but modified to work properly when the filter is a group.

File

core/modules/views/src/Plugin/views/filter/FilterPluginBase.php, line 1454

Class

FilterPluginBase
Base class for Views filters handler plugins.

Namespace

Drupal\views\Plugin\views\filter

Code

public function storeGroupInput($input, $status) {
    if (!$this->isAGroup() || empty($this->options['group_info']['identifier'])) {
        return TRUE;
    }
    if (empty($this->options['group_info']['remember'])) {
        return;
    }
    // Figure out which display id is responsible for the filters, so we
    // know where to look for session stored values.
    $display_id = $this->view->display_handler
        ->isDefaulted('filters') ? 'default' : $this->view->current_display;
    // False means that we got a setting that means to recurse ourselves,
    // so we should erase whatever happened to be there.
    $session = $this->view
        ->getRequest()
        ->getSession();
    $views_session = $session->get('views', []);
    if ($status === FALSE && isset($views_session[$this->view->storage
        ->id()][$display_id])) {
        unset($views_session[$this->view->storage
            ->id()][$display_id][$this->options['group_info']['identifier']]);
    }
    if ($status !== FALSE) {
        if (!isset($views_session[$this->view->storage
            ->id()][$display_id])) {
            $views_session[$this->view->storage
                ->id()][$display_id] = [];
        }
        $views_session[$this->view->storage
            ->id()][$display_id][$this->options['group_info']['identifier']] = $input[$this->options['group_info']['identifier']];
    }
    if (!empty($views_session)) {
        $session->set('views', $views_session);
    }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.