diff options
author | Andrew Dolgov <[email protected]> | 2021-02-24 21:56:52 +0300 |
---|---|---|
committer | Andrew Dolgov <[email protected]> | 2021-02-24 21:56:52 +0300 |
commit | 93940d2a9f80d9e1dac49b5eb7db23230d31c5f6 (patch) | |
tree | 71016661f6017918d0934eb462bd9552018d557a /classes/db | |
parent | 8b022c2bfb356d7dddaf334bc931d6dec77086fb (diff) | |
parent | 1adacd057230aea4ede29dab510385bf01cf99a3 (diff) |
Merge branch 'master' of git.fakecake.org:fox/tt-rss into weblate-integration
Diffstat (limited to 'classes/db')
-rw-r--r-- | classes/db/mysqli.php | 85 | ||||
-rw-r--r-- | classes/db/pgsql.php | 91 | ||||
-rw-r--r-- | classes/db/prefs.php | 74 |
3 files changed, 37 insertions, 213 deletions
diff --git a/classes/db/mysqli.php b/classes/db/mysqli.php deleted file mode 100644 index a05b121fc..000000000 --- a/classes/db/mysqli.php +++ /dev/null @@ -1,85 +0,0 @@ -<?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; - } - -} diff --git a/classes/db/pgsql.php b/classes/db/pgsql.php deleted file mode 100644 index 98fab6bea..000000000 --- a/classes/db/pgsql.php +++ /dev/null @@ -1,91 +0,0 @@ -<?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; - } -}
\ No newline at end of file diff --git a/classes/db/prefs.php b/classes/db/prefs.php index 24153b19a..44581dbcb 100644 --- a/classes/db/prefs.php +++ b/classes/db/prefs.php @@ -6,9 +6,8 @@ class Db_Prefs { function __construct() { $this->pdo = Db::pdo(); - $this->cache = array(); - - if (!empty($_SESSION["uid"])) $this->cache(); + $this->cache = []; + $this->cache_prefs(); } private function __clone() { @@ -22,31 +21,30 @@ class Db_Prefs { return self::$instance; } - function cache() { - $user_id = $_SESSION["uid"]; - $profile = $_SESSION["profile"] ?? false; + private function cache_prefs() { + if (!empty($_SESSION["uid"])) { + $profile = $_SESSION["profile"] ?? false; - if (!is_numeric($profile) || !$profile || get_schema_version() < 63) $profile = null; + 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 = $this->pdo->prepare("SELECT up.pref_name, pt.type_name, up.value + FROM ttrss_user_prefs up + JOIN ttrss_prefs p ON (up.pref_name = p.pref_name) + JOIN ttrss_prefs_types pt ON (p.type_id = pt.id) + WHERE + up.pref_name NOT LIKE '_MOBILE%' AND + (profile = :profile OR (:profile IS NULL AND profile IS NULL)) AND + owner_uid = :uid"); - $sth->execute([":profile" => $profile, ":uid" => $user_id]); + $sth->execute([":profile" => $profile, ":uid" => $_SESSION["uid"]]); - while ($line = $sth->fetch()) { - if ($user_id == $_SESSION["uid"]) { - $pref_name = $line["pref_name"]; + while ($row = $sth->fetch(PDO::FETCH_ASSOC)) { + $pref_name = $row["pref_name"]; - $this->cache[$pref_name]["type"] = $line["type_name"]; - $this->cache[$pref_name]["value"] = $line["value"]; + $this->cache[$pref_name] = [ + "type" => $row["type_name"], + "value" => $row["value"] + ]; } } } @@ -67,35 +65,37 @@ class Db_Prefs { 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 + $sth = $this->pdo->prepare("SELECT up.pref_name, pt.type_name, up.value + FROM ttrss_user_prefs up + JOIN ttrss_prefs p ON (up.pref_name = p.pref_name) + JOIN ttrss_prefs_types pt ON (p.type_id = pt.id) WHERE + up.pref_name = :pref_name AND (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"); + owner_uid = :uid"); + $sth->execute([":uid" => $user_id, ":profile" => $profile, ":pref_name" => $pref_name]); - if ($row = $sth->fetch()) { + if ($row = $sth->fetch(PDO::FETCH_ASSOC)) { $value = $row["value"]; $type_name = $row["type_name"]; if ($user_id == ($_SESSION["uid"] ?? false)) { - $this->cache[$pref_name]["type"] = $type_name; - $this->cache[$pref_name]["value"] = $value; + $this->cache[$pref_name] = [ + "type" => $row["type_name"], + "value" => $row["value"] + ]; } return $this->convert($value, $type_name); } else if ($die_on_error) { - user_error("Fatal error, unknown preferences key: $pref_name (owner: $user_id)", E_USER_ERROR); - return null; + user_error("Failed retrieving preference $pref_name for user $user_id", E_USER_ERROR); } else { - return null; + user_error("Failed retrieving preference $pref_name for user $user_id", E_USER_WARNING); } + + return null; } function convert($value, $type_name) { |