X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=tests%2Futils%2FReferenceLinkDB.php;h=fc3cb1094930eb28f8c0aefa3f6b17e75654b3c3;hb=255b2264a119f4b8cc9fe211c7740906701e15b4;hp=fcc7a4f9f753ba3c4463fa798c0877932132a642;hpb=c7a42ab1d9b21bf53cd30bc57b57789716c8711b;p=github%2Fshaarli%2FShaarli.git diff --git a/tests/utils/ReferenceLinkDB.php b/tests/utils/ReferenceLinkDB.php index fcc7a4f9..fc3cb109 100644 --- a/tests/utils/ReferenceLinkDB.php +++ b/tests/utils/ReferenceLinkDB.php @@ -1,80 +1,150 @@ isLegacy = $isLegacy; + if (! $this->isLegacy) { + $this->bookmarks = new BookmarkArray(); + } + $this->addLink( + 11, + 'Pined older', + '/shaare/PCRizQ', + 'This is an older pinned link', + 0, + DateTime::createFromFormat(Bookmark::LINK_DATE_FORMAT, '20100309_101010'), + '', + null, + 'PCRizQ', + true + ); + $this->addLink( + 10, + 'Pined', + '/shaare/0gCTjQ', + 'This is a pinned link', + 0, + DateTime::createFromFormat(Bookmark::LINK_DATE_FORMAT, '20121207_152312'), + '', + null, + '0gCTjQ', + true + ); + + $this->addLink( + 41, 'Link title: @website', - '?WDWyig', + '/shaare/WDWyig', 'Stallman has a beard and is part of the Free Software Foundation (or not). Seriously, read this. #hashtag', 0, - '20150310_114651', - 'sTuff' + DateTime::createFromFormat(Bookmark::LINK_DATE_FORMAT, '20150310_114651'), + 'sTuff', + null, + 'WDWyig' + ); + + $this->addLink( + 42, + 'Note: I have a big ID but an old date', + '/shaare/WDWyig', + 'Used to test bookmarks reordering.', + 0, + DateTime::createFromFormat(Bookmark::LINK_DATE_FORMAT, '20100310_101010'), + 'ut' ); $this->addLink( + 9, + 'PSR-2: Coding Style Guide', + 'http://www.php-fig.org/psr/psr-2/', + 'This guide extends and expands on PSR-1, the basic coding standard.', + 0, + DateTime::createFromFormat(Bookmark::LINK_DATE_FORMAT, '20121206_152312'), + '' + ); + + $this->addLink( + 8, 'Free as in Freedom 2.0 @website', 'https://static.fsf.org/nosvn/faif-2.0.pdf', 'Richard Stallman and the Free Software Revolution. Read this. #hashtag', 0, - '20150310_114633', - 'free gnu software stallman -exclude stuff hashtag' + DateTime::createFromFormat(Bookmark::LINK_DATE_FORMAT, '20150310_114633'), + 'free gnu software stallman -exclude stuff hashtag', + DateTime::createFromFormat(Bookmark::LINK_DATE_FORMAT, '20160803_093033') ); $this->addLink( + 7, 'MediaGoblin', 'http://mediagoblin.org/', 'A free software media publishing platform #hashtagOther', 0, - '20130614_184135', - 'gnu media web .hidden hashtag' + DateTime::createFromFormat(Bookmark::LINK_DATE_FORMAT, '20130614_184135'), + 'gnu media web .hidden hashtag', + DateTime::createFromFormat(Bookmark::LINK_DATE_FORMAT, '20130615_184230'), + 'IuWvgA' ); $this->addLink( + 6, 'w3c-markup-validator', 'https://dvcs.w3.org/hg/markup-validator/summary', 'Mercurial repository for the W3C Validator #private', 1, - '20141125_084734', + DateTime::createFromFormat(Bookmark::LINK_DATE_FORMAT, '20141125_084734'), 'css html w3c web Mercurial' ); $this->addLink( + 4, 'UserFriendly - Web Designer', 'http://ars.userfriendly.org/cartoons/?id=20121206', 'Naming conventions... #private', 0, - '20121206_142300', + DateTime::createFromFormat(Bookmark::LINK_DATE_FORMAT, '20121206_142300'), 'dev cartoon web' ); $this->addLink( + 1, 'UserFriendly - Samba', 'http://ars.userfriendly.org/cartoons/?id=20010306', 'Tropical printing', 0, - '20121206_172539', + DateTime::createFromFormat(Bookmark::LINK_DATE_FORMAT, '20121206_172539'), 'samba cartoon web' ); $this->addLink( + 0, 'Geek and Poke', 'http://geek-and-poke.com/', '', 1, - '20121206_182539', + DateTime::createFromFormat(Bookmark::LINK_DATE_FORMAT, '20121206_182539'), 'dev cartoon tag1 tag2 tag3 tag4 ' ); } @@ -82,17 +152,36 @@ class ReferenceLinkDB /** * Adds a new link */ - protected function addLink($title, $url, $description, $private, $date, $tags) - { + protected function addLink( + $id, + $title, + $url, + $description, + $private, + $date, + $tags, + $updated = '', + $shorturl = '', + $pinned = false + ) { $link = array( + 'id' => $id, 'title' => $title, 'url' => $url, 'description' => $description, 'private' => $private, - 'linkdate' => $date, 'tags' => $tags, + 'created' => $date, + 'updated' => $updated, + 'shorturl' => $shorturl ? $shorturl : smallHash($date->format(Bookmark::LINK_DATE_FORMAT) . $id), + 'sticky' => $pinned ); - $this->_links[$date] = $link; + if (! $this->isLegacy) { + $bookmark = new Bookmark(); + $this->bookmarks[$id] = $bookmark->fromArray($link); + } else { + $this->bookmarks[$id] = $link; + } if ($private) { $this->_privateCount++; @@ -106,14 +195,41 @@ class ReferenceLinkDB */ public function write($filename) { + $this->reorder(); file_put_contents( $filename, - '_links))).' */ ?>' + 'bookmarks))).' */ ?>' ); } /** - * Returns the number of links in the reference data + * Reorder links by creation date (newest first). + * + * @param string $order ASC|DESC + */ + public function reorder($order = 'DESC') + { + if (! $this->isLegacy) { + $this->bookmarks->reorder($order); + } else { + $order = $order === 'ASC' ? -1 : 1; + // backward compatibility: ignore reorder if the the `created` field doesn't exist + if (! isset(array_values($this->bookmarks)[0]['created'])) { + return; + } + + usort($this->bookmarks, 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; + }); + } + } + + /** + * Returns the number of bookmarks in the reference data */ public function countLinks() { @@ -121,7 +237,7 @@ class ReferenceLinkDB } /** - * Returns the number of public links in the reference data + * Returns the number of public bookmarks in the reference data */ public function countPublicLinks() { @@ -129,15 +245,46 @@ class ReferenceLinkDB } /** - * Returns the number of private links in the reference data + * Returns the number of private bookmarks in the reference data */ public function countPrivateLinks() { return $this->_privateCount; } + /** + * Returns the number of bookmarks without tag + */ + public function countUntaggedLinks() + { + $cpt = 0; + foreach ($this->bookmarks as $link) { + if (! $this->isLegacy) { + if (empty($link->getTags())) { + ++$cpt; + } + } else { + if (empty($link['tags'])) { + ++$cpt; + } + } + } + return $cpt; + } + public function getLinks() { - return $this->_links; + $this->reorder(); + return $this->bookmarks; + } + + /** + * Setter to override link creation. + * + * @param array $links List of bookmarks. + */ + public function setLinks($links) + { + $this->bookmarks = $links; } }