Index: includes/install.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/install.inc,v retrieving revision 1.56.2.4 diff -u -p -r1.56.2.4 install.inc --- includes/install.inc 16 Feb 2009 10:25:02 -0000 1.56.2.4 +++ includes/install.inc 9 Mar 2010 15:10:23 -0000 @@ -35,7 +35,7 @@ function drupal_load_updates() { * @param $module * A module name. * @return - * If the module has updates, an array of available updates sorted by version. + * If the module has updates, an array of available updates sorted by version. * Otherwise, FALSE. */ function drupal_get_schema_versions($module) { @@ -382,6 +382,10 @@ function drupal_uninstall_module($module module_load_install($module); module_invoke($module, 'uninstall'); + // Remove all module's blocks. + db_query("DELETE FROM {blocks} WHERE module = '%s'", $module); + db_query("DELETE FROM {blocks_roles} WHERE module = '%s'", $module); + // Now remove the menu links for all paths declared by this module. if (!empty($paths)) { $paths = array_keys($paths); Index: modules/block/block.admin.inc =================================================================== RCS file: /cvs/drupal/drupal/modules/block/block.admin.inc,v retrieving revision 1.14.2.5 diff -u -p -r1.14.2.5 block.admin.inc --- modules/block/block.admin.inc 24 Nov 2008 06:00:02 -0000 1.14.2.5 +++ modules/block/block.admin.inc 9 Mar 2010 15:10:23 -0000 @@ -340,6 +340,7 @@ function block_box_delete(&$form_state, function block_box_delete_submit($form, &$form_state) { db_query('DELETE FROM {boxes} WHERE bid = %d', $form_state['values']['bid']); db_query("DELETE FROM {blocks} WHERE module = 'block' AND delta = '%s'", $form_state['values']['bid']); + db_query("DELETE FROM {blocks_roles} WHERE module = 'block' AND delta = '%s'", $form_state['values']['bid']); drupal_set_message(t('The block %name has been removed.', array('%name' => $form_state['values']['info']))); cache_clear_all(); $form_state['redirect'] = 'admin/build/block'; Index: modules/block/block.install =================================================================== RCS file: /cvs/drupal/drupal/modules/block/block.install,v retrieving revision 1.8.2.2 diff -u -p -r1.8.2.2 block.install --- modules/block/block.install 6 Jan 2009 15:46:36 -0000 1.8.2.2 +++ modules/block/block.install 9 Mar 2010 15:10:23 -0000 @@ -177,3 +177,25 @@ function block_schema() { return $schema; } +/** + * @defgroup updates-6.x-extra Extra block updates for 6.x + * @{ + */ + +/** + * Cleanup orphan block's data. + */ +function block_update_6000() { + $ret = array(); + // Cleanup for deleted custom blocks. + $ret[] = update_sql("DELETE FROM {blocks_roles} WHERE module = 'block' AND delta NOT IN (SELECT b.bid FROM {boxes} b)"); + // Cleanup for uninstalled modules' blocks. + $ret[] = update_sql("DELETE FROM {blocks} WHERE module IN (SELECT s.name FROM {system} s WHERE s.type = 'module' AND s.status = 0 AND s.schema_version = -1)"); + $ret[] = update_sql("DELETE FROM {blocks_roles} WHERE module IN (SELECT s.name FROM {system} s WHERE s.type = 'module' AND s.status = 0 AND s.schema_version = -1)"); + return $ret; +} + +/** + * @} End of "defgroup updates-6.x-extra" + * The next series of updates should start at 7000. + */