SpreadQuiz/class/TaskFactory.php
2025-10-11 18:11:21 +02:00

50 lines
1.3 KiB
PHP

<?php
require_once "Tasks/SingleChoiceTask.php";
require_once "Tasks/OpenEndedTask.php";
require_once "Tasks/NumberConversionTask.php";
require_once "Tasks/TruthTableTask.php";
require_once "Tasks/VerilogTask.php";
class TaskFactory
{
static function fromArray(array $a, Game|Test|null &$governor = null): Task|null
{
$type = $a["type"] ?? "singlechoice"; // if the type is missing, then it's a single choice task
switch ($type) {
case "singlechoice":
$task = new SingleChoiceTask($a);
break;
case "openended":
$task = new OpenEndedTask($a);
break;
case "numberconversion":
$task = new NumberConversionTask($a);
break;
case "truthtable":
$task = new TruthTableTask($a);
break;
case "verilog":
$task = new VerilogTask($a);
break;
default:
return null;
}
$task->setGovernor($governor);
return $task;
}
static function constructFromCollection(array $c, Game|Test|null &$governor = null): array
{
$chgs = [];
foreach ($c as $ch) {
$chgs[] = TaskFactory::fromArray($ch, $governor);
}
return $chgs;
}
}