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 ''; | |
} | |
} |