/** * Build a database query * * @param array $filters Options for building the query * @return string SQL */ private function _buildPluginQuery($filters = array()) { $database = App::get('db'); $rt = new \Components\Resources\Tables\Type($database); if (isset($filters['select']) && $filters['select'] == 'count') { if (isset($filters['tags'])) { $query = "SELECT count(f.id) FROM (SELECT r.id, COUNT(DISTINCT t.tagid) AS uniques "; } else { $query = "SELECT count(DISTINCT r.id) "; } } else { $query = "SELECT DISTINCT r.id, r.title, r.alias, r.introtext AS itext, r.fulltxt AS ftext, r.published AS state, r.created, r.created_by, r.modified, r.publish_up, r.publish_down,\n\t\t\t\t\tCONCAT('index.php?option=com_resources&id=', r.id) AS href, 'resources' AS section "; if (isset($filters['tags'])) { $query .= ", COUNT(DISTINCT t.tagid) AS uniques "; } $query .= ", r.params, r.rating AS rcount, r.type AS data1, rt.type AS data2, r.ranking data3 "; } $query .= "FROM #__resources AS r "; $query .= "LEFT JOIN " . $rt->getTableName() . " AS rt ON r.type=rt.id "; if (isset($filters['tag'])) { $query .= ", #__tags_object AS t, #__tags AS tg "; } if (isset($filters['tags'])) { $query .= ", #__tags_object AS t "; } $query .= "WHERE r.standalone=1 "; if (User::isGuest() || isset($filters['authorized']) && !$filters['authorized']) { $query .= "AND r.published=1 AND r.access<4 "; } if (isset($filters['tag'])) { $query .= "AND t.objectid=r.id AND t.tbl='resources' AND t.tagid=tg.id AND (tg.tag='" . $filters['tag'] . "' OR tg.alias='" . $filters['tag'] . "') "; } if (isset($filters['tags'])) { $ids = implode(',', $filters['tags']); $query .= "AND t.objectid=r.id AND t.tbl='resources' AND t.tagid IN (" . $ids . ") "; } if (isset($filters['type']) && $filters['type'] != '') { $query .= "AND r.type=" . $filters['type'] . " "; } if (isset($filters['tags'])) { $query .= " GROUP BY r.id HAVING uniques=" . count($filters['tags']) . " "; } if (isset($filters['select']) && $filters['select'] != 'count') { if (isset($filters['sortby'])) { if (isset($filters['groupby'])) { $query .= "GROUP BY r.id "; } $query .= "ORDER BY "; switch ($filters['sortby']) { case 'title': $query .= 'title ASC, publish_up DESC'; break; case 'rating': $query .= "rating DESC, times_rated DESC"; break; case 'ranking': $query .= "ranking DESC"; break; case 'relevance': $query .= "relevance DESC"; break; case 'users': case 'usage': $query .= "users DESC"; break; case 'jobs': $query .= "jobs DESC"; break; case 'date': default: $query .= 'publish_up DESC'; break; } } if (isset($filters['limit']) && $filters['limit'] != 'all') { $query .= " LIMIT " . $filters['limitstart'] . "," . $filters['limit']; } } if (isset($filters['select']) && $filters['select'] == 'count') { if (isset($filters['tags'])) { $query .= ") AS f"; } } return $query; }
/** * Display module content * * @return void */ public function display() { if (User::isGuest()) { return false; } include_once Component::path('com_resources') . DS . 'tables' . DS . 'resource.php'; include_once Component::path('com_resources') . DS . 'tables' . DS . 'type.php'; $this->steps = array('Type', 'Compose', 'Attach', 'Authors', 'Tags', 'Review'); $database = App::get('db'); $rr = new \Components\Resources\Tables\Resource($database); $rt = new \Components\Resources\Tables\Type($database); $query = "SELECT r.*, t.type AS typetitle\n\t\t\tFROM " . $rr->getTableName() . " AS r\n\t\t\tLEFT JOIN " . $rt->getTableName() . " AS t ON r.type=t.id\n\t\t\tWHERE r.published=2 AND r.standalone=1 AND r.type!=7 AND r.created_by=" . User::get('id'); $database->setQuery($query); $this->rows = $database->loadObjectList(); if ($this->rows) { include_once Component::path('com_resources') . DS . 'tables' . DS . 'assoc.php'; include_once Component::path('com_resources') . DS . 'tables' . DS . 'contributor.php'; include_once Component::path('com_resources') . DS . 'helpers' . DS . 'tags.php'; } require $this->getLayoutPath(); }