From dcf9d851e789a8ceeee59d288d72a8122db34044 Mon Sep 17 00:00:00 2001 From: Bogdan Abaev Date: Wed, 14 Jun 2023 14:42:31 -0400 Subject: [PATCH] collections/:key/tags endpoint includes tags of items' children Fixes: #103 --- model/Collection.inc.php | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/model/Collection.inc.php b/model/Collection.inc.php index e51af75f..96aab15e 100644 --- a/model/Collection.inc.php +++ b/model/Collection.inc.php @@ -614,12 +614,24 @@ public function getTags($asIDs=false) { /* - * Returns an array keyed by tagID with the number of linked items for each tag + * Returns an array keyed by tagID with the number of linked items, including their children, for each tag * in this collection */ public function getTagItemCounts() { - $sql = "SELECT tagID, COUNT(*) AS numItems FROM tags JOIN itemTags USING (tagID) - JOIN collectionItems USING (itemID) WHERE collectionID=? GROUP BY tagID"; + $sql = 'SELECT tagID, COUNT(*) AS numItems + FROM tags + JOIN ( + SELECT itemID, tagID FROM itemTags + UNION ALL + SELECT sourceItemID AS itemID, tagID FROM itemTags + JOIN itemAttachments ON itemTags.itemID = itemAttachments.itemID + UNION ALL + SELECT sourceItemID AS itemID, tagID FROM itemTags + JOIN itemNotes ON itemTags.itemID = itemNotes.itemID + ) combinedTags USING (tagID) + JOIN collectionItems USING (itemID) + WHERE collectionID = ? + GROUP BY tagID'; $rows = Zotero_DB::query($sql, $this->id, Zotero_Shards::getByLibraryID($this->libraryID)); if (!$rows) { return false;