You are here

public function ViewsLocalTask::getDerivativeDefinitions in Drupal 10

Same name and namespace in other branches
  1. 8 core/modules/views/src/Plugin/Derivative/ViewsLocalTask.php \Drupal\views\Plugin\Derivative\ViewsLocalTask::getDerivativeDefinitions()
  2. 9 core/modules/views/src/Plugin/Derivative/ViewsLocalTask.php \Drupal\views\Plugin\Derivative\ViewsLocalTask::getDerivativeDefinitions()

File

core/modules/views/src/Plugin/Derivative/ViewsLocalTask.php, line 69

Class

ViewsLocalTask
Provides local task definitions for all views configured as local tasks.

Namespace

Drupal\views\Plugin\Derivative

Code

public function getDerivativeDefinitions($base_plugin_definition) {
  $this->derivatives = [];
  $view_route_names = $this->state
    ->get('views.view_route_names');
  foreach ($this
    ->getApplicableMenuViews() as $pair) {

    /** @var \Drupal\views\ViewExecutable $executable */
    [
      $view_id,
      $display_id,
    ] = $pair;
    $executable = $this->viewStorage
      ->load($view_id)
      ->getExecutable();
    $executable
      ->setDisplay($display_id);
    $menu = $executable->display_handler
      ->getOption('menu');
    if (in_array($menu['type'], [
      'tab',
      'default tab',
    ])) {
      $plugin_id = 'view.' . $executable->storage
        ->id() . '.' . $display_id;
      $route_name = $view_route_names[$executable->storage
        ->id() . '.' . $display_id];

      // Don't add a local task for views which override existing routes.
      // @todo Alternative it could just change the existing entry.
      if ($route_name != $plugin_id) {
        continue;
      }
      $this->derivatives[$plugin_id] = [
        'route_name' => $route_name,
        'weight' => $menu['weight'],
        'title' => $menu['title'],
      ] + $base_plugin_definition;

      // Default local tasks have themselves as root tab.
      if ($menu['type'] == 'default tab') {
        $this->derivatives[$plugin_id]['base_route'] = $route_name;
      }
    }
  }
  return $this->derivatives;
}