You are here

public function BookAdminEditForm::submitForm in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/book/src/Form/BookAdminEditForm.php \Drupal\book\Form\BookAdminEditForm::submitForm()

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 111

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([
          '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 = $this->entityRepository
            ->getTranslationFromContext($node);
          $node->revision_log = $this
            ->t('Title changed from %original to %current.', [
            '%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.', [
            '%title' => $node
              ->label(),
            'link' => $node
              ->toLink($this
              ->t('View'))
              ->toString(),
          ]);
        }
      }
    }
  }
  $this
    ->messenger()
    ->addStatus($this
    ->t('Updated book %title.', [
    '%title' => $form['#node']
      ->label(),
  ]));
}