Skip to content

Commit

Permalink
feature 2387: addd a filter by tag in the batch manager
Browse files Browse the repository at this point in the history
git-svn-id: http://piwigo.org/svn/trunk@11853 68402e56-0260-453c-a942-63ccdbb3a9ee
  • Loading branch information
rvelices committed Jul 30, 2011
1 parent afb91c6 commit c17ed8b
Show file tree
Hide file tree
Showing 6 changed files with 69 additions and 21 deletions.
23 changes: 20 additions & 3 deletions admin/batch_manager.php
Expand Up @@ -68,6 +68,11 @@
} }
} }


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 (isset($_POST['filter_level_use']))
{ {
if (in_array($_POST['filter_level'], $conf['available_permission_levels'])) if (in_array($_POST['filter_level'], $conf['available_permission_levels']))
Expand Down Expand Up @@ -290,6 +295,20 @@
); );
} }


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); $current_set = array_shift($filter_sets);
foreach ($filter_sets as $set) foreach ($filter_sets as $set)
{ {
Expand Down Expand Up @@ -365,9 +384,7 @@
// +-----------------------------------------------------------------------+ // +-----------------------------------------------------------------------+


$query = ' $query = '
SELECT SELECT id, name
id AS tag_id,
name AS tag_name
FROM '.TAGS_TABLE.' FROM '.TAGS_TABLE.'
;'; ;';
$template->assign('tags', get_taglist($query)); $template->assign('tags', get_taglist($query));
Expand Down
9 changes: 9 additions & 0 deletions admin/batch_manager_global.php
Expand Up @@ -538,6 +538,15 @@
) )
); );


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 // Virtualy associate a picture to a category
$query = ' $query = '
SELECT id,name,uppercats,global_rank SELECT id,name,uppercats,global_rank
Expand Down
4 changes: 2 additions & 2 deletions admin/batch_manager_unit.php
Expand Up @@ -251,8 +251,8 @@


$query = ' $query = '
SELECT SELECT
tag_id, id,
name AS tag_name name
FROM '.IMAGE_TAG_TABLE.' AS it FROM '.IMAGE_TAG_TABLE.' AS it
JOIN '.TAGS_TABLE.' AS t ON t.id = it.tag_id JOIN '.TAGS_TABLE.' AS t ON t.id = it.tag_id
WHERE image_id = '.$row['id'].' WHERE image_id = '.$row['id'].'
Expand Down
19 changes: 8 additions & 11 deletions admin/include/functions.php
Expand Up @@ -2048,29 +2048,29 @@ function get_taglist($query)
$taglist = array(); $taglist = array();
while ($row = pwg_db_fetch_assoc($result)) while ($row = pwg_db_fetch_assoc($result))
{ {
if (preg_match_all('#\[lang=(.*?)\](.*?)\[/lang\]#is', $row['tag_name'], $matches)) if (preg_match_all('#\[lang=(.*?)\](.*?)\[/lang\]#is', $row['name'], $matches))
{ {
foreach ($matches[2] as $tag_name) foreach ($matches[2] as $tag_name)
{ {
array_push( array_push(
$taglist, $taglist,
array( array(
'name' => trigger_event('render_tag_name', $tag_name), 'name' => trigger_event('render_tag_name', $tag_name),
'id' => '~~'.$row['tag_id'].'~~', 'id' => '~~'.$row['id'].'~~',
) )
); );
} }


$row['tag_name'] = preg_replace('#\[lang=(.*?)\](.*?)\[/lang\]#is', null, $row['tag_name']); $row['tag_name'] = preg_replace('#\[lang=(.*?)\](.*?)\[/lang\]#is', null, $row['tag_name']);
} }


if (strlen($row['tag_name']) > 0) if (strlen($row['name']) > 0)
{ {
array_push( array_push(
$taglist, $taglist,
array( array(
'name' => trigger_event('render_tag_name', $row['tag_name']), 'name' => trigger_event('render_tag_name', $row['name']),
'id' => '~~'.$row['tag_id'].'~~', 'id' => '~~'.$row['id'].'~~',
) )
); );
} }
Expand All @@ -2082,7 +2082,7 @@ function get_taglist($query)
return $taglist; 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 // In $raw_tags we receive something like array('~~6~~', '~~59~~', 'New
// tag', 'Another new tag') The ~~34~~ means that it is an existing // tag', 'Another new tag') The ~~34~~ means that it is an existing
Expand All @@ -2098,13 +2098,10 @@ function get_tag_ids($raw_tags)
{ {
array_push($tag_ids, $matches[1]); array_push($tag_ids, $matches[1]);
} }
else elseif ($allow_create)
{ {
// we have to create a new tag // 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)
);
} }
} }


Expand Down
8 changes: 4 additions & 4 deletions admin/picture_modify.php
Expand Up @@ -227,8 +227,8 @@
// tags // tags
$query = ' $query = '
SELECT SELECT
tag_id, id,
name AS tag_name name
FROM '.IMAGE_TAG_TABLE.' AS it FROM '.IMAGE_TAG_TABLE.' AS it
JOIN '.TAGS_TABLE.' AS t ON t.id = it.tag_id JOIN '.TAGS_TABLE.' AS t ON t.id = it.tag_id
WHERE image_id = '.$_GET['image_id'].' WHERE image_id = '.$_GET['image_id'].'
Expand All @@ -237,8 +237,8 @@


$query = ' $query = '
SELECT SELECT
id AS tag_id, id,
name AS tag_name name
FROM '.TAGS_TABLE.' FROM '.TAGS_TABLE.'
;'; ;';
$tags = get_taglist($query); $tags = get_taglist($query);
Expand Down
27 changes: 26 additions & 1 deletion admin/themes/default/template/batch_manager_global.tpl
Expand Up @@ -11,8 +11,9 @@


{footer_script require='jquery.tokeninput'} {footer_script require='jquery.tokeninput'}
jQuery(document).ready(function() {ldelim} 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( 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} {ldelim}
hintText: '{'Type in a search term'|@translate}', hintText: '{'Type in a search term'|@translate}',
noResultsText: '{'No results'|@translate}', noResultsText: '{'No results'|@translate}',
Expand All @@ -23,6 +24,19 @@ jQuery(document).ready(function() {ldelim}
allowCreation: true 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} {/footer_script}


Expand Down Expand Up @@ -466,6 +480,16 @@ jQuery(window).load(function() {
</select> </select>
<label><input type="checkbox" name="filter_category_recursive" {if isset($filter.category_recursive)}checked="checked"{/if}> {'include child albums'|@translate}</label> <label><input type="checkbox" name="filter_category_recursive" {if isset($filter.category_recursive)}checked="checked"{/if}> {'include child albums'|@translate}</label>
</li> </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}> <li id="filter_level" {if !isset($filter.level)}style="display:none"{/if}>
<a href="#" class="removeFilter" title="remove this filter"><span>[x]</span></a> <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}> <input type="checkbox" name="filter_level_use" class="useFilterCheckbox" {if isset($filter.level)}checked="checked"{/if}>
Expand All @@ -482,6 +506,7 @@ jQuery(window).load(function() {
<option disabled="disabled">------------------</option> <option disabled="disabled">------------------</option>
<option value="filter_prefilter">{'predefined filter'|@translate}</option> <option value="filter_prefilter">{'predefined filter'|@translate}</option>
<option value="filter_category">{'album'|@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> <option value="filter_level">{'Who can see these photos?'|@translate}</option>
</select> </select>
<!-- <input id="removeFilters" class="submit" type="submit" value="Remove all filters" name="removeFilters"> --> <!-- <input id="removeFilters" class="submit" type="submit" value="Remove all filters" name="removeFilters"> -->
Expand Down

0 comments on commit c17ed8b

Please sign in to comment.