ccache.php 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. <?php
  2. /* function ccache_zero($feed_id, $owner_uid) {
  3. db_query("UPDATE ttrss_counters_cache SET
  4. value = 0, updated = NOW() WHERE
  5. feed_id = '$feed_id' AND owner_uid = '$owner_uid'");
  6. } */
  7. function ccache_zero_all($owner_uid) {
  8. db_query("UPDATE ttrss_counters_cache SET
  9. value = 0 WHERE owner_uid = '$owner_uid'");
  10. db_query("UPDATE ttrss_cat_counters_cache SET
  11. value = 0 WHERE owner_uid = '$owner_uid'");
  12. }
  13. function ccache_remove($feed_id, $owner_uid, $is_cat = false) {
  14. if (!$is_cat) {
  15. $table = "ttrss_counters_cache";
  16. } else {
  17. $table = "ttrss_cat_counters_cache";
  18. }
  19. db_query("DELETE FROM $table WHERE
  20. feed_id = '$feed_id' AND owner_uid = '$owner_uid'");
  21. }
  22. function ccache_update_all($owner_uid) {
  23. if (get_pref('ENABLE_FEED_CATS', $owner_uid)) {
  24. $result = db_query("SELECT feed_id FROM ttrss_cat_counters_cache
  25. WHERE feed_id > 0 AND owner_uid = '$owner_uid'");
  26. while ($line = db_fetch_assoc($result)) {
  27. ccache_update($line["feed_id"], $owner_uid, true);
  28. }
  29. /* We have to manually include category 0 */
  30. ccache_update(0, $owner_uid, true);
  31. } else {
  32. $result = db_query("SELECT feed_id FROM ttrss_counters_cache
  33. WHERE feed_id > 0 AND owner_uid = '$owner_uid'");
  34. while ($line = db_fetch_assoc($result)) {
  35. print ccache_update($line["feed_id"], $owner_uid);
  36. }
  37. }
  38. }
  39. function ccache_find($feed_id, $owner_uid, $is_cat = false,
  40. $no_update = false) {
  41. if (!is_numeric($feed_id)) return;
  42. if (!$is_cat) {
  43. $table = "ttrss_counters_cache";
  44. /* if ($feed_id > 0) {
  45. $tmp_result = db_query("SELECT owner_uid FROM ttrss_feeds
  46. WHERE id = '$feed_id'");
  47. $owner_uid = db_fetch_result($tmp_result, 0, "owner_uid");
  48. } */
  49. } else {
  50. $table = "ttrss_cat_counters_cache";
  51. }
  52. if (DB_TYPE == "pgsql") {
  53. $date_qpart = "updated > NOW() - INTERVAL '15 minutes'";
  54. } else if (DB_TYPE == "mysql") {
  55. $date_qpart = "updated > DATE_SUB(NOW(), INTERVAL 15 MINUTE)";
  56. }
  57. $result = db_query("SELECT value FROM $table
  58. WHERE owner_uid = '$owner_uid' AND feed_id = '$feed_id'
  59. LIMIT 1");
  60. if (db_num_rows($result) == 1) {
  61. return db_fetch_result($result, 0, "value");
  62. } else {
  63. if ($no_update) {
  64. return -1;
  65. } else {
  66. return ccache_update($feed_id, $owner_uid, $is_cat);
  67. }
  68. }
  69. }
  70. function ccache_update($feed_id, $owner_uid, $is_cat = false,
  71. $update_pcat = true) {
  72. if (!is_numeric($feed_id)) return;
  73. /* if (!$is_cat && $feed_id > 0) {
  74. $tmp_result = db_query("SELECT owner_uid FROM ttrss_feeds
  75. WHERE id = '$feed_id'");
  76. $owner_uid = db_fetch_result($tmp_result, 0, "owner_uid");
  77. } */
  78. $prev_unread = ccache_find($feed_id, $owner_uid, $is_cat, true);
  79. /* When updating a label, all we need to do is recalculate feed counters
  80. * because labels are not cached */
  81. if ($feed_id < 0) {
  82. ccache_update_all($owner_uid);
  83. return;
  84. }
  85. if (!$is_cat) {
  86. $table = "ttrss_counters_cache";
  87. } else {
  88. $table = "ttrss_cat_counters_cache";
  89. }
  90. if ($is_cat && $feed_id >= 0) {
  91. if ($feed_id != 0) {
  92. $cat_qpart = "cat_id = '$feed_id'";
  93. } else {
  94. $cat_qpart = "cat_id IS NULL";
  95. }
  96. /* Recalculate counters for child feeds */
  97. $result = db_query("SELECT id FROM ttrss_feeds
  98. WHERE owner_uid = '$owner_uid' AND $cat_qpart");
  99. while ($line = db_fetch_assoc($result)) {
  100. ccache_update($line["id"], $owner_uid, false, false);
  101. }
  102. $result = db_query("SELECT SUM(value) AS sv
  103. FROM ttrss_counters_cache, ttrss_feeds
  104. WHERE id = feed_id AND $cat_qpart AND
  105. ttrss_feeds.owner_uid = '$owner_uid'");
  106. $unread = (int) db_fetch_result($result, 0, "sv");
  107. } else {
  108. $unread = (int) getFeedArticles($feed_id, $is_cat, true, $owner_uid);
  109. }
  110. db_query("BEGIN");
  111. $result = db_query("SELECT feed_id FROM $table
  112. WHERE owner_uid = '$owner_uid' AND feed_id = '$feed_id' LIMIT 1");
  113. if (db_num_rows($result) == 1) {
  114. db_query("UPDATE $table SET
  115. value = '$unread', updated = NOW() WHERE
  116. feed_id = '$feed_id' AND owner_uid = '$owner_uid'");
  117. } else {
  118. db_query("INSERT INTO $table
  119. (feed_id, value, owner_uid, updated)
  120. VALUES
  121. ($feed_id, $unread, $owner_uid, NOW())");
  122. }
  123. db_query("COMMIT");
  124. if ($feed_id > 0 && $prev_unread != $unread) {
  125. if (!$is_cat) {
  126. /* Update parent category */
  127. if ($update_pcat) {
  128. $result = db_query("SELECT cat_id FROM ttrss_feeds
  129. WHERE owner_uid = '$owner_uid' AND id = '$feed_id'");
  130. $cat_id = (int) db_fetch_result($result, 0, "cat_id");
  131. ccache_update($cat_id, $owner_uid, true);
  132. }
  133. }
  134. } else if ($feed_id < 0) {
  135. ccache_update_all($owner_uid);
  136. }
  137. return $unread;
  138. }
  139. /* function ccache_cleanup($owner_uid) {
  140. if (DB_TYPE == "pgsql") {
  141. db_query("DELETE FROM ttrss_counters_cache AS c1 WHERE
  142. (SELECT count(*) FROM ttrss_counters_cache AS c2
  143. WHERE c1.feed_id = c2.feed_id AND c2.owner_uid = c1.owner_uid) > 1
  144. AND owner_uid = '$owner_uid'");
  145. db_query("DELETE FROM ttrss_cat_counters_cache AS c1 WHERE
  146. (SELECT count(*) FROM ttrss_cat_counters_cache AS c2
  147. WHERE c1.feed_id = c2.feed_id AND c2.owner_uid = c1.owner_uid) > 1
  148. AND owner_uid = '$owner_uid'");
  149. } else {
  150. db_query("DELETE c1 FROM
  151. ttrss_counters_cache AS c1,
  152. ttrss_counters_cache AS c2
  153. WHERE
  154. c1.owner_uid = '$owner_uid' AND
  155. c1.owner_uid = c2.owner_uid AND
  156. c1.feed_id = c2.feed_id");
  157. db_query("DELETE c1 FROM
  158. ttrss_cat_counters_cache AS c1,
  159. ttrss_cat_counters_cache AS c2
  160. WHERE
  161. c1.owner_uid = '$owner_uid' AND
  162. c1.owner_uid = c2.owner_uid AND
  163. c1.feed_id = c2.feed_id");
  164. }
  165. } */
  166. ?>