forked from Public/pics
Dennis Brentjes
16ec547064
The ConfirmDelete page now uses parts of the photopage. The Confirmation dialog is its own template which is based on Alert. The database now updates the album thumb to the most recent addition to the album, when the album thumb asset is being deleted. When there are no pictures left in the album 0 will be set.
205 lines
4.6 KiB
PHP
205 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
|
|
{
|
|
protected $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>';
|
|
}
|
|
|
|
protected 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, '/', $this->photo->getSlug(), '?confirm_delete">Delete</a>
|
|
</div>';
|
|
}
|
|
}
|