Add multi-variant test sets
This commit is contained in:
@@ -9,6 +9,8 @@ use Joomla\CMS\MVC\Model\BaseDatabaseModel;
|
||||
|
||||
class SetModel extends BaseDatabaseModel
|
||||
{
|
||||
protected $resolvedSetId;
|
||||
|
||||
protected function getSetId(): int
|
||||
{
|
||||
$application = Factory::getApplication();
|
||||
@@ -27,20 +29,46 @@ class SetModel extends BaseDatabaseModel
|
||||
return null;
|
||||
}
|
||||
|
||||
return $db->setQuery(
|
||||
$set = $db->setQuery(
|
||||
$db->getQuery(true)
|
||||
->select(['s.*', 'sub.title AS subject_title'])
|
||||
->from($db->quoteName('#__testquestions_sets', 's'))
|
||||
->leftJoin($db->quoteName('#__testquestions_subjects', 'sub') . ' ON sub.id = s.subject_id')
|
||||
->where('s.id = ' . $setId)
|
||||
->where('s.parent_id = 0')
|
||||
->where('s.published = 1')
|
||||
)->loadObject();
|
||||
|
||||
if (!$set) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$this->resolvedSetId = $setId;
|
||||
|
||||
if ($set->set_type === 'multi') {
|
||||
$variantId = (int) $db->setQuery(
|
||||
$db->getQuery(true)
|
||||
->select('id')
|
||||
->from($db->quoteName('#__testquestions_sets'))
|
||||
->where('parent_id = ' . $setId)
|
||||
->where('published = 1')
|
||||
->order('RAND()')
|
||||
->setLimit(1)
|
||||
)->loadResult();
|
||||
|
||||
$this->resolvedSetId = $variantId;
|
||||
}
|
||||
|
||||
return $set;
|
||||
}
|
||||
|
||||
public function getItems()
|
||||
{
|
||||
$db = Factory::getContainer()->get('DatabaseDriver');
|
||||
$setId = $this->getSetId();
|
||||
if ($this->resolvedSetId === null) {
|
||||
$this->getSet();
|
||||
}
|
||||
$setId = (int) $this->resolvedSetId;
|
||||
|
||||
if ($setId < 1) {
|
||||
return [];
|
||||
@@ -67,6 +95,7 @@ class SetModel extends BaseDatabaseModel
|
||||
->from($db->quoteName('#__testquestions_sets', 's'))
|
||||
->leftJoin($db->quoteName('#__testquestions_subjects', 'sub') . ' ON sub.id = s.subject_id')
|
||||
->where('s.published = 1')
|
||||
->where('s.parent_id = 0')
|
||||
->order('sub.title ASC, s.title ASC')
|
||||
)->loadObjectList();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user