Same name and namespace in other branches
  1. 4.7.x modules/book.module \book_admin_edit_submit()
  2. 5.x modules/book/book.module \book_admin_edit_submit()
  3. 7.x modules/book/book.admin.inc \book_admin_edit_submit()

Handle submission of the book administrative page form.

This function takes care to save parent menu items before their children. Saving menu items in the incorrect order can break the menu tree.

See also

book_admin_edit()

menu_overview_form_submit()

File

modules/book/book.admin.inc, line 103
Admin page callbacks for the book module.

Code

function book_admin_edit_submit($form, &$form_state) {

  // Save elements in the same order as defined in post rather than the form.
  // This ensures parents are updated before their children, preventing orphans.
  $order = array_flip(array_keys($form['#post']['table']));
  $form['table'] = array_merge($order, $form['table']);
  foreach (element_children($form['table']) as $key) {
    if ($form['table'][$key]['#item']) {
      $row = $form['table'][$key];
      $values = $form_state['values']['table'][$key];

      // Update menu item if moved.
      if ($row['plid']['#default_value'] != $values['plid'] || $row['weight']['#default_value'] != $values['weight']) {
        $row['#item']['plid'] = $values['plid'];
        $row['#item']['weight'] = $values['weight'];
        menu_link_save($row['#item']);
      }

      // Update the title if changed.
      if ($row['title']['#default_value'] != $values['title']) {
        $node = node_load($values['nid'], FALSE);
        $node->title = $values['title'];
        $node->book['link_title'] = $values['title'];
        $node->revision = 1;
        $node->log = t('Title changed from %original to %current.', array(
          '%original' => $node->title,
          '%current' => $values['title'],
        ));
        node_save($node);
        watchdog('content', 'book: updated %title.', array(
          '%title' => $node->title,
        ), WATCHDOG_NOTICE, l(t('view'), 'node/' . $node->nid));
      }
    }
  }
  drupal_set_message(t('Updated book %title.', array(
    '%title' => $form['#node']->title,
  )));
}