BookAdminEditForm::submitForm

public BookAdminEditForm::submitForm(array &$form, FormStateInterface $form_state)

Form submission handler.

Parameters

array $form: An associative array containing the structure of the form.

\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.

Overrides FormInterface::submitForm

File

core/modules/book/src/Form/BookAdminEditForm.php, line 93

Class

BookAdminEditForm
Provides a form for administering a single book's hierarchy.

Namespace

Drupal\book\Form

Code

public function submitForm(array &$form, FormStateInterface $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.
  $user_input = $form_state->getUserInput();
  if (isset($user_input['table'])) {
    $order = array_flip(array_keys($user_input['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->getValue(array('table', $key));

        // Update menu item if moved.
        if ($row['parent']['pid']['#default_value'] != $values['pid'] || $row['weight']['#default_value'] != $values['weight']) {
          $link = $this->bookManager->loadBookLink($values['nid'], FALSE);
          $link['weight'] = $values['weight'];
          $link['pid'] = $values['pid'];
          $this->bookManager->saveBookLink($link, FALSE);
        }

        // Update the title if changed.
        if ($row['title']['#default_value'] != $values['title']) {
          $node = $this->nodeStorage->load($values['nid']);
          $node->revision_log = $this->t('Title changed from %original to %current.', array('%original' => $node->label(), '%current' => $values['title']));
          $node->title = $values['title'];
          $node->book['link_title'] = $values['title'];
          $node->setNewRevision();
          $node->save();
          $this->logger('content')->notice('book: updated %title.', array('%title' => $node->label(), 'link' => $node->link($this->t('View'))));
        }
      }
    }
  }

  drupal_set_message($this->t('Updated book %title.', array('%title' => $form['#node']->label())));
}
doc_Drupal
2016-10-29 08:48:00
Comments
Leave a Comment

Please login to continue.