From aa0781275cd0aa6ce6400194c6352aeeda2406ef Mon Sep 17 00:00:00 2001 From: Dries Buytaert <dries@buytaert.net> Date: Fri, 26 Aug 2011 10:09:24 +0100 Subject: [PATCH] - Patch #1078176 by franz, agentrickard: block module renders blocks that are set to display on no pages. --- modules/block/block.module | 6 ++++++ modules/block/block.test | 43 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/modules/block/block.module b/modules/block/block.module index 1ab1c436aaeb..40fc6462e9c2 100644 --- a/modules/block/block.module +++ b/modules/block/block.module @@ -761,6 +761,12 @@ function block_block_list_alter(&$blocks) { else { $enabled = TRUE; } + + // Limited visibility blocks must list at least one page. + if ($block->visibility == BLOCK_VISIBILITY_LISTED && empty($block->pages)) { + $enabled = FALSE; + } + if (!$enabled) { unset($blocks[$key]); continue; diff --git a/modules/block/block.test b/modules/block/block.test index 022bf383031d..03f3048b4eb6 100644 --- a/modules/block/block.test +++ b/modules/block/block.test @@ -192,6 +192,49 @@ class BlockTestCase extends DrupalWebTestCase { $this->assertNoText($title, t('Block was not displayed to anonymous users.')); } + /** + * Test block visibility when using "pages" restriction but leaving + * "pages" textarea empty + */ + function testBlockVisibilityListedEmpty() { + $block = array(); + + // Create a random title for the block + $title = $this->randomName(8); + + // Create the custom block + $custom_block = array(); + $custom_block['info'] = $this->randomName(8); + $custom_block['title'] = $title; + $custom_block['body[value]'] = $this->randomName(32); + $this->drupalPost('admin/structure/block/add', $custom_block, t('Save block')); + + $bid = db_query("SELECT bid FROM {block_custom} WHERE info = :info", array(':info' => $custom_block['info']))->fetchField(); + $block['module'] = 'block'; + $block['delta'] = $bid; + $block['title'] = $title; + + // Move block to the first sidebar. + $this->moveBlockToRegion($block, $this->regions[1]); + + // Set the block to be hidden on any user path, and to be shown only to + // authenticated users. + $edit = array(); + $edit['visibility'] = BLOCK_VISIBILITY_LISTED; + $this->drupalPost('admin/structure/block/manage/' . $block['module'] . '/' . $block['delta'] . '/configure', $edit, t('Save block')); + + $this->drupalGet(''); + $this->assertNoText($title, t('Block was not displayed according to block visibility rules.')); + + $this->drupalGet('user'); + $this->assertNoText($title, t('Block was not displayed according to block visibility rules regardless of path case.')); + + // Confirm that the block is not displayed to anonymous users. + $this->drupalLogout(); + $this->drupalGet(''); + $this->assertNoText($title, t('Block was not displayed to anonymous users.')); + } + /** * Test user customization of block visibility. */ -- GitLab