diff --git a/include/public_selection.inc.php b/include/public_selection.inc.php new file mode 100644 index 0000000..583e8c9 --- /dev/null +++ b/include/public_selection.inc.php @@ -0,0 +1,110 @@ +assign(array( + 'BRATONIEN_SELECTION_PATH' => 'plugins/'.BRATONIEN_TOOLS_ID, + 'BRATONIEN_SELECTION_DOWNLOAD_URL' => bratonien_tools_public_selection_download_url(), + )); + + $template->set_filename('bratonien_selection_assets', BRATONIEN_TOOLS_PATH.'template/public_selection_assets.tpl'); + $template->parse('bratonien_selection_assets', false); + + $button = '' + .'' + .'Auswahl' + .''; + + $template->add_index_button($button, 49); +} + +function bratonien_tools_public_selection_download_url() +{ + $url = duplicate_index_url(array(), array('action', 'down_size', 'bratonien_selection')); + return add_url_params($url, array('action' => 'advdown_set')); +} + +/** + * Restricts the Batch Downloader set to the image IDs selected in the public UI. + * The intersection with the current Piwigo set prevents downloading images that + * are not part of the currently accessible album/result set. + */ +function bratonien_tools_public_selection_filter_set($set) +{ + if (!is_array($set)) + { + return $set; + } + + if (empty($_GET['action']) || $_GET['action'] !== 'advdown_set' || !isset($_GET['bratonien_selection'])) + { + return $set; + } + + $raw = is_array($_GET['bratonien_selection']) + ? implode(',', $_GET['bratonien_selection']) + : (string)$_GET['bratonien_selection']; + + $selected = array_values(array_unique(array_filter(array_map('intval', preg_split('/[^0-9]+/', $raw))))); + if (empty($selected)) + { + $set['items'] = array(); + return $set; + } + + $allowed = array_map('intval', isset($set['items']) && is_array($set['items']) ? $set['items'] : array()); + $allowed_lookup = array_fill_keys($allowed, true); + + $filtered = array(); + foreach ($selected as $image_id) + { + if (isset($allowed_lookup[$image_id])) + { + $filtered[] = $image_id; + } + } + + $set['items'] = $filtered; + $set['type'] = 'bratonien_selection'; + $set['id'] = isset($set['id']) ? $set['id'] : null; + + return $set; +} + +bratonien_tools_public_selection_init();