You are here

protected function ViewExecutable::_buildArguments in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/views/src/ViewExecutable.php \Drupal\views\ViewExecutable::_buildArguments()

Builds all the arguments.

Return value

bool TRUE if the arguments were built successfully, FALSE otherwise.

2 calls to ViewExecutable::_buildArguments()
ViewExecutable::build in core/modules/views/src/ViewExecutable.php
Builds the query for the view.
ViewExecutable::buildTitle in core/modules/views/src/ViewExecutable.php
Forces the view to build a title.

File

core/modules/views/src/ViewExecutable.php, line 1059

Class

ViewExecutable
Represents a view as a whole.

Namespace

Drupal\views

Code

protected function _buildArguments() {

  // Initially, we want to build sorts and fields. This can change, though,
  // if we get a summary view.
  if (empty($this->argument)) {
    return TRUE;
  }

  // build arguments.
  $position = -1;
  $substitutions = [];
  $status = TRUE;

  // Get the title.
  $title = $this->display_handler
    ->getOption('title');

  // Iterate through each argument and process.
  foreach ($this->argument as $id => $arg) {
    $position++;
    $argument = $this->argument[$id];
    if ($argument
      ->broken()) {
      continue;
    }
    $argument
      ->setRelationship();
    $arg = isset($this->args[$position]) ? $this->args[$position] : NULL;
    $argument->position = $position;
    if (isset($arg) || $argument
      ->hasDefaultArgument()) {
      if (!isset($arg)) {
        $arg = $argument
          ->getDefaultArgument();

        // make sure default args get put back.
        if (isset($arg)) {
          $this->args[$position] = $arg;
        }

        // remember that this argument was computed, not passed on the URL.
        $argument->is_default = TRUE;
      }

      // Set the argument, which ensures that the argument is valid and
      // possibly transforms the value.
      if (!$argument
        ->setArgument($arg)) {
        $status = $argument
          ->validateFail($arg);
        break;
      }
      if ($argument
        ->isException()) {
        $arg_title = $argument
          ->exceptionTitle();
      }
      else {
        $arg_title = $argument
          ->getTitle();
        $argument
          ->query($this->display_handler
          ->useGroupBy());
      }

      // Add this argument's substitution.
      $substitutions["{{ arguments.{$id} }}"] = $arg_title;

      // Since argument validator plugins can potentially transform the value,
      // use whatever value the argument handler now has, not the raw value.
      $substitutions["{{ raw_arguments.{$id} }}"] = strip_tags(Html::decodeEntities($argument
        ->getValue()));

      // Test to see if we should use this argument's title
      if (!empty($argument->options['title_enable']) && !empty($argument->options['title'])) {
        $title = $argument->options['title'];
      }
    }
    else {

      // determine default condition and handle.
      $status = $argument
        ->defaultAction();
      break;
    }

    // Be safe with references and loops:
    unset($argument);
  }

  // set the title in the build info.
  if (!empty($title)) {
    $this->build_info['title'] = $title;
  }

  // Store the arguments for later use.
  $this->build_info['substitutions'] = $substitutions;
  return $status;
}