Chris@0: connection = $connection; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getBooks() { Chris@0: return $this->connection->query("SELECT DISTINCT(bid) FROM {book}")->fetchCol(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function hasBooks() { Chris@0: return (bool) $this->connection Chris@0: ->query('SELECT count(bid) FROM {book}') Chris@0: ->fetchField(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function loadMultiple($nids, $access = TRUE) { Chris@0: $query = $this->connection->select('book', 'b', ['fetch' => \PDO::FETCH_ASSOC]); Chris@0: $query->fields('b'); Chris@0: $query->condition('b.nid', $nids, 'IN'); Chris@0: Chris@0: if ($access) { Chris@0: $query->addTag('node_access'); Chris@0: $query->addMetaData('base_table', 'book'); Chris@0: } Chris@0: Chris@0: return $query->execute(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getChildRelativeDepth($book_link, $max_depth) { Chris@0: $query = $this->connection->select('book'); Chris@0: $query->addField('book', 'depth'); Chris@0: $query->condition('bid', $book_link['bid']); Chris@0: $query->orderBy('depth', 'DESC'); Chris@0: $query->range(0, 1); Chris@0: Chris@0: $i = 1; Chris@0: $p = 'p1'; Chris@0: while ($i <= $max_depth && $book_link[$p]) { Chris@0: $query->condition($p, $book_link[$p]); Chris@0: $p = 'p' . ++$i; Chris@0: } Chris@0: Chris@0: return $query->execute()->fetchField(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function delete($nid) { Chris@0: return $this->connection->delete('book') Chris@0: ->condition('nid', $nid) Chris@0: ->execute(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function loadBookChildren($pid) { Chris@0: return $this->connection Chris@0: ->query("SELECT * FROM {book} WHERE pid = :pid", [':pid' => $pid]) Chris@0: ->fetchAllAssoc('nid', \PDO::FETCH_ASSOC); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getBookMenuTree($bid, $parameters, $min_depth, $max_depth) { Chris@0: $query = $this->connection->select('book'); Chris@0: $query->fields('book'); Chris@0: for ($i = 1; $i <= $max_depth; $i++) { Chris@0: $query->orderBy('p' . $i, 'ASC'); Chris@0: } Chris@0: $query->condition('bid', $bid); Chris@0: if (!empty($parameters['expanded'])) { Chris@0: $query->condition('pid', $parameters['expanded'], 'IN'); Chris@0: } Chris@0: if ($min_depth != 1) { Chris@0: $query->condition('depth', $min_depth, '>='); Chris@0: } Chris@0: if (isset($parameters['max_depth'])) { Chris@0: $query->condition('depth', $parameters['max_depth'], '<='); Chris@0: } Chris@0: // Add custom query conditions, if any were passed. Chris@0: if (isset($parameters['conditions'])) { Chris@0: foreach ($parameters['conditions'] as $column => $value) { Chris@0: $query->condition($column, $value); Chris@0: } Chris@0: } Chris@0: Chris@0: return $query->execute(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function insert($link, $parents) { Chris@0: return $this->connection Chris@0: ->insert('book') Chris@0: ->fields([ Chris@0: 'nid' => $link['nid'], Chris@0: 'bid' => $link['bid'], Chris@0: 'pid' => $link['pid'], Chris@0: 'weight' => $link['weight'], Chris@0: ] + $parents Chris@0: ) Chris@0: ->execute(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function update($nid, $fields) { Chris@0: return $this->connection Chris@0: ->update('book') Chris@0: ->fields($fields) Chris@0: ->condition('nid', $nid) Chris@0: ->execute(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function updateMovedChildren($bid, $original, $expressions, $shift) { Chris@0: $query = $this->connection->update('book'); Chris@0: $query->fields(['bid' => $bid]); Chris@0: Chris@0: foreach ($expressions as $expression) { Chris@0: $query->expression($expression[0], $expression[1], $expression[2]); Chris@0: } Chris@0: Chris@0: $query->expression('depth', 'depth + :depth', [':depth' => $shift]); Chris@0: $query->condition('bid', $original['bid']); Chris@0: $p = 'p1'; Chris@0: for ($i = 1; !empty($original[$p]); $p = 'p' . ++$i) { Chris@0: $query->condition($p, $original[$p]); Chris@0: } Chris@0: Chris@0: return $query->execute(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function countOriginalLinkChildren($original) { Chris@0: return $this->connection->select('book', 'b') Chris@0: ->condition('bid', $original['bid']) Chris@0: ->condition('pid', $original['pid']) Chris@0: ->condition('nid', $original['nid'], '<>') Chris@0: ->countQuery() Chris@0: ->execute()->fetchField(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getBookSubtree($link, $max_depth) { Chris@18: $query = $this->connection->select('book', 'b', ['fetch' => \PDO::FETCH_ASSOC]); Chris@0: $query->fields('b'); Chris@0: $query->condition('b.bid', $link['bid']); Chris@0: Chris@0: for ($i = 1; $i <= $max_depth && $link["p$i"]; ++$i) { Chris@0: $query->condition("p$i", $link["p$i"]); Chris@0: } Chris@0: for ($i = 1; $i <= $max_depth; ++$i) { Chris@0: $query->orderBy("p$i"); Chris@0: } Chris@0: return $query->execute(); Chris@0: } Chris@0: Chris@0: }