mirror of
https://github.com/Piwigo/Piwigo.git
synced 2025-04-27 19:59:56 +03:00
feature 2387: addd a filter by tag in the batch manager
git-svn-id: http://piwigo.org/svn/trunk@11853 68402e56-0260-453c-a942-63ccdbb3a9ee
This commit is contained in:
parent
afb91c6ca2
commit
c17ed8b55f
6 changed files with 69 additions and 21 deletions
|
@ -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 (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']))
|
||||||
|
@ -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);
|
$current_set = array_shift($filter_sets);
|
||||||
foreach ($filter_sets as $set)
|
foreach ($filter_sets as $set)
|
||||||
{
|
{
|
||||||
|
@ -365,9 +384,7 @@ if (in_array($page['tab'], $tab_codes))
|
||||||
// +-----------------------------------------------------------------------+
|
// +-----------------------------------------------------------------------+
|
||||||
|
|
||||||
$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));
|
||||||
|
|
|
@ -538,6 +538,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
|
// Virtualy associate a picture to a category
|
||||||
$query = '
|
$query = '
|
||||||
SELECT id,name,uppercats,global_rank
|
SELECT id,name,uppercats,global_rank
|
||||||
|
|
|
@ -251,8 +251,8 @@ SELECT id,path,tn_ext,name,date_creation,comment,author,level,file
|
||||||
|
|
||||||
$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'].'
|
||||||
|
|
|
@ -2048,7 +2048,7 @@ 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)
|
||||||
{
|
{
|
||||||
|
@ -2056,7 +2056,7 @@ function get_taglist($query)
|
||||||
$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'].'~~',
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -2064,13 +2064,13 @@ function get_taglist($query)
|
||||||
$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'].'~~',
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -227,8 +227,8 @@ if (isset($_POST['dismiss'])
|
||||||
// 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'].'
|
||||||
|
@ -237,8 +237,8 @@ $tag_selection = get_taglist($query);
|
||||||
|
|
||||||
$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);
|
||||||
|
|
|
@ -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}',
|
||||||
|
@ -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}
|
||||||
|
|
||||||
|
@ -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}>
|
||||||
|
@ -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"> -->
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue