mirror of
https://github.com/Piwigo/Piwigo.git
synced 2026-07-06 18:01:31 +02:00
feature 2810: for duplicates filter, add "date & time" (checked by default) and "width & height" as options.
Change algorithm for a single SQL query with GROUP_CONCAT instead of 2 queries. git-svn-id: http://piwigo.org/svn/trunk@29244 68402e56-0260-453c-a942-63ccdbb3a9ee
This commit is contained in:
+38
-12
@@ -79,6 +79,19 @@ if (isset($_POST['submitFilter']))
|
||||
if (isset($_POST['filter_prefilter_use']))
|
||||
{
|
||||
$_SESSION['bulk_manager_filter']['prefilter'] = $_POST['filter_prefilter'];
|
||||
|
||||
if ('duplicates' == $_POST['filter_prefilter'])
|
||||
{
|
||||
if (isset($_POST['filter_duplicates_date']))
|
||||
{
|
||||
$_SESSION['bulk_manager_filter']['duplicates_date'] = true;
|
||||
}
|
||||
|
||||
if (isset($_POST['filter_duplicates_dimensions']))
|
||||
{
|
||||
$_SESSION['bulk_manager_filter']['duplicates_dimensions'] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($_POST['filter_category_use']))
|
||||
@@ -300,23 +313,36 @@ SELECT
|
||||
|
||||
|
||||
case 'duplicates':
|
||||
// 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.
|
||||
$duplicates_on_fields = array('file');
|
||||
|
||||
if (isset($_SESSION['bulk_manager_filter']['duplicates_date']))
|
||||
{
|
||||
$duplicates_on_fields[] = 'date_creation';
|
||||
}
|
||||
|
||||
if (isset($_SESSION['bulk_manager_filter']['duplicates_dimensions']))
|
||||
{
|
||||
$duplicates_on_fields[] = 'width';
|
||||
$duplicates_on_fields[] = 'height';
|
||||
}
|
||||
|
||||
$query = '
|
||||
SELECT file
|
||||
SELECT
|
||||
GROUP_CONCAT(id) AS ids
|
||||
FROM '.IMAGES_TABLE.'
|
||||
GROUP BY file, date_creation
|
||||
GROUP BY '.implode(',', $duplicates_on_fields).'
|
||||
HAVING COUNT(*) > 1
|
||||
;';
|
||||
$duplicate_files = query2array($query, null, 'file');
|
||||
$array_of_ids_string = query2array($query, null, 'ids');
|
||||
|
||||
$query = '
|
||||
SELECT id
|
||||
FROM '.IMAGES_TABLE.'
|
||||
WHERE file IN (\''.implode("','", array_map('pwg_db_real_escape_string', $duplicate_files)).'\')
|
||||
;';
|
||||
$filter_sets[] = query2array($query, null, 'id');
|
||||
$ids = array();
|
||||
|
||||
foreach ($array_of_ids_string as $ids_string)
|
||||
{
|
||||
$ids = array_merge($ids, explode(',', $ids_string));
|
||||
}
|
||||
|
||||
$filter_sets[] = $ids;
|
||||
|
||||
break;
|
||||
|
||||
|
||||
@@ -392,6 +392,7 @@ $(document).ready(function() {
|
||||
|
||||
jQuery("select[name=filter_prefilter]").change(function() {
|
||||
jQuery("#empty_caddie").toggle(jQuery(this).val() == "caddie");
|
||||
jQuery("#duplicates_options").toggle(jQuery(this).val() == "duplicates");
|
||||
});
|
||||
});
|
||||
|
||||
@@ -418,6 +419,13 @@ $(document).ready(function() {
|
||||
{/foreach}
|
||||
</select>
|
||||
<a id="empty_caddie" href="admin.php?page=batch_manager&action=empty_caddie" style="{if !isset($filter.prefilter) or $filter.prefilter ne 'caddie'}display:none{/if}">{'Empty caddie'|translate}</a>
|
||||
|
||||
<span id="duplicates_options" style="{if !isset($filter.prefilter) or $filter.prefilter ne 'duplicates'}display:none{/if}">
|
||||
{'based on'|translate}
|
||||
<input type="checkbox" checked="checked" disabled="disabled"> {'file name'|translate}
|
||||
<label><input type="checkbox" name="filter_duplicates_date" {if isset($filter.duplicates_date) or (isset($filter.prefilter) and $filter.prefilter ne 'duplicates')}checked="checked"{/if}> {'date & time'|translate}</label>
|
||||
<label><input type="checkbox" name="filter_duplicates_dimensions" {if isset($filter.duplicates_dimensions)}checked="checked"{/if}> {'width & height'|translate}</label>
|
||||
</span>
|
||||
</li>
|
||||
|
||||
<li id="filter_category" {if !isset($filter.category)}style="display:none"{/if}>
|
||||
|
||||
@@ -981,6 +981,8 @@ LEGEND {
|
||||
#batchManagerGlobal blockquote {margin:5px 0 20px 15px;}
|
||||
#batchManagerGlobal .ui-slider-horizontal {width:650px;margin:5px 0 10px 0;}
|
||||
|
||||
#batchManagerGlobal #duplicates_options label {margin-left:10px;}
|
||||
|
||||
#order_filters a.addFilter {font-weight:normal;margin-left:20px;}
|
||||
#order_filters a.removeFilter {font-weight:normal;}
|
||||
#order_filters span.property span.filter:first-child a.removeFilter {display:none;} /* can't delete the first field */
|
||||
|
||||
Reference in New Issue
Block a user