示例#1
0
 /**
  * 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;
 }
示例#2
0
 /**
  * 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();
 }
示例#3
0
 /**
  * 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;
     }
 }