mirror of
https://github.com/Piwigo/Piwigo.git
synced 2026-08-12 03:33:01 +02:00
Merge branch 'feature/379-multiple-format'
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
+135
-11
@@ -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
|
||||
);
|
||||
|
||||
// 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);
|
||||
|
||||
// inserts all formats
|
||||
if (count($insert_formats) > 0)
|
||||
{
|
||||
mass_inserts(
|
||||
IMAGE_FORMAT_TABLE,
|
||||
array_keys($insert_formats[0]),
|
||||
$insert_formats
|
||||
);
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
// 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)
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user