Browse Source

move db-prefs to OO

Andrew Dolgov 11 years ago
parent
commit
52d88392da
7 changed files with 192 additions and 190 deletions
  1. 190 0
      classes/db/prefs.php
  2. 0 3
      classes/handler/public.php
  3. 0 3
      classes/pref/prefs.php
  4. 0 1
      classes/rpc.php
  5. 2 177
      include/db-prefs.php
  6. 0 4
      include/functions.php
  7. 0 2
      include/rssfuncs.php

+ 190 - 0
classes/db/prefs.php

@@ -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;
+			}
+		}
+	}
+
+}
+?>

+ 0 - 3
classes/handler/public.php

@@ -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 {

+ 0 - 3
classes/pref/prefs.php

@@ -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) {

+ 0 - 1
classes/rpc.php

@@ -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() {

+ 2 - 177
include/db-prefs.php

@@ -1,186 +1,11 @@
 <?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);
 	}
 ?>

+ 0 - 4
include/functions.php

@@ -744,12 +744,9 @@
 	}
 
 	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;
@@ -783,7 +780,6 @@
 			}
 
 			if ($_SESSION["uid"]) {
-				cache_prefs();
 				load_user_plugins($_SESSION["uid"]);
 
 				/* cleanup ccache */

+ 0 - 2
include/rssfuncs.php

@@ -127,8 +127,6 @@
 				$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.