<?php
namespace App\Entity\Gos;
use App\Repository\Gos\CancellationQuestionChoiceRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass=CancellationQuestionChoiceRepository::class)
*/
class CancellationQuestionChoice
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
*/
private $name;
/**
* @ORM\ManyToOne(targetEntity=CancellationQuestion::class, inversedBy="cancellationQuestionChoices")
* @ORM\JoinColumn(nullable=false)
*/
private $cancellationQuestion;
/**
* @ORM\OneToMany(targetEntity=CancellationQuestion::class, mappedBy="parentCancellationQuestionChoice")
*/
private $cancellationSubquestions;
/**
* @ORM\Column(type="array", nullable=true)
*/
private $specificProductTypeNames = [];
/**
* @ORM\Column(type="array", nullable=true)
*/
private $specificProductTypesVisibility = [];
/**
* @ORM\Column(type="integer")
*/
private $position;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $subquestionInfo;
/**
* @ORM\OneToMany(targetEntity=CancellationQuestion::class, mappedBy="additionalQuestionForChoice")
*/
private $additionalCancellationQuestions;
/**
* @ORM\ManyToOne(targetEntity=CancellationEmailContent::class, cascade={"persist", "remove"})
*/
private $cancellationEmailContent;
/**
* @ORM\ManyToOne(targetEntity=CancellationQuestionChoiceAction::class, cascade={"persist", "remove"})
*/
private $cancellationQuestionChoiceAction;
public function __construct()
{
$this->cancellationSubquestions = new ArrayCollection();
$this->additionalCancellationQuestions = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getName(): ?string
{
return $this->name;
}
public function setName(?string $name): self
{
$this->name = $name;
return $this;
}
public function getCancellationQuestion(): ?CancellationQuestion
{
return $this->cancellationQuestion;
}
public function setCancellationQuestion(?CancellationQuestion $cancellationQuestion): self
{
$this->cancellationQuestion = $cancellationQuestion;
if ($cancellationQuestion !== null) {
$position = $cancellationQuestion->getCancellationQuestionChoices()->count() + 1;
$this->setPosition($position);
}
return $this;
}
/**
* @return Collection|CancellationQuestion[]
*/
public function getCancellationSubquestions(): Collection
{
return $this->cancellationSubquestions;
}
/**
* @return CancellationQuestion[]
*/
public function getSortedCancellationSubquestions(): array
{
$questions = $this->getCancellationSubquestions()->toArray();
usort($questions, static function($a, $b) {
return $a->getPosition() <=> $b->getPosition();
});
return $questions;
}
public function addCancellationSubquestion(CancellationQuestion $cancellationSubquestion): self
{
if (!$this->cancellationSubquestions->contains($cancellationSubquestion)) {
$this->cancellationSubquestions[] = $cancellationSubquestion;
$cancellationSubquestion->setParentCancellationQuestionChoice($this);
}
return $this;
}
public function removeCancellationSubquestion(CancellationQuestion $cancellationSubquestion): self
{
if ($this->cancellationSubquestions->contains($cancellationSubquestion)) {
$this->cancellationSubquestions->removeElement($cancellationSubquestion);
// set the owning side to null (unless already changed)
if ($cancellationSubquestion->getParentCancellationQuestionChoice() === $this) {
$cancellationSubquestion->setParentCancellationQuestionChoice(null);
}
}
return $this;
}
public function getCancellationForm(): CancellationForm
{
return
$this->getCancellationQuestion()->getCancellationForm() ??
($this->getCancellationQuestion()->getParentCancellationQuestionChoice() ?
$this->getCancellationQuestion()->getParentCancellationQuestionChoice()->getCancellationForm() :
$this->getCancellationQuestion()->getAdditionalQuestionForChoice()->getCancellationForm()
);
}
public function getSpecificProductTypeNames(): ?array
{
return $this->specificProductTypeNames;
}
public function setSpecificProductTypeNames(?array $specificProductTypeNames): self
{
$this->specificProductTypeNames = $specificProductTypeNames;
return $this;
}
public function getBaseCancellationForm(): ?CancellationForm
{
return $this->getCancellationQuestion()->getBaseCancellationForm();
}
public function getTreeArrayInfo(array $infoArray = []): array
{
$infoArray[] = 'Opcja '. $this->getName();
return $this->getCancellationQuestion()->getTreeArrayInfo($infoArray);
}
public function getSpecificProductTypesVisibility(): ?array
{
return $this->specificProductTypesVisibility;
}
public function setSpecificProductTypesVisibility(?array $specificProductTypesVisibility): self
{
$this->specificProductTypesVisibility = $specificProductTypesVisibility;
return $this;
}
public function getPosition(): ?int
{
return $this->position;
}
public function setPosition(int $position): self
{
$this->position = $position;
return $this;
}
public function getSubquestionInfo(): ?string
{
return $this->subquestionInfo;
}
public function setSubquestionInfo(?string $subquestionInfo): self
{
$this->subquestionInfo = $subquestionInfo;
return $this;
}
/**
* @return Collection|CancellationQuestion[]
*/
public function getAdditionalCancellationQuestions(): Collection
{
return $this->additionalCancellationQuestions;
}
/**
* @return CancellationQuestion[]
*/
public function getSortedAdditionalCancellationQuestions(): array
{
$questions = $this->getAdditionalCancellationQuestions()->toArray();
usort($questions, static function($a, $b) {
return $a->getPosition() <=> $b->getPosition();
});
return $questions;
}
public function addAdditionalCancellationQuestion(CancellationQuestion $additionalCancellationQuestion): self
{
if (!$this->additionalCancellationQuestions->contains($additionalCancellationQuestion)) {
$this->additionalCancellationQuestions[] = $additionalCancellationQuestion;
$additionalCancellationQuestion->setAdditionalQuestionForChoice($this);
}
return $this;
}
public function removeAdditionalCancellationQuestion(CancellationQuestion $additionalCancellationQuestion): self
{
if ($this->additionalCancellationQuestions->contains($additionalCancellationQuestion)) {
$this->additionalCancellationQuestions->removeElement($additionalCancellationQuestion);
// set the owning side to null (unless already changed)
if ($additionalCancellationQuestion->getAdditionalQuestionForChoice() === $this) {
$additionalCancellationQuestion->setAdditionalQuestionForChoice(null);
}
}
return $this;
}
public function getCancellationEmailContent(): ?CancellationEmailContent
{
return $this->cancellationEmailContent;
}
public function setCancellationEmailContent(?CancellationEmailContent $cancellationEmailContent): self
{
$this->cancellationEmailContent = $cancellationEmailContent;
return $this;
}
public function getCancellationQuestionChoiceAction(): ?CancellationQuestionChoiceAction
{
return $this->cancellationQuestionChoiceAction;
}
public function setCancellationQuestionChoiceAction(?CancellationQuestionChoiceAction $cancellationQuestionChoiceAction): self
{
$this->cancellationQuestionChoiceAction = $cancellationQuestionChoiceAction;
return $this;
}
}