db-prefs.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. <?php
  2. require_once "config.php";
  3. require_once "db.php";
  4. if (!defined('DISABLE_SESSIONS')) {
  5. if (!$_SESSION["prefs_cache"])
  6. $_SESSION["prefs_cache"] = array();
  7. }
  8. function get_pref($link, $pref_name, $user_id = false, $die_on_error = false) {
  9. $pref_name = db_escape_string($pref_name);
  10. $prefs_cache = true;
  11. $profile = false;
  12. if (!$user_id) {
  13. $user_id = $_SESSION["uid"];
  14. @$profile = $_SESSION["profile"];
  15. } else {
  16. $user_id = sprintf("%d", $user_id);
  17. //$prefs_cache = false;
  18. }
  19. if ($prefs_cache && !defined('DISABLE_SESSIONS')) {
  20. if ($_SESSION["prefs_cache"] && @$_SESSION["prefs_cache"][$pref_name]) {
  21. $tuple = $_SESSION["prefs_cache"][$pref_name];
  22. return convert_pref_type($tuple["value"], $tuple["type"]);
  23. }
  24. }
  25. if ($profile) {
  26. $profile_qpart = "profile = '$profile' AND";
  27. } else {
  28. $profile_qpart = "profile IS NULL AND";
  29. }
  30. if (get_schema_version($link) < 63) $profile_qpart = "";
  31. $result = db_query($link, "SELECT
  32. value,ttrss_prefs_types.type_name as type_name
  33. FROM
  34. ttrss_user_prefs,ttrss_prefs,ttrss_prefs_types
  35. WHERE
  36. $profile_qpart
  37. ttrss_user_prefs.pref_name = '$pref_name' AND
  38. ttrss_prefs_types.id = type_id AND
  39. owner_uid = '$user_id' AND
  40. ttrss_user_prefs.pref_name = ttrss_prefs.pref_name");
  41. if (db_num_rows($result) > 0) {
  42. $value = db_fetch_result($result, 0, "value");
  43. $type_name = db_fetch_result($result, 0, "type_name");
  44. if (!defined('DISABLE_SESSIONS')) {
  45. if ($user_id == $_SESSION["uid"]) {
  46. $_SESSION["prefs_cache"][$pref_name]["type"] = $type_name;
  47. $_SESSION["prefs_cache"][$pref_name]["value"] = $value;
  48. }
  49. }
  50. return convert_pref_type($value, $type_name);
  51. } else {
  52. if ($die_on_error) {
  53. die("Fatal error, unknown preferences key: $pref_name");
  54. } else {
  55. return null;
  56. }
  57. }
  58. }
  59. function convert_pref_type($value, $type_name) {
  60. if ($type_name == "bool") {
  61. return $value == "true";
  62. } else if ($type_name == "integer") {
  63. return sprintf("%d", $value);
  64. } else {
  65. return $value;
  66. }
  67. }
  68. function set_pref($link, $pref_name, $value, $user_id = false) {
  69. $pref_name = db_escape_string($pref_name);
  70. $value = db_escape_string($value);
  71. if (!$user_id) {
  72. $user_id = $_SESSION["uid"];
  73. @$profile = $_SESSION["profile"];
  74. } else {
  75. $user_id = sprintf("%d", $user_id);
  76. $prefs_cache = false;
  77. }
  78. if ($profile) {
  79. $profile_qpart = "AND profile = '$profile'";
  80. } else {
  81. $profile_qpart = "AND profile IS NULL";
  82. }
  83. if (get_schema_version($link) < 63) $profile_qpart = "";
  84. $type_name = "";
  85. $current_value = "";
  86. if (!defined('DISABLE_SESSIONS')) {
  87. if ($_SESSION["prefs_cache"] && @$_SESSION["prefs_cache"][$pref_name]) {
  88. $type_name = $_SESSION["prefs_cache"][$pref_name]["type"];
  89. $current_value = $_SESSION["prefs_cache"][$pref_name]["value"];
  90. }
  91. }
  92. if (!$type_name) {
  93. $result = db_query($link, "SELECT type_name
  94. FROM ttrss_prefs,ttrss_prefs_types
  95. WHERE pref_name = '$pref_name' AND type_id = ttrss_prefs_types.id");
  96. if (db_num_rows($result) > 0)
  97. $type_name = db_fetch_result($result, 0, "type_name");
  98. } else if ($current_value == $value) {
  99. return;
  100. }
  101. if ($type_name) {
  102. if ($type_name == "bool") {
  103. if ($value == "1" || $value == "true") {
  104. $value = "true";
  105. } else {
  106. $value = "false";
  107. }
  108. } else if ($type_name == "integer") {
  109. $value = sprintf("%d", $value);
  110. }
  111. if ($pref_name == 'DEFAULT_ARTICLE_LIMIT' && $value == 0) {
  112. $value = 30;
  113. }
  114. if ($pref_name == 'USER_TIMEZONE' && $value == '') {
  115. $value = 'UTC';
  116. }
  117. db_query($link, "UPDATE ttrss_user_prefs SET
  118. value = '$value' WHERE pref_name = '$pref_name'
  119. $profile_qpart
  120. AND owner_uid = " . $_SESSION["uid"]);
  121. if (!defined('DISABLE_SESSIONS')) {
  122. if ($user_id == $_SESSION["uid"]) {
  123. $_SESSION["prefs_cache"][$pref_name]["type"] = $type_name;
  124. $_SESSION["prefs_cache"][$pref_name]["value"] = $value;
  125. }
  126. }
  127. }
  128. }
  129. ?>