function FilterPluginBase::storeExposedInput

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

Overrides HandlerBase::storeExposedInput

File

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

Class

FilterPluginBase
Base class for Views filters handler plugins.

Namespace

Drupal\views\Plugin\views\filter

Code

public function storeExposedInput($input, $status) {
    if (empty($this->options['exposed']) || empty($this->options['expose']['identifier'])) {
        return TRUE;
    }
    if (empty($this->options['expose']['remember'])) {
        return;
    }
    // Check if we store exposed value for current user.
    $user = \Drupal::currentUser();
    $allowed_rids = empty($this->options['expose']['remember_roles']) ? [] : array_filter($this->options['expose']['remember_roles']);
    $intersect_rids = array_intersect(array_keys($allowed_rids), $user->getRoles());
    if (empty($intersect_rids)) {
        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;
    // shortcut test.
    $operator = !empty($this->options['expose']['use_operator']) && !empty($this->options['expose']['operator_id']);
    // False means that we got a setting that means to recurse ourselves,
    // so we should erase whatever happened to be there.
    if (!$status && isset($_SESSION['views'][$this->view->storage
        ->id()][$display_id])) {
        $session =& $_SESSION['views'][$this->view->storage
            ->id()][$display_id];
        if ($operator && isset($session[$this->options['expose']['operator_id']])) {
            unset($session[$this->options['expose']['operator_id']]);
        }
        if (isset($session[$this->options['expose']['identifier']])) {
            unset($session[$this->options['expose']['identifier']]);
        }
    }
    if ($status) {
        if (!isset($_SESSION['views'][$this->view->storage
            ->id()][$display_id])) {
            $_SESSION['views'][$this->view->storage
                ->id()][$display_id] = [];
        }
        $session =& $_SESSION['views'][$this->view->storage
            ->id()][$display_id];
        if ($operator && isset($input[$this->options['expose']['operator_id']])) {
            $session[$this->options['expose']['operator_id']] = $input[$this->options['expose']['operator_id']];
        }
        $session[$this->options['expose']['identifier']] = $input[$this->options['expose']['identifier']];
    }
}

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