Index: modules/book/book.module =================================================================== RCS file: /cvs/drupal/drupal/modules/book/book.module,v retrieving revision 1.479 diff -u -p -r1.479 book.module --- modules/book/book.module 16 Dec 2008 23:57:32 -0000 1.479 +++ modules/book/book.module 17 Dec 2008 01:17:13 -0000 @@ -174,7 +174,17 @@ function _book_outline_access($node) { * Menu item access callback - determine if the user can remove nodes from the outline. */ function _book_outline_remove_access($node) { - return isset($node->book) && ($node->book['bid'] != $node->nid) && _book_outline_access($node); + return _book_node_is_removable($node) && _book_outline_access($node); +} + +/** + * Helper function - determine if a node can be removed from the book. + * + * A node can only be removed if it's actually in a book, and not a top-level + * page, or it is a top-level page with no children. + */ +function _book_node_is_removable($node) { + return (!empty($node->book['bid']) && (($node->book['bid'] != $node->nid) || !$node->book['has_children'])); } /** Index: modules/book/book.pages.inc =================================================================== RCS file: /cvs/drupal/drupal/modules/book/book.pages.inc,v retrieving revision 1.12 diff -u -p -r1.12 book.pages.inc --- modules/book/book.pages.inc 16 Nov 2008 15:02:45 -0000 1.12 +++ modules/book/book.pages.inc 17 Dec 2008 01:17:13 -0000 @@ -130,7 +130,7 @@ function book_outline_form(&$form_state, $form['remove'] = array( '#type' => 'submit', '#value' => t('Remove from book outline'), - '#access' => $node->nid != $node->book['bid'] && $node->book['bid'], + '#access' => _book_node_is_removable($node), '#weight' => 20, '#submit' => array('book_remove_button_submit'), ); @@ -207,8 +207,9 @@ function book_remove_form(&$form_state, */ function book_remove_form_submit($form, &$form_state) { $node = $form['#node']; - if ($node->nid != $node->book['bid']) { - // Only allowed when this is not a book (top-level page). + if (_book_node_is_removable($node)) { + // Only allowed when this is not a book (top-level page), + // or for a top-level page with no children. menu_link_delete($node->book['mlid']); db_delete('book') ->condition('nid', $node->nid)