summaryrefslogtreecommitdiff
path: root/classes
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2012-09-09 16:05:59 +0400
committerAndrew Dolgov <[email protected]>2012-09-09 16:05:59 +0400
commit8361e724785767d57cd28be7ceaea7ad81fae0a2 (patch)
treebd19895c0778b8f0108cec561cb80fe911512a7d /classes
parentb8386ad3d14dc0518e1289d3987c79c3922dae2a (diff)
implement sharing of arbitrary stuff using bookmarklet and API call, bump API version
Diffstat (limited to 'classes')
-rw-r--r--classes/api.php13
-rw-r--r--classes/handler/public.php70
-rw-r--r--classes/pref/feeds.php8
-rw-r--r--classes/rpc.php2
4 files changed, 90 insertions, 3 deletions
diff --git a/classes/api.php b/classes/api.php
index 2e9c1b902..cce1d2a78 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 983f0aaa9..cd46fa033 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 "<html>
+ <head>
+ <title>Tiny Tiny RSS</title>
+ <link rel=\"stylesheet\" type=\"text/css\" href=\"utility.css\">
+ <script type=\"text/javascript\" src=\"lib/prototype.js\"></script>
+ <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>
+ </head>
+ <body id='sharepopup'>";
+
+ $action = $_REQUEST["action"];
+
+ if ($_SESSION["uid"]) {
+
+ if (!$action) {
+
+ print "<table height='100%' width='100%'><tr><td colspan='2'>";
+ print "<h1>Publish with Tiny Tiny RSS</h1>";
+ print "</td></tr>";
+
+ print "<form id='share_form' name='share_form'>";
+
+ print "<input type=\"hidden\" name=\"op\" value=\"sharepopup\">";
+ print "<input type=\"hidden\" name=\"action\" value=\"share\">";
+
+ $title = htmlspecialchars($_REQUEST["title"]);
+ $url = htmlspecialchars($_REQUEST["url"]);
+
+ print "<tr><td>".__("Title:")."</td><td width='80%'><input name='title' value=\"$title\"></td></tr>";
+ print "<tr><td>".__("URL:")."</td><td><input name='url' value=\"$url\"></td></tr>";
+ print "<tr><td>".__("Content:")."</td><td><input name='content' value=\"\"></td></tr>";
+
+ print "<script type='text/javascript'>";
+ print "document.forms[0].title.focus();";
+ print "</script>";
+
+ print "<tr><td colspan='2'>
+ <button type=\"submit\">".
+ __('Publish')."</button>
+ <button onclick=\"return window.close()\">".
+ __('Cancel')."</button>
+ </div>";
+
+ print "</form>";
+ print "</td></tr></table>";
+
+ print "</body></html>";
+
+ } else {
+
+ $title = db_escape_string(strip_tags($_REQUEST["title"]));
+ $url = db_escape_string(strip_tags($_REQUEST["url"]));
+ $content = db_escape_string(strip_tags($_REQUEST["content"]));
+
+ create_published_article($this->link, $title, $url, $content, $_SESSION["uid"]);
+
+ print "<script type='text/javascript'>";
+ print "window.close();";
+ print "</script>";
+ }
+
+ } else {
+
+ print "<table><tr><td>" . __("Not logged in.") . "</td></tr></table>";
+
+ }
+ }
+
}
?>
diff --git a/classes/pref/feeds.php b/classes/pref/feeds.php
index ef308ee1c..d6bb94ebe 100644
--- a/classes/pref/feeds.php
+++ b/classes/pref/feeds.php
@@ -1557,7 +1557,7 @@ class Pref_Feeds extends Handler_Protected {
print "</div>"; # pane
}
- print "<div dojoType=\"dijit.layout.AccordionPane\" title=\"".__('Subscribing using bookmarklet')."\">";
+ print "<div dojoType=\"dijit.layout.AccordionPane\" title=\"".__('Bookmarklets')."\">";
print "<p>" . __("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.") . "</p>";
@@ -1569,6 +1569,12 @@ class Pref_Feeds extends Handler_Protected {
print "<a href=\"$bm_url\" class='bookmarklet'>" . __('Subscribe in Tiny Tiny RSS'). "</a>";
+ print "<p>" . __("Use this bookmarklet to publish arbitrary pages using Tiny Tiny RSS") . "</p>";
+
+ $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 "<a href=\"$bm_url\" class='bookmarklet'>" . __('Share with Tiny Tiny RSS'). "</a>";
+
print "</div>"; #pane
print "<div dojoType=\"dijit.layout.AccordionPane\" title=\"".__('Published & shared articles / Generated feeds')."\">";
diff --git a/classes/rpc.php b/classes/rpc.php
index db34a6c9d..733649139 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;
}