function ds_contextual_links_view_alter in Display Suite 8.4
Same name and namespace in other branches
- 8.2 ds.module \ds_contextual_links_view_alter()
- 8.3 ds.module \ds_contextual_links_view_alter()
- 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,
];
}
}
}
}