bookManager = $book_manager; } /** * {@inheritdoc} */ public static function create(ContainerInterface $container) { return new static( $container->get('entity.repository'), $container->get('book.manager'), $container->get('entity_type.bundle.info'), $container->get('datetime.time') ); } /** * {@inheritdoc} */ public function getBaseFormId() { return NULL; } /** * {@inheritdoc} */ public function form(array $form, FormStateInterface $form_state) { $form['#title'] = $this->entity->label(); if (!isset($this->entity->book)) { // The node is not part of any book yet - set default options. $this->entity->book = $this->bookManager->getLinkDefaults($this->entity->id()); } else { $this->entity->book['original_bid'] = $this->entity->book['bid']; } // Find the depth limit for the parent select. if (!isset($this->entity->book['parent_depth_limit'])) { $this->entity->book['parent_depth_limit'] = $this->bookManager->getParentDepthLimit($this->entity->book); } $form = $this->bookManager->addFormElements($form, $form_state, $this->entity, $this->currentUser(), FALSE); return $form; } /** * {@inheritdoc} */ protected function actions(array $form, FormStateInterface $form_state) { $actions = parent::actions($form, $form_state); $actions['submit']['#value'] = $this->entity->book['original_bid'] ? $this->t('Update book outline') : $this->t('Add to book outline'); $actions['delete']['#title'] = $this->t('Remove from book outline'); $actions['delete']['#url'] = new Url('entity.node.book_remove_form', ['node' => $this->entity->book['nid']]); $actions['delete']['#access'] = $this->bookManager->checkNodeIsRemovable($this->entity); return $actions; } /** * {@inheritdoc} */ public function save(array $form, FormStateInterface $form_state) { $form_state->setRedirect( 'entity.node.canonical', ['node' => $this->entity->id()] ); $book_link = $form_state->getValue('book'); if (!$book_link['bid']) { $this->messenger()->addStatus($this->t('No changes were made')); return; } $this->entity->book = $book_link; if ($this->bookManager->updateOutline($this->entity)) { if (isset($this->entity->book['parent_mismatch']) && $this->entity->book['parent_mismatch']) { // This will usually only happen when JS is disabled. $this->messenger()->addStatus($this->t('The post has been added to the selected book. You may now position it relative to other pages.')); $form_state->setRedirectUrl($this->entity->urlInfo('book-outline-form')); } else { $this->messenger()->addStatus($this->t('The book outline has been updated.')); } } else { $this->messenger()->addError($this->t('There was an error adding the post to the book.')); } } }