setState('filter.search', $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search', '', 'string')); $this->setState('filter.published', $this->getUserStateFromRequest($this->context . '.filter.published', 'filter_published', '', 'string')); $this->setState('filter.subject_id', $this->getUserStateFromRequest($this->context . '.filter.subject_id', 'filter_subject_id', '', 'int')); } protected function getListQuery() { $db = Factory::getContainer()->get('DatabaseDriver'); $query = $db->getQuery(true) ->select(['s.*', 'sub.title AS subject_title', 'COUNT(sq.question_id) AS question_count']) ->from($db->quoteName('#__testquestions_sets', 's')) ->leftJoin($db->quoteName('#__testquestions_subjects', 'sub') . ' ON sub.id = s.subject_id') ->leftJoin($db->quoteName('#__testquestions_set_questions', 'sq') . ' ON sq.set_id = s.id') ->group('s.id'); $search = trim((string) $this->getState('filter.search')); if ($search !== '') { $query->where('s.title LIKE ' . $db->quote('%' . $db->escape($search, true) . '%', false)); } $published = $this->getState('filter.published'); if ($published !== '' && $published !== null) { $query->where('s.published = ' . (int) $published); } if ((int) $this->getState('filter.subject_id') > 0) { $query->where('s.subject_id = ' . (int) $this->getState('filter.subject_id')); } return $query->order('s.ordering ASC, s.title ASC'); } public function getSubjects() { $db = Factory::getContainer()->get('DatabaseDriver'); return $db->setQuery( $db->getQuery(true) ->select(['id', 'title']) ->from($db->quoteName('#__testquestions_subjects')) ->where($db->quoteName('published') . ' = 1') ->order($db->quoteName('title') . ' ASC') )->loadObjectList(); } }