예제 #1
0
 /**
  * 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;
 }
예제 #2
0
 /**
  * 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();
 }