forked from Public/pics
Dennis Brentjes
344db6e4c5
The Delete button is non functional yet and is only available for admins and the photo owner.
205 lines
4.7 KiB
PHP
205 lines
4.7 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 = '';
|
|
private $is_asset_owner = false;
|
|
|
|
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;
|
|
}
|
|
|
|
public function setIsAssetOwner($flag) {
|
|
$this->is_asset_owner = $flag;
|
|
}
|
|
|
|
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();
|
|
|
|
if($this->is_asset_owner) {
|
|
$this->addUserActions();
|
|
}
|
|
|
|
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 id="tag_list">';
|
|
|
|
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>
|
|
<p style="position: relative"><input type="text" id="new_tag" placeholder="Type to link a new tag"></p>
|
|
</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) {
|
|
var request = new HttpRequest("post", "', $this->photo->getPageUrl(), '",
|
|
"id_tag=" + item.id_tag, function(response) {
|
|
var newNode = document.createElement("li");
|
|
var newLabel = document.createTextNode(item.label);
|
|
newNode.appendChild(newLabel);
|
|
|
|
var list = document.getElementById("tag_list");
|
|
list.appendChild(newNode);
|
|
}, this);
|
|
}
|
|
});
|
|
}, 100);
|
|
</script>';
|
|
}
|
|
|
|
public function setExif(EXIF $exif)
|
|
{
|
|
$this->exif = $exif;
|
|
}
|
|
|
|
public function addUserActions()
|
|
{
|
|
echo '
|
|
<div id=user_actions_box>
|
|
<h3>Actions</h3>
|
|
<a class="btn btn-red" href="', BASEURL, '/editasset/?id=', $this->photo->getId(), '&delete">Delete asset</a>
|
|
</div>';
|
|
}
|
|
}
|