]> git.wh0rd.org - tt-rss.git/blobdiff - db-prefs.php
database backed sessions
[tt-rss.git] / db-prefs.php
index 5f61f15ae6f6796a2d53c53944aa6cbaa95218f4..8714e340cafd0688ef8ab2941c9a101bf9ad5326 100644 (file)
@@ -2,10 +2,12 @@
        require_once "config.php";
        require_once "db.php";
 
-       session_start();
-
-       if (!$_SESSION["prefs_cache"])
-               $_SESSION["prefs_cache"] = array();
+       if (! DISABLE_SESSIONS) {       
+               require_once "sessions.php";
+       
+               if (!$_SESSION["prefs_cache"])
+                       $_SESSION["prefs_cache"] = array();
+       }
 
        function get_pref($link, $pref_name, $user_id = false) {
 
@@ -19,7 +21,8 @@
                }
        
                if ($_SESSION["prefs_cache"] && $_SESSION["prefs_cache"][$pref_name]) {
-                       return $_SESSION["prefs_cache"][$pref_name];
+                       $tuple = $_SESSION["prefs_cache"][$pref_name];
+                       return convert_pref_type($tuple["value"], $tuple["type"]);
                }
 
                $result = db_query($link, "SELECT 
                        $value = db_fetch_result($result, 0, "value");
                        $type_name = db_fetch_result($result, 0, "type_name");
 
-                       if ($type_name == "bool") {                     
-                               $retv = $value == "true";                               
-                       } else if ($type_name == "integer") {                   
-                               $retv = sprintf("%d", $value);                          
-                       } else {
-                               $retv = $value;
-                       }
-
                        if ($user_id = $_SESSION["uid"]) {
-                               $_SESSION["prefs_cache"][$pref_name] = $value;
+                               $_SESSION["prefs_cache"][$pref_name]["type"] = $type_name;
+                               $_SESSION["prefs_cache"][$pref_name]["value"] = $value;
                        }
-                       return $value;
+                       return convert_pref_type($value, $type_name);
                        
                } else {                
                        die("Fatal error, unknown preferences key: $pref_name");                        
                }
        }
 
+       function convert_pref_type($value, $type_name) {
+               if ($type_name == "bool") {                     
+                       return $value == "true";                                
+               } else if ($type_name == "integer") {                   
+                       return sprintf("%d", $value);                           
+               } else {
+                       return $value;
+               }
+       }
+
+       // doesn't peform any type checking, be vigilant
+       
+       function set_pref($link, $key, $value) {
+               $key = db_escape_string($key);
+               $value = db_escape_string($value);
+       
+               db_query($link, "UPDATE ttrss_user_prefs SET 
+                       value = '$value' WHERE pref_name = '$key' 
+                               AND owner_uid = " . $_SESSION["uid"]);
+
+               $_SESSION["prefs_cache"] = array();
+
+       }
 ?>