src/Entity/Gos/CancellationQuestion.php line 13

Open in your IDE?
  1. <?php
  2. namespace App\Entity\Gos;
  3. use App\Repository\Gos\CancellationQuestionRepository;
  4. use Doctrine\Common\Collections\ArrayCollection;
  5. use Doctrine\Common\Collections\Collection;
  6. use Doctrine\ORM\Mapping as ORM;
  7. /**
  8.  * @ORM\Entity(repositoryClass=CancellationQuestionRepository::class)
  9.  */
  10. class CancellationQuestion
  11. {
  12.     /**
  13.      * @ORM\Id
  14.      * @ORM\GeneratedValue
  15.      * @ORM\Column(type="integer")
  16.      */
  17.     private $id;
  18.     /**
  19.      * @ORM\ManyToOne(targetEntity=CancellationForm::class, inversedBy="cancellationQuestions")
  20.      */
  21.     private $cancellationForm;
  22.     /**
  23.      * @ORM\ManyToOne(targetEntity=CancellationPoll::class, inversedBy="cancellationQuestions")
  24.      */
  25.     private $cancellationPoll;
  26.     /**
  27.      * @ORM\Column(type="string", length=255)
  28.      */
  29.     private $questionType;
  30.     /**
  31.      * @ORM\Column(type="string", length=255)
  32.      */
  33.     private $name;
  34.     /**
  35.      * @ORM\Column(type="boolean")
  36.      */
  37.     private $isRequired;
  38.     /**
  39.      * @ORM\OneToMany(targetEntity=CancellationQuestionChoice::class, mappedBy="cancellationQuestion", orphanRemoval=true, cascade={"persist", "remove"})
  40.      */
  41.     private $cancellationQuestionChoices;
  42.     /**
  43.      * @ORM\ManyToOne(targetEntity=CancellationQuestionChoice::class, inversedBy="cancellationSubquestions")
  44.      */
  45.     private $parentCancellationQuestionChoice;
  46.     /**
  47.      * @ORM\Column(type="array", nullable=true)
  48.      */
  49.     private $specificProductTypesVisibility = [];
  50.     /**
  51.      * @ORM\Column(type="integer")
  52.      */
  53.     private $position;
  54.     /**
  55.      * @ORM\Column(type="boolean", options={"default": 1})
  56.      */
  57.     private $isLabelVisible true;
  58.     /**
  59.      * @ORM\ManyToMany(targetEntity=CancellationQuestion::class, inversedBy="necessaryForQuestions")
  60.      * @ORM\JoinTable(name="cancellation_question_necessary_question")
  61.      */
  62.     private $necessaryQuestions;
  63.     /**
  64.      * @ORM\ManyToMany(targetEntity=CancellationQuestion::class, mappedBy="necessaryQuestions")
  65.      */
  66.     private $necessaryForQuestions;
  67.     /**
  68.      * @ORM\ManyToOne(targetEntity=CancellationQuestionChoice::class, inversedBy="additionalCancellationQuestions")
  69.      */
  70.     private $additionalQuestionForChoice;
  71.     /**
  72.      * @ORM\Column(type="integer", nullable=true)
  73.      */
  74.     private $randomOrderForChoices;
  75.     /**
  76.      * @ORM\ManyToMany(targetEntity=CancellationQuestion::class, inversedBy="multiQuestionsRequirementBy")
  77.      * @ORM\JoinTable(name="cancellation_question_multi_requirement")
  78.      */
  79.     private $multiQuestionsRequirement;
  80.     /**
  81.      * @ORM\ManyToMany(targetEntity=CancellationQuestion::class, mappedBy="multiQuestionsRequirement")
  82.      */
  83.     private $multiQuestionsRequirementBy;
  84.     public function __construct()
  85.     {
  86.         $this->cancellationQuestionChoices = new ArrayCollection();
  87.         $this->necessaryQuestions = new ArrayCollection();
  88.         $this->necessaryForQuestions = new ArrayCollection();
  89.         $this->multiQuestionsRequirement = new ArrayCollection();
  90.         $this->multiQuestionsRequirementBy = new ArrayCollection();
  91.     }
  92.     public function __toString()
  93.     {
  94.         return $this->getName();
  95.     }
  96.     public function getId(): ?int
  97.     {
  98.         return $this->id;
  99.     }
  100.     public function getCancellationForm(): ?CancellationForm
  101.     {
  102.         return $this->cancellationForm;
  103.     }
  104.     public function getBaseCancellationForm(): ?CancellationForm
  105.     {
  106.         return $this->cancellationForm ??
  107.             (
  108.                 $this->getParentCancellationQuestionChoice()
  109.                     ? $this->getParentCancellationQuestionChoice()->getCancellationForm()
  110.                     :   $this->getAdditionalQuestionForChoice()->getCancellationForm()
  111.             );
  112.     }
  113.     public function setCancellationForm(?CancellationForm $cancellationForm): self
  114.     {
  115.         $this->cancellationForm $cancellationForm;
  116.         if ($cancellationForm !== null) {
  117.             $position $cancellationForm->getCancellationQuestions()->count() + 1;
  118.             $this->setPosition($position);
  119.         }
  120.         return $this;
  121.     }
  122.     public function getCancellationPoll(): ?CancellationPoll
  123.     {
  124.         return $this->cancellationPoll;
  125.     }
  126.     public function setCancellationPoll(?CancellationPoll $cancellationPoll): self
  127.     {
  128.         $this->cancellationPoll $cancellationPoll;
  129.         return $this;
  130.     }
  131.     public function getQuestionType(): ?string
  132.     {
  133.         return $this->questionType;
  134.     }
  135.     public function setQuestionType(string $questionType): self
  136.     {
  137.         $this->questionType $questionType;
  138.         return $this;
  139.     }
  140.     public function getName(): ?string
  141.     {
  142.         return $this->name;
  143.     }
  144.     public function setName(string $name): self
  145.     {
  146.         $this->name $name;
  147.         return $this;
  148.     }
  149.     public function getIsRequired(): ?bool
  150.     {
  151.         return $this->isRequired;
  152.     }
  153.     public function setIsRequired(bool $isRequired): self
  154.     {
  155.         $this->isRequired $isRequired;
  156.         return $this;
  157.     }
  158.     /**
  159.      * @return Collection|CancellationQuestionChoice[]
  160.      */
  161.     public function getCancellationQuestionChoices(): Collection
  162.     {
  163.         return $this->cancellationQuestionChoices;
  164.     }
  165.     public function getSortedCancellationQuestionChoices(): array
  166.     {
  167.         $randomOrderForChoices $this->getRandomOrderForChoices();
  168.         $choices $this->getCancellationQuestionChoices()->toArray();
  169.         if ($randomOrderForChoices !== null && \count($choices) >= $randomOrderForChoices) {
  170.             $randomPart \array_slice($choices0$randomOrderForChoices);
  171.             $fixedPart \array_slice($choices$randomOrderForChoices);
  172.             shuffle($randomPart);
  173.             return array_merge($randomPart$fixedPart);
  174.         }
  175.         return $choices;
  176.     }
  177.     public function addCancellationQuestionChoice(CancellationQuestionChoice $cancellationQuestionChoice): self
  178.     {
  179.         if (!$this->cancellationQuestionChoices->contains($cancellationQuestionChoice)) {
  180.             $this->cancellationQuestionChoices[] = $cancellationQuestionChoice;
  181.             $cancellationQuestionChoice->setCancellationQuestion($this);
  182.         }
  183.         return $this;
  184.     }
  185.     public function removeCancellationQuestionChoice(CancellationQuestionChoice $cancellationQuestionChoice): self
  186.     {
  187.         if ($this->cancellationQuestionChoices->contains($cancellationQuestionChoice)) {
  188.             $this->cancellationQuestionChoices->removeElement($cancellationQuestionChoice);
  189.             // set the owning side to null (unless already changed)
  190.             if ($cancellationQuestionChoice->getCancellationQuestion() === $this) {
  191.                 $cancellationQuestionChoice->setCancellationQuestion(null);
  192.             }
  193.         }
  194.         return $this;
  195.     }
  196.     public function setCancellationQuestionChoices(Collection $choices): self
  197.     {
  198.         foreach ($choices as $choice) {
  199.             $this->addCancellationQuestionChoice($choice);
  200.         }
  201.         return $this;
  202.     }
  203.     public function getParentCancellationQuestionChoice(): ?CancellationQuestionChoice
  204.     {
  205.         return $this->parentCancellationQuestionChoice;
  206.     }
  207.     public function setParentCancellationQuestionChoice(?CancellationQuestionChoice $parentCancellationQuestionChoice): self
  208.     {
  209.         $this->parentCancellationQuestionChoice $parentCancellationQuestionChoice;
  210.         if ($parentCancellationQuestionChoice !== null) {
  211.             $position $parentCancellationQuestionChoice->getCancellationSubquestions()->count() + 1;
  212.             $this->setPosition($position);
  213.         }
  214.         return $this;
  215.     }
  216.     public function getTreeArrayInfo(array $infoArray = []): array
  217.     {
  218.         if($this->getParentCancellationQuestionChoice() !== null) {
  219.             $infoArray[] = 'Podzapytanie '$this->getName();
  220.             $infoArray[] = 'Opcja ' $this->getParentCancellationQuestionChoice()->getName();
  221.             return $this->getParentCancellationQuestionChoice()->getCancellationQuestion()->getTreeArrayInfo($infoArray);
  222.         }
  223.         if($this->getAdditionalQuestionForChoice() !== null) {
  224.             $infoArray[] = 'Dodatkowe pytanie '$this->getName();
  225.             $infoArray[] = 'Opcja ' $this->getAdditionalQuestionForChoice()->getName();
  226.             return $this->getAdditionalQuestionForChoice()->getCancellationQuestion()->getTreeArrayInfo($infoArray);
  227.         }
  228.         $infoArray[] = 'Pytanie '$this->getName();
  229.         $infoArray[] = $this->getCancellationForm()->getName();
  230.         return $infoArray;
  231.     }
  232.     public function getSpecificProductTypesVisibility(): ?array
  233.     {
  234.         return $this->specificProductTypesVisibility;
  235.     }
  236.     public function isVisibleForSpecificProductType(?string $productType): bool
  237.     {
  238.         return empty($productType) || empty($this->specificProductTypesVisibility) ||
  239.             \in_array($productType$this->specificProductTypesVisibilitytrue);
  240.     }
  241.     public function setSpecificProductTypesVisibility(?array $specificProductTypesVisibility): self
  242.     {
  243.         $this->specificProductTypesVisibility $specificProductTypesVisibility;
  244.         return $this;
  245.     }
  246.     public function getPosition(): ?int
  247.     {
  248.         return $this->position;
  249.     }
  250.     public function setPosition(int $position): self
  251.     {
  252.         $this->position $position;
  253.         return $this;
  254.     }
  255.     public function getIsLabelVisible(): ?bool
  256.     {
  257.         return $this->isLabelVisible;
  258.     }
  259.     public function setIsLabelVisible(bool $isLabelVisible): self
  260.     {
  261.         $this->isLabelVisible $isLabelVisible;
  262.         return $this;
  263.     }
  264.     /**
  265.      * @return Collection|self[]
  266.      */
  267.     public function getNecessaryQuestions(): Collection
  268.     {
  269.         return $this->necessaryQuestions;
  270.     }
  271.     public function addNecessaryQuestion(self $necessaryQuestion): self
  272.     {
  273.         if (!$this->necessaryQuestions->contains($necessaryQuestion)) {
  274.             $this->necessaryQuestions[] = $necessaryQuestion;
  275.         }
  276.         return $this;
  277.     }
  278.     public function removeNecessaryQuestion(self $necessaryQuestion): self
  279.     {
  280.         if ($this->necessaryQuestions->contains($necessaryQuestion)) {
  281.             $this->necessaryQuestions->removeElement($necessaryQuestion);
  282.         }
  283.         return $this;
  284.     }
  285.     /**
  286.      * @return Collection|self[]
  287.      */
  288.     public function getNecessaryForQuestions(): Collection
  289.     {
  290.         return $this->necessaryForQuestions;
  291.     }
  292.     public function addNecessaryForQuestion(self $necessaryForQuestion): self
  293.     {
  294.         if (!$this->necessaryForQuestions->contains($necessaryForQuestion)) {
  295.             $this->necessaryForQuestions[] = $necessaryForQuestion;
  296.             $necessaryForQuestion->addNecessaryQuestion($this);
  297.         }
  298.         return $this;
  299.     }
  300.     public function removeNecessaryForQuestion(self $necessaryForQuestion): self
  301.     {
  302.         if ($this->necessaryForQuestions->contains($necessaryForQuestion)) {
  303.             $this->necessaryForQuestions->removeElement($necessaryForQuestion);
  304.             $necessaryForQuestion->removeNecessaryQuestion($this);
  305.         }
  306.         return $this;
  307.     }
  308.     public function getAdditionalQuestionForChoice(): ?CancellationQuestionChoice
  309.     {
  310.         return $this->additionalQuestionForChoice;
  311.     }
  312.     public function setAdditionalQuestionForChoice(?CancellationQuestionChoice $additionalQuestionForChoice): self
  313.     {
  314.         $this->additionalQuestionForChoice $additionalQuestionForChoice;
  315.         if ($additionalQuestionForChoice !== null) {
  316.             $position $additionalQuestionForChoice->getAdditionalCancellationQuestions()->count() + 1;
  317.             $this->setPosition($position);
  318.         }
  319.         return $this;
  320.     }
  321.     public function getRandomOrderForChoices(): ?int
  322.     {
  323.         return $this->randomOrderForChoices;
  324.     }
  325.     public function setRandomOrderForChoices(?int $randomOrderForChoices): self
  326.     {
  327.         $this->randomOrderForChoices $randomOrderForChoices;
  328.         return $this;
  329.     }
  330.     /**
  331.      * @return Collection|self[]
  332.      */
  333.     public function getMultiQuestionsRequirement(): Collection
  334.     {
  335.         return $this->multiQuestionsRequirement;
  336.     }
  337.     public function addMultiQuestionsRequirement(self $multiQuestionsRequirement): self
  338.     {
  339.         if (!$this->multiQuestionsRequirement->contains($multiQuestionsRequirement)) {
  340.             $this->multiQuestionsRequirement[] = $multiQuestionsRequirement;
  341.         }
  342.         return $this;
  343.     }
  344.     public function removeMultiQuestionsRequirement(self $multiQuestionsRequirement): self
  345.     {
  346.         if ($this->multiQuestionsRequirement->contains($multiQuestionsRequirement)) {
  347.             $this->multiQuestionsRequirement->removeElement($multiQuestionsRequirement);
  348.         }
  349.         return $this;
  350.     }
  351.     /**
  352.      * @return Collection|self[]
  353.      */
  354.     public function getMultiQuestionsRequirementBy(): Collection
  355.     {
  356.         return $this->multiQuestionsRequirementBy;
  357.     }
  358.     public function addMultiQuestionsRequirementBy(self $multiQuestionsRequirementBy): self
  359.     {
  360.         if (!$this->multiQuestionsRequirementBy->contains($multiQuestionsRequirementBy)) {
  361.             $this->multiQuestionsRequirementBy[] = $multiQuestionsRequirementBy;
  362.             $multiQuestionsRequirementBy->addMultiQuestionsRequirement($this);
  363.         }
  364.         return $this;
  365.     }
  366.     public function removeMultiQuestionsRequirementBy(self $multiQuestionsRequirementBy): self
  367.     {
  368.         if ($this->multiQuestionsRequirementBy->contains($multiQuestionsRequirementBy)) {
  369.             $this->multiQuestionsRequirementBy->removeElement($multiQuestionsRequirementBy);
  370.             $multiQuestionsRequirementBy->removeMultiQuestionsRequirement($this);
  371.         }
  372.         return $this;
  373.     }
  374. }