You are here

public function DsController::contextualTab in Display Suite 8.4

Same name and namespace in other branches
  1. 8.2 src/Controller/DsController.php \Drupal\ds\Controller\DsController::contextualTab()
  2. 8.3 src/Controller/DsController.php \Drupal\ds\Controller\DsController::contextualTab()

Adds a contextual tab to entities.

Parameters

\Drupal\Core\Routing\RouteMatchInterface $route_match: The route information.

Return value

\Symfony\Component\HttpFoundation\RedirectResponse A redirect response pointing to the corresponding display.

File

src/Controller/DsController.php, line 154

Class

DsController
Returns responses for Display Suite UI routes.

Namespace

Drupal\ds\Controller

Code

public function contextualTab(RouteMatchInterface $route_match) {
  $parameter_name = $route_match
    ->getRouteObject()
    ->getOption('_ds_entity_type_id');
  $entity = $route_match
    ->getParameter($parameter_name);
  $entity_type_id = $entity
    ->getEntityTypeId();
  $destination = $entity
    ->toUrl();
  if (!empty($entity->ds_switch->value)) {
    $view_mode = $entity->ds_switch->value;
  }
  else {
    $view_mode = 'full';
  }

  // Get the manage display URI.
  $route = FieldUI::getOverviewRouteInfo($entity_type_id, $entity
    ->bundle());

  /* @var $entity_display \Drupal\Core\Entity\Display\EntityDisplayInterface */
  $entity_display = EntityViewDisplay::load($entity_type_id . '.' . $entity
    ->bundle() . '.' . $view_mode);
  $route_parameters = $route
    ->getRouteParameters();
  if ($entity_display && $entity_display
    ->status() && $entity_display
    ->getThirdPartySetting('ds', 'layout')) {
    $route_parameters['view_mode_name'] = $view_mode;
    $admin_route_name = "entity.entity_view_display.{$entity_type_id}.view_mode";
  }
  else {
    $admin_route_name = "entity.entity_view_display.{$entity_type_id}.default";
  }
  $route
    ->setOption('query', [
    'destination' => $destination
      ->toString(),
  ]);
  $url = new Url($admin_route_name, $route_parameters, $route
    ->getOptions());
  return new RedirectResponse($url
    ->setAbsolute(TRUE)
    ->toString());
}