return;
}
+ $this->urls = [];
+ $this->ids = [];
$this->links = FileUtils::readFlatDB($this->datastore, []);
$toremove = array();
foreach ($this->links as $key => &$link) {
if (! $this->loggedIn && $link['private'] != 0) {
// Transition for not upgraded databases.
- $toremove[] = $key;
+ unset($this->links[$key]);
continue;
}
}
$link['shorturl'] = smallHash($link['linkdate']);
}
- }
- // If user is not logged in, filter private links.
- foreach ($toremove as $offset) {
- unset($this->links[$offset]);
+ $this->urls[$link['url']] = $key;
+ $this->ids[$link['id']] = $key;
}
-
- $this->reorder();
}
/**
*/
private function write()
{
+ $this->reorder();
FileUtils::writeFlatDB($this->datastore, $this->links);
}
return $a['created'] < $b['created'] ? 1 * $order : -1 * $order;
});
- $this->urls = array();
- $this->ids = array();
+ $this->urls = [];
+ $this->ids = [];
foreach ($this->links as $key => $link) {
$this->urls[$link['url']] = $key;
$this->ids[$link['id']] = $key;
}
return true;
}
+
+ /**
+ * Save the datastore -> the link order is now applied when links are saved.
+ */
+ public function updateMethodReorderDatastore()
+ {
+ $this->linkDB->save($this->conf->get('resource.page_cache'));
+ }
}
/**
*/
class LinkFilterTest extends PHPUnit_Framework_TestCase
{
+ /**
+ * @var string Test datastore path.
+ */
+ protected static $testDatastore = 'sandbox/datastore.php';
/**
* @var LinkFilter instance.
*/
*/
protected static $refDB;
+ /**
+ * @var LinkDB instance
+ */
+ protected static $linkDB;
+
/**
* Instanciate linkFilter with ReferenceLinkDB data.
*/
public static function setUpBeforeClass()
{
self::$refDB = new ReferenceLinkDB();
- self::$linkFilter = new LinkFilter(self::$refDB->getLinks());
+ self::$refDB->write(self::$testDatastore);
+ self::$linkDB = new LinkDB(self::$testDatastore, true, false);
+ self::$linkFilter = new LinkFilter(self::$linkDB);
}
/**
*/
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
*/
public function getLinks()
{
+ $this->reorder();
return $this->_links;
}