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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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
2025-01-10 15:47:30
Comments
Leave a Comment

Please login to continue.