src/Entity/User.php line 23

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use Doctrine\Common\Collections\ArrayCollection;
  4. use Doctrine\Common\Collections\Collection;
  5. use Doctrine\DBAL\Types\DateTimeType;
  6. use Doctrine\ORM\Mapping as ORM;
  7. use Symfony\Component\Security\Core\User\UserInterface;
  8. use Symfony\Component\Validator\Constraints as Assert;
  9. use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
  10. use DateTimeInterface;
  11. use DateTime;
  12. /**
  13.  * @ORM\Entity(repositoryClass="App\Repository\UserRepository")
  14.  * @ORM\Table(name="users")
  15.  * @UniqueEntity("email")
  16.  * @UniqueEntity("slug")
  17.  *
  18.  * @ORM\HasLifecycleCallbacks
  19.  */
  20. class User implements UserInterface
  21. {
  22.     const USER_ROLES = [
  23.         'ROLE_SUPER_ADMIN',
  24.         'ROLE_ADMIN',
  25.         'ROLE_EDITOR',
  26.         'ROLE_USER',
  27.     ];
  28.     const USER_STATUS = [
  29.         'active',
  30.         'blocked',
  31.         'waiting_validation',
  32.         'deleted',
  33.     ];
  34.     /**
  35.      * @ORM\Id()
  36.      * @ORM\GeneratedValue()
  37.      * @ORM\Column(type="integer")
  38.      */
  39.     private $id;
  40.     /**
  41.      * @ORM\Column(type="string", length=255, nullable=true)
  42.      */
  43.     private $firstName;
  44.     /**
  45.      * @ORM\Column(type="string", length=255, nullable=true)
  46.      */
  47.     private $lastName;
  48.     /**
  49.      * @ORM\Column(type="string", length=255, unique=true)
  50.      * @Assert\NotNull(message="The email field is required.")
  51.      * @Assert\Email(message="This is not a valid email.")
  52.      */
  53.     private $email;
  54.     /**
  55.      * @ORM\Column(type="string", length=255, unique=true)
  56.      */
  57.     private $slug;
  58.     /**
  59.      * @var string The hashed password
  60.      * @ORM\Column(type="string", length=255)
  61.      */
  62.     private $password;
  63.     /**
  64.      * @ORM\Column(type="string", length=255, nullable=true)
  65.      */
  66.     private $activationKey;
  67.     /**
  68.      * @ORM\Column(type="string", length=255)
  69.      * @Assert\NotNull(message="The status field is required.")
  70.      * @Assert\Choice(choices=USER::USER_STATUS, message="Choose a valid status.")
  71.      */
  72.     private $status;
  73.     /**
  74.      * @ORM\Column(type="json")
  75.      * @Assert\Choice(choices=USER::USER_ROLES, message="Choose a valid role.", multiple=true)
  76.      */
  77.     private $roles = [];
  78.     /**
  79.      * @var string A "Y-m-d H:i:s" formatted value
  80.      * @ORM\Column(type="datetime")
  81.      */
  82.     private $createdAt;
  83.     /**
  84.      * @var string A "Y-m-d H:i:s" formatted value
  85.      * @ORM\Column(type="datetime")
  86.      */
  87.     private $updatedAt;
  88.     /**
  89.      * @ORM\OneToOne(targetEntity=Coach::class, mappedBy="utilisateur", cascade={"persist", "remove"})
  90.      */
  91.     private $coach;
  92.     /**
  93.      * @ORM\OneToOne(targetEntity=Subscription::class, mappedBy="utilisateur", cascade={"persist", "remove"})
  94.      */
  95.     private $subscription;
  96.     /**
  97.      * @ORM\Column(type="string", length=255, nullable=true)
  98.      */
  99.     private $stripeCustomerId;
  100.     /**
  101.      * @ORM\OneToMany(targetEntity=Reservation::class, mappedBy="utilisateur")
  102.      */
  103.     private $reservations;
  104.     /**
  105.      * @ORM\Column(type="boolean", nullable=true)
  106.      */
  107.     private $isAcceptNewsletter;
  108.     /**
  109.      * @ORM\Column(type="boolean", nullable=true)
  110.      */
  111.     private $isAcceptPromos;
  112.     public function __construct()
  113.     {
  114.         $this->createdAt = new DateTime();
  115.         $this->updatedAt = new DateTime();
  116.         $this->status 'active';
  117.         $this->reservations = new ArrayCollection();
  118.     }
  119.     /**
  120.      * @return int|null
  121.      */
  122.     public function getId(): ?int
  123.     {
  124.         return $this->id;
  125.     }
  126.     /**
  127.      * @return string|null
  128.      */
  129.     public function getFullName(): ?string
  130.     {
  131.         return $this->firstName ' ' $this->lastName;
  132.     }
  133.     /**
  134.      * @return string|null
  135.      */
  136.     public function getFirstName(): ?string
  137.     {
  138.         return $this->firstName;
  139.     }
  140.     /**
  141.      * @param string|null $firstName
  142.      * @return self
  143.      */
  144.     public function setFirstName(?string $firstName): self
  145.     {
  146.         $this->firstName $firstName;
  147.         return $this;
  148.     }
  149.     /**
  150.      * @return string|null
  151.      */
  152.     public function getLastName(): ?string
  153.     {
  154.         return $this->lastName;
  155.     }
  156.     /**
  157.      * @param string|null $lastName
  158.      * @return self
  159.      */
  160.     public function setLastName(?string $lastName): self
  161.     {
  162.         $this->lastName $lastName;
  163.         return $this;
  164.     }
  165.     /**
  166.      * @return string|null
  167.      */
  168.     public function getEmail(): ?string
  169.     {
  170.         return $this->email;
  171.     }
  172.     /**
  173.      * @param string $email
  174.      * @return self
  175.      */
  176.     public function setEmail(string $email): self
  177.     {
  178.         $this->email $email;
  179.         return $this;
  180.     }
  181.     /**
  182.      * @return string|null
  183.      */
  184.     public function getSlug(): ?string
  185.     {
  186.         return $this->slug;
  187.     }
  188.     /**
  189.      * @param string $slug
  190.      * @return self
  191.      */
  192.     public function setSlug(string $slug): self
  193.     {
  194.         $this->slug $slug;
  195.         return $this;
  196.     }
  197.     /**
  198.      * @return string|null
  199.      */
  200.     public function getPassword(): ?string
  201.     {
  202.         return $this->password;
  203.     }
  204.     /**
  205.      * @param string $password
  206.      * @return self
  207.      */
  208.     public function setPassword(string $password): self
  209.     {
  210.         $this->password $password;
  211.         return $this;
  212.     }
  213.     /**
  214.      * @return string|null
  215.      */
  216.     public function getActivationKey(): ?string
  217.     {
  218.         return $this->activationKey;
  219.     }
  220.     /**
  221.      * @param string|null $activationKey
  222.      * @return self
  223.      */
  224.     public function setActivationKey(?string $activationKey): self
  225.     {
  226.         $this->activationKey $activationKey;
  227.         return $this;
  228.     }
  229.     /**
  230.      * @return string|null
  231.      */
  232.     public function getStatus(): ?string
  233.     {
  234.         return $this->status;
  235.     }
  236.     /**
  237.      * @param string $status
  238.      * @return self
  239.      */
  240.     public function setStatus(string $status): self
  241.     {
  242.         $this->status $status;
  243.         return $this;
  244.     }
  245.     /**
  246.      * @return DateTimeInterface|null
  247.      */
  248.     public function getCreatedAt(): ?DateTimeInterface
  249.     {
  250.         return $this->createdAt;
  251.     }
  252.     /**
  253.      * @param DateTimeInterface $createdAt
  254.      * @return self
  255.      */
  256.     public function setCreatedAt(DateTimeInterface $createdAt): self
  257.     {
  258.         $this->createdAt $createdAt;
  259.         return $this;
  260.     }
  261.     /**
  262.      * @return DateTimeInterface|null
  263.      */
  264.     public function getUpdatedAt(): ?DateTimeInterface
  265.     {
  266.         return $this->updatedAt;
  267.     }
  268.     /**
  269.      * @param DateTimeInterface $updatedAt
  270.      * @return self
  271.      */
  272.     public function setUpdatedAt(DateTimeInterface $updatedAt): self
  273.     {
  274.         $this->updatedAt $updatedAt;
  275.         return $this;
  276.     }
  277.     /**
  278.      * A visual identifier that represents this user.
  279.      *
  280.      * @see UserInterface
  281.      */
  282.     public function getUsername(): string
  283.     {
  284.         return (string)$this->email;
  285.     }
  286.     /**
  287.      * @see UserInterface
  288.      */
  289.     public function getRoles(): array
  290.     {
  291.         $roles $this->roles;
  292.         // guarantee every user at least has ROLE_USER
  293.         $roles[] = 'ROLE_USER';
  294.         return array_unique($roles);
  295.     }
  296.     public function setRoles(array $roles): self
  297.     {
  298.         $this->roles $roles;
  299.         return $this;
  300.     }
  301.     /**
  302.      * @see UserInterface
  303.      */
  304.     public function getSalt()
  305.     {
  306.         // not needed when using the "bcrypt" algorithm in security.yaml
  307.     }
  308.     /**
  309.      * @see UserInterface
  310.      */
  311.     public function eraseCredentials()
  312.     {
  313.         // If you store any temporary, sensitive data on the user, clear it here
  314.         // $this->plainPassword = null;
  315.     }
  316.     /**
  317.      * set createdAt, updatedAt fields automatically when doctrine persist Brief.
  318.      *
  319.      * @ORM\PrePersist
  320.      */
  321.     public function onPrePersist(): void
  322.     {
  323.         $this->createdAt = new DateTime();
  324.         $this->updatedAt = new DateTime();
  325.     }
  326.     /**
  327.      * update updatedAt field automatically when doctrine update brief.
  328.      *
  329.      * @ORM\PreUpdate
  330.      */
  331.     public function onPreUpdate(): void
  332.     {
  333.         $this->updatedAt = new DateTime();
  334.     }
  335.     public function getCoach(): ?Coach
  336.     {
  337.         return $this->coach;
  338.     }
  339.     public function setCoach(Coach $coach): self
  340.     {
  341.         $this->coach $coach;
  342.         // set the owning side of the relation if necessary
  343.         if ($coach->getUtilisateur() !== $this) {
  344.             $coach->setUtilisateur($this);
  345.         }
  346.         return $this;
  347.     }
  348.     public function __toString()
  349.     {
  350.         // TODO: Implement __toString() method.
  351.         return $this->firstName.' '.$this->lastName;
  352.     }
  353.     public function getSubscription(): ?Subscription
  354.     {
  355.         return $this->subscription;
  356.     }
  357.     public function setSubscription(Subscription $subscription): self
  358.     {
  359.         $this->subscription $subscription;
  360.         // set the owning side of the relation if necessary
  361.         if ($subscription->getUtilisateur() !== $this) {
  362.             $subscription->setUtilisateur($this);
  363.         }
  364.         return $this;
  365.     }
  366.     public function getStripeCustomerId(): ?string
  367.     {
  368.         return $this->stripeCustomerId;
  369.     }
  370.     public function setStripeCustomerId(?string $stripeCustomerId): self
  371.     {
  372.         $this->stripeCustomerId $stripeCustomerId;
  373.         return $this;
  374.     }
  375.     /**
  376.      * @return Collection|Reservation[]
  377.      */
  378.     public function getReservations(): Collection
  379.     {
  380.         return $this->reservations;
  381.     }
  382.     public function addReservation(Reservation $reservation): self
  383.     {
  384.         if (!$this->reservations->contains($reservation)) {
  385.             $this->reservations[] = $reservation;
  386.             $reservation->setUtilisateur($this);
  387.         }
  388.         return $this;
  389.     }
  390.     public function removeReservation(Reservation $reservation): self
  391.     {
  392.         if ($this->reservations->contains($reservation)) {
  393.             $this->reservations->removeElement($reservation);
  394.             // set the owning side to null (unless already changed)
  395.             if ($reservation->getUtilisateur() === $this) {
  396.                 $reservation->setUtilisateur(null);
  397.             }
  398.         }
  399.         return $this;
  400.     }
  401.     public function getIsAcceptNewsletter(): ?bool
  402.     {
  403.         return $this->isAcceptNewsletter;
  404.     }
  405.     public function setIsAcceptNewsletter(?bool $isAcceptNewsletter): self
  406.     {
  407.         $this->isAcceptNewsletter $isAcceptNewsletter;
  408.         return $this;
  409.     }
  410.     public function getIsAcceptPromos(): ?bool
  411.     {
  412.         return $this->isAcceptPromos;
  413.     }
  414.     public function setIsAcceptPromos(?bool $isAcceptPromos): self
  415.     {
  416.         $this->isAcceptPromos $isAcceptPromos;
  417.         return $this;
  418.     }
  419. }