src/Entity/CompanyInformationQuestion.php line 33

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use ApiPlatform\Core\Annotation\ApiResource;
  4. use App\Enum\CompanyFormQuestionType;
  5. use App\Validator as AppAssert;
  6. use Doctrine\Common\Collections\ArrayCollection;
  7. use Doctrine\Common\Collections\Collection;
  8. use Doctrine\ORM\Mapping as ORM;
  9. use Gedmo\Timestampable\Traits\TimestampableEntity;
  10. use Symfony\Component\Serializer\Annotation\Groups;
  11. /**
  12.  * @ORM\Entity(repositoryClass="App\Repository\CompanyInformationQuestionRepository")
  13.  * @AppAssert\CompanyInformationQuestionOther()
  14.  */
  15. #[ApiResource(
  16.     attributes: ['security' => "is_granted('ROLE_USER')"],
  17.     normalizationContext: ['groups' => ['companyInformationQuestion:read']],
  18.     denormalizationContext: ['groups' => ['companyInformationQuestion:write']],
  19.     collectionOperations: [
  20.         'get',
  21.         'post' => [
  22.             'security' => "is_granted('ROLE_ADMIN')",
  23.         ],
  24.     ],
  25.     itemOperations: [
  26.         'get',
  27.         'put' => ['security' => "is_granted('ROLE_ADMIN') or object.owner == user"],
  28.     ],
  29. )]
  30. class CompanyInformationQuestion
  31. {
  32.     use TimestampableEntity;
  33.     /**
  34.      * @ORM\Id()
  35.      * @ORM\GeneratedValue()
  36.      * @ORM\Column(type="integer")
  37.      */
  38.     private $id;
  39.     /**
  40.      * @var CompanyInformationGroup
  41.      *
  42.      * @ORM\ManyToOne(targetEntity="App\Entity\CompanyInformationGroup", inversedBy="informationQuestions")
  43.      * @ORM\JoinColumn(nullable=false, onDelete="CASCADE")
  44.      */
  45.     private $informationGroup;
  46.     /**
  47.      * @var CompanyFormQuestion
  48.      *
  49.      * @ORM\ManyToOne(targetEntity="App\Entity\CompanyFormQuestion")
  50.      * @ORM\JoinColumn(nullable=false, onDelete="CASCADE")
  51.      */
  52.     private $formQuestion;
  53.     /**
  54.      * @var string
  55.      *
  56.      * @ORM\Column(type="text", nullable=true)
  57.      * @Groups({"companyInformationQuestion:read", "companyInformationQuestion:write"})
  58.      */
  59.     private $value;
  60.     /**
  61.      * @var CompanyFormAnswer
  62.      *
  63.      * @ORM\ManyToOne(targetEntity="App\Entity\CompanyFormAnswer")
  64.      * @ORM\JoinColumn(nullable=true, onDelete="CASCADE")
  65.      */
  66.     private $formAnswer;
  67.     /**
  68.      * @var ArrayCollection
  69.      *
  70.      * @ORM\ManyToMany(targetEntity="App\Entity\CompanyFormAnswer")
  71.      */
  72.     private $formAnswers;
  73.     /**
  74.      * @var string
  75.      *
  76.      * @ORM\Column(type="string", length=64, nullable=true)
  77.      */
  78.     private $daysOffType;
  79.     /**
  80.      * @var bool
  81.      *
  82.      * @ORM\Column(type="boolean", nullable=true)
  83.      */
  84.     private $affinityGroups;
  85.     /**
  86.      * @var bool
  87.      *
  88.      * @ORM\Column(type="boolean", nullable=true)
  89.      */
  90.     private $affinityGroupsChampion;
  91.     /**
  92.      * CompanyInformationQuestion constructor.
  93.      */
  94.     public function __construct()
  95.     {
  96.         $this->formAnswers = new ArrayCollection();
  97.     }
  98.     public function getId(): ?int
  99.     {
  100.         return $this->id;
  101.     }
  102.     public function getValue(): ?string
  103.     {
  104.         return $this->value;
  105.     }
  106.     public function setValue(?string $value): self
  107.     {
  108.         $this->value $value;
  109.         return $this;
  110.     }
  111.     public function getInformationGroup(): ?CompanyInformationGroup
  112.     {
  113.         return $this->informationGroup;
  114.     }
  115.     public function setInformationGroup(?CompanyInformationGroup $informationGroup): self
  116.     {
  117.         $this->informationGroup $informationGroup;
  118.         return $this;
  119.     }
  120.     public function addFormAnswer(CompanyFormAnswer $formAnswer): self
  121.     {
  122.         if (!$this->formAnswers->contains($formAnswer)) {
  123.             $this->formAnswers[] = $formAnswer;
  124.         }
  125.         return $this;
  126.     }
  127.     public function removeFormAnswer(CompanyFormAnswer $formAnswer): self
  128.     {
  129.         if ($this->formAnswers->contains($formAnswer)) {
  130.             $this->formAnswers->removeElement($formAnswer);
  131.         }
  132.         return $this;
  133.     }
  134.     public function isAnswered(): bool
  135.     {
  136.         $type $this->getFormQuestion()->getType();
  137.         if (in_array($type, [CompanyFormQuestionType::TEXTCompanyFormQuestionType::TEXTAREACompanyFormQuestionType::SLIDERCompanyFormQuestionType::WEEKSCompanyFormQuestionType::DAYSCompanyFormQuestionType::DAYS_OFF])) {
  138.             return false === empty($this->value);
  139.         } elseif (in_array($type, [CompanyFormQuestionType::CHOICE_UNIQUE_EXPANDEDCompanyFormQuestionType::CHOICE_UNIQUE_COLLAPSED])) {
  140.             return null !== $this->getFormAnswer();
  141.         } elseif (in_array($type, [CompanyFormQuestionType::CHOICE_MULTIPLE_EXPANDEDCompanyFormQuestionType::CHOICE_MULTIPLE_COLLAPSED])) {
  142.             return false === $this->getFormAnswers()->isEmpty();
  143.         } elseif (in_array($type, [CompanyFormQuestionType::AFFINITY_GROUPS])) {
  144.             return true === $this->getAffinityGroups() || true === $this->getAffinityGroupsChampion();
  145.         }
  146.         return false;
  147.     }
  148.     public function getFormQuestion(): ?CompanyFormQuestion
  149.     {
  150.         return $this->formQuestion;
  151.     }
  152.     public function setFormQuestion(?CompanyFormQuestion $formQuestion): self
  153.     {
  154.         $this->formQuestion $formQuestion;
  155.         return $this;
  156.     }
  157.     public function getFormAnswer(): ?CompanyFormAnswer
  158.     {
  159.         return $this->formAnswer;
  160.     }
  161.     public function setFormAnswer(?CompanyFormAnswer $formAnswer): self
  162.     {
  163.         $this->formAnswer $formAnswer;
  164.         return $this;
  165.     }
  166.     /**
  167.      * @return Collection|CompanyFormAnswer[]
  168.      */
  169.     public function getFormAnswers(): Collection
  170.     {
  171.         return $this->formAnswers;
  172.     }
  173.     public function getDaysOffType(): ?string
  174.     {
  175.         return $this->daysOffType;
  176.     }
  177.     public function setDaysOffType(?string $daysOffType): self
  178.     {
  179.         $this->daysOffType $daysOffType;
  180.         return $this;
  181.     }
  182.     public function getAffinityGroups(): ?bool
  183.     {
  184.         return $this->affinityGroups;
  185.     }
  186.     public function setAffinityGroups(?bool $affinityGroups): self
  187.     {
  188.         $this->affinityGroups $affinityGroups;
  189.         return $this;
  190.     }
  191.     public function getAffinityGroupsChampion(): ?bool
  192.     {
  193.         return $this->affinityGroupsChampion;
  194.     }
  195.     public function setAffinityGroupsChampion(?bool $affinityGroupsChampion): self
  196.     {
  197.         $this->affinityGroupsChampion $affinityGroupsChampion;
  198.         return $this;
  199.     }
  200. }