diff --git a/classes/api.php b/classes/api.php
index 2e9c1b90..cce1d2a7 100644
--- a/classes/api.php
+++ b/classes/api.php
@@ -2,7 +2,7 @@
class API extends Handler {
- const API_LEVEL = 3;
+ const API_LEVEL = 4;
const STATUS_OK = 0;
const STATUS_ERR = 1;
@@ -419,6 +419,17 @@ class API extends Handler {
print $this->wrap(self::STATUS_ERR, array("error" => 'UNKNOWN_METHOD'));
}
+ function shareToPublished() {
+ $title = db_escape_string(strip_tags($_REQUEST["title"]));
+ $url = db_escape_string(strip_tags($_REQUEST["url"]));
+ $content = db_escape_string(strip_tags($_REQUEST["content"]));
+
+ if (create_published_article($this->link, $title, $url, $content, $_SESSION["uid"])) {
+ print $this->wrap(self::STATUS_OK, array("status" => 'OK'));
+ } else {
+ print $this->wrap(self::STATUS_ERR, array("error" => 'Publishing failed'));
+ }
+ }
}
?>
diff --git a/classes/handler/public.php b/classes/handler/public.php
index 983f0aaa..cd46fa03 100644
--- a/classes/handler/public.php
+++ b/classes/handler/public.php
@@ -306,5 +306,75 @@ class Handler_Public extends Handler {
// Update all feeds needing a update.
update_daemon_common($this->link, 0, true, false);
}
+
+ function sharepopup() {
+ header('Content-Type: text/html; charset=utf-8');
+ print "
+
+ ";
+ print "
";
print "
" . __("Drag the link below to your browser toolbar, open the feed you're interested in in your browser and click on the link to subscribe to it.") . "
";
@@ -1569,6 +1569,12 @@ class Pref_Feeds extends Handler_Protected {
print "
" . __('Subscribe in Tiny Tiny RSS'). "";
+ print "
" . __("Use this bookmarklet to publish arbitrary pages using Tiny Tiny RSS") . "
";
+
+ $bm_url = htmlspecialchars("javascript:(function(){var d=document,w=window,e=w.getSelection,k=d.getSelection,x=d.selection,s=(e?e():(k)?k():(x?x.createRange().text:0)),f='".SELF_URL_PATH."/public.php?op=sharepopup',l=d.location,e=encodeURIComponent,g=f+'&title='+((e(s))?e(s):e(document.title))+'&url='+e(l.href);function a(){if(!w.open(g,'t','toolbar=0,resizable=0,scrollbars=1,status=1,width=500,height=200')){l.href=g;}}a();})()");
+
+ print "
" . __('Share with Tiny Tiny RSS'). "";
+
print "
"; #pane
print "
";
diff --git a/classes/rpc.php b/classes/rpc.php
index db34a6c9..73364913 100644
--- a/classes/rpc.php
+++ b/classes/rpc.php
@@ -2,7 +2,7 @@
class RPC extends Handler_Protected {
function csrf_ignore($method) {
- $csrf_ignored = array("sanitycheck", "buttonplugin", "exportget");
+ $csrf_ignored = array("sanitycheck", "buttonplugin", "exportget", "sharepopup");
return array_search($method, $csrf_ignored) !== false;
}
diff --git a/include/functions.php b/include/functions.php
index b9383790..bbf7dd8d 100644
--- a/include/functions.php
+++ b/include/functions.php
@@ -2326,6 +2326,8 @@
$limit_query_part = "LIMIT " . $limit;
}
+ $allow_archived = false;
+
$vfeed_query_part = "";
// override query strategy and enable feed display when searching globally
@@ -2397,6 +2399,7 @@
}
} else if ($feed == 0 && !$cat_view) { // archive virtual feed
$query_strategy_part = "feed_id IS NULL";
+ $allow_archived = true;
} else if ($feed == 0 && $cat_view) { // uncategorized
$query_strategy_part = "cat_id IS NULL AND feed_id IS NOT NULL";
$vfeed_query_part = "ttrss_feeds.title AS feed_title,";
@@ -2408,6 +2411,7 @@
if (!$cat_view) {
$query_strategy_part = "published = true";
$vfeed_query_part = "ttrss_feeds.title AS feed_title,";
+ $allow_archived = true;
} else {
$vfeed_query_part = "ttrss_feeds.title AS feed_title,";
@@ -2511,7 +2515,7 @@
}
}
- if ($feed != "0") {
+ if (!$allow_archived) {
$from_qpart = "ttrss_entries,ttrss_user_entries,ttrss_feeds$ext_tables_part";
$feed_check_qpart = "ttrss_user_entries.feed_id = ttrss_feeds.id AND";
@@ -5574,4 +5578,30 @@
}
+ function create_published_article($link, $title, $url, $content, $owner_uid) {
+ $guid = 'tt-rss-share:' . uniqid();
+ $content_hash = sha1($content);
+
+ $result = db_query($link, "INSERT INTO ttrss_entries
+ (title, guid, link, updated, content, content_hash, date_entered, date_updated)
+ VALUES
+ ('$title', '$guid', '$url', NOW(), '$content', '$content_hash', NOW(), NOW())");
+
+ $result = db_query($link, "SELECT id FROM ttrss_entries WHERE guid = '$guid'");
+
+ if (db_num_rows($result) != 0) {
+ $ref_id = db_fetch_result($result, 0, "id");
+
+ db_query($link, "INSERT INTO ttrss_user_entries
+ (ref_id, uuid, feed_id, orig_feed_id, owner_uid, published, tag_cache, label_cache, last_read, note, unread)
+ VALUES
+ ('$ref_id', '', NULL, NULL, $owner_uid, true, '', '', NOW(), '', false)");
+
+ return true;
+
+ }
+
+ return false;
+ }
+
?>
diff --git a/utility.css b/utility.css
index 14357b4d..c4fd63fc 100644
--- a/utility.css
+++ b/utility.css
@@ -118,4 +118,28 @@ div.rss hr {
border-color : #e0e0e0;
}
+body#sharepopup {
+ background : #88b0f0;
+ margin : 10px;
+ padding : 0px;
+}
+body#sharepopup h1 {
+ font-size : 14px;
+ margin : 0px;
+ color : #88b0f0;
+}
+
+body#sharepopup table {
+ background : white;
+ border : 1px solid black;
+ padding : 5px;
+}
+
+body#sharepopup form {
+ height : 100%;
+}
+
+body#sharepopup input {
+ width : 100%;
+}