You are here

function _book_add_form_elements in Drupal 7

Same name and namespace in other branches
  1. 6 modules/book/book.module \_book_add_form_elements()

Builds the common elements of the book form for the node and outline forms.

Parameters

$node: The node whose form is being viewed.

2 calls to _book_add_form_elements()
book_form_node_form_alter in modules/book/book.module
Implements hook_form_BASE_FORM_ID_alter() for node_form().
book_outline_form in modules/book/book.pages.inc
Form constructor for the book outline form.

File

modules/book/book.module, line 519
Allows users to create and organize related content in an outline.

Code

function _book_add_form_elements(&$form, &$form_state, $node) {

  // If the form is being processed during the Ajax callback of our book bid
  // dropdown, then $form_state will hold the value that was selected.
  if (isset($form_state['values']['book'])) {
    $node->book = $form_state['values']['book'];
  }
  $form['book'] = array(
    '#type' => 'fieldset',
    '#title' => t('Book outline'),
    '#weight' => 10,
    '#collapsible' => TRUE,
    '#collapsed' => TRUE,
    '#group' => 'additional_settings',
    '#attributes' => array(
      'class' => array(
        'book-outline-form',
      ),
    ),
    '#attached' => array(
      'js' => array(
        drupal_get_path('module', 'book') . '/book.js',
      ),
    ),
    '#tree' => TRUE,
  );
  foreach (array(
    'menu_name',
    'mlid',
    'nid',
    'router_path',
    'has_children',
    'options',
    'module',
    'original_bid',
    'parent_depth_limit',
  ) as $key) {
    $form['book'][$key] = array(
      '#type' => 'value',
      '#value' => $node->book[$key],
    );
  }
  $form['book']['plid'] = _book_parent_select($node->book);

  // @see _book_admin_table_tree(). The weight may be larger than 15.
  $form['book']['weight'] = array(
    '#type' => 'weight',
    '#title' => t('Weight'),
    '#default_value' => $node->book['weight'],
    '#delta' => max(15, abs($node->book['weight'])),
    '#weight' => 5,
    '#description' => t('Pages at a given level are ordered first by weight and then by title.'),
  );
  $options = array();
  $nid = isset($node->nid) ? $node->nid : 'new';
  if (isset($node->nid) && $nid == $node->book['original_bid'] && $node->book['parent_depth_limit'] == 0) {

    // This is the top level node in a maximum depth book and thus cannot be moved.
    $options[$node->nid] = $node->title;
  }
  else {
    foreach (book_get_books() as $book) {
      $options[$book['nid']] = $book['title'];
    }
  }
  if (user_access('create new books') && ($nid == 'new' || $nid != $node->book['original_bid'])) {

    // The node can become a new book, if it is not one already.
    $options = array(
      $nid => '<' . t('create a new book') . '>',
    ) + $options;
  }
  if (!$node->book['mlid']) {

    // The node is not currently in the hierarchy.
    $options = array(
      0 => '<' . t('none') . '>',
    ) + $options;
  }

  // Add a drop-down to select the destination book.
  $form['book']['bid'] = array(
    '#type' => 'select',
    '#title' => t('Book'),
    '#default_value' => $node->book['bid'],
    '#options' => $options,
    '#access' => (bool) $options,
    '#description' => t('Your page will be a part of the selected book.'),
    '#weight' => -5,
    '#attributes' => array(
      'class' => array(
        'book-title-select',
      ),
    ),
    '#ajax' => array(
      'callback' => 'book_form_update',
      'wrapper' => 'edit-book-plid-wrapper',
      'effect' => 'fade',
      'speed' => 'fast',
    ),
  );
}