diff options
author | ArthurHoaro <arthur@hoa.ro> | 2016-12-20 11:06:22 +0100 |
---|---|---|
committer | ArthurHoaro <arthur@hoa.ro> | 2017-01-03 09:47:15 +0100 |
commit | b3051a6aae446e063c3b6fa4a6a600357a9f24af (patch) | |
tree | befc1823dfc935fd827e6753b48f53d8150c3493 | |
parent | e0177549c760b143efdd17b1579e0c0199dce939 (diff) | |
download | Shaarli-b3051a6aae446e063c3b6fa4a6a600357a9f24af.tar.gz Shaarli-b3051a6aae446e063c3b6fa4a6a600357a9f24af.tar.zst Shaarli-b3051a6aae446e063c3b6fa4a6a600357a9f24af.zip |
Fixes presence of empty tags for private tags and in search results
* Private tags: make sure empty tags are properly filtered
* Search results:
* Use preg_split instead of function combination
* Add normalize_spaces to remove extra whitespaces displaying empty tags search
-rw-r--r-- | application/LinkFilter.php | 2 | ||||
-rw-r--r-- | application/Utils.php | 13 | ||||
-rw-r--r-- | index.php | 6 | ||||
-rw-r--r-- | tests/UtilsTest.php | 14 |
4 files changed, 30 insertions, 5 deletions
diff --git a/application/LinkFilter.php b/application/LinkFilter.php index daa6d9cc..57ebfd5c 100644 --- a/application/LinkFilter.php +++ b/application/LinkFilter.php | |||
@@ -348,7 +348,7 @@ class LinkFilter | |||
348 | $tagsOut = $casesensitive ? $tags : mb_convert_case($tags, MB_CASE_LOWER, 'UTF-8'); | 348 | $tagsOut = $casesensitive ? $tags : mb_convert_case($tags, MB_CASE_LOWER, 'UTF-8'); |
349 | $tagsOut = str_replace(',', ' ', $tagsOut); | 349 | $tagsOut = str_replace(',', ' ', $tagsOut); |
350 | 350 | ||
351 | return array_values(array_filter(explode(' ', trim($tagsOut)), 'strlen')); | 351 | return preg_split('/\s+/', $tagsOut, -1, PREG_SPLIT_NO_EMPTY); |
352 | } | 352 | } |
353 | } | 353 | } |
354 | 354 | ||
diff --git a/application/Utils.php b/application/Utils.php index 62902341..35d65224 100644 --- a/application/Utils.php +++ b/application/Utils.php | |||
@@ -257,3 +257,16 @@ function generate_api_secret($username, $salt) | |||
257 | 257 | ||
258 | return str_shuffle(substr(hash_hmac('sha512', uniqid($salt), $username), 10, 12)); | 258 | return str_shuffle(substr(hash_hmac('sha512', uniqid($salt), $username), 10, 12)); |
259 | } | 259 | } |
260 | |||
261 | /** | ||
262 | * Trim string, replace sequences of whitespaces by a single space. | ||
263 | * PHP equivalent to `normalize-space` XSLT function. | ||
264 | * | ||
265 | * @param string $string Input string. | ||
266 | * | ||
267 | * @return mixed Normalized string. | ||
268 | */ | ||
269 | function normalize_spaces($string) | ||
270 | { | ||
271 | return preg_replace('/\s{2,}/', ' ', trim($string)); | ||
272 | } | ||
@@ -1601,8 +1601,8 @@ function renderPage($conf, $pluginManager, $LINKSDB) | |||
1601 | function buildLinkList($PAGE,$LINKSDB, $conf, $pluginManager) | 1601 | function buildLinkList($PAGE,$LINKSDB, $conf, $pluginManager) |
1602 | { | 1602 | { |
1603 | // Used in templates | 1603 | // Used in templates |
1604 | $searchtags = !empty($_GET['searchtags']) ? escape($_GET['searchtags']) : ''; | 1604 | $searchtags = !empty($_GET['searchtags']) ? escape(normalize_spaces($_GET['searchtags'])) : ''; |
1605 | $searchterm = !empty($_GET['searchterm']) ? escape($_GET['searchterm']) : ''; | 1605 | $searchterm = !empty($_GET['searchterm']) ? escape(normalize_spaces($_GET['searchterm'])) : ''; |
1606 | 1606 | ||
1607 | // Smallhash filter | 1607 | // Smallhash filter |
1608 | if (! empty($_SERVER['QUERY_STRING']) | 1608 | if (! empty($_SERVER['QUERY_STRING']) |
@@ -1649,7 +1649,7 @@ function buildLinkList($PAGE,$LINKSDB, $conf, $pluginManager) | |||
1649 | } else { | 1649 | } else { |
1650 | $link['updated_timestamp'] = ''; | 1650 | $link['updated_timestamp'] = ''; |
1651 | } | 1651 | } |
1652 | $taglist = explode(' ', $link['tags']); | 1652 | $taglist = preg_split('/\s+/', $link['tags'], -1, PREG_SPLIT_NO_EMPTY); |
1653 | uasort($taglist, 'strcasecmp'); | 1653 | uasort($taglist, 'strcasecmp'); |
1654 | $link['taglist'] = $taglist; | 1654 | $link['taglist'] = $taglist; |
1655 | // Check for both signs of a note: starting with ? and 7 chars long. | 1655 | // Check for both signs of a note: starting with ? and 7 chars long. |
diff --git a/tests/UtilsTest.php b/tests/UtilsTest.php index 0cf9a921..c885f552 100644 --- a/tests/UtilsTest.php +++ b/tests/UtilsTest.php | |||
@@ -253,7 +253,7 @@ class UtilsTest extends PHPUnit_Framework_TestCase | |||
253 | is_session_id_valid('c0ZqcWF3VFE2NmJBdm1HMVQ0ZHJ3UmZPbTFsNGhkNHI=') | 253 | is_session_id_valid('c0ZqcWF3VFE2NmJBdm1HMVQ0ZHJ3UmZPbTFsNGhkNHI=') |
254 | ); | 254 | ); |
255 | } | 255 | } |
256 | 256 | ||
257 | /** | 257 | /** |
258 | * Test generateSecretApi. | 258 | * Test generateSecretApi. |
259 | */ | 259 | */ |
@@ -270,4 +270,16 @@ class UtilsTest extends PHPUnit_Framework_TestCase | |||
270 | $this->assertFalse(generate_api_secret('', '')); | 270 | $this->assertFalse(generate_api_secret('', '')); |
271 | $this->assertFalse(generate_api_secret(false, false)); | 271 | $this->assertFalse(generate_api_secret(false, false)); |
272 | } | 272 | } |
273 | |||
274 | /** | ||
275 | * Test normalize_spaces. | ||
276 | */ | ||
277 | public function testNormalizeSpace() | ||
278 | { | ||
279 | $str = ' foo bar is important '; | ||
280 | $this->assertEquals('foo bar is important', normalize_spaces($str)); | ||
281 | $this->assertEquals('foo', normalize_spaces('foo')); | ||
282 | $this->assertEquals('', normalize_spaces('')); | ||
283 | $this->assertEquals(null, normalize_spaces(null)); | ||
284 | } | ||
273 | } | 285 | } |