diff options
author | rvelices <rv-github@modusoptimus.com> | 2011-07-30 04:53:18 +0000 |
---|---|---|
committer | rvelices <rv-github@modusoptimus.com> | 2011-07-30 04:53:18 +0000 |
commit | 6e8e08f3b76efe0d32f5169187bfff03e70bfed5 (patch) | |
tree | b77261d5c1a5e72d3a95ddd60eefcdf89676118f | |
parent | 79aea26230915261bf89fae07a5e277a410957de (diff) |
feature 2387: addd a filter by tag in the batch manager (merge from trunk)
git-svn-id: http://piwigo.org/svn/branches/2.2@11854 68402e56-0260-453c-a942-63ccdbb3a9ee
-rw-r--r-- | admin/batch_manager.php | 23 | ||||
-rw-r--r-- | admin/batch_manager_global.php | 9 | ||||
-rw-r--r-- | admin/batch_manager_unit.php | 4 | ||||
-rw-r--r-- | admin/include/functions.php | 13 | ||||
-rw-r--r-- | admin/picture_modify.php | 8 | ||||
-rw-r--r-- | admin/themes/default/template/batch_manager_global.tpl | 27 |
6 files changed, 66 insertions, 18 deletions
diff --git a/admin/batch_manager.php b/admin/batch_manager.php index c1d3687d4..34bbefeea 100644 --- a/admin/batch_manager.php +++ b/admin/batch_manager.php @@ -68,6 +68,11 @@ if (isset($_POST['submitFilter'])) } } + if (isset($_POST['filter_tags_use'])) + { + $_SESSION['bulk_manager_filter']['tags'] = get_tag_ids($_POST['filter_tags'], false); + } + if (isset($_POST['filter_level_use'])) { if (in_array($_POST['filter_level'], $conf['available_permission_levels'])) @@ -290,6 +295,20 @@ SELECT id ); } +if (!empty($_SESSION['bulk_manager_filter']['tags'])) +{ + $query = ' +SELECT image_id + FROM '.IMAGE_TAG_TABLE. + 'WHERE tag_id IN('.implode(',',$_SESSION['bulk_manager_filter']['tags']).') + GROUP BY image_id + HAVING COUNT(tag_id)='.count($_SESSION['bulk_manager_filter']['tags']); + array_push( + $filter_sets, + get_image_ids_for_tags($_SESSION['bulk_manager_filter']['tags']) + ); +} + $current_set = array_shift($filter_sets); foreach ($filter_sets as $set) { @@ -365,9 +384,7 @@ if (in_array($page['tab'], $tab_codes)) // +-----------------------------------------------------------------------+ $query = ' -SELECT - id AS tag_id, - name AS tag_name +SELECT id, name FROM '.TAGS_TABLE.' ;'; $template->assign('tags', get_taglist($query)); diff --git a/admin/batch_manager_global.php b/admin/batch_manager_global.php index 73d11be2d..1fb4b9ccd 100644 --- a/admin/batch_manager_global.php +++ b/admin/batch_manager_global.php @@ -486,6 +486,15 @@ $template->assign( ) ); +if (!empty($_SESSION['bulk_manager_filter']['tags'])) +{ + $query = ' +SELECT id, name + FROM '.TAGS_TABLE.' + WHERE id IN ('.implode(',', $_SESSION['bulk_manager_filter']['tags']).')'; + $template->assign('filter_tags', get_taglist($query)); +} + // Virtualy associate a picture to a category $query = ' SELECT id,name,uppercats,global_rank diff --git a/admin/batch_manager_unit.php b/admin/batch_manager_unit.php index a009a6843..4c0d7227d 100644 --- a/admin/batch_manager_unit.php +++ b/admin/batch_manager_unit.php @@ -251,8 +251,8 @@ SELECT id,path,tn_ext,name,date_creation,comment,author,level,file $query = ' SELECT - tag_id, - name AS tag_name + id, + name FROM '.IMAGE_TAG_TABLE.' AS it JOIN '.TAGS_TABLE.' AS t ON t.id = it.tag_id WHERE image_id = '.$row['id'].' diff --git a/admin/include/functions.php b/admin/include/functions.php index b7972ddc5..0eb13f1be 100644 --- a/admin/include/functions.php +++ b/admin/include/functions.php @@ -2115,8 +2115,8 @@ function get_taglist($query) array_push( $taglist, array( - 'name' => $row['tag_name'], - 'id' => '~~'.$row['tag_id'].'~~', + 'name' => $row['name'], + 'id' => '~~'.$row['id'].'~~', ) ); } @@ -2127,7 +2127,7 @@ function get_taglist($query) return $taglist; } -function get_tag_ids($raw_tags) +function get_tag_ids($raw_tags, $allow_create=true) { // In $raw_tags we receive something like array('~~6~~', '~~59~~', 'New // tag', 'Another new tag') The ~~34~~ means that it is an existing @@ -2143,13 +2143,10 @@ function get_tag_ids($raw_tags) { array_push($tag_ids, $matches[1]); } - else + elseif ($allow_create) { // we have to create a new tag - array_push( - $tag_ids, - tag_id_from_tag_name($raw_tag) - ); + $tag_ids[] = tag_id_from_tag_name($raw_tag); } } diff --git a/admin/picture_modify.php b/admin/picture_modify.php index 779197f0c..7dd6fcbc5 100644 --- a/admin/picture_modify.php +++ b/admin/picture_modify.php @@ -227,8 +227,8 @@ if (isset($_POST['dismiss']) // tags $query = ' SELECT - tag_id, - name AS tag_name + id, + name FROM '.IMAGE_TAG_TABLE.' AS it JOIN '.TAGS_TABLE.' AS t ON t.id = it.tag_id WHERE image_id = '.$_GET['image_id'].' @@ -237,8 +237,8 @@ $tag_selection = get_taglist($query); $query = ' SELECT - id AS tag_id, - name AS tag_name + id, + name FROM '.TAGS_TABLE.' ;'; $tags = get_taglist($query); diff --git a/admin/themes/default/template/batch_manager_global.tpl b/admin/themes/default/template/batch_manager_global.tpl index 58c941cbf..4ecfee7b5 100644 --- a/admin/themes/default/template/batch_manager_global.tpl +++ b/admin/themes/default/template/batch_manager_global.tpl @@ -9,8 +9,9 @@ {footer_script require='jquery.tokeninput'} jQuery(document).ready(function() {ldelim} + var tag_src = [{foreach from=$tags item=tag name=tags}{ldelim}name:"{$tag.name|@escape:'javascript'}",id:"{$tag.id}"{rdelim}{if !$smarty.foreach.tags.last},{/if}{/foreach}]; jQuery("#tags").tokenInput( - [{foreach from=$tags item=tag name=tags}{ldelim}"name":"{$tag.name|@escape:'javascript'}","id":"{$tag.id}"{rdelim}{if !$smarty.foreach.tags.last},{/if}{/foreach}], + tag_src, {ldelim} hintText: '{'Type in a search term'|@translate}', noResultsText: '{'No results'|@translate}', @@ -21,6 +22,19 @@ jQuery(document).ready(function() {ldelim} allowCreation: true } ); + + jQuery("#tagsFilter").tokenInput( + tag_src, + {ldelim} + hintText: '{'Type in a search term'|@translate}', + noResultsText: '{'No results'|@translate}', + searchingText: '{'Searching...'|@translate}', + animateDropdown: false, + preventDuplicates: true, + allowCreation: false + } + ); + }); {/footer_script} @@ -346,6 +360,16 @@ jQuery(window).load(function() { </select> <label><input type="checkbox" name="filter_category_recursive" {if isset($filter.category_recursive)}checked="checked"{/if}> {'include child albums'|@translate}</label> </li> + <li id="filter_tags" {if !isset($filter.tags)}style="display:none"{/if}> + <a href="#" class="removeFilter" title="remove this filter"><span>[x]</span></a> + <input type="checkbox" name="filter_tags_use" class="useFilterCheckbox" {if isset($filter.tags)}checked="checked"{/if}> + {'Tags'|@translate} + <select id="tagsFilter" name="filter_tags"> + {foreach from=$filter_tags item=tag} + <option value="{$tag.id}">{$tag.name}</option> + {/foreach} + </select> + </li> <li id="filter_level" {if !isset($filter.level)}style="display:none"{/if}> <a href="#" class="removeFilter" title="remove this filter"><span>[x]</span></a> <input type="checkbox" name="filter_level_use" class="useFilterCheckbox" {if isset($filter.level)}checked="checked"{/if}> @@ -362,6 +386,7 @@ jQuery(window).load(function() { <option disabled="disabled">------------------</option> <option value="filter_prefilter">{'predefined filter'|@translate}</option> <option value="filter_category">{'album'|@translate}</option> + <option value="filter_tags">{'Tags'|@translate}</option> <option value="filter_level">{'Who can see these photos?'|@translate}</option> </select> <!-- <input id="removeFilters" class="submit" type="submit" value="Remove all filters" name="removeFilters"> --> |