/**
  * Compiles a list of installed or defined modules
  * @param database A database connector object
  */
 function viewContent()
 {
     global $mainframe;
     // Initialize variables
     $db =& JFactory::getDBO();
     $filter = null;
     // Get some variables from the request
     $sectionid = JRequest::getVar('sectionid', -1, '', 'int');
     $redirect = $sectionid;
     $option = JRequest::getCmd('option');
     $context = 'com_content.viewcontent';
     $filter_order = $mainframe->getUserStateFromRequest($context . 'filter_order', 'filter_order', '', 'cmd');
     $filter_order_Dir = $mainframe->getUserStateFromRequest($context . 'filter_order_Dir', 'filter_order_Dir', '', 'word');
     $filter_state = $mainframe->getUserStateFromRequest($context . 'filter_state', 'filter_state', '', 'word');
     $catid = $mainframe->getUserStateFromRequest($context . 'catid', 'catid', 0, 'int');
     $filter_authorid = $mainframe->getUserStateFromRequest($context . 'filter_authorid', 'filter_authorid', 0, 'int');
     $filter_sectionid = $mainframe->getUserStateFromRequest($context . 'filter_sectionid', 'filter_sectionid', -1, 'int');
     $search = $mainframe->getUserStateFromRequest($context . 'search', 'search', '', 'string');
     if (strpos($search, '"') !== false) {
         $search = str_replace(array('=', '<'), '', $search);
     }
     $search = JString::strtolower($search);
     $limit = $mainframe->getUserStateFromRequest('global.list.limit', 'limit', $mainframe->getCfg('list_limit'), 'int');
     $limitstart = $mainframe->getUserStateFromRequest($context . 'limitstart', 'limitstart', 0, 'int');
     // In case limit has been changed, adjust limitstart accordingly
     $limitstart = $limit != 0 ? floor($limitstart / $limit) * $limit : 0;
     //$where[] = "c.state >= 0";
     $where[] = 'c.state != -2';
     // ensure we have a valid value for filter_order
     if (!in_array($filter_order, array('c.title', 'c.state', 'frontpage', 'c.ordering', 'groupname', 'section_name', 'cc.title', 'author', 'c.created', 'c.hits', 'c.id'))) {
         $filter_order = 'section_name';
     }
     if ($filter_order == 'c.ordering') {
         $order = ' ORDER BY section_name, cc.title, c.ordering ' . $filter_order_Dir;
     } else {
         $order = ' ORDER BY ' . $filter_order . ' ' . $filter_order_Dir . ', section_name, cc.title, c.ordering';
     }
     $all = 1;
     if ($filter_sectionid >= 0) {
         $filter = ' WHERE cc.section = ' . (int) $filter_sectionid;
     }
     $section->title = 'All Articles';
     $section->id = 0;
     /*
      * Add the filter specific information to the where clause
      */
     // Section filter
     if ($filter_sectionid >= 0) {
         $where[] = 'c.sectionid = ' . (int) $filter_sectionid;
     }
     // Category filter
     if ($catid > 0) {
         $where[] = 'c.catid = ' . (int) $catid;
     }
     // Author filter
     if ($filter_authorid > 0) {
         $where[] = 'c.created_by = ' . (int) $filter_authorid;
     }
     // Content state filter
     if ($filter_state) {
         if ($filter_state == 'P') {
             $where[] = 'c.state = 1';
         } else {
             if ($filter_state == 'U') {
                 $where[] = 'c.state = 0';
             } else {
                 if ($filter_state == 'A') {
                     $where[] = 'c.state = -1';
                 } else {
                     $where[] = 'c.state != -2';
                 }
             }
         }
     }
     // Keyword filter
     if ($search) {
         $where[] = '(LOWER( c.title ) LIKE ' . $db->Quote('%' . $db->getEscaped($search, true) . '%', false) . ' OR c.id = ' . (int) $search . ')';
     }
     // Build the where clause of the content record query
     $where = count($where) ? ' WHERE ' . implode(' AND ', $where) : '';
     // Get the total number of records
     $query = 'SELECT COUNT(*)' . ' FROM #__content AS c' . ' LEFT JOIN #__categories AS cc ON cc.id = c.catid' . ' LEFT JOIN #__sections AS s ON s.id = c.sectionid' . $where;
     $db->setQuery($query);
     $total = $db->loadResult();
     // Create the pagination object
     jimport('joomla.html.pagination');
     $pagination = new JPagination($total, $limitstart, $limit);
     // Get the articles
     $query = 'SELECT c.*, g.name AS groupname, cc.title AS name, u.name AS editor, f.content_id AS frontpage, s.title AS section_name, v.name AS author' . ' FROM #__content AS c' . ' LEFT JOIN #__categories AS cc ON cc.id = c.catid' . ' LEFT JOIN #__sections AS s ON s.id = c.sectionid' . ' LEFT JOIN #__groups AS g ON g.id = c.access' . ' LEFT JOIN #__users AS u ON u.id = c.checked_out' . ' LEFT JOIN #__users AS v ON v.id = c.created_by' . ' LEFT JOIN #__content_frontpage AS f ON f.content_id = c.id' . $where . $order;
     $db->setQuery($query, $pagination->limitstart, $pagination->limit);
     $rows = $db->loadObjectList();
     // If there is a database query error, throw a HTTP 500 and exit
     if ($db->getErrorNum()) {
         JError::raiseError(500, $db->stderr());
         return false;
     }
     // get list of categories for dropdown filter
     $query = 'SELECT cc.id AS value, cc.title AS text, section' . ' FROM #__categories AS cc' . ' INNER JOIN #__sections AS s ON s.id = cc.section ' . $filter . ' ORDER BY s.ordering, cc.ordering';
     $lists['catid'] = ContentHelper::filterCategory($query, $catid);
     // get list of sections for dropdown filter
     $javascript = 'onchange="document.adminForm.submit();"';
     $lists['sectionid'] = JHTML::_('list.section', 'filter_sectionid', $filter_sectionid, $javascript);
     // get list of Authors for dropdown filter
     $query = 'SELECT c.created_by, u.name' . ' FROM #__content AS c' . ' INNER JOIN #__sections AS s ON s.id = c.sectionid' . ' LEFT JOIN #__users AS u ON u.id = c.created_by' . ' WHERE c.state <> -1' . ' AND c.state <> -2' . ' GROUP BY u.name' . ' ORDER BY u.name';
     $authors[] = JHTML::_('select.option', '0', '- ' . JText::_('Select Author') . ' -', 'created_by', 'name');
     $db->setQuery($query);
     $authors = array_merge($authors, $db->loadObjectList());
     $lists['authorid'] = JHTML::_('select.genericlist', $authors, 'filter_authorid', 'class="inputbox" size="1" onchange="document.adminForm.submit( );"', 'created_by', 'name', $filter_authorid);
     // state filter
     $lists['state'] = JHTML::_('grid.state', $filter_state, 'Published', 'Unpublished', 'Archived');
     // table ordering
     $lists['order_Dir'] = $filter_order_Dir;
     $lists['order'] = $filter_order;
     // search filter
     $lists['search'] = $search;
     ContentView::showContent($rows, $lists, $pagination, $redirect);
 }