Add multi-variant test sets

This commit is contained in:
Wojtek
2026-10-16 10:12:26 +02:00
parent 6ff21ef245
commit 8cc1862178
13 changed files with 176 additions and 7 deletions
@@ -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();
}