From 7b515a89ccc6188246977a5dfdfa1969ff705546 Mon Sep 17 00:00:00 2001 From: rvelices Date: Thu, 9 Sep 2010 20:10:50 +0000 Subject: 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 --- admin/element_set_global.php | 27 +++--------- admin/include/functions.php | 50 +++++++++++++++------- .../themes/default/template/element_set_global.tpl | 3 -- language/en_UK/admin.lang.php | 1 - language/fr_CA/admin.lang.php | 1 - language/fr_FR/admin.lang.php | 1 - language/hu_HU/admin.lang.php | 1 - language/pl_PL/admin.lang.php | 1 - 8 files changed, 40 insertions(+), 45 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) }
{'Deletions'|@translate} -{if $ENABLE_SYNCHRONIZATION} -

{'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}

-{/if}

{'target'|@translate} diff --git a/language/en_UK/admin.lang.php b/language/en_UK/admin.lang.php index 24b4a60f3..d6ea94d50 100644 --- a/language/en_UK/admin.lang.php +++ b/language/en_UK/admin.lang.php @@ -606,7 +606,6 @@ $lang['Manual order'] = 'Manual order'; $lang['Drag to re-order'] = "Click-and-drag to re-order"; $lang['Quick Local Synchronization'] = "Quick Local Synchronization"; $lang['No photo can be deleted'] = "No photo can be deleted"; -$lang['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.'] = "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."; $lang['Delete selected photos'] = "Delete selected photos"; $lang['%d photo was deleted'] = "%d photo deleted"; $lang['%d photos were deleted'] = "%d photos deleted"; diff --git a/language/fr_CA/admin.lang.php b/language/fr_CA/admin.lang.php index 75dba8820..230f44055 100644 --- a/language/fr_CA/admin.lang.php +++ b/language/fr_CA/admin.lang.php @@ -617,7 +617,6 @@ $lang['Manual order'] = 'Ordre manuel'; $lang['Drag to re-order'] = "Cliquer-glisser pour ré-organiser"; $lang['Quick Local Synchronization'] = "Synchronisation rapide"; $lang['No photo can be deleted'] = "Aucune photo ne peut être supprimée"; -$lang['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.'] = "Note : Cette suppression des photos ne s'applique pas pour les photos ajoutées à l'aide de la synchronisation (méthode classique par chargement FTP). Pour ces photos, supprimez-les de votre serveur et refaites une synchronisation."; $lang['Delete selected photos'] = "Supprimer les photos sélectionnées"; $lang['%d photo was deleted'] = "%d photo a été supprimée"; $lang['%d photos were deleted'] = "%d photos ont été supprimées"; diff --git a/language/fr_FR/admin.lang.php b/language/fr_FR/admin.lang.php index 633de6e57..3b4df1c3d 100644 --- a/language/fr_FR/admin.lang.php +++ b/language/fr_FR/admin.lang.php @@ -607,7 +607,6 @@ $lang['Manual order'] = 'Ordre manuel'; $lang['Drag to re-order'] = "Cliquer-glisser pour ré-organiser"; $lang['Quick Local Synchronization'] = "Synchronisation Rapide"; $lang['No photo can be deleted'] = "Aucune photo ne peut être supprimée"; -$lang['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.'] = "Note : Cette suppression des photos ne s'applique pas pour les photos ajoutées à l'aide de la synchronisation (méthode classique par chargement FTP). Pour ces photos, supprimez-les de votre serveur et refaites une synchronisation."; $lang['Delete selected photos'] = "Supprimer les photos sélectionnées"; $lang['%d photo was deleted'] = "%d photo a été supprimée"; $lang['%d photos were deleted'] = "%d photos ont été supprimées"; diff --git a/language/hu_HU/admin.lang.php b/language/hu_HU/admin.lang.php index b83a9cc38..fb9836d1f 100644 --- a/language/hu_HU/admin.lang.php +++ b/language/hu_HU/admin.lang.php @@ -601,7 +601,6 @@ $lang['ranks'] = 'Rangok'; $lang['Drag to re-order'] = 'Húzással átrendezheti'; $lang['Quick Local Synchronization'] = 'Helyi szinkronizálás'; $lang['No photo can be deleted'] = 'Nincs törölhető kép'; -$lang['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.'] = "Megjegyzés: a képek törlése nem vonatkozik a szinkronizálással hozzáadott képekre. A szinkronizálással hozzáadott képeket törölni kell a fájlrendszerből, majd ismételt szinkronizálás szükséges."; $lang['Delete selected photos'] = 'Kijelölt képek törlése'; $lang['%d photo was deleted'] = '%d kép törölve'; $lang['%d photos were deleted'] = '%d kép törölve'; diff --git a/language/pl_PL/admin.lang.php b/language/pl_PL/admin.lang.php index 113813401..bb75393d7 100644 --- a/language/pl_PL/admin.lang.php +++ b/language/pl_PL/admin.lang.php @@ -752,7 +752,6 @@ $lang['Order of menubar items has been updated successfully.'] = 'Kolejność el $lang['This theme was not designed to be directly activated'] = 'Temat nie został zprojektowany tak, by aktywować go bezpośrednio.'; $lang['Who can see this photo?'] = 'Kto może oglądać o zdjęcie?'; $lang['Pending Comments'] = 'Oczekujące komentarze'; -$lang['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.'] = 'Info: usunięcie zdjęcia nie dotyczy zdjęć dodanych podczas synchroniazacji. Zdjęcia dodanew ten sposób należy usunąć z systemu plików, a następnie wykonać synchronizację.'; $lang['In your php.ini file, the upload_max_filesize (%sB) is bigger than post_max_size (%sB), you should change this setting'] = 'W twoim pliku php.ini, parametr upload_max_filesize (%sB) jest większy niż post_max_size (%sB), powinieneś zmienić toe ustawienia'; $lang['Exif extension not available, admin should disable exif use'] = 'Rozszerzenie exif jest nie dostępne, administrato powinien usunąć korzystanie z exif'; $lang['The uploaded file exceeds the upload_max_filesize directive in php.ini: %sB'] = 'Wgrywany plik przekracza rozmiar zdefiniowany w parametrze upload_max_filesize w pliku php.ini: %sB'; -- cgit v1.2.3