src/Entity/SurveyContribution.php line 43

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use ApiPlatform\Core\Annotation\ApiFilter;
  4. use ApiPlatform\Core\Annotation\ApiResource;
  5. use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter;
  6. use ApiPlatform\Core\Serializer\Filter\PropertyFilter;
  7. use App\Enum\SurveyContributionStatus;
  8. use DateTimeImmutable;
  9. use Doctrine\Common\Collections\ArrayCollection;
  10. use Doctrine\Common\Collections\Collection;
  11. use Doctrine\ORM\Mapping as ORM;
  12. use Fluoresce\ValidateEmbedded\Constraints as FluoresceAssert;
  13. use Gedmo\Timestampable\Traits\TimestampableEntity;
  14. use Symfony\Component\Serializer\Annotation\Groups;
  15. use Symfony\Component\Validator\Constraints as Assert;
  16. /**
  17.  * @ORM\Entity(repositoryClass="App\Repository\SurveyContributionRepository")
  18.  * @ORM\HasLifecycleCallbacks()
  19.  */
  20. #[ApiResource(
  21.     attributes: ['pagination_items_per_page' => 300],
  22.     normalizationContext: ['groups' => ['surveyContribution:read'], 'enable_max_depth' => true],
  23.     denormalizationContext: ['groups' => ['surveyContribution:write']],
  24.     collectionOperations: [
  25.         'get',
  26.         'post' => [
  27.             'security' => "is_granted('ROLE_ADMIN')",
  28.             'input_formats' => [
  29.                 'multipart' => ['multipart/form-data'],
  30.             ],
  31.         ],
  32.     ],
  33.     itemOperations: [
  34.         'get',
  35.         'put' => ['security' => "is_granted('ROLE_ADMIN') or object.owner == user"],
  36.     ],
  37. )]
  38. #[ApiFilter(PropertyFilter::class)]
  39. #[ApiFilter(SearchFilter::class, properties: ['id''user' => 'exact''form' => 'exact''company' => 'exact''pinpointCampaign' => 'exact'])]
  40. class SurveyContribution
  41. {
  42.     use TimestampableEntity;
  43.     /**
  44.      * @ORM\Id()
  45.      * @ORM\GeneratedValue()
  46.      * @ORM\Column(type="integer")
  47.      */
  48.     private $id;
  49.     /**
  50.      * @var User
  51.      *
  52.      * @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="surveyContributions")
  53.      * @ORM\JoinColumn(nullable=false, onDelete="CASCADE")
  54.      * @Groups({"surveyContribution:read", "surveyContribution:write"})
  55.      */
  56.     private $user;
  57.     /**
  58.      * @var SurveyForm
  59.      *
  60.      * @ORM\ManyToOne(targetEntity="App\Entity\SurveyForm")
  61.      * @ORM\JoinColumn(nullable=false, onDelete="CASCADE")
  62.      * @Groups({"surveyContribution:read", "surveyContribution:write"})
  63.      */
  64.     private $form;
  65.     /**
  66.      * @var Company
  67.      *
  68.      * @ORM\ManyToOne(targetEntity="App\Entity\Company", inversedBy="surveyContributions")
  69.      * @ORM\JoinColumn(nullable=false, onDelete="CASCADE")
  70.      * @Groups({"surveyContribution:read", "surveyContribution:write"})
  71.      */
  72.     private $company;
  73.     /**
  74.      * @var PinpointCampaign
  75.      *
  76.      * @ORM\ManyToOne(targetEntity="App\Entity\PinpointCampaign", inversedBy="surveyContributions")
  77.      * @ORM\JoinColumn(nullable=false, onDelete="CASCADE")
  78.      * @Groups({"surveyContribution:read", "surveyContribution:write"})
  79.      */
  80.     public $pinpointCampaign;
  81.     /**
  82.      * @var ArrayCollection
  83.      *
  84.      * @ORM\OneToMany(targetEntity="App\Entity\SurveyContributionStep", cascade={"persist"}, mappedBy="contribution")
  85.      * @FluoresceAssert\Validate(embeddedGroups={"Default"})
  86.      * @Groups({"surveyContribution:read", "surveyContribution:write"})
  87.      */
  88.     private $contributionSteps;
  89.     /**
  90.      * @var float
  91.      *
  92.      * @ORM\Column(type="decimal", precision=8, scale=6, nullable=true)
  93.      */
  94.     private $rating;
  95.     /**
  96.      * @var string
  97.      *
  98.      * @ORM\Column(type="string")
  99.      */
  100.     private $status;
  101.     /**
  102.      * @ORM\Column(type="boolean")
  103.      * @Assert\Type(type="boolean")
  104.      */
  105.     private $notified;
  106.     /**
  107.      * @var DateTimeImmutable
  108.      *
  109.      * @ORM\Column(type="datetimetz_immutable", nullable=true)
  110.      */
  111.     private $verifiedAt;
  112.     public function __construct()
  113.     {
  114.         $this->contributionSteps = new ArrayCollection();
  115.         $this->status SurveyContributionStatus::CREATED;
  116.         $this->notified false;
  117.     }
  118.     public function getId(): ?int
  119.     {
  120.         return $this->id;
  121.     }
  122.     public function getUser(): ?User
  123.     {
  124.         return $this->user;
  125.     }
  126.     public function setUser(?User $user): self
  127.     {
  128.         $this->user $user;
  129.         return $this;
  130.     }
  131.     public function getForm(): ?SurveyForm
  132.     {
  133.         return $this->form;
  134.     }
  135.     public function setForm(?SurveyForm $form): self
  136.     {
  137.         $this->form $form;
  138.         return $this;
  139.     }
  140.     public function getCompany(): ?Company
  141.     {
  142.         return $this->company;
  143.     }
  144.     public function setCompany(?Company $company): self
  145.     {
  146.         $this->company $company;
  147.         return $this;
  148.     }
  149.     public function getPinpointCampaign(): ?PinpointCampaign
  150.     {
  151.         return $this->pinpointCampaign;
  152.     }
  153.     public function setPinpointCampaign(?PinpointCampaign $pinpointCampaign): self
  154.     {
  155.         $this->pinpointCampaign $pinpointCampaign;
  156.         return $this;
  157.     }
  158.     /**
  159.      * @return Collection|SurveyContributionStep[]
  160.      */
  161.     public function getContributionSteps(): Collection
  162.     {
  163.         return $this->contributionSteps;
  164.     }
  165.     public function addContributionStep(SurveyContributionStep $contributionStep): self
  166.     {
  167.         if (!$this->contributionSteps->contains($contributionStep)) {
  168.             $this->contributionSteps[] = $contributionStep;
  169.             $contributionStep->setContribution($this);
  170.         }
  171.         return $this;
  172.     }
  173.     public function removeContributionStep(SurveyContributionStep $contributionStep): self
  174.     {
  175.         if ($this->contributionSteps->contains($contributionStep)) {
  176.             $this->contributionSteps->removeElement($contributionStep);
  177.             // set the owning side to null (unless already changed)
  178.             if ($contributionStep->getContribution() === $this) {
  179.                 $contributionStep->setContribution(null);
  180.             }
  181.         }
  182.         return $this;
  183.     }
  184.     public function getRating(): ?float
  185.     {
  186.         return $this->rating;
  187.     }
  188.     public function setRating(?float $rating): self
  189.     {
  190.         $this->rating $rating;
  191.         return $this;
  192.     }
  193.     public function getContributionQuestions(): ArrayCollection
  194.     {
  195.         $contributionQuestions = [];
  196.         foreach ($this->contributionSteps as $contributionStep) {
  197.             /** @var SurveyContributionStep $contributionStep */
  198.             $contributionQuestions array_merge($contributionQuestions$contributionStep->getContributionQuestions()->toArray());
  199.         }
  200.         return new ArrayCollection($contributionQuestions);
  201.     }
  202.     public function getStatus(): ?string
  203.     {
  204.         return $this->status;
  205.     }
  206.     public function setStatus(string $status): self
  207.     {
  208.         $this->status $status;
  209.         return $this;
  210.     }
  211.     public function getNotified(): ?bool
  212.     {
  213.         return $this->notified;
  214.     }
  215.     public function setNotified(bool $notified): self
  216.     {
  217.         $this->notified $notified;
  218.         return $this;
  219.     }
  220.     public function getVerifiedAt(): ?DateTimeImmutable
  221.     {
  222.         return $this->verifiedAt;
  223.     }
  224.     public function setVerifiedAt(?DateTimeImmutable $verifiedAt): self
  225.     {
  226.         $this->verifiedAt $verifiedAt;
  227.         return $this;
  228.     }
  229. }
  230. // http://app.kanarys.apiserver/api/survey_contributions?user=%2Fapi%2Fusers%2F106&company=%2Fapi%2Fcompanies%2F12&pinpointCampaign=%2Fapi%2Fpinpoint_campaigns%2F409