aboutsummaryrefslogtreecommitdiffhomepage
path: root/application/LinkDB.php
diff options
context:
space:
mode:
Diffstat (limited to 'application/LinkDB.php')
-rw-r--r--application/LinkDB.php31
1 files changed, 19 insertions, 12 deletions
diff --git a/application/LinkDB.php b/application/LinkDB.php
index 2b3fb60b..7e29ee8e 100644
--- a/application/LinkDB.php
+++ b/application/LinkDB.php
@@ -27,6 +27,15 @@
27 */ 27 */
28class LinkDB implements Iterator, Countable, ArrayAccess 28class LinkDB implements Iterator, Countable, ArrayAccess
29{ 29{
30 // Links are stored as a PHP serialized string
31 private $datastore;
32
33 // Datastore PHP prefix
34 protected static $phpPrefix = '<?php /* ';
35
36 // Datastore PHP suffix
37 protected static $phpSuffix = ' */ ?>';
38
30 // List of links (associative array) 39 // List of links (associative array)
31 // - key: link date (e.g. "20110823_124546"), 40 // - key: link date (e.g. "20110823_124546"),
32 // - value: associative array (keys: title, description...) 41 // - value: associative array (keys: title, description...)
@@ -55,9 +64,9 @@ class LinkDB implements Iterator, Countable, ArrayAccess
55 * 64 *
56 * @param $isLoggedIn is the user logged in? 65 * @param $isLoggedIn is the user logged in?
57 */ 66 */
58 function __construct($isLoggedIn, $hidePublicLinks) 67 function __construct($datastore, $isLoggedIn, $hidePublicLinks)
59 { 68 {
60 // FIXME: do not access $GLOBALS, pass the datastore instead 69 $this->datastore = $datastore;
61 $this->loggedIn = $isLoggedIn; 70 $this->loggedIn = $isLoggedIn;
62 $this->hidePublicLinks = $hidePublicLinks; 71 $this->hidePublicLinks = $hidePublicLinks;
63 $this->checkDB(); 72 $this->checkDB();
@@ -172,7 +181,7 @@ class LinkDB implements Iterator, Countable, ArrayAccess
172 */ 181 */
173 private function checkDB() 182 private function checkDB()
174 { 183 {
175 if (file_exists($GLOBALS['config']['DATASTORE'])) { 184 if (file_exists($this->datastore)) {
176 return; 185 return;
177 } 186 }
178 187
@@ -201,9 +210,8 @@ class LinkDB implements Iterator, Countable, ArrayAccess
201 // Write database to disk 210 // Write database to disk
202 // TODO: raise an exception if the file is not write-able 211 // TODO: raise an exception if the file is not write-able
203 file_put_contents( 212 file_put_contents(
204 // FIXME: do not use $GLOBALS 213 $this->datastore,
205 $GLOBALS['config']['DATASTORE'], 214 self::$phpPrefix.base64_encode(gzdeflate(serialize($this->links))).self::$phpSuffix
206 PHPPREFIX.base64_encode(gzdeflate(serialize($this->links))).PHPSUFFIX
207 ); 215 );
208 } 216 }
209 217
@@ -222,13 +230,12 @@ class LinkDB implements Iterator, Countable, ArrayAccess
222 // Read data 230 // Read data
223 // Note that gzinflate is faster than gzuncompress. 231 // Note that gzinflate is faster than gzuncompress.
224 // See: http://www.php.net/manual/en/function.gzdeflate.php#96439 232 // See: http://www.php.net/manual/en/function.gzdeflate.php#96439
225 // FIXME: do not use $GLOBALS
226 $this->links = array(); 233 $this->links = array();
227 234
228 if (file_exists($GLOBALS['config']['DATASTORE'])) { 235 if (file_exists($this->datastore)) {
229 $this->links = unserialize(gzinflate(base64_decode( 236 $this->links = unserialize(gzinflate(base64_decode(
230 substr(file_get_contents($GLOBALS['config']['DATASTORE']), 237 substr(file_get_contents($this->datastore),
231 strlen(PHPPREFIX), -strlen(PHPSUFFIX))))); 238 strlen(self::$phpPrefix), -strlen(self::$phpSuffix)))));
232 } 239 }
233 240
234 // If user is not logged in, filter private links. 241 // If user is not logged in, filter private links.
@@ -266,8 +273,8 @@ class LinkDB implements Iterator, Countable, ArrayAccess
266 die('You are not authorized to change the database.'); 273 die('You are not authorized to change the database.');
267 } 274 }
268 file_put_contents( 275 file_put_contents(
269 $GLOBALS['config']['DATASTORE'], 276 $this->datastore,
270 PHPPREFIX.base64_encode(gzdeflate(serialize($this->links))).PHPSUFFIX 277 self::$phpPrefix.base64_encode(gzdeflate(serialize($this->links))).self::$phpSuffix
271 ); 278 );
272 invalidateCaches(); 279 invalidateCaches();
273 } 280 }