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