aboutsummaryrefslogtreecommitdiffstats
path: root/admin
diff options
context:
space:
mode:
authorplegall <plg@piwigo.org>2010-12-31 12:34:01 +0000
committerplegall <plg@piwigo.org>2010-12-31 12:34:01 +0000
commita9445d297540abff2125393b520509b0f2387132 (patch)
tree56f85ff39878a54618f6d4a4535e2a10c4311aaa /admin
parentaa30ee72d24a4eeca69e46be72baf055bf869889 (diff)
feature 2089: add the "duplicates" feature to the new Batch Manager and
simplify the algorithm. The duplicates do not rely on physical albums, just on duplicate filenames. git-svn-id: http://piwigo.org/svn/trunk@8404 68402e56-0260-453c-a942-63ccdbb3a9ee
Diffstat (limited to 'admin')
-rw-r--r--admin/batch_manager.php28
-rw-r--r--admin/batch_manager_global.php7
-rw-r--r--admin/maintenance.php8
-rw-r--r--admin/themes/default/template/batch_manager_global.tpl2
4 files changed, 35 insertions, 10 deletions
diff --git a/admin/batch_manager.php b/admin/batch_manager.php
index e9a82966e..c055544ae 100644
--- a/admin/batch_manager.php
+++ b/admin/batch_manager.php
@@ -54,7 +54,7 @@ if (isset($_POST['submitFilter']))
if (isset($_POST['filter_prefilter_use']))
{
- $prefilters = array('caddie', 'last import', 'with no album', 'with no tag', 'with no virtual album');
+ $prefilters = array('caddie', 'last import', 'with no album', 'with no tag', 'with no virtual album', 'duplicates');
if (in_array($_POST['filter_prefilter'], $prefilters))
{
$_SESSION['bulk_manager_filter']['prefilter'] = $_POST['filter_prefilter'];
@@ -175,6 +175,32 @@ SELECT id
array_diff($all_elements, $linked_to_virtual)
);
}
+
+ if ('duplicates' == $_SESSION['bulk_manager_filter']['prefilter'])
+ {
+ // we could use the group_concat MySQL function to retrieve the list of
+ // image_ids but it would not be compatible with PostgreSQL, so let's
+ // perform 2 queries instead. We hope there are not too many duplicates.
+
+ $query = '
+SELECT file
+ FROM '.IMAGES_TABLE.'
+ GROUP BY file
+ HAVING COUNT(*) > 1
+;';
+ $duplicate_files = array_from_query($query, 'file');
+
+ $query = '
+SELECT id
+ FROM '.IMAGES_TABLE.'
+ WHERE file IN (\''.implode("','", $duplicate_files).'\')
+;';
+
+ array_push(
+ $filter_sets,
+ array_from_query($query, 'id')
+ );
+ }
}
if (isset($_SESSION['bulk_manager_filter']['category']))
diff --git a/admin/batch_manager_global.php b/admin/batch_manager_global.php
index d6b793f39..c374e888d 100644
--- a/admin/batch_manager_global.php
+++ b/admin/batch_manager_global.php
@@ -527,6 +527,13 @@ if (count($page['cat_elements_id']) > 0)
$is_category = true;
}
+ if (isset($_SESSION['bulk_manager_filter']['prefilter'])
+ and 'duplicates' == $_SESSION['bulk_manager_filter']['prefilter'])
+ {
+ $conf['order_by'] = ' ORDER BY file, id';
+ }
+
+
$query = '
SELECT id,path,tn_ext,file,filesize,level,name
FROM '.IMAGES_TABLE;
diff --git a/admin/maintenance.php b/admin/maintenance.php
index 0f8f23aaa..6e39eb0e2 100644
--- a/admin/maintenance.php
+++ b/admin/maintenance.php
@@ -150,14 +150,6 @@ $template->assign(
$advanced_features = array();
-array_push(
- $advanced_features,
- array(
- 'CAPTION' => l10n('Files with same name in more than one physical album'),
- 'URL' => get_root_url().'admin.php?page=element_set&amp;cat=duplicates'
- )
- );
-
//$advanced_features is array of array composed of CAPTION & URL
$advanced_features = trigger_event(
'get_admin_advanced_features_links',
diff --git a/admin/themes/default/template/batch_manager_global.tpl b/admin/themes/default/template/batch_manager_global.tpl
index a663089d4..ea88b9a9a 100644
--- a/admin/themes/default/template/batch_manager_global.tpl
+++ b/admin/themes/default/template/batch_manager_global.tpl
@@ -356,8 +356,8 @@ a.removeFilter:hover {background: url(admin/themes/default/icon/remove_filter_ho
{if $ENABLE_SYNCHRONIZATION}
<option value="with no virtual album" {if $filter.prefilter eq 'with no virtual album'}selected="selected"{/if}>with no virtual album</option>
{/if}
+ <option value="duplicates" {if $filter.prefilter eq 'duplicates'}selected="selected"{/if}>duplicates</option>
<!-- <option value="with no album">with no album</option> -->
-<!-- <option value="with no virtual album">with no virtual album</option> -->
<!-- <option value="with no tag">with no tag</option> -->
</select>
</li>