summaryrefslogtreecommitdiff
path: root/classes/counters.php
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2021-02-24 15:07:31 +0300
committerAndrew Dolgov <[email protected]>2021-02-24 15:07:31 +0300
commit553548b6897f8ef292ab56af9dcc196ef8ee0cb3 (patch)
treefeae3a51d884e216d4d460634024ef7884227b14 /classes/counters.php
parent9313ebf2e745731263a8e24d19473adb70dfee47 (diff)
request label counters conditionally
Diffstat (limited to 'classes/counters.php')
-rw-r--r--classes/counters.php107
1 files changed, 66 insertions, 41 deletions
diff --git a/classes/counters.php b/classes/counters.php
index 1c75e009e..b4602825c 100644
--- a/classes/counters.php
+++ b/classes/counters.php
@@ -11,13 +11,14 @@ class Counters {
);
}
- static function get_for_feeds($feed_ids) {
+ static function get_conditional(array $feed_ids = null, array $label_ids = null) {
return array_merge(
self::get_global(),
self::get_virt(),
- self::get_labels(),
+ self::get_labels($label_ids),
self::get_feeds($feed_ids),
- self::get_cats(Feeds::_cats_of($feed_ids, $_SESSION["uid"], true)));
+ self::get_cats(is_array($feed_ids) ? Feeds::_cats_of($feed_ids, $_SESSION["uid"], true) : null)
+ );
}
static private function get_cat_children($cat_id, $owner_uid) {
@@ -40,7 +41,7 @@ class Counters {
return [$unread, $marked];
}
- private static function get_cats(array $cat_ids = []) {
+ private static function get_cats(array $cat_ids = null) {
$ret = [];
/* Labels category */
@@ -52,7 +53,12 @@ class Counters {
$pdo = Db::pdo();
- if (count($cat_ids) == 0) {
+ if (is_array($cat_ids)) {
+ if (count($cat_ids) == 0)
+ return [];
+
+ $cat_ids_qmarks = arr_qmarks($cat_ids);
+
$sth = $pdo->prepare("SELECT fc.id,
SUM(CASE WHEN unread THEN 1 ELSE 0 END) AS count,
SUM(CASE WHEN marked THEN 1 ELSE 0 END) AS count_marked,
@@ -61,7 +67,7 @@ class Counters {
FROM ttrss_feed_categories fc
LEFT JOIN ttrss_feeds f ON (f.cat_id = fc.id)
LEFT JOIN ttrss_user_entries ue ON (ue.feed_id = f.id)
- WHERE fc.owner_uid = :uid
+ WHERE fc.owner_uid = ? AND fc.id IN ($cat_ids_qmarks)
GROUP BY fc.id
UNION
SELECT 0,
@@ -71,12 +77,15 @@ class Counters {
FROM ttrss_feeds f, ttrss_user_entries ue
WHERE f.cat_id IS NULL AND
ue.feed_id = f.id AND
- ue.owner_uid = :uid");
+ ue.owner_uid = ?");
- $sth->execute(["uid" => $_SESSION['uid']]);
- } else {
- $cat_ids_qmarks = arr_qmarks($cat_ids);
+ $sth->execute(array_merge(
+ [$_SESSION['uid']],
+ $cat_ids,
+ [$_SESSION['uid']]
+ ));
+ } else {
$sth = $pdo->prepare("SELECT fc.id,
SUM(CASE WHEN unread THEN 1 ELSE 0 END) AS count,
SUM(CASE WHEN marked THEN 1 ELSE 0 END) AS count_marked,
@@ -85,7 +94,7 @@ class Counters {
FROM ttrss_feed_categories fc
LEFT JOIN ttrss_feeds f ON (f.cat_id = fc.id)
LEFT JOIN ttrss_user_entries ue ON (ue.feed_id = f.id)
- WHERE fc.owner_uid = ? AND fc.id IN ($cat_ids_qmarks)
+ WHERE fc.owner_uid = :uid
GROUP BY fc.id
UNION
SELECT 0,
@@ -95,13 +104,9 @@ class Counters {
FROM ttrss_feeds f, ttrss_user_entries ue
WHERE f.cat_id IS NULL AND
ue.feed_id = f.id AND
- ue.owner_uid = ?");
+ ue.owner_uid = :uid");
- $sth->execute(array_merge(
- [$_SESSION['uid']],
- $cat_ids,
- [$_SESSION['uid']]
- ));
+ $sth->execute(["uid" => $_SESSION['uid']]);
}
while ($line = $sth->fetch()) {
@@ -125,13 +130,18 @@ class Counters {
return $ret;
}
- private static function get_feeds(array $feed_ids = []) {
+ private static function get_feeds(array $feed_ids = null) {
$ret = [];
$pdo = Db::pdo();
- if (count($feed_ids) == 0) {
+ if (is_array($feed_ids)) {
+ if (count($feed_ids) == 0)
+ return [];
+
+ $feed_ids_qmarks = arr_qmarks($feed_ids);
+
$sth = $pdo->prepare("SELECT f.id,
f.title,
".SUBSTRING_FOR_DATE."(f.last_updated,1,19) AS last_updated,
@@ -139,13 +149,11 @@ class Counters {
SUM(CASE WHEN unread THEN 1 ELSE 0 END) AS count,
SUM(CASE WHEN marked THEN 1 ELSE 0 END) AS count_marked
FROM ttrss_feeds f, ttrss_user_entries ue
- WHERE f.id = ue.feed_id AND ue.owner_uid = :uid
+ WHERE f.id = ue.feed_id AND ue.owner_uid = ? AND f.id IN ($feed_ids_qmarks)
GROUP BY f.id");
- $sth->execute(["uid" => $_SESSION['uid']]);
+ $sth->execute(array_merge([$_SESSION['uid']], $feed_ids));
} else {
- $feed_ids_qmarks = arr_qmarks($feed_ids);
-
$sth = $pdo->prepare("SELECT f.id,
f.title,
".SUBSTRING_FOR_DATE."(f.last_updated,1,19) AS last_updated,
@@ -153,10 +161,10 @@ class Counters {
SUM(CASE WHEN unread THEN 1 ELSE 0 END) AS count,
SUM(CASE WHEN marked THEN 1 ELSE 0 END) AS count_marked
FROM ttrss_feeds f, ttrss_user_entries ue
- WHERE f.id = ue.feed_id AND ue.owner_uid = ? AND f.id IN ($feed_ids_qmarks)
+ WHERE f.id = ue.feed_id AND ue.owner_uid = :uid
GROUP BY f.id");
- $sth->execute(array_merge([$_SESSION['uid']], $feed_ids));
+ $sth->execute(["uid" => $_SESSION['uid']]);
}
while ($line = $sth->fetch()) {
@@ -269,23 +277,42 @@ class Counters {
return $ret;
}
- static function get_labels($descriptions = false) {
+ static function get_labels(array $label_ids = null) {
$ret = [];
$pdo = Db::pdo();
- $sth = $pdo->prepare("SELECT id,
- caption,
- SUM(CASE WHEN u1.unread = true THEN 1 ELSE 0 END) AS count_unread,
- SUM(CASE WHEN u1.marked = true THEN 1 ELSE 0 END) AS count_marked,
- 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 AND u1.owner_uid = :uid
- WHERE ttrss_labels2.owner_uid = :uid
- GROUP BY ttrss_labels2.id, ttrss_labels2.caption");
- $sth->execute([":uid" => $_SESSION['uid']]);
+ if (is_array($label_ids)) {
+ if (count($label_ids) == 0)
+ return [];
+
+ $label_ids_qmarks = arr_qmarks($label_ids);
+
+ $sth = $pdo->prepare("SELECT id,
+ caption,
+ SUM(CASE WHEN u1.unread = true THEN 1 ELSE 0 END) AS count_unread,
+ SUM(CASE WHEN u1.marked = true THEN 1 ELSE 0 END) AS count_marked,
+ 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 AND u1.owner_uid = ?
+ WHERE ttrss_labels2.owner_uid = ? AND ttrss_labels2.id IN ($label_ids_qmarks)
+ GROUP BY ttrss_labels2.id, ttrss_labels2.caption");
+ $sth->execute(array_merge([$_SESSION["uid"], $_SESSION["uid"]], $label_ids));
+ } else {
+ $sth = $pdo->prepare("SELECT id,
+ caption,
+ SUM(CASE WHEN u1.unread = true THEN 1 ELSE 0 END) AS count_unread,
+ SUM(CASE WHEN u1.marked = true THEN 1 ELSE 0 END) AS count_marked,
+ 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 AND u1.owner_uid = :uid
+ WHERE ttrss_labels2.owner_uid = :uid
+ GROUP BY ttrss_labels2.id, ttrss_labels2.caption");
+ $sth->execute([":uid" => $_SESSION['uid']]);
+ }
while ($line = $sth->fetch()) {
@@ -295,12 +322,10 @@ class Counters {
"id" => $id,
"counter" => (int) $line["count_unread"],
"auxcounter" => (int) $line["total"],
- "markedcounter" => (int) $line["count_marked"]
+ "markedcounter" => (int) $line["count_marked"],
+ "description" => $line["caption"]
];
- if ($descriptions)
- $cv["description"] = $line["caption"];
-
array_push($ret, $cv);
}