diff options
author | rvelices <rv-github@modusoptimus.com> | 2010-09-09 20:10:50 +0000 |
---|---|---|
committer | rvelices <rv-github@modusoptimus.com> | 2010-09-09 20:10:50 +0000 |
commit | 7b515a89ccc6188246977a5dfdfa1969ff705546 (patch) | |
tree | 011fb86afb8071c518ee1b61b85bc21b79d40749 /admin | |
parent | 855a7dbb7a3f7ae325cde96ccb24f72b807ec225 (diff) |
feature 1845 : be able to delete photos added through ftp synchronization
git-svn-id: http://piwigo.org/svn/trunk@6873 68402e56-0260-453c-a942-63ccdbb3a9ee
Diffstat (limited to '')
-rw-r--r-- | admin/element_set_global.php | 27 | ||||
-rw-r--r-- | admin/include/functions.php | 50 | ||||
-rw-r--r-- | admin/themes/default/template/element_set_global.tpl | 3 |
3 files changed, 40 insertions, 40 deletions
diff --git a/admin/element_set_global.php b/admin/element_set_global.php index f2c708022..87efab452 100644 --- a/admin/element_set_global.php +++ b/admin/element_set_global.php @@ -77,33 +77,20 @@ if (isset($_POST['delete'])) } } - // filter selection on photos that have no storage_category_id (ie that - // were added via pLoader) if (count($collection) > 0) { - $query = ' -SELECT - id - FROM '.IMAGES_TABLE.' - WHERE id IN ('.implode(',', $collection).') - AND storage_category_id IS NULL -;'; - $deletables = array_from_query($query, 'id'); - - if (count($deletables) > 0) + $deleted_count = delete_elements($collection, true); + if ($deleted_count > 0) { - $physical_deletion = true; - delete_elements($deletables, $physical_deletion); - array_push( $page['infos'], sprintf( l10n_dec( '%d photo was deleted', '%d photos were deleted', - count($deletables) + $deleted_count ), - count($deletables) + $deleted_count ) ); } @@ -321,9 +308,7 @@ $template->assign('IN_CADDIE', 'caddie' == $_GET['cat'] ? true : false ); // | deletion form | // +-----------------------------------------------------------------------+ -// we can only remove photos that have no storage_category_id, in other -// word, it currently (Butterfly) means that the photo was added with -// pLoader +// we can only remove photos that are not remote if (count($page['cat_elements_id']) > 0) { $query = ' @@ -331,7 +316,7 @@ SELECT COUNT(*) FROM '.IMAGES_TABLE.' WHERE id IN ('.implode(',', $page['cat_elements_id']).') - AND storage_category_id IS NULL + AND path NOT LIKE "http%" ;'; list($counter) = pwg_db_fetch_row(pwg_query($query)); diff --git a/admin/include/functions.php b/admin/include/functions.php index 8b3861253..d169dfb80 100644 --- a/admin/include/functions.php +++ b/admin/include/functions.php @@ -131,50 +131,67 @@ DELETE FROM '.USER_CACHE_CATEGORIES_TABLE.' // - all the comments related to elements // - all the links between categories and elements // - all the favorites associated to elements +// @return number of deleted elements function delete_elements($ids, $physical_deletion=false) { if (count($ids) == 0) { - return; + return 0; } trigger_action('begin_delete_elements', $ids); if ($physical_deletion) { include_once(PHPWG_ROOT_PATH.'include/functions_picture.inc.php'); + $new_ids=array(); - // we can currently delete physically only photo with no - // storage_category_id (added via pLoader) - // - // we assume that the element is a photo, with no representative $query = ' SELECT id, path, tn_ext, - has_high + has_high, + representative_ext FROM '.IMAGES_TABLE.' WHERE id IN ('.implode(',', $ids).') - AND storage_category_id IS NULL ;'; $result = pwg_query($query); while ($row = pwg_db_fetch_assoc($result)) { - $file_path = $row['path']; - $thumbnail_path = get_thumbnail_path($row); - $high_path = null; - if (isset($row['has_high']) and get_boolean($row['has_high'])) + if (url_is_remote($row['path'])) + continue; + $files = array(); + $files[] = get_element_path($row); + if (!empty($row['tn_ext'])) + $files[] = get_thumbnail_path($row); + if (!empty($row['has_high']) and get_boolean($row['has_high'])) + $files[] = get_high_path($row); + if (!empty($row['representative_ext'])) { - $high_path = get_high_path($row); + $pi = pathinfo($row['path']); + $file_wo_ext = get_filename_wo_extension($pi['basename']); + $files[] = PHPWG_ROOT_PATH.$pi['dirname'].'/pwg_representative/'.$file_wo_ext.'.'.$element_info['representative_ext']; } - foreach (array($file_path, $thumbnail_path, $high_path) as $path) + $ok = true; + foreach ($files as $path) { - if (isset($path) and is_file($path) and !unlink($path)) + if (is_file($path) and !unlink($path)) { - die('"'.$path.'" cannot be removed'); + $ok = false; + trigger_error('"'.$path.'" cannot be removed', E_USER_WARNING); + break; } } + if ($ok) + $new_ids[] += $row['id']; + else + break; + } + $ids = $new_ids; + if (count($ids)==0) + { + return 0; } } @@ -249,6 +266,7 @@ SELECT } trigger_action('delete_elements', $ids); + return count($ids); } // The delete_user function delete a user identified by the $user_id @@ -2004,4 +2022,4 @@ function get_fckb_tag_ids($raw_tags) return $tag_ids; } -?>
\ No newline at end of file +?> diff --git a/admin/themes/default/template/element_set_global.tpl b/admin/themes/default/template/element_set_global.tpl index 35e047942..b357cae54 100644 --- a/admin/themes/default/template/element_set_global.tpl +++ b/admin/themes/default/template/element_set_global.tpl @@ -85,9 +85,6 @@ {if isset($show_delete_form) } <fieldset> <legend>{'Deletions'|@translate}</legend> -{if $ENABLE_SYNCHRONIZATION} - <p style="font-style:italic">{'Note: photo deletion does not apply to photos added by synchronization. For photos added by synchronization, remove them from the filesystem and then perform another synchronization.'|@translate}</p> -{/if} <p> {'target'|@translate} <label><input type="radio" name="target_deletion" value="all"> {'all'|@translate}</label> |