src/Entity/Customer/Customer.php line 23

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Entity\Customer;
  4. use App\Entity\LicenceFile;
  5. use DateTimeImmutable;
  6. use Doctrine\Common\Collections\ArrayCollection;
  7. use Doctrine\Common\Collections\Collection;
  8. use Doctrine\ORM\Mapping\Table;
  9. use Sylius\Component\Core\Model\Customer as BaseCustomer;
  10. use Doctrine\ORM\Mapping as ORM;
  11. use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
  12. use Symfony\Component\Validator\Constraints as Assert;
  13. /**
  14. * @ORM\Entity()
  15. * @Table(name="sylius_customer")
  16. * @UniqueEntity(fields={"pseudo"},message="Un utilisateur a déjà ce pseudo",ignoreNull=true,entityClass="App\Entity\Customer\Customer",repositoryMethod="findByPseudos")
  17. */
  18. class Customer extends BaseCustomer
  19. {
  20. /**
  21. * @ORM\Column(name="newsletter_unsubscribe_token", type="string", length=128, nullable=true, unique=true)
  22. */
  23. private ?string $newsletterUnsubscribeToken = null;
  24. /**
  25. * @ORM\Column(name="newsletter_subscribed_at", type="datetime_immutable", nullable=true)
  26. */
  27. private ?DateTimeImmutable $newsletterSubscribedAt = null;
  28. /**
  29. * @ORM\Column(name="newsletter_unsubscribed_at", type="datetime_immutable", nullable=true)
  30. */
  31. private ?DateTimeImmutable $newsletterUnsubscribedAt = null;
  32. public function __construct()
  33. {
  34. parent::__construct();
  35. }
  36. /**
  37. * @ORM\Column(type="string", length=255, nullable=true)
  38. * @Assert\NotBlank(message="customer.pseudo.not_blank")
  39. * @Assert\Length(min=3, max=12, minMessage="customer.pseudo.min_length", maxMessage="customer.pseudo.max_length")
  40. */
  41. protected $pseudo;
  42. public function getPseudo(): ?string
  43. {
  44. return $this->pseudo;
  45. }
  46. public function setPseudo(?string $pseudo): void
  47. {
  48. $this->pseudo = null === $pseudo ? null : trim($pseudo);
  49. }
  50. public function getNewsletterUnsubscribeToken(): ?string
  51. {
  52. return $this->newsletterUnsubscribeToken;
  53. }
  54. public function setNewsletterUnsubscribeToken(?string $newsletterUnsubscribeToken): self
  55. {
  56. $this->newsletterUnsubscribeToken = null === $newsletterUnsubscribeToken ? null : trim($newsletterUnsubscribeToken);
  57. return $this;
  58. }
  59. public function getNewsletterSubscribedAt(): ?DateTimeImmutable
  60. {
  61. return $this->newsletterSubscribedAt;
  62. }
  63. public function setNewsletterSubscribedAt(?DateTimeImmutable $newsletterSubscribedAt): self
  64. {
  65. $this->newsletterSubscribedAt = $newsletterSubscribedAt;
  66. return $this;
  67. }
  68. public function getNewsletterUnsubscribedAt(): ?DateTimeImmutable
  69. {
  70. return $this->newsletterUnsubscribedAt;
  71. }
  72. public function setNewsletterUnsubscribedAt(?DateTimeImmutable $newsletterUnsubscribedAt): self
  73. {
  74. $this->newsletterUnsubscribedAt = $newsletterUnsubscribedAt;
  75. return $this;
  76. }
  77. public function setSubscribedToNewsletter(bool $subscribedToNewsletter): void
  78. {
  79. parent::setSubscribedToNewsletter($subscribedToNewsletter);
  80. $now = new DateTimeImmutable('now', new \DateTimeZone('UTC'));
  81. if ($subscribedToNewsletter) {
  82. $this->newsletterSubscribedAt = $this->newsletterSubscribedAt ?? $now;
  83. $this->newsletterUnsubscribedAt = null;
  84. if (null === $this->newsletterUnsubscribeToken) {
  85. $this->newsletterUnsubscribeToken = bin2hex(random_bytes(32));
  86. }
  87. return;
  88. }
  89. $this->newsletterUnsubscribedAt = $now;
  90. }
  91. }