*/
class ReferenceLinkDB
{
- public static $NB_LINKS_TOTAL = 8;
+ public static $NB_LINKS_TOTAL = 9;
private $_links = array();
private $_publicCount = 0;
'?WDWyig',
'Stallman has a beard and is part of the Free Software Foundation (or not). Seriously, read this. #hashtag',
0,
- DateTime::createFromFormat('Ymd_His', '20150310_114651'),
+ DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, '20150310_114651'),
'sTuff',
null,
'WDWyig'
'?WDWyig',
'Used to test links reordering.',
0,
- DateTime::createFromFormat('Ymd_His', '20100310_101010'),
+ DateTime::createFromFormat(LinkDB::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(LinkDB::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,
- DateTime::createFromFormat('Ymd_His', '20150310_114633'),
+ DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, '20150310_114633'),
'free gnu software stallman -exclude stuff hashtag',
- DateTime::createFromFormat('Ymd_His', '20160803_093033')
+ DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, '20160803_093033')
);
$this->addLink(
'http://mediagoblin.org/',
'A free software media publishing platform #hashtagOther',
0,
- DateTime::createFromFormat('Ymd_His', '20130614_184135'),
+ DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, '20130614_184135'),
'gnu media web .hidden hashtag',
- null,
+ DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, '20130615_184230'),
'IuWvgA'
);
'https://dvcs.w3.org/hg/markup-validator/summary',
'Mercurial repository for the W3C Validator #private',
1,
- DateTime::createFromFormat('Ymd_His', '20141125_084734'),
+ DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, '20141125_084734'),
'css html w3c web Mercurial'
);
'http://ars.userfriendly.org/cartoons/?id=20121206',
'Naming conventions... #private',
0,
- DateTime::createFromFormat('Ymd_His', '20121206_142300'),
+ DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, '20121206_142300'),
'dev cartoon web'
);
'http://ars.userfriendly.org/cartoons/?id=20010306',
'Tropical printing',
0,
- DateTime::createFromFormat('Ymd_His', '20121206_172539'),
+ DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, '20121206_172539'),
'samba cartoon web'
);
'http://geek-and-poke.com/',
'',
1,
- DateTime::createFromFormat('Ymd_His', '20121206_182539'),
+ DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, '20121206_182539'),
'dev cartoon tag1 tag2 tag3 tag4 '
);
}
'tags' => $tags,
'created' => $date,
'updated' => $updated,
- 'shorturl' => $shorturl ? $shorturl : smallHash($date->format('Ymd_His') . $id),
+ 'shorturl' => $shorturl ? $shorturl : smallHash($date->format(LinkDB::LINK_DATE_FORMAT) . $id),
);
$this->_links[$id] = $link;
*/
public function write($filename)
{
+ $this->reorder();
file_put_contents(
$filename,
'<?php /* '.base64_encode(gzdeflate(serialize($this->_links))).' */ ?>'
);
}
+ /**
+ * Reorder links by creation date (newest first).
+ *
+ * Also update the urls and ids mapping arrays.
+ *
+ * @param string $order ASC|DESC
+ */
+ public function reorder($order = 'DESC')
+ {
+ // backward compatibility: ignore reorder if the the `created` field doesn't exist
+ if (! isset(array_values($this->_links)[0]['created'])) {
+ return;
+ }
+
+ $order = $order === 'ASC' ? -1 : 1;
+ // Reorder array by dates.
+ usort($this->_links, function($a, $b) use ($order) {
+ return $a['created'] < $b['created'] ? 1 * $order : -1 * $order;
+ });
+ }
+
/**
* Returns the number of links in the reference data
*/
return $this->_privateCount;
}
+ /**
+ * Returns the number of links without tag
+ */
+ public function countUntaggedLinks()
+ {
+ $cpt = 0;
+ foreach ($this->_links as $link) {
+ if (empty($link['tags'])) {
+ ++$cpt;
+ }
+ }
+ return $cpt;
+ }
+
public function getLinks()
{
+ $this->reorder();
return $this->_links;
}