1405 lines
70 KiB
PHP
1405 lines
70 KiB
PHP
<?php # $Id$
|
|
|
|
if (IN_serendipity !== true) {
|
|
die ("Don't hack!");
|
|
}
|
|
|
|
|
|
// Probe for a language include with constants. Still include defines later on, if some constants were missing
|
|
$probelang = dirname(__FILE__) . '/' . $serendipity['charset'] . 'lang_' . $serendipity['lang'] . '.inc.php';
|
|
if (file_exists($probelang)) {
|
|
include $probelang;
|
|
}
|
|
|
|
include dirname(__FILE__) . '/lang_en.inc.php';
|
|
|
|
class serendipity_event_usergallery extends serendipity_event
|
|
{
|
|
|
|
function introspect(&$propbag)
|
|
{
|
|
global $serendipity;
|
|
|
|
$propbag->add('name', PLUGIN_EVENT_USERGALLERY_TITLE);
|
|
$propbag->add('description', PLUGIN_EVENT_USERGALLERY_DESC);
|
|
$propbag->add('stackable', true);
|
|
$propbag->add('author', 'Arnan de Gans, Matthew Groeninger, and Stefan Willoughby');
|
|
$propbag->add('version', '2.55');
|
|
$propbag->add('requirements', array(
|
|
'serendipity' => '0.8',
|
|
'smarty' => '2.6.7',
|
|
'php' => '4.1.0'
|
|
));
|
|
$propbag->add('event_hooks', array(
|
|
'css' => true,
|
|
'entry_display' => true,
|
|
'entries_header' => true,
|
|
'genpage' => true,
|
|
'frontend_rss' => true,
|
|
'frontend_configure' => true
|
|
));
|
|
$propbag->add('groups', array('IMAGES'));
|
|
$propbag->add('configuration', array('title','num_cols','subpage','frontpage','permalink','style','base_directory','dir_list','show_1lvl_sub',
|
|
'display_dir_tree','dir_tab','images_per_page','image_order','intro','image_display','image_strict','fixed_width','image_width','feed_width','feed_linked_only','feed_body',
|
|
'exif_show_data', 'exif_data','show_media_properties','media_properties', 'linked_entries'));
|
|
}
|
|
|
|
function introspect_config_item($name, &$propbag)
|
|
{
|
|
global $serendipity;
|
|
switch ($name) {
|
|
|
|
case 'title':
|
|
$propbag->add('type', 'string');
|
|
$propbag->add('name', PLUGIN_EVENT_USERGALLERY_PRETTY_NAME);
|
|
$propbag->add('description', PLUGIN_EVENT_USERGALLERY_PRETTY_DESC);
|
|
$propbag->add('default', PLUGIN_EVENT_USERGALLERY_TITLE);
|
|
break;
|
|
|
|
case 'num_cols':
|
|
$select = array();
|
|
$select["2"] = PLUGIN_EVENT_USERGALLERY_NUMCOLS_TWO;
|
|
$select["3"] = PLUGIN_EVENT_USERGALLERY_NUMCOLS_THREE;
|
|
$select["4"] = PLUGIN_EVENT_USERGALLERY_NUMCOLS_FOUR;
|
|
$select["5"] = PLUGIN_EVENT_USERGALLERY_NUMCOLS_FIVE;
|
|
$propbag->add('type', 'select');
|
|
$propbag->add('name', PLUGIN_EVENT_USERGALLERY_NUMCOLS_NAME);
|
|
$propbag->add('description', PLUGIN_EVENT_USERGALLERY_NUMCOLS_DESC);
|
|
$propbag->add('select_values', $select);
|
|
$propbag->add('default', '2');
|
|
break;
|
|
|
|
case 'subpage':
|
|
$propbag->add('type', 'string');
|
|
$propbag->add('name', PLUGIN_EVENT_USERGALLERY_SUBNAME_NAME);
|
|
$propbag->add('description', PLUGIN_EVENT_USERGALLERY_SUBNAME_DESC);
|
|
$propbag->add('default', 'gallery');
|
|
break;
|
|
|
|
case 'permalink':
|
|
$propbag->add('type', 'string');
|
|
$propbag->add('name', PLUGIN_EVENT_USERGALLERY_PERMALINK_NAME);
|
|
$propbag->add('description', PLUGIN_EVENT_USERGALLERY_PERMALINK_DESC);
|
|
if (version_compare($serendipity['version'], '0.9') < 0) {
|
|
$propbag->add('default', $serendipity['rewrite'] != 'none'
|
|
? $serendipity['serendipityHTTPPath'] . 'gallery.html'
|
|
: $serendipity['serendipityHTTPPath'] . $serendipity['indexFile'] . '?/gallery.html');
|
|
} else {
|
|
$propbag->add('default', $serendipity['rewrite'] != 'none'
|
|
? $serendipity['serendipityHTTPPath'] . 'pages/gallery.html'
|
|
: $serendipity['serendipityHTTPPath'] . $serendipity['indexFile'] . '?/pages/gallery.html');
|
|
}
|
|
break;
|
|
|
|
case 'frontpage':
|
|
$propbag->add('type', 'radio');
|
|
$propbag->add('name', PLUGIN_EVENT_USERGALLERY_FRONTPAGE_NAME);
|
|
$propbag->add('description', PLUGIN_EVENT_USERGALLERY_FRONTPAGE_DESC);
|
|
$propbag->add('radio', array('value' => array('yes','no'),
|
|
'desc' => array(YES,NO)));
|
|
$propbag->add('radio_per_row', '2');
|
|
$propbag->add('default', 'no');
|
|
break;
|
|
|
|
case 'base_directory':
|
|
if ((version_compare($serendipity['version'], '0.9') >= 0) || $this->get_config('style') == "thumbpage") {
|
|
$select['gallery'] = ALL_DIRECTORIES;
|
|
$paths = serendipity_traversePath($serendipity['serendipityPath'] . $serendipity['uploadPath']);
|
|
foreach ( $paths as $folder ) {
|
|
$select[$folder['relpath']] = str_repeat('-', $folder['depth']) . ' '. $folder['name'];
|
|
}
|
|
$propbag->add('type', 'select');
|
|
$propbag->add('name', PLUGIN_EVENT_USERGALLERY_DIRECTORY_NAME);
|
|
$propbag->add('description', PLUGIN_EVENT_USERGALLERY_DIRECTORY_DESC);
|
|
$propbag->add('select_values', $select);
|
|
}
|
|
break;
|
|
|
|
case 'style':
|
|
$select["serendipity"] = PLUGIN_EVENT_USERGALLERY_STYLE_SERENDIPITY;
|
|
$select["thumbpage"] = PLUGIN_EVENT_USERGALLERY_STYLE_THUMBPAGE;
|
|
$propbag->add('type', 'select');
|
|
$propbag->add('name', PLUGIN_EVENT_USERGALLERY_STYLE_NAME);
|
|
$propbag->add('description', PLUGIN_EVENT_USERGALLERY_STYLE_DESC);
|
|
$propbag->add('select_values', $select);
|
|
$propbag->add('default', 'thumbpage');
|
|
break;
|
|
|
|
case 'dir_list':
|
|
if ($this->get_config('style') == 'thumbpage') {
|
|
$propbag->add('type', 'radio');
|
|
$propbag->add('name', PLUGIN_EVENT_USERGALLERY_DIRLIST_NAME);
|
|
$propbag->add('description', PLUGIN_EVENT_USERGALLERY_DIRLIST_DESC);
|
|
$propbag->add('radio', array('value' => array('yes','no'),
|
|
'desc' => array(YES,NO)));
|
|
$propbag->add('radio_per_row', '2');
|
|
$propbag->add('default', 'no');
|
|
}
|
|
break;
|
|
|
|
case 'intro':
|
|
if ($this->get_config('style') == 'thumbpage') {
|
|
$propbag->add('type', 'html');
|
|
$propbag->add('name', PLUGIN_EVENT_USERGALLERY_INTRO);
|
|
$propbag->add('description', '');
|
|
$propbag->add('default', '');
|
|
}
|
|
break;
|
|
|
|
case 'fixed_width':
|
|
if ($this->get_config('style') == 'thumbpage') {
|
|
$propbag->add('type', 'string');
|
|
$propbag->add('name', PLUGIN_EVENT_USERGALLERY_FIXED_WIDTH);
|
|
$propbag->add('description', PLUGIN_EVENT_USERGALLERY_FIXED_DESC);
|
|
$propbag->add('default', '0');
|
|
}
|
|
break;
|
|
|
|
case 'image_width':
|
|
if ($this->get_config('image_display') == 'inpage') {
|
|
$propbag->add('type', 'string');
|
|
$propbag->add('name', PLUGIN_EVENT_USERGALLERY_IMAGE_WIDTH_NAME);
|
|
$propbag->add('description', PLUGIN_EVENT_USERGALLERY_IMAGE_WIDTH_DESC);
|
|
$propbag->add('default', '480');
|
|
}
|
|
break;
|
|
|
|
case 'image_display':
|
|
if ($this->get_config('style') == 'thumbpage') {
|
|
$select["inpage"] = PLUGIN_EVENT_USERGALLERY_IMAGEDISPLAY_INPAGE;
|
|
$select["popup"] = PLUGIN_EVENT_USERGALLERY_IMAGEDISPLAY_POPUP;
|
|
$propbag->add('type', 'select');
|
|
$propbag->add('name', PLUGIN_EVENT_USERGALLERY_IMAGEDISPLAY_NAME);
|
|
$propbag->add('description', PLUGIN_EVENT_USERGALLERY_IMAGEDISPLAY_DESC);
|
|
$propbag->add('select_values', $select);
|
|
$propbag->add('default', 'inpage');
|
|
}
|
|
break;
|
|
|
|
case 'image_strict':
|
|
if ($this->get_config('style') == 'thumbpage') {
|
|
$propbag->add('type', 'radio');
|
|
$propbag->add('name', PLUGIN_EVENT_USERGALLERY_IMAGESTRICT_NAME);
|
|
$propbag->add('description', PLUGIN_EVENT_USERGALLERY_IMAGESTRICT_DESC);
|
|
$propbag->add('radio', array('value' => array('yes','no'),
|
|
'desc' => array(YES,NO)));
|
|
$propbag->add('radio_per_row', '2');
|
|
$propbag->add('default', 'yes');
|
|
}
|
|
break;
|
|
|
|
case 'image_order':
|
|
if ($this->get_config('style') == 'thumbpage') {
|
|
$select["nameacs"] = PLUGIN_EVENT_USERGALLERY_IMAGEORDER_NAMEACS;
|
|
$select["namedesc"] = PLUGIN_EVENT_USERGALLERY_IMAGEORDER_NAMEDESC;
|
|
$select["dateacs"] = PLUGIN_EVENT_USERGALLERY_IMAGEORDER_DATEACS;
|
|
$select["datedesc"] = PLUGIN_EVENT_USERGALLERY_IMAGEORDER_DATEDESC;
|
|
$propbag->add('type', 'select');
|
|
$propbag->add('name', PLUGIN_EVENT_USERGALLERY_IMAGEORDER_NAME);
|
|
$propbag->add('description', PLUGIN_EVENT_USERGALLERY_IMAGEORDER_DESC);
|
|
$propbag->add('select_values', $select);
|
|
$propbag->add('default', 'nameacs');
|
|
}
|
|
break;
|
|
|
|
case 'display_dir_tree':
|
|
if ($this->get_config('style') == 'thumbpage' && $this->get_config('dir_list') == 'yes') {
|
|
$propbag->add('type', 'radio');
|
|
$propbag->add('name', PLUGIN_EVENT_USERGALLERY_DISPLAYDIR_NAME);
|
|
$propbag->add('description', PLUGIN_EVENT_USERGALLERY_DISPLAYDIR_DESC);
|
|
$propbag->add('radio', array('value' => array('yes','no'),
|
|
'desc' => array(YES,NO)));
|
|
$propbag->add('radio_per_row', '2');
|
|
$propbag->add('default', 'no');
|
|
}
|
|
break;
|
|
|
|
case 'dir_tab':
|
|
if ($this->get_config('style') == 'thumbpage' && $this->get_config('dir_list') == 'yes') {
|
|
$propbag->add('type', 'string');
|
|
$propbag->add('name', PLUGIN_EVENT_USERGALLERY_DIRTAB_NAME);
|
|
$propbag->add('description', PLUGIN_EVENT_USERGALLERY_DIRTAB_DESC);
|
|
$propbag->add('default', '10');
|
|
}
|
|
break;
|
|
|
|
case 'show_1lvl_sub':
|
|
if ($this->get_config('style') == 'thumbpage' && $this->get_config('dir_list') == 'yes' && $this->get_config('display_dir_tree','no') == 'no') {
|
|
$propbag->add('type', 'radio');
|
|
$propbag->add('name', PLUGIN_EVENT_USERGALLERY_1SUBLVL_NAME);
|
|
$propbag->add('description', PLUGIN_EVENT_USERGALLERY_1SUBLVL_DESC);
|
|
$propbag->add('radio', array('value' => array('yes','no'),
|
|
'desc' => array(YES,NO)));
|
|
$propbag->add('radio_per_row', '2');
|
|
$propbag->add('default', 'no');
|
|
}
|
|
break;
|
|
|
|
case 'images_per_page':
|
|
if ($this->get_config('style') == 'thumbpage') {
|
|
$propbag->add('type', 'string');
|
|
$propbag->add('name', PLUGIN_EVENT_USERGALLERY_IMAGESPERPAGE_NAME);
|
|
$propbag->add('description', PLUGIN_EVENT_USERGALLERY_IMAGESPERPAGE_DESC);
|
|
$propbag->add('default', '20');
|
|
}
|
|
break;
|
|
|
|
case 'exif_show_data':
|
|
$propbag->add('type', 'radio');
|
|
$propbag->add('name', PLUGIN_EVENT_USERGALLERY_EXIFDATA_SHOW_NAME);
|
|
$propbag->add('description', PLUGIN_EVENT_USERGALLERY_EXIFDATA_SHOW_DESC);
|
|
$propbag->add('radio', array('value' => array('yes','no'),
|
|
'desc' => array(YES,NO)));
|
|
$propbag->add('radio_per_row', '2');
|
|
$propbag->add('default', 'no');
|
|
break;
|
|
|
|
case 'exif_data':
|
|
if ($this->get_config('exif_show_data') == 'yes') {
|
|
$propbag->add('type', 'content');
|
|
$propbag->add('name', PLUGIN_EVENT_USERGALLERY_DISPLAYDIR_NAME);
|
|
$propbag->add('description', PLUGIN_EVENT_USERGALLERY_DISPLAYDIR_DESC);
|
|
$propbag->add('default', $this->makeExifSelector());
|
|
}
|
|
break;
|
|
|
|
case 'feed_width':
|
|
$propbag->add('type', 'string');
|
|
$propbag->add('name', PLUGIN_EVENT_USERGALLERY_RSS_FEED);
|
|
$propbag->add('description', sprintf(PLUGIN_EVENT_USERGALLERY_RSS_FEED_DESC, $serendipity['baseURL'] . 'rss.php?version=2.0&gallery=true'));
|
|
$propbag->add('default', $serendipity['thumbSize']);
|
|
break;
|
|
|
|
case 'feed_linked_only':
|
|
$propbag->add('type', 'boolean');
|
|
$propbag->add('name', PLUGIN_EVENT_USERGALLERY_RSS_FEED_LINKONLY);
|
|
$propbag->add('description', PLUGIN_EVENT_USERGALLERY_RSS_FEED_LINKONLY_DESC);
|
|
$propbag->add('default', 'false');
|
|
break;
|
|
|
|
case 'feed_body':
|
|
$propbag->add('type', 'boolean');
|
|
$propbag->add('name', PLUGIN_EVENT_USERGALLERY_RSS_FEED_BODY);
|
|
$propbag->add('description', PLUGIN_EVENT_USERGALLERY_RSS_FEED_BODY_DESC);
|
|
$propbag->add('default', 'false');
|
|
break;
|
|
|
|
case 'show_media_properties':
|
|
$propbag->add('type', 'radio');
|
|
$propbag->add('name', PLUGIN_EVENT_USERGALLERY_MEDIA_PROPERTIES_SHOW_NAME);
|
|
$propbag->add('description', PLUGIN_EVENT_USERGALLERY_MEDIA_PROPERTIES_SHOW_DESC);
|
|
$propbag->add('radio', array('value' => array('yes','no'),
|
|
'desc' => array(YES,NO)));
|
|
$propbag->add('radio_per_row', '2');
|
|
$propbag->add('default', 'no');
|
|
break;
|
|
|
|
case 'media_properties':
|
|
if ($this->get_config('show_media_properties') == 'yes') {
|
|
$propbag->add('type', 'string');
|
|
$propbag->add('name', PLUGIN_EVENT_USERGALLERY_MEDIA_PROPERTIES_NAME);
|
|
$propbag->add('description', PLUGIN_EVENT_USERGALLERY_MEDIA_PROPERTIES_DESC);
|
|
$propbag->add('default', 'COPYRIGHT:Copyright;TITLE:Title;COMMENT2:Comment');
|
|
}
|
|
break;
|
|
|
|
case 'linked_entries':
|
|
$propbag->add('type', 'boolean');
|
|
$propbag->add('name', PLUGIN_EVENT_USERGALLERY_SHOW_LINKED_ENTRY);
|
|
$propbag->add('description', '');
|
|
$propbag->add('default', 'true');
|
|
break;
|
|
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function &makeExifSelector() {
|
|
global $serendipity;
|
|
|
|
$selector .= '</td></tr>';
|
|
$selector .= '<tr><td style="vertical-align: top"><strong>'.PLUGIN_EVENT_USERGALLERY_EXIFDATA_NAME.'</strong><br />';
|
|
$selector .= '<span style="color: rgb(94, 122, 148); font-size: 8pt;">'.PLUGIN_EVENT_USERGALLERY_EXIFDATA_DESC.'</span><br />';
|
|
$selector .= '<span style="color: rgb(94, 122, 148); font-size: 8pt;">'.PLUGIN_EVENT_USERGALLERY_EXIFDATA_CAMERA.'</span>';
|
|
$selector .= '</td><td style="vertical-align: top">';
|
|
$selector .= '<strong>Options</strong>';
|
|
$selector .= '</td></tr>';
|
|
|
|
if (is_array($serendipity['POST']['plugin']['exifdata'])) {
|
|
//create new array
|
|
$exif_array = array();
|
|
foreach($serendipity['POST']['plugin']['exifdata'] as $key => $value) {
|
|
$exif_array[$key] = $key.'-'.$value;
|
|
}
|
|
|
|
//build new optionstring and save it
|
|
$newexifstring = implode(',', array_values($exif_array));
|
|
$this->set_config('exif_data', $newexifstring);
|
|
//break down the array and rebuild for immediate recycling on the page
|
|
foreach($exif_array as $key => $value) {
|
|
list($newkey, $newvalue) = explode('-', $value);
|
|
$res1_exif_array[] = $newkey;
|
|
$res2_exif_array[] = $newvalue;
|
|
}
|
|
$exif_array = array_combine($res1_exif_array, $res2_exif_array);
|
|
} else {
|
|
//get the optionstring
|
|
$exifsettings = $this->get_config('exif_data','Copyright Notice-no,Camera Make-no,Camera Model-no,Orientation-no,Resolution Unit-no,X Resolution-no,Y Resolution-no,Date and Time-no,YCbCr Positioning-no,Exposure Time-no,Aperture-no,Exposure Program-no,ISO-no,Exif Version-no,Date (Original)-no,Date (Digitized)-no,APEX Exposure Bias-no,APEX Max Aperture-no,Metering Mode-no,Light Source-no,Flash-no,FocalLength-no,User Comment-no,FlashPix Version-no,Colour Space-no,Pixel X Dimension-no,Pixel Y Dimension-no,File Source-no,Special Processing-no,Exposure Mode-no,White Balance-no,Digital Zoom Ratio-no,Scene Capture Type-no,Gain Control-no,Contrast-no,Saturation-no,Sharpness-no,Components Config-no');
|
|
if(!$exifsettings) {
|
|
//return empty array if invalid or non-existant
|
|
$exifsettings = array();
|
|
$selector .= '<tr><td colspan="2" style="color: #f00;">
|
|
An error occured. Your website will function AS NORMAL. But EXIF tags cannot be shown.<br />
|
|
Error: $this->get_config(\'exif_data\') is not fetched from the database properly.
|
|
Please contact support at http://www.s9y.org/forums/.</td></tr>';
|
|
} else {
|
|
//split the string into options
|
|
$exifstring = explode(',', $exifsettings);
|
|
//split the options into name and value
|
|
foreach($exifstring as $key => $value) {
|
|
$display = explode('-', $exifstring[$key]);
|
|
$exif_array[$display[0]] = $display[1];
|
|
}
|
|
}
|
|
}
|
|
|
|
//output options
|
|
foreach($exif_array as $key => $value) {
|
|
$selector .= '<tr><td style="vertical-align: top">'.$key.'</td>';
|
|
$selector .= '<td><input name="serendipity[plugin][exifdata]['.$key.']" type="radio" value="yes"';
|
|
if ($value == "yes") {
|
|
$selector .= ' checked="checked"';
|
|
}
|
|
$selector .= '> ' . YES . ' <input name="serendipity[plugin][exifdata]['.$key.']" type="radio" value="no"';
|
|
if ($value == "no") {
|
|
$selector .= ' checked="checked"';
|
|
}
|
|
$selector .= '> ' . NO . '</td></tr>';
|
|
}
|
|
$selector .= '<tr><td colspan="2" style="border-bottom: 1px solid #000;"> </td></tr>';
|
|
return $selector;
|
|
}
|
|
|
|
function event_hook($event, &$bag, &$eventData, $addData = null) {
|
|
global $serendipity;
|
|
|
|
$hooks = &$bag->get('event_hooks');
|
|
if (isset($hooks[$event])) {
|
|
switch($event) {
|
|
case 'entry_display':
|
|
if ($this->selected()) {
|
|
if (is_array($eventData)) {
|
|
$eventData['clean_page'] = true; // This is important to not display an entry list!
|
|
} else {
|
|
$eventData = array('clean_page' => true);
|
|
}
|
|
}
|
|
return true;
|
|
break;
|
|
|
|
case 'entries_header':
|
|
if ($this->selected()) {
|
|
$this->show();
|
|
}
|
|
return true;
|
|
break;
|
|
|
|
case 'css':
|
|
$out = serendipity_getTemplateFile('serendipity_event_usergallery.css', 'serendipityPath');
|
|
if ($out && $out != 'serendipity_event_usergallery.css') {
|
|
$eventData .= file_get_contents($out);
|
|
} else {
|
|
$eventData .= file_get_contents(dirname(__FILE__) . '/serendipity_event_usergallery.css');
|
|
}
|
|
return true;
|
|
break;
|
|
|
|
case 'frontend_configure':
|
|
if (isset($_REQUEST['gallery'])) {
|
|
// Disallow RSS-caching, because the entry age that is used for caching does not apply here.
|
|
$_GET['nocache'] = $_REQUEST['nocache'] = true;
|
|
// We need to set this variable to circumvent FeedBurner relocation
|
|
$_GET['type'] = 'comments';
|
|
}
|
|
return true;
|
|
break;
|
|
|
|
case 'frontend_rss':
|
|
$this->showRSS($eventData);
|
|
return true;
|
|
break;
|
|
|
|
case 'genpage':
|
|
$args = implode('/', serendipity_getUriArguments($eventData, true));
|
|
|
|
if ((empty($args) || trim($args) == $serendipity['indexFile']) && empty($serendipity['GET']['subpage'])) {
|
|
if ($this->get_config('frontpage','no') == 'yes') {
|
|
$serendipity['GET']['subpage'] = $this->get_config('subpage');
|
|
}
|
|
}
|
|
|
|
if ($serendipity['rewrite'] != 'none') {
|
|
$nice_url = $serendipity['serendipityHTTPPath'] . $args;
|
|
} else {
|
|
$nice_url = $serendipity['serendipityHTTPPath'] . $serendipity['indexFile'] . '?/' . $args;
|
|
}
|
|
if (empty($serendipity['GET']['subpage'])) {
|
|
$serendipity['GET']['subpage'] = $nice_url;
|
|
}
|
|
|
|
if ($this->selected()) {
|
|
if ($this->get_config('base_directory') == 'gallery') {
|
|
// this is to avoid having the word "gallery" as blog title
|
|
$serendipity['head_title'] = preg_replace('@[^a-z0-9]@i', ' ',$this->get_config('title'));
|
|
} else {
|
|
$serendipity['head_title'] = preg_replace('@[^a-z0-9]@i', ' ',$this->get_config('base_directory'));
|
|
}
|
|
$serendipity['head_subtitle'] = $serendipity['blogTitle'];
|
|
}
|
|
return true;
|
|
break;
|
|
|
|
default:
|
|
return false;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
function generate_content(&$title) {
|
|
$title = $this->get_config('title', PLUGIN_EVENT_USERGALLERY_TITLE);
|
|
}
|
|
|
|
function show() {
|
|
global $serendipity;
|
|
|
|
if (!headers_sent()) {
|
|
header('HTTP/1.0 200');
|
|
header('Status: 200');
|
|
}
|
|
|
|
if (!is_object($serendipity['smarty'])) {
|
|
serendipity_smarty_init();
|
|
}
|
|
|
|
//I hate to do this, but there is a condition between 1.0 and 1.1.beta3 which could result in data loss
|
|
if (preg_match('@(1\.1\-alpha|1\.1\-beta1|1\.1\-beta2)@i', $serendipity['version'])) {
|
|
echo "You are running beta software (Serendipity version". $serendipity['version'].")! <br>The use of this version with the Usergallery plugin could result of dataloss! <br>Please <a href=http://www.s9y.org/12.html>update</a> to 1.1-beta3 minimium to use the Usergallery plugin.";
|
|
return;
|
|
}
|
|
|
|
$serendipity['smarty']->assign('staticpage_pagetitle', preg_replace('@[^a-z0-9]@i', '_',$this->get_config('base_directory')));
|
|
$serendipity['smarty']->assign('const', array('filesize' => PLUGIN_EVENT_USERGALLERY_FILESIZE,
|
|
'filename' => PLUGIN_EVENT_USERGALLERY_FILENAME,
|
|
'dimension' => PLUGIN_EVENT_USERGALLERY_DIMENSION,
|
|
'uponelevel' => PLUGIN_EVENT_USERGALLERY_UPONELEVEL,
|
|
'back' => PLUGIN_EVENT_USERGALLERY_BACK,
|
|
'previous' => PLUGIN_EVENT_USERGALLERY_PREVIOUS,
|
|
'next' => PLUGIN_EVENT_USERGALLERY_NEXT,
|
|
'PREVIOUS_PAGE' => PREVIOUS_PAGE,
|
|
'NEXT_PAGE' => NEXT_PAGE)
|
|
);
|
|
|
|
$sub_page = $this->get_config('subpage');
|
|
$permalink = $this->get_config('permalink');
|
|
|
|
$serendipity['smarty']->assign('plugin_usergallery_httppath',$serendipity['rewrite'] != 'none'
|
|
? $permalink
|
|
: $serendipity['indexFile'] . '?serendipity[subpage]='.$sub_page);
|
|
$serendipity['smarty']->assign('plugin_usergallery_httppath_extend',$serendipity['rewrite'] != 'none'
|
|
? $permalink.'?'
|
|
: $serendipity['indexFile'] . '?serendipity[subpage]='.$sub_page.'&');
|
|
|
|
//Can't trust $serendipity['GET'] on all servers.... so we build it ourselves from subpage
|
|
if ($serendipity['rewrite'] != 'none') {
|
|
$uri_parts = explode('?', str_replace('&', '&', $serendipity['GET']['subpage']));
|
|
$parts = explode('&', $uri_parts[1]);
|
|
if (count($parts) > 1) {
|
|
foreach($parts as $key => $value) {
|
|
$val = explode('=', $value);
|
|
$val0 = str_replace('serendipity[','',$val[0]);
|
|
if ($val[0] == $val0) {
|
|
$_GET[$val[0]] = $val[1];
|
|
} else {
|
|
$val0 = str_replace(']','',$val0);
|
|
$serendipity['GET'][$val0] = $val[1];
|
|
}
|
|
}
|
|
} else {
|
|
$val = explode('=', $parts[0]);
|
|
$val0 = str_replace('serendipity[','',$val[0]);
|
|
if ($val[0] == $val0) {
|
|
$_GET[$val[0]] = $val[1];
|
|
} else {
|
|
$val0 = str_replace(']','',$val0);
|
|
$serendipity['GET'][$val0] = $val[1];
|
|
}
|
|
}
|
|
}
|
|
|
|
if (version_compare($serendipity['version'],"1.1.beta3") >= 0) {
|
|
switch ($this->get_config("image_order")) {
|
|
case 'nameacs':
|
|
$orderby= 'i.name';
|
|
$order= 'ASC';
|
|
break;
|
|
case 'namedesc':
|
|
$orderby= 'i.name';
|
|
$order= 'DESC';
|
|
break;
|
|
case 'dateacs':
|
|
$orderby= 'i.date';
|
|
$order= 'ASC';
|
|
break;
|
|
case 'datedesc':
|
|
$orderby= 'i.date';
|
|
$order= 'DESC';
|
|
break;
|
|
}
|
|
} else {
|
|
switch ($this->get_config("image_order")) {
|
|
case 'nameacs':
|
|
$orderby= 'name';
|
|
$order= 'ASC';
|
|
break;
|
|
case 'namedesc':
|
|
$orderby= 'name';
|
|
$order= 'DESC';
|
|
break;
|
|
case 'dateacs':
|
|
$orderby= 'date';
|
|
$order= 'ASC';
|
|
break;
|
|
case 'datedesc':
|
|
$orderby= 'date';
|
|
$order= 'DESC';
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (isset($serendipity['GET']['image'])) {
|
|
$this->displayImage($serendipity['GET']['image'],$orderby,$order);
|
|
} else {
|
|
$num_cols = $this->get_config('num_cols');
|
|
$base_directory = $this->get_config('base_directory');
|
|
|
|
if ($this->get_config('style') == "thumbpage") {
|
|
$images_per_page = $this->get_config('images_per_page');
|
|
$display_dir_tree = $this->get_config('display_dir_tree','no');
|
|
$show_1lvl_sub = $this->get_config('show_1lvl_sub','no');;
|
|
$dir_list = $this->get_config('dir_list');
|
|
$num_cols = $this->get_config('num_cols');
|
|
$permitted_gallery = false;
|
|
|
|
if ($base_directory == 'gallery') {
|
|
$limit_directory = '';
|
|
} else {
|
|
$limit_directory = $base_directory;
|
|
}
|
|
$limit_images_directory = $limit_directory;
|
|
$limit_output = $limit_directory;
|
|
$serendipity['smarty']->assign('plugin_usergallery_currentgal','');
|
|
$serendipity['smarty']->assign('plugin_usergallery_uppath','');
|
|
$serendipity['smarty']->assign('plugin_usergallery_toplevel','yes');
|
|
|
|
//Let's get a directory listing that has all our ACLs applied already!
|
|
if (version_compare($serendipity['version'],"1.1.beta3") >= 0) {
|
|
$directories_temp = serendipity_traversePath($serendipity['serendipityPath'].$serendipity['uploadPath'],$limit_directory,true,NULL,1, NULL,"read",NULL);
|
|
} else {
|
|
$directories_temp = serendipity_traversePath($serendipity['serendipityPath'].$serendipity['uploadPath'],$limit_directory);
|
|
}
|
|
|
|
//Check to see if we are calling a gallery directly
|
|
if (isset($_GET['gallery']) && $_GET['gallery'] != '') {
|
|
//replace weird characters. Was more important before we used the database.
|
|
$getpathtemp = str_replace("//","/",str_replace("..","",urldecode ($_GET['gallery'])));
|
|
//Ok, let's check the out directory is actually in the returned directories.
|
|
if (is_array($directories_temp)) {
|
|
foreach($directories_temp AS $f => $dir) {
|
|
if ($getpathtemp == $dir['relpath']) {
|
|
//yay! We have access to the directory.
|
|
$permitted_gallery = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
//If we have a matching directory, let's set the gallery up.
|
|
if ($permitted_gallery) {
|
|
$limit_images_directory = $getpathtemp;
|
|
$temp_array = explode('/',$getpathtemp);
|
|
array_pop($temp_array);
|
|
$limit_output = array_pop($temp_array);
|
|
if ($display_dir_tree == 'no' ) {
|
|
$up_path = implode('/',$temp_array);
|
|
if ($up_path != "") {$up_path = $up_path."/";}
|
|
}
|
|
$serendipity['smarty']->assign('plugin_usergallery_currentgal',$getpathtemp);
|
|
$serendipity['smarty']->assign('plugin_usergallery_uppath',$up_path);
|
|
$serendipity['smarty']->assign('plugin_usergallery_toplevel','no');
|
|
}
|
|
} else {
|
|
//We weren't calling a gallery directory, so it is set up in the configuration. If it is the base 'uploads' directory there are never any permissions on it.
|
|
if (($limit_images_directory != '') && (version_compare($serendipity['version'],"1.1.beta3") >= 0)) {
|
|
$perm_test_array = array ( array ( 'name'=>str_replace("/","", $limit_images_directory),'depth'=>1,'relpath'=> $limit_images_directory,'directory'=>1));
|
|
if (serendipity_directoryACL($perm_test_array, 'read')) {
|
|
$permitted_gallery = true;
|
|
}
|
|
} else {
|
|
$permitted_gallery = true;
|
|
}
|
|
}
|
|
|
|
$query = "SELECT path, count(id) FROM {$serendipity['dbPrefix']}images GROUP BY path";
|
|
$rs = serendipity_db_query($query, false, 'assoc');
|
|
if (is_array($rs)) {
|
|
foreach($rs AS $f => $record) {
|
|
if ($limit_directory != '') {
|
|
$temp_count = strlen($limit_directory);
|
|
if (strcmp(substr($record['path'],0,$temp_count),$limit_directory) == 0) {
|
|
$temp_filecount[$record['path']] = $record['count(id)'];
|
|
}
|
|
} else {
|
|
$temp_filecount[$record['path']] = $record['count(id)'];
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($dir_list=='yes') {
|
|
if ($display_dir_tree == 'yes') {
|
|
if (!isset($temp_filecount[$limit_directory])) {
|
|
$temp_filecount[$limit_directory] = '0';
|
|
}
|
|
$serendipity['smarty']->assign('plugin_usergallery_maindir_filecount', $temp_filecount[$limit_directory]);
|
|
} else {
|
|
if ($up_path == '') {
|
|
$temp_filecount[$up_path] = $temp_filecount[$limit_directory];
|
|
}
|
|
if (!isset($temp_filecount[$up_path])) {
|
|
$temp_filecount[$up_path] = '0';
|
|
}
|
|
$serendipity['smarty']->assign('plugin_usergallery_maindir_filecount', $temp_filecount[$up_path]);
|
|
}
|
|
}
|
|
|
|
if (is_array($directories_temp)) {
|
|
if (version_compare($serendipity['version'],"1.1.beta3") >= 0) {
|
|
usort($directories_temp, 'serendipity_sortPath');
|
|
}
|
|
foreach($directories_temp AS $f => $dir) {
|
|
$directory = $dir['relpath'];
|
|
$dir['filecount'] = $temp_filecount[$directory];
|
|
if (isset($dir['depth'])) {$dir['pxdepth'] = $dir['depth'] * $this->get_config('dir_tab', 10); }
|
|
if ($dir['filecount'] == '') {$dir['filecount'] = 0; }
|
|
if ($display_dir_tree == 'yes' ) {
|
|
$directories[$dir['relpath']] = $dir;
|
|
} else {
|
|
if ($show_1lvl_sub == 'yes') {
|
|
$temp_count = strlen($limit_images_directory);
|
|
if (strcmp(substr($directory,0,$temp_count),$limit_images_directory) == 0 && $directory!=$limit_images_directory) {
|
|
$full_length = strlen($directory);
|
|
if (substr_count(substr($directory,$temp_count,$full_length),'/') == 1) {
|
|
$directories[$dir['relpath']] = $dir;
|
|
} else {
|
|
$temp_count = $temp_count + 1 + strpos(substr($directory,$temp_count,$full_length),'/');
|
|
$directories[substr($directory,0,$temp_count)]['filecount'] = $directories[substr($directory,0,$temp_count)]['filecount'] + $dir['filecount'];
|
|
}
|
|
}
|
|
} else {
|
|
$temp_count = strlen($limit_images_directory);
|
|
if (strcmp(substr($directory,0,$temp_count),$limit_images_directory) == 0 && $directory !=$limit_images_directory) {
|
|
$directories[$directory] = $dir;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
$serendipity['smarty']->assign('plugin_usergallery_subdirectories', $directories);
|
|
|
|
$lower_limit = 0;
|
|
$showpage = false;
|
|
if ($images_per_page != 0 && $permitted_gallery) {
|
|
$showpage = true;
|
|
$total_count = $temp_filecount[$limit_images_directory];
|
|
if ($total_count <= $images_per_page ) {
|
|
$showpage = false;
|
|
}
|
|
if ($showpage) {
|
|
if (isset($_GET['page']) && $_GET['page'] != '') {
|
|
$current_page = intval($_GET['page']);
|
|
} else {
|
|
$current_page = 1;
|
|
}
|
|
$total_pages = ceil($total_count/$images_per_page);
|
|
$previous_page = $current_page-1;
|
|
if ($previous_page == 0) {
|
|
$lower_limit = 0;
|
|
} else {
|
|
$lower_limit = ($previous_page * $images_per_page);
|
|
}
|
|
}
|
|
}
|
|
|
|
$serendipity['smarty']->assign(
|
|
array(
|
|
'plugin_usergallery_pagination' => $showpage,
|
|
'plugin_usergallery_total_count' => $total_count,
|
|
'plugin_usergallery_total_pages' => $total_pages,
|
|
'plugin_usergallery_current_page' => $current_page,
|
|
'plugin_usergallery_next_page' => $current_page+1,
|
|
'plugin_usergallery_previous_page' => $current_page-1
|
|
)
|
|
);
|
|
|
|
if (version_compare($serendipity['version'],"1.1.beta3") >= 0) {
|
|
if ($this->get_config('image_strict') == 'yes') {
|
|
$images = serendipity_fetchImagesFromDatabase($lower_limit, $images_per_page, $total, $orderby, $order, $limit_images_directory,'','', array(), true);
|
|
} else {
|
|
$images = serendipity_fetchImagesFromDatabase($lower_limit, $images_per_page, $total, $orderby, $order, $limit_images_directory);
|
|
}
|
|
} else {
|
|
if ($this->get_config('image_strict') == 'yes') {
|
|
$images = $this->usergallery_showimages( $lower_limit, $images_per_page, $orderby, $order, $limit_images_directory);
|
|
} else {
|
|
$images = serendipity_fetchImagesFromDatabase($lower_limit, $images_per_page, $total, $orderby, $order, $limit_images_directory);
|
|
}
|
|
}
|
|
|
|
if (is_array($images)) {
|
|
foreach($images AS $f => $image) {
|
|
$is_image = serendipity_isImage($image);
|
|
if ($is_image) {
|
|
$image['link'] = $serendipity['serendipityHTTPPath'] . $serendipity['uploadHTTPPath'] . $image['path'] . $image['name'] . '.' . $image['thumbnail_name'] . '.' . $image['extension'];
|
|
$image['dimension'] = $image['dimensions_width'].'x'.$image['dimensions_height'];
|
|
$image['isimage'] = true;
|
|
} else {
|
|
$image['isimage'] = false;
|
|
$image['link'] = serendipity_getTemplateFile('admin/img/mime_unknown.png');
|
|
}
|
|
$image['fullimage'] = $serendipity['serendipityHTTPPath'] . $serendipity['uploadHTTPPath'] . $image['path'] . $image['name'] . '.' . $image['extension'];
|
|
$image['filesize'] = round($image['size']/1024);
|
|
|
|
$image['popupwidth'] = ($is_image ? ($image['dimensions_width'] + 20) : 600);
|
|
$image['popupheight'] = ($is_image ? ($image['dimensions_height'] + 20) : 500);
|
|
$process_images[$image['name']] = $image;
|
|
}
|
|
}
|
|
|
|
$gallery_array = explode('/',$up_path);
|
|
foreach($gallery_array AS $f => $gallery) {
|
|
$gallery_path = $gallery_path.$gallery."/";
|
|
if ($gallery_path != $base_directory ) {
|
|
$path_array[$gallery]['path'] = $gallery_path;
|
|
$path_array[$gallery]['name'] = $gallery;
|
|
}
|
|
}
|
|
unset($path_array['']);
|
|
if ($limit_output == $base_directory) {
|
|
$limit_output = '';
|
|
}
|
|
$serendipity['smarty']->assign(
|
|
array(
|
|
'plugin_usergallery_title' => $this->get_config('title'),
|
|
'plugin_usergallery_cols' => $num_cols,
|
|
'plugin_usergallery_preface' => $this->get_config('intro'),
|
|
'plugin_usergallery_fixed_width' => $this->get_config('fixed_width'),
|
|
'plugin_usergallery_image_display' => $this->get_config('image_display'),
|
|
'plugin_usergallery_gallery_breadcrumb' => $path_array,
|
|
'plugin_usergallery_dir_list' => $dir_list,
|
|
'plugin_usergallery_display_dir_tree'=> $display_dir_tree,
|
|
'plugin_usergallery_colwidth' => round((10/$num_cols*10)-6,2),
|
|
'plugin_usergallery_limit_directory' => preg_replace('@[^a-z0-9]@i', ' ',$limit_output),
|
|
'plugin_usergallery_images' => $process_images
|
|
)
|
|
);
|
|
|
|
$tfile = serendipity_getTemplateFile('plugin_usergallery.tpl', 'serendipityPath');
|
|
if (!$tfile || $tfile == 'plugin_usergallery.tpl') {
|
|
$tfile = dirname(__FILE__) . '/plugin_usergallery.tpl';
|
|
}
|
|
$inclusion = $serendipity['smarty']->security_settings[INCLUDE_ANY];
|
|
$serendipity['smarty']->security_settings[INCLUDE_ANY] = true;
|
|
$content = $serendipity['smarty']->fetch('file:'. $tfile);
|
|
$serendipity['smarty']->security_settings[INCLUDE_ANY] = $inclusion;
|
|
echo $content;
|
|
} else {
|
|
$add_url = '?serendipity[subpage]='.$this->get_config('subpage');
|
|
if (version_compare($serendipity['version'], '0.9') >= 0) {
|
|
if ($base_directory == 'gallery') {
|
|
$limit_directory = '';
|
|
} else {
|
|
$limit_directory = $base_directory;
|
|
}
|
|
serendipity_displayImageList(
|
|
isset($serendipity['GET']['page']) ? $serendipity['GET']['page'] : 1,
|
|
$num_cols,
|
|
false,
|
|
$add_url,
|
|
false,
|
|
$limit_directory
|
|
);
|
|
} else {
|
|
serendipity_displayImageList(
|
|
isset($serendipity['GET']['page']) ? $serendipity['GET']['page'] : 1,
|
|
$num_cols,
|
|
false,
|
|
$add_url,
|
|
false
|
|
);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function setResData($res, $unit) {
|
|
$dir_arr = explode(' ', $res);
|
|
$dir_arr[1] = trim($dir_arr[1], '()');
|
|
$res_unit = rtrim($unit, 'es');
|
|
$exif_res = $dir_arr[1].' '.$dir_arr[2].' '.$dir_arr[3].' '.$res_unit;
|
|
return($exif_res);
|
|
}
|
|
|
|
function changeExifDate($date) {
|
|
$dt_arr = explode(' ', $date);
|
|
$date_arr = explode(':', $dt_arr[0]);
|
|
$time_arr = explode(':', $dt_arr[1]);
|
|
$year = $date_arr[0];
|
|
$month = $date_arr[1];
|
|
$day = $date_arr[2];
|
|
$hour = $time_arr[0];
|
|
$minute = $time_arr[1];
|
|
$second = $time_arr[2];
|
|
$timestamp = mktime($hour, $minute, $second, $month, $day, $year);
|
|
if ($timestamp != -1) {
|
|
$date_str = date('M j Y H:i:s \G\M\T O', $timestamp);
|
|
} else {
|
|
$date_str = 'Unknown';
|
|
}
|
|
$exif_date = $date_str;
|
|
return($exif_date);
|
|
}
|
|
|
|
function getExifTags($path, $name, $type) {
|
|
$exif_data = array();
|
|
// Display additonal exif information if allowed.
|
|
$JPEG_TOOLKIT = $serendipity['baseURL'].'plugins/serendipity_event_usergallery/JPEG_TOOLKIT/';
|
|
if(is_file($JPEG_TOOLKIT.'EXIF.php')) {
|
|
include_once $JPEG_TOOLKIT.'EXIF.php';
|
|
if (strtolower($type) == 'jpeg' || strtolower($type) == 'jpg') {
|
|
$filename = $name.'.'.$type;
|
|
if ($exif = get_EXIF_JPEG($path.$filename)) {
|
|
$exif_arr_num_1 = array(116 => 'Copyright Notice',
|
|
271 => 'Camera Make',
|
|
272 => 'Camera Model',
|
|
274 => 'Orientation',
|
|
296 => 'Resolution Unit',
|
|
282 => 'X Resolution',
|
|
283 => 'Y Resolution',
|
|
306 => 'Date and Time',
|
|
531 => 'YCbCr Positioning',
|
|
34665 => '');
|
|
$exif_arr_num_2 = array(33434 => 'Exposure Time',
|
|
33437 => 'Aperture',
|
|
34850 => 'Exposure Program',
|
|
34855 => 'ISO',
|
|
36864 => 'Exif Version',
|
|
36867 => 'Date (Original)',
|
|
36868 => 'Date (Digitized)',
|
|
37380 => 'APEX Exposure Bias',
|
|
37381 => 'APEX Max Aperture',
|
|
37383 => 'Metering Mode',
|
|
37384 => 'Light Source',
|
|
37385 => 'Flash',
|
|
37386 => 'FocalLength',
|
|
37510 => 'User Comment',
|
|
40960 => 'FlashPix Version',
|
|
40961 => 'Colour Space',
|
|
40962 => 'Pixel X Dimension',
|
|
40963 => 'Pixel Y Dimension',
|
|
41728 => 'File Source',
|
|
41985 => 'Special Processing',
|
|
41986 => 'Exposure Mode',
|
|
41987 => 'White Balance',
|
|
41988 => 'Digital Zoom Ratio',
|
|
41990 => 'Scene Capture Type',
|
|
41991 => 'Gain Control',
|
|
41992 => 'Contrast',
|
|
41993 => 'Saturation',
|
|
41994 => 'Sharpness',
|
|
37121 => 'Components Config');
|
|
|
|
foreach ($exif_arr_num_1 as $num1 => $value1) {
|
|
if ($num1 != 34665) {
|
|
if (isset($exif[0][$num1]['Text Value'])) {
|
|
if ($exif[0][$num1]['Text Value'] == '') { $exif_data[$value1] = 'Unknown'; }
|
|
else { $exif_data[$value1] = $exif[0][$num1]['Text Value']; }
|
|
}
|
|
} else {
|
|
foreach ($exif_arr_num_2 as $num2 => $value2) {
|
|
if (isset($exif[0][$num1]['Data'][0][$num2]['Text Value'])) {
|
|
if ($exif[0][$num1]['Data'][0][$num2]['Text Value'] == '') { $exif_data[$value2] = 'Unknown'; }
|
|
else { $exif_data[$value2] = $exif[0][$num1]['Data'][0][$num2]['Text Value']; }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
$exif_data = array();
|
|
}
|
|
} else {
|
|
$exif_data = array();
|
|
}
|
|
|
|
if (isset($exif_data['X Resolution']) && isset($exif_data['Resolution Unit'])) {
|
|
$exif_data['X Resolution'] = $this->setResData($exif_data['X Resolution'], $exif_data['Resolution Unit']);
|
|
}
|
|
|
|
if (isset($exif_data['Y Resolution']) && isset($exif_data['Resolution Unit'])) {
|
|
$exif_data['Y Resolution'] = $this->setResData($exif_data['Y Resolution'], $exif_data['Resolution Unit']);
|
|
}
|
|
|
|
if (isset($exif_data['Date and Time'])) {
|
|
$exif_data['Date and Time'] = $this->changeExifDate($exif_data['Date and Time']);
|
|
}
|
|
|
|
if (isset($exif_data['Orientation'])) {
|
|
$pos = explode(' ', $exif_data['Orientation']);
|
|
$exif_data['Orientation'] = $pos[0].' '.$pos[1].' '.$pos[2].' '.$pos[3];
|
|
}
|
|
|
|
if (isset($exif_data['YCbCr Positioning'])) {
|
|
$exif_data['YCbCr Positioning'] = str_replace('components', '', $exif_data['YCbCr Positioning']);
|
|
}
|
|
|
|
} else {
|
|
$exif_data = array();
|
|
}
|
|
return($exif_data);
|
|
}
|
|
|
|
function displayImage($id,$orderby,$order) {
|
|
global $serendipity;
|
|
$extended_data = array();
|
|
$base_directory = $this->get_config('base_directory');
|
|
$file = serendipity_fetchImageFromDatabase($id);
|
|
$file['link'] = $serendipity['serendipityHTTPPath'] . $serendipity['uploadHTTPPath'] . $file['path'] . $file['name'] . '.' . $file['extension'];
|
|
$test_string = $serendipity['serendipityPath'].$serendipity['uploadHTTPPath'] . $base_directory;
|
|
$path_len = strlen($test_string);
|
|
$pic_string = substr($serendipity['serendipityPath'].$serendipity['uploadHTTPPath'] . $file['path'],0,$path_len);
|
|
if (isset($file['id'])) {
|
|
$file['size_txt'] = round($file['size']/1024);
|
|
$file['is_image'] = serendipity_isImage($file);
|
|
$max_width = $this->get_config('image_width',480);
|
|
if ($file['dimensions_width'] > $max_width && $max_width != 0) {
|
|
$file['alt_width'] = $max_width;
|
|
$file['alt_height'] = round(($max_width/$file['dimensions_width']) * $file['dimensions_height']);
|
|
} else {
|
|
$file['alt_width'] = $file['dimensions_width'];
|
|
$file['alt_height'] = $file['dimensions_height'];
|
|
}
|
|
|
|
if (version_compare($serendipity['version'],"1.1.beta3") >= 0) {
|
|
if ($this->get_config('image_strict') == 'yes') {
|
|
$images = serendipity_fetchImagesFromDatabase($lower_limit, $images_per_page, $total, $orderby, $order, $file['path'],'','', array(), true);
|
|
} else {
|
|
$images = serendipity_fetchImagesFromDatabase($lower_limit, $images_per_page, $total, $orderby, $order, $file['path']);
|
|
}
|
|
$capable = true;
|
|
$extended_data = serendipity_fetchMediaProperties($id);
|
|
} else {
|
|
if ($this->get_config('image_strict') == 'yes') {
|
|
$images = $this->usergallery_showimages( $lower_limit, $images_per_page, $orderby, $order, $file['path']);
|
|
} else {
|
|
$images = serendipity_fetchImagesFromDatabase($lower_limit, $images_per_page, $total, $orderby, $order, $file['path']);
|
|
}
|
|
$capable = false;
|
|
}
|
|
$base_directory = str_replace('gallery','',$base_directory);
|
|
$previous_attempt = -1;
|
|
$previous_id = -1;
|
|
$next_id = -1;
|
|
if (is_array($images)) {
|
|
$stop = false;
|
|
$onecount = false;
|
|
while ((list($f, $image) = each($images)) && !$stop) {
|
|
if ($image['id'] == $file['id']) {
|
|
$path = $image['path'];
|
|
$previous_id = $previous_attempt;
|
|
$onecount = true;
|
|
} else {
|
|
if ($onecount == true) {
|
|
$next_id = $image['id'];
|
|
$stop = true;
|
|
} else {
|
|
$previous_attempt = $image['id'];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
$gallery_array = explode('/',$path);
|
|
foreach($gallery_array AS $f => $gallery) {
|
|
$gallery_path = $gallery_path.$gallery."/";
|
|
if ($gallery_path != $base_directory ) {
|
|
$path_array[$gallery]['path'] = $gallery_path;
|
|
$path_array[$gallery]['name'] = $gallery;
|
|
}
|
|
}
|
|
|
|
// EXIF DATA
|
|
if ($this->get_config('exif_show_data') == 'yes') {
|
|
// If any exif tags that are available.
|
|
$filepath = $serendipity['serendipityPath'] . $serendipity['uploadHTTPPath'] . $file['path'];
|
|
$exif_data = $this->getExifTags($filepath, $file['name'], $file['extension']);
|
|
$exifsettings_one = $this->get_config('exif_data',$this->makeExifSelector());
|
|
// Create array of exif display settings for main information table.
|
|
$exif_arr = explode(',', $exifsettings_one);
|
|
foreach ($exif_arr as $key => $value) {
|
|
$display = explode('-', $exif_arr[$key]);
|
|
$exif_display_one[$display[0]] = $display[1];
|
|
}
|
|
|
|
$data_written = false;
|
|
$exif_output .= '<div class="all_img_info">';
|
|
$exif_output .= '<div class="exif_info_row"><div class="exif_info_head"><strong>'.PLUGIN_EVENT_USERGALLERY_EXIFDATA_ADDITIONALDATA.'</strong></div></div>';
|
|
foreach ($exif_data as $tag => $value) {
|
|
if ($value != 'Unknown' && $exif_display_one[$tag] == 'yes') {
|
|
$data_written = true;
|
|
$exif_output .= '<div class="exif_info_row"><span class="exif_info_tag">'.$tag.'</span><span class="exif_info">'.$value.'</span></div>';
|
|
}
|
|
}
|
|
if (!$data_written) {
|
|
$exif_output .= '<div class="exif_info_row"><strong>'.PLUGIN_EVENT_USERGALLERY_EXIFDATA_NOADDITIONALDATA.'</strong></div>';
|
|
}
|
|
$exif_output .= '</div>';
|
|
}
|
|
// END EXIF DATA
|
|
//Show Media Library Properties
|
|
if ($this->get_config('show_media_properties','no')=='yes') {
|
|
if (is_array($extended_data) && isset($extended_data['base_property'])) {
|
|
$extended_data = array_merge($extended_data['base_property'], (array)$extended_data['base_metadata']);
|
|
|
|
} else {
|
|
$extended_data = array();
|
|
}
|
|
$extended_data_out = array();
|
|
$extended_output = explode(';',$this->get_config('media_properties','COPYRIGHT:Copyright;TITLE:Title;COMMENT2:Comment'));
|
|
foreach ($extended_output as $option) {
|
|
$option = explode(':',$option);
|
|
foreach ($extended_data as $ex_name => $ex_data) {
|
|
if (($ex_name == $option[0]) && isset($option[1]) && $ex_data != '') {
|
|
$extended_data_out[] = array('name' => $option[1], 'value' => $ex_data);
|
|
if (($ex_name == 'TITLE') && $ex_data != '') {
|
|
$file['title'] = $ex_data;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (!isset($file['title'])) {
|
|
$file['title'] = $file['name'];
|
|
}
|
|
|
|
if (serendipity_db_bool($this->get_config('linked_entries'))) {
|
|
$_filename = $file['name'] . '.' . $file['extension'];
|
|
$_thumbname = $file['name'] . '.' . $file['thumbnail_name'] . '.' . $file['extension'];
|
|
|
|
$e = $this->fetchLinkedEntries($file['id'], $file['path'] . $_filename, $file['path'] . $_thumbname);
|
|
if (is_array($e)) {
|
|
$file['entries'] = array();
|
|
foreach($e AS $_item) {
|
|
$file['entries'][] = array(
|
|
'href' => serendipity_archiveURL($_item['id'], $_item['title'], 'serendipityHTTPPath', true, array('timestamp' => $_item['timestamp'])),
|
|
'title' => $_item['title']
|
|
);
|
|
}
|
|
}
|
|
if (class_exists('serendipity_event_staticpage')) {
|
|
$s = $this->fetchStaticPages($file['id'], $file['path'] . $_filename, $file['path'] . $_thumbname);
|
|
if (is_array($s)) {
|
|
$file['staticpage_results'] = array();
|
|
foreach($s AS $_item) {
|
|
$staticpage_title = $_item['headline'];
|
|
if ($staticpage_title == '') $staticpage_title = $_item['pagetitle'];
|
|
if ($serendipity['rewrite'] == 'none') {
|
|
$staticpage_link = $serendipity['serendipityHTTPPath'].$serendipity['indexFile'].'?serendipity[subpage]='.$_item['subpage'];
|
|
} else {
|
|
$staticpage_link = $_item['permalink'];
|
|
}
|
|
$file['staticpage_results'][] = array(
|
|
'href' => $staticpage_link,
|
|
'title' => $staticpage_title
|
|
);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
unset($path_array['']);
|
|
$serendipity['smarty']->assign(
|
|
array('plugin_usergallery_title' => $this->get_config('title'),
|
|
'plugin_usergallery_nextid' => $next_id,
|
|
'plugin_usergallery_gallery_breadcrumb' => $path_array,
|
|
'plugin_usergallery_previousid' => $previous_id,
|
|
'plugin_usergallery_xtra_info' => $exif_output,
|
|
'plugin_usergallery_extended_info' => $extended_data_out,
|
|
'plugin_usergallery_file' => $file
|
|
)
|
|
);
|
|
$tfile = serendipity_getTemplateFile('plugin_usergallery_imagedisplay.tpl', 'serendipityPath');
|
|
if (!$tfile || $tfile == 'plugin_usergallery_imagedisplay.tpl') {
|
|
$tfile = dirname(__FILE__) . '/plugin_usergallery_imagedisplay.tpl';
|
|
}
|
|
$inclusion = $serendipity['smarty']->security_settings[INCLUDE_ANY];
|
|
$serendipity['smarty']->security_settings[INCLUDE_ANY] = true;
|
|
$content = $serendipity['smarty']->fetch('file:'. $tfile);
|
|
$serendipity['smarty']->security_settings[INCLUDE_ANY] = $inclusion;
|
|
echo $content;
|
|
|
|
return true;
|
|
} else {
|
|
echo "Invalid file.";
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function selected() {
|
|
global $serendipity;
|
|
if ($serendipity['GET']['subpage'] == $this->get_config('subpage') || preg_match('@^' . preg_quote($this->get_config('permalink')) . '@i', $serendipity['GET']['subpage'])) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function usergallery_showimages($start=0, $limit = 0, $order, $ordermode, $directory) {
|
|
global $serendipity;
|
|
if (version_compare($serendipity['version'],"1.1") >= 0) {
|
|
echo "Version problem; in this state it is possible to avoid image permissions.";
|
|
exit();
|
|
}
|
|
if ($limit != 0) {
|
|
$limitsql = serendipity_db_limit_sql(serendipity_db_limit($start, $limit));
|
|
}
|
|
|
|
$orderfields = serendipity_getImageFields();
|
|
if (empty($order) || !isset($orderfields[$order])) $order = 'name';
|
|
if (empty($ordermode) || ($ordermode != 'DESC' && $ordermode != 'ASC')) $ordermode = 'ASC';
|
|
$directorysql = "path = '".serendipity_db_escape_string($directory)."'";
|
|
|
|
$query = "SELECT * FROM {$serendipity['dbPrefix']}images WHERE $directorysql ORDER BY $order $ordermode $limitsql";
|
|
$rs = serendipity_db_query($query, false, 'assoc');
|
|
if (!is_array($rs)) {
|
|
return array();
|
|
}
|
|
|
|
return $rs;
|
|
}
|
|
|
|
// Fetches a list of referenced entries
|
|
function fetchLinkedEntries($id, $big, $thumb, $single = false, $getBody = false) {
|
|
global $serendipity;
|
|
|
|
if (strtolower($serendipity['dbType']) != 'mysql' && strtolower($serendipity['dbType']) != 'mysqli') {
|
|
return false;
|
|
}
|
|
|
|
$q = "SELECT e.id, e.timestamp, e.title " . ($getBody ? ', e.body' : '') . "
|
|
FROM {$serendipity['dbPrefix']}entries AS e
|
|
WHERE (MATCH(e.title, e.body, e.extended) AGAINST ('" . serendipity_db_escape_string($big) . "')
|
|
OR MATCH(e.title, e.body, e.extended) AGAINST ('" . serendipity_db_escape_string($thumb) . "'))
|
|
AND (e.body REGEXP '(" . preg_quote(serendipity_db_escape_String($thumb)) . "|" . preg_quote(serendipity_db_escape_string($big)) . ")'
|
|
OR e.extended REGEXP '(" . preg_quote(serendipity_db_escape_String($thumb)) . "|" . preg_quote(serendipity_db_escape_string($big)) . ")')
|
|
AND e.isdraft = 'false'
|
|
ORDER BY e.timestamp DESC";
|
|
$e = serendipity_db_query($q, false, 'assoc');
|
|
|
|
if (is_array($e)) {
|
|
$_e = $e;
|
|
$e = array();
|
|
foreach($_e AS $idx => $item) {
|
|
$e[$item['id']] = $item;
|
|
}
|
|
}
|
|
|
|
if (!$single) {
|
|
$q2 = "SELECT e.id, e.timestamp, e.title
|
|
FROM {$serendipity['dbPrefix']}entryproperties AS ep
|
|
LEFT JOIN {$serendipity['dbPrefix']}entries AS e
|
|
ON (e.id = ep.entryid)
|
|
WHERE ep.property = 'fotokasten_picture'
|
|
AND ep.value = '" . $id . "'";
|
|
$e2 = serendipity_db_query($q2, false, 'assoc');
|
|
if (is_array($e2) && count($e2) > 0) {
|
|
if (!is_array($e)) {
|
|
$e = array();
|
|
}
|
|
foreach($e2 AS $idx => $item) {
|
|
$e[$item['id']] = $item;
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($single && is_array($e)) {
|
|
reset($e);
|
|
$return = array(
|
|
0 => current($e)
|
|
);
|
|
return $return;
|
|
}
|
|
|
|
return $e;
|
|
}
|
|
|
|
// Fetches a list of referenced static pages
|
|
function fetchStaticPages($id, $big, $thumb) {
|
|
global $serendipity;
|
|
|
|
if (strtolower($serendipity['dbType']) != 'mysql' && strtolower($serendipity['dbType']) != 'mysqli') {
|
|
return false;
|
|
}
|
|
|
|
$q = "SELECT s.*
|
|
FROM {$serendipity['dbPrefix']}staticpages AS s
|
|
WHERE (MATCH(headline,content) AGAINST('" . serendipity_db_escape_string($big) . "')
|
|
OR MATCH(headline,content) AGAINST('" . serendipity_db_escape_string($thumb) . "'))
|
|
AND (s.content REGEXP '(" . preg_quote(serendipity_db_escape_String($thumb)) . "|" . preg_quote(serendipity_db_escape_string($big)) . ")'
|
|
OR s.content REGEXP '(" . preg_quote(serendipity_db_escape_String($thumb)) . "|" . preg_quote(serendipity_db_escape_string($big)) . ")')
|
|
AND s.publishstatus = 1
|
|
AND s.pass = ''
|
|
GROUP BY s.id
|
|
ORDER BY s.timestamp DESC";
|
|
$e = serendipity_db_query($q, false, 'assoc');
|
|
|
|
if (is_array($e)) {
|
|
$_e = $e;
|
|
$e = array();
|
|
foreach($_e AS $idx => $item) {
|
|
$e[$item['id']] = $item;
|
|
}
|
|
}
|
|
|
|
return $e;
|
|
}
|
|
|
|
// Create an RSS-Feed. Called via URL like:
|
|
// http://yourblog/rss.php?version=2.0&gallery=true&limit=A&picdir=B&feed_width=C&hide_title=D
|
|
// Variables:
|
|
// A: Number of images to show
|
|
// B: Path to a picture directory to limit to
|
|
// C: Width of the thumbnail pictures. Takes precedence over configured thumbnail size in this plugin and globally
|
|
// D: If set, no titles will be shown in the RSS feed.
|
|
function showRSS(&$eventData, $offset = 0) {
|
|
global $serendipity;
|
|
static $entries = array();
|
|
|
|
if (!isset($_REQUEST['gallery'])) {
|
|
return false;
|
|
}
|
|
|
|
$limit = (!empty($_REQUEST['limit']) ? (int)$_REQUEST['limit'] : $serendipity['RSSfetchLimit']);
|
|
if (empty($limit)) {
|
|
$limit = 15;
|
|
}
|
|
$dir = (!empty($_REQUEST['picdir']) ? $_REQUEST['picdir'] : '');
|
|
$total = 0;
|
|
$size = (!empty($_REQUEST['feed_width']) ? (int)$_REQUEST['feed_width'] : $this->get_config('feed_width'));
|
|
$hide_title = (!empty($_REQUEST['hide_title']) ? true : false);
|
|
$capable = (version_compare($serendipity['version'],"1.1.beta3") >= 0);
|
|
$basepath = $serendipity['serendipityPath'] . $serendipity['uploadPath'];
|
|
$baseurl = $serendipity['baseURL'] . $serendipity['uploadHTTPPath'];
|
|
$lo = serendipity_db_bool($this->get_config('feed_linked_only'));
|
|
$feed_body = serendipity_db_bool($this->get_config('feed_body'));
|
|
|
|
$images = serendipity_fetchImagesFromDatabase($offset, $limit, $total, 'i.date', 'DESC', $dir);
|
|
|
|
// Let's push the $images array into the destination $entries format.
|
|
foreach($images AS $idx => $image) {
|
|
if (count($entries) > $limit) {
|
|
continue;
|
|
}
|
|
|
|
$filename = $image['name'] . '.' . $image['extension'];
|
|
$thumbname = $image['name'] . '.' . $image['thumbnail_name'] . '.' . $image['extension'];
|
|
$sourcefile = $basepath . $image['path'] . $filename;
|
|
$thumbfile = $basepath . $image['path'] . $thumbname;
|
|
|
|
$sourcefile_http = $baseurl . $image['path'] . $filename;
|
|
$thumbfile_http = $baseurl . $image['path'] . $thumbname;
|
|
|
|
// Creating temporary thumbnails is only possible since serendipity 1.1
|
|
if ($capable && $serendipity['thumbSize'] != $size) {
|
|
$thumbname = $image['name'] . '.serendipityGallery.' . $image['extension'];
|
|
$thumbfile = $serendipity['serendipityPath'] . PATH_SMARTY_COMPILE . '/' . $thumbname;
|
|
$thumbfile_http = $serendipity['baseURL'] . PATH_SMARTY_COMPILE . '/' . $thumbname;
|
|
|
|
if (!file_exists($thumbfile)) {
|
|
serendipity_makeThumbnail($filename, $image['path'], $size, $thumbfile, true);
|
|
}
|
|
}
|
|
|
|
$fdim = @serendipity_getimagesize($thumbfile, '', '');
|
|
|
|
$e = $this->fetchLinkedEntries($image['id'], $image['path'] . $filename, $image['path'] . $thumbname, true, $feed_body);
|
|
if (is_array($e)) {
|
|
$link = serendipity_archiveURL($e[0]['id'], $e[0]['title'], 'serendipityHTTPPath', true, array('timestamp' => $e[0]['timestamp']));
|
|
$lid = $e[0]['id'];
|
|
} elseif ($lo) {
|
|
// Images without links will be discarded
|
|
continue;
|
|
} else {
|
|
$link = $sourcefile_http;
|
|
$lid = $image['id'];
|
|
}
|
|
|
|
if ($feed_body && is_array($e)) {
|
|
// Replace big image with thumbnail
|
|
$body = preg_replace('@(["\'])[^"\']*' . preg_quote($image['path'] . $filename, '@') . '@imsU', '\1' . $thumbfile_http, $e[0]['body']);
|
|
// Kill possible width attributes of <img> tags to not screw up display
|
|
$body = preg_replace('@(<img[^>]*)\s*width\s*=["\'][0-9]+["\']@imsU', '\1', $body);
|
|
$body = preg_replace('@(<img[^>]*)\s*height\s*=["\'][0-9]+["\']@imsU', '\1', $body);
|
|
}
|
|
|
|
$body = '<a href="' . $link . '"><img src="' . $thumbfile_http . '" alt="" width="' . $fdim[0] . '" height="' . $fdim[1] . '" /></a>';
|
|
$entries[] = array(
|
|
'title' => ($hide_title ? '' : $filename),
|
|
'entryid' => $lid,
|
|
'timestamp' => $image['date'],
|
|
'author' => $image['authorname'],
|
|
'body' => $body,
|
|
'extended' => '',
|
|
'authorid' => $image['authorid'],
|
|
'email' => $image['authorname'],
|
|
'category_name' => $image['path'],
|
|
'last_modified' => $image['date'],
|
|
);
|
|
}
|
|
|
|
if (count($entries) < $limit && count($images) == $limit) {
|
|
$this->showRSS($eventData, $offset + $limit);
|
|
}
|
|
|
|
if ($offset == 0) {
|
|
// We are Borg. Resistance is futile. Sue us.
|
|
$GLOBALS['entries'] =& $entries;
|
|
$GLOBALS['comments'] = false;
|
|
$_GET['type'] = 'content';
|
|
}
|
|
|
|
return true;
|
|
}
|
|
}
|
|
|
|
if (!function_exists('array_combine')) {
|
|
function array_combine($a, $b) {
|
|
$c = array();
|
|
if (is_array($a) && is_array($b))
|
|
while (list(, $va) = each($a))
|
|
if (list(, $vb) = each($b))
|
|
$c[$va] = $vb;
|
|
else
|
|
break 1;
|
|
return $c;
|
|
}
|
|
}
|
|
/* vim: set sts=4 ts=4 expandtab : */
|