diff --git a/modules/block/block.admin.inc b/modules/block/block.admin.inc index 8523973834da94c91177fcfad47ef729abdf1bca..0f80a4b0027be79b8b3d8e25111d2299b7445981 100644 --- a/modules/block/block.admin.inc +++ b/modules/block/block.admin.inc @@ -34,7 +34,7 @@ function block_admin_display_form(&$form_state, $blocks, $theme = NULL) { $custom_theme = isset($theme) ? $theme : variable_get('theme_default', 'garland'); drupal_theme_initialize(); - $block_regions = system_region_list($theme_key) + array(BLOCK_REGION_NONE => '<' . t('none') . '>'); + $block_regions = system_region_list($theme_key, REGIONS_VISIBLE) + array(BLOCK_REGION_NONE => '<' . t('none') . '>'); // Weights range from -delta to +delta, so delta should be at least half // of the amount of blocks present. This makes sure all blocks in the same @@ -469,7 +469,7 @@ function block_box_delete_submit($form, &$form_state) { function template_preprocess_block_admin_display_form(&$variables) { global $theme_key; - $block_regions = system_region_list($theme_key); + $block_regions = system_region_list($theme_key, REGIONS_VISIBLE); $variables['block_regions'] = $block_regions + array(BLOCK_REGION_NONE => t('Disabled')); foreach ($block_regions as $key => $value) { diff --git a/modules/block/block.module b/modules/block/block.module index 3ceeb9625edc29f02b543a7ab305d9c4718aed0a..f561685b97d5dd8e6ee79f25460d4ea7c58f5cf8 100644 --- a/modules/block/block.module +++ b/modules/block/block.module @@ -236,10 +236,11 @@ function block_page_alter($page) { drupal_theme_initialize(); // Populate all block regions - $regions = system_region_list($theme); + $all_regions = system_region_list($theme); + $visible_regions = system_region_list($theme, REGIONS_VISIBLE); // Load all region content assigned via blocks. - foreach (array_keys($regions) as $region) { + foreach (array_keys($all_regions) as $region) { // Prevent left and right regions from rendering blocks when 'show_blocks' == FALSE. if (!empty($page['#show_blocks']) || ($region != 'left' && $region != 'right')) { // Assign blocks to region. @@ -249,8 +250,8 @@ function block_page_alter($page) { // Append region description if we are rendering the block admin page. $item = menu_get_item(); - if ($item['path'] == 'admin/build/block') { - $description = '<div class="block-region">' . $regions[$region] . '</div>'; + if ($item['path'] == 'admin/build/block' && isset($visible_regions[$region])) { + $description = '<div class="block-region">' . $all_regions[$region] . '</div>'; $page[$region]['block_description'] = array( '#markup' => $description, '#weight' => 15, diff --git a/modules/system/system.module b/modules/system/system.module index ccfce53703c10bcf6d0703aa7c2a6c418c0a802a..35a302235e438e592410940d0068ae80727e4958 100644 --- a/modules/system/system.module +++ b/modules/system/system.module @@ -71,6 +71,17 @@ */ define('DRUPAL_REQUIRED', 2); +/** + * Return only visible regions. @see system_region_list(). + */ +define('REGIONS_VISIBLE', 'visible'); + +/** + * Return all visible regions. @see system_region_list(). + */ +define('REGIONS_ALL', 'all'); + + /** * Implement hook_help(). */ @@ -1974,18 +1985,34 @@ function system_find_base_theme($themes, $key, $used_keys = array()) { * * @param $theme_key * The name of a theme. + * @param $show + * Possible values: REGIONS_ALL or REGIONS_VISIBLE. Visible excludes hidden + * regions. * @return * An array of regions in the form $region['name'] = 'description'. */ -function system_region_list($theme_key) { +function system_region_list($theme_key, $show = REGIONS_ALL) { $list = &drupal_static(__FUNCTION__, array()); - if (!array_key_exists($theme_key, $list)) { + if (empty($list[$theme_key][$show])) { $info = unserialize(db_query("SELECT info FROM {system} WHERE type = :type AND name = :name", array(':type' => 'theme', ':name' => $theme_key))->fetchField()); - $list[$theme_key] = array_map('t', $info['regions']); + // If requested, suppress hidden regions. @see block_admin_display_form(). + foreach ($info['regions'] as $name => $label) { + if ($show == REGIONS_ALL || !isset($info['regions_hidden']) || !in_array($name, $info['regions_hidden'])) { + $list[$theme_key][$show][$name] = $label; + } + } } + return $list[$theme_key][$show]; +} - return $list[$theme_key]; +/** + * Implement hook_system_info_alter(). + */ +function system_system_info_alter(&$info, $file) { + // Remove page-top from the blocks UI since it is reserved for modules to + // populate from outside the blocks system. + $info['regions_hidden'][] = 'page_top'; } /**