]> git.wh0rd.org - tt-rss.git/blobdiff - classes/rpc.php
js: simplify counter updating, remove some unused stuff
[tt-rss.git] / classes / rpc.php
index 33e500edfe72eb12d6e94d0ab6dd31c86b1c7622..5cc2235e8188eedefb448a285aaf2a116aaee46a 100644 (file)
@@ -169,12 +169,44 @@ class RPC extends Handler_Protected {
                $ids = explode(",", db_escape_string($_REQUEST["ids"]));
 
                foreach ($ids as $id) {
-                       archive_article($this->link, $id, $_SESSION["uid"]);
+                       $this->archive_article($this->link, $id, $_SESSION["uid"]);
                }
 
                print json_encode(array("message" => "UPDATE_COUNTERS"));
        }
 
+       private function archive_article($link, $id, $owner_uid) {
+               db_query($link, "BEGIN");
+
+               $result = db_query($link, "SELECT feed_id FROM ttrss_user_entries
+                       WHERE ref_id = '$id' AND owner_uid = $owner_uid");
+
+               if (db_num_rows($result) != 0) {
+
+                       /* prepare the archived table */
+
+                       $feed_id = (int) db_fetch_result($result, 0, "feed_id");
+
+                       if ($feed_id) {
+                               $result = db_query($link, "SELECT id FROM ttrss_archived_feeds
+                                       WHERE id = '$feed_id'");
+
+                               if (db_num_rows($result) == 0) {
+                                       db_query($link, "INSERT INTO ttrss_archived_feeds
+                                               (id, owner_uid, title, feed_url, site_url)
+                                       SELECT id, owner_uid, title, feed_url, site_url from ttrss_feeds
+                                       WHERE id = '$feed_id'");
+                               }
+
+                               db_query($link, "UPDATE ttrss_user_entries
+                                       SET orig_feed_id = feed_id, feed_id = NULL
+                                       WHERE ref_id = '$id' AND owner_uid = " . $_SESSION["uid"]);
+                       }
+               }
+
+               db_query($link, "COMMIT");
+       }
+
        function publ() {
                $pub = $_REQUEST["pub"];
                $id = db_escape_string($_REQUEST["id"]);
@@ -211,20 +243,15 @@ class RPC extends Handler_Protected {
 
                $reply = array();
 
-                if ($seq) $reply['seq'] = $seq;
-
-                if ($last_article_id != getLastArticleId($this->link)) {
-                               $omode = $_REQUEST["omode"];
+               if ($seq) $reply['seq'] = $seq;
 
-                       if ($omode != "T")
-                               $reply['counters'] = getAllCounters($this->link, $omode);
-                       else
-                               $reply['counters'] = getGlobalCounters($this->link);
-                }
+               if ($last_article_id != getLastArticleId($this->link)) {
+                       $reply['counters'] = getAllCounters($this->link);
+               }
 
-                $reply['runtime-info'] = make_runtime_info($this->link);
+               $reply['runtime-info'] = make_runtime_info($this->link);
 
-                print json_encode($reply);
+               print json_encode($reply);
        }
 
        /* GET["cmode"] = 0 - mark as read, 1 - as unread, 2 - toggle */
@@ -241,7 +268,7 @@ class RPC extends Handler_Protected {
                $ids = explode(",", db_escape_string($_REQUEST["ids"]));
                $cmode = sprintf("%d", $_REQUEST["cmode"]);
 
-               markArticlesById($this->link, $ids, $cmode);
+               $this->markArticlesById($this->link, $ids, $cmode);
 
                print json_encode(array("message" => "UPDATE_COUNTERS"));
        }
@@ -250,7 +277,7 @@ class RPC extends Handler_Protected {
                $ids = explode(",", db_escape_string($_REQUEST["ids"]));
                $cmode = sprintf("%d", $_REQUEST["cmode"]);
 
-               publishArticlesById($this->link, $ids, $cmode);
+               $this->publishArticlesById($this->link, $ids, $cmode);
 
                print json_encode(array("message" => "UPDATE_COUNTERS"));
        }
@@ -335,10 +362,10 @@ class RPC extends Handler_Protected {
        }
 
        function regenOPMLKey() {
-               update_feed_access_key($this->link, 'OPML:Publish',
+               $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));
        }
@@ -544,7 +571,7 @@ class RPC extends Handler_Protected {
                $feed_id = db_escape_string($_REQUEST['id']);
                $is_cat = db_escape_string($_REQUEST['is_cat']) == "true";
 
-               $new_key = update_feed_access_key($this->link, $feed_id, $is_cat);
+               $new_key = $this->update_feed_access_key($this->link, $feed_id, $is_cat);
 
                print json_encode(array("link" => $new_key));
        }
@@ -645,5 +672,159 @@ class RPC extends Handler_Protected {
                print json_encode(array("wide" => $wide));
        }
 
+       function updaterandomfeed() {
+               // Test if the feed need a update (update interval exceded).
+               if (DB_TYPE == "pgsql") {
+                       $update_limit_qpart = "AND ((
+                                       ttrss_feeds.update_interval = 0
+                                       AND ttrss_feeds.last_updated < NOW() - CAST((ttrss_user_prefs.value || ' minutes') AS INTERVAL)
+                               ) OR (
+                                       ttrss_feeds.update_interval > 0
+                                       AND ttrss_feeds.last_updated < NOW() - CAST((ttrss_feeds.update_interval || ' minutes') AS INTERVAL)
+                               ) OR ttrss_feeds.last_updated IS NULL
+                               OR last_updated = '1970-01-01 00:00:00')";
+               } else {
+                       $update_limit_qpart = "AND ((
+                                       ttrss_feeds.update_interval = 0
+                                       AND ttrss_feeds.last_updated < DATE_SUB(NOW(), INTERVAL CONVERT(ttrss_user_prefs.value, SIGNED INTEGER) MINUTE)
+                               ) OR (
+                                       ttrss_feeds.update_interval > 0
+                                       AND ttrss_feeds.last_updated < DATE_SUB(NOW(), INTERVAL ttrss_feeds.update_interval MINUTE)
+                               ) OR ttrss_feeds.last_updated IS NULL
+                               OR last_updated = '1970-01-01 00:00:00')";
+               }
+
+               // Test if feed is currently being updated by another process.
+               if (DB_TYPE == "pgsql") {
+                       $updstart_thresh_qpart = "AND (ttrss_feeds.last_update_started IS NULL OR ttrss_feeds.last_update_started < NOW() - INTERVAL '5 minutes')";
+               } else {
+                       $updstart_thresh_qpart = "AND (ttrss_feeds.last_update_started IS NULL OR ttrss_feeds.last_update_started < DATE_SUB(NOW(), INTERVAL 5 MINUTE))";
+               }
+
+               $random_qpart = sql_random_function();
+
+               // We search for feed needing update.
+               $result = db_query($this->link, "SELECT ttrss_feeds.feed_url,ttrss_feeds.id
+                       FROM
+                               ttrss_feeds, ttrss_users, ttrss_user_prefs
+                       WHERE
+                               ttrss_feeds.owner_uid = ttrss_users.id
+                               AND ttrss_users.id = ttrss_user_prefs.owner_uid
+                               AND ttrss_user_prefs.pref_name = 'DEFAULT_UPDATE_INTERVAL'
+                               AND ttrss_feeds.owner_uid = ".$_SESSION["uid"]."
+                               $update_limit_qpart $updstart_thresh_qpart
+                       ORDER BY $random_qpart LIMIT 30");
+
+               $feed_id = -1;
+
+               require_once "rssfuncs.php";
+
+               $num_updated = 0;
+
+               $tstart = time();
+
+               while ($line = db_fetch_assoc($result)) {
+                       $feed_id = $line["id"];
+
+                       if (time() - $tstart < ini_get("max_execution_time") * 0.7) {
+                               update_rss_feed($this->link, $feed_id, true);
+                               ++$num_updated;
+                       } else {
+                               break;
+                       }
+               }
+
+               if ($num_updated > 0) {
+                       print json_encode(array("message" => "UPDATE_COUNTERS",
+                               "num_updated" => $num_updated));
+               } else {
+                       print json_encode(array("message" => "NOTHING_TO_UPDATE"));
+               }
+
+       }
+
+       function update_feed_access_key($link, $feed_id, $is_cat, $owner_uid = false) {
+               if (!$owner_uid) $owner_uid = $_SESSION["uid"];
+
+               $sql_is_cat = bool_to_sql_bool($is_cat);
+
+               $result = db_query($link, "SELECT access_key FROM ttrss_access_keys
+                       WHERE feed_id = '$feed_id'      AND is_cat = $sql_is_cat
+                       AND owner_uid = " . $owner_uid);
+
+               if (db_num_rows($result) == 1) {
+                       $key = db_escape_string(sha1(uniqid(rand(), true)));
+
+                       db_query($link, "UPDATE ttrss_access_keys SET access_key = '$key'
+                               WHERE feed_id = '$feed_id' AND is_cat = $sql_is_cat
+                               AND owner_uid = " . $owner_uid);
+
+                       return $key;
+
+               } else {
+                       return get_feed_access_key($link, $feed_id, $is_cat, $owner_uid);
+               }
+       }
+
+       private function markArticlesById($link, $ids, $cmode) {
+
+               $tmp_ids = array();
+
+               foreach ($ids as $id) {
+                       array_push($tmp_ids, "ref_id = '$id'");
+               }
+
+               $ids_qpart = join(" OR ", $tmp_ids);
+
+               if ($cmode == 0) {
+                       db_query($link, "UPDATE ttrss_user_entries SET
+                       marked = false,last_read = NOW()
+                       WHERE ($ids_qpart) AND owner_uid = " . $_SESSION["uid"]);
+               } else if ($cmode == 1) {
+                       db_query($link, "UPDATE ttrss_user_entries SET
+                       marked = true
+                       WHERE ($ids_qpart) AND owner_uid = " . $_SESSION["uid"]);
+               } else {
+                       db_query($link, "UPDATE ttrss_user_entries SET
+                       marked = NOT marked,last_read = NOW()
+                       WHERE ($ids_qpart) AND owner_uid = " . $_SESSION["uid"]);
+               }
+       }
+
+       private function publishArticlesById($link, $ids, $cmode) {
+
+               $tmp_ids = array();
+
+               foreach ($ids as $id) {
+                       array_push($tmp_ids, "ref_id = '$id'");
+               }
+
+               $ids_qpart = join(" OR ", $tmp_ids);
+
+               if ($cmode == 0) {
+                       db_query($link, "UPDATE ttrss_user_entries SET
+                       published = false,last_read = NOW()
+                       WHERE ($ids_qpart) AND owner_uid = " . $_SESSION["uid"]);
+               } else if ($cmode == 1) {
+                       db_query($link, "UPDATE ttrss_user_entries SET
+                       published = true,last_read = NOW()
+                       WHERE ($ids_qpart) AND owner_uid = " . $_SESSION["uid"]);
+               } else {
+                       db_query($link, "UPDATE ttrss_user_entries SET
+                       published = NOT published,last_read = NOW()
+                       WHERE ($ids_qpart) AND owner_uid = " . $_SESSION["uid"]);
+               }
+
+               if (PUBSUBHUBBUB_HUB) {
+                       $rss_link = get_self_url_prefix() .
+                               "/public.php?op=rss&id=-2&key=" .
+                               get_feed_access_key($link, -2, false);
+
+                       $p = new Publisher(PUBSUBHUBBUB_HUB);
+
+                       $pubsub_result = $p->publish_update($rss_link);
+               }
+       }
+
 }
 ?>