Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 13 |
CRAP | |
0.00% |
0 / 108 |
| BookOutlineStorage | |
0.00% |
0 / 1 |
|
0.00% |
0 / 13 |
756 | |
0.00% |
0 / 108 |
| __construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| getBooks | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| hasBooks | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 4 |
|||
| loadMultiple | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 9 |
|||
| getChildRelativeDepth | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 13 |
|||
| delete | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 4 |
|||
| loadBookChildren | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 4 |
|||
| getBookMenuTree | |
0.00% |
0 / 1 |
56 | |
0.00% |
0 / 22 |
|||
| insert | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 11 |
|||
| update | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 6 |
|||
| updateMovedChildren | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 13 |
|||
| countOriginalLinkChildren | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 7 |
|||
| getBookSubtree | |
0.00% |
0 / 1 |
20 | |
0.00% |
0 / 11 |
|||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\book\BookOutlineStorage. | |
| */ | |
| namespace Drupal\book; | |
| use Drupal\Core\Database\Connection; | |
| /** | |
| * Defines a storage class for books outline. | |
| */ | |
| class BookOutlineStorage implements BookOutlineStorageInterface { | |
| /** | |
| * Database Service Object. | |
| * | |
| * @var \Drupal\Core\Database\Connection | |
| */ | |
| protected $connection; | |
| /** | |
| * Constructs a BookOutlineStorage object. | |
| */ | |
| public function __construct(Connection $connection) { | |
| $this->connection = $connection; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getBooks() { | |
| return $this->connection->query("SELECT DISTINCT(bid) FROM {book}")->fetchCol(); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function hasBooks() { | |
| return (bool) $this->connection | |
| ->query('SELECT count(bid) FROM {book}') | |
| ->fetchField(); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function loadMultiple($nids, $access = TRUE) { | |
| $query = $this->connection->select('book', 'b', array('fetch' => \PDO::FETCH_ASSOC)); | |
| $query->fields('b'); | |
| $query->condition('b.nid', $nids, 'IN'); | |
| if ($access) { | |
| $query->addTag('node_access'); | |
| $query->addMetaData('base_table', 'book'); | |
| } | |
| return $query->execute(); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getChildRelativeDepth($book_link, $max_depth) { | |
| $query = $this->connection->select('book'); | |
| $query->addField('book', 'depth'); | |
| $query->condition('bid', $book_link['bid']); | |
| $query->orderBy('depth', 'DESC'); | |
| $query->range(0, 1); | |
| $i = 1; | |
| $p = 'p1'; | |
| while ($i <= $max_depth && $book_link[$p]) { | |
| $query->condition($p, $book_link[$p]); | |
| $p = 'p' . ++$i; | |
| } | |
| return $query->execute()->fetchField(); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function delete($nid) { | |
| return $this->connection->delete('book') | |
| ->condition('nid', $nid) | |
| ->execute(); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function loadBookChildren($pid) { | |
| return $this->connection | |
| ->query("SELECT * FROM {book} WHERE pid = :pid", array(':pid' => $pid)) | |
| ->fetchAllAssoc('nid', \PDO::FETCH_ASSOC); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getBookMenuTree($bid, $parameters, $min_depth, $max_depth) { | |
| $query = $this->connection->select('book'); | |
| $query->fields('book'); | |
| for ($i = 1; $i <= $max_depth; $i++) { | |
| $query->orderBy('p' . $i, 'ASC'); | |
| } | |
| $query->condition('bid', $bid); | |
| if (!empty($parameters['expanded'])) { | |
| $query->condition('pid', $parameters['expanded'], 'IN'); | |
| } | |
| if ($min_depth != 1) { | |
| $query->condition('depth', $min_depth, '>='); | |
| } | |
| if (isset($parameters['max_depth'])) { | |
| $query->condition('depth', $parameters['max_depth'], '<='); | |
| } | |
| // Add custom query conditions, if any were passed. | |
| if (isset($parameters['conditions'])) { | |
| foreach ($parameters['conditions'] as $column => $value) { | |
| $query->condition($column, $value); | |
| } | |
| } | |
| return $query->execute(); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function insert($link, $parents) { | |
| return $this->connection | |
| ->insert('book') | |
| ->fields(array( | |
| 'nid' => $link['nid'], | |
| 'bid' => $link['bid'], | |
| 'pid' => $link['pid'], | |
| 'weight' => $link['weight'], | |
| ) + $parents | |
| ) | |
| ->execute(); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function update($nid, $fields) { | |
| return $this->connection | |
| ->update('book') | |
| ->fields($fields) | |
| ->condition('nid', $nid) | |
| ->execute(); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function updateMovedChildren($bid, $original, $expressions, $shift) { | |
| $query = $this->connection->update('book'); | |
| $query->fields(array('bid' => $bid)); | |
| foreach ($expressions as $expression) { | |
| $query->expression($expression[0], $expression[1], $expression[2]); | |
| } | |
| $query->expression('depth', 'depth + :depth', array(':depth' => $shift)); | |
| $query->condition('bid', $original['bid']); | |
| $p = 'p1'; | |
| for ($i = 1; !empty($original[$p]); $p = 'p' . ++$i) { | |
| $query->condition($p, $original[$p]); | |
| } | |
| return $query->execute(); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function countOriginalLinkChildren($original) { | |
| return $this->connection->select('book', 'b') | |
| ->condition('bid', $original['bid']) | |
| ->condition('pid', $original['pid']) | |
| ->condition('nid', $original['nid'], '<>') | |
| ->countQuery() | |
| ->execute()->fetchField(); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getBookSubtree($link, $max_depth) { | |
| $query = db_select('book', 'b', array('fetch' => \PDO::FETCH_ASSOC)); | |
| $query->fields('b'); | |
| $query->condition('b.bid', $link['bid']); | |
| for ($i = 1; $i <= $max_depth && $link["p$i"]; ++$i) { | |
| $query->condition("p$i", $link["p$i"]); | |
| } | |
| for ($i = 1; $i <= $max_depth; ++$i) { | |
| $query->orderBy("p$i"); | |
| } | |
| return $query->execute(); | |
| } | |
| } |