X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=modules%2Fbackend-rpc.php;h=228d45a78eabbdecbb5ae41f54cd30042793f9cf;hb=6a7817c1ad684ea6eb0b02180e6d2040b3cb0a77;hp=3ca471377c619ce621f2f67b71cd565f22bf928d;hpb=e2ccbfab0a8e734df65ad89f817e0b8e10a3481c;p=tt-rss.git diff --git a/modules/backend-rpc.php b/modules/backend-rpc.php index 3ca47137..228d45a7 100644 --- a/modules/backend-rpc.php +++ b/modules/backend-rpc.php @@ -1,61 +1,175 @@ "; - $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 == "togglepref") { + 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 == "getFeedCounters") { + if ($subop == "setpref") { print ""; - print ""; - getFeedCounters($link); - print ""; + + $key = db_escape_string($_REQUEST["key"]); + $value = db_escape_string($_REQUEST["value"]); + + set_pref($link, $key, $value); + + print ""; + print ""; + + return; } if ($subop == "getAllCounters") { print ""; - print ""; + print ""; + print "]]>"; print_runtime_info($link); print ""; + + return; } 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"; @@ -67,116 +181,185 @@ $result = db_query($link, "UPDATE ttrss_user_entries SET marked = $mark WHERE ref_id = '$id' AND owner_uid = " . $_SESSION["uid"]); + + print ""; + + return; } - if ($subop == "updateFeed") { - $feed_id = db_escape_string($_GET["feed"]); + 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"]); - $result = db_query($link, - "SELECT feed_url FROM ttrss_feeds WHERE id = '$feed_id' - AND owner_uid = " . $_SESSION["uid"]); + print ""; - if (db_num_rows($result) > 0) { - $feed_url = db_fetch_result($result, 0, "feed_url"); - update_rss_feed($link, $feed_url, $feed_id); + return; + } + + if ($subop == "archive") { + $ids = split(",", db_escape_string($_REQUEST["ids"])); + + foreach ($ids as $id) { + archive_article($link, $id, $_SESSION["uid"]); } - print ""; - print ""; - getFeedCounter($link, $feed_id); - print ""; - print ""; - + print ""; + return; } - if ($subop == "forceUpdateAllFeeds" || $subop == "updateAllFeeds") { - - if (ENABLE_UPDATE_DAEMON) { - if ($subop == "forceUpdateAllFeeds") { + if ($subop == "publ") { + $pub = $_REQUEST["pub"]; + $id = db_escape_string($_REQUEST["id"]); + $note = trim(strip_tags(db_escape_string($_REQUEST["note"]))); - $result = db_query($link, "SELECT count(id) AS cid FROM - ttrss_scheduled_updates WHERE feed_id IS NULL AND - owner_uid = " . $_SESSION["uid"]); - - $cid = db_fetch_result($result, 0, "cid"); + if ($pub == "1") { + $pub = "true"; + } else { + $pub = "false"; + } - if ($cid == 0) { - - db_query($link, "INSERT INTO ttrss_scheduled_updates - (owner_uid, feed_id, entered) VALUES - (".$_SESSION["uid"].", NULL, NOW())"); - - } - } - - } else { - update_all_feeds($link, $subop == "forceUpdateAllFeeds"); + if ($note != 'undefined') { + $note_qpart = "note = '$note',"; } - $global_unread_caller = sprintf("%d", $_GET["uctr"]); - $global_unread = getGlobalUnread($link); + // FIXME this needs collision testing + + $result = db_query($link, "UPDATE ttrss_user_entries SET + $note_qpart + published = $pub + WHERE ref_id = '$id' AND owner_uid = " . $_SESSION["uid"]); + print ""; + + print ""; + + if ($note != 'undefined') { + $note_size = strlen($note); + print ""; + print ""; + print ""; + } - print ""; + print ""; - if ($global_unread_caller != $global_unread) { + return; + } - $omode = $_GET["omode"]; - - if (!$omode) $omode = "tflc"; - - if (strchr($omode, "l")) getLabelCounters($link); - if (strchr($omode, "f")) getFeedCounters($link); - if (strchr($omode, "t")) getTagCounters($link); - if (strchr($omode, "c")) { - if (get_pref($link, 'ENABLE_FEED_CATS')) { - getCategoryCounters($link); - } - } - } + if ($subop == "updateFeed") { + $feed_id = db_escape_string($_REQUEST["feed"]); + + update_rss_feed($link, $feed_id); + + print ""; + print ""; + print ""; + + return; + } - getGlobalCounters($link, $global_unread); + if ($subop == "forceUpdateAllFeeds" || $subop == "updateAllFeeds") { + + $global_unread_caller = sprintf("%d", $_REQUEST["uctr"]); + $global_unread = getGlobalUnread($link); - print ""; + print ""; + + print ""; print_runtime_info($link); print ""; + return; } /* 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); - print ""; + print ""; + print_runtime_info($link); print ""; + + return; } 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); - print ""; + print ""; print_runtime_info($link); print ""; + + return; + } + + if ($subop == "publishSelected") { + + $ids = split(",", db_escape_string($_REQUEST["ids"])); + $cmode = sprintf("%d", $_REQUEST["cmode"]); + + publishArticlesById($link, $ids, $cmode); + + print ""; + print ""; + print_runtime_info($link); + print ""; + + return; } if ($subop == "sanityCheck") { @@ -187,10 +370,12 @@ print_runtime_info($link); # assign client-passed params to session - $_SESSION["client.userAgent"] = $_GET["ua"]; + $_SESSION["client.userAgent"] = $_REQUEST["ua"]; } print ""; + + return; } if ($subop == "globalPurge") { @@ -199,28 +384,33 @@ global_purge_old_posts($link, true); print ""; + return; } 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']."'"); if (db_num_rows($result) == 1) { - $link = strip_tags(db_fetch_result($result, 0, "link")); + $link = htmlspecialchars(strip_tags(db_fetch_result($result, 0, "link"))); print "$link$id"; } else { print "Article not found"; } + + return; } if ($subop == "setArticleTags") { - $id = db_escape_string($_GET["id"]); + global $memcache; - $tags_str = db_escape_string($_GET["tags_str"]); + $id = db_escape_string($_REQUEST["id"]); + + $tags_str = db_escape_string($_REQUEST["tags_str"]); $tags = array_unique(trim_array(split(",", $tags_str))); @@ -247,7 +437,7 @@ continue; } -// print ""; +// print ""; if ($tag != '') { db_query($link, "INSERT INTO ttrss_tags @@ -258,16 +448,575 @@ 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 " - $id + "; + return; + } + + if ($subop == "regenPubKey") { + + print ""; + + set_pref($link, "_PREFS_PUBLISH_KEY", generate_publish_key(), $_SESSION["uid"]); + + $new_link = article_publish_url($link); + + print ""; + + print ""; + + 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); + return; + } + + if ($subop == "completeTags") { + + $search = db_escape_string($_REQUEST["search"]); + + $result = db_query($link, "SELECT DISTINCT tag_name FROM ttrss_tags + WHERE owner_uid = '".$_SESSION["uid"]."' AND + tag_name LIKE '$search%' ORDER BY tag_name + LIMIT 10"); + + print ""; + + return; + } + + if ($subop == "purge") { + $ids = split(",", db_escape_string($_REQUEST["ids"])); + $days = sprintf("%d", $_REQUEST["days"]); + + print ""; + + print ""; + + print ""; + + return; + } + +/* if ($subop == "setScore") { + $id = db_escape_string($_REQUEST["id"]); + $score = sprintf("%d", $_REQUEST["score"]); + + $result = db_query($link, "UPDATE ttrss_user_entries SET score = '$score' + WHERE ref_id = '$id' AND owner_uid = ".$_SESSION["uid"]); + + print "Acknowledged."; + + return; + + } */ + + if ($subop == "getArticles") { + $ids = split(",", db_escape_string($_REQUEST["ids"])); + + print ""; + + foreach ($ids as $id) { + if ($id) { + outputArticleXML($link, $id, 0, false); + } + } + print ""; + + return; + } + + if ($subop == "checkDate") { + + $date = db_escape_string($_REQUEST["date"]); + $date_parsed = strtotime($date); + + print ""; + + if ($date_parsed) { + print "1"; + } else { + print "0"; + } + + print ""; + + return; + } + + if ($subop == "removeFromLabel") { + + $ids = split(",", db_escape_string($_REQUEST["ids"])); + $label_id = db_escape_string($_REQUEST["lid"]); + + $label = db_escape_string(label_find_caption($link, $label_id, + $_SESSION["uid"])); + + print ""; + print ""; + + if ($label) { + + foreach ($ids as $id) { + label_remove_article($link, $id, $label, $_SESSION["uid"]); + + print ""; + + } + } + + print ""; + + print ""; + print ""; + + return; + } + + if ($subop == "assignToLabel") { + + $ids = split(",", db_escape_string($_REQUEST["ids"])); + $label_id = db_escape_string($_REQUEST["lid"]); + + $label = db_escape_string(label_find_caption($link, $label_id, + $_SESSION["uid"])); + + print ""; + + print ""; + + if ($label) { + + foreach ($ids as $id) { + label_add_article($link, $id, $label, $_SESSION["uid"]); + + print ""; + + } + } + + print ""; + + print ""; + print ""; + + return; + } + + 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"]; + $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; + + /* 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 ""; + + $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 = 10; + $skip = $limit*($stage-1); + + print ""; + + if ($amount > 0) $amount -= $skip; + + if ($amount > 0) { + + $limit = min($limit, $amount); + + if ($unread_only) { + $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 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 "
"; + } + } + + } + + print "
"; + + } + + print "
"; + + 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"; } ?>