mirror of
https://github.com/Piwigo/Piwigo.git
synced 2026-06-02 04:15:05 +02:00
fixes #1381 orphans calculation is done only when needed by ajax call
This commit is contained in:
@@ -555,4 +555,116 @@ SELECT
|
||||
fclose($f);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* API method
|
||||
* Return the number of orphan photos if an album is deleted
|
||||
*/
|
||||
|
||||
function ws_images_calculateOrphansOnAlbumDeletion($param, &$service)
|
||||
{
|
||||
global $conf;
|
||||
|
||||
$category_id = $param['category_id'][0];
|
||||
|
||||
$query = '
|
||||
SELECT DISTINCT
|
||||
category_id
|
||||
FROM
|
||||
'.IMAGE_CATEGORY_TABLE.'
|
||||
WHERE
|
||||
category_id = '.$category_id.'
|
||||
LIMIT 1';
|
||||
$result = pwg_query($query);
|
||||
$category['has_images'] = pwg_db_num_rows($result)>0 ? true : false;
|
||||
|
||||
// number of sub-categories
|
||||
$subcat_ids = get_subcat_ids(array($category_id));
|
||||
|
||||
$category['nb_subcats'] = count($subcat_ids) - 1;
|
||||
|
||||
// total number of images under this category (including sub-categories)
|
||||
$query = '
|
||||
SELECT DISTINCT
|
||||
(image_id)
|
||||
FROM
|
||||
'.IMAGE_CATEGORY_TABLE.'
|
||||
WHERE
|
||||
category_id IN ('.implode(',', $subcat_ids).')
|
||||
;';
|
||||
$image_ids_recursive = query2array($query, null, 'image_id');
|
||||
|
||||
$category['nb_images_recursive'] = count($image_ids_recursive);
|
||||
|
||||
// number of images that would become orphan on album deletion
|
||||
$category['nb_images_becoming_orphan'] = 0;
|
||||
$category['nb_images_associated_outside'] = 0;
|
||||
|
||||
if ($category['nb_images_recursive'] > 0)
|
||||
{
|
||||
// if we don't have "too many" photos, it's faster to compute the orphans with MySQL
|
||||
if ($category['nb_images_recursive'] < 1000)
|
||||
{
|
||||
$query = '
|
||||
SELECT DISTINCT
|
||||
(image_id)
|
||||
FROM
|
||||
'.IMAGE_CATEGORY_TABLE.'
|
||||
WHERE
|
||||
category_id
|
||||
NOT IN
|
||||
('.implode(',', $subcat_ids).')
|
||||
AND
|
||||
image_id
|
||||
IN
|
||||
('.implode(',', $image_ids_recursive).')
|
||||
;';
|
||||
|
||||
$image_ids_associated_outside = query2array($query, null, 'image_id');
|
||||
$category['nb_images_associated_outside'] = count($image_ids_associated_outside);
|
||||
|
||||
$image_ids_becoming_orphan = array_diff($image_ids_recursive, $image_ids_associated_outside);
|
||||
$category['nb_images_becoming_orphan'] = count($image_ids_becoming_orphan);
|
||||
}
|
||||
// else it's better to avoid sending a huge SQL request, we compute the orphan list with PHP
|
||||
else
|
||||
{
|
||||
$image_ids_recursive_keys = array_flip($image_ids_recursive);
|
||||
|
||||
$query = '
|
||||
SELECT
|
||||
image_id
|
||||
FROM
|
||||
'.IMAGE_CATEGORY_TABLE.'
|
||||
WHERE
|
||||
category_id
|
||||
NOT IN
|
||||
('.implode(',', $subcat_ids).')
|
||||
;';
|
||||
$image_ids_associated_outside = query2array($query, null, 'image_id');
|
||||
$image_ids_not_orphan = array();
|
||||
|
||||
foreach ($image_ids_associated_outside as $image_id)
|
||||
{
|
||||
if (isset($image_ids_recursive_keys[$image_id]))
|
||||
{
|
||||
$image_ids_not_orphan[] = $image_id;
|
||||
}
|
||||
}
|
||||
|
||||
$category['nb_images_associated_outside'] = count(array_unique($image_ids_not_orphan));
|
||||
$image_ids_becoming_orphan = array_diff($image_ids_recursive, $image_ids_not_orphan);
|
||||
$category['nb_images_becoming_orphan'] = count($image_ids_becoming_orphan);
|
||||
}
|
||||
}
|
||||
|
||||
$output[] = array(
|
||||
'nb_images_associated_outside' => $category['nb_images_associated_outside'],
|
||||
'nb_images_becoming_orphan' => $category['nb_images_becoming_orphan'],
|
||||
'nb_images_recursive' => $category['nb_images_recursive'],
|
||||
);
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
?>
|
||||
Reference in New Issue
Block a user