<?php
namespace App\Entity\Core\Homework;
use App\Entity\Core\Answer;
use App\Entity\Core\Mathproblem;
use DateTime;
use Doctrine\ORM\Mapping as ORM;
use JsonSerializable;
#[ORM\Table('homework_response')]
#[ORM\Entity(repositoryClass: HomeworkResponseRepository::class)]
class HomeworkResponse implements JsonSerializable
{
/**
* @var int
*/
#[ORM\Column(name: 'id', type: 'integer')]
#[ORM\Id]
#[ORM\GeneratedValue(strategy: 'AUTO')]
private $id;
/**
* @var HomeworkUnit
*/
#[ORM\JoinColumn(name: 'homework_unit', referencedColumnName: 'id', onDelete: 'CASCADE')]
#[ORM\ManyToOne(targetEntity: HomeworkUnit::class, inversedBy: 'homeworkResponses')]
private $homeworkUnit;
/**
* @var Mathproblem
*/
#[ORM\JoinColumn(name: 'mathproblem', referencedColumnName: 'id', onDelete: 'CASCADE')]
#[ORM\ManyToOne(targetEntity: Mathproblem::class)]
private $mathproblem;
/**
* @var Answer
*/
#[ORM\JoinColumn(name: 'answer', referencedColumnName: 'id', onDelete: 'RESTRICT')]
#[ORM\ManyToOne(targetEntity: Answer::class)]
private $answerChosen;
/**
* @var DateTime
*/
#[ORM\Column(name: 'end_time', type: 'datetime', nullable: true)]
private $endTime = null;
/**
* @var DateTime
*/
#[ORM\Column(name: 'start_time', type: 'datetime')]
private $startTime;
/**
* @var Answer
*/
#[ORM\JoinColumn(name: 'second_answer', referencedColumnName: 'id', onDelete: 'RESTRICT', nullable: true)]
#[ORM\ManyToOne(targetEntity: Answer::class)]
private $secondAnswer;
/**
* @var string|null
*/
#[ORM\Column(name: 'answer_text', type: 'text', nullable: true)]
private string|null $answerText = null;
/**
* @var string|null
*/
#[ORM\Column(name: 'second_answer_text', type: 'text', nullable: true)]
private string|null $secondAnswerText = null;
/**
* @var int
*/
#[ORM\Column(name: 'seconds_delayed', type: 'integer', nullable: false, options: ['default' => 0])]
private $secondsDelayed;
#[ORM\Column(name: 'repetition_flag', type: 'boolean', nullable: true)]
private $repetitionFlag;
/**
* @var bool
*/
#[ORM\Column(name: 'is_valid', type: 'boolean', nullable: true, options: ['default' => true])]
private $isValid = true;
/**
* @var DateTime
*/
#[ORM\Column(name: 'archived_at', type: 'datetime', nullable: true)]
private $archivedAt;
/**
* Get id.
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set HomeworkUnit.
*
* @param HomeworkUnit $homeworkUnit
*
* @return HomeworkResponse
*/
public function setHomeworkUnit($homeworkUnit)
{
$this->homeworkUnit = $homeworkUnit;
return $this;
}
/**
* Get HomeworkUnit.
*
* @return HomeworkUnit
*/
public function getHomeworkUnit()
{
return $this->homeworkUnit;
}
/**
* Set mathproblem.
*
* @param Mathproblem $mathproblem
*
* @return HomeworkResponse
*/
public function setMathproblem($mathproblem)
{
$this->mathproblem = $mathproblem;
return $this;
}
/**
* Get mathproblem.
*
* @return Mathproblem
*/
public function getMathproblem()
{
return $this->mathproblem;
}
/**
* Set answerChosen.
*
* @param Answer $answerChosen
*
* @return HomeworkResponse
*/
public function setAnswerChosen($answerChosen)
{
$this->answerChosen = $answerChosen;
return $this;
}
/**
* Get answerChosen.
*
* @return Answer
*/
public function getAnswerChosen()
{
return $this->answerChosen;
}
/**
* @param DateTime $endTime
*/
public function setEndTime($endTime)
{
$this->endTime = $endTime;
}
/**
* @return DateTime
*/
public function getEndTime()
{
return $this->endTime;
}
/**
* @param DateTime $startTime
*/
public function setStartTime($startTime)
{
$this->startTime = $startTime;
}
/**
* @return DateTime
*/
public function getStartTime()
{
return $this->startTime;
}
/**
* @return Answer
*/
public function getSecondAnswer()
{
return $this->secondAnswer;
}
/**
* @param Answer $secondAnswer
*/
public function setSecondAnswer($secondAnswer)
{
$this->secondAnswer = $secondAnswer;
}
function getAnswerText(): string|null {
return $this->answerText;
}
/**
* @return $this
*/
function setAnswerText(string $answerText):self {
$this->answerText = $answerText;
return $this;
}
function getSecondAnswerText(): string|null {
return $this->secondAnswerText;
}
/**
* @return $this
*/
function setSecondAnswerText(string $secondAnswerText):self {
$this->secondAnswerText = $secondAnswerText;
return $this;
}
/**
* @return int
*/
public function getSecondsDelayed()
{
return $this->secondsDelayed;
}
/**
* @param int $secondsDelayed
* @return $this
*/
public function setSecondsDelayed($secondsDelayed)
{
$this->secondsDelayed = $secondsDelayed;
return $this;
}
/**
* @return mixed
*/
public function getRepetitionFlag()
{
return $this->repetitionFlag;
}
/**
* @param mixed $repetitionFlag
*/
public function setRepetitionFlag($repetitionFlag)
{
$this->repetitionFlag = $repetitionFlag;
}
public function isValid(): bool
{
return $this->isValid;
}
public function setIsValid(bool $isValid): void
{
$this->isValid = $isValid;
}
/**
* @return DateTime|null
*/
public function getArchivedAt(): ?DateTime
{
return $this->archivedAt;
}
/**
* @param DateTime $archivedAt
*/
public function setArchivedAt(DateTime $archivedAt): void
{
$this->archivedAt = $archivedAt;
}
public function jsonSerialize(): mixed
{
return [
'id' => $this->id,
'answerChosen' => $this->answerChosen,
'mathproblem' => $this->mathproblem,
'startTime' => $this->startTime,
'endTime' => $this->endTime,
'secondAnswer' => $this->secondAnswer,
'archivedAt' => $this->archivedAt,
'homeworkUnit' => $this->homeworkUnit,
'isValid' => $this->isValid,
'repetitionFlag' => $this->repetitionFlag,
'secondsDelayed' => $this->secondsDelayed,
];
}
}