diff --git a/admin/batch_manager.php b/admin/batch_manager.php
index 792cb1f54..14c62a557 100644
--- a/admin/batch_manager.php
+++ b/admin/batch_manager.php
@@ -64,17 +64,15 @@ DELETE FROM '.CADDIE_TABLE.'
redirect(get_root_url().'admin.php?page='.$_GET['page']);
}
- if ('delete_orphans' == $_GET['action'])
+ if ('delete_orphans' == $_GET['action'] and isset($_GET['nb_orphans_deleted']))
{
- check_pwg_token();
+ check_input_parameter('nb_orphans_deleted', $_GET, false, '/^\d+$/');
- $deleted_count = delete_elements(get_orphans(), true);
-
- if ($deleted_count > 0)
+ if ($_GET['nb_orphans_deleted'] > 0)
{
$_SESSION['page_infos'][] = l10n_dec(
'%d photo was deleted', '%d photos were deleted',
- $deleted_count
+ $_GET['nb_orphans_deleted']
);
redirect(get_root_url().'admin.php?page='.$_GET['page']);
diff --git a/admin/themes/default/js/batchManagerGlobal.js b/admin/themes/default/js/batchManagerGlobal.js
index 6d2a99bf7..f26ab11db 100644
--- a/admin/themes/default/js/batchManagerGlobal.js
+++ b/admin/themes/default/js/batchManagerGlobal.js
@@ -327,3 +327,53 @@ function progressDelete(val, max, success) {
jQuery("#action_delete input[name=confirm_deletion]").change(function() {
jQuery("#action_delete span.errors").hide();
});
+
+
+jQuery('#delete_orphans').click(function(e) {
+ jQuery(this).hide();
+ jQuery('#orphans_deletion').show();
+
+ var deleteBlockSize = Math.min(
+ Number((jQuery('#orphans_to_delete').data('origin') / 2).toFixed()),
+ 1000
+ );
+
+ delete_orphans_block(deleteBlockSize);
+
+ return false;
+});
+
+function delete_orphans_block(blockSize) {
+ jQuery.ajax({
+ url: "ws.php?format=json&method=pwg.images.deleteOrphans",
+ type:"POST",
+ dataType: "json",
+ data: {
+ pwg_token: jQuery("input[name=pwg_token").val(),
+ block_size: blockSize
+ },
+ success:function(data) {
+ jQuery('#orphans_to_delete').html(data.result.nb_orphans);
+
+ var percent_remaining = Number(
+ (data.result.nb_orphans * 100 / jQuery('#orphans_to_delete').data('origin')).toFixed()
+ );
+ var percent_done = 100 - percent_remaining;
+ jQuery('#orphans_deleted').html(percent_done);
+
+ if (data.result.nb_orphans > 0) {
+ delete_orphans_block();
+ }
+ else {
+ // time to refresh the whole page
+ var redirect_to = 'admin.php?page=batch_manager';
+ redirect_to += '&action=delete_orphans';
+ redirect_to += '&nb_orphans_deleted='+jQuery('#orphans_to_delete').data('origin');
+
+ document.location = redirect_to;
+ }
+ },
+ error:function(XMLHttpRequest, textStatus, errorThrows) {
+ }
+ });
+}
\ No newline at end of file
diff --git a/admin/themes/default/template/batch_manager_global.tpl b/admin/themes/default/template/batch_manager_global.tpl
index b9ce4c0c5..254bdf551 100644
--- a/admin/themes/default/template/batch_manager_global.tpl
+++ b/admin/themes/default/template/batch_manager_global.tpl
@@ -345,7 +345,16 @@ var sliders = {
{/foreach}
{'Empty caddie'|translate}
- {'Delete %d orphan photos'|translate:$NB_ORPHANS}
+{if $NB_ORPHANS > 0}
+ {'Delete %d orphan photos'|translate:$NB_ORPHANS}
+{/if}
+
+
+
+ 0% -
+ {$NB_ORPHANS}
+ {'orphans to delete'|translate}
+
{'based on'|translate}