<?php
declare(strict_types=1);
namespace App\Entity\Customer;
use App\Entity\LicenceFile;
use DateTimeImmutable;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping\Table;
use Sylius\Component\Core\Model\Customer as BaseCustomer;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Entity()
* @Table(name="sylius_customer")
* @UniqueEntity(fields={"pseudo"},message="Un utilisateur a déjà ce pseudo",ignoreNull=true,entityClass="App\Entity\Customer\Customer",repositoryMethod="findByPseudos")
*/
class Customer extends BaseCustomer
{
/**
* @ORM\Column(name="newsletter_unsubscribe_token", type="string", length=128, nullable=true, unique=true)
*/
private ?string $newsletterUnsubscribeToken = null;
/**
* @ORM\Column(name="newsletter_subscribed_at", type="datetime_immutable", nullable=true)
*/
private ?DateTimeImmutable $newsletterSubscribedAt = null;
/**
* @ORM\Column(name="newsletter_unsubscribed_at", type="datetime_immutable", nullable=true)
*/
private ?DateTimeImmutable $newsletterUnsubscribedAt = null;
public function __construct()
{
parent::__construct();
}
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @Assert\NotBlank(message="customer.pseudo.not_blank")
* @Assert\Length(min=3, max=12, minMessage="customer.pseudo.min_length", maxMessage="customer.pseudo.max_length")
*/
protected $pseudo;
public function getPseudo(): ?string
{
return $this->pseudo;
}
public function setPseudo(?string $pseudo): void
{
$this->pseudo = null === $pseudo ? null : trim($pseudo);
}
public function getNewsletterUnsubscribeToken(): ?string
{
return $this->newsletterUnsubscribeToken;
}
public function setNewsletterUnsubscribeToken(?string $newsletterUnsubscribeToken): self
{
$this->newsletterUnsubscribeToken = null === $newsletterUnsubscribeToken ? null : trim($newsletterUnsubscribeToken);
return $this;
}
public function getNewsletterSubscribedAt(): ?DateTimeImmutable
{
return $this->newsletterSubscribedAt;
}
public function setNewsletterSubscribedAt(?DateTimeImmutable $newsletterSubscribedAt): self
{
$this->newsletterSubscribedAt = $newsletterSubscribedAt;
return $this;
}
public function getNewsletterUnsubscribedAt(): ?DateTimeImmutable
{
return $this->newsletterUnsubscribedAt;
}
public function setNewsletterUnsubscribedAt(?DateTimeImmutable $newsletterUnsubscribedAt): self
{
$this->newsletterUnsubscribedAt = $newsletterUnsubscribedAt;
return $this;
}
public function setSubscribedToNewsletter(bool $subscribedToNewsletter): void
{
parent::setSubscribedToNewsletter($subscribedToNewsletter);
$now = new DateTimeImmutable('now', new \DateTimeZone('UTC'));
if ($subscribedToNewsletter) {
$this->newsletterSubscribedAt = $this->newsletterSubscribedAt ?? $now;
$this->newsletterUnsubscribedAt = null;
if (null === $this->newsletterUnsubscribeToken) {
$this->newsletterUnsubscribeToken = bin2hex(random_bytes(32));
}
return;
}
$this->newsletterUnsubscribedAt = $now;
}
}