X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=modules%2Fbackend-rpc.php;h=f1bbd0698f72ea440a3e029200c3b0e702f67ed9;hb=e0d91d846dd5ac42a95a0832777cc76aaf579bc2;hp=019368685d4738c3bd2c1f26f03cc9d1de7eba68;hpb=b4e75b2a25d0a30d77b2160c8195835c9816cfe0;p=tt-rss.git diff --git a/modules/backend-rpc.php b/modules/backend-rpc.php index 01936868..f1bbd069 100644 --- a/modules/backend-rpc.php +++ b/modules/backend-rpc.php @@ -2,61 +2,148 @@ function handle_rpc_request($link) { $subop = $_REQUEST["subop"]; + $seq = (int) $_REQUEST["seq"]; - if ($subop == "setpref") { - if (WEB_DEMO_MODE) { - return; + // Silent + if ($subop == "setprofile") { + $id = db_escape_string($_REQUEST["id"]); + + $_SESSION["profile"] = $id; + $_SESSION["prefs_cache"] = array(); + return; + } + + // Silent + if ($subop == "remprofiles") { + $ids = explode(",", db_escape_string(trim($_REQUEST["ids"]))); + + foreach ($ids as $id) { + if ($_SESSION["profile"] != $id) { + db_query($link, "DELETE FROM ttrss_settings_profiles WHERE id = '$id' AND + owner_uid = " . $_SESSION["uid"]); + } } + return; + } - print ""; + // Silent + if ($subop == "addprofile") { + $title = db_escape_string(trim($_REQUEST["title"])); + if ($title) { + db_query($link, "BEGIN"); - $key = db_escape_string($_REQUEST["key"]); - $value = db_escape_string($_REQUEST["value"]); + $result = db_query($link, "SELECT id FROM ttrss_settings_profiles + WHERE title = '$title' AND owner_uid = " . $_SESSION["uid"]); - set_pref($link, $key, $value); + if (db_num_rows($result) == 0) { - print ""; + db_query($link, "INSERT INTO ttrss_settings_profiles (title, owner_uid) + VALUES ('$title', ".$_SESSION["uid"] .")"); - print ""; + $result = db_query($link, "SELECT id FROM ttrss_settings_profiles WHERE + title = '$title'"); + if (db_num_rows($result) != 0) { + $profile_id = db_fetch_result($result, 0, "id"); + + if ($profile_id) { + initialize_user_prefs($link, $_SESSION["uid"], $profile_id); + } + } + } + + db_query($link, "COMMIT"); + } return; } - if ($subop == "getLabelCounters") { - $aid = $_REQUEST["aid"]; - print ""; - print ""; - getLabelCounters($link); - if ($aid) { - getFeedCounter($link, $aid); + // Silent + if ($subop == "saveprofile") { + $id = db_escape_string($_REQUEST["id"]); + $title = db_escape_string(trim($_REQUEST["value"])); + + if ($id == 0) { + print __("Default profile"); + return; } - print ""; - print ""; + if ($title) { + db_query($link, "BEGIN"); + + $result = db_query($link, "SELECT id FROM ttrss_settings_profiles + WHERE title = '$title' AND owner_uid =" . $_SESSION["uid"]); + + if (db_num_rows($result) == 0) { + db_query($link, "UPDATE ttrss_settings_profiles + SET title = '$title' WHERE id = '$id' AND + owner_uid = " . $_SESSION["uid"]); + print $title; + } else { + $result = db_query($link, "SELECT title FROM ttrss_settings_profiles + WHERE id = '$id' AND owner_uid =" . $_SESSION["uid"]); + print db_fetch_result($result, 0, "title"); + } + + db_query($link, "COMMIT"); + } return; } - if ($subop == "getFeedCounters") { - print ""; - print ""; - getFeedCounters($link); - print ""; - print ""; + // Silent + if ($subop == "remarchive") { + $ids = explode(",", db_escape_string($_REQUEST["ids"])); + + 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"]); + $rc = db_affected_rows($link, $result); + } return; } - if ($subop == "getAllCounters") { - print ""; - print ""; + 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']); - $omode = $_REQUEST["omode"]; + $rc = subscribe_to_feed($link, $feed, $cat, $login, $pass); - getAllCounters($link, $omode); - print ""; - print_runtime_info($link); - print ""; + print json_encode(array("result" => $rc)); + + return; + + } + + if ($subop == "extractfeedurls") { + + $urls = get_feeds_from_html($_REQUEST['url']); + + print json_encode(array("urls" => $urls)); + return; + } + + if ($subop == "togglepref") { + $key = db_escape_string($_REQUEST["key"]); + set_pref($link, $key, !get_pref($link, $key)); + $value = get_pref($link, $key); + + print json_encode(array("param" =>$key, "value" => $value)); + return; + } + + if ($subop == "setpref") { + $value = str_replace("\n", "
", $_REQUEST['value']); + $key = db_escape_string($_REQUEST["key"]); + $value = db_escape_string($value); + + set_pref($link, $key, $value); + + print json_encode(array("param" =>$key, "value" => $value)); return; } @@ -70,73 +157,45 @@ $mark = "false"; } - // 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"]); - print ""; - getGlobalCounters($link); - getLabelCounters($link); - if (get_pref($link, 'ENABLE_FEED_CATS')) { - getCategoryCounters($link); - } - print ""; - + print json_encode(array("message" => "UPDATE_COUNTERS")); return; } if ($subop == "delete") { $ids = db_escape_string($_REQUEST["ids"]); - $result = db_query($link, "DELETE FROM ttrss_user_entries + $result = db_query($link, "DELETE FROM ttrss_user_entries WHERE ref_id IN ($ids) AND owner_uid = " . $_SESSION["uid"]); - print ""; - getGlobalCounters($link); - if (get_pref($link, 'ENABLE_FEED_CATS')) { - getCategoryCounters($link); - } - print ""; - + print json_encode(array("message" => "UPDATE_COUNTERS")); return; } if ($subop == "unarchive") { $ids = db_escape_string($_REQUEST["ids"]); - $result = db_query($link, "UPDATE ttrss_user_entries + $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 ""; - getGlobalCounters($link); - if (get_pref($link, 'ENABLE_FEED_CATS')) { - getCategoryCounters($link); - } - print ""; - + print json_encode(array("message" => "UPDATE_COUNTERS")); return; } if ($subop == "archive") { - $ids = split(",", db_escape_string($_REQUEST["ids"])); + $ids = explode(",", db_escape_string($_REQUEST["ids"])); foreach ($ids as $id) { archive_article($link, $id, $_SESSION["uid"]); } - print ""; - getGlobalCounters($link); - if (get_pref($link, 'ENABLE_FEED_CATS')) { - getCategoryCounters($link); - } - print ""; - + print json_encode(array("message" => "UPDATE_COUNTERS")); return; } - if ($subop == "publ") { $pub = $_REQUEST["pub"]; $id = db_escape_string($_REQUEST["id"]); @@ -148,200 +207,120 @@ $pub = "false"; } - if ($note != 'undefined') { - $note_qpart = "note = '$note',"; - } - - // FIXME this needs collision testing - - $result = db_query($link, "UPDATE ttrss_user_entries SET - $note_qpart + $result = db_query($link, "UPDATE ttrss_user_entries SET published = $pub WHERE ref_id = '$id' AND owner_uid = " . $_SESSION["uid"]); + $pubsub_result = false; - print ""; - - print ""; - getGlobalCounters($link); - getLabelCounters($link); - if (get_pref($link, 'ENABLE_FEED_CATS')) { - getCategoryCounters($link); - } - print ""; + if (PUBSUBHUBBUB_HUB) { + $rss_link = get_self_url_prefix() . + "/public.php?op=rss&id=-2&key=" . + get_feed_access_key($link, -2, false); - if ($note != 'undefined') { - $note_size = strlen($note); - print ""; - print ""; - print ""; - } + $p = new Publisher(PUBSUBHUBBUB_HUB); - print ""; + $pubsub_result = $p->publish_update($rss_link); + } + print json_encode(array("message" => "UPDATE_COUNTERS", + "pubsub_result" => $pubsub_result)); return; } - if ($subop == "updateFeed") { + // Silent + /* if ($subop == "update") { $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); - } - - print ""; - print ""; - getFeedCounter($link, $feed_id); - print ""; - print ""; - + update_rss_feed($link, $feed_id); return; - } - - if ($subop == "forceUpdateAllFeeds" || $subop == "updateAllFeeds") { - - $global_unread_caller = sprintf("%d", $_REQUEST["uctr"]); - $global_unread = getGlobalUnread($link); - - print ""; - - print ""; - - if ($global_unread_caller != $global_unread) { + } */ - $omode = $_REQUEST["omode"]; - - if (!$omode) $omode = "tflc"; + if ($subop == "updateAllFeeds" || $subop == "getAllCounters") { + $last_article_id = (int) $_REQUEST["last_article_id"]; - if (strchr($omode, "l")) getLabelCounters($link); + $reply = array(); - if (strchr($omode, "c")) { - if (get_pref($link, 'ENABLE_FEED_CATS')) { - getCategoryCounters($link); - } - } + if ($seq) $reply['seq'] = $seq; - if (strchr($omode, "f")) getFeedCounters($link); - if (strchr($omode, "t")) getTagCounters($link); + if ($last_article_id != getLastArticleId($link)) { + $omode = $_REQUEST["omode"]; - getGlobalCounters($link, $global_unread); + if ($omode != "T") + $reply['counters'] = getAllCounters($link, $omode); + else + $reply['counters'] = getGlobalCounters($link); } - - print ""; - print_runtime_info($link); + $reply['runtime-info'] = make_runtime_info($link); - print ""; + print json_encode($reply); return; } /* GET["cmode"] = 0 - mark as read, 1 - as unread, 2 - toggle */ if ($subop == "catchupSelected") { - - $ids = split(",", db_escape_string($_REQUEST["ids"])); + $ids = explode(",", db_escape_string($_REQUEST["ids"])); $cmode = sprintf("%d", $_REQUEST["cmode"]); catchupArticlesById($link, $ids, $cmode); - print ""; - print ""; - getAllCounters($link, $_REQUEST["omode"]); - print ""; - print_runtime_info($link); - print ""; - + print json_encode(array("message" => "UPDATE_COUNTERS")); return; } if ($subop == "markSelected") { - - $ids = split(",", db_escape_string($_REQUEST["ids"])); + $ids = explode(",", db_escape_string($_REQUEST["ids"])); $cmode = sprintf("%d", $_REQUEST["cmode"]); markArticlesById($link, $ids, $cmode); - print ""; - print ""; - getAllCounters($link, $_REQUEST["omode"]); - print ""; - print_runtime_info($link); - print ""; - + print json_encode(array("message" => "UPDATE_COUNTERS")); return; } if ($subop == "publishSelected") { - - $ids = split(",", db_escape_string($_REQUEST["ids"])); + $ids = explode(",", db_escape_string($_REQUEST["ids"])); $cmode = sprintf("%d", $_REQUEST["cmode"]); publishArticlesById($link, $ids, $cmode); - print ""; - print ""; - getAllCounters($link, $_REQUEST["omode"]); - print ""; - print_runtime_info($link); - print ""; - + print json_encode(array("message" => "UPDATE_COUNTERS")); return; } if ($subop == "sanityCheck") { - print ""; - if (sanity_check($link)) { - print ""; - print_init_params($link); - print_runtime_info($link); + $_SESSION["hasAudio"] = $_REQUEST["hasAudio"] === "true"; + + $reply = array(); - # assign client-passed params to session - $_SESSION["client.userAgent"] = $_REQUEST["ua"]; + $reply['error'] = sanity_check($link); + if ($reply['error']['code'] == 0) { + $reply['init-params'] = make_init_params($link); + $reply['runtime-info'] = make_runtime_info($link); } - print ""; + print json_encode($reply); return; - } + } - if ($subop == "globalPurge") { +/* if ($subop == "globalPurge") { print ""; global_purge_old_posts($link, true); print ""; return; - } - - if ($subop == "getArticleLink") { - - $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 = htmlspecialchars(strip_tags(db_fetch_result($result, 0, "link"))); - print "$link$id"; - } else { - print "Article not found"; - } - - return; - } + } */ if ($subop == "setArticleTags") { + global $memcache; $id = db_escape_string($_REQUEST["id"]); $tags_str = db_escape_string($_REQUEST["tags_str"]); - - $tags = array_unique(trim_array(split(",", $tags_str))); + $tags = array_unique(trim_array(explode(",", $tags_str))); db_query($link, "BEGIN"); @@ -350,13 +329,15 @@ if (db_num_rows($result) == 1) { + $tags_to_cache = array(); + $int_id = db_fetch_result($result, 0, "int_id"); - db_query($link, "DELETE FROM ttrss_tags WHERE + db_query($link, "DELETE FROM ttrss_tags WHERE post_int_id = $int_id AND owner_uid = '".$_SESSION["uid"]."'"); foreach ($tags as $tag) { - $tag = sanitize_tag($tag); + $tag = sanitize_tag($tag); if (!tag_is_valid($tag)) { continue; @@ -367,51 +348,58 @@ } // print ""; - + if ($tag != '') { - db_query($link, "INSERT INTO ttrss_tags + db_query($link, "INSERT INTO ttrss_tags (post_int_id, owner_uid, tag_name) VALUES ('$int_id', '".$_SESSION["uid"]."', '$tag')"); } - } - } - - db_query($link, "COMMIT"); - $tags_str = format_tags_string(get_article_tags($link, $id), $id); + array_push($tags_to_cache, $tag); + } - print " - - "; + /* update tag cache */ - return; - } + sort($tags_to_cache); + $tags_str = join(",", $tags_to_cache); - if ($subop == "regenPubKey") { + db_query($link, "UPDATE ttrss_user_entries + SET tag_cache = '$tags_str' WHERE ref_id = '$id' + AND owner_uid = " . $_SESSION["uid"]); + } - print ""; + db_query($link, "COMMIT"); - set_pref($link, "_PREFS_PUBLISH_KEY", generate_publish_key()); + if ($memcache) { + $obj_id = md5("TAGS:".$_SESSION["uid"].":$id"); + $memcache->delete($obj_id); + } - $new_link = article_publish_url($link); + $tags = get_article_tags($link, $id); + $tags_str = format_tags_string($tags, $id); + $tags_str_full = join(", ", $tags); - print ""; + if (!$tags_str_full) $tags_str_full = __("no tags"); - print ""; + print json_encode(array("tags_str" => array("id" => $id, + "content" => $tags_str, "content_full" => $tags_str_full))); return; } - if ($subop == "logout") { - logout_user(); - print_error_xml(6); + if ($subop == "regenOPMLKey") { + update_feed_access_key($link, 'OPML:Publish', + false, $_SESSION["uid"]); + + $new_link = opml_publish_url($link); + + print json_encode(array("link" => $new_link)); return; } if ($subop == "completeTags") { - $search = db_escape_string($_REQUEST["search"]); - $result = db_query($link, "SELECT DISTINCT tag_name FROM ttrss_tags + $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"); @@ -426,27 +414,19 @@ } if ($subop == "purge") { - $ids = split(",", db_escape_string($_REQUEST["ids"])); + $ids = explode(",", db_escape_string($_REQUEST["ids"])); $days = sprintf("%d", $_REQUEST["days"]); - print ""; - - print ""; - - print ""; - return; } @@ -464,340 +444,475 @@ } */ if ($subop == "getArticles") { - $ids = split(",", db_escape_string($_REQUEST["ids"])); - - print ""; + $ids = explode(",", db_escape_string($_REQUEST["ids"])); + $articles = array(); foreach ($ids as $id) { if ($id) { - outputArticleXML($link, $id, 0, false); + array_push($articles, format_article($link, $id, 0, false)); } } - print ""; + print json_encode($articles); return; } if ($subop == "checkDate") { - $date = db_escape_string($_REQUEST["date"]); $date_parsed = strtotime($date); - print ""; - - if ($date_parsed) { - print "1"; - } else { - print "0"; - } - - print ""; - + print json_encode(array("result" => (bool)$date_parsed, + "date" => date("c", $date_parsed))); return; } - if ($subop == "removeFromLabel") { + if ($subop == "assignToLabel" || $subop == "removeFromLabel") { + $reply = array(); - $ids = split(",", db_escape_string($_REQUEST["ids"])); + $ids = explode(",", db_escape_string($_REQUEST["ids"])); $label_id = db_escape_string($_REQUEST["lid"]); - $label = db_escape_string(label_find_caption($link, $label_id, + $label = db_escape_string(label_find_caption($link, $label_id, $_SESSION["uid"])); - print ""; - print ""; + $reply["info-for-headlines"] = array(); if ($label) { foreach ($ids as $id) { - label_remove_article($link, $id, $label, $_SESSION["uid"]); - print ""; + array_push($reply["info-for-headlines"], + array("id" => $id, "labels" => format_article_labels($labels, $id))); } } - print ""; + $reply["message"] = "UPDATE_COUNTERS"; - print ""; - getAllCounters($link, $omode); - print ""; - print ""; + print json_encode($reply); return; } - if ($subop == "assignToLabel") { + if ($subop == "updateFeedBrowser") { + $search = db_escape_string($_REQUEST["search"]); + $limit = db_escape_string($_REQUEST["limit"]); + $mode = (int) db_escape_string($_REQUEST["mode"]); - $ids = split(",", db_escape_string($_REQUEST["ids"])); - $label_id = db_escape_string($_REQUEST["lid"]); + print json_encode(array("content" => + make_feed_browser($link, $search, $limit, $mode), + "mode" => $mode)); + return; + } - $label = db_escape_string(label_find_caption($link, $label_id, - $_SESSION["uid"])); + // Silent + if ($subop == "massSubscribe") { - print ""; + $payload = json_decode($_REQUEST["payload"], false); + $mode = $_REQUEST["mode"]; - print ""; + if (!$payload || !is_array($payload)) return; - if ($label) { + if ($mode == 1) { + foreach ($payload as $feed) { - foreach ($ids as $id) { - label_add_article($link, $id, $label, $_SESSION["uid"]); + $title = db_escape_string($feed[0]); + $feed_url = db_escape_string($feed[1]); - print ""; +/* $ids = explode(",", db_escape_string($_REQUEST["ids"])); + $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")); } - } - print ""; + $feed_url = db_escape_string(db_fetch_result($result, 0, "feed_url")); + $title = db_escape_string(db_fetch_result($result, 0, "title")); - print ""; - getAllCounters($link, $omode); - print ""; - print ""; + $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); + } + } */ return; } - if ($subop == "feedBrowser") { + if ($subop == "digest-get-contents") { + $article_id = db_escape_string($_REQUEST['article_id']); - $search = db_escape_string($_REQUEST["search"]); - $limit = db_escape_string($_REQUEST["limit"]); + $result = db_query($link, "SELECT content,title,link,marked,published + FROM ttrss_entries, ttrss_user_entries + WHERE id = '$article_id' AND ref_id = id AND owner_uid = ".$_SESSION['uid']); - print ""; - print ""; - print ""; - print ""; - print ""; - print ""; + $content = sanitize_rss($link, db_fetch_result($result, 0, "content")); + $title = strip_tags(db_fetch_result($result, 0, "title")); + $article_url = htmlspecialchars(db_fetch_result($result, 0, "link")); + $marked = sql_bool_to_bool(db_fetch_result($result, 0, "marked")); + $published = sql_bool_to_bool(db_fetch_result($result, 0, "published")); + + print json_encode(array("article" => + array("id" => $article_id, "url" => $article_url, + "tags" => get_article_tags($link, $article_id), + "marked" => $marked, "published" => $published, + "title" => $title, "content" => $content))); 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; + if ($subop == "digest-update") { + $feed_id = db_escape_string($_REQUEST['feed_id']); + $offset = db_escape_string($_REQUEST['offset']); + $seq = db_escape_string($_REQUEST['seq']); - $amount = 2000; - $unread_only = true; + if (!$feed_id) $feed_id = -4; + if (!$offset) $offset = 0; - print ""; + $reply = array(); - $sync = split(";", $sync); + $reply['seq'] = $seq; - print ""; + $headlines = api_get_headlines($link, $feed_id, 30, $offset, + '', ($feed_id == -4), true, false, "unread", "updated DESC", 0, 0); - if (count($sync) > 0) { - if (strtotime($sync[0])) { - $last_online = db_escape_string($sync[0]); + //function api_get_headlines($link, $feed_id, $limit, $offset, + // $filter, $is_cat, $show_excerpt, $show_content, $view_mode) { - print ""; - - for ($i = 1; $i < count($sync); $i++) { - $e = split(",", $sync[$i]); + $reply['headlines'] = array(); + $reply['headlines']['title'] = getFeedTitle($link, $feed_id); + $reply['headlines']['content'] = $headlines; + + print json_encode($reply); + return; + } - if (count($e) == 3) { + if ($subop == "digest-init") { + $tmp_feeds = api_get_feeds($link, -4, true, false, 0); - $id = (int) $e[0]; - $unread = bool_to_sql_bool((bool) $e[1]); - $marked = (bool)$e[2]; + $feeds = array(); - if ($marked) { - $marked = bool_to_sql_bool($marked); - $marked_qpart = "marked = $marked,"; - } + foreach ($tmp_feeds as $f) { + if ($f['id'] > 0 || $f['id'] == -4) array_push($feeds, $f); + } - $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"]; + print json_encode(array("feeds" => $feeds)); - $result = db_query($link, $query); + return; + } - print ""; + if ($subop == "catchupFeed") { + $feed_id = db_escape_string($_REQUEST['feed_id']); + $is_cat = db_escape_string($_REQUEST['is_cat']) == "true"; - } - } + catchup_feed($link, $feed_id, $is_cat); - /* Maybe we need to further update local DB for this client */ + print json_encode(array("message" => "UPDATE_COUNTERS")); + return; + } - $query = "SELECT ref_id,unread,marked FROM ttrss_user_entries - WHERE last_read >= '$last_online' AND - owner_uid = ".$_SESSION["uid"] . " LIMIT 1000"; + if ($subop == "sendEmail") { + $secretkey = $_REQUEST['secretkey']; - $result = db_query($link, $query); + $reply = array(); - while ($line = db_fetch_assoc($result)) { - $unread = (int) sql_bool_to_bool($line["unread"]); - $marked = (int) sql_bool_to_bool($line["marked"]); + if (DIGEST_ENABLE && $_SESSION['email_secretkey'] && + $secretkey == $_SESSION['email_secretkey']) { - print ""; - } + $_SESSION['email_secretkey'] = ''; - } - } + $destination = $_REQUEST['destination']; + $subject = $_REQUEST['subject']; + $content = $_REQUEST['content']; - print ""; + $replyto = strip_tags($_SESSION['email_replyto']); + $fromname = strip_tags($_SESSION['email_fromname']); - if ($stage == 0) { - print ""; + $mail = new PHPMailer(); - $result = db_query($link, "SELECT id, title, cat_id FROM - ttrss_feeds WHERE hidden = false AND owner_uid = ".$_SESSION["uid"]); + $mail->PluginDir = "lib/phpmailer/"; + $mail->SetLanguage("en", "lib/phpmailer/language/"); - while ($line = db_fetch_assoc($result)) { + $mail->CharSet = "UTF-8"; - $has_icon = (int) feed_has_icon($line["id"]); + $mail->From = $replyto; + $mail->FromName = $fromname; + $mail->AddAddress($destination); - print ""; + if (DIGEST_SMTP_HOST) { + $mail->Host = DIGEST_SMTP_HOST; + $mail->Mailer = "smtp"; + $mail->SMTPAuth = DIGEST_SMTP_LOGIN != ''; + $mail->Username = DIGEST_SMTP_LOGIN; + $mail->Password = DIGEST_SMTP_PASSWORD; } - print ""; + $mail->IsHTML(false); + $mail->Subject = $subject; + $mail->Body = $content; - print ""; + $rc = $mail->Send(); + + if (!$rc) { + $reply['error'] = $mail->ErrorInfo; + } else { + save_email_address($link, db_escape_string($destination)); + $reply['message'] = "UPDATE_COUNTERS"; + } - $result = db_query($link, "SELECT id, title, collapsed FROM - ttrss_feed_categories WHERE owner_uid = ".$_SESSION["uid"]); + } else { + $reply['error'] = "Not authorized."; + } - print ""; + print json_encode($reply); + return; + } - print ""; + if ($subop == "completeEmails") { + $search = db_escape_string($_REQUEST["search"]); - print ""; + print ""; - $result = db_query($link, "SELECT * FROM - ttrss_labels2 WHERE owner_uid = ".$_SESSION["uid"]); + return; + } - while ($line = db_fetch_assoc($result)) { - print ""; - } + if ($subop == "quickAddCat") { + $cat = db_escape_string($_REQUEST["cat"]); + add_feed_category($link, $cat); - print ""; + $result = db_query($link, "SELECT id FROM ttrss_feed_categories WHERE + title = '$cat' AND owner_uid = " . $_SESSION["uid"]); + if (db_num_rows($result) == 1) { + $id = db_fetch_result($result, 0, "id"); + } else { + $id = 0; } - if ($stage > 0) { - print ""; + print_feed_cat_select($link, "cat_id", $id); - $limit = 200; - $skip = $limit*($stage-1); + return; + } - print ""; + if ($subop == "regenFeedKey") { + $feed_id = db_escape_string($_REQUEST['id']); + $is_cat = db_escape_string($_REQUEST['is_cat']) == "true"; - if ($amount > 0) $amount -= $skip; + $new_key = update_feed_access_key($link, $feed_id, $is_cat); - if ($amount > 0) { + print json_encode(array("link" => $new_key)); + return; + } - $limit = min($limit, $amount); + // Silent + if ($subop == "clearKeys") { + db_query($link, "DELETE FROM ttrss_access_keys WHERE + owner_uid = " . $_SESSION["uid"]); - if ($unread_only) { - $unread_qpart = "(unread = true OR marked = true) AND "; - } + return; + } - if ($cidt && $cidb) { - $cid_qpart = "(ttrss_entries.id > $cidt OR ttrss_entries.id < $cidb) AND "; - } + // Silent + if ($subop == "clearArticleKeys") { + db_query($link, "UPDATE ttrss_user_entries SET uuid = '' WHERE + owner_uid = " . $_SESSION["uid"]); - if (DB_TYPE == "pgsql") { - $date_qpart = "updated >= NOW() - INTERVAL '1 month' AND"; - } else { - $date_qpart = "updated >= DATE_SUB(NOW(), INTERVAL 1 MONTH) 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 - hidden = false AND - 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 "
"; - } - } + return; + } + + + if ($subop == "verifyRegexp") { + $reg_exp = $_REQUEST["reg_exp"]; + + $status = @preg_match("/$reg_exp/i", "TEST") !== false; + + print json_encode(array("status" => $status)); + return; + } + + // TODO: unify with digest-get-contents? + if ($subop == "cdmGetArticle") { + $ids = array(db_escape_string($_REQUEST["id"])); + $cids = explode(",", $_REQUEST["cids"]); + + $ids = array_merge($ids, $cids); + + $rv = array(); + + foreach ($ids as $id) { + $id = (int)$id; + + $result = db_query($link, "SELECT content, + ttrss_feeds.site_url AS site_url FROM ttrss_user_entries, ttrss_feeds, + ttrss_entries + WHERE feed_id = ttrss_feeds.id AND ref_id = '$id' AND + ttrss_entries.id = ref_id AND + ttrss_user_entries.owner_uid = ".$_SESSION["uid"]); + + if (db_num_rows($result) != 0) { + $line = db_fetch_assoc($result); + $article_content = sanitize_rss($link, $line["content"], + false, false, $line['site_url']); + + array_push($rv, + array("id" => $id, "content" => $article_content)); } + } + + print json_encode($rv); + + return; + } + + if ($subop == "scheduleFeedUpdate") { + $feed_id = db_escape_string($_REQUEST["id"]); + $is_cat = db_escape_string($_REQUEST['is_cat']) == 'true'; + + $message = __("Your request could not be completed."); + + if ($feed_id >= 0) { + if (!$is_cat) { + $message = __("Feed update has been scheduled."); - print "
"; + db_query($link, "UPDATE ttrss_feeds SET + last_update_started = '1970-01-01', + last_updated = '1970-01-01' WHERE id = '$feed_id' AND + owner_uid = ".$_SESSION["uid"]); + } else { + $message = __("Category update has been scheduled."); + + if ($feed_id) + $cat_query = "cat_id = '$feed_id'"; + else + $cat_query = "cat_id IS NULL"; + + db_query($link, "UPDATE ttrss_feeds SET + last_update_started = '1970-01-01', + last_updated = '1970-01-01' WHERE $cat_query AND + owner_uid = ".$_SESSION["uid"]); + } + } else { + $message = __("Can't update this kind of feed."); } - print "
"; + print json_encode(array("message" => $message)); + return; + } + + if ($subop == "getTweetInfo") { + $id = db_escape_string($_REQUEST['id']); + + $result = db_query($link, "SELECT title, link + FROM ttrss_entries, ttrss_user_entries + WHERE id = '$id' AND ref_id = id AND owner_uid = " .$_SESSION['uid']); + + if (db_num_rows($result) != 0) { + $title = truncate_string(strip_tags(db_fetch_result($result, 0, 'title')), + 100, '...'); + $article_link = db_fetch_result($result, 0, 'link'); + } + + print json_encode(array("title" => $title, "link" => $article_link, + "id" => $id)); + + return; + } + + if ($subop == "setNote") { + $id = db_escape_string($_REQUEST["id"]); + $note = trim(strip_tags(db_escape_string($_REQUEST["note"]))); + + db_query($link, "UPDATE ttrss_user_entries SET note = '$note' + WHERE ref_id = '$id' AND owner_uid = " . $_SESSION["uid"]); + + $formatted_note = format_article_note($id, $note); + + print json_encode(array("note" => $formatted_note, + "raw_length" => mb_strlen($note))); + return; + } + + if ($subop == "genHash") { + $hash = sha1(uniqid(rand(), true)); + print json_encode(array("hash" => $hash)); return; } - print "Unknown method: $subop"; + print json_encode(array("error" => array("code" => 7, + "message" => "Unknown method: $subop"))); } ?>