]>
git.wh0rd.org - tt-rss.git/blob - classes/ccache.php
4efb96d97141c04e7f3a47a2949091b781bc09f6
3 /* function ccache_zero($feed_id, $owner_uid) {
4 db_query("UPDATE ttrss_counters_cache SET
5 value = 0, updated = NOW() WHERE
6 feed_id = '$feed_id' AND owner_uid = '$owner_uid'");
9 static function zero_all($owner_uid) {
10 db_query("UPDATE ttrss_counters_cache SET
11 value = 0 WHERE owner_uid = '$owner_uid'");
13 db_query("UPDATE ttrss_cat_counters_cache SET
14 value = 0 WHERE owner_uid = '$owner_uid'");
17 static function remove($feed_id, $owner_uid, $is_cat = false) {
20 $table = "ttrss_counters_cache";
22 $table = "ttrss_cat_counters_cache";
25 db_query("DELETE FROM $table WHERE
26 feed_id = '$feed_id' AND owner_uid = '$owner_uid'");
30 static function update_all($owner_uid) {
32 if (get_pref('ENABLE_FEED_CATS', $owner_uid)) {
34 $result = db_query("SELECT feed_id FROM ttrss_cat_counters_cache
35 WHERE feed_id > 0 AND owner_uid = '$owner_uid'");
37 while ($line = db_fetch_assoc($result)) {
38 CCache
::update($line["feed_id"], $owner_uid, true);
41 /* We have to manually include category 0 */
43 CCache
::update(0, $owner_uid, true);
46 $result = db_query("SELECT feed_id FROM ttrss_counters_cache
47 WHERE feed_id > 0 AND owner_uid = '$owner_uid'");
49 while ($line = db_fetch_assoc($result)) {
50 print CCache
::update($line["feed_id"], $owner_uid);
57 static function find($feed_id, $owner_uid, $is_cat = false,
60 if (!is_numeric($feed_id)) return;
63 $table = "ttrss_counters_cache";
64 /* if ($feed_id > 0) {
65 $tmp_result = db_query("SELECT owner_uid FROM ttrss_feeds
66 WHERE id = '$feed_id'");
67 $owner_uid = db_fetch_result($tmp_result, 0, "owner_uid");
70 $table = "ttrss_cat_counters_cache";
73 if (DB_TYPE
== "pgsql") {
74 $date_qpart = "updated > NOW() - INTERVAL '15 minutes'";
75 } else if (DB_TYPE
== "mysql") {
76 $date_qpart = "updated > DATE_SUB(NOW(), INTERVAL 15 MINUTE)";
79 $result = db_query("SELECT value FROM $table
80 WHERE owner_uid = '$owner_uid' AND feed_id = '$feed_id'
83 if (db_num_rows($result) == 1) {
84 return db_fetch_result($result, 0, "value");
89 return CCache
::update($feed_id, $owner_uid, $is_cat);
95 static function update($feed_id, $owner_uid, $is_cat = false,
96 $update_pcat = true, $pcat_fast = false) {
98 if (!is_numeric($feed_id)) return;
100 /* if (!$is_cat && $feed_id > 0) {
101 $tmp_result = db_query("SELECT owner_uid FROM ttrss_feeds
102 WHERE id = '$feed_id'");
103 $owner_uid = db_fetch_result($tmp_result, 0, "owner_uid");
106 $prev_unread = CCache
::find($feed_id, $owner_uid, $is_cat, true);
108 /* When updating a label, all we need to do is recalculate feed counters
109 * because labels are not cached */
112 CCache
::update_all($owner_uid);
117 $table = "ttrss_counters_cache";
119 $table = "ttrss_cat_counters_cache";
122 if ($is_cat && $feed_id >= 0) {
124 $cat_qpart = "cat_id = '$feed_id'";
126 $cat_qpart = "cat_id IS NULL";
129 /* Recalculate counters for child feeds */
132 $result = db_query("SELECT id FROM ttrss_feeds
133 WHERE owner_uid = '$owner_uid' AND $cat_qpart");
135 while ($line = db_fetch_assoc($result)) {
136 CCache
::update($line["id"], $owner_uid, false, false);
140 $result = db_query("SELECT SUM(value) AS sv
141 FROM ttrss_counters_cache, ttrss_feeds
142 WHERE id = feed_id AND $cat_qpart AND
143 ttrss_counters_cache.owner_uid = $owner_uid AND
144 ttrss_feeds.owner_uid = '$owner_uid'");
146 $unread = (int) db_fetch_result($result, 0, "sv");
149 $unread = (int) Feeds
::getFeedArticles($feed_id, $is_cat, true, $owner_uid);
154 $result = db_query("SELECT feed_id FROM $table
155 WHERE owner_uid = '$owner_uid' AND feed_id = '$feed_id' LIMIT 1");
157 if (db_num_rows($result) == 1) {
158 db_query("UPDATE $table SET
159 value = '$unread', updated = NOW() WHERE
160 feed_id = '$feed_id' AND owner_uid = '$owner_uid'");
163 db_query("INSERT INTO $table
164 (feed_id, value, owner_uid, updated)
166 ($feed_id, $unread, $owner_uid, NOW())");
171 if ($feed_id > 0 && $prev_unread != $unread) {
175 /* Update parent category */
179 $result = db_query("SELECT cat_id FROM ttrss_feeds
180 WHERE owner_uid = '$owner_uid' AND id = '$feed_id'");
182 $cat_id = (int) db_fetch_result($result, 0, "cat_id");
184 CCache
::update($cat_id, $owner_uid, true, true, true);
188 } else if ($feed_id < 0) {
189 CCache
::update_all($owner_uid);
195 /* function ccache_cleanup($owner_uid) {
197 if (DB_TYPE == "pgsql") {
198 db_query("DELETE FROM ttrss_counters_cache AS c1 WHERE
199 (SELECT count(*) FROM ttrss_counters_cache AS c2
200 WHERE c1.feed_id = c2.feed_id AND c2.owner_uid = c1.owner_uid) > 1
201 AND owner_uid = '$owner_uid'");
203 db_query("DELETE FROM ttrss_cat_counters_cache AS c1 WHERE
204 (SELECT count(*) FROM ttrss_cat_counters_cache AS c2
205 WHERE c1.feed_id = c2.feed_id AND c2.owner_uid = c1.owner_uid) > 1
206 AND owner_uid = '$owner_uid'");
208 db_query("DELETE c1 FROM
209 ttrss_counters_cache AS c1,
210 ttrss_counters_cache AS c2
212 c1.owner_uid = '$owner_uid' AND
213 c1.owner_uid = c2.owner_uid AND
214 c1.feed_id = c2.feed_id");
216 db_query("DELETE c1 FROM
217 ttrss_cat_counters_cache AS c1,
218 ttrss_cat_counters_cache AS c2
220 c1.owner_uid = '$owner_uid' AND
221 c1.owner_uid = c2.owner_uid AND
222 c1.feed_id = c2.feed_id");