function contextual_preprocess

Same name in other branches
  1. 7.x modules/contextual/contextual.module \contextual_preprocess()
  2. 9 core/modules/contextual/contextual.module \contextual_preprocess()
  3. 8.9.x core/modules/contextual/contextual.module \contextual_preprocess()
  4. 10 core/modules/contextual/contextual.module \contextual_preprocess()

Implements hook_preprocess().

See also

\Drupal\contextual\Element\ContextualLinksPlaceholder

contextual_page_attachments()

\Drupal\contextual\ContextualController::render()

File

core/modules/contextual/contextual.module, line 110

Code

function contextual_preprocess(&$variables, $hook, $info) {
    // Determine the primary theme function argument.
    if (!empty($info['variables'])) {
        $keys = array_keys($info['variables']);
        $key = $keys[0];
    }
    elseif (!empty($info['render element'])) {
        $key = $info['render element'];
    }
    if (!empty($key) && isset($variables[$key])) {
        $element = $variables[$key];
    }
    if (isset($element) && is_array($element) && !empty($element['#contextual_links'])) {
        $variables['#cache']['contexts'][] = 'user.permissions';
        if (\Drupal::currentUser()->hasPermission('access contextual links')) {
            // Mark this element as potentially having contextual links attached to it.
            $variables['attributes']['class'][] = 'contextual-region';
            // Renders a contextual links placeholder unconditionally, thus not breaking
            // the render cache. Although the empty placeholder is rendered for all
            // users, contextual_page_attachments() only adds the asset library for
            // users with the 'access contextual links' permission, thus preventing
            // unnecessary HTTP requests for users without that permission.
            $variables['title_suffix']['contextual_links'] = [
                '#type' => 'contextual_links_placeholder',
                '#id' => _contextual_links_to_id($element['#contextual_links']),
            ];
        }
    }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.