<?php /***************************************************************************** * PhotosIndex.php * Contains the project index template. * * Kabuki CMS (C) 2013-2015, Aaron van Geffen *****************************************************************************/ class PhotosIndex extends SubTemplate { protected $mosaic; protected $show_edit_buttons; protected $show_labels; protected $row_limit = 1000; protected $previous_header = ''; protected $url_suffix; const PANORAMA_WIDTH = 1280; const PANORAMA_HEIGHT = null; const PORTRAIT_WIDTH = 400; const PORTRAIT_HEIGHT = 645; const LANDSCAPE_WIDTH = 850; const LANDSCAPE_HEIGHT = 640; const DUO_WIDTH = 618; const DUO_HEIGHT = 412; const SINGLE_WIDTH = 618; const SINGLE_HEIGHT = 412; const TILE_WIDTH = 400; const TILE_HEIGHT = 300; public function __construct(PhotoMosaic $mosaic, $show_edit_buttons = false, $show_labels = false, $show_headers = true) { $this->mosaic = $mosaic; $this->show_edit_buttons = $show_edit_buttons; $this->show_headers = $show_headers; $this->show_labels = $show_labels; } protected function html_content() { echo ' <div class="tiled_grid">'; for ($i = $this->row_limit; $i > 0 && $row = $this->mosaic->getRow(); $i--) { list($photos, $what) = $row; $this->header($photos); $this->$what($photos); } echo ' </div> <script type="text/javascript" src="', BASEURL, '/js/albumnav.js"></script>'; } protected function header($photos) { if (!$this->show_headers) return; $date = $photos[0]->getDateCaptured(); if (!$date) return; $header = $date->format('F Y'); if ($header === $this->previous_header) return; $name = str_replace(' ', '', strtolower($header)); echo ' <h4 class="tiled_header" id="', $name, '"> <a href="#', $name, '">', $header, '</a> </h4>'; $this->previous_header = $header; } protected function photo(Image $image, $className, $width, $height, $crop = true, $fit = true) { echo ' <div class="', $className, '">'; if ($this->show_edit_buttons) echo ' <a class="edit" href="', BASEURL, '/editasset/?id=', $image->getId(), '">Edit</a>'; echo ' <a href="', $image->getPageUrl(), $this->url_suffix, '"> <img src="', $image->getThumbnailUrl($width, $height, $crop, $fit), '" alt="" title="', $image->getTitle(), '">'; if ($this->show_labels) echo ' <h4>', $image->getTitle(), '</h4>'; echo ' </a> </div>'; } protected function panorama(array $photos) { foreach ($photos as $image) $this->photo($image, 'panorama', static::PANORAMA_WIDTH, static::PANORAMA_HEIGHT, false, false); } protected function portrait(array $photos) { $image = array_shift($photos); echo ' <div class="tiled_row"> <div class="column_portrait">'; $this->photo($image, 'portrait', static::PORTRAIT_WIDTH, static::PORTRAIT_HEIGHT, 'centre'); echo ' </div> <div class="column_tiles_four">'; foreach ($photos as $image) $this->photo($image, 'landscape', static::TILE_WIDTH, static::TILE_HEIGHT, 'centre'); echo ' </div> </div>'; } protected function landscape(array $photos) { $image = array_shift($photos); echo ' <div class="tiled_row"> <div class="column_landscape">'; $this->photo($image, 'landscape', static::LANDSCAPE_WIDTH, static::LANDSCAPE_HEIGHT, 'top'); echo ' </div> <div class="column_tiles_two">'; foreach ($photos as $image) $this->photo($image, 'landscape', static::TILE_WIDTH, static::TILE_HEIGHT, 'top'); echo ' </div> </div>'; } protected function duo(array $photos) { echo ' <div class="tiled_row">'; foreach ($photos as $image) $this->photo($image, 'duo', static::DUO_WIDTH, static::DUO_HEIGHT, true); echo ' </div>'; } protected function single(array $photos) { echo ' <div class="tiled_row">'; $image = array_shift($photos); $this->photo($image, 'single', static::SINGLE_WIDTH, static::SINGLE_HEIGHT, 'top'); echo ' </div>'; } protected function row(array $photos) { echo ' <div class="tiled_row">'; foreach ($photos as $image) $this->photo($image, 'landscape', static::TILE_WIDTH, static::TILE_HEIGHT, true); echo ' </div>'; } protected function portraits(array $photos) { echo ' <div class="tiled_row">'; foreach ($photos as $image) $this->photo($image, 'portrait', static::PORTRAIT_WIDTH, static::PORTRAIT_HEIGHT, true); echo ' </div>'; } public function setUrlSuffix($suffix) { $this->url_suffix = $suffix; } }