Initial Joomla test questions component

This commit is contained in:
Wojtek
2026-10-14 22:29:10 +02:00
commit 9b093b278d
44 changed files with 964 additions and 0 deletions
@@ -0,0 +1,22 @@
<?php
namespace Komponent\Component\Testquestions\Administrator\Table;
defined('_JEXEC') or die;
use Joomla\CMS\Table\Table;
use Joomla\Database\DatabaseDriver;
class CategoryTable extends Table
{
public function __construct(DatabaseDriver $db)
{
parent::__construct('#__testquestions_categories', 'id', $db);
}
public function check($updateNulls = false): bool
{
$this->title = trim((string) $this->title);
return $this->title !== '' && parent::check($updateNulls);
}
}
@@ -0,0 +1,60 @@
<?php
namespace Komponent\Component\Testquestions\Administrator\Table;
defined('_JEXEC') or die;
use Joomla\CMS\Table\Table;
use Joomla\Database\DatabaseDriver;
class QuestionTable extends Table
{
public function __construct(DatabaseDriver $db)
{
parent::__construct('#__testquestions_questions', 'id', $db);
}
public function check($updateNulls = false): bool
{
$this->category_id = (int) $this->category_id ?: 1;
$this->time_limit = (int) $this->time_limit;
$this->points = (int) $this->points;
if (!in_array($this->time_limit, [30, 45, 60, 90], true) || $this->points < 1 || $this->points > 9) {
$this->setError('COM_TESTQUESTIONS_ERROR_META');
return false;
}
$this->question_type = $this->question_type ?: 'closed';
if (!in_array($this->question_type, ['closed', 'open'], true)) {
$this->setError('COM_TESTQUESTIONS_ERROR_QUESTION_TYPE');
return false;
}
if ($this->question_type === 'open') {
if (trim((string) $this->answer_open) === '') {
$this->setError('COM_TESTQUESTIONS_ERROR_OPEN_PATTERN');
return false;
}
$this->correct_answer = 0;
} else {
foreach (['answer_a', 'answer_b', 'answer_c', 'answer_d'] as $answer) {
if (trim((string) $this->$answer) === '') {
$this->setError('COM_TESTQUESTIONS_ERROR_ALL_ANSWERS');
return false;
}
}
}
$this->correct_answer = (int) $this->correct_answer;
if ($this->question_type === 'closed' && ($this->correct_answer < 1 || $this->correct_answer > 4)) {
$this->setError('COM_TESTQUESTIONS_ERROR_CORRECT_ANSWER');
return false;
}
return parent::check($updateNulls);
}
}