]> git.wh0rd.org - tt-rss.git/commitdiff
move db-prefs to OO
authorAndrew Dolgov <fox@madoka.volgo-balt.ru>
Thu, 18 Apr 2013 08:00:01 +0000 (12:00 +0400)
committerAndrew Dolgov <fox@madoka.volgo-balt.ru>
Thu, 18 Apr 2013 08:00:01 +0000 (12:00 +0400)
classes/db/prefs.php [new file with mode: 0644]
classes/handler/public.php
classes/pref/prefs.php
classes/rpc.php
include/db-prefs.php
include/functions.php
include/rssfuncs.php

diff --git a/classes/db/prefs.php b/classes/db/prefs.php
new file mode 100644 (file)
index 0000000..26fb466
--- /dev/null
@@ -0,0 +1,190 @@
+<?php
+class Db_Prefs {
+       private $dbh;
+       private static $instance;
+       private $cache;
+
+       function __construct() {
+               $this->dbh = Db::get();
+               $this->cache = array();
+
+               if ($_SESSION["uid"]) $this->cache();
+       }
+
+       private function __clone() {
+               //
+       }
+
+       public static function get() {
+               if (self::$instance == null)
+                       self::$instance = new self();
+
+               return self::$instance;
+       }
+
+       function cache() {
+               $profile = false;
+
+               $user_id = $_SESSION["uid"];
+               @$profile = $_SESSION["profile"];
+
+               if ($profile) {
+                       $profile_qpart = "profile = '$profile' AND";
+               } else {
+                       $profile_qpart = "profile IS NULL AND";
+               }
+
+               if (get_schema_version() < 63) $profile_qpart = "";
+
+               $result = db_query("SELECT
+                       value,ttrss_prefs_types.type_name as type_name,ttrss_prefs.pref_name AS pref_name
+                       FROM
+                               ttrss_user_prefs,ttrss_prefs,ttrss_prefs_types
+                       WHERE
+                               $profile_qpart
+                               ttrss_prefs.pref_name NOT LIKE '_MOBILE%' AND
+                               ttrss_prefs_types.id = type_id AND
+                               owner_uid = '$user_id' AND
+                               ttrss_user_prefs.pref_name = ttrss_prefs.pref_name");
+
+               while ($line = db_fetch_assoc($result)) {
+                       if ($user_id == $_SESSION["uid"]) {
+                               $pref_name = $line["pref_name"];
+
+                               $this->cache[$pref_name]["type"] = $line["type_name"];
+                               $this->cache[$pref_name]["value"] = $line["value"];
+                       }
+               }
+       }
+
+       function read($pref_name, $user_id = false, $die_on_error = false) {
+
+               $pref_name = db_escape_string($pref_name);
+               $profile = false;
+
+               if (!$user_id) {
+                       $user_id = $_SESSION["uid"];
+                       @$profile = $_SESSION["profile"];
+               } else {
+                       $user_id = sprintf("%d", $user_id);
+               }
+
+               if (isset($this->cache[$pref_name])) {
+                       $tuple = $this->cache[$pref_name];
+                       return $this->convert($tuple["value"], $tuple["type"]);
+               }
+
+               if ($profile) {
+                       $profile_qpart = "profile = '$profile' AND";
+               } else {
+                       $profile_qpart = "profile IS NULL AND";
+               }
+
+               if (get_schema_version() < 63) $profile_qpart = "";
+
+               $result = db_query("SELECT
+                       value,ttrss_prefs_types.type_name as type_name
+                       FROM
+                               ttrss_user_prefs,ttrss_prefs,ttrss_prefs_types
+                       WHERE
+                               $profile_qpart
+                               ttrss_user_prefs.pref_name = '$pref_name' AND
+                               ttrss_prefs_types.id = type_id AND
+                               owner_uid = '$user_id' AND
+                               ttrss_user_prefs.pref_name = ttrss_prefs.pref_name");
+
+               if (db_num_rows($result) > 0) {
+                       $value = db_fetch_result($result, 0, "value");
+                       $type_name = db_fetch_result($result, 0, "type_name");
+
+                       if ($user_id == $_SESSION["uid"]) {
+                               $this->cache[$pref_name]["type"] = $type_name;
+                               $this->cache[$pref_name]["value"] = $value;
+                       }
+
+                       return $this->convert($value, $type_name);
+
+               } else {
+                       user_error("Fatal error, unknown preferences key: $pref_name", $die_on_error ? E_USER_ERROR : E_USER_WARNING);
+                       return null;
+               }
+       }
+
+       function convert($value, $type_name) {
+               if ($type_name == "bool") {
+                       return $value == "true";
+               } else if ($type_name == "integer") {
+                       return (int)$value;
+               } else {
+                       return $value;
+               }
+       }
+
+       function write($pref_name, $value, $user_id = false, $strip_tags = true) {
+               $pref_name = db_escape_string($pref_name);
+               $value = db_escape_string($value, $strip_tags);
+
+               if (!$user_id) {
+                       $user_id = $_SESSION["uid"];
+                       @$profile = $_SESSION["profile"];
+               } else {
+                       $user_id = sprintf("%d", $user_id);
+                       $prefs_cache = false;
+               }
+
+               if ($profile) {
+                       $profile_qpart = "AND profile = '$profile'";
+               } else {
+                       $profile_qpart = "AND profile IS NULL";
+               }
+
+               if (get_schema_version() < 63) $profile_qpart = "";
+
+               $type_name = "";
+               $current_value = "";
+
+               if (isset($this->cache[$pref_name])) {
+                       $type_name = $this->cache[$pref_name]["type"];
+                       $current_value = $this->cache[$pref_name]["value"];
+               }
+
+               if (!$type_name) {
+                       $result = db_query("SELECT type_name
+                               FROM ttrss_prefs,ttrss_prefs_types
+                               WHERE pref_name = '$pref_name' AND type_id = ttrss_prefs_types.id");
+
+                       if (db_num_rows($result) > 0)
+                               $type_name = db_fetch_result($result, 0, "type_name");
+               } else if ($current_value == $value) {
+                       return;
+               }
+
+               if ($type_name) {
+                       if ($type_name == "bool") {
+                               if ($value == "1" || $value == "true") {
+                                       $value = "true";
+                               } else {
+                                       $value = "false";
+                               }
+                       } else if ($type_name == "integer") {
+                               $value = sprintf("%d", $value);
+                       }
+
+                       if ($pref_name == 'USER_TIMEZONE' && $value == '') {
+                               $value = 'UTC';
+                       }
+
+                       db_query("UPDATE ttrss_user_prefs SET
+                               value = '$value' WHERE pref_name = '$pref_name'
+                                       $profile_qpart
+                                       AND owner_uid = " . $_SESSION["uid"]);
+
+                       if ($user_id == $_SESSION["uid"]) {
+                               $this->cache[$pref_name]["type"] = $type_name;
+                               $this->cache[$pref_name]["value"] = $value;
+                       }
+               }
+       }
+
+}
+?>
index 16d628c80e8b5dd632783edcebc70405328dd6bc..ca5952bca121b40338a4527fd7fb645ede6a1428 100644 (file)
@@ -509,8 +509,6 @@ class Handler_Public extends Handler {
        }
 
        function login() {
-               $_SESSION["prefs_cache"] = array();
-
                if (!SINGLE_USER_MODE) {
 
                        $login = $this->dbh->escape_string($_POST["login"]);
@@ -541,7 +539,6 @@ class Handler_Public extends Handler {
 
                                        if ($this->dbh->num_rows($result) != 0) {
                                                $_SESSION["profile"] = $profile;
-                                               $_SESSION["prefs_cache"] = array();
                                        }
                                }
                        } else {
index b541ac875a1aa998bba273e887129a637eb194d9..d8b8ecc756841c6704cbb5fc933e6042a3c66d0c 100644 (file)
@@ -90,9 +90,6 @@ class Pref_Prefs extends Handler_Protected {
        }
 
        function saveconfig() {
-
-               $_SESSION["prefs_cache"] = false;
-
                $boolean_prefs = explode(",", $_POST["boolean_prefs"]);
 
                foreach ($boolean_prefs as $pref) {
index 51c195f115a900c1f7c808c7791d16ed699c9920..61c815b360113a110316dfab016f21f3428613ed 100644 (file)
@@ -11,7 +11,6 @@ class RPC extends Handler_Protected {
                $id = $this->dbh->escape_string($_REQUEST["id"]);
 
                $_SESSION["profile"] = $id;
-               $_SESSION["prefs_cache"] = array();
        }
 
        function remprofiles() {
index 8336b0cfee5a0734ca9c9d36b57f22ce2dcba442..d122f3baf90d94c6d6ca42a1b7af95694406c7a1 100644 (file)
 <?php
-       require_once "config.php";
        require_once "db.php";
 
-       if (!defined('DISABLE_SESSIONS') && !defined('PREFS_NO_CACHE')) {
-               if (!$_SESSION["prefs_cache"])
-                       $_SESSION["prefs_cache"] = array();
-       }
-
-       function cache_prefs() {
-               $profile = false;
-
-               $user_id = $_SESSION["uid"];
-               @$profile = $_SESSION["profile"];
-
-               if ($profile) {
-                       $profile_qpart = "profile = '$profile' AND";
-               } else {
-                       $profile_qpart = "profile IS NULL AND";
-               }
-
-               if (get_schema_version() < 63) $profile_qpart = "";
-
-               $result = db_query("SELECT
-                       value,ttrss_prefs_types.type_name as type_name,ttrss_prefs.pref_name AS pref_name
-                       FROM
-                               ttrss_user_prefs,ttrss_prefs,ttrss_prefs_types
-                       WHERE
-                               $profile_qpart
-                               ttrss_prefs.pref_name NOT LIKE '_MOBILE%' AND
-                               ttrss_prefs_types.id = type_id AND
-                               owner_uid = '$user_id' AND
-                               ttrss_user_prefs.pref_name = ttrss_prefs.pref_name");
-
-               while ($line = db_fetch_assoc($result)) {
-                       if ($user_id == $_SESSION["uid"]) {
-                               $pref_name = $line["pref_name"];
-
-                               $_SESSION["prefs_cache"][$pref_name]["type"] = $line["type_name"];
-                               $_SESSION["prefs_cache"][$pref_name]["value"] = $line["value"];
-                       }
-               }
-       }
-
        function get_pref($pref_name, $user_id = false, $die_on_error = false) {
-
-               $pref_name = db_escape_string($pref_name);
-               $prefs_cache = true;
-               $profile = false;
-
-               if (!$user_id) {
-                       $user_id = $_SESSION["uid"];
-                       @$profile = $_SESSION["profile"];
-               } else {
-                       $user_id = sprintf("%d", $user_id);
-                       //$prefs_cache = false;
-               }
-
-               if ($prefs_cache && !defined('DISABLE_SESSIONS') && !defined('PREFS_NO_CACHE')) {
-                       if ($_SESSION["prefs_cache"] && @$_SESSION["prefs_cache"][$pref_name]) {
-                               $tuple = $_SESSION["prefs_cache"][$pref_name];
-                               return convert_pref_type($tuple["value"], $tuple["type"]);
-                       }
-               }
-
-               if ($profile) {
-                       $profile_qpart = "profile = '$profile' AND";
-               } else {
-                       $profile_qpart = "profile IS NULL AND";
-               }
-
-               if (get_schema_version() < 63) $profile_qpart = "";
-
-               $result = db_query("SELECT
-                       value,ttrss_prefs_types.type_name as type_name
-                       FROM
-                               ttrss_user_prefs,ttrss_prefs,ttrss_prefs_types
-                       WHERE
-                               $profile_qpart
-                               ttrss_user_prefs.pref_name = '$pref_name' AND
-                               ttrss_prefs_types.id = type_id AND
-                               owner_uid = '$user_id' AND
-                               ttrss_user_prefs.pref_name = ttrss_prefs.pref_name");
-
-               if (db_num_rows($result) > 0) {
-                       $value = db_fetch_result($result, 0, "value");
-                       $type_name = db_fetch_result($result, 0, "type_name");
-
-                       if (!defined('DISABLE_SESSIONS')) {
-                               if ($user_id == $_SESSION["uid"]) {
-                                       $_SESSION["prefs_cache"][$pref_name]["type"] = $type_name;
-                                       $_SESSION["prefs_cache"][$pref_name]["value"] = $value;
-                               }
-                       }
-
-                       return convert_pref_type($value, $type_name);
-
-               } else {
-                       if ($die_on_error) {
-                               user_error("Fatal error, unknown preferences key: $pref_name", E_USER_ERROR);
-                       } else {
-                               return null;
-                       }
-               }
-       }
-
-       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;
-               }
+               return Db_Prefs::get()->read($pref_name, $user_id, $die_on_error);
        }
 
        function set_pref($pref_name, $value, $user_id = false, $strip_tags = true) {
-               $pref_name = db_escape_string($pref_name);
-               $value = db_escape_string($value, $strip_tags);
-
-               if (!$user_id) {
-                       $user_id = $_SESSION["uid"];
-                       @$profile = $_SESSION["profile"];
-               } else {
-                       $user_id = sprintf("%d", $user_id);
-                       $prefs_cache = false;
-               }
-
-               if ($profile) {
-                       $profile_qpart = "AND profile = '$profile'";
-               } else {
-                       $profile_qpart = "AND profile IS NULL";
-               }
-
-               if (get_schema_version() < 63) $profile_qpart = "";
-
-               $type_name = "";
-               $current_value = "";
-
-               if (!defined('DISABLE_SESSIONS') && !defined('PREFS_NO_CACHE')) {
-                       if ($_SESSION["prefs_cache"] && @$_SESSION["prefs_cache"][$pref_name]) {
-                               $type_name = $_SESSION["prefs_cache"][$pref_name]["type"];
-                               $current_value = $_SESSION["prefs_cache"][$pref_name]["value"];
-                       }
-               }
-
-               if (!$type_name) {
-                       $result = db_query("SELECT type_name
-                               FROM ttrss_prefs,ttrss_prefs_types
-                               WHERE pref_name = '$pref_name' AND type_id = ttrss_prefs_types.id");
-
-                       if (db_num_rows($result) > 0)
-                               $type_name = db_fetch_result($result, 0, "type_name");
-               } else if ($current_value == $value) {
-                       return;
-               }
-
-               if ($type_name) {
-                       if ($type_name == "bool") {
-                               if ($value == "1" || $value == "true") {
-                                       $value = "true";
-                               } else {
-                                       $value = "false";
-                               }
-                       } else if ($type_name == "integer") {
-                               $value = sprintf("%d", $value);
-                       }
-
-                       if ($pref_name == 'USER_TIMEZONE' && $value == '') {
-                               $value = 'UTC';
-                       }
-
-                       db_query("UPDATE ttrss_user_prefs SET
-                               value = '$value' WHERE pref_name = '$pref_name'
-                                       $profile_qpart
-                                       AND owner_uid = " . $_SESSION["uid"]);
-
-                       if (!defined('DISABLE_SESSIONS')) {
-                               if ($user_id == $_SESSION["uid"]) {
-                                       $_SESSION["prefs_cache"][$pref_name]["type"] = $type_name;
-                                       $_SESSION["prefs_cache"][$pref_name]["value"] = $value;
-                               }
-                       }
-               }
+               return Db_Prefs::get()->write($pref_name, $value, $user_id, $strip_tags);
        }
 ?>
index 42aebec83789ac9b0469fd04702488b96f48ab4d..3c8e9d62c25436e61e864d1d9bf7726f43c19d24 100644 (file)
        }
 
        function login_sequence() {
-               $_SESSION["prefs_cache"] = false;
-
                if (SINGLE_USER_MODE) {
                        @session_start();
                        authenticate_user("admin", null);
-                       cache_prefs();
                        load_user_plugins($_SESSION["uid"]);
                } else {
                        if (!validate_session()) $_SESSION["uid"] = false;
                        }
 
                        if ($_SESSION["uid"]) {
-                               cache_prefs();
                                load_user_plugins($_SESSION["uid"]);
 
                                /* cleanup ccache */
index 494e050a6a4fd35427fa1466ee20e04e44089407..b2d7e0c59b7058a182e3159bd422d528eb07c369 100644 (file)
                                $updstart_thresh_qpart
                        ORDER BY $random_qpart $query_limit");
 
-               $user_prefs_cache = array();
-
                if($debug) _debug(sprintf("Scheduled %d feeds to update...", db_num_rows($result)));
 
                // Here is a little cache magic in order to minimize risk of double feed updates.