From f28396a2f82fe61af05f19c1df367f4c660655ab Mon Sep 17 00:00:00 2001 From: ArthurHoaro Date: Sat, 19 May 2018 15:47:55 +0200 Subject: Fix order of tags with the same number of occurrences Fixes #1142 --- application/LinkDB.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'application/LinkDB.php') diff --git a/application/LinkDB.php b/application/LinkDB.php index c1661d52..ce53f200 100644 --- a/application/LinkDB.php +++ b/application/LinkDB.php @@ -458,8 +458,10 @@ You use the community supported version of the original Shaarli project, by Seba $tags[$caseMapping[strtolower($tag)]]++; } } - // Sort tags by usage (most used tag first) - arsort($tags); + $keys = array_keys($tags); + $tmpTags = array_combine($keys, $keys); + // We sort tags by DESC occurrences, then ASC alphabetically for equal values. + array_multisort($tags, SORT_DESC, $tmpTags, SORT_ASC, $tags); return $tags; } -- cgit v1.2.3 From f8c5660df82432c7f3bb0686e393db5a2b46eeb5 Mon Sep 17 00:00:00 2001 From: ArthurHoaro Date: Tue, 29 May 2018 20:52:30 +0200 Subject: Tag sort - UT + comment + fix filter and visibility Before this, linksCountPerTag call without would have ignored visibility parameter --- application/LinkDB.php | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) (limited to 'application/LinkDB.php') diff --git a/application/LinkDB.php b/application/LinkDB.php index ce53f200..cd0f2967 100644 --- a/application/LinkDB.php +++ b/application/LinkDB.php @@ -436,15 +436,17 @@ You use the community supported version of the original Shaarli project, by Seba /** * Returns the list tags appearing in the links with the given tags - * @param $filteringTags: tags selecting the links to consider - * @param $visibility: process only all/private/public links - * @return: a tag=>linksCount array + * + * @param array $filteringTags tags selecting the links to consider + * @param string $visibility process only all/private/public links + * + * @return array tag => linksCount */ public function linksCountPerTag($filteringTags = [], $visibility = 'all') { - $links = empty($filteringTags) ? $this->links : $this->filterSearch(['searchtags' => $filteringTags], false, $visibility); - $tags = array(); - $caseMapping = array(); + $links = $this->filterSearch(['searchtags' => $filteringTags], false, $visibility); + $tags = []; + $caseMapping = []; foreach ($links as $link) { foreach (preg_split('/\s+/', $link['tags'], 0, PREG_SPLIT_NO_EMPTY) as $tag) { if (empty($tag)) { @@ -458,9 +460,18 @@ You use the community supported version of the original Shaarli project, by Seba $tags[$caseMapping[strtolower($tag)]]++; } } + + /* + * Formerly used arsort(), which doesn't define the sort behaviour for equal values. + * Also, this function doesn't produce the same result between PHP 5.6 and 7. + * + * So we now use array_multisort() to sort tags by DESC occurrences, + * then ASC alphabetically for equal values. + * + * @see https://github.com/shaarli/Shaarli/issues/1142 + */ $keys = array_keys($tags); $tmpTags = array_combine($keys, $keys); - // We sort tags by DESC occurrences, then ASC alphabetically for equal values. array_multisort($tags, SORT_DESC, $tmpTags, SORT_ASC, $tags); return $tags; } -- cgit v1.2.3 From 4154c25b5f2f8044a37d7f84e04173bb54f2375b Mon Sep 17 00:00:00 2001 From: ArthurHoaro Date: Tue, 22 May 2018 22:44:38 +0200 Subject: Add a button to set links as sticky Meaning that they always appear on top of all links Fixes #186 --- application/LinkDB.php | 3 +++ 1 file changed, 3 insertions(+) (limited to 'application/LinkDB.php') diff --git a/application/LinkDB.php b/application/LinkDB.php index cd0f2967..cdd68cfb 100644 --- a/application/LinkDB.php +++ b/application/LinkDB.php @@ -537,6 +537,9 @@ You use the community supported version of the original Shaarli project, by Seba $order = $order === 'ASC' ? -1 : 1; // Reorder array by dates. usort($this->links, function($a, $b) use ($order) { + if (isset($a['sticky']) && isset($b['sticky']) && $a['sticky'] !== $b['sticky']) { + return $a['sticky'] ? -1 : 1; + } return $a['created'] < $b['created'] ? 1 * $order : -1 * $order; }); -- cgit v1.2.3 From f211e417bf637b8a83988175c29ee072c69f7642 Mon Sep 17 00:00:00 2001 From: VirtualTam Date: Sat, 13 Oct 2018 00:19:03 +0200 Subject: lint: apply phpcbf to application/ Signed-off-by: VirtualTam --- application/LinkDB.php | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) (limited to 'application/LinkDB.php') diff --git a/application/LinkDB.php b/application/LinkDB.php index cdd68cfb..1f7c28cd 100644 --- a/application/LinkDB.php +++ b/application/LinkDB.php @@ -107,8 +107,7 @@ class LinkDB implements Iterator, Countable, ArrayAccess $hidePublicLinks, $redirector = '', $redirectorEncode = true - ) - { + ) { $this->datastore = $datastore; $this->loggedIn = $isLoggedIn; $this->hidePublicLinks = $hidePublicLinks; @@ -317,8 +316,7 @@ You use the community supported version of the original Shaarli project, by Seba } else { $link['real_url'] .= $link['url']; } - } - else { + } else { $link['real_url'] = $link['url']; } @@ -403,7 +401,8 @@ You use the community supported version of the original Shaarli project, by Seba * * @return array list of shaare found. */ - public function filterDay($request) { + public function filterDay($request) + { $linkFilter = new LinkFilter($this->links); return $linkFilter->filter(LinkFilter::$FILTER_DAY, $request); } @@ -492,8 +491,7 @@ You use the community supported version of the original Shaarli project, by Seba $delete = empty($to); // True for case-sensitive tag search. $linksToAlter = $this->filterSearch(['searchtags' => $from], true); - foreach($linksToAlter as $key => &$value) - { + foreach ($linksToAlter as $key => &$value) { $tags = preg_split('/\s+/', trim($value['tags'])); if (($pos = array_search($from, $tags)) !== false) { if ($delete) { @@ -536,7 +534,7 @@ You use the community supported version of the original Shaarli project, by Seba { $order = $order === 'ASC' ? -1 : 1; // Reorder array by dates. - usort($this->links, function($a, $b) use ($order) { + usort($this->links, function ($a, $b) use ($order) { if (isset($a['sticky']) && isset($b['sticky']) && $a['sticky'] !== $b['sticky']) { return $a['sticky'] ? -1 : 1; } -- cgit v1.2.3 From 9d9f6d75b94aab51067bdfbe50b58b66d1194f6d Mon Sep 17 00:00:00 2001 From: VirtualTam Date: Sat, 13 Oct 2018 01:40:04 +0200 Subject: lint: fix line-length warnings Signed-off-by: VirtualTam --- application/LinkDB.php | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'application/LinkDB.php') diff --git a/application/LinkDB.php b/application/LinkDB.php index 1f7c28cd..4bbc2950 100644 --- a/application/LinkDB.php +++ b/application/LinkDB.php @@ -249,11 +249,14 @@ class LinkDB implements Iterator, Countable, ArrayAccess 'id' => 1, 'title'=> t('The personal, minimalist, super-fast, database free, bookmarking service'), 'url'=>'https://shaarli.readthedocs.io', - 'description'=>t('Welcome to Shaarli! This is your first public bookmark. To edit or delete me, you must first login. + 'description'=>t( + 'Welcome to Shaarli! This is your first public bookmark. ' + .'To edit or delete me, you must first login. To learn how to use Shaarli, consult the link "Documentation" at the bottom of this page. -You use the community supported version of the original Shaarli project, by Sebastien Sauvage.'), +You use the community supported version of the original Shaarli project, by Sebastien Sauvage.' + ), 'private'=>0, 'created'=> new DateTime(), 'tags'=>'opensource software' @@ -419,8 +422,12 @@ You use the community supported version of the original Shaarli project, by Seba * * @return array filtered links, all links if no suitable filter was provided. */ - public function filterSearch($filterRequest = array(), $casesensitive = false, $visibility = 'all', $untaggedonly = false) - { + public function filterSearch( + $filterRequest = array(), + $casesensitive = false, + $visibility = 'all', + $untaggedonly = false + ) { // Filter link database according to parameters. $searchtags = isset($filterRequest['searchtags']) ? escape($filterRequest['searchtags']) : ''; $searchterm = isset($filterRequest['searchterm']) ? escape($filterRequest['searchterm']) : ''; -- cgit v1.2.3 From 1cc5eaf9dee0e71aefbce1ff0f28c86ff320c053 Mon Sep 17 00:00:00 2001 From: VirtualTam Date: Mon, 15 Apr 2019 23:57:08 +0200 Subject: backport: Fix a warning if links sticky status isn't set - initiate its status to false when the link is created - if not defined, initiate its status to false (can happen if the updater hasn't run) This is a backport of https://github.com/shaarli/Shaarli/pull/1270 Original author information: commit b790f900c937d0d8f6eccc15d2b4c26023f3d276 Author: ArthurHoaro Date: Sat Feb 9 14:04:16 2019 +0100 Signed-off-by: VirtualTam --- application/LinkDB.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'application/LinkDB.php') diff --git a/application/LinkDB.php b/application/LinkDB.php index 4bbc2950..803757ca 100644 --- a/application/LinkDB.php +++ b/application/LinkDB.php @@ -259,7 +259,8 @@ You use the community supported version of the original Shaarli project, by Seba ), 'private'=>0, 'created'=> new DateTime(), - 'tags'=>'opensource software' + 'tags'=>'opensource software', + 'sticky' => false, ); $link['shorturl'] = link_small_hash($link['created'], $link['id']); $this->links[1] = $link; @@ -272,6 +273,7 @@ You use the community supported version of the original Shaarli project, by Seba 'private'=>1, 'created'=> new DateTime('1 minute ago'), 'tags'=>'secretstuff', + 'sticky' => false, ); $link['shorturl'] = link_small_hash($link['created'], $link['id']); $this->links[0] = $link; @@ -323,6 +325,8 @@ You use the community supported version of the original Shaarli project, by Seba $link['real_url'] = $link['url']; } + $link['sticky'] = isset($link['sticky']) ? $link['sticky'] : false; + // To be able to load links before running the update, and prepare the update if (! isset($link['created'])) { $link['id'] = $link['linkdate']; -- cgit v1.2.3