aboutsummaryrefslogtreecommitdiffstats
path: root/admin
diff options
context:
space:
mode:
authorplegall <plg@piwigo.org>2015-12-30 16:08:54 +0100
committerplegall <plg@piwigo.org>2015-12-30 16:08:54 +0100
commit6ba0148e646b2a193dc4111bb0a443d8c193e646 (patch)
tree382ecd35afae3522d07377df332f0ecfee1f5045 /admin
parentf28420acfeb5d69e9ea39cd8d00cf9775d6cea54 (diff)
parent7b653c04d6cfb20366c3bb0e183a521b3c9d22d2 (diff)
Merge branch 'feature/379-multiple-format'
Diffstat (limited to 'admin')
-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.php144
-rw-r--r--admin/themes/default/template/picture_modify.tpl1
5 files changed, 217 insertions, 13 deletions
diff --git a/admin/include/functions.php b/admin/include/functions.php
index fbbcd8c55..5ad436b71 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..69f644467 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);
}
- $fs[ $path.'/'.$node ] = array(
- 'representative_ext' => $representative_ext,
- );
+
+ $fs[ $path.'/'.$node ] = array('representative_ext' => $representative_ext);
+
+ if ($conf['enable_formats'])
+ {
+ $fs[ $path.'/'.$node ]['formats'] = $this->get_formats($path, $filename_wo_ext);
+ }
}
}
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,26 @@ 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[$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..2a70ae5d9 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,36 +537,158 @@ SELECT id, path
'info' => l10n('added')
);
+ if ($conf['enable_formats'])
+ {
+ foreach ($fs[$path]['formats'] as $ext => $filesize)
+ {
+ $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'];
}
- if (count($inserts) > 0)
+ // search new/removed formats on photos already registered in database
+ if ($conf['enable_formats'])
{
- if (!$simulate)
+ $db_elements_flip = array_flip($db_elements);
+
+ $existing_ids = array();
+
+ foreach (array_intersect_key($fs, $db_elements_flip) as $path => $existing)
+ {
+ $existing_ids[] = $db_elements_flip[$path];
+ }
+
+ $logger->debug('existing_ids', 'sync', $existing_ids);
+
+ if (count($existing_ids) > 0)
+ {
+ $db_formats = array();
+
+ // find formats for existing photos (already in database)
+ $query = '
+SELECT *
+ FROM '.IMAGE_FORMAT_TABLE.'
+ WHERE image_id IN ('.implode(',', $existing_ids).')
+;';
+ $result = pwg_query($query);
+ while ($row = pwg_db_fetch_assoc($result))
+ {
+ if (!isset($db_formats[$row['image_id']]))
+ {
+ $db_formats[$row['image_id']] = array();
+ }
+
+ $db_formats[$row['image_id']][$row['ext']] = $row['format_id'];
+ }
+
+ // first we search the formats that were removed
+ $formats_to_delete = array();
+
+ foreach ($db_formats as $image_id => $formats)
+ {
+ $image_formats_to_delete = array_diff_key($formats, $fs[ $db_elements[$image_id] ]['formats']);
+ $logger->debug('image_formats_to_delete', 'sync', $image_formats_to_delete);
+ foreach ($image_formats_to_delete as $ext => $format_id)
+ {
+ $formats_to_delete[] = $format_id;
+
+ $infos[] = array(
+ 'path' => $db_elements[$image_id],
+ 'info' => l10n('format %s removed', $ext)
+ );
+ }
+ }
+
+ // then we search for new formats on existing photos
+ foreach ($existing_ids as $image_id)
+ {
+ $path = $db_elements[$image_id];
+
+ $formats = array();
+ if (isset($db_formats[$image_id]))
+ {
+ $formats = $db_formats[$image_id];
+ }
+
+ $image_formats_to_insert = array_diff_key($fs[$path]['formats'], $formats);
+ $logger->debug('image_formats_to_insert', 'sync', $image_formats_to_insert);
+ foreach ($image_formats_to_insert as $ext => $filesize)
+ {
+ $insert_formats[] = array(
+ 'image_id' => $image_id,
+ 'ext' => $ext,
+ 'filesize' => $filesize,
+ );
+
+ $infos[] = array(
+ 'path' => $db_elements[$image_id],
+ 'info' => l10n('format %s added', $ext)
+ );
+ }
+ }
+ }
+ }
+
+
+ if (!$simulate)
+ {
+ // inserts all new elements
+ if (count($inserts) > 0)
{
- // inserts all new elements
mass_inserts(
IMAGES_TABLE,
array_keys($inserts[0]),
$inserts
);
-
+
// inserts all links between new elements and their storage category
mass_inserts(
IMAGE_CATEGORY_TABLE,
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)
- {
- fill_caddie($caddiables);
- }
+ if (count($formats_to_delete) > 0)
+ {
+ $query = '
+DELETE
+ FROM '.IMAGE_FORMAT_TABLE.'
+ WHERE format_id IN ('.implode(',', $formats_to_delete).')
+;';
+ pwg_query($query);
+ }
+
+ // add new photos to caddie
+ if (isset($_POST['add_to_caddie']) and $_POST['add_to_caddie'] == 1)
+ {
+ fill_caddie($caddiables);
}
- $counts['new_elements'] = count($inserts);
}
+ $counts['new_elements'] = count($inserts);
+
// delete elements that are in database but not in the filesystem
$to_delete_elements = array();
foreach (array_diff($db_elements, array_keys($fs)) as $path)
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>