You are here

function ds_contextual_links_view_alter in Display Suite 8.4

Same name and namespace in other branches
  1. 8.2 ds.module \ds_contextual_links_view_alter()
  2. 8.3 ds.module \ds_contextual_links_view_alter()
  3. 7.2 ds.module \ds_contextual_links_view_alter()

Implements hook_contextual_links_view_alter().

File

./ds.module, line 647
Display Suite core functions.

Code

function ds_contextual_links_view_alter(&$element, $items) {
  $def = \Drupal::service('entity_type.manager')
    ->getDefinitions();
  $entity_type = array_keys($element['#contextual_links'])[0];
  if (isset($def[$entity_type]) && $def[$entity_type]
    ->get('field_ui_base_route')) {
    if (!empty($entity_type) && \Drupal::moduleHandler()
      ->moduleExists('field_ui') && \Drupal::currentUser()
      ->hasPermission('administer node display')) {

      // This might not exist (especially in panels environments).
      if (!isset($element['#contextual_links'][$entity_type]['metadata']['ds_bundle'])) {
        return;
      }
      $bundle = $element['#contextual_links'][$entity_type]['metadata']['ds_bundle'];
      $view_mode = $element['#contextual_links'][$entity_type]['metadata']['ds_view_mode'];
      $route_name = "entity.entity_view_display.{$entity_type}.view_mode";
      $type = $def[$entity_type]
        ->getBundleEntityType();
      $route_params = [
        $type => $bundle,
        'view_mode_name' => $view_mode,
      ];
      $url = new Url($route_name, $route_params);
      $destination = \Drupal::destination()
        ->getAsArray();
      $url
        ->setOption('query', $destination);

      // When there is no bundle defined, return.
      if (!empty($bundle)) {
        $element['#links']['manage-display'] = [
          'title' => t('Manage display'),
          'url' => $url,
        ];
      }
    }
  }
}