diff options
author | ArthurHoaro <arthur@hoa.ro> | 2017-04-01 12:17:37 +0200 |
---|---|---|
committer | ArthurHoaro <arthur@hoa.ro> | 2017-05-25 15:51:12 +0200 |
commit | 7d86f40bdb2135655b5b4fe8cbcc1ac102114f86 (patch) | |
tree | c70ac4ad89a4fc84b8e52114aca7d9755cc92086 /application | |
parent | b64d83cd2b60b6851741787f8ce2ae2c93092841 (diff) | |
download | Shaarli-7d86f40bdb2135655b5b4fe8cbcc1ac102114f86.tar.gz Shaarli-7d86f40bdb2135655b5b4fe8cbcc1ac102114f86.tar.zst Shaarli-7d86f40bdb2135655b5b4fe8cbcc1ac102114f86.zip |
Empty tag search will look for not tagged links
Fixes #784
From now, searching for tags with an empty value will return only not tagged links,
with the search bar showing `x results [not tagged]`.
Note that using the api, the searchtags request parameter must be set to `false` to get the same result.
- [ ] Update API doc
Diffstat (limited to 'application')
-rw-r--r-- | application/FeedBuilder.php | 5 | ||||
-rw-r--r-- | application/LinkDB.php | 27 | ||||
-rw-r--r-- | application/LinkFilter.php | 30 | ||||
-rw-r--r-- | application/Utils.php | 4 |
4 files changed, 44 insertions, 22 deletions
diff --git a/application/FeedBuilder.php b/application/FeedBuilder.php index a1f4da48..7377bcec 100644 --- a/application/FeedBuilder.php +++ b/application/FeedBuilder.php | |||
@@ -97,6 +97,11 @@ class FeedBuilder | |||
97 | */ | 97 | */ |
98 | public function buildData() | 98 | public function buildData() |
99 | { | 99 | { |
100 | // Search for untagged links | ||
101 | if (isset($this->userInput['searchtags']) && empty($this->userInput['searchtags'])) { | ||
102 | $this->userInput['searchtags'] = false; | ||
103 | } | ||
104 | |||
100 | // Optionally filter the results: | 105 | // Optionally filter the results: |
101 | $linksToDisplay = $this->linkDB->filterSearch($this->userInput); | 106 | $linksToDisplay = $this->linkDB->filterSearch($this->userInput); |
102 | 107 | ||
diff --git a/application/LinkDB.php b/application/LinkDB.php index 4cee2af9..a03c2c06 100644 --- a/application/LinkDB.php +++ b/application/LinkDB.php | |||
@@ -450,29 +450,12 @@ You use the community supported version of the original Shaarli project, by Seba | |||
450 | public function filterSearch($filterRequest = array(), $casesensitive = false, $visibility = 'all') | 450 | public function filterSearch($filterRequest = array(), $casesensitive = false, $visibility = 'all') |
451 | { | 451 | { |
452 | // Filter link database according to parameters. | 452 | // Filter link database according to parameters. |
453 | $searchtags = !empty($filterRequest['searchtags']) ? escape($filterRequest['searchtags']) : ''; | 453 | $searchtags = isset($filterRequest['searchtags']) ? escape($filterRequest['searchtags']) : ''; |
454 | $searchterm = !empty($filterRequest['searchterm']) ? escape($filterRequest['searchterm']) : ''; | 454 | $searchterm = isset($filterRequest['searchterm']) ? escape($filterRequest['searchterm']) : ''; |
455 | 455 | ||
456 | // Search tags + fullsearch. | 456 | // Search tags + fullsearch - blank string parameter will return all links. |
457 | if (! empty($searchtags) && ! empty($searchterm)) { | 457 | $type = LinkFilter::$FILTER_TAG | LinkFilter::$FILTER_TEXT; |
458 | $type = LinkFilter::$FILTER_TAG | LinkFilter::$FILTER_TEXT; | 458 | $request = [$searchtags, $searchterm]; |
459 | $request = array($searchtags, $searchterm); | ||
460 | } | ||
461 | // Search by tags. | ||
462 | elseif (! empty($searchtags)) { | ||
463 | $type = LinkFilter::$FILTER_TAG; | ||
464 | $request = $searchtags; | ||
465 | } | ||
466 | // Fulltext search. | ||
467 | elseif (! empty($searchterm)) { | ||
468 | $type = LinkFilter::$FILTER_TEXT; | ||
469 | $request = $searchterm; | ||
470 | } | ||
471 | // Otherwise, display without filtering. | ||
472 | else { | ||
473 | $type = ''; | ||
474 | $request = ''; | ||
475 | } | ||
476 | 459 | ||
477 | $linkFilter = new LinkFilter($this); | 460 | $linkFilter = new LinkFilter($this); |
478 | return $linkFilter->filter($type, $request, $casesensitive, $visibility); | 461 | return $linkFilter->filter($type, $request, $casesensitive, $visibility); |
diff --git a/application/LinkFilter.php b/application/LinkFilter.php index 81832a4b..0e887d38 100644 --- a/application/LinkFilter.php +++ b/application/LinkFilter.php | |||
@@ -253,6 +253,9 @@ class LinkFilter | |||
253 | { | 253 | { |
254 | // Implode if array for clean up. | 254 | // Implode if array for clean up. |
255 | $tags = is_array($tags) ? trim(implode(' ', $tags)) : $tags; | 255 | $tags = is_array($tags) ? trim(implode(' ', $tags)) : $tags; |
256 | if ($tags === false) { | ||
257 | return $this->filterUntagged($visibility); | ||
258 | } | ||
256 | if (empty($tags)) { | 259 | if (empty($tags)) { |
257 | return $this->noFilter($visibility); | 260 | return $this->noFilter($visibility); |
258 | } | 261 | } |
@@ -296,6 +299,33 @@ class LinkFilter | |||
296 | } | 299 | } |
297 | 300 | ||
298 | /** | 301 | /** |
302 | * Return only links without any tag. | ||
303 | * | ||
304 | * @param string $visibility return only all/private/public links. | ||
305 | * | ||
306 | * @return array filtered links. | ||
307 | */ | ||
308 | public function filterUntagged($visibility) | ||
309 | { | ||
310 | $filtered = []; | ||
311 | foreach ($this->links as $key => $link) { | ||
312 | if ($visibility !== 'all') { | ||
313 | if (! $link['private'] && $visibility === 'private') { | ||
314 | continue; | ||
315 | } else if ($link['private'] && $visibility === 'public') { | ||
316 | continue; | ||
317 | } | ||
318 | } | ||
319 | |||
320 | if (empty(trim($link['tags']))) { | ||
321 | $filtered[$key] = $link; | ||
322 | } | ||
323 | } | ||
324 | |||
325 | return $filtered; | ||
326 | } | ||
327 | |||
328 | /** | ||
299 | * Returns the list of articles for a given day, chronologically sorted | 329 | * Returns the list of articles for a given day, chronologically sorted |
300 | * | 330 | * |
301 | * Day must be in the form 'YYYYMMDD' (e.g. '20120125'), e.g. | 331 | * Day must be in the form 'YYYYMMDD' (e.g. '20120125'), e.g. |
diff --git a/application/Utils.php b/application/Utils.php index 5c077450..87e5cc8f 100644 --- a/application/Utils.php +++ b/application/Utils.php | |||
@@ -91,6 +91,10 @@ function endsWith($haystack, $needle, $case = true) | |||
91 | */ | 91 | */ |
92 | function escape($input) | 92 | function escape($input) |
93 | { | 93 | { |
94 | if (is_bool($input)) { | ||
95 | return $input; | ||
96 | } | ||
97 | |||
94 | if (is_array($input)) { | 98 | if (is_array($input)) { |
95 | $out = array(); | 99 | $out = array(); |
96 | foreach($input as $key => $value) { | 100 | foreach($input as $key => $value) { |