diff --git a/core/modules/block/block.module b/core/modules/block/block.module index 069e8792bc450b07a60bc846715390b4f0aa64a5..488904ca182fc7431d2759f7b9be87aa0c649026 100644 --- a/core/modules/block/block.module +++ b/core/modules/block/block.module @@ -468,10 +468,10 @@ function _block_rehash($theme = NULL) { if (!isset($block['weight'])) { $block['weight'] = 0; } - if (!empty($block['region']) && $block['region'] != BLOCK_REGION_NONE && !isset($regions[$block['region']])) { + if (!empty($block['region']) && $block['region'] != BLOCK_REGION_NONE && !isset($regions[$block['region']]) && $block['status'] == 1) { drupal_set_message(t('The block %info was assigned to the invalid region %region and has been disabled.', array('%info' => $block['info'], '%region' => $block['region'])), 'warning'); // Disabled modules are moved into the BLOCK_REGION_NONE later so no - // need to move the bock to another region. + // need to move the block to another region. $block['status'] = 0; } // Set region to none if not enabled and make sure status is set. diff --git a/core/modules/block/block.test b/core/modules/block/block.test index f4a95496bbcf6a0f8927e67ce0f6b90d1731b2ca..a5bde420ebcbd7989d3b955d863aa72bbc96b7e3 100644 --- a/core/modules/block/block.test +++ b/core/modules/block/block.test @@ -1030,3 +1030,69 @@ class BlockLanguageTestCase extends DrupalWebTestCase { $this->assertTrue($count == 0, t('The block language visibility do not have an entry in the database.')); } } + +/** + * Tests that a block assigned to an invalid region triggers the warning. + */ +class BlockInvalidRegionTestCase extends DrupalWebTestCase { + public static function getInfo() { + return array( + 'name' => 'Blocks in invalid regions', + 'description' => 'Checks that an active block assigned to a non-existing region triggers the warning message and is disabled.', + 'group' => 'Block', + ); + } + + function setUp() { + parent::setUp(array('block', 'block_test')); + // Create an admin user. + $admin_user = $this->drupalCreateUser(array('administer site configuration', 'access administration pages')); + $this->drupalLogin($admin_user); + } + + /** + * Tests that blocks assigned to invalid regions work correctly. + */ + function testBlockInInvalidRegion() { + // Enable a test block in the default theme and place it in an invalid region. + db_merge('block') + ->key(array( + 'module' => 'block_test', + 'delta' => 'test_html_id', + 'theme' => variable_get('theme_default', 'stark'), + )) + ->fields(array( + 'status' => 1, + 'region' => 'invalid_region', + 'cache' => DRUPAL_NO_CACHE, + )) + ->execute(); + + $warning_message = t('The block %info was assigned to the invalid region %region and has been disabled.', array('%info' => t('Test block html id'), '%region' => 'invalid_region')); + + // Clearing the cache should disable the test block placed in the invalid region. + $this->drupalPost('admin/config/development/performance', array(), 'Clear all caches'); + $this->assertRaw($warning_message, 'Enabled block was in the invalid region and has been disabled.'); + + // Clear the cache to check if the warning message is not triggered. + $this->drupalPost('admin/config/development/performance', array(), 'Clear all caches'); + $this->assertNoRaw($warning_message, 'Disabled block in the invalid region will not trigger the warning.'); + + // Place disabled test block in the invalid region of the default theme. + db_merge('block') + ->key(array( + 'module' => 'block_test', + 'delta' => 'test_html_id', + 'theme' => variable_get('theme_default', 'stark'), + )) + ->fields(array( + 'region' => 'invalid_region', + 'cache' => DRUPAL_NO_CACHE, + )) + ->execute(); + + // Clear the cache to check if the warning message is not triggered. + $this->drupalPost('admin/config/development/performance', array(), 'Clear all caches'); + $this->assertNoRaw($warning_message, 'Disabled block in the invalid region will not trigger the warning.'); + } +}