Fix selected download redirect and refine selection toolbar

This commit is contained in:
Terranom674
2026-08-16 14:30:20 +02:00
parent de381ce47e
commit 4ef8ccd196

View File

@@ -112,8 +112,6 @@ function bratonien_tools_public_selection_init()
return; return;
} }
// Run before Batch Downloader's own index-button handler (+10). This lets us
// answer selection download requests without reloading the album page first.
add_event_handler('loc_end_index', 'bratonien_tools_public_selection_download_request', EVENT_HANDLER_PRIORITY_NEUTRAL + 5); add_event_handler('loc_end_index', 'bratonien_tools_public_selection_download_request', EVENT_HANDLER_PRIORITY_NEUTRAL + 5);
add_event_handler('loc_end_index', 'bratonien_tools_public_selection_render', EVENT_HANDLER_PRIORITY_NEUTRAL + 30); add_event_handler('loc_end_index', 'bratonien_tools_public_selection_render', EVENT_HANDLER_PRIORITY_NEUTRAL + 30);
add_event_handler('batchdownload_get_set_info', 'bratonien_tools_public_selection_filter_set', EVENT_HANDLER_PRIORITY_NEUTRAL + 30, 1); add_event_handler('batchdownload_get_set_info', 'bratonien_tools_public_selection_filter_set', EVENT_HANDLER_PRIORITY_NEUTRAL + 30, 1);
@@ -146,6 +144,13 @@ function bratonien_tools_public_selection_page_allowed()
return true; return true;
} }
function bratonien_tools_batch_download_init_url($set_id)
{
$base = BATCH_DOWNLOAD_PUBLIC.'init_zip';
$separator = strpos($base, '?') === false ? '?' : '&';
return $base.$separator.'set_id='.(int)$set_id;
}
function bratonien_tools_public_selection_download_request() function bratonien_tools_public_selection_download_request()
{ {
global $page, $conf; global $page, $conf;
@@ -176,8 +181,6 @@ function bratonien_tools_public_selection_download_request()
throw new RuntimeException('Es wurden keine Bilder ausgewaehlt.'); throw new RuntimeException('Es wurden keine Bilder ausgewaehlt.');
} }
// Never trust IDs received from the browser. Only images present in the
// currently accessible Piwigo result set may enter the download set.
$allowed = array_fill_keys(array_map('intval', $page['items']), true); $allowed = array_fill_keys(array_map('intval', $page['items']), true);
$filtered = array(); $filtered = array();
foreach ($selected as $image_id) foreach ($selected as $image_id)
@@ -199,7 +202,8 @@ function bratonien_tools_public_selection_download_request()
} }
$set = new BatchDownloader('new', $filtered, 'category', $page['category']['id'], 'original'); $set = new BatchDownloader('new', $filtered, 'category', $page['category']['id'], 'original');
if ((int)$set->getParam('nb_images') < 1) $set_id = (int)$set->getParam('id');
if ($set_id < 1 || (int)$set->getParam('nb_images') < 1)
{ {
$set->delete(); $set->delete();
throw new RuntimeException('Fuer die Auswahl konnte kein Download erzeugt werden.'); throw new RuntimeException('Fuer die Auswahl konnte kein Download erzeugt werden.');
@@ -212,16 +216,19 @@ function bratonien_tools_public_selection_download_request()
) )
{ {
$set->createNextArchive(true); $set->createNextArchive(true);
$target = get_root_url().BATCH_DOWNLOAD_PATH.'download.php?set_id='.$set->getParam('id').'&zip=1'; $target = get_root_url().BATCH_DOWNLOAD_PATH.'download.php?set_id='.$set_id.'&zip=1';
echo json_encode(array('ok' => true, 'download_url' => $target)); echo json_encode(array('ok' => true, 'download_url' => $target, 'set_id' => $set_id));
exit; exit;
} }
$target = add_url_params(BATCH_DOWNLOAD_PUBLIC.'init_zip', array('set_id' => $set->getParam('id'))); // Do not use add_url_params here. Piwigo can run with query-string based
echo json_encode(array('ok' => true, 'download_url' => $target)); // pretty URLs (index.php?/download/...), where set_id must remain a real
// GET parameter for Batch Downloader's download.inc.php.
$target = bratonien_tools_batch_download_init_url($set_id);
echo json_encode(array('ok' => true, 'download_url' => $target, 'set_id' => $set_id));
exit; exit;
} }
catch (Exception $e) catch (Throwable $e)
{ {
http_response_code(400); http_response_code(400);
echo json_encode(array('ok' => false, 'error' => $e->getMessage())); echo json_encode(array('ok' => false, 'error' => $e->getMessage()));
@@ -248,7 +255,7 @@ function bratonien_tools_public_selection_render()
$template->parse('bratonien_selection_assets', false); $template->parse('bratonien_selection_assets', false);
$button = '<a href="#" id="bratonien-selection-toggle" class="pwg-state-default pwg-button" title="Bilder auswaehlen" aria-label="Bilder auswaehlen">' $button = '<a href="#" id="bratonien-selection-toggle" class="pwg-state-default pwg-button" title="Bilder auswaehlen" aria-label="Bilder auswaehlen">'
.'<span class="pwg-icon fas fa-check-square fa-fw" aria-hidden="true"></span>' .'<span class="pwg-icon fas fa-check-double fa-fw" aria-hidden="true"></span>'
.'</a>'; .'</a>';
$template->add_index_button($button, 49); $template->add_index_button($button, 49);