feature 884 added: ability to delete photos uploaded via web API method
pwg.images.add, ie without storage_category_id. pLoader uses this method and photos cannot be removed in any other way. git-svn-id: http://piwigo.org/svn/trunk@2678 68402e56-0260-453c-a942-63ccdbb3a9ee
This commit is contained in:
parent
b0c514745f
commit
9cfd70474f
5 changed files with 175 additions and 1 deletions
|
|
@ -39,6 +39,91 @@ include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
|
|||
// +-----------------------------------------------------------------------+
|
||||
check_status(ACCESS_ADMINISTRATOR);
|
||||
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | deletion form submission |
|
||||
// +-----------------------------------------------------------------------+
|
||||
|
||||
if (isset($_POST['delete']))
|
||||
{
|
||||
if (isset($_POST['confirm_deletion']) and 1 == $_POST['confirm_deletion'])
|
||||
{
|
||||
$collection = array();
|
||||
|
||||
switch ($_POST['target_deletion'])
|
||||
{
|
||||
case 'all' :
|
||||
{
|
||||
$collection = $page['cat_elements_id'];
|
||||
break;
|
||||
}
|
||||
case 'selection' :
|
||||
{
|
||||
if (!isset($_POST['selection']) or count($_POST['selection']) == 0)
|
||||
{
|
||||
array_push($page['errors'], l10n('Select at least one picture'));
|
||||
}
|
||||
else
|
||||
{
|
||||
$collection = $_POST['selection'];
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 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)
|
||||
{
|
||||
// what will be the categories to update? (to avoid orphan on
|
||||
// representative_picture_id)
|
||||
$query = '
|
||||
SELECT
|
||||
category_id
|
||||
FROM '.IMAGE_CATEGORY_TABLE.'
|
||||
WHERE image_id IN ('.implode(',', $deletables).')
|
||||
;';
|
||||
$categories_to_update = array_from_query($query, 'category_id');
|
||||
|
||||
$physical_deletion = true;
|
||||
delete_elements($deletables, $physical_deletion);
|
||||
|
||||
update_category($categories_to_update);
|
||||
|
||||
array_push(
|
||||
$page['infos'],
|
||||
sprintf(
|
||||
l10n_dec(
|
||||
'%d photo was deleted',
|
||||
'%d photos were deleted',
|
||||
count($deletables)
|
||||
),
|
||||
count($deletables)
|
||||
)
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
array_push($page['errors'], l10n('No photo can be deleted'));
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
array_push($page['errors'], l10n('You need to confirm deletion'));
|
||||
}
|
||||
}
|
||||
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | global mode form submission |
|
||||
// +-----------------------------------------------------------------------+
|
||||
|
|
@ -236,6 +321,30 @@ $template->assign(
|
|||
|
||||
$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
|
||||
if (count($page['cat_elements_id']) > 0)
|
||||
{
|
||||
$query = '
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM '.IMAGES_TABLE.'
|
||||
WHERE id IN ('.implode(',', $page['cat_elements_id']).')
|
||||
AND storage_category_id IS NULL
|
||||
;';
|
||||
list($counter) = mysql_fetch_row(pwg_query($query));
|
||||
|
||||
if ($counter > 0)
|
||||
{
|
||||
$template->assign('show_delete_form', true);
|
||||
}
|
||||
}
|
||||
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | global mode form |
|
||||
// +-----------------------------------------------------------------------+
|
||||
|
|
|
|||
|
|
@ -127,7 +127,7 @@ DELETE FROM '.OLD_PERMALINKS_TABLE.'
|
|||
// - all the comments related to elements
|
||||
// - all the links between categories and elements
|
||||
// - all the favorites associated to elements
|
||||
function delete_elements($ids)
|
||||
function delete_elements($ids, $physical_deletion=false)
|
||||
{
|
||||
if (count($ids) == 0)
|
||||
{
|
||||
|
|
@ -135,6 +135,45 @@ function delete_elements($ids)
|
|||
}
|
||||
trigger_action('begin_delete_elements', $ids);
|
||||
|
||||
if ($physical_deletion)
|
||||
{
|
||||
include_once(PHPWG_ROOT_PATH.'include/functions_picture.inc.php');
|
||||
|
||||
// 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
|
||||
FROM '.IMAGES_TABLE.'
|
||||
WHERE id IN ('.implode(',', $ids).')
|
||||
AND storage_category_id IS NULL
|
||||
;';
|
||||
$result = pwg_query($query);
|
||||
while ($row = mysql_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']))
|
||||
{
|
||||
$high_path = get_high_path($row);
|
||||
}
|
||||
|
||||
foreach (array($file_path, $thumbnail_path, $high_path) as $path)
|
||||
{
|
||||
if (isset($path) and !unlink($path))
|
||||
{
|
||||
die('"'.$path.'" cannot be removed');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// destruction of the comments on the image
|
||||
$query = '
|
||||
DELETE FROM '.COMMENTS_TABLE.'
|
||||
|
|
|
|||
|
|
@ -65,6 +65,22 @@
|
|||
|
||||
</fieldset>
|
||||
|
||||
{if $show_delete_form}
|
||||
<fieldset>
|
||||
<legend>{'Deletions'|@translate}</legend>
|
||||
<p style="font-style:italic">{'Note: Only deletes photos added with pLoader'|@translate}</p>
|
||||
<p>
|
||||
{'target'|@translate}
|
||||
<label><input type="radio" name="target_deletion" value="all" /> {'all'|@translate}</label>
|
||||
<label><input type="radio" name="target_deletion" value="selection" checked="checked" /> {'selection'|@translate}</label>
|
||||
</p>
|
||||
<p>
|
||||
<label><input type="checkbox" name="confirm_deletion" value="1" /> {'confirm'|@translate}</label>
|
||||
<input class="submit" type="submit" value="{'Delete selected photos'|@translate}" name="delete" {$TAG_INPUT_ENABLED}/>
|
||||
</p>
|
||||
</fieldset>
|
||||
{/if}
|
||||
|
||||
<fieldset>
|
||||
|
||||
<legend>{'Form'|@translate}</legend>
|
||||
|
|
|
|||
|
|
@ -639,4 +639,9 @@ $lang['ranks'] = 'ranks';
|
|||
$lang['Drag to re-order'] = 'Drag to re-order';
|
||||
$lang['Unable to retrieve server informations since allow_url_fopen is disabled.'] = 'Unable to retrieve server informations since allow_url_fopen is disabled.';
|
||||
$lang['Quick Local Synchronization'] = 'Quick Local Synchronization';
|
||||
$lang['No photo can be deleted'] = 'No photo can be deleted';
|
||||
$lang['Note: Only deletes photos added with pLoader'] = 'Note: Only deletes photos added with pLoader';
|
||||
$lang['Delete selected photos'] = 'Delete selected photos';
|
||||
$lang['%d photo was deleted'] = '%d photo was deleted';
|
||||
$lang['%d photos were deleted'] = '%d photos were deleted';
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -638,4 +638,9 @@ $lang['ranks'] = 'rangs';
|
|||
$lang['Drag to re-order'] = 'Cliquer-glisser pour ré-organiser';
|
||||
$lang['Unable to retrieve server informations since allow_url_fopen is disabled.'] = 'Impossible de se connecter au server car la fonction allow_url_fopen est désactivée.';
|
||||
$lang['Quick Local Synchronization'] = 'Synchronisation Rapide';
|
||||
$lang['No photo can be deleted'] = 'Aucune photo ne peut être supprimée';
|
||||
$lang['Note: Only deletes photos added with pLoader'] = 'Note: seules les photos ajoutées via pLoader peuvent être supprimées';
|
||||
$lang['Delete selected photos'] = 'Supprimer les photos';
|
||||
$lang['%d photo was deleted'] = '%d photo a été supprimée';
|
||||
$lang['%d photos were deleted'] = '%d photos ont été supprimées';
|
||||
?>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue