<?
session_start();
- if (!$_SESSION["uid"]) { exit; }
+ $op = $_REQUEST["op"];
+
+ if (($op == "rpc" || $op == "updateAllFeeds" ||
+ $op == "forceUpdateAllFeeds") && !$_REQUEST["noxml"]) {
+ header("Content-Type: application/xml");
+ }
+
+ if (!$_SESSION["uid"]) {
+
+ if (($op == "rpc" || $op == "updateAllFeeds" ||
+ $op == "forceUpdateAllFeeds")) {
+ print "<error error-code=\"6\"/>";
+ }
+ exit;
+ }
define(SCHEMA_VERSION, 2);
require_once "functions.php";
require_once "magpierss/rss_fetch.inc";
- $op = $_REQUEST["op"];
-
- if ($op == "rpc" || $op == "updateAllFeeds") {
- header("Content-Type: application/xml");
- }
-
$script_started = getmicrotime();
$link = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);
/* FIXME this needs reworking */
function getGlobalCounters($link) {
- $result = db_query($link, "SELECT count(id) as c_id FROM ttrss_entries
- WHERE unread = true AND owner_uid = " . $_SESSION["uid"]);
+ $result = db_query($link, "SELECT count(id) as c_id FROM ttrss_entries,ttrss_user_entries
+ WHERE unread = true AND
+ ttrss_user_entries.ref_id = ttrss_entries.id AND
+ owner_uid = " . $_SESSION["uid"]);
$c_id = db_fetch_result($result, 0, "c_id");
print "<counter id='global-unread' counter='$c_id'/>";
}
function getTagCounters($link) {
+
$result = db_query($link, "SELECT tag_name,count(ttrss_entries.id) AS count
- FROM ttrss_tags,ttrss_entries WHERE
+ FROM ttrss_tags,ttrss_entries,ttrss_user_entries WHERE
+ ttrss_user_entries.ref_id = ttrss_entries.id AND
ttrss_tags.owner_uid = ".$_SESSION["uid"]." AND
- post_id = ttrss_entries.id AND unread = true GROUP BY tag_name
+ post_int_id = ttrss_user_entries.int_id AND unread = true GROUP BY tag_name
UNION
select tag_name,0 as count FROM ttrss_tags
WHERE ttrss_tags.owner_uid = ".$_SESSION["uid"]);
function getLabelCounters($link) {
- $result = db_query($link, "SELECT count(id) as count FROM ttrss_entries
- WHERE marked = true AND unread = true AND owner_uid = ".$_SESSION["uid"]);
+ $result = db_query($link, "SELECT count(id) as count FROM ttrss_entries,ttrss_user_entries
+ WHERE marked = true AND ttrss_user_entries.ref_id = ttrss_entries.id AND
+ unread = true AND owner_uid = ".$_SESSION["uid"]);
$count = db_fetch_result($result, 0, "count");
error_reporting (0);
- $tmp_result = db_query($link, "SELECT count(id) as count FROM ttrss_entries
+ $tmp_result = db_query($link, "SELECT count(id) as count FROM ttrss_user_entries,ttrss_entries
WHERE (" . $line["sql_exp"] . ") AND unread = true AND
+ ttrss_user_entries.ref_id = ttrss_entries.id AND
owner_uid = ".$_SESSION["uid"]);
$count = db_fetch_result($tmp_result, 0, "count");
function getFeedCounter($link, $id) {
$result = db_query($link, "SELECT
- count(id) as count FROM ttrss_entries
- WHERE feed_id = '$id' AND unread = true");
+ count(id) as count FROM ttrss_entries,ttrss_user_entries
+ WHERE feed_id = '$id' AND unread = true
+ AND ttrss_user_entries.ref_id = ttrss_entries.id");
$count = db_fetch_result($result, 0, "count");
function getFeedCounters($link) {
$result = db_query($link, "SELECT id,
- (SELECT count(id) FROM ttrss_entries WHERE feed_id = ttrss_feeds.id
+ (SELECT count(id)
+ FROM ttrss_entries,ttrss_user_entries
+ WHERE feed_id = ttrss_feeds.id AND ttrss_user_entries.ref_id = ttrss_entries.id
AND unread = true AND owner_uid = ".$_SESSION["uid"].") as count
FROM ttrss_feeds WHERE owner_uid = ".$_SESSION["uid"]);
/* virtual feeds */
$result = db_query($link, "SELECT count(id) as num_starred
- FROM ttrss_entries WHERE marked = true AND unread = true AND owner_uid = '$owner_uid'");
+ FROM ttrss_entries,ttrss_user_entries
+ WHERE marked = true AND
+ ttrss_user_entries.ref_id = ttrss_entries.id AND
+ unread = true AND owner_uid = '$owner_uid'");
$num_starred = db_fetch_result($result, 0, "num_starred");
$class = "virt";
error_reporting (0);
- $tmp_result = db_query($link, "SELECT count(id) as count FROM ttrss_entries
- WHERE (" . $line["sql_exp"] . ") AND unread = true
+ $tmp_result = db_query($link, "SELECT count(id) as count FROM ttrss_entries,ttrss_user_entries
+ WHERE (" . $line["sql_exp"] . ") AND unread = true AND
+ ttrss_user_entries.ref_id = ttrss_entries.id
AND owner_uid = '$owner_uid'");
$count = db_fetch_result($tmp_result, 0, "count");
print "<li><hr></li>";
$result = db_query($link, "SELECT *,
- (SELECT count(id) FROM ttrss_entries
- WHERE feed_id = ttrss_feeds.id AND owner_uid = '$owner_uid') AS total,
- (SELECT count(id) FROM ttrss_entries
+ (SELECT count(id) FROM ttrss_entries,ttrss_user_entries
+ WHERE feed_id = ttrss_feeds.id AND
+ ttrss_user_entries.ref_id = ttrss_entries.id AND
+ owner_uid = '$owner_uid') AS total,
+ (SELECT count(id) FROM ttrss_entries,ttrss_user_entries
WHERE feed_id = ttrss_feeds.id AND unread = true
+ AND ttrss_user_entries.ref_id = ttrss_entries.id
AND owner_uid = '$owner_uid') as unread
FROM ttrss_feeds WHERE owner_uid = '$owner_uid' ORDER BY title");
// tags
$result = db_query($link, "SELECT tag_name,count(ttrss_entries.id) AS count
- FROM ttrss_tags,ttrss_entries WHERE
- post_id = ttrss_entries.id AND unread = true
+ FROM ttrss_tags,ttrss_entries,ttrss_user_entries WHERE
+ post_int_id = ttrss_user_entries.int_id AND
+ unread = true AND ref_id = ttrss_entries.id
AND ttrss_tags.owner_uid = '$owner_uid' GROUP BY tag_name
UNION
select tag_name,0 as count FROM ttrss_tags WHERE owner_uid = '$owner_uid'
$mark = "false";
}
- $result = db_query($link, "UPDATE ttrss_entries SET marked = $mark
- WHERE id = '$id'");
+ // FIXME this needs collision testing
+
+ $result = db_query($link, "UPDATE ttrss_user_entries SET marked = $mark
+ WHERE ref_id = '$id' AND owner_uid = " . $_SESSION["uid"]);
}
if ($subop == "updateFeed") {
$feed_id = db_escape_string($_GET["feed"]);
$result = db_query($link,
- "SELECT feed_url FROM ttrss_feeds WHERE id = '$feed_id'");
+ "SELECT feed_url FROM ttrss_feeds WHERE id = '$feed_id'
+ AND owner_uid = " . $_SESSION["uid"]);
if (db_num_rows($result) > 0) {
$feed_url = db_fetch_result($result, 0, "feed_url");
-// update_rss_feed($link, $feed_url, $feed_id);
+ update_rss_feed($link, $feed_url, $feed_id);
}
- print "DONE-$feed_id";
-
+ print "<rpc-reply>";
+ getFeedCounter($link, $feed_id);
+ print "</rpc-reply>";
+
return;
}
if ($subop == "forceUpdateAllFeeds" || $subop == "updateAllFeeds") {
- update_all_feeds($link, true);
+ update_all_feeds($link, $subop == "forceUpdateAllFeeds");
$omode = $_GET["omode"];
print "</rpc-reply>";
}
- if ($subop == "catchupPage") {
+ if ($subop == "catchupSelected") {
$ids = split(",", $_GET["ids"]);
foreach ($ids as $id) {
- db_query($link, "UPDATE ttrss_entries SET unread=false,last_read = NOW()
- WHERE id = '$id'");
+ db_query($link, "UPDATE ttrss_user_entries SET unread=false,last_read = NOW()
+ WHERE id = '$id' AND owner_uid = " . $_SESSION["uid"]);
}
$error_code = 5;
}
- print "<error code='$error_code'/>";
+ print "<error error-code='$error_code'/>";
}
if ($subop == "globalPurge") {
$subop = $_GET["subop"];
if ($subop == "catchupAll") {
- db_query($link, "UPDATE ttrss_entries SET
+ db_query($link, "UPDATE ttrss_user_entries SET
last_read = NOW(),unread = false WHERE owner_uid = " . $_SESSION["uid"]);
}
$id = $_GET["id"];
$feed_id = $_GET["feed"];
- $result = db_query($link, "UPDATE ttrss_entries SET unread = false,last_read = NOW() WHERE id = '$id'");
+ $result = db_query($link, "UPDATE ttrss_user_entries
+ SET unread = false,last_read = NOW()
+ WHERE ref_id = '$id' AND feed_id = '$feed_id' AND owner_uid = " . $_SESSION["uid"]);
$addheader = $_GET["addheader"];
$result = db_query($link, "SELECT title,link,content,feed_id,comments,
(SELECT icon_url FROM ttrss_feeds WHERE id = feed_id) as icon_url
- FROM ttrss_entries
- WHERE id = '$id'");
+ FROM ttrss_entries,ttrss_user_entries
+ WHERE id = '$id' AND ref_id = id");
if ($addheader) {
print "<html><head>
if (sprintf("%d", $feed) != 0) {
if ($feed > 0) {
- db_query($link, "UPDATE ttrss_entries
+ db_query($link, "UPDATE ttrss_user_entries
SET unread = false,last_read = NOW()
- WHERE feed_id = '$feed'");
+ WHERE feed_id = '$feed' AND owner_uid = " . $_SESSION["uid"]);
} else if ($feed < 0 && $feed > -10) { // special, like starred
if ($feed == -1) {
- db_query($link, "UPDATE ttrss_entries
+ db_query($link, "UPDATE ttrss_user_entries
SET unread = false,last_read = NOW()
- WHERE marked = true");
+ WHERE marked = true AND owner_uid = ".$_SESSION["uid"]);
}
} else if ($feed < -10) { // label
+ // TODO make this more efficient
+
$label_id = -$feed - 11;
$tmp_result = db_query($link, "SELECT sql_exp FROM ttrss_labels
- WHERE id = '$label_id'");
+ WHERE id = '$label_id'");
if ($tmp_result) {
$sql_exp = db_fetch_result($tmp_result, 0, "sql_exp");
- db_query($link, "UPDATE ttrss_entries
+ db_query($link, "BEGIN");
+
+ $tmp2_result = db_query($link,
+ "SELECT
+ int_id
+ FROM
+ ttrss_user_entries,ttrss_entries
+ WHERE
+ ref_id = id AND
+ $sql_exp AND
+ owner_uid = " . $_SESSION["uid"]);
+
+ while ($tmp_line = db_fetch_assoc($tmp2_result)) {
+ db_query($link, "UPDATE
+ ttrss_user_entries
+ SET
+ unread = false, last_read = NOW()
+ WHERE
+ int_id = " . $tmp_line["int_id"]);
+ }
+
+ db_query($link, "COMMIT");
+
+/* db_query($link, "UPDATE ttrss_user_entries,ttrss_entries
SET unread = false,last_read = NOW()
- WHERE $sql_exp");
+ WHERE $sql_exp
+ AND ref_id = id
+ AND owner_uid = ".$_SESSION["uid"]); */
}
}
} else { // tag
$vfeed_query_part = "";
// override query strategy and enable feed display when searching globally
- if ($search_mode == "All feeds") {
+ if ($search && $search_mode == "All feeds") {
$query_strategy_part = "id > 0";
$vfeed_query_part = "(SELECT title FROM ttrss_feeds WHERE
id = feed_id) as feed_title,";
$vfeed_query_part
SUBSTRING(updated,1,19) as updated_noms
FROM
- ttrss_entries
+ ttrss_entries,ttrss_user_entries
WHERE
+ ttrss_user_entries.ref_id = ttrss_entries.id AND
owner_uid = '".$_SESSION["uid"]."' AND
$search_query_part
$view_query_part
$vfeed_query_part
SUBSTRING(updated,1,19) as updated_noms
FROM
- ttrss_entries,ttrss_tags
+ ttrss_entries,ttrss_user_entries,ttrss_tags
WHERE
- ttrss_entries.owner_uid = '".$_SESSION["uid"]."' AND
- post_id = ttrss_entries.id AND tag_name = '$feed' AND
+ ref_id = ttrss_entries.id AND
+ ttrss_user_entries.owner_uid = '".$_SESSION["uid"]."' AND
+ post_int_id = int_id AND tag_name = '$feed' AND
$view_query_part
$search_query_part
$query_strategy_part ORDER BY $order_by
if ($subop == "unread") {
$ids = split(",", $_GET["ids"]);
foreach ($ids as $id) {
- db_query($link, "UPDATE ttrss_entries SET unread = true WHERE feed_id = '$id'");
+ db_query($link, "UPDATE ttrss_user_entries SET unread = true
+ WHERE feed_id = '$id' AND owner_uid = ".$_SESSION["uid"]);
}
- print "Marked selected feeds as read.";
+ print "Marked selected feeds as unread.";
}
if ($subop == "read") {
$ids = split(",", $_GET["ids"]);
foreach ($ids as $id) {
- db_query($link, "UPDATE ttrss_entries
- SET unread = false,last_read = NOW() WHERE feed_id = '$id'");
+ db_query($link, "UPDATE ttrss_user_entries
+ SET unread = false,last_read = NOW() WHERE
+ feed_id = '$id' AND owner_uid = ".$_SESSION["uid"]);
}
- print "Marked selected feeds as unread.";
+ print "Marked selected feeds as read.";
}
title = '$feed_title', feed_url = '$feed_link',
update_interval = '$upd_intl',
purge_interval = '$purge_intl'
- WHERE id = '$feed_id'");
+ WHERE id = '$feed_id' AND owner_uid = " . $_SESSION["uid"]);
}
$ids = split(",", $_GET["ids"]);
foreach ($ids as $id) {
- db_query($link, "DELETE FROM ttrss_feeds WHERE id = '$id'");
+ db_query($link, "DELETE FROM ttrss_feeds
+ WHERE id = '$id' AND owner_uid = " . $_SESSION["uid"]);
$icons_dir = ICONS_DIR;
if (!WEB_DEMO_MODE) {
$feed_link = db_escape_string($_GET["link"]);
-
- $result = db_query($link,
- "INSERT INTO ttrss_feeds (owner_uid,feed_url,title) VALUES ('".$_SESSION["uid"]."', '$feed_link', '')");
$result = db_query($link,
- "SELECT id FROM ttrss_feeds WHERE feed_url = '$feed_link'");
+ "SELECT id FROM ttrss_feeds
+ WHERE feed_url = '$feed_link' AND owner_uid = ".$_SESSION["uid"]);
- $feed_id = db_fetch_result($result, 0, "id");
+ if (db_num_rows($result) == 0) {
+
+ $result = db_query($link,
+ "INSERT INTO ttrss_feeds (owner_uid,feed_url,title)
+ VALUES ('".$_SESSION["uid"]."', '$feed_link', '')");
+
+ $result = db_query($link,
+ "SELECT id FROM ttrss_feeds WHERE feed_url = '$feed_link'
+ AND owner_uid = " . $_SESSION["uid"]);
- if ($feed_id) {
- update_rss_feed($link, $feed_link, $feed_id);
+ $feed_id = db_fetch_result($result, 0, "id");
+
+ if ($feed_id) {
+ update_rss_feed($link, $feed_link, $feed_id);
+ }
+ } else {
+
+ print "<div class=\"warning\">
+ Feed <b>$feed_link</b> already exists in the database.
+ </div>";
}
}
}
$result = db_query($link, "SELECT id,title,feed_url,last_error
- FROM ttrss_feeds WHERE last_error != ''");
+ FROM ttrss_feeds WHERE last_error != '' AND owner_uid = ".$_SESSION["uid"]);
if (db_num_rows($result) > 0) {
FROM
ttrss_feeds WHERE owner_uid = '".$_SESSION["uid"]."' ORDER by title");
+ print "<div id=\"infoBox\">PLACEHOLDER</div>";
+
print "<p><table width=\"100%\" class=\"prefFeedList\" id=\"prefFeedList\">";
print "<tr class=\"title\">
<td> </td><td>Select</td><td width=\"30%\">Title</td>
print "
Selection:
+ <input type=\"submit\" class=\"button\"
+ onclick=\"javascript:selectedFeedDetails()\" value=\"Details\">
<input type=\"submit\" class=\"button\"
onclick=\"javascript:editSelectedFeed()\" value=\"Edit\">
<input type=\"submit\" class=\"button\"
ttrss_users
ORDER by login");
- print "<div id=\"prefUserDetails\">PLACEHOLDER</div>";
+ print "<div id=\"infoBox\">PLACEHOLDER</div>";
print "<p><table width=\"100%\" class=\"prefUserList\" id=\"prefUserList\">";
$uid = sprintf("%d", $_GET["id"]);
- print "<div class='userDetails'>";
+ print "<div class='infoBoxContents'>";
- $result = db_query($link, "SELECT login,last_login,access_level
+ $result = db_query($link, "SELECT login,last_login,access_level,
+ (SELECT COUNT(int_id) FROM ttrss_user_entries
+ WHERE owner_uid = id) AS stored_articles
FROM ttrss_users
WHERE id = '$uid'");
$login = db_fetch_result($result, 0, "login");
$last_login = db_fetch_result($result, 0, "last_login");
$access_level = db_fetch_result($result, 0, "access_level");
+ $stored_articles = db_fetch_result($result, 0, "stored_articles");
print "<tr><td>Username</td><td>$login</td></tr>";
print "<tr><td>Access level</td><td>$access_level</td></tr>";
print "<tr><td>Last logged in</td><td>$last_login</td></tr>";
+ print "<tr><td>Stored articles</td><td>$stored_articles</td></tr>";
$result = db_query($link, "SELECT COUNT(id) as num_feeds FROM ttrss_feeds
WHERE owner_uid = '$uid'");
print "<tr><td>Subscribed feeds count</td><td>$num_feeds</td></tr>";
- $result = db_query($link, "SELECT
+/* $result = db_query($link, "SELECT
SUM(LENGTH(content)+LENGTH(title)+LENGTH(link)+LENGTH(guid)) AS db_size
- FROM ttrss_entries WHERE owner_uid = '$uid'");
+ FROM ttrss_user_entries,ttrss_entries
+ WHERE owner_uid = '$uid' AND ref_id = id");
$db_size = round(db_fetch_result($result, 0, "db_size") / 1024);
- print "<tr><td>Approx. DB size</td><td>$db_size KBytes</td></tr>";
+ print "<tr><td>Approx. used DB size</td><td>$db_size KBytes</td></tr>"; */
print "</table>";
$icon_file = ICONS_URL."/".$line["id"].".ico";
if (file_exists($icon_file) && filesize($icon_file) > 0) {
- $feed_icon = "<img class=\"feedIcon\" src=\"$icon_file\">";
+ $feed_icon = "<img class=\"tinyFeedIcon\" src=\"$icon_file\">";
} else {
$feed_icon = "<img class=\"feedIcon\" src=\"images/blank_icon.gif\">";
}
print "<div align='center'>
<input type='submit' class='button'
- onclick=\"closeUserDetails()\" value=\"Close this window\"></div>";
+ onclick=\"closeInfoBox()\" value=\"Close this window\"></div>";
// print "</body></html>";
}
+ if ($op == "feed-details") {
+
+ $feed_id = $_GET["id"];
+
+ $result = db_query($link,
+ "SELECT
+ title,feed_url,last_updated,
+ (SELECT COUNT(int_id) FROM ttrss_user_entries
+ WHERE feed_id = id) AS total,
+ (SELECT COUNT(int_id) FROM ttrss_user_entries
+ WHERE feed_id = id AND unread = true) AS unread,
+ (SELECT COUNT(int_id) FROM ttrss_user_entries
+ WHERE feed_id = id AND marked = true) AS marked
+ FROM ttrss_feeds
+ WHERE id = '$feed_id' AND owner_uid = ".$_SESSION["uid"]);
+
+ if (db_num_rows($result) == 0) return;
+
+ $title = db_fetch_result($result, 0, "title");
+ $last_updated = db_fetch_result($result, 0, "last_updated");
+ $feed_url = db_fetch_result($result, 0, "feed_url");
+ $total = db_fetch_result($result, 0, "total");
+ $unread = db_fetch_result($result, 0, "unread");
+ $marked = db_fetch_result($result, 0, "marked");
+
+ print "<div class=\"infoBoxContents\"><h1>$title</h1>";
+
+ print "<table width='100%'>";
+
+ print "<tr><td>Feed URL</td><td><a href=\"$feed_url\">$feed_url</a></td></tr>";
+ print "<tr><td>Last updated</td><td>$last_updated</td></tr>";
+ print "<tr><td>Total articles</td><td>$total</td></tr>";
+ print "<tr><td>Unread articles</td><td>$unread</td></tr>";
+ print "<tr><td>Starred articles</td><td>$marked</td></tr>";
+
+ print "</table>";
+
+ print "</div>";
+
+ print "<div align='center'>
+ <input type='submit' class='button'
+ onclick=\"closeInfoBox()\" value=\"Close this window\"></div>";
+
+ }
+
db_close($link);
?>