move counter stuff to a separate class
This commit is contained in:
parent
46b433933e
commit
65af3b2cbb
|
@ -107,7 +107,7 @@ class API extends Handler {
|
||||||
|
|
||||||
/* Method added for ttrss-reader for Android */
|
/* Method added for ttrss-reader for Android */
|
||||||
function getCounters() {
|
function getCounters() {
|
||||||
$this->wrap(self::STATUS_OK, getAllCounters());
|
$this->wrap(self::STATUS_OK, Counters::getAllCounters());
|
||||||
}
|
}
|
||||||
|
|
||||||
function getFeeds() {
|
function getFeeds() {
|
||||||
|
@ -537,7 +537,7 @@ class API extends Handler {
|
||||||
/* Labels */
|
/* Labels */
|
||||||
|
|
||||||
if ($cat_id == -4 || $cat_id == -2) {
|
if ($cat_id == -4 || $cat_id == -2) {
|
||||||
$counters = getLabelCounters(true);
|
$counters = Counters::getLabelCounters(true);
|
||||||
|
|
||||||
foreach (array_values($counters) as $cv) {
|
foreach (array_values($counters) as $cv) {
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,203 @@
|
||||||
|
<?php
|
||||||
|
class Counters {
|
||||||
|
|
||||||
|
static function getAllCounters() {
|
||||||
|
$data = Counters::getGlobalCounters();
|
||||||
|
|
||||||
|
$data = array_merge($data, Counters::getVirtCounters());
|
||||||
|
$data = array_merge($data, Counters::getLabelCounters());
|
||||||
|
$data = array_merge($data, Counters::getFeedCounters());
|
||||||
|
$data = array_merge($data, Counters::getCategoryCounters());
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
static function getCategoryCounters() {
|
||||||
|
$ret_arr = array();
|
||||||
|
|
||||||
|
/* Labels category */
|
||||||
|
|
||||||
|
$cv = array("id" => -2, "kind" => "cat",
|
||||||
|
"counter" => Feeds::getCategoryUnread(-2));
|
||||||
|
|
||||||
|
array_push($ret_arr, $cv);
|
||||||
|
|
||||||
|
$result = db_query("SELECT id AS cat_id, value AS unread,
|
||||||
|
(SELECT COUNT(id) FROM ttrss_feed_categories AS c2
|
||||||
|
WHERE c2.parent_cat = ttrss_feed_categories.id) AS num_children
|
||||||
|
FROM ttrss_feed_categories, ttrss_cat_counters_cache
|
||||||
|
WHERE ttrss_cat_counters_cache.feed_id = id AND
|
||||||
|
ttrss_cat_counters_cache.owner_uid = ttrss_feed_categories.owner_uid AND
|
||||||
|
ttrss_feed_categories.owner_uid = " . $_SESSION["uid"]);
|
||||||
|
|
||||||
|
while ($line = db_fetch_assoc($result)) {
|
||||||
|
$line["cat_id"] = (int) $line["cat_id"];
|
||||||
|
|
||||||
|
if ($line["num_children"] > 0) {
|
||||||
|
$child_counter = Feeds::getCategoryChildrenUnread($line["cat_id"], $_SESSION["uid"]);
|
||||||
|
} else {
|
||||||
|
$child_counter = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
$cv = array("id" => $line["cat_id"], "kind" => "cat",
|
||||||
|
"counter" => $line["unread"] + $child_counter);
|
||||||
|
|
||||||
|
array_push($ret_arr, $cv);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Special case: NULL category doesn't actually exist in the DB */
|
||||||
|
|
||||||
|
$cv = array("id" => 0, "kind" => "cat",
|
||||||
|
"counter" => (int) CCache::find(0, $_SESSION["uid"], true));
|
||||||
|
|
||||||
|
array_push($ret_arr, $cv);
|
||||||
|
|
||||||
|
return $ret_arr;
|
||||||
|
}
|
||||||
|
|
||||||
|
static function getGlobalCounters($global_unread = -1) {
|
||||||
|
$ret_arr = array();
|
||||||
|
|
||||||
|
if ($global_unread == -1) {
|
||||||
|
$global_unread = Feeds::getGlobalUnread();
|
||||||
|
}
|
||||||
|
|
||||||
|
$cv = array("id" => "global-unread",
|
||||||
|
"counter" => (int) $global_unread);
|
||||||
|
|
||||||
|
array_push($ret_arr, $cv);
|
||||||
|
|
||||||
|
$result = db_query("SELECT COUNT(id) AS fn FROM
|
||||||
|
ttrss_feeds WHERE owner_uid = " . $_SESSION["uid"]);
|
||||||
|
|
||||||
|
$subscribed_feeds = db_fetch_result($result, 0, "fn");
|
||||||
|
|
||||||
|
$cv = array("id" => "subscribed-feeds",
|
||||||
|
"counter" => (int) $subscribed_feeds);
|
||||||
|
|
||||||
|
array_push($ret_arr, $cv);
|
||||||
|
|
||||||
|
return $ret_arr;
|
||||||
|
}
|
||||||
|
|
||||||
|
static function getVirtCounters() {
|
||||||
|
|
||||||
|
$ret_arr = array();
|
||||||
|
|
||||||
|
for ($i = 0; $i >= -4; $i--) {
|
||||||
|
|
||||||
|
$count = getFeedUnread($i);
|
||||||
|
|
||||||
|
if ($i == 0 || $i == -1 || $i == -2)
|
||||||
|
$auxctr = Feeds::getFeedArticles($i, false);
|
||||||
|
else
|
||||||
|
$auxctr = 0;
|
||||||
|
|
||||||
|
$cv = array("id" => $i,
|
||||||
|
"counter" => (int) $count,
|
||||||
|
"auxcounter" => (int) $auxctr);
|
||||||
|
|
||||||
|
// if (get_pref('EXTENDED_FEEDLIST'))
|
||||||
|
// $cv["xmsg"] = getFeedArticles($i)." ".__("total");
|
||||||
|
|
||||||
|
array_push($ret_arr, $cv);
|
||||||
|
}
|
||||||
|
|
||||||
|
$feeds = PluginHost::getInstance()->get_feeds(-1);
|
||||||
|
|
||||||
|
if (is_array($feeds)) {
|
||||||
|
foreach ($feeds as $feed) {
|
||||||
|
$cv = array("id" => PluginHost::pfeed_to_feed_id($feed['id']),
|
||||||
|
"counter" => $feed['sender']->get_unread($feed['id']));
|
||||||
|
|
||||||
|
if (method_exists($feed['sender'], 'get_total'))
|
||||||
|
$cv["auxcounter"] = $feed['sender']->get_total($feed['id']);
|
||||||
|
|
||||||
|
array_push($ret_arr, $cv);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $ret_arr;
|
||||||
|
}
|
||||||
|
|
||||||
|
static function getLabelCounters($descriptions = false) {
|
||||||
|
|
||||||
|
$ret_arr = array();
|
||||||
|
|
||||||
|
$owner_uid = $_SESSION["uid"];
|
||||||
|
|
||||||
|
$result = db_query("SELECT id,caption,SUM(CASE WHEN u1.unread = true THEN 1 ELSE 0 END) AS unread, COUNT(u1.unread) AS total
|
||||||
|
FROM ttrss_labels2 LEFT JOIN ttrss_user_labels2 ON
|
||||||
|
(ttrss_labels2.id = label_id)
|
||||||
|
LEFT JOIN ttrss_user_entries AS u1 ON u1.ref_id = article_id
|
||||||
|
WHERE ttrss_labels2.owner_uid = $owner_uid AND u1.owner_uid = $owner_uid
|
||||||
|
GROUP BY ttrss_labels2.id,
|
||||||
|
ttrss_labels2.caption");
|
||||||
|
|
||||||
|
while ($line = db_fetch_assoc($result)) {
|
||||||
|
|
||||||
|
$id = Labels::label_to_feed_id($line["id"]);
|
||||||
|
|
||||||
|
$cv = array("id" => $id,
|
||||||
|
"counter" => (int) $line["unread"],
|
||||||
|
"auxcounter" => (int) $line["total"]);
|
||||||
|
|
||||||
|
if ($descriptions)
|
||||||
|
$cv["description"] = $line["caption"];
|
||||||
|
|
||||||
|
array_push($ret_arr, $cv);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $ret_arr;
|
||||||
|
}
|
||||||
|
|
||||||
|
static function getFeedCounters($active_feed = false) {
|
||||||
|
|
||||||
|
$ret_arr = array();
|
||||||
|
|
||||||
|
$query = "SELECT ttrss_feeds.id,
|
||||||
|
ttrss_feeds.title,
|
||||||
|
".SUBSTRING_FOR_DATE."(ttrss_feeds.last_updated,1,19) AS last_updated,
|
||||||
|
last_error, value AS count
|
||||||
|
FROM ttrss_feeds, ttrss_counters_cache
|
||||||
|
WHERE ttrss_feeds.owner_uid = ".$_SESSION["uid"]."
|
||||||
|
AND ttrss_counters_cache.owner_uid = ttrss_feeds.owner_uid
|
||||||
|
AND ttrss_counters_cache.feed_id = id";
|
||||||
|
|
||||||
|
$result = db_query($query);
|
||||||
|
|
||||||
|
while ($line = db_fetch_assoc($result)) {
|
||||||
|
|
||||||
|
$id = $line["id"];
|
||||||
|
$count = $line["count"];
|
||||||
|
$last_error = htmlspecialchars($line["last_error"]);
|
||||||
|
|
||||||
|
$last_updated = make_local_datetime($line['last_updated'], false);
|
||||||
|
|
||||||
|
$has_img = feed_has_icon($id);
|
||||||
|
|
||||||
|
if (date('Y') - date('Y', strtotime($line['last_updated'])) > 2)
|
||||||
|
$last_updated = '';
|
||||||
|
|
||||||
|
$cv = array("id" => $id,
|
||||||
|
"updated" => $last_updated,
|
||||||
|
"counter" => (int) $count,
|
||||||
|
"has_img" => (int) $has_img);
|
||||||
|
|
||||||
|
if ($last_error)
|
||||||
|
$cv["error"] = $last_error;
|
||||||
|
|
||||||
|
// if (get_pref('EXTENDED_FEEDLIST'))
|
||||||
|
// $cv["xmsg"] = getFeedArticles($id)." ".__("total");
|
||||||
|
|
||||||
|
if ($active_feed && $id == $active_feed)
|
||||||
|
$cv["title"] = truncate_string($line["title"], 30);
|
||||||
|
|
||||||
|
array_push($ret_arr, $cv);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return $ret_arr;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -298,7 +298,7 @@ class RPC extends Handler_Protected {
|
||||||
if (!empty($_REQUEST['seq'])) $reply['seq'] = (int) $_REQUEST['seq'];
|
if (!empty($_REQUEST['seq'])) $reply['seq'] = (int) $_REQUEST['seq'];
|
||||||
|
|
||||||
if ($last_article_id != Article::getLastArticleId()) {
|
if ($last_article_id != Article::getLastArticleId()) {
|
||||||
$reply['counters'] = getAllCounters();
|
$reply['counters'] = Counters::getAllCounters();
|
||||||
}
|
}
|
||||||
|
|
||||||
$reply['runtime-info'] = make_runtime_info();
|
$reply['runtime-info'] = make_runtime_info();
|
||||||
|
|
|
@ -1029,208 +1029,10 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getAllCounters() {
|
|
||||||
$data = getGlobalCounters();
|
|
||||||
|
|
||||||
$data = array_merge($data, getVirtCounters());
|
|
||||||
$data = array_merge($data, getLabelCounters());
|
|
||||||
$data = array_merge($data, getFeedCounters());
|
|
||||||
$data = array_merge($data, getCategoryCounters());
|
|
||||||
|
|
||||||
return $data;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getCategoryCounters() {
|
|
||||||
$ret_arr = array();
|
|
||||||
|
|
||||||
/* Labels category */
|
|
||||||
|
|
||||||
$cv = array("id" => -2, "kind" => "cat",
|
|
||||||
"counter" => Feeds::getCategoryUnread(-2));
|
|
||||||
|
|
||||||
array_push($ret_arr, $cv);
|
|
||||||
|
|
||||||
$result = db_query("SELECT id AS cat_id, value AS unread,
|
|
||||||
(SELECT COUNT(id) FROM ttrss_feed_categories AS c2
|
|
||||||
WHERE c2.parent_cat = ttrss_feed_categories.id) AS num_children
|
|
||||||
FROM ttrss_feed_categories, ttrss_cat_counters_cache
|
|
||||||
WHERE ttrss_cat_counters_cache.feed_id = id AND
|
|
||||||
ttrss_cat_counters_cache.owner_uid = ttrss_feed_categories.owner_uid AND
|
|
||||||
ttrss_feed_categories.owner_uid = " . $_SESSION["uid"]);
|
|
||||||
|
|
||||||
while ($line = db_fetch_assoc($result)) {
|
|
||||||
$line["cat_id"] = (int) $line["cat_id"];
|
|
||||||
|
|
||||||
if ($line["num_children"] > 0) {
|
|
||||||
$child_counter = Feeds::getCategoryChildrenUnread($line["cat_id"], $_SESSION["uid"]);
|
|
||||||
} else {
|
|
||||||
$child_counter = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
$cv = array("id" => $line["cat_id"], "kind" => "cat",
|
|
||||||
"counter" => $line["unread"] + $child_counter);
|
|
||||||
|
|
||||||
array_push($ret_arr, $cv);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Special case: NULL category doesn't actually exist in the DB */
|
|
||||||
|
|
||||||
$cv = array("id" => 0, "kind" => "cat",
|
|
||||||
"counter" => (int) CCache::find(0, $_SESSION["uid"], true));
|
|
||||||
|
|
||||||
array_push($ret_arr, $cv);
|
|
||||||
|
|
||||||
return $ret_arr;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getFeedUnread($feed, $is_cat = false) {
|
function getFeedUnread($feed, $is_cat = false) {
|
||||||
return Feeds::getFeedArticles($feed, $is_cat, true, $_SESSION["uid"]);
|
return Feeds::getFeedArticles($feed, $is_cat, true, $_SESSION["uid"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getGlobalCounters($global_unread = -1) {
|
|
||||||
$ret_arr = array();
|
|
||||||
|
|
||||||
if ($global_unread == -1) {
|
|
||||||
$global_unread = Feeds::getGlobalUnread();
|
|
||||||
}
|
|
||||||
|
|
||||||
$cv = array("id" => "global-unread",
|
|
||||||
"counter" => (int) $global_unread);
|
|
||||||
|
|
||||||
array_push($ret_arr, $cv);
|
|
||||||
|
|
||||||
$result = db_query("SELECT COUNT(id) AS fn FROM
|
|
||||||
ttrss_feeds WHERE owner_uid = " . $_SESSION["uid"]);
|
|
||||||
|
|
||||||
$subscribed_feeds = db_fetch_result($result, 0, "fn");
|
|
||||||
|
|
||||||
$cv = array("id" => "subscribed-feeds",
|
|
||||||
"counter" => (int) $subscribed_feeds);
|
|
||||||
|
|
||||||
array_push($ret_arr, $cv);
|
|
||||||
|
|
||||||
return $ret_arr;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getVirtCounters() {
|
|
||||||
|
|
||||||
$ret_arr = array();
|
|
||||||
|
|
||||||
for ($i = 0; $i >= -4; $i--) {
|
|
||||||
|
|
||||||
$count = getFeedUnread($i);
|
|
||||||
|
|
||||||
if ($i == 0 || $i == -1 || $i == -2)
|
|
||||||
$auxctr = Feeds::getFeedArticles($i, false);
|
|
||||||
else
|
|
||||||
$auxctr = 0;
|
|
||||||
|
|
||||||
$cv = array("id" => $i,
|
|
||||||
"counter" => (int) $count,
|
|
||||||
"auxcounter" => (int) $auxctr);
|
|
||||||
|
|
||||||
// if (get_pref('EXTENDED_FEEDLIST'))
|
|
||||||
// $cv["xmsg"] = getFeedArticles($i)." ".__("total");
|
|
||||||
|
|
||||||
array_push($ret_arr, $cv);
|
|
||||||
}
|
|
||||||
|
|
||||||
$feeds = PluginHost::getInstance()->get_feeds(-1);
|
|
||||||
|
|
||||||
if (is_array($feeds)) {
|
|
||||||
foreach ($feeds as $feed) {
|
|
||||||
$cv = array("id" => PluginHost::pfeed_to_feed_id($feed['id']),
|
|
||||||
"counter" => $feed['sender']->get_unread($feed['id']));
|
|
||||||
|
|
||||||
if (method_exists($feed['sender'], 'get_total'))
|
|
||||||
$cv["auxcounter"] = $feed['sender']->get_total($feed['id']);
|
|
||||||
|
|
||||||
array_push($ret_arr, $cv);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $ret_arr;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getLabelCounters($descriptions = false) {
|
|
||||||
|
|
||||||
$ret_arr = array();
|
|
||||||
|
|
||||||
$owner_uid = $_SESSION["uid"];
|
|
||||||
|
|
||||||
$result = db_query("SELECT id,caption,SUM(CASE WHEN u1.unread = true THEN 1 ELSE 0 END) AS unread, COUNT(u1.unread) AS total
|
|
||||||
FROM ttrss_labels2 LEFT JOIN ttrss_user_labels2 ON
|
|
||||||
(ttrss_labels2.id = label_id)
|
|
||||||
LEFT JOIN ttrss_user_entries AS u1 ON u1.ref_id = article_id
|
|
||||||
WHERE ttrss_labels2.owner_uid = $owner_uid AND u1.owner_uid = $owner_uid
|
|
||||||
GROUP BY ttrss_labels2.id,
|
|
||||||
ttrss_labels2.caption");
|
|
||||||
|
|
||||||
while ($line = db_fetch_assoc($result)) {
|
|
||||||
|
|
||||||
$id = Labels::label_to_feed_id($line["id"]);
|
|
||||||
|
|
||||||
$cv = array("id" => $id,
|
|
||||||
"counter" => (int) $line["unread"],
|
|
||||||
"auxcounter" => (int) $line["total"]);
|
|
||||||
|
|
||||||
if ($descriptions)
|
|
||||||
$cv["description"] = $line["caption"];
|
|
||||||
|
|
||||||
array_push($ret_arr, $cv);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $ret_arr;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getFeedCounters($active_feed = false) {
|
|
||||||
|
|
||||||
$ret_arr = array();
|
|
||||||
|
|
||||||
$query = "SELECT ttrss_feeds.id,
|
|
||||||
ttrss_feeds.title,
|
|
||||||
".SUBSTRING_FOR_DATE."(ttrss_feeds.last_updated,1,19) AS last_updated,
|
|
||||||
last_error, value AS count
|
|
||||||
FROM ttrss_feeds, ttrss_counters_cache
|
|
||||||
WHERE ttrss_feeds.owner_uid = ".$_SESSION["uid"]."
|
|
||||||
AND ttrss_counters_cache.owner_uid = ttrss_feeds.owner_uid
|
|
||||||
AND ttrss_counters_cache.feed_id = id";
|
|
||||||
|
|
||||||
$result = db_query($query);
|
|
||||||
|
|
||||||
while ($line = db_fetch_assoc($result)) {
|
|
||||||
|
|
||||||
$id = $line["id"];
|
|
||||||
$count = $line["count"];
|
|
||||||
$last_error = htmlspecialchars($line["last_error"]);
|
|
||||||
|
|
||||||
$last_updated = make_local_datetime($line['last_updated'], false);
|
|
||||||
|
|
||||||
$has_img = feed_has_icon($id);
|
|
||||||
|
|
||||||
if (date('Y') - date('Y', strtotime($line['last_updated'])) > 2)
|
|
||||||
$last_updated = '';
|
|
||||||
|
|
||||||
$cv = array("id" => $id,
|
|
||||||
"updated" => $last_updated,
|
|
||||||
"counter" => (int) $count,
|
|
||||||
"has_img" => (int) $has_img);
|
|
||||||
|
|
||||||
if ($last_error)
|
|
||||||
$cv["error"] = $last_error;
|
|
||||||
|
|
||||||
// if (get_pref('EXTENDED_FEEDLIST'))
|
|
||||||
// $cv["xmsg"] = getFeedArticles($id)." ".__("total");
|
|
||||||
|
|
||||||
if ($active_feed && $id == $active_feed)
|
|
||||||
$cv["title"] = truncate_string($line["title"], 30);
|
|
||||||
|
|
||||||
array_push($ret_arr, $cv);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return $ret_arr;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*function get_pgsql_version() {
|
/*function get_pgsql_version() {
|
||||||
$result = db_query("SELECT version() AS version");
|
$result = db_query("SELECT version() AS version");
|
||||||
|
|
Loading…
Reference in New Issue