]> git.wh0rd.org - tt-rss.git/blob - classes/ccache.php
4efb96d97141c04e7f3a47a2949091b781bc09f6
[tt-rss.git] / classes / ccache.php
1 <?php
2 class CCache {
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'");
7 } */
8
9 static function zero_all($owner_uid) {
10 db_query("UPDATE ttrss_counters_cache SET
11 value = 0 WHERE owner_uid = '$owner_uid'");
12
13 db_query("UPDATE ttrss_cat_counters_cache SET
14 value = 0 WHERE owner_uid = '$owner_uid'");
15 }
16
17 static function remove($feed_id, $owner_uid, $is_cat = false) {
18
19 if (!$is_cat) {
20 $table = "ttrss_counters_cache";
21 } else {
22 $table = "ttrss_cat_counters_cache";
23 }
24
25 db_query("DELETE FROM $table WHERE
26 feed_id = '$feed_id' AND owner_uid = '$owner_uid'");
27
28 }
29
30 static function update_all($owner_uid) {
31
32 if (get_pref('ENABLE_FEED_CATS', $owner_uid)) {
33
34 $result = db_query("SELECT feed_id FROM ttrss_cat_counters_cache
35 WHERE feed_id > 0 AND owner_uid = '$owner_uid'");
36
37 while ($line = db_fetch_assoc($result)) {
38 CCache::update($line["feed_id"], $owner_uid, true);
39 }
40
41 /* We have to manually include category 0 */
42
43 CCache::update(0, $owner_uid, true);
44
45 } else {
46 $result = db_query("SELECT feed_id FROM ttrss_counters_cache
47 WHERE feed_id > 0 AND owner_uid = '$owner_uid'");
48
49 while ($line = db_fetch_assoc($result)) {
50 print CCache::update($line["feed_id"], $owner_uid);
51
52 }
53
54 }
55 }
56
57 static function find($feed_id, $owner_uid, $is_cat = false,
58 $no_update = false) {
59
60 if (!is_numeric($feed_id)) return;
61
62 if (!$is_cat) {
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");
68 } */
69 } else {
70 $table = "ttrss_cat_counters_cache";
71 }
72
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)";
77 }
78
79 $result = db_query("SELECT value FROM $table
80 WHERE owner_uid = '$owner_uid' AND feed_id = '$feed_id'
81 LIMIT 1");
82
83 if (db_num_rows($result) == 1) {
84 return db_fetch_result($result, 0, "value");
85 } else {
86 if ($no_update) {
87 return -1;
88 } else {
89 return CCache::update($feed_id, $owner_uid, $is_cat);
90 }
91 }
92
93 }
94
95 static function update($feed_id, $owner_uid, $is_cat = false,
96 $update_pcat = true, $pcat_fast = false) {
97
98 if (!is_numeric($feed_id)) return;
99
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");
104 } */
105
106 $prev_unread = CCache::find($feed_id, $owner_uid, $is_cat, true);
107
108 /* When updating a label, all we need to do is recalculate feed counters
109 * because labels are not cached */
110
111 if ($feed_id < 0) {
112 CCache::update_all($owner_uid);
113 return;
114 }
115
116 if (!$is_cat) {
117 $table = "ttrss_counters_cache";
118 } else {
119 $table = "ttrss_cat_counters_cache";
120 }
121
122 if ($is_cat && $feed_id >= 0) {
123 if ($feed_id != 0) {
124 $cat_qpart = "cat_id = '$feed_id'";
125 } else {
126 $cat_qpart = "cat_id IS NULL";
127 }
128
129 /* Recalculate counters for child feeds */
130
131 if (!$pcat_fast) {
132 $result = db_query("SELECT id FROM ttrss_feeds
133 WHERE owner_uid = '$owner_uid' AND $cat_qpart");
134
135 while ($line = db_fetch_assoc($result)) {
136 CCache::update($line["id"], $owner_uid, false, false);
137 }
138 }
139
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'");
145
146 $unread = (int) db_fetch_result($result, 0, "sv");
147
148 } else {
149 $unread = (int) Feeds::getFeedArticles($feed_id, $is_cat, true, $owner_uid);
150 }
151
152 db_query("BEGIN");
153
154 $result = db_query("SELECT feed_id FROM $table
155 WHERE owner_uid = '$owner_uid' AND feed_id = '$feed_id' LIMIT 1");
156
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'");
161
162 } else {
163 db_query("INSERT INTO $table
164 (feed_id, value, owner_uid, updated)
165 VALUES
166 ($feed_id, $unread, $owner_uid, NOW())");
167 }
168
169 db_query("COMMIT");
170
171 if ($feed_id > 0 && $prev_unread != $unread) {
172
173 if (!$is_cat) {
174
175 /* Update parent category */
176
177 if ($update_pcat) {
178
179 $result = db_query("SELECT cat_id FROM ttrss_feeds
180 WHERE owner_uid = '$owner_uid' AND id = '$feed_id'");
181
182 $cat_id = (int) db_fetch_result($result, 0, "cat_id");
183
184 CCache::update($cat_id, $owner_uid, true, true, true);
185
186 }
187 }
188 } else if ($feed_id < 0) {
189 CCache::update_all($owner_uid);
190 }
191
192 return $unread;
193 }
194
195 /* function ccache_cleanup($owner_uid) {
196
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'");
202
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'");
207 } else {
208 db_query("DELETE c1 FROM
209 ttrss_counters_cache AS c1,
210 ttrss_counters_cache AS c2
211 WHERE
212 c1.owner_uid = '$owner_uid' AND
213 c1.owner_uid = c2.owner_uid AND
214 c1.feed_id = c2.feed_id");
215
216 db_query("DELETE c1 FROM
217 ttrss_cat_counters_cache AS c1,
218 ttrss_cat_counters_cache AS c2
219 WHERE
220 c1.owner_uid = '$owner_uid' AND
221 c1.owner_uid = c2.owner_uid AND
222 c1.feed_id = c2.feed_id");
223
224 }
225 } */
226
227
228 }