class BookManager

Book Manager Service.

Hierarchy

Expanded class hierarchy of BookManager

1 file declares its use of BookManager
BookController.php in drupal/core/modules/book/lib/Drupal/book/Controller/BookController.php
Contains \Drupal\book\Controller\BookController.
1 string reference to 'BookManager'
book.services.yml in drupal/core/modules/book/book.services.yml
drupal/core/modules/book/book.services.yml
1 service uses BookManager

File

drupal/core/modules/book/lib/Drupal/book/BookManager.php, line 16
Contains \Drupal\book\BookManager.

Namespace

Drupal\book
View source
class BookManager {

  /**
   * Database Service Object.
   *
   * @var \Drupal\Core\Database\Connection
   */
  protected $database;

  /**
   * Entity manager Service Object.
   *
   * @var \Drupal\Core\Entity\EntityManager
   */
  protected $entityManager;

  /**
   * Books Array.
   *
   * @var array
   */
  protected $books;

  /**
   * Constructs a BookManager object.
   */
  public function __construct(Connection $database, EntityManager $entityManager) {
    $this->database = $database;
    $this->entityManager = $entityManager;
  }

  /**
   * Returns an array of all books.
   *
   * This list may be used for generating a list of all the books, or for building
   * the options for a form select.
   *
   * @return
   *   An array of all books.
   */
  public function getAllBooks() {
    if (!isset($this->books)) {
      $this
        ->loadBooks();
    }
    return $this->books;
  }

  /**
   * Loads Books Array.
   */
  protected function loadBooks() {
    $this->books = array();
    $nids = $this->database
      ->query("SELECT DISTINCT(bid) FROM {book}")
      ->fetchCol();
    if ($nids) {
      $query = $this->database
        ->select('book', 'b', array(
        'fetch' => \PDO::FETCH_ASSOC,
      ));
      $query
        ->join('menu_links', 'ml', 'b.mlid = ml.mlid');
      $query
        ->fields('b');
      $query
        ->fields('ml');
      $query
        ->condition('b.nid', $nids);
      $query
        ->orderBy('ml.weight');
      $query
        ->orderBy('ml.link_title');
      $query
        ->addTag('node_access');
      $query
        ->addMetaData('base_table', 'book');
      $book_links = $query
        ->execute();
      $nodes = $this->entityManager
        ->getStorageController('node')
        ->load($nids);
      foreach ($book_links as $link) {
        $nid = $link['nid'];
        if (isset($nodes[$nid]) && $nodes[$nid]->status) {
          $link['href'] = $link['link_path'];
          $link['options'] = unserialize($link['options']);
          $link['title'] = $nodes[$nid]
            ->label();
          $link['type'] = $nodes[$nid]
            ->bundle();
          $this->books[$link['bid']] = $link;
        }
      }
    }
  }

}

Members

Namesort descending Modifiers Type Description Overrides
BookManager::$books protected property Books Array.
BookManager::$database protected property Database Service Object.
BookManager::$entityManager protected property Entity manager Service Object.
BookManager::getAllBooks public function Returns an array of all books.
BookManager::loadBooks protected function Loads Books Array.
BookManager::__construct public function Constructs a BookManager object.