summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modules/block/block.admin.inc4
-rw-r--r--modules/block/block.module14
-rw-r--r--modules/block/block.test7
3 files changed, 25 insertions, 0 deletions
diff --git a/modules/block/block.admin.inc b/modules/block/block.admin.inc
index 75c215de9..c56cc3fa3 100644
--- a/modules/block/block.admin.inc
+++ b/modules/block/block.admin.inc
@@ -516,6 +516,10 @@ function block_custom_block_delete_submit($form, &$form_state) {
->condition('module', 'block')
->condition('delta', $form_state['values']['bid'])
->execute();
+ db_delete('block_role')
+ ->condition('module', 'block')
+ ->condition('delta', $form_state['values']['bid'])
+ ->execute();
drupal_set_message(t('The block %name has been removed.', array('%name' => $form_state['values']['info'])));
cache_clear_all();
$form_state['redirect'] = 'admin/structure/block';
diff --git a/modules/block/block.module b/modules/block/block.module
index ad56834e9..19e81f55e 100644
--- a/modules/block/block.module
+++ b/modules/block/block.module
@@ -925,3 +925,17 @@ function block_form_system_performance_settings_alter(&$form, &$form_state) {
'#weight' => -1,
);
}
+
+/**
+ * Implements hook_modules_uninstalled().
+ *
+ * Cleanup {block} and {block_role} tables from modules' blocks.
+ */
+function block_modules_uninstalled($modules) {
+ db_delete('block')
+ ->condition('module', $modules, 'IN')
+ ->execute();
+ db_delete('block_role')
+ ->condition('module', $modules, 'IN')
+ ->execute();
+}
diff --git a/modules/block/block.test b/modules/block/block.test
index a2788d4e4..a3002d0db 100644
--- a/modules/block/block.test
+++ b/modules/block/block.test
@@ -84,11 +84,18 @@ class BlockTestCase extends DrupalWebTestCase {
$this->assertRaw(l(t('configure'), 'admin/structure/block/manage/block/' . $bid . '/configure'), t('Custom block configure link found.'));
$this->assertRaw(l(t('delete'), 'admin/structure/block/manage/block/' . $bid . '/delete'), t('Custom block delete link found.'));
+ // Set visibility only for authenticated users, to verify delete functionality.
+ $edit = array();
+ $edit['roles[2]'] = TRUE;
+ $this->drupalPost('admin/structure/block/manage/block/' . $bid . '/configure', $edit, t('Save block'));
+
// Delete the created custom block & verify that it's been deleted and no longer appearing on the page.
$this->clickLink(t('delete'));
$this->drupalPost('admin/structure/block/manage/block/' . $bid . '/delete', array(), t('Delete'));
$this->assertRaw(t('The block %title has been removed.', array('%title' => $custom_block['info'])), t('Custom block successfully deleted.'));
$this->assertNoText(t($custom_block['title']), t('Custom block no longer appears on page.'));
+ $count = db_query("SELECT 1 FROM {block_role} WHERE module = :module AND delta = :delta", array(':module' => $custom_block['module'], ':delta' => $custom_block['delta']))->fetchField();
+ $this->assertFalse($count, t('Table block_role being cleaned.'));
}
/**