fixes #2096 keep list of search filters in memory

This commit is contained in:
plegall 2024-01-24 17:26:51 +01:00
parent 411ae43c19
commit e59b5282d5
2 changed files with 64 additions and 26 deletions

View file

@ -1767,6 +1767,11 @@ function save_search($rules, $forked_from=null)
)
);
if (!is_a_guest() and !is_generic())
{
userprefs_update_param('gallery_search_filters', array_keys($rules['fields'] ?? array()));
}
$url = make_index_url(
array(
'section' => 'search',

View file

@ -22,12 +22,38 @@ trigger_notify('loc_begin_search');
// | Create a default search |
// +-----------------------------------------------------------------------+
$search = array(
'mode' => 'AND',
'fields' => array()
);
// list of filters in user preferences
// allwords, cat, tags, author, added_by, filetypes, date_posted
$default_fields = array('allwords', 'cat', 'tags', 'author');
if (is_a_guest() or is_generic())
{
$fields = $default_fields;
}
else
{
$fields = userprefs_get_param('gallery_search_filters', $default_fields);
}
$words = array();
if (!empty($_GET['q']))
{
$words = split_allwords($_GET['q']);
}
if (count($words) > 0 or in_array('allwords', $fields))
{
$search['fields']['allwords'] = array(
'words' => $words,
'mode' => 'AND',
'fields' => array('file', 'name', 'comment', 'tags', 'author', 'cat-title', 'cat-desc'),
);
}
$cat_ids = array();
if (isset($_GET['cat_id']))
{
@ -35,20 +61,13 @@ if (isset($_GET['cat_id']))
$cat_ids = array($_GET['cat_id']);
}
$search = array(
'mode' => 'AND',
'fields' => array(
'allwords' => array(
'words' => $words,
'mode' => 'AND',
'fields' => array('file', 'name', 'comment', 'tags', 'author', 'cat-title', 'cat-desc'),
),
'cat' => array(
if (count($cat_ids) > 0 or in_array('cat', $fields))
{
$search['fields']['cat'] = array(
'words' => $cat_ids,
'sub_inc' => true,
),
),
);
}
if (count(get_available_tags()) > 0)
{
@ -59,12 +78,17 @@ if (count(get_available_tags()) > 0)
$tag_ids = explode(',', $_GET['tag_id']);
}
if (count($tag_ids) > 0 or in_array('tags', $fields))
{
$search['fields']['tags'] = array(
'words' => $tag_ids,
'mode' => 'AND',
);
}
}
if (in_array('author', $fields))
{
// does this Piwigo has authors for current user?
$query = '
SELECT
@ -91,6 +115,15 @@ if (count($first_author) > 0)
'mode' => 'OR',
);
}
}
foreach (array('added_by', 'filetypes', 'date_posted') as $field)
{
if (in_array($field, $fields))
{
$search['fields'][$field] = array();
}
}
list($search_uuid, $search_url) = save_search($search);
redirect($search_url);