<?php
declare(strict_types = 1);
namespace App\Domain\Entity;
use App\Validators\UniqueUserDTO;
use Doctrine\ORM\Mapping as ORM;
use Serializable;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Validator\Constraints as Assert;
/**
* Class User.
*
* @ORM\Entity(repositoryClass="App\Domain\Repository\UserRepository")
* @ORM\Table(name="user_tracol")
* @UniqueUserDTO()
*/
class User extends AbstractEntity implements UserInterface, Serializable
{
/** @var string
*
* @ORM\Column(type="string")
* @Assert\NotBlank(message="Veuillez renseigner les champs vides")
* @Assert\Email()
*/
public ?string $email = null;
/** @var string
*
* @ORM\Column(type="string")
* @Assert\NotBlank(message="Veuillez renseigner les champs vides")
*/
public ?string $username = null;
/** @var string
*
* @ORM\Column(type="string")
* @Assert\NotBlank(message="Veuillez renseigner les champs vides")
*/
public string $name;
/** @var string
*
* @ORM\Column(type="string")
* @Assert\NotBlank(message="Veuillez renseigner les champs vides")
*/
protected string $lastname;
/** @var string
*
* @ORM\Column(type="string")
*/
protected string $password;
/** @var array
*
* @ORM\Column(type="array")
*/
protected array $role;
/**
* @var string|null
*
* @ORM\Column(type="string", nullable=true)
*/
protected ?string $token;
/**
* @ORM\Column(type="boolean")
*/
private bool $isVerified = false;
public function __construct() {
$this->role[] = 'ROLE_USER';
$this->isVerified = false;
$this->createdAt = time();
parent::__construct();
}
/**
* @return string
*/
public function getEmail(): string
{
return $this->email;
}
public function setEmail($email): User
{
$this->email = $email;
return $this;
}
public function getUsername(): ?string
{
return $this->username;
}
public function setUsername($username): ?User
{
$this->username = $username;
return $this;
}
public function getName(): string
{
return $this->name;
}
public function setName($name): User
{
$this->name = $name;
return $this;
}
public function getLastname(): string
{
return $this->lastname;
}
public function setLastname($lastname): User
{
$this->lastname = $lastname;
return $this;
}
public function getPassword(): string
{
return $this->password;
}
public function setPassword($plainPassword): User
{
$this->password = $plainPassword;
return $this;
}
public function getToken(): ?string
{
return $this->token;
}
public function updateToken(?string $token): self
{
$this->token = $token;
return $this;
}
/**
* @return array
*/
public function getRoles()
{
return $this->role;
}
/**
* @return array
*/
public function getRole()
{
return $this->role;
}
/**
* @param $newRole
*/
public function changeRole(array $newRole): void
{
$this->role = $newRole;
}
/**
* @param string $roleAdd
*/
public function addRole(string $roleAdd): void
{
$this->role[] = $roleAdd;
}
public function isVerified(): bool
{
return $this->isVerified;
}
public function setIsVerified(bool $isVerified): self
{
$this->isVerified = $isVerified;
return $this;
}
public function passwordReset(string $newPassword )
{
$this->password = $newPassword;
$this->passwordResetToken = null;
}
public function updatePassword(string $newpassword)
{
$this->password = $newpassword;
$this->passwordResetToken = null;
}
public function getSalt(): ?string
{
return $this->password;
}
public function eraseCredentials()
{
}
public function serialize(): string
{
return serialize([
$this->id,
$this->username,
$this->email,
$this->password,
$this->role
]);
}
function unserialize($serialized)
{
list(
$this->id,
$this->username,
$this->email,
$this->password,
$this->role
) = unserialize($serialized);
}
}