/** * Get tags for a list of IDs * * @param array $ids Bulletin ids * @param integer $admin Admin flag * @return array */ public function getTagsForIds($ids = array(), $admin = 0) { $tt = Tag::blank(); $tj = Object::blank(); if (!is_array($ids) || empty($ids)) { return false; } $ids = array_map('intval', $ids); $sql = "SELECT t.tag, t.raw_tag, t.admin, rt.objectid\n\t\t\t\tFROM " . $tt->getTableName() . " AS t \n\t\t\t\tINNER JOIN " . $tj->getTableName() . " AS rt ON (rt.tagid = t.id) AND rt.tbl='" . $this->_scope . "' \n\t\t\t\tWHERE rt.objectid IN (" . implode(',', $ids) . ") "; switch ($admin) { case 1: $sql .= ""; break; case 0: default: $sql .= "AND t.admin=0 "; break; } $sql .= "ORDER BY raw_tag ASC"; $db = \App::get('db'); $db->setQuery($sql); $tags = array(); if ($items = $db->loadObjectList()) { foreach ($items as $item) { if (!isset($tags[$item->objectid])) { $tags[$item->objectid] = array(); } $tags[$item->objectid][] = $item; } } return $tags; }
/** * Get top publication tags * * @param integer $limit * @return mixed Return description (if any) ... */ public function getTopTags($limit) { $tj = \Components\Tags\Models\Object::blank(); $sql = "SELECT t.tag, t.raw_tag, t.admin, tj.tagid, tj.objectid, COUNT(tj.tagid) AS tcount "; $sql .= "FROM #__tags AS t "; $sql .= "JOIN " . $tj->getTableName() . " AS tj ON t.id=tj.tagid "; $sql .= "LEFT JOIN #__publication_versions AS V ON V.publication_id=tj.objectid AND tj.tbl='publications' "; $sql .= "WHERE t.id=tj.tagid AND t.admin=0 "; $sql .= "AND tj.tbl=" . $this->_db->quote($this->_tbl) . " "; $sql .= "AND V.state=1 AND V.main=1 AND V.access!=4 "; $sql .= "AND V.published_up < " . $this->_db->quote(Date::toSql()) . " "; $sql .= "AND (V.published_down = '0000-00-00 00:00:00' OR V.published_down > " . $this->_db->quote(Date::toSql()) . ") "; $sql .= "GROUP BY tagid "; $sql .= "ORDER BY tcount DESC "; $sql .= "LIMIT {$limit}"; $this->_db->setQuery($sql); return $this->_db->loadObjectList(); }
/** * Get a list of tags * * @param string $rtrn Format of data to return * @param array $filters Filters to apply * @param boolean $clear Clear cached data? * @return mixed */ public function tags($rtrn = '', $filters = array(), $clear = false) { if (!isset($filters['scope']) && $this->get('scope') != 'site') { $filters['scope'] = (string) $this->get('scope'); } if (!isset($filters['scope_id']) && $this->get('scope_id') != 0) { $filters['scope_id'] = (int) $this->get('scope_id'); } $tbl = Object::blank()->getTableName(); $results = Tag::all(); if (isset($filters['sort']) && $filters['sort'] == 'taggedon') { $results->select($tbl . '.taggedon')->join($tbl, $tbl . '.tagid', $results->getTableName() . '.id'); } if (isset($filters['tagger_id']) || isset($filters['scope']) || isset($filters['scope_id']) || isset($filters['label'])) { $results->join($tbl, $tbl . '.tagid', $results->getTableName() . '.id'); if (isset($filters['tagger_id']) && $filters['tagger_id']) { $results->whereEquals($tbl . '.taggerid', (int) $filters['tagger_id']); } if (isset($filters['scope']) && $filters['scope']) { $results->whereEquals($tbl . '.tbl', (string) $filters['scope']); } if (isset($filters['scope_id']) && $filters['scope_id']) { $results->whereEquals($tbl . '.objectid', (int) $filters['scope_id']); } if (isset($filters['label']) && $filters['label']) { $results->whereEquals($tbl . '.label', (string) $filters['label']); // find labeled tags } } if (isset($filters['admin']) && $filters['admin'] !== null) { $results->whereEquals('admin', (int) $filters['admin']); } if (isset($filters['created_by']) && $filters['created_by'] > 0) { $results->whereEquals('created_by', (int) $filters['created_by']); } if (isset($filters['modified_by']) && $filters['modified_by'] > 0) { $results->whereEquals('modified_by', $filters['modified_by']); } if (isset($filters['search']) && $filters['search']) { $filters['search'] = strtolower((string) $filters['search']); $tbl = Substitute::blank()->getTableName(); $results->select($results->getTableName() . '.*')->join($tbl, $tbl . '.tag_id', $results->getTableName() . '.id', 'left'); $results->whereLike($results->getTableName() . '.raw_tag', $filters['search'], 1)->orWhereLike($results->getTableName() . '.tag', $filters['search'], 1)->orWhereLike($tbl . '.raw_tag', $filters['search'], 1)->resetDepth(); } switch (strtolower($rtrn)) { case 'count': if (!isset($this->_cache['tags.count']) || $clear) { $results->select($results->getTableName() . '.id', null, true); $this->_cache['tags.count'] = (int) $results->total(); } return $this->_cache['tags.count']; break; case 'top': break; case 'list': case 'results': default: $results->select($results->getTableName() . '.*')->group($results->getTableName() . '.id'); if (!$this->_cache['tags.list'] || $clear) { if (isset($filters['limit']) && $filters['limit'] != 0 && $filters['limit'] != 'all') { if (!isset($filters['start'])) { $filters['start'] = 0; } $results->limit($filters['limit']); $results->start($filters['start']); } if (isset($filters['sort']) && $filters['sort'] != '') { if ($filters['sort'] == 'total') { $filters['sort'] = 'objects'; } $filters['sort_Dir'] = isset($filters['sort_Dir']) && $filters['sort_Dir'] ? $filters['sort_Dir'] : "ASC"; $results->order($filters['sort'], $filters['sort_Dir']); } $this->_cache['tags.list'] = $results->rows(); } return $this->_cache['tags.list']; break; } }