+ $pdo = Db::pdo();
+ $res = $pdo->query("DELETE FROM ttrss_entries WHERE
+ NOT EXISTS (SELECT ref_id FROM ttrss_user_entries WHERE ref_id = id) $limit_qpart");
+
+ if ($do_output) {
+ $rows = $res->rowCount();
+ _debug("Purged $rows orphaned posts.");
+ }
+ }
+
+ static function catchupArticlesById($ids, $cmode, $owner_uid = false) {
+
+ if (!$owner_uid) $owner_uid = $_SESSION["uid"];
+
+ $pdo = Db::pdo();
+
+ $ids_qmarks = arr_qmarks($ids);
+
+ if ($cmode == 0) {
+ $sth = $pdo->prepare("UPDATE ttrss_user_entries SET
+ unread = false,last_read = NOW()
+ WHERE ref_id IN ($ids_qmarks) AND owner_uid = ?");
+ } else if ($cmode == 1) {
+ $sth = $pdo->prepare("UPDATE ttrss_user_entries SET
+ unread = true
+ WHERE ref_id IN ($ids_qmarks) AND owner_uid = ?");
+ } else {
+ $sth = $pdo->prepare("UPDATE ttrss_user_entries SET
+ unread = NOT unread,last_read = NOW()
+ WHERE ref_id IN ($ids_qmarks) AND owner_uid = ?");
+ }
+
+ $sth->execute(array_merge($ids, [$owner_uid]));
+
+ /* update ccache */
+
+ $sth = $pdo->prepare("SELECT DISTINCT feed_id FROM ttrss_user_entries
+ WHERE ref_id IN ($ids_qmarks) AND owner_uid = ?");
+ $sth->execute(array_merge($ids, [$owner_uid]));
+
+ while ($line = $sth->fetch()) {
+ CCache::update($line["feed_id"], $owner_uid);
+ }
+ }
+
+ static function getLastArticleId() {
+ $pdo = DB::pdo();
+
+ $sth = $pdo->prepare("SELECT ref_id AS id FROM ttrss_user_entries
+ WHERE owner_uid = ? ORDER BY ref_id DESC LIMIT 1");
+ $sth->execute([$_SESSION['uid']]);
+
+ if ($row = $sth->fetch()) {
+ return $row['id'];
+ } else {
+ return -1;
+ }
+ }
+
+ static function get_article_labels($id, $owner_uid = false) {
+ $rv = array();
+
+ if (!$owner_uid) $owner_uid = $_SESSION["uid"];
+
+ $pdo = Db::pdo();
+
+ $sth = $pdo->prepare("SELECT label_cache FROM
+ ttrss_user_entries WHERE ref_id = ? AND owner_uid = ?");
+ $sth->execute([$id, $owner_uid]);
+
+ if ($row = $sth->fetch()) {
+ $label_cache = $row["label_cache"];
+
+ if ($label_cache) {
+ $tmp = json_decode($label_cache, true);
+
+ if (!$tmp || $tmp["no-labels"] == 1)
+ return $rv;
+ else
+ return $tmp;