123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450 |
- <?php
- /**
- * Implements hook_block_info().
- */
- function admin_block_info() {
- $blocks = array();
- $blocks['create'] = array(
- 'info' => t('Create content'),
- 'cache' => DRUPAL_NO_CACHE,
- 'admin' => TRUE,
- );
- $blocks['theme'] = array(
- 'info' => t('Theme switcher'),
- 'cache' => DRUPAL_CACHE_PER_ROLE,
- 'admin' => TRUE,
- );
- $blocks['account'] = array(
- 'info' => t('My Account'),
- 'cache' => DRUPAL_NO_CACHE,
- 'admin' => TRUE,
- );
- if (module_exists('menu')) {
- $blocks['menu'] = array(
- 'info' => t('Administration menu'),
- 'cache' => DRUPAL_CACHE_PER_ROLE,
- 'admin' => TRUE,
- );
- }
- if (module_exists('devel')) {
- $blocks['devel'] = array(
- 'info' => t('Devel'),
- 'cache' => DRUPAL_NO_CACHE,
- 'admin' => TRUE,
- );
- }
- return $blocks;
- }
- /**
- * Implements hook_block_view().
- */
- function admin_block_view($delta) {
- switch ($delta) {
- case 'create':
- $item = menu_get_item('node/add');
- $links = system_admin_menu_block($item);
- if (!empty($links)) {
- $menu = array();
- foreach ($links as $key => $link) {
- $menu[$key] = array(
- 'link' => $link + array('in_active_trail' => FALSE),
- 'below' => FALSE,
- );
- }
- return array(
- 'subject' => !empty($item['title']) ? $item['title'] : t('Create content'),
- 'content' => menu_tree_output($menu),
- );
- }
- break;
- case 'theme':
- if (user_access('select different theme')) {
- module_load_include('inc', 'admin', 'includes/admin.theme');
- return admin_block_theme();
- }
- return NULL;
- case 'account':
- return admin_account_block();
- case 'menu':
- $item = menu_get_item('admin');
- if ($item && $item['access']) {
- $tree = menu_tree_all_data('management');
- foreach ($tree as $key => $branch) {
- if ($branch['link']['link_path'] !== 'admin') {
- unset($tree[$key]);
- }
- }
- return array(
- 'subject' => !empty($item['title']) ? $item['title'] : t('Administer'),
- 'content' => menu_tree_output($tree),
- );
- }
- break;
- case 'devel':
- module_load_include('inc', 'admin', 'includes/admin.devel');
- return admin_block_devel();
- }
- }
- /**
- * Implements hook_element_info().
- */
- function admin_element_info() {
- return array(
- 'admin_panes' => array(
- '#value' => '',
- '#theme_wrappers' => array('admin_panes'),
- ),
- );
- }
- /**
- * Implements hook_menu().
- */
- function admin_menu() {
- $items = array();
- $items['admin/config/user-interface/admin'] =
- $items['admin/config/user-interface/admin/settings'] = array(
- 'title' => 'Administration tools',
- 'description' => 'Settings for site administration tools.',
- 'page callback' => 'drupal_get_form',
- 'page arguments' => array('admin_settings_form'),
- 'access callback' => 'user_access',
- 'access arguments' => array('administer site configuration'),
- 'type' => MENU_NORMAL_ITEM,
- 'file' => 'admin.admin.inc',
- 'module' => 'admin',
- );
- $items['admin/config/user-interface/admin/settings']['title'] = 'Settings';
- $items['admin/config/user-interface/admin/settings']['type'] = MENU_DEFAULT_LOCAL_TASK;
- $items['admin/config/user-interface/admin/rebuild'] = array(
- 'title' => 'Rebuild',
- 'description' => 'Wipe and rebuild the administrative menu.',
- 'page callback' => 'drupal_get_form',
- 'page arguments' => array('admin_settings_rebuild'),
- 'access callback' => 'user_access',
- 'access arguments' => array('administer site configuration'),
- 'type' => MENU_LOCAL_TASK,
- 'file' => 'admin.admin.inc',
- 'module' => 'admin',
- 'weight' => 10,
- );
- return $items;
- }
- /**
- * Implements hook_menu_alter().
- */
- function admin_menu_alter(&$items) {
- foreach ($items as $path => $item) {
- // Smarter access callback for poorly checked landing pages
- if (!empty($item['access arguments']) && !empty($item['page callback']) && $item['access arguments'] === array('access administration pages') && in_array($item['page callback'], array('system_admin_menu_block_page', 'system_settings_overview'))) {
- $items[$path]['access callback'] = 'admin_landing_page_access';
- $items[$path]['access arguments'] = array($path);
- }
- }
- }
- /**
- * Menu access callback for admin landing pages.
- *
- * For a given landing page, grant access if the current user has access
- * to any of its child menu items.
- */
- function admin_landing_page_access($path) {
- static $paths;
- if (!isset($paths[$path])) {
- $paths[$path] = FALSE;
- // Retrieve menu item but without menu_get_item()
- $item = db_select('menu_links')
- ->fields('menu_links')
- ->condition('module', 'system')
- ->condition('router_path', $path)
- ->execute()
- ->fetchAssoc();
- if ($item) {
- $query = db_select('menu_links', 'ml');
- $query->leftJoin('menu_router', 'm', 'm.path = ml.router_path');
- $query->fields('ml');
- $query->fields('m', array_diff(drupal_schema_fields_sql('menu_router'), array('weight')));
- $query->condition('ml.plid', $item['mlid']);
- $result = $query->execute();
- while ($item = $result->fetchAssoc()) {
- _menu_link_translate($item);
- if ($item['access']) {
- $paths[$path] = TRUE;
- break;
- }
- }
- }
- }
- return $paths[$path];
- }
- /**
- * Implements hook_permission().
- */
- function admin_permission() {
- return array(
- 'use admin toolbar' => array(
- 'title' => t('use admin toolbar'),
- 'description' => t('Use the admin toolbar'),
- ),
- 'select different theme' => array(
- 'title' => t('select different theme'),
- 'description' => t("Select different theme for the current user's session."),
- ),
- );
- }
- /**
- * Implements hook_theme().
- */
- function admin_theme($cache, $type, $theme, $path) {
- $path = drupal_get_path('module', 'admin');
- $items['admin_tab'] = array(
- 'variables' => array(
- 'tab' => array(),
- 'class' => '',
- ),
- 'path' => $path . '/theme',
- 'file' => 'theme.inc',
- );
- $items['admin_toolbar'] = array(
- 'variables' => array(
- 'blocks' => array(),
- 'position' => 'ne',
- 'layout' => 'horizontal',
- 'behavior' => 'df',
- ),
- 'template' => 'admin-toolbar',
- 'path' => $path . '/theme',
- 'file' => 'theme.inc',
- );
- $items['admin_drilldown_menu_tree_output'] = array(
- 'variables' => array('menu' => array()),
- 'path' => $path . '/theme',
- 'file' => 'theme.inc',
- );
- $items['admin_drilldown_menu_tree'] = array(
- 'variables' => array('menu' => array()),
- 'path' => $path . '/theme',
- 'file' => 'theme.inc',
- );
- $items['admin_drilldown_menu_item'] = array(
- 'variables' => array(
- 'link' => NULL,
- 'has_children' => NULL,
- 'menu' => '',
- 'in_active_trail' => FALSE,
- 'extra_class' => NULL,
- ),
- 'path' => $path . '/theme',
- 'file' => 'theme.inc',
- );
- $items['admin_drilldown_menu_item_link'] = array(
- 'variables' => array('item' => array()),
- 'path' => $path . '/theme',
- 'file' => 'theme.inc',
- );
- $items['admin_panes'] = array(
- 'render element' => 'element',
- 'template' => 'admin-panes',
- 'path' => $path . '/theme',
- 'file' => 'theme.inc',
- );
- $items['admin_settings_form'] = array(
- 'render element' => 'element',
- 'path' => $path,
- 'file' => 'admin.admin.inc',
- );
- return $items;
- }
- /**
- * Get variable settings or fallback to defaults.
- */
- function admin_get_settings($key = NULL) {
- static $settings;
- if (!isset($settings)) {
- // Try to gather what information we can from the cookie.
- // Note that this information should not be trusted in any
- // way for affecting *anything* but trivial changes to the site.
- $cookie = array();
- if (isset($_REQUEST['DrupalAdminToolbar'])) {
- parse_str($_REQUEST['DrupalAdminToolbar'], $cookie);
- }
- $settings = variable_get('admin_toolbar', array()) + array(
- 'layout' => 'vertical',
- 'position' => 'nw',
- 'behavior' => 'df',
- 'blocks' => admin_get_default_blocks(),
- 'expanded' => isset($cookie['expanded']) ? check_plain($cookie['expanded']) : 0,
- 'active_tab' => isset($cookie['activeTab']) ? check_plain($cookie['activeTab']) : 0,
- );
- // Ensure that if behavior is set to autohide the toolbar is collapsed.
- if ($settings['behavior'] === 'ah') {
- $settings['expanded'] = 0;
- }
- }
- if (isset($key)) {
- return isset($settings[$key]) ? $settings[$key] : FALSE;
- }
- return $settings;
- }
- /**
- * Get all blocks that have declared themselves visible in the admin toolbar by default.
- */
- function admin_get_default_blocks($reset = FALSE) {
- static $defaults;
- if (!isset($defaults) || $reset) {
- $cache = cache_get('admin_default_blocks');
- if ($cache && !$reset) {
- $defaults = $cache->data;
- }
- else {
- $defaults = array();
- foreach (module_implements('block_info') as $module) {
- $module_blocks = module_invoke($module, 'block_info');
- if ($module_blocks) {
- foreach ($module_blocks as $delta => $info) {
- if (isset($info['admin'])) {
- $defaults["{$module}-{$delta}"] = isset($info['cache']) ? $info['cache'] : DRUPAL_NO_CACHE;
- }
- }
- }
- }
- cache_set('admin_default_blocks', $defaults);
- }
- }
- return $defaults;
- }
- /**
- * Get blocks enabled for the admin toolbar.
- */
- function admin_get_admin_blocks() {
- $blocks = array();
- if (user_access('use admin toolbar') && $enabled_blocks = admin_get_settings('blocks')) {
- module_load_include('module', 'block', 'block');
- foreach ($enabled_blocks as $bid => $cache) {
- $block = NULL;
- $split = explode('-', $bid, 2);
- if (count($split) === 2) {
- list($module, $delta) = $split;
- $block = new stdClass();
- $block->module = $module;
- $block->delta = $delta;
- $block->bid = $bid;
- $block->title = NULL;
- $block->cache = is_numeric($cache) ? $cache : DRUPAL_NO_CACHE;
- $block->region = 'admin_toolbar'; // Fake the block region.
- $blocks[$bid] = $block;
- }
- }
- $blocks = _block_render_blocks($blocks);
- }
- return $blocks;
- }
- /**
- * Preprocessor that runs *before* template_preprocess_page().
- */
- function admin_page_build(&$page) {
- if (user_access('use admin toolbar') && $trail = menu_get_active_trail()) {
- do {
- $last = array_pop($trail);
- } while (count($trail) && !($last['type'] & MENU_VISIBLE_IN_TREE));
- if ($last) {
- drupal_add_js(array('activePath' => url($last['href'])), array('type' => 'setting', 'scope' => JS_DEFAULT));
- }
- }
- if (!admin_suppress(FALSE) && $blocks = admin_get_admin_blocks()) {
- $path = drupal_get_path('module', 'admin');
- drupal_add_js("misc/jquery.cookie.js");
- drupal_add_js("{$path}/includes/jquery.drilldown.js");
- drupal_add_js("{$path}/includes/admin.toolbar.js");
- drupal_add_js("{$path}/includes/admin.menu.js");
- drupal_add_css("{$path}/includes/admin.toolbar.base.css");
- drupal_add_css("{$path}/includes/admin.toolbar.css");
- drupal_add_css("{$path}/includes/admin.menu.css");
- $position = admin_get_settings('position');
- $layout = admin_get_settings('layout');
- $behavior = admin_get_settings('behavior');
- $class = admin_get_settings('expanded') ? 'admin-expanded' : '';
- $page['page_bottom']['admin_toolbar'] = array(
- '#type' => 'markup',
- '#markup' => theme('admin_toolbar', array('blocks' => $blocks, 'position' => $position, 'layout' => $layout, 'behavior' => $behavior)),
- );
- }
- }
- /**
- * Implements hook_preprocess_html().
- */
- function admin_preprocess_html(&$vars) {
- if (!admin_suppress(FALSE) && $blocks = admin_get_admin_blocks()) {
- $position = admin_get_settings('position');
- $layout = admin_get_settings('layout');
- $behavior = admin_get_settings('behavior');
- $class = admin_get_settings('expanded') ? 'admin-expanded' : '';
- $vars['classes_array'][] = " admin-{$position} admin-{$layout} admin-{$behavior} {$class} ";
- }
- }
- /**
- * Implements hook_suppress().
- *
- * Suppress display of administration toolbar.
- *
- * This function should be called from within another module's page callback
- * preferably using module_invoke_all('suppress') when the menu should not be
- * displayed. This is useful for modules that implement popup pages or other
- * special pages where the menu would be distracting or break the layout.
- *
- * @param $set
- * Defaults to TRUE. If called before hook_footer(), the menu will not be
- * displayed. If FALSE is passed, the suppression state is returned.
- */
- function admin_suppress($set = TRUE) {
- static $suppress = FALSE;
- if (!empty($set) && $suppress === FALSE) {
- $suppress = TRUE;
- }
- return $suppress;
- }
- /**
- * My Account block.
- */
- function admin_account_block() {
- $block = array(
- 'subject' => t('My Account'),
- 'content' => '',
- );
- global $user;
- if ($user->uid > 0) {
- $menu = array();
- $menu[] = array(
- 'data' => l(t('View my account'), 'user/' . $user->uid),
- 'class' => array('leaf'),
- );
- $menu[] = array(
- 'data' => l(t('Edit my account'), 'user/' . $user->uid . '/edit'),
- 'class' => array('leaf'),
- );
- $menu[] = array(
- 'data' => l(t('Logout'), 'user/logout'),
- 'class' => array('leaf'),
- );
- $block['content'] = theme('item_list', array('items' => $menu, 'attributes' => array('class' => array('menu'))));
- }
- return $block;
- }
|