namespacing: \Shaarli\Bookmark\LinkFilter

Signed-off-by: VirtualTam <virtualtam@flibidi.net>
This commit is contained in:
VirtualTam 2018-12-03 01:22:45 +01:00
parent f24896b237
commit 6696729b88
8 changed files with 66 additions and 50 deletions

View file

@ -1,6 +1,7 @@
<?php <?php
use Shaarli\Bookmark\LinkDB; use Shaarli\Bookmark\LinkDB;
use Shaarli\Bookmark\LinkFilter;
use Shaarli\Config\ConfigJson; use Shaarli\Config\ConfigJson;
use Shaarli\Config\ConfigPhp; use Shaarli\Config\ConfigPhp;
use Shaarli\Config\ConfigManager; use Shaarli\Config\ConfigManager;

View file

@ -6,8 +6,8 @@
use Countable; use Countable;
use DateTime; use DateTime;
use Iterator; use Iterator;
use LinkFilter; use Shaarli\Bookmark\LinkFilter;
use LinkNotFoundException; use Shaarli\Bookmark\Exception\LinkNotFoundException;
use Shaarli\Exceptions\IOException; use Shaarli\Exceptions\IOException;
use Shaarli\FileUtils; use Shaarli\FileUtils;
@ -107,10 +107,10 @@ class LinkDB implements Iterator, Countable, ArrayAccess
* *
* Checks if the datastore exists; else, attempts to create a dummy one. * Checks if the datastore exists; else, attempts to create a dummy one.
* *
* @param string $datastore datastore file path. * @param string $datastore datastore file path.
* @param boolean $isLoggedIn is the user logged in? * @param boolean $isLoggedIn is the user logged in?
* @param boolean $hidePublicLinks if true all links are private. * @param boolean $hidePublicLinks if true all links are private.
* @param string $redirector link redirector set in user settings. * @param string $redirector link redirector set in user settings.
* @param boolean $redirectorEncode Enable urlencode on redirected urls (default: true). * @param boolean $redirectorEncode Enable urlencode on redirected urls (default: true).
*/ */
public function __construct( public function __construct(
@ -426,12 +426,12 @@ public function filterDay($request)
/** /**
* Filter links according to search parameters. * Filter links according to search parameters.
* *
* @param array $filterRequest Search request content. Supported keys: * @param array $filterRequest Search request content. Supported keys:
* - searchtags: list of tags * - searchtags: list of tags
* - searchterm: term search * - searchterm: term search
* @param bool $casesensitive Optional: Perform case sensitive filter * @param bool $casesensitive Optional: Perform case sensitive filter
* @param string $visibility return only all/private/public links * @param string $visibility return only all/private/public links
* @param string $untaggedonly return only untagged links * @param bool $untaggedonly return only untagged links
* *
* @return array filtered links, all links if no suitable filter was provided. * @return array filtered links, all links if no suitable filter was provided.
*/ */
@ -457,8 +457,8 @@ public function filterSearch(
/** /**
* Returns the list tags appearing in the links with the given tags * Returns the list tags appearing in the links with the given tags
* *
* @param array $filteringTags tags selecting the links to consider * @param array $filteringTags tags selecting the links to consider
* @param string $visibility process only all/private/public links * @param string $visibility process only all/private/public links
* *
* @return array tag => linksCount * @return array tag => linksCount
*/ */
@ -500,7 +500,7 @@ public function linksCountPerTag($filteringTags = [], $visibility = 'all')
* Rename or delete a tag across all links. * Rename or delete a tag across all links.
* *
* @param string $from Tag to rename * @param string $from Tag to rename
* @param string $to New tag. If none is provided, the from tag will be deleted * @param string $to New tag. If none is provided, the from tag will be deleted
* *
* @return array|bool List of altered links or false on error * @return array|bool List of altered links or false on error
*/ */

View file

@ -1,6 +1,9 @@
<?php <?php
use Shaarli\Bookmark\LinkDB; namespace Shaarli\Bookmark;
use Exception;
use Shaarli\Bookmark\Exception\LinkNotFoundException;
/** /**
* Class LinkFilter. * Class LinkFilter.
@ -12,22 +15,22 @@ class LinkFilter
/** /**
* @var string permalinks. * @var string permalinks.
*/ */
public static $FILTER_HASH = 'permalink'; public static $FILTER_HASH = 'permalink';
/** /**
* @var string text search. * @var string text search.
*/ */
public static $FILTER_TEXT = 'fulltext'; public static $FILTER_TEXT = 'fulltext';
/** /**
* @var string tag filter. * @var string tag filter.
*/ */
public static $FILTER_TAG = 'tags'; public static $FILTER_TAG = 'tags';
/** /**
* @var string filter by day. * @var string filter by day.
*/ */
public static $FILTER_DAY = 'FILTER_DAY'; public static $FILTER_DAY = 'FILTER_DAY';
/** /**
* @var string Allowed characters for hashtags (regex syntax). * @var string Allowed characters for hashtags (regex syntax).
@ -60,7 +63,7 @@ public function __construct($links)
*/ */
public function filter($type, $request, $casesensitive = false, $visibility = 'all', $untaggedonly = false) public function filter($type, $request, $casesensitive = false, $visibility = 'all', $untaggedonly = false)
{ {
if (! in_array($visibility, ['all', 'public', 'private'])) { if (!in_array($visibility, ['all', 'public', 'private'])) {
$visibility = 'all'; $visibility = 'all';
} }
@ -119,7 +122,7 @@ private function noFilter($visibility = 'all')
foreach ($this->links as $key => $value) { foreach ($this->links as $key => $value) {
if ($value['private'] && $visibility === 'private') { if ($value['private'] && $visibility === 'private') {
$out[$key] = $value; $out[$key] = $value;
} elseif (! $value['private'] && $visibility === 'public') { } elseif (!$value['private'] && $visibility === 'public') {
$out[$key] = $value; $out[$key] = $value;
} }
} }
@ -134,7 +137,7 @@ private function noFilter($visibility = 'all')
* *
* @return array $filtered array containing permalink data. * @return array $filtered array containing permalink data.
* *
* @throws LinkNotFoundException if the smallhash doesn't match any link. * @throws \Shaarli\Bookmark\Exception\LinkNotFoundException if the smallhash doesn't match any link.
*/ */
private function filterSmallHash($smallHash) private function filterSmallHash($smallHash)
{ {
@ -171,7 +174,7 @@ private function filterSmallHash($smallHash)
* - see https://github.com/shaarli/Shaarli/issues/75 for examples * - see https://github.com/shaarli/Shaarli/issues/75 for examples
* *
* @param string $searchterms search query. * @param string $searchterms search query.
* @param string $visibility Optional: return only all/private/public links. * @param string $visibility Optional: return only all/private/public links.
* *
* @return array search results. * @return array search results.
*/ */
@ -209,7 +212,7 @@ private function filterFulltext($searchterms, $visibility = 'all')
foreach ($this->links as $id => $link) { foreach ($this->links as $id => $link) {
// ignore non private links when 'privatonly' is on. // ignore non private links when 'privatonly' is on.
if ($visibility !== 'all') { if ($visibility !== 'all') {
if (! $link['private'] && $visibility === 'private') { if (!$link['private'] && $visibility === 'private') {
continue; continue;
} elseif ($link['private'] && $visibility === 'public') { } elseif ($link['private'] && $visibility === 'public') {
continue; continue;
@ -252,7 +255,9 @@ private function filterFulltext($searchterms, $visibility = 'all')
/** /**
* generate a regex fragment out of a tag * generate a regex fragment out of a tag
*
* @param string $tag to to generate regexs from. may start with '-' to negate, contain '*' as wildcard * @param string $tag to to generate regexs from. may start with '-' to negate, contain '*' as wildcard
*
* @return string generated regex fragment * @return string generated regex fragment
*/ */
private static function tag2regex($tag) private static function tag2regex($tag)
@ -336,7 +341,7 @@ public function filterTags($tags, $casesensitive = false, $visibility = 'all')
// check level of visibility // check level of visibility
// ignore non private links when 'privateonly' is on. // ignore non private links when 'privateonly' is on.
if ($visibility !== 'all') { if ($visibility !== 'all') {
if (! $link['private'] && $visibility === 'private') { if (!$link['private'] && $visibility === 'private') {
continue; continue;
} elseif ($link['private'] && $visibility === 'public') { } elseif ($link['private'] && $visibility === 'public') {
continue; continue;
@ -379,7 +384,7 @@ public function filterUntagged($visibility)
$filtered = []; $filtered = [];
foreach ($this->links as $key => $link) { foreach ($this->links as $key => $link) {
if ($visibility !== 'all') { if ($visibility !== 'all') {
if (! $link['private'] && $visibility === 'private') { if (!$link['private'] && $visibility === 'private') {
continue; continue;
} elseif ($link['private'] && $visibility === 'public') { } elseif ($link['private'] && $visibility === 'public') {
continue; continue;
@ -408,7 +413,7 @@ public function filterUntagged($visibility)
*/ */
public function filterDay($day) public function filterDay($day)
{ {
if (! checkDateFormat('Ymd', $day)) { if (!checkDateFormat('Ymd', $day)) {
throw new Exception('Invalid date format'); throw new Exception('Invalid date format');
} }
@ -442,14 +447,3 @@ public static function tagsStrToArray($tags, $casesensitive)
return preg_split('/\s+/', $tagsOut, -1, PREG_SPLIT_NO_EMPTY); return preg_split('/\s+/', $tagsOut, -1, PREG_SPLIT_NO_EMPTY);
} }
} }
class LinkNotFoundException extends Exception
{
/**
* LinkNotFoundException constructor.
*/
public function __construct()
{
$this->message = t('The link you are trying to reach does not exist or has been deleted.');
}
}

View file

@ -0,0 +1,15 @@
<?php
namespace Shaarli\Bookmark\Exception;
use Exception;
class LinkNotFoundException extends Exception
{
/**
* LinkNotFoundException constructor.
*/
public function __construct()
{
$this->message = t('The link you are trying to reach does not exist or has been deleted.');
}
}

View file

@ -36,6 +36,7 @@
"Shaarli\\Api\\Controllers\\": "application/api/controllers", "Shaarli\\Api\\Controllers\\": "application/api/controllers",
"Shaarli\\Api\\Exceptions\\": "application/api/exceptions", "Shaarli\\Api\\Exceptions\\": "application/api/exceptions",
"Shaarli\\Bookmark\\": "application/bookmark", "Shaarli\\Bookmark\\": "application/bookmark",
"Shaarli\\Bookmark\\Exception\\": "application/bookmark/exception",
"Shaarli\\Config\\": "application/config/", "Shaarli\\Config\\": "application/config/",
"Shaarli\\Config\\Exception\\": "application/config/exception", "Shaarli\\Config\\Exception\\": "application/config/exception",
"Shaarli\\Exceptions\\": "application/exceptions", "Shaarli\\Exceptions\\": "application/exceptions",

View file

@ -63,7 +63,6 @@
require_once 'application/http/UrlUtils.php'; require_once 'application/http/UrlUtils.php';
require_once 'application/FileUtils.php'; require_once 'application/FileUtils.php';
require_once 'application/History.php'; require_once 'application/History.php';
require_once 'application/LinkFilter.php';
require_once 'application/LinkUtils.php'; require_once 'application/LinkUtils.php';
require_once 'application/NetscapeBookmarkUtils.php'; require_once 'application/NetscapeBookmarkUtils.php';
require_once 'application/TimeZone.php'; require_once 'application/TimeZone.php';
@ -72,6 +71,7 @@
require_once 'application/Router.php'; require_once 'application/Router.php';
require_once 'application/Updater.php'; require_once 'application/Updater.php';
use \Shaarli\Bookmark\Exception\LinkNotFoundException;
use \Shaarli\Bookmark\LinkDB; use \Shaarli\Bookmark\LinkDB;
use \Shaarli\Config\ConfigManager; use \Shaarli\Config\ConfigManager;
use \Shaarli\Feed\CachedPage; use \Shaarli\Feed\CachedPage;

View file

@ -6,7 +6,7 @@
namespace Shaarli\Bookmark; namespace Shaarli\Bookmark;
use DateTime; use DateTime;
use LinkNotFoundException; use Shaarli\Bookmark\Exception\LinkNotFoundException;
use ReferenceLinkDB; use ReferenceLinkDB;
use ReflectionClass; use ReflectionClass;
use Shaarli; use Shaarli;
@ -457,7 +457,7 @@ public function testFilterHashValid()
/** /**
* Test filterHash() with an invalid smallhash. * Test filterHash() with an invalid smallhash.
* *
* @expectedException LinkNotFoundException * @expectedException \Shaarli\Bookmark\Exception\LinkNotFoundException
*/ */
public function testFilterHashInValid1() public function testFilterHashInValid1()
{ {
@ -468,7 +468,7 @@ public function testFilterHashInValid1()
/** /**
* Test filterHash() with an empty smallhash. * Test filterHash() with an empty smallhash.
* *
* @expectedException LinkNotFoundException * @expectedException \Shaarli\Bookmark\Exception\LinkNotFoundException
*/ */
public function testFilterHashInValid() public function testFilterHashInValid()
{ {

View file

@ -1,13 +1,14 @@
<?php <?php
use Shaarli\Bookmark\LinkDB; namespace Shaarli\Bookmark;
require_once 'application/LinkFilter.php'; use Exception;
use ReferenceLinkDB;
/** /**
* Class LinkFilterTest. * Class LinkFilterTest.
*/ */
class LinkFilterTest extends PHPUnit_Framework_TestCase class LinkFilterTest extends \PHPUnit\Framework\TestCase
{ {
/** /**
* @var string Test datastore path. * @var string Test datastore path.
@ -29,7 +30,7 @@ class LinkFilterTest extends PHPUnit_Framework_TestCase
protected static $linkDB; protected static $linkDB;
/** /**
* Instanciate linkFilter with ReferenceLinkDB data. * Instantiate linkFilter with ReferenceLinkDB data.
*/ */
public static function setUpBeforeClass() public static function setUpBeforeClass()
{ {
@ -81,10 +82,14 @@ public function testFilter()
count( count(
self::$linkFilter->filter( self::$linkFilter->filter(
LinkFilter::$FILTER_TAG, LinkFilter::$FILTER_TAG,
/*$request=*/'', /*$request=*/
/*$casesensitive=*/false, '',
/*$visibility=*/'all', /*$casesensitive=*/
/*$untaggedonly=*/true false,
/*$visibility=*/
'all',
/*$untaggedonly=*/
true
) )
) )
); );
@ -229,7 +234,7 @@ public function testFilterSmallHash()
/** /**
* No link for this hash * No link for this hash
* *
* @expectedException LinkNotFoundException * @expectedException \Shaarli\Bookmark\Exception\LinkNotFoundException
*/ */
public function testFilterUnknownSmallHash() public function testFilterUnknownSmallHash()
{ {