diff options
author | plegall <plg@piwigo.org> | 2015-12-30 16:08:54 +0100 |
---|---|---|
committer | plegall <plg@piwigo.org> | 2015-12-30 16:08:54 +0100 |
commit | 6ba0148e646b2a193dc4111bb0a443d8c193e646 (patch) | |
tree | 382ecd35afae3522d07377df332f0ecfee1f5045 /admin | |
parent | f28420acfeb5d69e9ea39cd8d00cf9775d6cea54 (diff) | |
parent | 7b653c04d6cfb20366c3bb0e183a521b3c9d22d2 (diff) |
Merge branch 'feature/379-multiple-format'
Diffstat (limited to 'admin')
-rw-r--r-- | admin/include/functions.php | 35 | ||||
-rw-r--r-- | admin/picture_modify.php | 19 | ||||
-rw-r--r-- | admin/site_reader_local.php | 31 | ||||
-rw-r--r-- | admin/site_update.php | 144 | ||||
-rw-r--r-- | admin/themes/default/template/picture_modify.tpl | 1 |
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> |