src/Entity/CompanyInformationPage.php line 32

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use ApiPlatform\Core\Annotation\ApiResource;
  4. use App\Validator\CompanyInformationNotBlank;
  5. use Doctrine\Common\Collections\ArrayCollection;
  6. use Doctrine\Common\Collections\Collection;
  7. use Doctrine\ORM\Mapping as ORM;
  8. use Symfony\Component\Serializer\Annotation\Groups;
  9. use Symfony\Component\Validator\Constraints as Assert;
  10. /**
  11.  * @ORM\Entity(repositoryClass="App\Repository\CompanyInformationPageRepository")
  12.  * @CompanyInformationNotBlank()
  13.  */
  14. #[ApiResource(
  15.     attributes: ['security' => "is_granted('ROLE_USER')"],
  16.     normalizationContext: ['groups' => ['companyInformation:read']],
  17.     denormalizationContext: ['groups' => ['companyInformation:write']],
  18.     collectionOperations: [
  19.         'get',
  20.         'post' => [
  21.             'security' => "is_granted('ROLE_ADMIN')",
  22.         ],
  23.     ],
  24.     itemOperations: [
  25.         'get',
  26.         'put' => ['security' => "is_granted('ROLE_ADMIN') or object.owner == user"],
  27.     ],
  28. )]
  29. class CompanyInformationPage
  30. {
  31.     /**
  32.      * @ORM\Id()
  33.      * @ORM\GeneratedValue()
  34.      * @ORM\Column(type="integer")
  35.      */
  36.     private $id;
  37.     /**
  38.      * @var Company
  39.      *
  40.      * @ORM\ManyToOne(targetEntity="App\Entity\Company", inversedBy="informationPages")
  41.      * @ORM\JoinColumn(nullable=false, onDelete="CASCADE")
  42.      * @Groups({"companyInformation:read", "companyInformation:write"})
  43.      */
  44.     private $company;
  45.     /**
  46.      * @var CompanyFormPage
  47.      *
  48.      * @ORM\ManyToOne(targetEntity="App\Entity\CompanyFormPage")
  49.      * @ORM\JoinColumn(nullable=false, onDelete="CASCADE")
  50.      * @Groups({"companyInformation:read", "companyInformation:write"})
  51.      */
  52.     private $formPage;
  53.     /**
  54.      * @var ArrayCollection|CompanyInformationGroup[]
  55.      *
  56.      * @ORM\OneToMany(targetEntity="App\Entity\CompanyInformationGroup", mappedBy="informationPage", cascade={"persist"})
  57.      * @Assert\Valid()
  58.      * @Groups({"companyInformation:read", "companyInformation:write"})
  59.      */
  60.     private $informationGroups;
  61.     /**
  62.      * CompanyInformationPage constructor.
  63.      */
  64.     public function __construct()
  65.     {
  66.         $this->informationGroups = new ArrayCollection();
  67.     }
  68.     public function getId(): ?int
  69.     {
  70.         return $this->id;
  71.     }
  72.     public function getCompany(): ?Company
  73.     {
  74.         return $this->company;
  75.     }
  76.     public function setCompany(?Company $company): self
  77.     {
  78.         $this->company $company;
  79.         return $this;
  80.     }
  81.     public function getFormPage(): ?CompanyFormPage
  82.     {
  83.         return $this->formPage;
  84.     }
  85.     public function setFormPage(?CompanyFormPage $formPage): self
  86.     {
  87.         $this->formPage $formPage;
  88.         return $this;
  89.     }
  90.     /**
  91.      * @return Collection|CompanyInformationGroup[]
  92.      */
  93.     public function getInformationGroups(): Collection
  94.     {
  95.         return $this->informationGroups;
  96.     }
  97.     public function addInformationGroup(CompanyInformationGroup $informationGroup): self
  98.     {
  99.         if (!$this->informationGroups->contains($informationGroup)) {
  100.             $this->informationGroups[] = $informationGroup;
  101.             $informationGroup->setInformationPage($this);
  102.         }
  103.         return $this;
  104.     }
  105.     public function removeInformationGroup(CompanyInformationGroup $informationGroup): self
  106.     {
  107.         if ($this->informationGroups->contains($informationGroup)) {
  108.             $this->informationGroups->removeElement($informationGroup);
  109.             // set the owning side to null (unless already changed)
  110.             if ($informationGroup->getInformationPage() === $this) {
  111.                 $informationGroup->setInformationPage(null);
  112.             }
  113.         }
  114.         return $this;
  115.     }
  116.     public function orderInformationGroups(): void
  117.     {
  118.         $informationGroups $this->informationGroups->toArray();
  119.         usort($informationGroups, function (CompanyInformationGroup $aCompanyInformationGroup $b) {
  120.             return $a->getFormGroup()->getPosition() <=> $b->getFormGroup()->getPosition();
  121.         });
  122.         $this->informationGroups = new ArrayCollection($informationGroups);
  123.     }
  124. }