diff --git a/functions.js b/functions.js index 2a4268e8..278f3254 100644 --- a/functions.js +++ b/functions.js @@ -1430,7 +1430,7 @@ function feedBrowser() { id: "feedBrowserDlg", title: __("More Feeds"), style: "width: 600px", - getSelectedFeeds: function() { + getSelectedFeedIds: function() { var list = $$("#browseFeedList li[id*=FBROW]"); var selected = new Array(); @@ -1444,26 +1444,48 @@ function feedBrowser() { return selected; }, + getSelectedFeeds: function() { + var list = $$("#browseFeedList li.Selected"); + var selected = new Array(); + + list.each(function(child) { + var title = child.getElementsBySelector("span.fb_feedTitle")[0].innerHTML; + var url = child.getElementsBySelector("a.fb_feedUrl")[0].href; + + selected.push([title,url]); + + }); + + return selected; + }, + subscribe: function() { - var selected = this.getSelectedFeeds(); var mode = this.attr('value').mode; + var selected = []; + + if (mode == "1") + selected = this.getSelectedFeeds(); + else + selected = this.getSelectedFeedIds(); if (selected.length > 0) { dijit.byId("feedBrowserDlg").hide(); notify_progress("Loading, please wait...", true); - var query = "?op=rpc&subop=massSubscribe&ids="+ - param_escape(selected.toString()) + "&mode=" + param_escape(mode); + // we use dojo.toJson instead of JSON.stringify because + // it somehow escapes everything TWICE, at least in Chrome 9 + + var query = "?op=rpc&subop=massSubscribe&payload="+ + param_escape(dojo.toJson(selected)) + "&mode=" + param_escape(mode); console.log(query); new Ajax.Request("backend.php", { parameters: query, onComplete: function(transport) { - if (inPreferences()) { - updateFeedList(); - } + notify(''); + updateFeedList(); } }); } else { diff --git a/modules/backend-rpc.php b/modules/backend-rpc.php index 75ce6886..4f2465e7 100644 --- a/modules/backend-rpc.php +++ b/modules/backend-rpc.php @@ -514,9 +514,53 @@ // Silent if ($subop == "massSubscribe") { - $ids = split(",", db_escape_string($_REQUEST["ids"])); + $payload = json_decode($_REQUEST["payload"], false); $mode = $_REQUEST["mode"]; + if (!$payload || !is_array($payload)) return; + + if ($mode == 1) { + foreach ($payload as $feed) { + + $title = db_escape_string($feed[0]); + $feed_url = db_escape_string($feed[1]); + + $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) { + $result = db_query($link, "INSERT INTO ttrss_feeds + (owner_uid,feed_url,title,cat_id,site_url) + VALUES ('".$_SESSION["uid"]."', + '$feed_url', '$title', NULL, '')"); + } + } + } else if ($mode == 2) { + // feed archive + foreach ($payload as $id) { + $result = db_query($link, "SELECT * FROM ttrss_archived_feeds + WHERE id = '$id' AND owner_uid = " . $_SESSION["uid"]); + + if (db_num_rows($result) != 0) { + $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")); + + $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) { + $result = db_query($link, "INSERT INTO ttrss_feeds + (owner_uid,feed_url,title,cat_id,site_url) + VALUES ('$id','".$_SESSION["uid"]."', + '$feed_url', '$title', NULL, '$site_url')"); + } + } + } + } + +/* $ids = split(",", db_escape_string($_REQUEST["ids"])); + $subscribed = array(); foreach ($ids as $id) { @@ -551,7 +595,7 @@ } array_push($subscribed, $title_orig); } - } + } */ return; } diff --git a/modules/pref-feeds.php b/modules/pref-feeds.php index 4baba572..3211987c 100644 --- a/modules/pref-feeds.php +++ b/modules/pref-feeds.php @@ -1607,13 +1607,16 @@ $site_url = ""; } - $feed_url = ""; - $rv .= "