Automated build for v0.01
This commit is contained in:
		
						commit
						791b998489
					
				
					 2771 changed files with 222096 additions and 0 deletions
				
			
		
							
								
								
									
										85
									
								
								classes/db/mysqli.php
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								classes/db/mysqli.php
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,85 @@ | |||
| <?php | ||||
| class Db_Mysqli implements IDb { | ||||
| 	private $link; | ||||
| 	private $last_error; | ||||
| 
 | ||||
| 	function connect($host, $user, $pass, $db, $port) { | ||||
| 		if ($port) | ||||
| 			$this->link = mysqli_connect($host, $user, $pass, $db, $port); | ||||
| 		else | ||||
| 			$this->link = mysqli_connect($host, $user, $pass, $db); | ||||
| 
 | ||||
| 		if ($this->link) { | ||||
| 			$this->init(); | ||||
| 
 | ||||
| 			return $this->link; | ||||
| 		} else { | ||||
| 			print("Unable to connect to database (as $user to $host, database $db): " . mysqli_connect_error()); | ||||
| 			exit(102); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	function escape_string($s, $strip_tags = true) { | ||||
| 		if ($strip_tags) $s = strip_tags($s); | ||||
| 
 | ||||
| 		return mysqli_real_escape_string($this->link, $s); | ||||
| 	} | ||||
| 
 | ||||
| 	function query($query, $die_on_error = true) { | ||||
| 		$result = @mysqli_query($this->link, $query); | ||||
| 		if (!$result) { | ||||
| 			$this->last_error = @mysqli_error($this->link); | ||||
| 
 | ||||
| 			@mysqli_query($this->link, "ROLLBACK"); | ||||
| 			user_error("Query $query failed: " . ($this->link ? $this->last_error : "No connection"), | ||||
| 				$die_on_error ? E_USER_ERROR : E_USER_WARNING); | ||||
| 		} | ||||
| 
 | ||||
| 		return $result; | ||||
| 	} | ||||
| 
 | ||||
| 	function fetch_assoc($result) { | ||||
| 		return mysqli_fetch_assoc($result); | ||||
| 	} | ||||
| 
 | ||||
| 
 | ||||
| 	function num_rows($result) { | ||||
| 		return mysqli_num_rows($result); | ||||
| 	} | ||||
| 
 | ||||
| 	function fetch_result($result, $row, $param) { | ||||
| 		if (mysqli_data_seek($result, $row)) { | ||||
| 			$line = mysqli_fetch_assoc($result); | ||||
| 			return $line[$param]; | ||||
| 		} else { | ||||
| 			return false; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	function close() { | ||||
| 		return mysqli_close($this->link); | ||||
| 	} | ||||
| 
 | ||||
| 	function affected_rows($result) { | ||||
| 		return mysqli_affected_rows($this->link); | ||||
| 	} | ||||
| 
 | ||||
| 	function last_error() { | ||||
| 		return mysqli_error($this->link); | ||||
| 	} | ||||
| 
 | ||||
| 	function last_query_error() { | ||||
| 		return $this->last_error; | ||||
| 	} | ||||
| 
 | ||||
| 	function init() { | ||||
| 		$this->query("SET time_zone = '+0:0'"); | ||||
| 
 | ||||
| 		if (defined('MYSQL_CHARSET') && MYSQL_CHARSET) { | ||||
| 			mysqli_set_charset($this->link, MYSQL_CHARSET); | ||||
| 		} | ||||
| 
 | ||||
| 		return true; | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
							
								
								
									
										91
									
								
								classes/db/pgsql.php
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								classes/db/pgsql.php
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,91 @@ | |||
| <?php | ||||
| class Db_Pgsql implements IDb { | ||||
| 	private $link; | ||||
| 	private $last_error; | ||||
| 
 | ||||
| 	function connect($host, $user, $pass, $db, $port) { | ||||
| 		$string = "dbname=$db user=$user"; | ||||
| 
 | ||||
| 		if ($pass) { | ||||
| 			$string .= " password=$pass"; | ||||
| 		} | ||||
| 
 | ||||
| 		if ($host) { | ||||
| 			$string .= " host=$host"; | ||||
| 		} | ||||
| 
 | ||||
| 		if (is_numeric($port) && $port > 0) { | ||||
| 			$string = "$string port=" . $port; | ||||
| 		} | ||||
| 
 | ||||
| 		$this->link = pg_connect($string); | ||||
| 
 | ||||
| 		if (!$this->link) { | ||||
| 			print("Unable to connect to database (as $user to $host, database $db):" . pg_last_error()); | ||||
| 			exit(102); | ||||
| 		} | ||||
| 
 | ||||
| 		$this->init(); | ||||
| 
 | ||||
| 		return $this->link; | ||||
| 	} | ||||
| 
 | ||||
| 	function escape_string($s, $strip_tags = true) { | ||||
| 		if ($strip_tags) $s = strip_tags($s); | ||||
| 
 | ||||
| 		return pg_escape_string($s); | ||||
| 	} | ||||
| 
 | ||||
| 	function query($query, $die_on_error = true) { | ||||
| 		$result = @pg_query($this->link, $query); | ||||
| 
 | ||||
| 		if (!$result) { | ||||
| 			$this->last_error = @pg_last_error($this->link); | ||||
| 
 | ||||
| 			@pg_query($this->link, "ROLLBACK"); | ||||
| 			$query = htmlspecialchars($query); // just in case
 | ||||
| 			user_error("Query $query failed: " . ($this->link ? $this->last_error : "No connection"), | ||||
| 				$die_on_error ? E_USER_ERROR : E_USER_WARNING); | ||||
| 		} | ||||
| 		return $result; | ||||
| 	} | ||||
| 
 | ||||
| 	function fetch_assoc($result) { | ||||
| 		return pg_fetch_assoc($result); | ||||
| 	} | ||||
| 
 | ||||
| 
 | ||||
| 	function num_rows($result) { | ||||
| 		return pg_num_rows($result); | ||||
| 	} | ||||
| 
 | ||||
| 	function fetch_result($result, $row, $param) { | ||||
| 		return pg_fetch_result($result, $row, $param); | ||||
| 	} | ||||
| 
 | ||||
| 	function close() { | ||||
| 		return pg_close($this->link); | ||||
| 	} | ||||
| 
 | ||||
| 	function affected_rows($result) { | ||||
| 		return pg_affected_rows($result); | ||||
| 	} | ||||
| 
 | ||||
| 	function last_error() { | ||||
| 		return pg_last_error($this->link); | ||||
| 	} | ||||
| 
 | ||||
| 	function last_query_error() { | ||||
| 		return $this->last_error; | ||||
| 	} | ||||
| 
 | ||||
| 	function init() { | ||||
| 		$this->query("set client_encoding = 'UTF-8'"); | ||||
| 		pg_set_client_encoding("UNICODE"); | ||||
| 		$this->query("set datestyle = 'ISO, european'"); | ||||
| 		$this->query("set TIME ZONE 0"); | ||||
| 		$this->query("set cpu_tuple_cost = 0.5"); | ||||
| 
 | ||||
| 		return true; | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										171
									
								
								classes/db/prefs.php
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										171
									
								
								classes/db/prefs.php
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,171 @@ | |||
| <?php | ||||
| class Db_Prefs { | ||||
| 	private $pdo; | ||||
| 	private static $instance; | ||||
| 	private $cache; | ||||
| 
 | ||||
| 	function __construct() { | ||||
| 		$this->pdo = Db::pdo(); | ||||
| 		$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() { | ||||
| 		$user_id = $_SESSION["uid"]; | ||||
| 		@$profile = $_SESSION["profile"]; | ||||
| 
 | ||||
| 		if (!is_numeric($profile) || !$profile || get_schema_version() < 63) $profile = null; | ||||
| 
 | ||||
| 		$sth = $this->pdo->prepare("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 = :profile OR (:profile IS NULL AND profile IS NULL)) AND | ||||
| 				ttrss_prefs.pref_name NOT LIKE '_MOBILE%' AND | ||||
| 				ttrss_prefs_types.id = type_id AND | ||||
| 				owner_uid = :uid AND | ||||
| 				ttrss_user_prefs.pref_name = ttrss_prefs.pref_name");
 | ||||
| 
 | ||||
| 		$sth->execute([":profile" => $profile, ":uid" => $user_id]); | ||||
| 
 | ||||
| 		while ($line = $sth->fetch()) { | ||||
| 			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) { | ||||
| 
 | ||||
| 		if (!$user_id) { | ||||
| 			$user_id = $_SESSION["uid"]; | ||||
| 			@$profile = $_SESSION["profile"]; | ||||
| 		} else { | ||||
| 			$profile = false; | ||||
| 		} | ||||
| 
 | ||||
| 		if ($user_id == $_SESSION['uid'] && isset($this->cache[$pref_name])) { | ||||
| 			$tuple = $this->cache[$pref_name]; | ||||
| 			return $this->convert($tuple["value"], $tuple["type"]); | ||||
| 		} | ||||
| 
 | ||||
| 		if (!is_numeric($profile) || !$profile || get_schema_version() < 63) $profile = null; | ||||
| 
 | ||||
| 		$sth = $this->pdo->prepare("SELECT
 | ||||
| 			value,ttrss_prefs_types.type_name as type_name | ||||
| 			FROM | ||||
| 				ttrss_user_prefs,ttrss_prefs,ttrss_prefs_types | ||||
| 			WHERE | ||||
| 				(profile = :profile OR (:profile IS NULL AND profile IS NULL)) AND | ||||
| 				ttrss_user_prefs.pref_name = :pref_name AND | ||||
| 				ttrss_prefs_types.id = type_id AND | ||||
| 				owner_uid = :uid AND | ||||
| 				ttrss_user_prefs.pref_name = ttrss_prefs.pref_name");
 | ||||
| 		$sth->execute([":uid" => $user_id, ":profile" => $profile, ":pref_name" => $pref_name]); | ||||
| 
 | ||||
| 		if ($row = $sth->fetch()) { | ||||
| 			$value = $row["value"]; | ||||
| 			$type_name = $row["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 (owner: $user_id)", $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) { | ||||
| 		if ($strip_tags) $value = strip_tags($value); | ||||
| 
 | ||||
| 		if (!$user_id) { | ||||
| 			$user_id = $_SESSION["uid"]; | ||||
| 			@$profile = $_SESSION["profile"]; | ||||
| 		} else { | ||||
| 			$profile = null; | ||||
| 		} | ||||
| 
 | ||||
| 		if (!is_numeric($profile) || !$profile || get_schema_version() < 63) $profile = null; | ||||
| 
 | ||||
| 		$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) { | ||||
| 			$sth = $this->pdo->prepare("SELECT type_name
 | ||||
| 				FROM ttrss_prefs,ttrss_prefs_types | ||||
| 				WHERE pref_name = ? AND type_id = ttrss_prefs_types.id");
 | ||||
| 			$sth->execute([$pref_name]); | ||||
| 
 | ||||
| 			if ($row = $sth->fetch()) | ||||
| 				$type_name = $row["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 = (int)$value; | ||||
| 			} | ||||
| 
 | ||||
| 			if ($pref_name == 'USER_TIMEZONE' && $value == '') { | ||||
| 				$value = 'UTC'; | ||||
| 			} | ||||
| 
 | ||||
| 			$sth = $this->pdo->prepare("UPDATE ttrss_user_prefs SET
 | ||||
| 				value = :value WHERE pref_name = :pref_name | ||||
| 					AND (profile = :profile OR (:profile IS NULL AND profile IS NULL)) | ||||
| 					AND owner_uid = :uid");
 | ||||
| 
 | ||||
| 			$sth->execute([":pref_name" => $pref_name, ":value" => $value, ":uid" => $user_id, ":profile" => $profile]); | ||||
| 
 | ||||
| 			if ($user_id == $_SESSION["uid"]) { | ||||
| 				$this->cache[$pref_name]["type"] = $type_name; | ||||
| 				$this->cache[$pref_name]["value"] = $value; | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Fmstrat
						Fmstrat