Index: devel_generate/book.devel_generate.inc
===================================================================
RCS file: devel_generate/book.devel_generate.inc
diff -N devel_generate/book.devel_generate.inc
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ devel_generate/book.devel_generate.inc	27 Dec 2010 23:45:51 -0000
@@ -0,0 +1,59 @@
+<?php
+// $Id$
+
+/**
+ * @file
+ * Functions needed for devel_generate book integration.
+ */
+
+define('DEVEL_GENERATE_NO_BOOKS', 0);
+define('DEVEL_GENERATE_CREATE_BOOKS', 1);
+define('DEVEL_GENERATE_ADD_TO_BOOKS', 2);
+define('DEVEL_GENERATE_CREATE_AND_ADD_TO_BOOKS', 3);
+
+/**
+ * Enrich the $node that is about to be saved with book information.
+ */
+function devel_generate_book(&$node, $option, $depth) {
+  if (!book_type_is_allowed($node->type)) {
+    return;
+  }
+
+  switch ($option) {
+    case DEVEL_GENERATE_NO_BOOKS:
+      return;
+    case DEVEL_GENERATE_CREATE_BOOKS:
+      $new_book = TRUE;
+      break;
+    case DEVEL_GENERATE_ADD_TO_BOOKS:
+      $new_book = FALSE;
+      break;
+    case DEVEL_GENERATE_CREATE_AND_ADD_TO_BOOKS:
+      $new_book = mt_rand(0, 1) ? TRUE : FALSE;
+      break;
+    default:
+      return;
+  }
+
+  if ($new_book) {
+    $node->book['bid'] = 'new';
+  }
+  else {
+    $result = db_query_range("SELECT b.mlid, b.bid, m.depth, m.link_title from {book} b JOIN menu_links {m} ON b.mlid = m.mlid WHERE m.depth < :depth ORDER BY RAND()", 0, 1, array(':depth' => $depth))->fetchAssoc();
+
+    if ($result) {
+      $node->book['bid'] = $result['bid'];
+      $node->book['plid'] = $result['mlid'];
+    }
+  }
+}
+
+function devel_generate_book_options() {
+  $options = array(
+    DEVEL_GENERATE_NO_BOOKS => t('Do not create or add content to books'),
+    DEVEL_GENERATE_CREATE_BOOKS => t('Create new books'),
+    DEVEL_GENERATE_ADD_TO_BOOKS => t('Add content to existing books'),
+    DEVEL_GENERATE_CREATE_AND_ADD_TO_BOOKS => t('Create new books and add content to existing books'),
+  );
+  return $options;
+}
Index: devel_generate/devel_generate.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/devel/devel_generate/devel_generate.inc,v
retrieving revision 1.27
diff -u -p -r1.27 devel_generate.inc
--- devel_generate/devel_generate.inc	14 Nov 2010 00:29:50 -0000	1.27
+++ devel_generate/devel_generate.inc	27 Dec 2010 23:45:51 -0000
@@ -691,6 +691,11 @@ function devel_generate_content_add_node
   module_load_include('inc', 'devel_generate', 'devel_generate.fields');
   devel_generate_fields($node, 'node', $node->type);
 
+  if (module_exists('book')) {
+    module_load_include('inc', 'devel_generate', 'book.devel_generate');
+    devel_generate_book($node, $results['book_options'], $results['book_depth']);
+  }
+
   // See devel_generate_nodeapi() for actions that happen before and after this save.
   node_save($node);
 }
Index: devel_generate/devel_generate.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/devel/devel_generate/devel_generate.module,v
retrieving revision 1.13
diff -u -p -r1.13 devel_generate.module
--- devel_generate/devel_generate.module	6 Dec 2010 15:28:53 -0000	1.13
+++ devel_generate/devel_generate.module	27 Dec 2010 23:45:51 -0000
@@ -201,6 +201,32 @@ function devel_generate_content_form() {
     '#default_value' => LANGUAGE_NONE,
   );
 
+  if (module_exists('book')) {
+    module_load_include('inc', 'devel_generate', 'book.devel_generate');
+    $options = devel_generate_book_options();
+
+    $form['book'] = array(
+      '#type' => 'fieldset',
+      '#title' => t('Book'),
+      '#collapsible' => TRUE,
+    );
+    $form['book']['book_options'] = array(
+      '#type' => 'radios',
+      '#description' => t('Nodes that are in the allowed list of book types can be their own books or added to existing books.'),
+      '#title' => t('Add to books'),
+      '#options' => $options,
+      '#default_value' => DEVEL_GENERATE_NO_BOOKS,
+    );
+
+    $form['book']['book_depth'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Maximum book depth'),
+      '#description' => t('Enter the maximum book page depth to generate.  Minimum allowed value is 2.  Maximum allowed value is !max_depth (MENU_MAX_DEPTH).', array('!max_depth' => MENU_MAX_DEPTH)),
+      '#default_value' => 2,
+      '#size' => 3,
+    );
+  }
+
   $form['submit'] = array(
     '#type' => 'submit',
     '#value' => t('Generate'),
@@ -223,6 +249,13 @@ function devel_generate_content_form_sub
   }
 }
 
+function devel_generate_content_form_validate($form, &$form_state) {
+  $depth = $form_state['values']['book_depth'];
+  if (!is_numeric($depth) || ($depth < 2) || ($depth > MENU_MAX_DEPTH)) {
+    form_set_error('book_depth', t('Depth of book pages to generate must be between 2 and !max_depth (MENU_MAX_DEPTH).', array('!max_depth' => MENU_MAX_DEPTH)));
+  }
+}
+
 function devel_generate_term_form() {
   $options = array();
   foreach (taxonomy_get_vocabularies() as $vid => $vocab) {
