id_tag; $title = $tag->tag; $description = !empty($tag->description) ? '
' . $tag->description . '
' : ''; // Can we go up a level? if ($tag->id_parent != 0) { $ptag = Tag::fromId($tag->id_parent); $description .= ''; } elseif ($tag->kind === 'Person') $description .= ''; } // View the album root. else { $id_tag = 1; $title = 'Albums'; $description = ''; } // What page are we at? $page = isset($_GET['page']) ? (int) $_GET['page'] : 1; parent::__construct($title . ' - Page ' . $page . ' - ' . SITE_TITLE); if ($id_tag !== 1) $this->page->adopt(new DummyBox($title, $description, 'page_title_box')); // Fetch subalbums, but only if we're on the first page. if ($page === 1) { $albums = $this->getAlbums($id_tag); $index = new AlbumIndex($albums); $this->page->adopt($index); } // Load a photo mosaic for the current tag. list($mosaic, $total_count) = $this->getPhotoMosaic($id_tag, $page); if (isset($mosaic)) $this->page->adopt(new PhotosIndex($mosaic, Registry::get('user')->isAdmin())); // Make a page index as needed, while we're at it. if ($total_count > self::PER_PAGE) { $index = new PageIndex([ 'recordCount' => $total_count, 'items_per_page' => self::PER_PAGE, 'start' => (isset($_GET['page']) ? $_GET['page'] - 1 : 0) * self::PER_PAGE, 'base_url' => BASEURL . '/' . (isset($_GET['tag']) ? $_GET['tag'] . '/' : ''), 'page_slug' => 'page/%PAGE%/', ]); $this->page->adopt(new Pagination($index)); } // Set the canonical url. $this->page->setCanonicalUrl(BASEURL . '/' . (isset($_GET['tag']) ? $_GET['tag'] . '/' : '')); } public function getPhotoMosaic($id_tag, $page) { // Create an iterator. list($this->iterator, $total_count) = AssetIterator::getByOptions([ 'id_tag' => $id_tag, 'order' => 'date_captured', 'direction' => 'desc', 'limit' => self::PER_PAGE, 'page' => $page, ], true); $mosaic = $total_count > 0 ? new PhotoMosaic($this->iterator) : null; return [$mosaic, $total_count]; } private function getAlbums($id_tag) { // Fetch subalbums. $subalbums = Tag::getAlbums($id_tag); // What assets are we using? $id_assets = array_map(function($album) { return (int) $album['id_asset_thumb']; }, $subalbums); // Fetch assets for thumbnails. $assets = Asset::fromIds($id_assets, 'object'); // Build album list. $albums = []; foreach ($subalbums as $album) { $albums[$album['id_tag']] = [ 'id_tag' => $album['id_tag'], 'caption' => $album['tag'], 'link' => BASEURL . '/' . $album['slug'] . '/', 'thumbnail' => !empty($album['id_asset_thumb']) ? $assets[$album['id_asset_thumb']]->getImage() : null, ]; } return $albums; } public function __destruct() { if (isset($this->iterator)) $this->iterator->clean(); } }