*/
class LinkDB implements Iterator, Countable, ArrayAccess
{
+ // Links are stored as a PHP serialized string
+ private $datastore;
+
+ // Datastore PHP prefix
+ protected static $phpPrefix = '<?php /* ';
+
+ // Datastore PHP suffix
+ protected static $phpSuffix = ' */ ?>';
+
// List of links (associative array)
// - key: link date (e.g. "20110823_124546"),
// - value: associative array (keys: title, description...)
*
* @param $isLoggedIn is the user logged in?
*/
- function __construct($isLoggedIn, $hidePublicLinks)
+ function __construct($datastore, $isLoggedIn, $hidePublicLinks)
{
- // FIXME: do not access $GLOBALS, pass the datastore instead
+ $this->datastore = $datastore;
$this->loggedIn = $isLoggedIn;
$this->hidePublicLinks = $hidePublicLinks;
$this->checkDB();
*/
private function checkDB()
{
- if (file_exists($GLOBALS['config']['DATASTORE'])) {
+ if (file_exists($this->datastore)) {
return;
}
// Write database to disk
// TODO: raise an exception if the file is not write-able
file_put_contents(
- // FIXME: do not use $GLOBALS
- $GLOBALS['config']['DATASTORE'],
- PHPPREFIX.base64_encode(gzdeflate(serialize($this->links))).PHPSUFFIX
+ $this->datastore,
+ self::$phpPrefix.base64_encode(gzdeflate(serialize($this->links))).self::$phpSuffix
);
}
// Read data
// Note that gzinflate is faster than gzuncompress.
// See: http://www.php.net/manual/en/function.gzdeflate.php#96439
- // FIXME: do not use $GLOBALS
$this->links = array();
- if (file_exists($GLOBALS['config']['DATASTORE'])) {
+ if (file_exists($this->datastore)) {
$this->links = unserialize(gzinflate(base64_decode(
- substr(file_get_contents($GLOBALS['config']['DATASTORE']),
- strlen(PHPPREFIX), -strlen(PHPSUFFIX)))));
+ substr(file_get_contents($this->datastore),
+ strlen(self::$phpPrefix), -strlen(self::$phpSuffix)))));
}
// If user is not logged in, filter private links.
die('You are not authorized to change the database.');
}
file_put_contents(
- $GLOBALS['config']['DATASTORE'],
- PHPPREFIX.base64_encode(gzdeflate(serialize($this->links))).PHPSUFFIX
+ $this->datastore,
+ self::$phpPrefix.base64_encode(gzdeflate(serialize($this->links))).self::$phpSuffix
);
invalidateCaches();
}
// FIXME: accept double-quotes to search for a string "as is"?
$filtered = array();
$search = mb_convert_case($searchterms, MB_CASE_LOWER, 'UTF-8');
- $keys = ['title', 'description', 'url', 'tags'];
+ $keys = array('title', 'description', 'url', 'tags');
foreach ($this->links as $link) {
$found = false;