forked from Public/pics
		
	
		
			
				
	
	
		
			184 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			184 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/*****************************************************************************
 | 
						|
 * PhotoPage.php
 | 
						|
 * Contains the photo page template.
 | 
						|
 *
 | 
						|
 * Kabuki CMS (C) 2013-2016, Aaron van Geffen
 | 
						|
 *****************************************************************************/
 | 
						|
 | 
						|
class PhotoPage extends SubTemplate
 | 
						|
{
 | 
						|
	private $photo;
 | 
						|
	private $exif;
 | 
						|
 | 
						|
	public function __construct(Image $photo)
 | 
						|
	{
 | 
						|
		$this->photo = $photo;
 | 
						|
	}
 | 
						|
 | 
						|
	protected function html_content()
 | 
						|
	{
 | 
						|
		$this->photoNav();
 | 
						|
		$this->photo();
 | 
						|
 | 
						|
		echo '
 | 
						|
				<div id="sub_photo">
 | 
						|
					<h2 class="entry-title">', $this->photo->getTitle(), '</h2>';
 | 
						|
 | 
						|
		$this->taggedPeople();
 | 
						|
		$this->linkNewTags();
 | 
						|
 | 
						|
		echo '
 | 
						|
				</div>';
 | 
						|
 | 
						|
		$this->photoMeta();
 | 
						|
 | 
						|
		echo '
 | 
						|
				<script type="text/javascript" src="', BASEURL, '/js/photonav.js"></script>';
 | 
						|
	}
 | 
						|
 | 
						|
	private function photo()
 | 
						|
	{
 | 
						|
		echo '
 | 
						|
				<div id="photo_frame">
 | 
						|
					<a href="', $this->photo->getUrl(), '">';
 | 
						|
 | 
						|
		if ($this->photo->isPortrait())
 | 
						|
			echo '
 | 
						|
						<img src="', $this->photo->getThumbnailUrl(null, 960), '" alt="">';
 | 
						|
		else
 | 
						|
			echo '
 | 
						|
						<img src="', $this->photo->getThumbnailUrl(1280, null), '" alt="">';
 | 
						|
 | 
						|
		echo '
 | 
						|
					</a>
 | 
						|
				</div>';
 | 
						|
	}
 | 
						|
 | 
						|
	private function photoNav()
 | 
						|
	{
 | 
						|
		if (false) // $previous_post = $this->post->getPreviousPostUrl())
 | 
						|
			echo '
 | 
						|
				<a href="', $previous_post, '" id="previous_photo"><em>Previous photo</em></a>';
 | 
						|
		else
 | 
						|
			echo '
 | 
						|
				<span id="previous_photo"><em>Previous photo</em></span>';
 | 
						|
 | 
						|
		if (false) //$this->post->getNextPostUrl())
 | 
						|
			echo '
 | 
						|
				<a href="', $next_post, '" id="next_photo"><em>Next photo</em></a>';
 | 
						|
		else
 | 
						|
			echo '
 | 
						|
				<span id="next_photo"><em>Next photo</em></span>';
 | 
						|
	}
 | 
						|
 | 
						|
	private function photoMeta()
 | 
						|
	{
 | 
						|
		echo '
 | 
						|
				<div id="photo_exif_box">
 | 
						|
					<h3>EXIF</h3>
 | 
						|
					<dl class="photo_meta">';
 | 
						|
 | 
						|
		if (!empty($this->exif->created_timestamp))
 | 
						|
			echo '
 | 
						|
						<dt>Date Taken</dt>
 | 
						|
						<dd>', date("j M Y, H:i:s", $this->exif->created_timestamp), '</dd>';
 | 
						|
 | 
						|
		if (!empty($this->exif->camera))
 | 
						|
			echo '
 | 
						|
						<dt>Model</dt>
 | 
						|
						<dd>', $this->exif->camera, '</dd>';
 | 
						|
 | 
						|
		if (!empty($this->exif->shutter_speed))
 | 
						|
			echo '
 | 
						|
						<dt>Shutter Speed</dt>
 | 
						|
						<dd>', $this->exif->shutterSpeedFraction(), '</dd>';
 | 
						|
 | 
						|
		if (!empty($this->exif->aperture))
 | 
						|
			echo '
 | 
						|
						<dt>Aperture</dt>
 | 
						|
						<dd>f/', number_format($this->exif->aperture, 1), '</dd>';
 | 
						|
 | 
						|
		if (!empty($this->exif->focal_length))
 | 
						|
			echo '
 | 
						|
						<dt>Focal Length</dt>
 | 
						|
						<dd>', $this->exif->focal_length, ' mm</dd>';
 | 
						|
 | 
						|
		if (!empty($this->exif->iso))
 | 
						|
			echo '
 | 
						|
						<dt>ISO Speed</dt>
 | 
						|
						<dd>', $this->exif->iso, '</dd>';
 | 
						|
 | 
						|
		echo '
 | 
						|
					</dl>
 | 
						|
				</div>';
 | 
						|
	}
 | 
						|
 | 
						|
	private function taggedPeople()
 | 
						|
	{
 | 
						|
		echo '
 | 
						|
					<h3>Tags</h3>
 | 
						|
					<ul>';
 | 
						|
 | 
						|
		foreach ($this->photo->getTags() as $tag)
 | 
						|
		{
 | 
						|
			echo '
 | 
						|
						<li>
 | 
						|
							<a rel="tag" title="View all posts tagged ', $tag->tag, '" href="', $tag->getUrl(), '" class="entry-tag">', $tag->tag, '</a>
 | 
						|
						</li>';
 | 
						|
		}
 | 
						|
 | 
						|
		echo '
 | 
						|
					</ul>';
 | 
						|
	}
 | 
						|
 | 
						|
	private function linkNewTags()
 | 
						|
	{
 | 
						|
		echo '
 | 
						|
				<div>
 | 
						|
					<h3>Link tags</h3>
 | 
						|
					<ul id="tag_list">
 | 
						|
						<li id="new_tag_container"><input type="text" id="new_tag" placeholder="Type to link a new tag"></li>
 | 
						|
					</ul>
 | 
						|
				</div>
 | 
						|
				<script type="text/javascript" src="', BASEURL, '/js/ajax.js"></script>
 | 
						|
				<script type="text/javascript" src="', BASEURL, '/js/autosuggest.js"></script>
 | 
						|
				<script type="text/javascript">
 | 
						|
					setTimeout(function() {
 | 
						|
						var tag_autosuggest = new TagAutoSuggest({
 | 
						|
							inputElement: "new_tag",
 | 
						|
							listElement: "tag_list",
 | 
						|
							baseUrl: "', BASEURL, '",
 | 
						|
							appendCallback: function(item) {
 | 
						|
								if (document.getElementById("linked_tag_" + item.id_tag)) {
 | 
						|
									return;
 | 
						|
								}
 | 
						|
 | 
						|
								var newCheck = document.createElement("input");
 | 
						|
								newCheck.type = "checkbox";
 | 
						|
								newCheck.name = "tag[" + item.id_tag + "]";
 | 
						|
								newCheck.id = "linked_tag_" + item.id_tag;
 | 
						|
								newCheck.title = "Uncheck to delete";
 | 
						|
								newCheck.checked = "checked";
 | 
						|
 | 
						|
								var newNode = document.createElement("li");
 | 
						|
								newNode.appendChild(newCheck);
 | 
						|
 | 
						|
								var newLabel = document.createTextNode(item.label);
 | 
						|
								newNode.appendChild(newLabel);
 | 
						|
 | 
						|
								var list = document.getElementById("tag_list");
 | 
						|
								var input = document.getElementById("new_tag_container");
 | 
						|
								list.insertBefore(newNode, input);
 | 
						|
							}
 | 
						|
						});
 | 
						|
					}, 100);
 | 
						|
				</script>';
 | 
						|
	}
 | 
						|
 | 
						|
	public function setExif(EXIF $exif)
 | 
						|
	{
 | 
						|
		$this->exif = $exif;
 | 
						|
	}
 | 
						|
}
 |