216 lines
5.3 KiB
PHP
216 lines
5.3 KiB
PHP
<?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);
|
|
|
|
$pdo = DB::pdo();
|
|
|
|
$sth = $pdo->prepare("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 = ?");
|
|
$sth->execute([$_SESSION['uid']]);
|
|
|
|
while ($line = $sth->fetch()) {
|
|
$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);
|
|
|
|
$pdo = Db::pdo();
|
|
|
|
$sth = $pdo->prepare("SELECT COUNT(id) AS fn FROM
|
|
ttrss_feeds WHERE owner_uid = ?");
|
|
$sth->execute([$_SESSION['uid']]);
|
|
$row = $sth->fetch();
|
|
|
|
$subscribed_feeds = $row["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();
|
|
|
|
$pdo = Db::pdo();
|
|
|
|
$sth = $pdo->prepare("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 = :uid AND u1.owner_uid = :uid
|
|
GROUP BY ttrss_labels2.id,
|
|
ttrss_labels2.caption");
|
|
$sth->execute([":uid" => $_SESSION['uid']]);
|
|
|
|
while ($line = $sth->fetch()) {
|
|
|
|
$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();
|
|
|
|
$pdo = Db::pdo();
|
|
|
|
$sth = $pdo->prepare("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 = ?
|
|
AND ttrss_counters_cache.owner_uid = ttrss_feeds.owner_uid
|
|
AND ttrss_counters_cache.feed_id = id");
|
|
$sth->execute([$_SESSION['uid']]);
|
|
|
|
while ($line = $sth->fetch()) {
|
|
|
|
$id = $line["id"];
|
|
$count = $line["count"];
|
|
$last_error = htmlspecialchars($line["last_error"]);
|
|
|
|
$last_updated = make_local_datetime($line['last_updated'], false);
|
|
|
|
if (Feeds::feedHasIcon($id)) {
|
|
$has_img = filemtime(Feeds::getIconFile($id));
|
|
} else {
|
|
$has_img = false;
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
} |