]>
git.wh0rd.org - tt-rss.git/blob - backend.php
2 // header("Content-Type: application/xml");
4 require_once "config.php";
5 require_once "functions.php";
6 require_once "magpierss/rss_fetch.inc";
9 $link = pg_connect(DB_CONN
);
11 pg_query("set client_encoding = 'utf-8'");
14 $fetch = $_GET["fetch"];
16 function outputFeedList($link) {
18 $result = pg_query($link, "SELECT *,
19 (SELECT count(id) FROM ttrss_entries
20 WHERE feed_id = ttrss_feeds.id) AS total,
21 (SELECT count(id) FROM ttrss_entries
22 WHERE feed_id = ttrss_feeds.id AND unread = true) as unread
23 FROM ttrss_feeds ORDER BY title");
25 print "<table width=\"100%\" class=\"feeds\">";
31 while ($line = pg_fetch_assoc($result)) {
33 $feed = $line["title"];
34 $feed_id = $line["id"];
36 $total = $line["total"];
37 $unread = $line["unread"];
39 $class = ($lnum %
2) ?
"even" : "odd";
41 if ($unread > 0) $class .= "Unread";
43 $total_unread +
= $unread;
45 print "<tr class=\"$class\" id=\"FEEDR-$feed_id\">";
47 $feed = "<a href=\"javascript:viewfeed($feed_id, 0);\">$feed</a>";
48 print "<td id=\"FEEDN-$feed_id\">$feed</td>";
50 print "<span id=\"FEEDU-$feed_id\">$unread</span> / ";
51 print "<span id=\"FEEDT-$feed_id\">$total</span>";
58 // print "<tr><td class=\"footer\" colspan=\"3\">
59 // <a href=\"javascript:update_feed_list(false,true)\">Update all feeds</a></td></tr>";
61 // print "<tr><td class=\"footer\" colspan=\"2\"> ";
62 // print "</td></tr>";
66 print "<p align=\"center\">All feeds:
68 href=\"javascript:scheduleFeedUpdate(true)\">Update</a>";
70 print " <a class=\"button\"
71 href=\"javascript:catchupAllFeeds()\">Mark as read</a></p>";
73 print "<div class=\"invisible\" id=\"FEEDTU\">$total_unread</div>";
82 $subop = $_GET["subop"];
84 if ($subop == "forceUpdateAllFeeds") {
85 update_all_feeds($link, true);
86 outputFeedList($link);
89 if ($subop == "updateAllFeeds") {
90 update_all_feeds($link, false);
91 outputFeedList($link);
94 if ($subop == "catchupPage") {
96 $ids = split(",", $_GET["ids"]);
98 foreach ($ids as $id) {
100 pg_query("UPDATE ttrss_entries SET unread=false,last_read = NOW()
105 print "Marked active page as read.";
110 if ($op == "feeds") {
112 $subop = $_GET["subop"];
114 if ($subop == "catchupAll") {
115 pg_query("UPDATE ttrss_entries SET last_read = NOW(),unread = false");
118 outputFeedList($link);
126 $result = pg_query("UPDATE ttrss_entries SET unread = false,last_read = NOW() WHERE id = '$id'");
128 $result = pg_query("SELECT title,link,content FROM ttrss_entries
133 $line = pg_fetch_assoc($result);
135 print "<table class=\"feedOverview\">";
136 print "<tr><td><b>Title:</b></td><td>".$line["title"]."</td></tr>";
137 print "<tr><td><b>Link:</b></td><td><a href=\"".$line["link"]."\">".$line["link"]."</a></td></tr>";
141 print $line["content"];
147 if ($op == "viewfeed") {
149 $feed = $_GET["feed"];
150 $skip = $_GET["skip"];
151 $subop = $_GET["subop"];
153 if (!$skip) $skip = 0;
155 if ($subop == "undefined") $subop = "";
157 // FIXME: check for null value here
159 $result = pg_query("SELECT *,SUBSTRING(last_updated,1,16) as last_updated,
160 EXTRACT(EPOCH FROM NOW()) - EXTRACT(EPOCH FROM last_updated) as update_timeout
161 FROM ttrss_feeds WHERE id = '$feed'");
165 $line = pg_fetch_assoc($result);
167 if ($subop == "ForceUpdate" ||
168 (!$subop && $line["update_timeout"] > MIN_UPDATE_TIME
)) {
170 update_rss_feed($link, $line["feed_url"], $feed);
174 if ($subop == "MarkAllRead") {
176 pg_query("UPDATE ttrss_entries SET unread = false,last_read = NOW()
177 WHERE feed_id = '$feed'");
182 print "<table class=\"headlinesList\" id=\"headlinesList\" width=\"100%\">";
184 $feed_last_updated = "Updated: " . $line["last_updated"];
186 print "<tr><td class=\"search\" colspan=\"3\">
187 Search: <input onchange=\"javascript:search($feed,this);\"></td></tr>";
189 <td colspan=\"3\" class=\"title\">" . $line["title"] . "</td></tr>";
191 if ($ext == "SEARCH") {
192 $search = $_GET["search"];
193 $search_query_part = "(upper(title) LIKE upper('%$search%')
194 OR content LIKE '%$search%') AND";
197 $result = pg_query("SELECT count(id) AS total_entries
198 FROM ttrss_entries WHERE feed_id = '$feed'");
200 $total_entries = pg_fetch_result($result, 0, "total_entries");
202 $result = pg_query("SELECT
203 id,title,updated,unread,feed_id,
204 EXTRACT(EPOCH FROM last_read) AS last_read_ts,
205 EXTRACT(EPOCH FROM updated) AS updated_ts
210 feed_id = '$feed' ORDER BY updated DESC LIMIT ".HEADLINES_PER_PAGE
." OFFSET $skip");
214 while ($line = pg_fetch_assoc($result)) {
216 $class = ($lnum %
2) ?
"even" : "odd";
218 if ($line["last_read_ts"] < $line["updated_ts"] && $line["unread"] == "f") {
219 $update_pic = "<img src=\"updated.png\" alt=\"Updated\">";
221 $update_pic = " ";
224 if ($line["unread"] == "t")
228 $feed_id = $line["feed_id"];
230 $content_link = "<a href=\"javascript:view($id,$feed_id);\">" .
231 $line["title"] . "</a>";
233 print "<tr class='$class' id='RROW-$id'>";
235 print "<td id='FUPDPIC-$id' valign='center' class='headlineUpdateMark'>$update_pic</td>";
237 print "<td class='headlineUpdated'>".$line["updated"]."</td>";
238 print "<td class='headlineTitle'>$content_link</td>";
246 print "<tr><td align='center'>No entries found.</td></tr>";
250 print "<tr><td colspan=\"3\" class=\"headlineToolbar\">";
252 $next_skip = $skip + HEADLINES_PER_PAGE
;
253 $prev_skip = $skip - HEADLINES_PER_PAGE
;
257 if ($prev_skip >= 0) {
258 print "<a class=\"button\"
259 href=\"javascript:viewfeed($feed, $prev_skip);\">Previous Page</a>";
261 print "<a class=\"disabledButton\">Previous Page</a>";
265 // start unholy navbar block
268 if ($next_skip < $total_entries) {
269 print "<a class=\"button\"
270 href=\"javascript:viewfeed($feed, $next_skip);\">Next Page</a>";
272 print "<a class=\"disabledButton\">Next Page</a>";
274 print " Feed: ";
276 print "<a class=\"button\"
277 href=\"javascript:viewfeed($feed, 0, 'ForceUpdate');\">Update</a>";
279 print " Mark as read: ";
281 print "<a class=\"button\"
282 href=\"javascript:catchupPage($feed);\">This Page</a>";
284 print "<a class=\"button\"
285 href=\"javascript:viewfeed($feed, $skip, 'MarkAllRead');\">All Posts</a>";
289 // end unholy navbar block
293 $result = pg_query("SELECT id, (SELECT count(id) FROM ttrss_entries
294 WHERE feed_id = ttrss_feeds.id) AS total,
295 (SELECT count(id) FROM ttrss_entries
296 WHERE feed_id = ttrss_feeds.id AND unread = true) as unread
297 FROM ttrss_feeds WHERE id = '$feed'");
299 $total = pg_fetch_result($result, 0, "total");
300 $unread = pg_fetch_result($result, 0, "unread");
302 print "<div class=\"invisible\" id=\"FACTIVE\">$feed</div>";
303 print "<div class=\"invisible\" id=\"FTOTAL\">$total</div>";
304 print "<div class=\"invisible\" id=\"FUNREAD\">$unread</div>";
308 if ($op == "pref-rpc") {
310 $subop = $_GET["subop"];
312 if ($subop == "unread") {
313 $ids = split(",", $_GET["ids"]);
314 foreach ($ids as $id) {
315 pg_query("UPDATE ttrss_entries SET unread = true WHERE feed_id = '$id'");
318 print "Marked selected feeds as read.";
321 if ($subop == "read") {
322 $ids = split(",", $_GET["ids"]);
323 foreach ($ids as $id) {
324 pg_query("UPDATE ttrss_entries
325 SET unread = false,last_read = NOW() WHERE feed_id = '$id'");
328 print "Marked selected feeds as unread.";
334 if ($op == "pref-feeds") {
336 $subop = $_GET["subop"];
338 if ($subop == "edit") {
339 print "<p>[Edit feed placeholder]</p>";
342 if ($subop == "remove") {
343 $ids = split(",", $_GET["ids"]);
345 foreach ($ids as $id) {
347 pg_query("DELETE FROM ttrss_entries WHERE feed_id = '$id'");
348 pg_query("DELETE FROM ttrss_feeds WHERE id = '$id'");
354 if ($subop == "add") {
355 $feed_link = pg_escape_string($_GET["link"]);
358 "INSERT INTO ttrss_feeds (feed_url,title) VALUES ('$feed_link', '')");
360 $result = pg_query("SELECT id FROM ttrss_feeds WHERE feed_url = '$feed_link'");
362 $feed_id = pg_fetch_result($result, 0, "id");
365 update_rss_feed($link, $feed_link, $feed_id);
370 $result = pg_query("SELECT * FROM ttrss_feeds ORDER by title");
372 print "<p><table width=\"100%\" class=\"prefFeedList\" id=\"prefFeedList\">";
373 print "<tr class=\"title\">
374 <td>Select</td><td>Title</td><td>Link</td><td>Last Updated</td></tr>";
378 while ($line = pg_fetch_assoc($result)) {
380 $class = ($lnum %
2) ?
"even" : "odd";
382 $feed_id = $line["id"];
384 print "<tr class=\"$class\" id=\"FEEDR-$feed_id\">";
386 print "<td><input onclick='toggleSelectRow(this);'
387 type=\"checkbox\" id=\"FRCHK-".$line["id"]."\"></td>";
388 print "<td><a href=\"javascript:editFeed($feed_id);\">" .
389 $line["title"] . "</td>";
390 print "<td><a href=\"javascript:editFeed($feed_id);\">" .
391 $line["feed_url"] . "</td>";
393 print "<td>" . $line["last_updated"] . "</td>";