mirror of
https://github.com/Piwigo/Piwigo.git
synced 2026-07-05 09:22:21 +02:00
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
This commit is contained in:
@@ -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));
|
||||
|
||||
|
||||
+34
-16
@@ -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;
|
||||
}
|
||||
?>
|
||||
?>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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';
|
||||
|
||||
Reference in New Issue
Block a user