aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorplegall <plg@piwigo.org>2015-12-03 16:04:02 +0100
committerplegall <plg@piwigo.org>2015-12-03 16:04:02 +0100
commit8e098d502a8f0e413b9c085db27d6a62a6c0909f (patch)
tree04bdf84e30becac7b8ed7b0b98fa7696b9979d5e
parent27389102d1275cdefcaee9c5a4a93297fc797b8c (diff)
feature #379 multiple format, step 1: add formats
* new table piwigo_image_format (each photo can have 0 to many formats) * only compatible with synchronization for now. Formats must be in sub-directory pwg_format * formats are visible on edition page only for now
-rw-r--r--admin/include/functions.php35
-rw-r--r--admin/picture_modify.php19
-rw-r--r--admin/site_reader_local.php31
-rw-r--r--admin/site_update.php28
-rw-r--r--admin/themes/default/template/picture_modify.tpl1
-rw-r--r--include/config_default.inc.php4
-rw-r--r--include/constants.php2
-rw-r--r--include/functions.inc.php15
-rw-r--r--install/db/145-database.php44
-rw-r--r--install/piwigo_structure-mysql.sql12
10 files changed, 191 insertions, 0 deletions
diff --git a/admin/include/functions.php b/admin/include/functions.php
index 5cd44b31d..903267153 100644
--- a/admin/include/functions.php
+++ b/admin/include/functions.php
@@ -180,6 +180,25 @@ function delete_element_files($ids)
}
$new_ids = array();
+ $formats_of = array();
+
+ $query = '
+SELECT
+ image_id,
+ ext
+ FROM '.IMAGE_FORMAT_TABLE.'
+ WHERE image_id IN ('.implode(',', $ids).')
+;';
+ $result = pwg_query($query);
+ while ($row = pwg_db_fetch_assoc($result))
+ {
+ if (!isset($formats_of[ $row['image_id'] ]))
+ {
+ $formats_of[ $row['image_id'] ] = array();
+ }
+
+ $formats_of[ $row['image_id'] ][] = $row['ext'];
+ }
$query = '
SELECT
@@ -205,6 +224,14 @@ SELECT
$files[] = original_to_representative( $files[0], $row['representative_ext']);
}
+ if (isset($formats_of[ $row['id'] ]))
+ {
+ foreach ($formats_of[ $row['id'] ] as $format_ext)
+ {
+ $files[] = original_to_format($files[0], $format_ext);
+ }
+ }
+
$ok = true;
if (!isset($conf['never_delete_originals']))
{
@@ -277,6 +304,13 @@ DELETE FROM '.IMAGE_CATEGORY_TABLE.'
;';
pwg_query($query);
+ // destruction of the formats
+ $query = '
+DELETE FROM '.IMAGE_FORMAT_TABLE.'
+ WHERE image_id IN ('. $ids_str .')
+;';
+ pwg_query($query);
+
// destruction of the links between images and tags
$query = '
DELETE FROM '.IMAGE_TAG_TABLE.'
@@ -540,6 +574,7 @@ function get_fs_directories($path, $recursive = true)
'.', '..', '.svn',
'thumbnail', 'pwg_high',
'pwg_representative',
+ 'pwg_format',
)
);
$exclude_folders = array_flip($exclude_folders);
diff --git a/admin/picture_modify.php b/admin/picture_modify.php
index bf0e458e6..cdb7ccbbe 100644
--- a/admin/picture_modify.php
+++ b/admin/picture_modify.php
@@ -306,6 +306,25 @@ SELECT
$intro_vars['stats'].= ', '.sprintf(l10n('Rated %d times, score : %.2f'), $row['nb_rates'], $row['rating_score']);
}
+$query = '
+SELECT *
+ FROM '.IMAGE_FORMAT_TABLE.'
+ WHERE image_id = '.$row['id'].'
+;';
+$formats = query2array($query);
+
+if (!empty($formats))
+{
+ $format_strings = array();
+
+ foreach ($formats as $format)
+ {
+ $format_strings[] = sprintf('%s (%.2fMB)', $format['ext'], $format['filesize']/1024);
+ }
+
+ $intro_vars['formats'] = l10n('Formats: %s', implode(', ', $format_strings));
+}
+
$template->assign('INTRO', $intro_vars);
diff --git a/admin/site_reader_local.php b/admin/site_reader_local.php
index 7e618ca17..051e574a6 100644
--- a/admin/site_reader_local.php
+++ b/admin/site_reader_local.php
@@ -100,14 +100,19 @@ function get_elements($path)
{
$representative_ext = $this->get_representative_ext($path, $filename_wo_ext);
}
+
+ $formats = $this->get_formats($path, $filename_wo_ext);
+
$fs[ $path.'/'.$node ] = array(
'representative_ext' => $representative_ext,
+ 'formats' => $formats,
);
}
}
else if (is_dir($path.'/'.$node)
and $node != 'pwg_high'
and $node != 'pwg_representative'
+ and $node != 'pwg_format'
and $node != 'thumbnail' )
{
$subdirs[] = $node;
@@ -182,6 +187,32 @@ function get_representative_ext($path, $filename_wo_ext)
return null;
}
+function get_formats($path, $filename_wo_ext)
+{
+ global $conf;
+
+ $formats = array();
+
+ $base_test = $path.'/pwg_format/'.$filename_wo_ext.'.';
+
+ foreach ($conf['format_ext'] as $ext)
+ {
+ $test = $base_test.$ext;
+
+ if (is_file($test))
+ {
+ // $formats[] = array(
+ // 'ext' => $ext,
+ // 'filesize' => floor(filesize($file) / 1024),
+ // );
+
+ // we return a "/" splitted string instead of an array with 2 keys, to reduce memory usage
+ $formats[] = $ext.'/'.floor(filesize($test) / 1024);
+ }
+ }
+
+ return $formats;
+}
}
?> \ No newline at end of file
diff --git a/admin/site_update.php b/admin/site_update.php
index 5bcaea12a..3a12965af 100644
--- a/admin/site_update.php
+++ b/admin/site_update.php
@@ -457,6 +457,7 @@ if (isset($_POST['submit']) and $_POST['sync'] == 'files'
$start= $start_files;
$fs = $site_reader->get_elements($basedir);
+
$template->append('footer_elements', '<!-- get_elements: '
. get_elapsed_time($start, get_moment())
. ' -->' );
@@ -486,6 +487,7 @@ SELECT id, path
$inserts = array();
$insert_links = array();
+ $insert_formats = array();
foreach (array_diff(array_keys($fs), $db_elements) as $path)
{
@@ -535,6 +537,22 @@ SELECT id, path
'info' => l10n('added')
);
+ foreach ($fs[$path]['formats'] as $format)
+ {
+ list($ext, $filesize) = explode('/', $format);
+
+ $insert_formats[] = array(
+ 'image_id' => $insert['id'],
+ 'ext' => $ext,
+ 'filesize' => $filesize,
+ );
+
+ $infos[] = array(
+ 'path' => $insert['path'],
+ 'info' => l10n('format %s added', $ext)
+ );
+ }
+
$caddiables[] = $insert['id'];
}
@@ -555,6 +573,16 @@ SELECT id, path
array_keys($insert_links[0]),
$insert_links
);
+
+ // inserts all formats
+ if (count($insert_formats) > 0)
+ {
+ mass_inserts(
+ IMAGE_FORMAT_TABLE,
+ array_keys($insert_formats[0]),
+ $insert_formats
+ );
+ }
// add new photos to caddie
if (isset($_POST['add_to_caddie']) and $_POST['add_to_caddie'] == 1)
diff --git a/admin/themes/default/template/picture_modify.tpl b/admin/themes/default/template/picture_modify.tpl
index aeba2dd6f..71b3d2ba4 100644
--- a/admin/themes/default/template/picture_modify.tpl
+++ b/admin/themes/default/template/picture_modify.tpl
@@ -63,6 +63,7 @@ jQuery("a.preview-box").colorbox({
<li>{$INTRO.add_date}</li>
<li>{$INTRO.added_by}</li>
<li>{$INTRO.size}</li>
+ <li>{$INTRO.formats}</li>
<li>{$INTRO.stats}</li>
<li>{$INTRO.id}</li>
</ul>
diff --git a/include/config_default.inc.php b/include/config_default.inc.php
index 60a3da323..ec0b58522 100644
--- a/include/config_default.inc.php
+++ b/include/config_default.inc.php
@@ -63,6 +63,10 @@ $conf['file_ext'] = array_merge(
array('tiff', 'tif', 'mpg','zip','avi','mp3','ogg','pdf')
);
+// format_ext : file extensions for formats, ie additional versions of a
+// photo (or nay other file). Formats are in sub-directory pwg_format.
+$conf['format_ext'] = array('cr2', 'tif', 'tiff', 'nef', 'dng', 'ai');
+
// top_number : number of element to display for "best rated" and "most
// visited" categories
$conf['top_number'] = 15;
diff --git a/include/constants.php b/include/constants.php
index 83d8747bc..ef321a4bc 100644
--- a/include/constants.php
+++ b/include/constants.php
@@ -105,5 +105,7 @@ if (!defined('THEMES_TABLE'))
define('THEMES_TABLE', $prefixeTable.'themes');
if (!defined('LANGUAGES_TABLE'))
define('LANGUAGES_TABLE', $prefixeTable.'languages');
+if (!defined('IMAGE_FORMAT_TABLE'))
+ define('IMAGE_FORMAT_TABLE', $prefixeTable.'image_format');
?>
diff --git a/include/functions.inc.php b/include/functions.inc.php
index 60a1885e5..e1658c31f 100644
--- a/include/functions.inc.php
+++ b/include/functions.inc.php
@@ -953,6 +953,21 @@ function original_to_representative($path, $representative_ext)
}
/**
+ * Transforms an original path to its format
+ *
+ * @param string $path
+ * @param string $format_ext
+ * @return string
+ */
+function original_to_format($path, $format_ext)
+{
+ $pos = strrpos($path, '/');
+ $path = substr_replace($path, 'pwg_format/', $pos+1, 0);
+ $pos = strrpos($path, '.');
+ return substr_replace($path, $format_ext, $pos+1);
+}
+
+/**
* get the full path of an image
*
* @param array $element_info element information from db (at least 'path')
diff --git a/install/db/145-database.php b/install/db/145-database.php
new file mode 100644
index 000000000..3f43761bf
--- /dev/null
+++ b/install/db/145-database.php
@@ -0,0 +1,44 @@
+<?php
+// +-----------------------------------------------------------------------+
+// | Piwigo - a PHP based photo gallery |
+// +-----------------------------------------------------------------------+
+// | Copyright(C) 2008-2015 Piwigo Team http://piwigo.org |
+// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
+// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
+// +-----------------------------------------------------------------------+
+// | This program is free software; you can redistribute it and/or modify |
+// | it under the terms of the GNU General Public License as published by |
+// | the Free Software Foundation |
+// | |
+// | This program is distributed in the hope that it will be useful, but |
+// | WITHOUT ANY WARRANTY; without even the implied warranty of |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
+// | General Public License for more details. |
+// | |
+// | You should have received a copy of the GNU General Public License |
+// | along with this program; if not, write to the Free Software |
+// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+// | USA. |
+// +-----------------------------------------------------------------------+
+
+if (!defined('PHPWG_ROOT_PATH'))
+{
+ die('Hacking attempt!');
+}
+
+$upgrade_description = 'add image formats table';
+
+// we use PREFIX_TABLE, in case Piwigo uses an external user table
+pwg_query('
+CREATE TABLE `'.PREFIX_TABLE.'image_format` (
+ `format_id` int(11) unsigned NOT NULL auto_increment,
+ `image_id` mediumint(8) unsigned NOT NULL DEFAULT \'0\',
+ `ext` varchar(255) NOT NULL,
+ `filesize` mediumint(9) unsigned DEFAULT NULL,
+ PRIMARY KEY (`format_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8
+;');
+
+echo "\n".$upgrade_description."\n";
+
+?>
diff --git a/install/piwigo_structure-mysql.sql b/install/piwigo_structure-mysql.sql
index b36844a8f..a452068a0 100644
--- a/install/piwigo_structure-mysql.sql
+++ b/install/piwigo_structure-mysql.sql
@@ -163,6 +163,18 @@ CREATE TABLE `piwigo_image_category` (
) ENGINE=MyISAM;
--
+-- Table structure for table `piwigo_image_format`
+--
+
+CREATE TABLE `piwigo_image_format` (
+ `format_id` int(11) unsigned NOT NULL auto_increment,
+ `image_id` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `ext` varchar(255) NOT NULL,
+ `filesize` mediumint(9) unsigned DEFAULT NULL,
+ PRIMARY KEY (`format_id`)
+) ENGINE=MyISAM;
+
+--
-- Table structure for table `piwigo_image_tag`
--