This filter (links by day) didn't apply any visibility parameter.
Fixes #1543
*/
public function filterDay($request)
{
- return $this->bookmarkFilter->filter(BookmarkFilter::$FILTER_DAY, $request);
+ $visibility = $this->isLoggedIn ? BookmarkFilter::$ALL : BookmarkFilter::$PUBLIC;
+
+ return $this->bookmarkFilter->filter(BookmarkFilter::$FILTER_DAY, $request, false, $visibility);
}
/**
return $this->filterTags($request, $casesensitive, $visibility);
}
case self::$FILTER_DAY:
- return $this->filterDay($request);
+ return $this->filterDay($request, $visibility);
default:
return $this->noFilter($visibility);
}
* print_r($mydb->filterDay('20120125'));
*
* @param string $day day to filter.
- *
+ * @param string $visibility return only all/private/public bookmarks.
+
* @return array all link matching given day.
*
* @throws Exception if date format is invalid.
*/
- public function filterDay($day)
+ public function filterDay($day, $visibility)
{
if (!checkDateFormat('Ymd', $day)) {
throw new Exception('Invalid date format');
}
$filtered = [];
- foreach ($this->bookmarks as $key => $l) {
- if ($l->getCreated()->format('Ymd') == $day) {
- $filtered[$key] = $l;
+ foreach ($this->bookmarks as $key => $bookmark) {
+ if ($visibility === static::$PUBLIC && $bookmark->isPrivate()) {
+ continue;
+ }
+
+ if ($bookmark->getCreated()->format('Ymd') == $day) {
+ $filtered[$key] = $bookmark;
}
}
$this->assertEquals($expected, $tags, var_export($tags, true));
}
+ /**
+ * Test filterDay while logged in
+ */
+ public function testFilterDayLoggedIn(): void
+ {
+ $bookmarks = $this->privateLinkDB->filterDay('20121206');
+ $expectedIds = [4, 9, 1, 0];
+
+ static::assertCount(4, $bookmarks);
+ foreach ($bookmarks as $bookmark) {
+ $i = ($i ?? -1) + 1;
+ static::assertSame($expectedIds[$i], $bookmark->getId());
+ }
+ }
+
+ /**
+ * Test filterDay while logged out
+ */
+ public function testFilterDayLoggedOut(): void
+ {
+ $bookmarks = $this->publicLinkDB->filterDay('20121206');
+ $expectedIds = [4, 9, 1];
+
+ static::assertCount(3, $bookmarks);
+ foreach ($bookmarks as $bookmark) {
+ $i = ($i ?? -1) + 1;
+ static::assertSame($expectedIds[$i], $bookmark->getId());
+ }
+ }
+
/**
* Allows to test LinkDB's private methods
*
use PHPUnit\Framework\TestCase;
use ReferenceLinkDB;
use Shaarli\Config\ConfigManager;
-use Shaarli\Formatter\FormatterFactory;
use Shaarli\History;
/**
/**
* Instantiate linkFilter with ReferenceLinkDB data.
*/
- public static function setUpBeforeClass()
+ public static function setUpBeforeClass(): void
{
$conf = new ConfigManager('tests/utils/config/configJson');
$conf->set('resource.datastore', self::$testDatastore);
);
}
+ /**
+ * Return bookmarks for a given day
+ */
+ public function testFilterDayRestrictedVisibility(): void
+ {
+ $this->assertEquals(
+ 3,
+ count(self::$linkFilter->filter(BookmarkFilter::$FILTER_DAY, '20121206', false, BookmarkFilter::$PUBLIC))
+ );
+ }
+
/**
* 404 - day not found
*/