1 admin_bar.module admin_bar_preprocess_page(&$variables)

Implements hook_preprocess_page().

File

core/modules/admin_bar/admin_bar.module, line 188
Render an administrative bar as a dropdown menu at the top of the window.

Code

function admin_bar_preprocess_page(&$variables) {
  if (!user_access('access administration bar') || admin_bar_suppress(FALSE)) {
    return;
  }

  // Performance: Skip this entirely for AJAX requests.
  if (!backdrop_is_html()) {
    return;
  }

  // For the status report page, generate the admin bar from scratch to refresh
  // the site status indicator.
  if (strpos($_GET['q'], 'admin/reports/status') === 0) {
    cache('admin_bar')->flush();
  }

  global $user, $language;

  // Add current path to support menu item highlighting.
  $args = explode('/', $_GET['q']);
  if ($args[0] == 'admin' && !empty($args[1])) {
    $settings['activeTrail'] = url($args[0] . '/' . $args[1]);
  }
  elseif (backdrop_is_front_page()) {
    $settings['activeTrail'] = url('<front>');
  }

  // Destination query strings are applied via JS.
  $settings['destination'] = backdrop_http_build_query(backdrop_get_destination());

  // Determine whether we need to show all components and disable all caches.
  $complete = FALSE;

  // If we have a cached menu for the current user, only output the hash for the
  // client-side HTTP cache callback URL.
  $cid = 'admin_bar:' . $user->uid . ':' . session_id() . ':' . $language->langcode;
  if (!$complete && ($hash = admin_bar_cache_get($cid))) {
    $settings['hash'] = $hash;

    // The base path to use for cache requests depends on whether clean URLs
    // are enabled, whether Backdrop runs in a sub-directory, and on the locale
    // system configuration. url() already provides us the proper path and also
    // invokes potentially existing custom_url_rewrite() functions, which may
    // add further required components to the URL to provide context. Due to
    // those components, and since url('') returns only base_path() when clean
    // URLs are disabled, we need to use a replacement token as path.  Yuck.
    $settings['basePath'] = url('admin_bar');
  }
  // Otherwise, add the full menu to the page.
  else {
    module_load_include('inc', 'admin_bar');
    $variables['page_bottom'] .= admin_bar_output($complete);
  }

  $replacements = module_invoke_all('admin_bar_replacements', $complete);
  if (!empty($replacements)) {
    $settings['replacements'] = $replacements;
  }

  // Send any setting required for the placement of the admin bar to JS.
  $config = config('admin_bar.settings');
  if ($setting = $config->get('margin_top')) {
    $settings['margin_top'] = $setting;
  }
  if ($setting = $config->get('position_fixed')) {
    $settings['position_fixed'] = $setting;
  }

  // Send whether this is an admin page to JS for back to site functionality.
  $settings['current_path_is_admin'] = FALSE;
  $current_path = current_path();
  if (path_is_admin($current_path)) {
    $settings['current_path_is_admin'] = TRUE;
  }

  $components = $config->get('components');
  if (in_array('admin_bar.back_to_site_link', $components)) {
    $settings['back_to_site_link'] = TRUE;
  }
  backdrop_add_js(array('admin_bar' => $settings), 'setting');
  backdrop_add_library('admin_bar', 'admin_bar', TRUE);
}