class ContextualThemeHooks

Hook implementations for contextual.

Hierarchy

Expanded class hierarchy of ContextualThemeHooks

File

core/modules/contextual/src/Hook/ContextualThemeHooks.php, line 11

Namespace

Drupal\contextual\Hook
View source
class ContextualThemeHooks {
  public function __construct(protected readonly AccountInterface $currentUser) {
  }
  
  /**
   * Implements hook_preprocess().
   *
   * @see \Drupal\contextual\Element\ContextualLinksPlaceholder
   * @see contextual_page_attachments()
   * @see \Drupal\contextual\ContextualController::render()
   */
  public function preprocess(&$variables, $hook, $info) : void {
    // 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 ($this->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']),
        ];
      }
    }
  }

}

Members

Title Sort descending Modifiers Object type Summary
ContextualThemeHooks::preprocess public function Implements hook_preprocess().
ContextualThemeHooks::__construct public function

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