diff options
Diffstat (limited to 'classes')
-rw-r--r-- | classes/api.php | 2 | ||||
-rw-r--r-- | classes/article.php | 87 | ||||
-rw-r--r-- | classes/dlg.php | 2 | ||||
-rw-r--r-- | classes/handler/public.php | 2 | ||||
-rw-r--r-- | classes/opml.php | 10 | ||||
-rw-r--r-- | classes/rpc.php | 2 |
6 files changed, 101 insertions, 4 deletions
diff --git a/classes/api.php b/classes/api.php index 04be5c7a8..9b9a5bbe5 100644 --- a/classes/api.php +++ b/classes/api.php @@ -439,7 +439,7 @@ class API extends Handler { $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"])) { + if (Article::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/article.php b/classes/article.php index 0cb7073b5..ec0276406 100644 --- a/classes/article.php +++ b/classes/article.php @@ -85,5 +85,92 @@ class Article extends Handler_Protected { ccache_update($link, $feed_id, $_SESSION["uid"]);
}
+ static function create_published_article($link, $title, $url, $content, $labels_str,
+ $owner_uid) {
+
+ $guid = sha1($url . $owner_uid); // include owner_uid to prevent global GUID clash
+ $content_hash = sha1($content);
+
+ if ($labels_str != "") {
+ $labels = explode(",", $labels_str);
+ } else {
+ $labels = array();
+ }
+
+ $rc = false;
+
+ if (!$title) $title = $url;
+ if (!$title && !$url) return false;
+
+ if (filter_var($url, FILTER_VALIDATE_URL) === FALSE) return false;
+
+ db_query($link, "BEGIN");
+
+ // only check for our user data here, others might have shared this with different content etc
+ $result = db_query($link, "SELECT id FROM ttrss_entries, ttrss_user_entries WHERE
+ link = '$url' AND ref_id = id AND owner_uid = '$owner_uid' LIMIT 1");
+
+ if (db_num_rows($result) != 0) {
+ $ref_id = db_fetch_result($result, 0, "id");
+
+ $result = db_query($link, "SELECT int_id FROM ttrss_user_entries WHERE
+ ref_id = '$ref_id' AND owner_uid = '$owner_uid' LIMIT 1");
+
+ if (db_num_rows($result) != 0) {
+ $int_id = db_fetch_result($result, 0, "int_id");
+
+ db_query($link, "UPDATE ttrss_entries SET
+ content = '$content', content_hash = '$content_hash' WHERE id = '$ref_id'");
+
+ db_query($link, "UPDATE ttrss_user_entries SET published = true WHERE
+ int_id = '$int_id' AND owner_uid = '$owner_uid'");
+ } else {
+
+ 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)");
+ }
+
+ if (count($labels) != 0) {
+ foreach ($labels as $label) {
+ label_add_article($link, $ref_id, trim($label), $owner_uid);
+ }
+ }
+
+ $rc = true;
+
+ } else {
+ $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)");
+
+ if (count($labels) != 0) {
+ foreach ($labels as $label) {
+ label_add_article($link, $ref_id, trim($label), $owner_uid);
+ }
+ }
+
+ $rc = true;
+ }
+ }
+
+ db_query($link, "COMMIT");
+
+ return $rc;
+ }
+
+
}
diff --git a/classes/dlg.php b/classes/dlg.php index 3a980ec8b..30dfa1ce1 100644 --- a/classes/dlg.php +++ b/classes/dlg.php @@ -168,7 +168,7 @@ class Dlg extends Handler_Protected { print "<title>".__('Public OPML URL')."</title>"; print "<content><![CDATA["; - $url_path = opml_publish_url($this->link); + $url_path = Opml::opml_publish_url($this->link); print __("Your Public OPML URL is:"); diff --git a/classes/handler/public.php b/classes/handler/public.php index 3bc8d3b79..3d2becccd 100644 --- a/classes/handler/public.php +++ b/classes/handler/public.php @@ -376,7 +376,7 @@ class Handler_Public extends Handler { $content = db_escape_string(strip_tags($_REQUEST["content"])); $labels = db_escape_string(strip_tags($_REQUEST["labels"])); - create_published_article($this->link, $title, $url, $content, $labels, + Article::create_published_article($this->link, $title, $url, $content, $labels, $_SESSION["uid"]); print "<script type='text/javascript'>"; diff --git a/classes/opml.php b/classes/opml.php index 10967c171..b91e395d1 100644 --- a/classes/opml.php +++ b/classes/opml.php @@ -479,5 +479,15 @@ class Opml extends Handler_Protected { print "$msg<br/>"; } + static function opml_publish_url($link){ + + $url_path = get_self_url_prefix(); + $url_path .= "/opml.php?op=publish&key=" . + get_feed_access_key($link, 'OPML:Publish', false, $_SESSION["uid"]); + + return $url_path; + } + + } ?> diff --git a/classes/rpc.php b/classes/rpc.php index 0e6fa3379..d529e496c 100644 --- a/classes/rpc.php +++ b/classes/rpc.php @@ -370,7 +370,7 @@ class RPC extends Handler_Protected { $this->update_feed_access_key($this->link, 'OPML:Publish', false, $_SESSION["uid"]); - $new_link = opml_publish_url($this->link); + $new_link = Opml::opml_publish_url($this->link); print json_encode(array("link" => $new_link)); } |