public function BookOutline::prevLink in Drupal 9
Same name and namespace in other branches
- 8 core/modules/book/src/BookOutline.php \Drupal\book\BookOutline::prevLink()
Fetches the book link for the previous page of the book.
Parameters
array $book_link: A fully loaded book link that is part of the book hierarchy.
Return value
array A fully loaded book link for the page before the one represented in $book_link.
File
- core/
modules/ book/ src/ BookOutline.php, line 37
Class
- BookOutline
- Provides handling to render the book outline.
Namespace
Drupal\bookCode
public function prevLink(array $book_link) {
// If the parent is zero, we are at the start of a book.
if ($book_link['pid'] == 0) {
return NULL;
}
$flat = $this->bookManager
->bookTreeGetFlat($book_link);
reset($flat);
$curr = NULL;
do {
$prev = $curr;
$key = key($flat);
$curr = current($flat);
next($flat);
} while ($key && $key != $book_link['nid']);
if ($key == $book_link['nid']) {
// The previous page in the book may be a child of the previous visible link.
if ($prev['depth'] == $book_link['depth']) {
// The subtree will have only one link at the top level - get its data.
$tree = $this->bookManager
->bookSubtreeData($prev);
$data = array_shift($tree);
// The link of interest is the last child - iterate to find the deepest one.
while ($data['below']) {
$data = end($data['below']);
}
$this->bookManager
->bookLinkTranslate($data['link']);
return $data['link'];
}
else {
$this->bookManager
->bookLinkTranslate($prev);
return $prev;
}
}
}