src/Entity/PinpointCampaignUser.php line 42

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use ApiPlatform\Core\Annotation\ApiFilter;
  4. use ApiPlatform\Core\Annotation\ApiProperty;
  5. use ApiPlatform\Core\Annotation\ApiResource;
  6. use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\OrderFilter;
  7. use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter;
  8. use ApiPlatform\Core\Serializer\Filter\PropertyFilter;
  9. use App\Controller\ClearMemberDataController;
  10. use DateTime;
  11. use Doctrine\ORM\Mapping as ORM;
  12. use Gedmo\Timestampable\Traits\TimestampableEntity;
  13. use Symfony\Component\Serializer\Annotation\Groups;
  14. /**
  15.  * @ORM\Entity(repositoryClass="App\Repository\PinpointCampaignUserRepository")
  16.  * @ORM\HasLifecycleCallbacks()
  17.  */
  18. #[ApiResource(
  19.     attributes: ['security' => "is_granted('ROLE_USER')"],
  20.     normalizationContext: ['groups' => ['pinpointCampaignUser:read']],
  21.     denormalizationContext: ['groups' => ['pinpointCampaignUser:write']],
  22.     collectionOperations: [
  23.         'get',
  24.         'post' => ['security' => "is_granted('ROLE_ADMIN')"],
  25.     ],
  26.     itemOperations: [
  27.         'get',
  28.         'clear_memberdata' => [
  29.             'method' => 'GET',
  30.             'path' => '/pinpoint_campaign_users/{id}/clear',
  31.             'controller' => ClearMemberDataController::class,
  32.             'normalization_context' => ['groups' => ['pinpointCampaignUser:read']],
  33.         ],
  34.     ],
  35. )]
  36. #[ApiFilter(PropertyFilter::class)]
  37. #[ApiFilter(SearchFilter::class, properties: ['id''pinpointCampaign' => 'exact''user.company' => 'exact''user.enable' => 'exact''user.email' => 'partial'])]
  38. #[ApiFilter(OrderFilter::class, properties: ['user.id''user.uniqueId''user.firstName''user.email''user.enable''pinpointCampaign.campaignName'], arguments: ['orderParameterName' => 'order'])]
  39. class PinpointCampaignUser
  40. {
  41.     use TimestampableEntity;
  42.     /**
  43.      * @ORM\Id()
  44.      * @ORM\GeneratedValue()
  45.      * @ORM\Column(type="integer")
  46.      * @Groups({"pinpointCampaignUser:read"})
  47.      */
  48.     #[ApiProperty(identifiertrue)]
  49.     private $id;
  50.     /**
  51.      * @var DateTime
  52.      *
  53.      * @ORM\Column(type="datetime", nullable=true)
  54.      * @Groups({"pinpointCampaignUser:read","pinpointCampaign:list"})
  55.      */
  56.     private $completedAt;
  57.     /**
  58.      * @var string
  59.      *
  60.      * @ORM\Column(type="string", length=50)
  61.      * @Groups({"pinpointCampaignUser:read","pinpointCampaign:list"})
  62.      */
  63.     private $type;
  64.     /**
  65.      * @var string
  66.      *
  67.      * @ORM\Column(type="string", length=30)
  68.      * @Groups({"pinpointCampaignUser:read","pinpointCampaign:list"})
  69.      */
  70.     private $selectedLanguage;
  71.     /**
  72.      * @var DateTime
  73.      *
  74.      * @ORM\Column(type="datetime", nullable=true)
  75.      * @Groups({"pinpointCampaignUser:read","pinpointCampaign:list"})
  76.      */
  77.     private $openedAt;
  78.     /**
  79.      * @ORM\ManyToOne(targetEntity=User::class, inversedBy="pinpointCampaignUsers")
  80.      * @ORM\JoinColumn(nullable=false)
  81.      * @Groups({"pinpointCampaignUser:read","pinpointCampaign:list"})
  82.      */
  83.     private $user;
  84.     /**
  85.      * @ORM\ManyToOne(targetEntity=PinpointCampaign::class, inversedBy="pinpointCampaignUsers")
  86.      * @ORM\JoinColumn(nullable=false)
  87.      * @Groups({"pinpointCampaignUser:read","pinpointCampaign:list"})
  88.      */
  89.     private $pinpointCampaign;
  90.     /**
  91.      * Company constructor.
  92.      */
  93.     public function __construct()
  94.     {
  95.         $this->createdAt = new \DateTime();
  96.         $this->completedAt null;
  97.         $this->updatedAt null;
  98.         $this->openedAt null;
  99.     }
  100.     public function getId(): ?int
  101.     {
  102.         return $this->id;
  103.     }
  104.     public function getCreatedAt(): DateTime
  105.     {
  106.         return $this->createdAt;
  107.     }
  108.     public function setCreatedAt(DateTime $createdAt): self
  109.     {
  110.         $this->createdAt $createdAt;
  111.         return $this;
  112.     }
  113.     public function getCompletedAt(): ?DateTime
  114.     {
  115.         return $this->completedAt;
  116.     }
  117.     public function setCompletedAt(?DateTime $completedAt): self
  118.     {
  119.         $this->completedAt $completedAt;
  120.         return $this;
  121.     }
  122.     public function getType(): ?string
  123.     {
  124.         return $this->type;
  125.     }
  126.     public function setType(?string $type): self
  127.     {
  128.         $this->type $type;
  129.         return $this;
  130.     }
  131.     public function getSelectedLanguage(): ?string
  132.     {
  133.         return $this->selectedLanguage;
  134.     }
  135.     public function setSelectedLanguage(?string $selectedLanguage): self
  136.     {
  137.         $this->selectedLanguage $selectedLanguage;
  138.         return $this;
  139.     }
  140.     public function getUpdatedAt(): ?DateTime
  141.     {
  142.         return $this->updatedAt;
  143.     }
  144.     public function setUpdatedAt(?DateTime $updatedAt): self
  145.     {
  146.         $this->updatedAt $updatedAt;
  147.         return $this;
  148.     }
  149.     public function getOpenedAt(): ?DateTime
  150.     {
  151.         return $this->openedAt;
  152.     }
  153.     public function setOpenedAt(?DateTime $openedAt): self
  154.     {
  155.         $this->openedAt $openedAt;
  156.         return $this;
  157.     }
  158.     public function getUser(): ?User
  159.     {
  160.         return $this->user;
  161.     }
  162.     public function setUser(?User $user): self
  163.     {
  164.         $this->user $user;
  165.         return $this;
  166.     }
  167.     #[Groups('pinpointCampaignUser:read')]
  168.     public function getSurveyUrl(): string
  169.     {
  170.         return $_ENV['APP_PROTOCOL'] . '://' $_ENV['APP_DOMAIN'] . '/survey-campaign/campaign/' $this->pinpointCampaign->getId() . '?user=' $this->user->getId() . '';
  171.     }
  172.     public function getPinpointCampaign(): ?PinpointCampaign
  173.     {
  174.         return $this->pinpointCampaign;
  175.     }
  176.     public function setPinpointCampaign(?PinpointCampaign $pinpointCampaign): self
  177.     {
  178.         $this->pinpointCampaign $pinpointCampaign;
  179.         return $this;
  180.     }
  181.     #[Groups('pinpointCampaignUser:read')]
  182.     public function getTotalQues(): int
  183.     {
  184.         return $this->pinpointCampaign->getTotalSurveyQuestion();
  185.     }
  186.     #[Groups('pinpointCampaignUser:read')]
  187.     public function getTotalContriQues(): int
  188.     {
  189.         return $this->user->getTotalContributionQuestion($this->pinpointCampaign);
  190.     }
  191.     #[Groups('pinpointCampaignUser:read')]
  192.     public function getUserPinpointCampaignStatus(): string
  193.     {
  194.         return $this->user->getContributionStatus();
  195.     }
  196.     #[Groups('pinpointCampaignUser:read')]
  197.     public function getUserPinpointCampaignSubmittedAt()
  198.     {
  199.         return $this->user->getContributionCreatedAt();
  200.     }
  201. }