summaryrefslogtreecommitdiff
path: root/classes/counters.php
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2017-05-05 11:54:31 +0300
committerAndrew Dolgov <[email protected]>2017-05-05 11:54:31 +0300
commit65af3b2cbba06901612cf721359aea792037cc5a (patch)
tree8a9926a0cc59801bde9d42f5e5c45659d3acf458 /classes/counters.php
parent46b433933e2a8c59810c964b0a889d337758b7a2 (diff)
move counter stuff to a separate class
Diffstat (limited to 'classes/counters.php')
-rw-r--r--classes/counters.php203
1 files changed, 203 insertions, 0 deletions
diff --git a/classes/counters.php b/classes/counters.php
new file mode 100644
index 000000000..c608acf72
--- /dev/null
+++ b/classes/counters.php
@@ -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;
+ }
+
+} \ No newline at end of file