554 lines
21 KiB
PHP
554 lines
21 KiB
PHP
<?php
|
||
/**
|
||
* DokuWiki Bootstrap3 Template: Image Detail Page
|
||
*
|
||
* @link http://dokuwiki.org/template:bootstrap3
|
||
* @author Andreas Gohr <andi@splitbrain.org>
|
||
* @author Anika Henke <anika@selfthinker.org>
|
||
* @author Giuseppe Di Terlizzi <giuseppe.diterlizzi@gmail.com>
|
||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||
*/
|
||
|
||
if (!defined('DOKU_INC')) die(); // must be run from within DokuWiki
|
||
|
||
require_once('tpl/global.php');
|
||
require_once('tpl/functions.php');
|
||
|
||
global $ACT;
|
||
global $conf;
|
||
global $ERROR;
|
||
global $IMG;
|
||
global $INPUT;
|
||
global $lang;
|
||
global $TPL;
|
||
global $REV;
|
||
|
||
header('X-UA-Compatible: IE=edge,chrome=1');
|
||
|
||
|
||
$metadata = array(
|
||
|
||
'exif' => array(
|
||
'Exif.ImageDescription',
|
||
'Exif.Make',
|
||
'Exif.Model',
|
||
'Exif.Orientation',
|
||
'Exif.XResolution',
|
||
'Exif.YResolution',
|
||
'Exif.ResolutionUnit',
|
||
'Exif.Software',
|
||
'Exif.DateTime',
|
||
'Exif.Artist',
|
||
'Exif.WhitePoint',
|
||
'Exif.PrimaryChromaticities',
|
||
'Exif.YCbCrCoefficients',
|
||
'Exif.YCbCrSubSampling',
|
||
'Exif.YCbCrPositioning',
|
||
'Exif.ReferenceBlackWhite',
|
||
'Exif.Copyright',
|
||
'Exif.ExifIFDOffset',
|
||
'Exif.GPSIFDOffset',
|
||
'Exif.TIFFNewSubfileType',
|
||
'Exif.TIFFSubfileType',
|
||
'Exif.TIFFImageWidth',
|
||
'Exif.TIFFImageHeight',
|
||
'Exif.TIFFBitsPerSample',
|
||
'Exif.TIFFCompression',
|
||
'Exif.TIFFPhotometricInterpretation',
|
||
'Exif.TIFFThreshholding',
|
||
'Exif.TIFFCellWidth',
|
||
'Exif.TIFFCellLength',
|
||
'Exif.TIFFFillOrder',
|
||
'Exif.TIFFImageDescription',
|
||
'Exif.TIFFMake',
|
||
'Exif.TIFFModel',
|
||
'Exif.TIFFStripOffsets',
|
||
'Exif.TIFFOrientation',
|
||
'Exif.TIFFSamplesPerPixel',
|
||
'Exif.TIFFRowsPerStrip',
|
||
'Exif.TIFFStripByteCounts',
|
||
'Exif.TIFFMinSampleValue',
|
||
'Exif.TIFFMaxSampleValue',
|
||
'Exif.TIFFXResolution',
|
||
'Exif.TIFFYResolution',
|
||
'Exif.TIFFPlanarConfiguration',
|
||
'Exif.TIFFGrayResponseUnit',
|
||
'Exif.TIFFGrayResponseCurve',
|
||
'Exif.TIFFResolutionUnit',
|
||
'Exif.TIFFSoftware',
|
||
'Exif.TIFFDateTime',
|
||
'Exif.TIFFArtist',
|
||
'Exif.TIFFHostComputer',
|
||
'Exif.TIFFColorMap',
|
||
'Exif.TIFFExtraSamples',
|
||
'Exif.TIFFJFIFOffset',
|
||
'Exif.TIFFJFIFLength',
|
||
'Exif.TIFFYCbCrCoefficients',
|
||
'Exif.TIFFYCbCrSubSampling',
|
||
'Exif.YCbCrPositioning',
|
||
'Exif.ReferenceBlackWhite',
|
||
'Exif.Copyright',
|
||
'Exif.ExifIFDOffset',
|
||
'Exif.GPSIFDOffset',
|
||
'Exif.TIFFNewSubfileType',
|
||
'Exif.TIFFSubfileType',
|
||
'Exif.TIFFImageWidth',
|
||
'Exif.TIFFImageHeight',
|
||
'Exif.TIFFBitsPerSample',
|
||
'Exif.TIFFCompression',
|
||
'Exif.TIFFPhotometricInterpretation',
|
||
'Exif.TIFFThreshholding',
|
||
'Exif.TIFFCellWidth',
|
||
'Exif.TIFFCellLength',
|
||
'Exif.TIFFFillOrder',
|
||
'Exif.TIFFImageDescription',
|
||
'Exif.TIFFMake',
|
||
'Exif.TIFFModel',
|
||
'Exif.TIFFStripOffsets',
|
||
'Exif.TIFFOrientation',
|
||
'Exif.TIFFSamplesPerPixel',
|
||
'Exif.TIFFRowsPerStrip',
|
||
'Exif.TIFFStripByteCounts',
|
||
'Exif.TIFFMinSampleValue',
|
||
'Exif.TIFFMaxSampleValue',
|
||
'Exif.TIFFXResolution',
|
||
'Exif.TIFFYResolution',
|
||
'Exif.TIFFPlanarConfiguration',
|
||
'Exif.TIFFGrayResponseUnit',
|
||
'Exif.TIFFGrayResponseCurve',
|
||
'Exif.TIFFResolutionUnit',
|
||
'Exif.TIFFSoftware',
|
||
'Exif.TIFFDateTime',
|
||
'Exif.TIFFArtist',
|
||
'Exif.TIFFHostComputer',
|
||
'Exif.TIFFColorMap',
|
||
'Exif.TIFFExtraSamples',
|
||
'Exif.TIFFJFIFOffset',
|
||
'Exif.TIFFJFIFLength',
|
||
'Exif.TIFFYCbCrCoefficients',
|
||
'Exif.TIFFYCbCrSubSampling',
|
||
'Exif.TIFFYCbCrPositioning',
|
||
'Exif.TIFFReferenceBlackWhite',
|
||
'Exif.TIFFCopyright',
|
||
'Exif.TIFFUserComment',
|
||
'Exif.ExposureTime',
|
||
'Exif.FNumber',
|
||
'Exif.ExposureProgram',
|
||
'Exif.SpectralSensitivity',
|
||
'Exif.ISOSpeedRatings',
|
||
'Exif.OECF',
|
||
'Exif.EXIFVersion',
|
||
'Exif.DatetimeOriginal',
|
||
'Exif.DatetimeDigitized',
|
||
'Exif.ComponentsConfiguration',
|
||
'Exif.CompressedBitsPerPixel',
|
||
'Exif.ShutterSpeedValue',
|
||
'Exif.ApertureValue',
|
||
'Exif.BrightnessValue',
|
||
'Exif.ExposureBiasValue',
|
||
'Exif.MaxApertureValue',
|
||
'Exif.SubjectDistance',
|
||
'Exif.MeteringMode',
|
||
'Exif.LightSource',
|
||
'Exif.Flash',
|
||
'Exif.FocalLength',
|
||
//'Exif.MakerNote',
|
||
'Exif.UserComment',
|
||
'Exif.SubSecTime',
|
||
'Exif.SubSecTimeOriginal',
|
||
'Exif.SubSecTimeDigitized',
|
||
'Exif.FlashPixVersion',
|
||
'Exif.ColorSpace',
|
||
'Exif.PixelXDimension',
|
||
'Exif.PixelYDimension',
|
||
'Exif.RelatedSoundFile',
|
||
'Exif.InteropIFDOffset',
|
||
'Exif.FlashEnergy',
|
||
'Exif.SpatialFrequencyResponse',
|
||
'Exif.FocalPlaneXResolution',
|
||
'Exif.FocalPlaneYResolution',
|
||
'Exif.FocalPlaneResolutionUnit',
|
||
'Exif.SubjectLocation',
|
||
'Exif.ExposureIndex',
|
||
'Exif.SensingMethod',
|
||
'Exif.FileSource',
|
||
'Exif.SceneType',
|
||
'Exif.CFAPattern',
|
||
'Exif.InteroperabilityIndex',
|
||
'Exif.InteroperabilityVersion',
|
||
'Exif.RelatedImageFileFormat',
|
||
'Exif.RelatedImageWidth',
|
||
'Exif.RelatedImageLength',
|
||
'Exif.GPSVersionID',
|
||
'Exif.GPSLatitudeRef',
|
||
'Exif.GPSLatitude',
|
||
'Exif.GPSLongitudeRef',
|
||
'Exif.GPSLongitude',
|
||
'Exif.GPSAltitudeRef',
|
||
'Exif.GPSAltitude',
|
||
'Exif.GPSTimeStamp',
|
||
'Exif.GPSSatellites',
|
||
'Exif.GPSStatus',
|
||
'Exif.GPSMeasureMode',
|
||
'Exif.GPSDOP',
|
||
'Exif.GPSSpeedRef',
|
||
'Exif.GPSSpeed',
|
||
'Exif.GPSTrackRef',
|
||
'Exif.GPSTrack',
|
||
'Exif.GPSImgDirectionRef',
|
||
'Exif.GPSImgDirection',
|
||
'Exif.GPSMapDatum',
|
||
'Exif.GPSDestLatitudeRef',
|
||
'Exif.GPSDestLatitude',
|
||
'Exif.GPSDestLongitudeRef',
|
||
'Exif.GPSDestLongitude',
|
||
'Exif.GPSDestBearingRef',
|
||
'Exif.GPSDestBearing',
|
||
'Exif.GPSDestDistanceRef',
|
||
'Exif.GPSDestDistance',
|
||
),
|
||
|
||
'iptc' => array(
|
||
'Iptc.SuplementalCategories',
|
||
'Iptc.Keywords',
|
||
'Iptc.Caption',
|
||
'Iptc.CaptionWriter',
|
||
'Iptc.Headline',
|
||
'Iptc.SpecialInstructions',
|
||
'Iptc.Category',
|
||
'Iptc.Byline',
|
||
'Iptc.BylineTitle',
|
||
'Iptc.Credit',
|
||
'Iptc.Source',
|
||
'Iptc.CopyrightNotice',
|
||
'Iptc.ObjectName',
|
||
'Iptc.City',
|
||
'Iptc.Province State',
|
||
'Iptc.CountryName',
|
||
'Iptc.OriginalTransmissionReference',
|
||
'Iptc.DateCreated',
|
||
'Iptc.CopyrightFlag',
|
||
),
|
||
);
|
||
|
||
|
||
$maxwidth = 800;
|
||
$maxheight = 600;
|
||
|
||
$originalwidth = $w = (int) tpl_img_getTag('File.Width');
|
||
$originalheight = $h = (int) tpl_img_getTag('File.Height');
|
||
|
||
//resize to given max values
|
||
$ratio = 1;
|
||
|
||
if ($w >= $h) {
|
||
if ($maxwidth && $w >= $maxwidth) {
|
||
$ratio = $maxwidth / $w;
|
||
} elseif ($maxheight && $h > $maxheight) {
|
||
$ratio = $maxheight / $h;
|
||
}
|
||
} else {
|
||
if ($maxheight && $h >= $maxheight) {
|
||
$ratio = $maxheight / $h;
|
||
} elseif ($maxwidth && $w > $maxwidth) {
|
||
$ratio = $maxwidth / $w;
|
||
}
|
||
}
|
||
|
||
if ($ratio) {
|
||
$w = floor($ratio * $w);
|
||
$h = floor($ratio * $h);
|
||
}
|
||
|
||
$other_sizes = array();
|
||
|
||
foreach (array(0.1, 0.25, 0.5, 0.75, 1) as $ratio) {
|
||
$other_sizes[] = array(
|
||
'w' => floor($ratio * $originalwidth),
|
||
'h' => floor($ratio * $originalheight),
|
||
'ratio' => $ratio,
|
||
);
|
||
}
|
||
|
||
$show_metadata = false;
|
||
|
||
?><!DOCTYPE html>
|
||
<html xmlns="http://www.w3.org/1999/xhtml" lang="<?php echo $conf['lang']?>" dir="<?php echo $lang['direction'] ?>" class="no-js">
|
||
<head>
|
||
<meta charset="UTF-8" />
|
||
<title><?php echo hsc(tpl_img_getTag('IPTC.Headline',$IMG))?> [<?php echo strip_tags($conf['title'])?>]</title>
|
||
<script>(function(H){H.className=H.className.replace(/\bno-js\b/,'js')})(document.documentElement)</script>
|
||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||
<?php
|
||
|
||
if ($TPL->getConf('themeByNamespace')) {
|
||
echo '<link href="' . tpl_basedir() . 'css.php?id='. $ID .'" rel="stylesheet" />';
|
||
}
|
||
|
||
echo tpl_favicon(array('favicon', 'mobile'));
|
||
tpl_includeFile('meta.html');
|
||
tpl_metaheaders();
|
||
|
||
?>
|
||
<!--[if lt IE 9]>
|
||
<script type="text/javascript" src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
|
||
<script type="text/javascript" src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
|
||
<![endif]-->
|
||
</head>
|
||
|
||
<body class="<?php echo $TPL->getClasses() ?>" data-img-id="<?php echo $IMG ?>"><div class="dokuwiki"><?php /* CSS class for Plugins and user styles */ ?>
|
||
|
||
<header id="dokuwiki__header" class="dw-container dokuwiki container<?php echo ($TPL->getConf('fluidContainer')) ? '-fluid' : '' ?>">
|
||
<?php
|
||
|
||
tpl_includeFile('topheader.html');
|
||
|
||
// Top-Header DokuWiki page
|
||
if ($ACT == 'show') echo $TPL->includePage('topheader');
|
||
|
||
require_once('tpl/navbar.php');
|
||
|
||
tpl_includeFile('header.html');
|
||
|
||
// Header DokuWiki page
|
||
if ($ACT == 'show') echo $TPL->includePage('header');
|
||
|
||
?>
|
||
</header>
|
||
|
||
<a name="dokuwiki__top" id="dokuwiki__top"></a>
|
||
|
||
<main role="main" class="dw-container pb-5 dokuwiki container<?php echo ($TPL->getConf('fluidContainer')) ? '-fluid mx-5' : '' ?>">
|
||
|
||
<div id="dokuwiki__pageheader">
|
||
|
||
<?php tpl_includeFile('social.html') ?>
|
||
|
||
<?php require_once('tpl/breadcrumbs.php'); ?>
|
||
|
||
<p class="text-right">
|
||
<?php if($TPL->getConf('showPageId')): ?>
|
||
<span class="pageId ml-1 label label-primary"><?php echo hsc(tpl_img_getTag('IPTC.Headline',$IMG)); ?></span>
|
||
<?php endif; ?>
|
||
</p>
|
||
|
||
<div id="dw__msgarea" class="small">
|
||
<?php $TPL->getMessageArea() ?>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div class="">
|
||
|
||
<article id="dokuwiki__detail">
|
||
|
||
<?php require_once('tpl/page-tools.php'); // Page Tools ?>
|
||
|
||
<div class="dokuwiki panel panel-default">
|
||
|
||
<div class="panel-heading">
|
||
<h3 class="panel-title">
|
||
<?php echo iconify('mdi:image', array('class' => 'text-muted')) ?> <?php echo nl2br(hsc(tpl_img_getTag('simple.title'))); ?>
|
||
</h3>
|
||
</div>
|
||
|
||
<div class="page panel-body">
|
||
|
||
<?php require_once('tpl/page-icons.php'); ?>
|
||
|
||
<?php if ($ERROR): print '<h1>' . iconify('mdi:alert', array('class' => 'mr-2', 'style' => 'color:orange')) . $ERROR . '</h1>'; ?>
|
||
<?php else: ?>
|
||
<?php if ($REV) echo p_locale_xhtml('showrev'); ?>
|
||
|
||
<div class="row">
|
||
<div class="col-sm-8">
|
||
|
||
<p class="px-2">
|
||
<?php tpl_img($maxwidth, $maxheight); /* the image; parameters: maximum width, maximum height (and more) */ ?>
|
||
</p>
|
||
|
||
<p class="small my-2">
|
||
<?php echo iconify('mdi:image-size-select-large'); ?> <?php echo tpl_getLang('preview_size') ?>: <a href="<?php echo ml($IMG, array('cache' => $INPUT->str('cache'), 'rev' => $REV, 'w' => $w, 'h' => $h), true, '&'); ?>"><?php echo $w; ?> × <?php echo $h; ?></a> pixels.
|
||
<?php echo tpl_getLang('other_resolutions') ?>: <?php foreach ($other_sizes as $size): ?> <a href="<?php echo ml($IMG, array('cache' => $INPUT->str('cache'), 'rev' => $REV, 'w' => $size['w'], 'h' => $size['h']), true, '&'); ?>" title="<?php echo floor($size['ratio'] * 100); ?>%"><?php echo $size['w']; ?> × <?php echo $size['h']; ?></a> pixels <?php endforeach; ?>
|
||
</p>
|
||
|
||
<p class="image-info my-3">
|
||
<?php echo iconify('mdi:image'); ?> <a href="<?php echo ml($IMG, array('cache'=> $INPUT->str('cache'),'rev'=>$REV), true, '&'); ?>" target="_blank" title="<?php echo $lang['js']['mediadirect']; ?>"><?php echo hsc(tpl_img_getTag('IPTC.Headline',$IMG)); ?></a> ( <?php echo tpl_img_getTag('File.Width'); ?> × <?php echo tpl_img_getTag('File.Height'); ?> pixels )
|
||
</p>
|
||
</div>
|
||
<div class="col-sm-4">
|
||
|
||
<div class="image-information">
|
||
|
||
<h3 class="pb-4">
|
||
<?php echo iconify('mdi:information', array('class' => 'text-primary')) ?> Information
|
||
</h3>
|
||
|
||
<div class="table-responsive">
|
||
<table class="table table-condensed table-striped">
|
||
<tbody>
|
||
<?php
|
||
$tags = tpl_get_img_meta();
|
||
|
||
foreach($tags as $tag) {
|
||
|
||
$label = $lang[$tag['langkey']];
|
||
if(!$label) $label = $tag['langkey'] . ':';
|
||
|
||
echo '<tr><th>'.$label.'</th><td>';
|
||
if ($tag['type'] == 'date') {
|
||
echo dformat($tag['value']);
|
||
} else {
|
||
echo hsc($tag['value']);
|
||
}
|
||
echo '</td></tr>';
|
||
}
|
||
?>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
|
||
<?php
|
||
//Comment in for Debug
|
||
//dbg(tpl_img_getTag('Simple.Raw'));
|
||
?>
|
||
|
||
</div>
|
||
|
||
<div class="image-reference pt-4">
|
||
|
||
<h3 class="pb-4">
|
||
<?php echo iconify('mdi:link-variant'); ?> <?php echo $lang['reference']; ?>
|
||
</h3>
|
||
<?php
|
||
$media_usage = ft_mediause($IMG, true);
|
||
if (count($media_usage) > 0) {
|
||
echo '<ul>';
|
||
foreach($media_usage as $path){
|
||
echo '<li>'.html_wikilink($path).'</li>';
|
||
}
|
||
echo '</ul>';
|
||
} else {
|
||
echo '<p>'.$lang['nothingfound'].'</p>';
|
||
}
|
||
?>
|
||
|
||
<?php if (isset($lang['media_acl_warning'])): // This message is available from release 2015-08-10 "Detritus" ?>
|
||
<div class="alert alert-warning">
|
||
<?php echo iconify('mdi:alert'); ?> <?php echo $lang['media_acl_warning']; ?>
|
||
</div>
|
||
<?php endif; ?>
|
||
|
||
</div>
|
||
|
||
<div class="image-metadata pt-4 hide">
|
||
|
||
<h3 class="pb-4">
|
||
<?php echo iconify('mdi:code-tags', array('class' => 'text-success')); ?> Metadata
|
||
</h3>
|
||
|
||
<div class="metadata">
|
||
<ul class="nav nav-tabs">
|
||
<li class="active"><a data-toggle="tab" href="#exif">Exif</a></li>
|
||
<li><a data-toggle="tab" href="#iptc">IPTC</a></li>
|
||
</ul>
|
||
<div class="tab-content">
|
||
<?php $active = 'active in'; foreach ($metadata as $section => $items): ?>
|
||
<div id="<?php echo $section; ?>" class="tab-pane fade <?php echo $active; ?>">
|
||
<div class="table-responsive">
|
||
<table class="table table-condensed table-striped">
|
||
<?php
|
||
foreach ($items as $tag) {
|
||
|
||
$value = tpl_img_getTag($tag);
|
||
$name = str_ireplace("$section.", '', $tag);
|
||
|
||
if ($value !== '') {
|
||
echo "<tr><th title='$tag'>$name</th><td>$value</td></tr>";
|
||
$show_metadata = true;
|
||
}
|
||
|
||
}
|
||
|
||
$active = '';
|
||
|
||
?>
|
||
</table>
|
||
</div>
|
||
</div>
|
||
<?php endforeach; ?>
|
||
</div>
|
||
</div>
|
||
|
||
<?php if ($show_metadata): ?>
|
||
<script>
|
||
window.addEventListener('DOMContentLoaded', function() {
|
||
jQuery('.image-metadata').removeClass('hide');
|
||
});
|
||
</script>
|
||
<?php endif; ?>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
<?php endif; ?>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
<div class="small text-right">
|
||
|
||
<?php if ($TPL->getConf('showPageInfo')): ?>
|
||
<span class="docInfo">
|
||
<?php $TPL->getPageInfo() /* 'Last modified' etc */ ?>
|
||
</span>
|
||
<?php endif ?>
|
||
|
||
<?php if ($TPL->getConf('showLoginOnFooter')): ?>
|
||
<span class="loginLink hidden-print">
|
||
<?php
|
||
if ($login_item = $TPL->getToolMenuItem('user', 'login')) {
|
||
echo '<a '. buildAttributes($login_item->getLinkAttributes()) .'>'. inlineSVG($login_item->getSvg()) . ' ' . hsc($login_item->getLabel()) .'</a>';
|
||
}
|
||
?>
|
||
</span>
|
||
<?php endif; ?>
|
||
|
||
</div>
|
||
|
||
</article>
|
||
</div>
|
||
|
||
</main>
|
||
|
||
<footer id="dw__footer" class="dw-container py-5 dokuwiki container<?php echo ($TPL->getConf('fluidContainer')) ? '-fluid' : '' ?>">
|
||
<?php
|
||
// Footer hook
|
||
tpl_includeFile('footer.html');
|
||
|
||
// Footer DokuWiki page
|
||
require_once('tpl/footer.php');
|
||
|
||
// Cookie-Law banner
|
||
require_once('tpl/cookielaw.php');
|
||
?>
|
||
</footer>
|
||
|
||
<a href="#dokuwiki__top" class="back-to-top hidden-print btn btn-default btn-sm" title="<?php echo $lang['skip_to_content'] ?>" accesskey="t">
|
||
<?php echo iconify('mdi:chevron-up'); ?>
|
||
</a>
|
||
|
||
<div id="screen__mode"><?php /* helper to detect CSS media query in script.js */ ?>
|
||
<span class="visible-xs-block"></span>
|
||
<span class="visible-sm-block"></span>
|
||
<span class="visible-md-block"></span>
|
||
<span class="visible-lg-block"></span>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</body>
|
||
</html>
|