views:

49

answers:

1

Example call to copy a book using the Book Copy module in Drupal 6 (assuming a node exists with book id of 142):

www.examplesite.com/book_copy/copy/142

When the above site is called and node 142 is copied it then notifies the user that the book was copied, but starts the user out on the Outline tab for the book copy. I think it would be more intuitive to start the user out on the Edit tab for the book copy so the user can immediately start to edit the information for the book. The outline is less important than setting up the actual initial details for the book which are in the Edit tab.

Does anyone know how I could modify the module to forward the user to the Edit tab? I looked through the code and it's just not clicking. I'm having problems interpreting exactly how this Book Module is working under the hood. Any suggestions will be greatly appreciated. Thanks!

+3  A: 

I have no experience with the book_copy module, but looking at the last lines of the book_copy_copy_book() function:

$book = node_load(array('nid' => $newbid));
$book->bookcopydata = array();
$book->bookcopydata['message'] = t('Successfully cloned "%message", now viewing copy.', array('%message' => $message));
if (_book_outline_access($book)) {
  $book->bookcopydata['url'] = 'node/'. $newbid .'/outline';
}
else {
  $book->bookcopydata['url'] = 'node/'. $newbid;
}

// The function signature is: hook_book_copy_goto_alter(&$data);
drupal_alter("book_copy_goto", $book);
drupal_set_message($book->bookcopydata['message']);
drupal_goto($book->bookcopydata['url']);  // requires user has 'administer book outline' or can access personal books

the user would automatically end on the new book page if he did not have the 'administer book outlines' right. If you want the user to always end on the new book edit page, you could just replace the whole if

if (_book_outline_access($book)) { ... }

clause with the assignment from its else part with an adjusted url:

$book->bookcopydata['url'] = 'node/'. $newbid . '/edit';

However, changing a modules code directly is not recommended (update clashes), especially if the module provides a hook to achieve the change you need 'from outside'. So the 'right' way in your situation would be to implement the offered hook_book_copy_goto_alter(&$data) in a custom module in order to adjust the redirection URL to your liking:

function yourModule_book_copy_goto_alter(&$new_book) {
  $new_book->bookcopydata['url'] = 'node/'. $new_book->nid . '/edit';
}
Henrik Opel
That was the right answer and a good suggestion ... I will definitely look into it. Good job!
Brian T Hannan