function BookManager::updateOutline

File

core/modules/book/src/BookManager.php, line 320

Class

BookManager
Defines a book manager.

Namespace

Drupal\book

Code

public function updateOutline(NodeInterface $node) {
  if (empty($node->book['bid'])) {
    return FALSE;
  }
  if (!empty($node->book['bid'])) {
    if ($node->book['bid'] == 'new') {
      // New nodes that are their own book.
      $node->book['bid'] = $node->id();
    }
    elseif (!isset($node->book['original_bid'])) {
      $node->book['original_bid'] = $node->book['bid'];
    }
  }
  // Ensure we create a new book link if either the node itself is new, or the
  // bid was selected the first time, so that the original_bid is still empty.
  $new = empty($node->book['nid']) || empty($node->book['original_bid']);
  $node->book['nid'] = $node->id();
  // Create a new book from a node.
  if ($node->book['bid'] == $node->id()) {
    $node->book['pid'] = 0;
  }
  elseif ($node->book['pid'] < 0) {
    // -1 is the default value in BookManager::addParentSelectFormElements().
    // The node save should have set the bid equal to the node ID, but
    // handle it here if it did not.
    $node->book['pid'] = $node->book['bid'];
  }
  // Prevent changes to the book outline if the node being saved is not the
  // default revision.
  $updated = FALSE;
  if (!$new) {
    $original = $this->loadBookLink($node->id(), FALSE);
    if ($node->book['bid'] != $original['bid'] || $node->book['pid'] != $original['pid'] || $node->book['weight'] != $original['weight']) {
      $updated = TRUE;
    }
  }
  if (($new || $updated) && !$node->isDefaultRevision()) {
    return FALSE;
  }
  return $this->saveBookLink($node->book, $new);
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.