forked from Public/pics
200 lines
4.6 KiB
PHP
200 lines
4.6 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;
|
|
private $previous_photo_url = '';
|
|
private $next_photo_url = '';
|
|
|
|
public function __construct(Image $photo)
|
|
{
|
|
$this->photo = $photo;
|
|
}
|
|
|
|
public function setPreviousPhotoUrl($url)
|
|
{
|
|
$this->previous_photo_url = $url;
|
|
}
|
|
|
|
public function setNextPhotoUrl($url)
|
|
{
|
|
$this->next_photo_url = $url;
|
|
}
|
|
|
|
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 ($this->previous_photo_url)
|
|
echo '
|
|
<a href="', $this->previous_photo_url, '" id="previous_photo"><em>Previous photo</em></a>';
|
|
else
|
|
echo '
|
|
<span id="previous_photo"><em>Previous photo</em></span>';
|
|
|
|
if ($this->next_photo_url)
|
|
echo '
|
|
<a href="', $this->next_photo_url, '" 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>';
|
|
|
|
echo '
|
|
<dt>Uploaded by</dt>
|
|
<dd>', $this->photo->getAuthor()->getfullName(), '</dd>';
|
|
|
|
if (!empty($this->exif->camera))
|
|
echo '
|
|
<dt>Camera 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;
|
|
}
|
|
}
|