function workspaces_toolbar

Same name and namespace in other branches
  1. 9 core/modules/workspaces/workspaces.module \workspaces_toolbar()
  2. 8.9.x core/modules/workspaces/workspaces.module \workspaces_toolbar()

Implements hook_toolbar().

File

core/modules/workspaces/workspaces.module, line 262

Code

function workspaces_toolbar() {
  $items['workspace'] = [
    '#cache' => [
      'contexts' => [
        'user.permissions',
      ],
    ],
  ];
  $current_user = \Drupal::currentUser();
  if (!$current_user->hasPermission('administer workspaces') && !$current_user->hasPermission('view own workspace') && !$current_user->hasPermission('view any workspace')) {
    return $items;
  }
  /** @var \Drupal\workspaces\WorkspaceInterface $active_workspace */
  $active_workspace = \Drupal::service('workspaces.manager')->getActiveWorkspace();
  $items['workspace'] += [
    '#type' => 'toolbar_item',
    'tab' => [
      '#lazy_builder' => [
        'workspaces.lazy_builders:renderToolbarTab',
        [],
      ],
      '#create_placeholder' => TRUE,
      '#lazy_builder_preview' => [
        '#type' => 'link',
        '#title' => $active_workspace ? $active_workspace->label() : t('Live'),
        '#url' => Url::fromRoute('entity.workspace.collection'),
        '#attributes' => [
          'class' => [
            'toolbar-tray-lazy-placeholder-link',
          ],
        ],
      ],
    ],
    '#wrapper_attributes' => [
      'class' => [
        'workspaces-toolbar-tab',
      ],
    ],
    '#weight' => 500,
  ];
  // Add a special class to the wrapper if we don't have an active workspace so
  // we can highlight it with a different color.
  if (!$active_workspace) {
    $items['workspace']['#wrapper_attributes']['class'][] = 'workspaces-toolbar-tab--is-default';
  }
  // \Drupal\toolbar\Element\ToolbarItem::preRenderToolbarItem adds an
  // #attributes property to each toolbar item's tab child automatically.
  // Lazy builders don't support an #attributes property so we need to
  // add another render callback to remove the #attributes property. We start by
  // adding the defaults, and then we append our own pre render callback.
  $items['workspace'] += \Drupal::service('plugin.manager.element_info')->getInfo('toolbar_item');
  $items['workspace']['#pre_render'][] = 'workspaces.lazy_builders:removeTabAttributes';
  return $items;
}

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