From 12ca607727f5cdc1a85f2435b8f0842dc466c45e Mon Sep 17 00:00:00 2001 From: marsooooo Date: Mon, 26 Aug 2024 14:14:57 +0200 Subject: [PATCH] issue #2164 updated & fixed bugs on batch manager Added dark mode for unit mode Templatized filter block for both unit and global mode Optimized JS functions and added extensibility for unit mode Modified images.setInfo method so unit mode could save orphan images Fixed a bug where php would break if filter selection was empty in unit mode --- admin/batch_manager_global.php | 142 +------------- admin/batch_manager_unit.php | 161 +++------------- admin/include/batch_manager_filters.inc.php | 142 ++++++++++++++ admin/themes/default/js/batchManagerUnit.js | 112 +++++------ .../default/template/batch_manager_global.tpl | 9 - .../default/template/batch_manager_unit.tpl | 179 ++++++++++-------- .../include/batch_manager_filter.inc.tpl | 7 + admin/themes/default/theme.css | 27 ++- admin/themes/roma/theme.css | 78 +++++++- include/ws_functions/pwg.images.php | 26 ++- language/en_UK/admin.lang.php | 4 +- language/fr_FR/admin.lang.php | 2 + 12 files changed, 450 insertions(+), 439 deletions(-) create mode 100644 admin/include/batch_manager_filters.inc.php diff --git a/admin/batch_manager_global.php b/admin/batch_manager_global.php index 937dba560..7a8680244 100644 --- a/admin/batch_manager_global.php +++ b/admin/batch_manager_global.php @@ -430,157 +430,17 @@ $template->set_filenames(array('batch_manager_global' => 'batch_manager_global.t $base_url = get_root_url().'admin.php'; -$prefilters = array( - array('ID' => 'caddie', 'NAME' => l10n('Caddie')), - array('ID' => 'favorites', 'NAME' => l10n('Your favorites')), - array('ID' => 'last_import', 'NAME' => l10n('Last import')), - array('ID' => 'no_album', 'NAME' => l10n('With no album').' ('.l10n('Orphans').')'), - array('ID' => 'no_tag', 'NAME' => l10n('With no tag')), - array('ID' => 'duplicates', 'NAME' => l10n('Duplicates')), - array('ID' => 'all_photos', 'NAME' => l10n('All')) -); - -if ($conf['enable_synchronization']) -{ - $prefilters[] = array('ID' => 'no_virtual_album', 'NAME' => l10n('With no virtual album')); - $prefilters[] = array('ID' => 'no_sync_md5sum', 'NAME' => l10n('With no checksum')); -} - -function UC_name_compare($a, $b) -{ - return strcmp(strtolower($a['NAME']), strtolower($b['NAME'])); -} - -$prefilters = trigger_change('get_batch_manager_prefilters', $prefilters); - -// Sort prefilters by localized name. -usort($prefilters, function ($a, $b) { - return strcmp(strtolower($a['NAME']), strtolower($b['NAME'])); -}); - -$template->assign( - array( - 'conf_checksum_compute_blocksize' => $conf['checksum_compute_blocksize'], - 'prefilters' => $prefilters, - 'filter' => $_SESSION['bulk_manager_filter'], - 'selection' => $collection, - 'all_elements' => $page['cat_elements_id'], - 'START' => $page['start'], - 'PWG_TOKEN' => get_pwg_token(), - 'U_DISPLAY'=>$base_url.get_query_string_diff(array('display')), - 'F_ACTION'=>$base_url.get_query_string_diff(array('cat','start','tag','filter')), - 'ADMIN_PAGE_TITLE' => l10n('Batch Manager'), - ) - ); - -if (isset($page['no_md5sum_number'])) -{ - $template->assign( - array( - 'NB_NO_MD5SUM' => $page['no_md5sum_number'], - ) - ); -} else { - $template->assign('NB_NO_MD5SUM', ''); -} +include(PHPWG_ROOT_PATH.'admin/include/batch_manager_filters.inc.php'); // +-----------------------------------------------------------------------+ // | caddie options | // +-----------------------------------------------------------------------+ $template->assign('IN_CADDIE', 'caddie' == $page['prefilter']); - // +-----------------------------------------------------------------------+ // | global mode form | // +-----------------------------------------------------------------------+ -// privacy level -foreach ($conf['available_permission_levels'] as $level) -{ - $level_options[$level] = l10n(sprintf('Level %d', $level)); - - if (0 == $level) - { - $level_options[$level] = l10n('Everybody'); - } -} -$template->assign( - array( - 'filter_level_options'=> $level_options, - 'filter_level_options_selected' => isset($_SESSION['bulk_manager_filter']['level']) - ? $_SESSION['bulk_manager_filter']['level'] - : 0, - ) - ); - -// tags -$filter_tags = array(); - -if (!empty($_SESSION['bulk_manager_filter']['tags'])) -{ - $query = ' -SELECT - id, - name - FROM '.TAGS_TABLE.' - WHERE id IN ('.implode(',', $_SESSION['bulk_manager_filter']['tags']).') -;'; - - $filter_tags = get_taglist($query); -} - -$template->assign('filter_tags', $filter_tags); - -// in the filter box, which category to select by default -$selected_category = array(); - -if (isset($_SESSION['bulk_manager_filter']['category'])) -{ - $selected_category = array($_SESSION['bulk_manager_filter']['category']); -} -else -{ - // we need to know the category in which the last photo was added - $query = ' -SELECT category_id - FROM '.IMAGE_CATEGORY_TABLE.' - ORDER BY image_id DESC - LIMIT 1 -;'; - $result = pwg_query($query); - if (pwg_db_num_rows($result) > 0) - { - $row = pwg_db_fetch_assoc($result); - $selected_category[] = $row['category_id']; - } -} - -$template->assign('filter_category_selected', $selected_category); - -// Dissociate from a category : categories listed for dissociation can only -// represent virtual links. We can't create orphans. Links to physical -// categories can't be broken. -$associated_categories = array(); - -if (count($page['cat_elements_id']) > 0) -{ - $query = ' -SELECT - DISTINCT(category_id) AS id - FROM '.IMAGE_CATEGORY_TABLE.' AS ic - JOIN '.IMAGES_TABLE.' AS i ON i.id = ic.image_id - WHERE ic.image_id IN ('.implode(',', $page['cat_elements_id']).') - AND ( - ic.category_id != i.storage_category_id - OR i.storage_category_id IS NULL - ) -;'; - - $associated_categories = query2array($query, 'id', 'id'); -} - -$template->assign('associated_categories', $associated_categories); - if (count($page['cat_elements_id']) > 0) { // remove tags diff --git a/admin/batch_manager_unit.php b/admin/batch_manager_unit.php index dd1baa197..e3cf6f331 100644 --- a/admin/batch_manager_unit.php +++ b/admin/batch_manager_unit.php @@ -149,127 +149,13 @@ $template->assign( 'PWG_TOKEN' => get_pwg_token(), ) ); - //prefilter - $prefilters = array( - array('ID' => 'caddie', 'NAME' => l10n('Caddie')), - array('ID' => 'favorites', 'NAME' => l10n('Your favorites')), - array('ID' => 'last_import', 'NAME' => l10n('Last import')), - array('ID' => 'no_album', 'NAME' => l10n('With no album').' ('.l10n('Orphans').')'), - array('ID' => 'no_tag', 'NAME' => l10n('With no tag')), - array('ID' => 'duplicates', 'NAME' => l10n('Duplicates')), - array('ID' => 'all_photos', 'NAME' => l10n('All')) - ); - - if ($conf['enable_synchronization']) - { - $prefilters[] = array('ID' => 'no_virtual_album', 'NAME' => l10n('With no virtual album')); - $prefilters[] = array('ID' => 'no_sync_md5sum', 'NAME' => l10n('With no checksum')); - } - - function UC_name_compare($a, $b) - { - return strcmp(strtolower($a['NAME']), strtolower($b['NAME'])); - } - - $prefilters = trigger_change('get_batch_manager_prefilters', $prefilters); - - // Sort prefilters by localized name. - usort($prefilters, function ($a, $b) { - return strcmp(strtolower($a['NAME']), strtolower($b['NAME'])); - }); - - $template->assign( - array( - 'conf_checksum_compute_blocksize' => $conf['checksum_compute_blocksize'], - 'prefilters' => $prefilters, - 'filter' => $_SESSION['bulk_manager_filter'], - 'selection' => $collection, - 'all_elements' => $page['cat_elements_id'], - 'START' => $page['start'], - 'U_DISPLAY'=>$base_url.get_query_string_diff(array('display')), - 'F_ACTION'=>$base_url.get_query_string_diff(array('cat','start','tag','filter')), - ) - ); - - if (isset($page['no_md5sum_number'])) - { - $template->assign( - array( - 'NB_NO_MD5SUM' => $page['no_md5sum_number'], - ) - ); - } else { - $template->assign('NB_NO_MD5SUM', ''); - } - - - // privacy level - foreach ($conf['available_permission_levels'] as $level) - { - $level_options[$level] = l10n(sprintf('Level %d', $level)); - - if (0 == $level) - { - $level_options[$level] = l10n('Everybody'); - } - } - $template->assign( - array( - 'filter_level_options'=> $level_options, - 'filter_level_options_selected' => isset($_SESSION['bulk_manager_filter']['level']) - ? $_SESSION['bulk_manager_filter']['level'] - : 0, - ) - ); - - // tags - $filter_tags = array(); - - if (!empty($_SESSION['bulk_manager_filter']['tags'])) - { - $query = ' - SELECT - id, - name - FROM '.TAGS_TABLE.' - WHERE id IN ('.implode(',', $_SESSION['bulk_manager_filter']['tags']).') - ;'; - - $filter_tags = get_taglist($query); - } - - $template->assign('filter_tags', $filter_tags); - - // in the filter box, which category to select by default - $selected_category = array(); - - if (isset($_SESSION['bulk_manager_filter']['category'])) - { - $selected_category = array($_SESSION['bulk_manager_filter']['category']); - } - else - { - // we need to know the category in which the last photo was added - $query = ' - SELECT category_id - FROM '.IMAGE_CATEGORY_TABLE.' - ORDER BY image_id DESC - LIMIT 1 - ;'; - $result = pwg_query($query); - if (pwg_db_num_rows($result) > 0) - { - $row = pwg_db_fetch_assoc($result); - $selected_category[] = $row['category_id']; - } - } - - $template->assign('filter_category_selected', $selected_category); - + include(PHPWG_ROOT_PATH.'admin/include/batch_manager_filters.inc.php'); // +-----------------------------------------------------------------------+ // | global mode thumbnails | // +-----------------------------------------------------------------------+ +$template->assign('ACTIVE_PLUGINS', array_keys($pwg_loaded_plugins)); + // how many items to display on this page if (!empty($_GET['display'])) { @@ -285,8 +171,7 @@ else { $page['nb_images'] = 5; } -$template->assign('per_page', $conf['batch_manager_images_per_page_unit']); - +$template->assign('per_page', $page['nb_images']); if (count($page['cat_elements_id']) > 0) { @@ -345,8 +230,21 @@ SELECT * '.$conf['order_by'].' LIMIT '.$page['nb_images'].' OFFSET '.$page['start'].' ;'; - $result = pwg_query($query); - + // $result = pwg_query($query); + $images = query2array($query); + $added_by_ids = array_unique(array_column($images, 'added_by')); + if (count($added_by_ids) > 0) + { + $query = ' +SELECT + '.$conf['user_fields']['username'].' AS username, + '.$conf['user_fields']['id'].' AS id + FROM '.USERS_TABLE.' + WHERE '.$conf['user_fields']['id'].' IN ( '.implode(',', $added_by_ids).' ) +;'; + $added_by_username_of = query2array($query, 'id', 'username'); + } + $storage_category_id = null; if (!empty($row['storage_category_id'])) { @@ -359,9 +257,9 @@ SELECT * "2" => "2", "4" => "1", "8" => "0", -]; + ]; - while ($row = pwg_db_fetch_assoc($result)) + foreach ($images as $row) { $element_ids[] = $row['id']; @@ -470,7 +368,7 @@ SELECT $admin_url_start = $admin_photo_base_url.'-properties'; $admin_url_start.= isset($row['cat_id']) ? '&cat_id='.$row['cat_id'] : ''; $selected_level = isset($row['level']) ? $row['level'] : $row['level']; - + $template->append( 'elements', array_merge($row, @@ -493,9 +391,9 @@ SELECT 'FILESIZE' => l10n('%.2f MB',$row['filesize']/1024), 'REGISTRATION_DATE' => format_date($row['date_available']), 'EXT' => l10n('%s file type',end($extTab)), - 'POST_DATE' => l10n('Posted the %s', format_date($row['date_available'], array('day', 'month', 'year'))), + 'POST_DATE' => l10n('Added on %s', format_date($row['date_available'], array('day', 'month', 'year'))), 'AGE' => l10n(ucfirst(time_since($row['date_available'], 'year'))), - 'ADDED_BY' => l10n('Added by %s', $row['added_by']), + 'ADDED_BY' => l10n('Added by %s', $added_by_username_of[ $row['added_by'] ] ?? l10n('N/A')), 'STATS' => l10n('Visited %d times', $row['hit']), 'FILE' => l10n('%s', $row['file']), 'related_categories' => $related_categories, @@ -515,16 +413,15 @@ SELECT )); } - $template->assign('ACTIVE_PLUGINS', array_keys($pwg_loaded_plugins)); - $template->assign(array( 'ELEMENT_IDS' => implode(',', $element_ids), - 'CACHE_KEYS' => get_admin_client_cache_keys(array('tags')), - - )); - + )); } +$template->assign(array( + 'CACHE_KEYS' => get_admin_client_cache_keys(array('tags', 'categories')), +)); + trigger_notify('loc_end_element_set_unit'); // +-----------------------------------------------------------------------+ diff --git a/admin/include/batch_manager_filters.inc.php b/admin/include/batch_manager_filters.inc.php new file mode 100644 index 000000000..f6980d003 --- /dev/null +++ b/admin/include/batch_manager_filters.inc.php @@ -0,0 +1,142 @@ + 'caddie', 'NAME' => l10n('Caddie')), + array('ID' => 'favorites', 'NAME' => l10n('Your favorites')), + array('ID' => 'last_import', 'NAME' => l10n('Last import')), + array('ID' => 'no_album', 'NAME' => l10n('With no album').' ('.l10n('Orphans').')'), + array('ID' => 'no_tag', 'NAME' => l10n('With no tag')), + array('ID' => 'duplicates', 'NAME' => l10n('Duplicates')), + array('ID' => 'all_photos', 'NAME' => l10n('All')) + ); + + if ($conf['enable_synchronization']) + { + $prefilters[] = array('ID' => 'no_virtual_album', 'NAME' => l10n('With no virtual album')); + $prefilters[] = array('ID' => 'no_sync_md5sum', 'NAME' => l10n('With no checksum')); + } + + function UC_name_compare($a, $b) + { + return strcmp(strtolower($a['NAME']), strtolower($b['NAME'])); + } + + $prefilters = trigger_change('get_batch_manager_prefilters', $prefilters); + + // Sort prefilters by localized name. + usort($prefilters, function ($a, $b) { + return strcmp(strtolower($a['NAME']), strtolower($b['NAME'])); + }); + + $template->assign( + array( + 'conf_checksum_compute_blocksize' => $conf['checksum_compute_blocksize'], + 'prefilters' => $prefilters, + 'filter' => $_SESSION['bulk_manager_filter'], + 'selection' => $collection, + 'all_elements' => $page['cat_elements_id'], + 'START' => $page['start'], + 'PWG_TOKEN' => get_pwg_token(), + 'U_DISPLAY'=>$base_url.get_query_string_diff(array('display')), + 'F_ACTION'=>$base_url.get_query_string_diff(array('cat','start','tag','filter')), + 'ADMIN_PAGE_TITLE' => l10n('Batch Manager'), + ) + ); + + if (isset($page['no_md5sum_number'])) + { + $template->assign( + array( + 'NB_NO_MD5SUM' => $page['no_md5sum_number'], + ) + ); + } else { + $template->assign('NB_NO_MD5SUM', ''); + } + + // privacy level + foreach ($conf['available_permission_levels'] as $level) + { + $level_options[$level] = l10n(sprintf('Level %d', $level)); + + if (0 == $level) + { + $level_options[$level] = l10n('Everybody'); + } + } + $template->assign( + array( + 'filter_level_options'=> $level_options, + 'filter_level_options_selected' => isset($_SESSION['bulk_manager_filter']['level']) + ? $_SESSION['bulk_manager_filter']['level'] + : 0, + ) + ); + + // tags + $filter_tags = array(); + + if (!empty($_SESSION['bulk_manager_filter']['tags'])) + { + $query = ' + SELECT + id, + name + FROM '.TAGS_TABLE.' + WHERE id IN ('.implode(',', $_SESSION['bulk_manager_filter']['tags']).') + ;'; + + $filter_tags = get_taglist($query); + } + + $template->assign('filter_tags', $filter_tags); + + // in the filter box, which category to select by default + $selected_category = array(); + if (isset($_SESSION['bulk_manager_filter']['category'])) + { + $selected_category = array($_SESSION['bulk_manager_filter']['category']); + } + else + { + // we need to know the category in which the last photo was added + $query = ' + SELECT category_id + FROM '.IMAGE_CATEGORY_TABLE.' + ORDER BY image_id DESC + LIMIT 1 + ;'; + $result = pwg_query($query); + if (pwg_db_num_rows($result) > 0) + { + $row = pwg_db_fetch_assoc($result); + $selected_category[] = $row['category_id']; + } + } + + $template->assign('filter_category_selected', $selected_category); + + // Dissociate from a category : categories listed for dissociation can only + // represent virtual links. We can't create orphans. Links to physical + // categories can't be broken. + $associated_categories = array(); + + if (count($page['cat_elements_id']) > 0) + { + $query = ' +SELECT + DISTINCT(category_id) AS id + FROM '.IMAGE_CATEGORY_TABLE.' AS ic + JOIN '.IMAGES_TABLE.' AS i ON i.id = ic.image_id + WHERE ic.image_id IN ('.implode(',', $page['cat_elements_id']).') + AND ( + ic.category_id != i.storage_category_id + OR i.storage_category_id IS NULL + ) +;'; + + $associated_categories = query2array($query, 'id', 'id'); + } + + $template->assign('associated_categories', $associated_categories); +?> \ No newline at end of file diff --git a/admin/themes/default/js/batchManagerUnit.js b/admin/themes/default/js/batchManagerUnit.js index e3ad3dcd9..df543a186 100644 --- a/admin/themes/default/js/batchManagerUnit.js +++ b/admin/themes/default/js/batchManagerUnit.js @@ -1,13 +1,13 @@ $(document).ready(function() { // Detect unsaved changes on any inputs - var user_interacted = false; + let user_interacted = false; $('input, textarea, select').on('focus', function() { user_interacted = true; }); $('input, textarea').on('input', function() { - var pictureId = $(this).parents("fieldset").data("image_id"); + const pictureId = $(this).parents("fieldset").data("image_id"); if (user_interacted == true) { showUnsavedLocalBadge(pictureId); } @@ -15,14 +15,14 @@ $(document).ready(function() { // Specific handler for datepicker inputs $('input[data-datepicker]').on('change', function() { - var pictureId = $(this).parents("fieldset").data("image_id"); + const pictureId = $(this).parents("fieldset").data("image_id"); if (user_interacted == true) { showUnsavedLocalBadge(pictureId); } }); $('select').on('change', function() { - var pictureId = $(this).parents("fieldset").data("image_id"); + const pictureId = $(this).parents("fieldset").data("image_id"); if (user_interacted == true) { showUnsavedLocalBadge(pictureId); } @@ -30,13 +30,13 @@ $(document).ready(function() { $('.related-categories-container .remove-item, .datepickerDelete').on('click', function() { user_interacted = true; - var pictureId = $(this).parents("fieldset").data("image_id"); + const pictureId = $(this).parents("fieldset").data("image_id"); showUnsavedLocalBadge(pictureId); }); // METADATA SYNC $('.action-sync-metadata').on('click', function(event) { - var pictureId = $(this).parents("fieldset").data("image_id"); + const pictureId = $(this).parents("fieldset").data("image_id"); $.confirm({ title: str_meta_warning, draggable: false, @@ -66,7 +66,7 @@ $(document).ready(function() { }, dataType: 'json', success: function(data) { - var isOk = data.stat && data.stat === "ok"; + const isOk = data.stat && data.stat === "ok"; if (isOk) { updateBlock(pictureId); } else { @@ -82,15 +82,15 @@ $(document).ready(function() { } }, cancel: { - text: str_meta_no + text: str_no } } }); }); // DELETE $('.action-delete-picture').on('click', function(event) { - var $fieldset = $(this).parents("fieldset"); - var pictureId = $fieldset.data("image_id"); + const $fieldset = $(this).parents("fieldset"); + const pictureId = $fieldset.data("image_id"); $.confirm({ title: str_are_you_sure, draggable: false, @@ -109,7 +109,7 @@ $(document).ready(function() { text: str_yes, btnClass: 'btn-red', action: function() { - var image_ids = [pictureId]; + const image_ids = [pictureId]; (function(ids) { $.ajax({ type: 'POST', @@ -121,7 +121,7 @@ $(document).ready(function() { }, dataType: 'json', success: function(data) { - var isOk = data.stat && data.stat === "ok"; + const isOk = data.stat && data.stat === "ok"; if (isOk) { $fieldset.remove(); $('.pagination-container').css({ @@ -151,8 +151,8 @@ $(document).ready(function() { // VALIDATION //Unit Save $('.action-save-picture').on('click', function(event) { - var $fieldset = $(this).parents("fieldset"); - var pictureId = $fieldset.data("image_id"); + const $fieldset = $(this).parents("fieldset"); + const pictureId = $fieldset.data("image_id"); saveChanges(pictureId); }); //Global Save @@ -220,7 +220,7 @@ function check_related_categories(pictureId) { } function updateUnsavedGlobalBadge() { - var visibleLocalUnsavedCount = $(".local-unsaved-badge").filter(function() { + const visibleLocalUnsavedCount = $(".local-unsaved-badge").filter(function() { return $(this).css('display') === 'block'; }).length; if (visibleLocalUnsavedCount > 0) { @@ -258,7 +258,7 @@ function hideErrorLocalBadge(pictureId) { } //Succes badge function updateSuccessGlobalBadge() { - var visibleLocalSuccesCount = $(".local-success-badge").filter(function() { + const visibleLocalSuccesCount = $(".local-success-badge").filter(function() { return $(this).css('display') === 'block'; }).length; if (visibleLocalSuccesCount > 0) { @@ -269,7 +269,7 @@ function updateSuccessGlobalBadge() { } function showSuccessLocalBadge(pictureId) { - var badge = $("#picture-" + pictureId + " .local-success-badge"); + const badge = $("#picture-" + pictureId + " .local-success-badge"); badge.css({ 'display': 'block', 'opacity': 1 @@ -286,7 +286,7 @@ function hideSuccesLocalBadge(pictureId) { } function showSuccesGlobalBadge() { - var badge = $(".global-succes-badge"); + const badge = $(".global-succes-badge"); badge.css({ 'display': 'block', 'opacity': 1 @@ -303,7 +303,7 @@ function hideSuccesGlobalBadge() { } function showMetasyncSuccesBadge(pictureId) { - var badge = $("#picture-" + pictureId + " .metasync-success"); + const badge = $("#picture-" + pictureId + " .metasync-success"); badge.css({ 'display': 'block', 'opacity': 1 @@ -340,21 +340,21 @@ function saveChanges(pictureId) { if ($("#picture-" + pictureId + " .local-unsaved-badge").css('display') === 'block') { disableLocalButton(pictureId); // Retrieve Infos - var name = $("#name-" + pictureId).val(); - var author = $("#author-" + pictureId).val(); - var date_creation = $("#date_creation-" + pictureId).val(); - var comment = $("#description-" + pictureId).val(); - var level = $("#level-" + pictureId + " option:selected").val(); + const name = $("#picture-" + pictureId +" #name").val(); + const author = $("#picture-" + pictureId +" #author").val(); + const date_creation = $("#picture-" + pictureId + " #date_creation").val(); + const comment = $("#picture-" + pictureId +" #description").val(); + const level = $("#picture-" + pictureId +" #level" + " option:selected").val(); // Get Categories const categories = get_related_category(pictureId); - var categoriesStr = categories.join(';'); + let categoriesStr = categories.join(';'); // Get Tags - var tags = []; - $("#tags-" + pictureId + " option").each(function() { - var tagId = $(this).val().replace(/~~/g, ''); + let tags = []; + $("#picture-" + pictureId +" #tags" + " option").each(function() { + let tagId = $(this).val().replace(/~~/g, ''); tags.push(tagId); }); - var tagsStr = tags.join(','); + let tagsStr = tags.join(','); $.ajax({ url: 'ws.php?format=json', method: 'POST', @@ -394,37 +394,39 @@ function saveChanges(pictureId) { function saveAllChanges() { $("fieldset").each(function() { - var pictureId = $(this).data("image_id"); + const pictureId = $(this).data("image_id"); saveChanges(pictureId); }); } //PLUGINS SAVE METHOD -var pluginFunctionMap = {}; +const pluginFunctionMap = {}; function pluginFunctionMapInit(activePlugins) { activePlugins.forEach(function(pluginId) { - var functionName = pluginId + '_batchManagerSave'; + const functionName = pluginId + '_batchManagerSave'; if (typeof window[functionName] === 'function') { pluginFunctionMap[pluginId] = window[functionName]; - } else { - console.log('Function not found during initialization: ' + functionName); - } + } + // else { + // console.log('Function not found during initialization: ' + functionName); + // } }); } function pluginSaveLoop(activePlugins) { if (activePlugins.length === 0) { - console.log("No plugins to process in pluginSaveLoop."); + // console.log("No plugins to process in pluginSaveLoop."); return; } activePlugins.forEach(function(pluginId) { - var saveFunction = pluginFunctionMap[pluginId]; + const saveFunction = pluginFunctionMap[pluginId]; if (typeof saveFunction === 'function') { saveFunction(); - console.log('Executed function for plugin: ' + pluginId); - } else { - console.log('Function not found for plugin: ' + pluginId); - } + // console.log('Executed function for plugin: ' + pluginId); + } + // else { + // console.log('Function not found for plugin: ' + pluginId); + // } }); } //UPDATE BLOCKS (Yet to be implemented) @@ -468,12 +470,12 @@ function updateBlock(pictureId) { } //TAGS UPDATE Yet to be implemented // function updateTags(tagsData, pictureId) { -// var $tagsUpdate = $('#tags-'+pictureId).selectize({ +// const $tagsUpdate = $('#tags-'+pictureId).selectize({ // create: true, // persist: false // }); -// var selectizeTags = $tagsUpdate[0].selectize; -// var transformedData = tagsData.map(function(item) { +// const selectizeTags = $tagsUpdate[0].selectize; +// const transformedData = tagsData.map(function(item) { // return { // value: item.id, // text: item.name @@ -483,24 +485,4 @@ function updateBlock(pictureId) { // selectizeTags.clearOptions(); // selectizeTags.addOption(transformedData); // selectizeTags.refreshOptions(true); -// }; - -//UNRELEASED LEVEL SLIDER -// $(function () { -// $('.privacy-filter-slider').each(function() { -// var id = $(this).attr('id'); -// $(this).slider({ -// range: 'min', -// value: $(this).attr('value'), -// min: 0, -// max: 4, -// slide: function (event, ui) { -// updateCertificationFilterLabel(ui.value, id); -// } -// }); -// }); -// }); -// function updateCertificationFilterLabel(value, id) { -// let label = strs_privacy[value]; -// $('#' + id + ' .privacy').html(label); -// } \ No newline at end of file +// }; \ No newline at end of file diff --git a/admin/themes/default/template/batch_manager_global.tpl b/admin/themes/default/template/batch_manager_global.tpl index c1feda680..fd8cef127 100644 --- a/admin/themes/default/template/batch_manager_global.tpl +++ b/admin/themes/default/template/batch_manager_global.tpl @@ -4,15 +4,6 @@ {combine_script id='common' load='footer' path='admin/themes/default/js/common.js'} -{combine_script id='jquery.ui.slider' require='jquery.ui' load='async' path='themes/default/js/ui/minified/jquery.ui.slider.min.js'} -{combine_css path="themes/default/js/ui/theme/jquery.ui.slider.css"} -{combine_script id='doubleSlider' load='footer' require='jquery.ui.slider' path='admin/themes/default/js/doubleSlider.js'} - -{combine_script id='LocalStorageCache' load='footer' path='admin/themes/default/js/LocalStorageCache.js'} - -{combine_script id='jquery.selectize' load='footer' path='themes/default/js/plugins/selectize.min.js'} -{combine_css id='jquery.selectize' path="themes/default/js/plugins/selectize.{$themeconf.colorscheme}.css"} - {combine_script id='jquery.progressBar' load='async' path='themes/default/js/plugins/jquery.progressbar.min.js'} {combine_script id='jquery.ajaxmanager' load='async' path='themes/default/js/plugins/jquery.ajaxmanager.js'} diff --git a/admin/themes/default/template/batch_manager_unit.tpl b/admin/themes/default/template/batch_manager_unit.tpl index dbf1de563..e786a183b 100644 --- a/admin/themes/default/template/batch_manager_unit.tpl +++ b/admin/themes/default/template/batch_manager_unit.tpl @@ -4,17 +4,6 @@ {combine_script id='jquery.sort' load='footer' path='themes/default/js/plugins/jquery.sort.js'} -{combine_script id='LocalStorageCache' load='footer' path='admin/themes/default/js/LocalStorageCache.js'} - -{combine_script id='jquery.selectize' load='header' path='themes/default/js/plugins/selectize.min.js'} -{combine_css id='jquery.selectize' path="themes/default/js/plugins/selectize.{$themeconf.colorscheme}.css"} -{combine_script id='doubleSlider' load='footer' require='jquery.ui.slider' path='admin/themes/default/js/doubleSlider.js'} - -{combine_script id='jquery.ui.slider' require='jquery.ui' load='header' path='themes/default/js/ui/minified/jquery.ui.slider.min.js'} -{combine_css path="themes/default/js/ui/theme/jquery.ui.slider.css"} - -{combine_script id='jquery.selectize' load='footer' path='themes/default/js/plugins/selectize.min.js'} - {combine_script id='jquery.confirm' load='footer' require='jquery' path='themes/default/js/plugins/jquery-confirm.min.js'} {combine_css path="themes/default/js/plugins/jquery-confirm.min.css"} @@ -23,18 +12,47 @@ {footer_script} {* *} var activePlugins = {$ACTIVE_PLUGINS|json_encode}; -(function(){ +{if isset($CACHE_KEYS)} {* *} var tagsCache = new TagsCache({ serverKey: '{$CACHE_KEYS.tags}', serverId: '{$CACHE_KEYS._hash}', rootUrl: '{$ROOT_URL}' }); - tagsCache.selectize(jQuery('[data-selectize=tags]'), { lang: { 'Add': '{'Create'|translate}' }}); +{* *} +window.categoriesCache = new CategoriesCache({ + serverKey: '{$CACHE_KEYS.categories}', + serverId: '{$CACHE_KEYS._hash}', + rootUrl: '{$ROOT_URL}' + }); + + var associated_categories = {$associated_categories|@json_encode}; + + categoriesCache.selectize(jQuery('[data-selectize=categories]'), { + filter: function(categories, options) { + if (this.name == 'dissociate') { + var filtered = jQuery.grep(categories, function(cat) { + return !!associated_categories[cat.id]; + }); + + if (filtered.length > 0) { + options.default = filtered[0].id; + } + + return filtered; + } + else { + return categories; + } + } + }); +{/if} + + {* *} jQuery(function(){ {* *} jQuery('[data-datepicker]').pwgDatepicker({ @@ -54,9 +72,7 @@ str_no = '{'No, I have changed my mind'|translate|@escape:'javascript'}'; str_orphan = '{'This photo is an orphan'|@translate|escape:javascript}'; str_meta_warning = '{'Warning ! Unsaved changes will be lost'|translate|escape:javascript}'; str_meta_yes = '{'I want to continue'|translate|escape:javascript}' -str_meta_no = '{'No, I have changed my mind'|translate|escape:javascript}' -}()); const strs_privacy = { "0" : "{$level_options[8]}", "1" : "{$level_options[4]}", @@ -80,22 +96,23 @@ let b_current_picture_id; {/if} {*Filters*} -
+ {include file='include/batch_manager_filter.inc.tpl' title={'Batch Manager Filter'|@translate} searchPlaceholder={'Filters'|@translate}}
- Liste + {'List'|@translate} {count($all_elements)} {if !empty($elements) } -
-
- {'photos per page'|@translate} : - 5 - 10 - 50 +
+
+ {'photos per page'|@translate} : + 5 + 10 + 50
+
{if !empty($navbar) } @@ -105,11 +122,11 @@ let b_current_picture_id;
{foreach from=$elements item=element} - {footer_script} - all_related_categories_ids.push({ id: {$element.ID}, cat_ids: {$element.related_category_ids} }); + {footer_script} + all_related_categories_ids.push({ id: {$element.ID}, cat_ids: {$element.related_category_ids} }); url_delete_{$element.id} = '{$element.U_DELETE}'; {/footer_script} -