Index: modules/block/block.admin.inc =================================================================== RCS file: /cvs/drupal/drupal/modules/block/block.admin.inc,v retrieving revision 1.74 diff -u -p -r1.74 block.admin.inc --- modules/block/block.admin.inc 9 Mar 2010 03:48:59 -0000 1.74 +++ modules/block/block.admin.inc 9 Mar 2010 10:20:45 -0000 @@ -446,6 +446,8 @@ function block_add_block_form_submit($fo 'format' => $form_state['values']['format'], )) ->execute(); + // Store block delta to allow other modules to work with new block. + $form_state['values']['delta'] = $delta; $query = db_insert('block')->fields(array('visibility', 'pages', 'custom', 'title', 'module', 'theme', 'status', 'weight', 'delta', 'cache')); foreach (list_themes() as $key => $theme) { Index: modules/node/node.module =================================================================== RCS file: /cvs/drupal/drupal/modules/node/node.module,v retrieving revision 1.1245 diff -u -p -r1.1245 node.module --- modules/node/node.module 8 Mar 2010 02:41:46 -0000 1.1245 +++ modules/node/node.module 9 Mar 2010 10:20:46 -0000 @@ -2244,6 +2244,36 @@ function node_block_admin_configure_subm } /** + * Implements hook_form_FORMID_alter(). + * + * Adds node specific submit handler to delete custom block form. + */ +function node_form_block_custom_block_delete_alter(&$form, &$form_state) { + $form['#submit'][] = 'node_block_custom_block_delete_submit'; +} + +/** + * Form submit handler for custom block delete form. + */ +function node_block_custom_block_delete_submit($form, &$form_state) { + db_delete('block_node_type') + ->condition('module', 'block') + ->condition('delta', $form_state['values']['bid']) + ->execute(); +} + +/** + * Implements hook_modules_uninstalled(). + * + * Cleanup {block_node_type} table from modules' blocks. + */ +function node_modules_uninstalled($modules) { + db_delete('block_node_type') + ->condition('module', $modules, 'IN') + ->execute(); +} + +/** * A generic function for generating RSS feeds from a set of nodes. * * @param $nids Index: modules/node/node.test =================================================================== RCS file: /cvs/drupal/drupal/modules/node/node.test,v retrieving revision 1.76 diff -u -p -r1.76 node.test --- modules/node/node.test 6 Mar 2010 06:39:00 -0000 1.76 +++ modules/node/node.test 9 Mar 2010 10:20:46 -0000 @@ -1289,7 +1289,7 @@ class NodeBlockFunctionalTest extends Dr } function setUp() { - parent::setUp('node'); + parent::setUp('node', 'block'); // Create users and test node. $this->admin_user = $this->drupalCreateUser(array('administer content types', 'administer nodes', 'administer blocks')); @@ -1379,6 +1379,20 @@ class NodeBlockFunctionalTest extends Dr $this->assertText($node2->title, t('Node found in block.')); $this->assertText($node3->title, t('Node found in block.')); $this->assertText($node4->title, t('Node found in block.')); + + // Create the custom block. + $custom_block = array(); + $custom_block['info'] = $this->randomName(); + $custom_block['title'] = $this->randomName(); + $custom_block['types[article]'] = TRUE; + $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(); + $this->assertTrue($bid, t('Custom block with visibility rule was created.')); + $this->drupalPost('admin/structure/block/manage/block/' . $bid . '/delete', array(), t('Delete')); + $bid = db_query("SELECT 1 FROM {block_node_type} WHERE module = 'block' AND delta = :delta", array(':delta' => $bid))->fetchField(); + $this->assertFalse($bid, t('Custom block was deleted.')); } } /**