Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 4 |
CRAP | |
0.00% |
0 / 56 |
| BookOutline | |
0.00% |
0 / 1 |
|
0.00% |
0 / 4 |
420 | |
0.00% |
0 / 56 |
| __construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| prevLink | |
0.00% |
0 / 1 |
56 | |
0.00% |
0 / 25 |
|||
| nextLink | |
0.00% |
0 / 1 |
30 | |
0.00% |
0 / 12 |
|||
| childrenLinks | |
0.00% |
0 / 1 |
56 | |
0.00% |
0 / 17 |
|||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\book\BookOutline. | |
| */ | |
| namespace Drupal\book; | |
| /** | |
| * Provides handling to render the book outline. | |
| */ | |
| class BookOutline { | |
| /** | |
| * The book manager. | |
| * | |
| * @var \Drupal\book\BookManagerInterface | |
| */ | |
| protected $bookManager; | |
| /** | |
| * Constructs a new BookOutline. | |
| * | |
| * @param \Drupal\book\BookManagerInterface $book_manager | |
| * The book manager. | |
| */ | |
| public function __construct(BookManagerInterface $book_manager) { | |
| $this->bookManager = $book_manager; | |
| } | |
| /** | |
| * Fetches the book link for the previous page of the book. | |
| * | |
| * @param array $book_link | |
| * A fully loaded book link that is part of the book hierarchy. | |
| * | |
| * @return array | |
| * A fully loaded book link for the page before the one represented in | |
| * $book_link. | |
| */ | |
| 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; | |
| } | |
| // Assigning the array to $flat resets the array pointer for use with each(). | |
| $flat = $this->bookManager->bookTreeGetFlat($book_link); | |
| $curr = NULL; | |
| do { | |
| $prev = $curr; | |
| list($key, $curr) = each($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; | |
| } | |
| } | |
| } | |
| /** | |
| * Fetches the book link for the next page of the book. | |
| * | |
| * @param array $book_link | |
| * A fully loaded book link that is part of the book hierarchy. | |
| * | |
| * @return array | |
| * A fully loaded book link for the page after the one represented in | |
| * $book_link. | |
| */ | |
| public function nextLink(array $book_link) { | |
| // Assigning the array to $flat resets the array pointer for use with each(). | |
| $flat = $this->bookManager->bookTreeGetFlat($book_link); | |
| do { | |
| list($key,) = each($flat); | |
| } while ($key && $key != $book_link['nid']); | |
| if ($key == $book_link['nid']) { | |
| $next = current($flat); | |
| if ($next) { | |
| $this->bookManager->bookLinkTranslate($next); | |
| } | |
| return $next; | |
| } | |
| } | |
| /** | |
| * Formats the book links for the child pages of the current page. | |
| * | |
| * @param array $book_link | |
| * A fully loaded book link that is part of the book hierarchy. | |
| * | |
| * @return array | |
| * HTML for the links to the child pages of the current page. | |
| */ | |
| public function childrenLinks(array $book_link) { | |
| $flat = $this->bookManager->bookTreeGetFlat($book_link); | |
| $children = array(); | |
| if ($book_link['has_children']) { | |
| // Walk through the array until we find the current page. | |
| do { | |
| $link = array_shift($flat); | |
| } while ($link && ($link['nid'] != $book_link['nid'])); | |
| // Continue though the array and collect the links whose parent is this page. | |
| while (($link = array_shift($flat)) && $link['pid'] == $book_link['nid']) { | |
| $data['link'] = $link; | |
| $data['below'] = ''; | |
| $children[] = $data; | |
| } | |
| } | |
| if ($children) { | |
| return $this->bookManager->bookTreeOutput($children); | |
| } | |
| return ''; | |
| } | |
| } |