X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=modules%2Fbackend-rpc.php;h=228d45a78eabbdecbb5ae41f54cd30042793f9cf;hb=6a7817c1ad684ea6eb0b02180e6d2040b3cb0a77;hp=64e7df2f0c26db36e41f5e32102f5842e4f194b6;hpb=36f787976fbbfff3cdc364810a483d68b40290b1;p=tt-rss.git diff --git a/modules/backend-rpc.php b/modules/backend-rpc.php index 64e7df2f..228d45a7 100644 --- a/modules/backend-rpc.php +++ b/modules/backend-rpc.php @@ -1,46 +1,154 @@ "; - $key = db_escape_string($_GET["key"]); - $value = db_escape_string($_GET["value"]); + foreach ($ids as $id) { + $result = db_query($link, "DELETE FROM ttrss_archived_feeds WHERE + (SELECT COUNT(*) FROM ttrss_user_entries + WHERE orig_feed_id = '$id') = 0 AND + id = '$id' AND owner_uid = ".$_SESSION["uid"]); - set_pref($link, $key, $value); + $rc = db_affected_rows($link, $result); - print ""; + print ""; + + } print ""; return; } - if ($subop == "getLabelCounters") { - $aid = $_GET["aid"]; + if ($subop == "addfeed") { + + $feed = db_escape_string($_REQUEST['feed']); + $cat = db_escape_string($_REQUEST['cat']); + $login = db_escape_string($_REQUEST['login']); + $pass = db_escape_string($_REQUEST['pass']); + + $rc = subscribe_to_feed($link, $feed, $cat, $login, $pass); + print ""; - print ""; - getLabelCounters($link); - if ($aid) { - getFeedCounter($link, $aid); - } - print ""; + print ""; print ""; return; + } - if ($subop == "getFeedCounters") { + if ($subop == "togglepref") { print ""; - print ""; - getFeedCounters($link); - print ""; + + $key = db_escape_string($_REQUEST["key"]); + + set_pref($link, $key, !get_pref($link, $key)); + + $value = get_pref($link, $key); + + print ""; + + print ""; + + return; + } + + if ($subop == "setpref") { + print ""; + + $key = db_escape_string($_REQUEST["key"]); + $value = db_escape_string($_REQUEST["value"]); + + set_pref($link, $key, $value); + + print ""; + print ""; return; @@ -48,12 +156,11 @@ if ($subop == "getAllCounters") { print ""; - print ""; + print ""; + print "]]>"; print_runtime_info($link); print ""; @@ -61,8 +168,8 @@ } if ($subop == "mark") { - $mark = $_GET["mark"]; - $id = db_escape_string($_GET["id"]); + $mark = $_REQUEST["mark"]; + $id = db_escape_string($_REQUEST["id"]); if ($mark == "1") { $mark = "true"; @@ -75,20 +182,59 @@ $result = db_query($link, "UPDATE ttrss_user_entries SET marked = $mark WHERE ref_id = '$id' AND owner_uid = " . $_SESSION["uid"]); - print ""; - getGlobalCounters($link); - getLabelCounters($link); - if (get_pref($link, 'ENABLE_FEED_CATS')) { - getCategoryCounters($link); + print ""; + + return; + } + + if ($subop == "delete") { + $ids = db_escape_string($_REQUEST["ids"]); + + $result = db_query($link, "DELETE FROM ttrss_user_entries + WHERE ref_id IN ($ids) AND owner_uid = " . $_SESSION["uid"]); + + print ""; + + return; + } + + if ($subop == "unarchive") { + $ids = db_escape_string($_REQUEST["ids"]); + + $result = db_query($link, "UPDATE ttrss_user_entries + SET feed_id = orig_feed_id, orig_feed_id = NULL + WHERE ref_id IN ($ids) AND owner_uid = " . $_SESSION["uid"]); + + print ""; + + return; + } + + if ($subop == "archive") { + $ids = split(",", db_escape_string($_REQUEST["ids"])); + + foreach ($ids as $id) { + archive_article($link, $id, $_SESSION["uid"]); } - print ""; + + print ""; return; } + if ($subop == "publ") { - $pub = $_GET["pub"]; - $id = db_escape_string($_GET["id"]); + $pub = $_REQUEST["pub"]; + $id = db_escape_string($_REQUEST["id"]); + $note = trim(strip_tags(db_escape_string($_REQUEST["note"]))); if ($pub == "1") { $pub = "true"; @@ -96,38 +242,45 @@ $pub = "false"; } + if ($note != 'undefined') { + $note_qpart = "note = '$note',"; + } + // FIXME this needs collision testing - $result = db_query($link, "UPDATE ttrss_user_entries SET published = $pub + $result = db_query($link, "UPDATE ttrss_user_entries SET + $note_qpart + published = $pub WHERE ref_id = '$id' AND owner_uid = " . $_SESSION["uid"]); - print ""; - getGlobalCounters($link); - getLabelCounters($link); - if (get_pref($link, 'ENABLE_FEED_CATS')) { - getCategoryCounters($link); + + print ""; + + print ""; + + if ($note != 'undefined') { + $note_size = strlen($note); + print ""; + print ""; + print ""; } - print ""; + + print ""; return; } if ($subop == "updateFeed") { - $feed_id = db_escape_string($_GET["feed"]); + $feed_id = db_escape_string($_REQUEST["feed"]); - $result = db_query($link, - "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_id); print ""; - print ""; - getFeedCounter($link, $feed_id); - print ""; + print ""; print ""; return; @@ -135,34 +288,19 @@ if ($subop == "forceUpdateAllFeeds" || $subop == "updateAllFeeds") { - $global_unread_caller = sprintf("%d", $_GET["uctr"]); + $global_unread_caller = sprintf("%d", $_REQUEST["uctr"]); $global_unread = getGlobalUnread($link); print ""; - print ""; + print ""; + print "]]>"; print_runtime_info($link); @@ -174,15 +312,16 @@ /* GET["cmode"] = 0 - mark as read, 1 - as unread, 2 - toggle */ if ($subop == "catchupSelected") { - $ids = split(",", db_escape_string($_GET["ids"])); - $cmode = sprintf("%d", $_GET["cmode"]); + $ids = split(",", db_escape_string($_REQUEST["ids"])); + $cmode = sprintf("%d", $_REQUEST["cmode"]); catchupArticlesById($link, $ids, $cmode); print ""; - print ""; - getAllCounters($link, $_GET["omode"]); - print ""; + print ""; + print_runtime_info($link); print ""; @@ -191,15 +330,15 @@ if ($subop == "markSelected") { - $ids = split(",", db_escape_string($_GET["ids"])); - $cmode = sprintf("%d", $_GET["cmode"]); + $ids = split(",", db_escape_string($_REQUEST["ids"])); + $cmode = sprintf("%d", $_REQUEST["cmode"]); markArticlesById($link, $ids, $cmode); print ""; - print ""; - getAllCounters($link, $_GET["omode"]); - print ""; + print ""; print_runtime_info($link); print ""; @@ -208,15 +347,15 @@ if ($subop == "publishSelected") { - $ids = split(",", db_escape_string($_GET["ids"])); - $cmode = sprintf("%d", $_GET["cmode"]); + $ids = split(",", db_escape_string($_REQUEST["ids"])); + $cmode = sprintf("%d", $_REQUEST["cmode"]); publishArticlesById($link, $ids, $cmode); print ""; - print ""; - getAllCounters($link, $_GET["omode"]); - print ""; + print ""; print_runtime_info($link); print ""; @@ -231,7 +370,7 @@ print_runtime_info($link); # assign client-passed params to session - $_SESSION["client.userAgent"] = $_GET["ua"]; + $_SESSION["client.userAgent"] = $_REQUEST["ua"]; } print ""; @@ -250,7 +389,7 @@ if ($subop == "getArticleLink") { - $id = db_escape_string($_GET["id"]); + $id = db_escape_string($_REQUEST["id"]); $result = db_query($link, "SELECT link FROM ttrss_entries, ttrss_user_entries WHERE id = '$id' AND id = ref_id AND owner_uid = '".$_SESSION['uid']."'"); @@ -267,9 +406,11 @@ if ($subop == "setArticleTags") { - $id = db_escape_string($_GET["id"]); + global $memcache; + + $id = db_escape_string($_REQUEST["id"]); - $tags_str = db_escape_string($_GET["tags_str"]); + $tags_str = db_escape_string($_REQUEST["tags_str"]); $tags = array_unique(trim_array(split(",", $tags_str))); @@ -307,6 +448,11 @@ db_query($link, "COMMIT"); + if ($memcache) { + $obj_id = md5("TAGS:".$_SESSION["uid"].":$id"); + $memcache->delete($obj_id); + } + $tags_str = format_tags_string(get_article_tags($link, $id), $id); print " @@ -320,7 +466,7 @@ print ""; - set_pref($link, "_PREFS_PUBLISH_KEY", generate_publish_key()); + set_pref($link, "_PREFS_PUBLISH_KEY", generate_publish_key(), $_SESSION["uid"]); $new_link = article_publish_url($link); @@ -331,6 +477,16 @@ return; } + if ($subop == "regenOPMLKey") { + + print ""; + set_pref($link, " _PREFS_OPML_PUBLISH_KEY", generate_publish_key(), $_SESSION["uid"]); + $new_link = opml_publish_url($link); + print ""; + print ""; + return; + } + if ($subop == "logout") { logout_user(); print_error_xml(6); @@ -356,8 +512,8 @@ } if ($subop == "purge") { - $ids = split(",", db_escape_string($_GET["ids"])); - $days = sprintf("%d", $_GET["days"]); + $ids = split(",", db_escape_string($_REQUEST["ids"])); + $days = sprintf("%d", $_REQUEST["days"]); print ""; @@ -431,7 +587,8 @@ $ids = split(",", db_escape_string($_REQUEST["ids"])); $label_id = db_escape_string($_REQUEST["lid"]); - $label = label_find_caption($link, $label_id, $_SESSION["uid"]); + $label = db_escape_string(label_find_caption($link, $label_id, + $_SESSION["uid"])); print ""; print ""; @@ -453,9 +610,9 @@ print ""; - print ""; - getAllCounters($link, $omode); - print ""; + print ""; print ""; return; @@ -466,7 +623,8 @@ $ids = split(",", db_escape_string($_REQUEST["ids"])); $label_id = db_escape_string($_REQUEST["lid"]); - $label = label_find_caption($link, $label_id, $_SESSION["uid"]); + $label = db_escape_string(label_find_caption($link, $label_id, + $_SESSION["uid"])); print ""; @@ -489,68 +647,237 @@ print ""; - print ""; - getAllCounters($link, $omode); - print ""; + print ""; print ""; return; } - if ($subop == "feedBrowser") { + if ($subop == "updateFeedBrowser") { $search = db_escape_string($_REQUEST["search"]); $limit = db_escape_string($_REQUEST["limit"]); + $mode = db_escape_string($_REQUEST["mode"]); print ""; print ""; print ""; print ""; print ""; + print ""; print ""; return; } + + if ($subop == "massSubscribe") { + + $ids = split(",", db_escape_string($_REQUEST["ids"])); + $mode = $_REQUEST["mode"]; + + $subscribed = array(); + + foreach ($ids as $id) { + + if ($mode == 1) { + $result = db_query($link, "SELECT feed_url,title FROM ttrss_feeds + WHERE id = '$id'"); + } else if ($mode == 2) { + $result = db_query($link, "SELECT * FROM ttrss_archived_feeds + WHERE id = '$id' AND owner_uid = " . $_SESSION["uid"]); + $orig_id = db_escape_string(db_fetch_result($result, 0, "id")); + $site_url = db_escape_string(db_fetch_result($result, 0, "site_url")); + } + + $feed_url = db_escape_string(db_fetch_result($result, 0, "feed_url")); + $title = db_escape_string(db_fetch_result($result, 0, "title")); + + $title_orig = db_fetch_result($result, 0, "title"); + + $result = db_query($link, "SELECT id FROM ttrss_feeds WHERE + feed_url = '$feed_url' AND owner_uid = " . $_SESSION["uid"]); + + if (db_num_rows($result) == 0) { + if ($mode == 1) { + $result = db_query($link, + "INSERT INTO ttrss_feeds (owner_uid,feed_url,title,cat_id) + VALUES ('".$_SESSION["uid"]."', '$feed_url', '$title', NULL)"); + } else if ($mode == 2) { + $result = db_query($link, + "INSERT INTO ttrss_feeds (id,owner_uid,feed_url,title,cat_id,site_url) + VALUES ('$orig_id','".$_SESSION["uid"]."', '$feed_url', '$title', NULL, '$site_url')"); + } + array_push($subscribed, $title_orig); + } + } + + $num_feeds = count($subscribed); + + print ""; + print ""; + print ""; + + return; + } + if ($subop == "download") { $stage = (int) $_REQUEST["stage"]; - $amount = (int) $_REQUEST["amount"]; - $unread_only = db_escape_string($_REQUEST["unread_only"]); + $cidt = (int)db_escape_string($_REQUEST["cidt"]); + $cidb = (int)db_escape_string($_REQUEST["cidb"]); + $sync = db_escape_string($_REQUEST["sync"]); + //$amount = (int) $_REQUEST["amount"]; + //$unread_only = db_escape_string($_REQUEST["unread_only"]); + //if (!$amount) $amount = 50; - if (!$amount) $amount = 50; + /* Amount is not used by the frontend offline.js anymore, it goes by + * date_qpart below + cidb/cidt IDs */ + + $amount = 2000; + $unread_only = true; print ""; + $sync = split(";", $sync); + + print ""; + + if (count($sync) > 0) { + if (strtotime($sync[0])) { + $last_online = db_escape_string($sync[0]); + + print ""; + + for ($i = 1; $i < count($sync); $i++) { + $e = split(",", $sync[$i]); + + if (count($e) == 3) { + + $id = (int) $e[0]; + $unread = bool_to_sql_bool((bool) $e[1]); + $marked = (bool)$e[2]; + + if ($marked) { + $marked = bool_to_sql_bool($marked); + $marked_qpart = "marked = $marked,"; + } + + $query = "UPDATE ttrss_user_entries SET + $marked_qpart + unread = $unread, + last_read = '$last_online' + WHERE ref_id = '$id' AND + (last_read IS NULL OR last_read < '$last_online') AND + owner_uid = ".$_SESSION["uid"]; + + $result = db_query($link, $query); + + print ""; + + } + } + + /* Maybe we need to further update local DB for this client */ + + $query = "SELECT ref_id,unread,marked FROM ttrss_user_entries + WHERE last_read >= '$last_online' AND + owner_uid = ".$_SESSION["uid"] . " LIMIT 1000"; + + $result = db_query($link, $query); + + while ($line = db_fetch_assoc($result)) { + $unread = (int) sql_bool_to_bool($line["unread"]); + $marked = (int) sql_bool_to_bool($line["marked"]); + + print ""; + } + + } + } + + print ""; + if ($stage == 0) { print ""; - $reply = array(); - - $result = db_query($link, "SELECT id, title FROM + $result = db_query($link, "SELECT id, title, cat_id FROM ttrss_feeds WHERE owner_uid = ".$_SESSION["uid"]); while ($line = db_fetch_assoc($result)) { $has_icon = (int) feed_has_icon($line["id"]); - print ""; } print ""; + print ""; + + $result = db_query($link, "SELECT id, title, collapsed FROM + ttrss_feed_categories WHERE owner_uid = ".$_SESSION["uid"]); + + print ""; + + print ""; + + print ""; + + while ($line = db_fetch_assoc($result)) { + print ""; + } + + print ""; + + print ""; + + $result = db_query($link, "SELECT * FROM + ttrss_labels2 WHERE owner_uid = ".$_SESSION["uid"]); + + while ($line = db_fetch_assoc($result)) { + print ""; + } + + + print ""; + } if ($stage > 0) { - print ""; - $limit = 50; + $limit = 10; $skip = $limit*($stage-1); + print ""; + if ($amount > 0) $amount -= $skip; if ($amount > 0) { @@ -558,25 +885,47 @@ $limit = min($limit, $amount); if ($unread_only) { - $unread_qpart = "unread = true AND "; + $unread_qpart = "(unread = true OR marked = true) AND "; } + if ($cidt && $cidb) { + $cid_qpart = "(ttrss_entries.id > $cidt OR ttrss_entries.id < $cidb) AND "; + } + + if (DB_TYPE == "pgsql") { + $date_qpart = "updated >= NOW() - INTERVAL '1 week' AND"; + } else { + $date_qpart = "updated >= DATE_SUB(NOW(), INTERVAL 1 WEEK) AND"; + } + $result = db_query($link, - "SELECT DISTINCT id,title,guid,link, - feed_id,content,updated,unread,marked FROM - ttrss_user_entries,ttrss_entries - WHERE $unread_qpart - ref_id = id AND owner_uid = ".$_SESSION["uid"]." + "SELECT DISTINCT ttrss_entries.id,ttrss_entries.title, + guid,link,comments, + feed_id,content,updated,unread,marked FROM + ttrss_user_entries,ttrss_entries,ttrss_feeds + WHERE $unread_qpart $cid_qpart $date_qpart + ttrss_feeds.id = feed_id AND + ref_id = ttrss_entries.id AND + ttrss_user_entries.owner_uid = ".$_SESSION["uid"]." ORDER BY updated DESC LIMIT $limit OFFSET $skip"); + + if (function_exists('json_encode')) { + + while ($line = db_fetch_assoc($result)) { + print "
"; +// too slow :( +// $line["tags"] = format_tags_string( +// get_article_tags($link, $line["id"]), $line["id"]); + + print json_encode($line); + print "]]>"; + } } } @@ -590,6 +939,84 @@ return; } + if ($subop == "digest-get-contents") { + $article_id = db_escape_string($_REQUEST['article_id']); + + $result = db_query($link, "SELECT content + FROM ttrss_entries, ttrss_user_entries + WHERE id = '$article_id' AND ref_id = id AND owner_uid = ".$_SESSION['uid']); + + print ""; + + print "
"; + + print "
"; + + return; + } + + if ($subop == "digest-update") { + $feed_id = db_escape_string($_REQUEST['feed_id']); + $offset = db_escape_string($_REQUEST['offset']); + $seq = db_escape_string($_REQUEST['seq']); + + if (!$feed_id) $feed_id = -4; + if (!$offset) $offset = 0; + print ""; + + print "$seq"; + + $headlines = api_get_headlines($link, $feed_id, 10, $offset, + '', ($feed_id == -4), true, false, "unread", "updated DESC"); + + //function api_get_headlines($link, $feed_id, $limit, $offset, + // $filter, $is_cat, $show_excerpt, $show_content, $view_mode) { + + print ""; + + print ""; + + print ""; + return; + } + + if ($subop == "digest-init") { + print ""; + + $tmp_feeds = api_get_feeds($link, false, true, false, 0); + $feeds = array(); + + foreach ($tmp_feeds as $f) { + if ($f['id'] > 0 || $f['id'] == -4) array_push($feeds, $f); + } + + print ""; + + print ""; + return; + } + + if ($subop == "catchupFeed") { + + $feed_id = db_escape_string($_REQUEST['feed_id']); + $is_cat = db_escape_string($_REQUEST['is_cat']); + + print ""; + + catchup_feed($link, $feed_id, $is_cat); + + print ""; + + return; + } + print "Unknown method: $subop"; } ?>