<?php
namespace App\Entity\User;
use App\Entity\Fiche\FicheBatiment;
use App\Entity\Visa\VisaExigences;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Entity(repositoryClass="App\Repository\User\UserRepository")
* @ORM\Table(name="user")
* @UniqueEntity("username")
* @UniqueEntity("email")
*/
class User implements UserInterface
{
const ARRAY_ROLES = [
'ROLE_SUPER_ADMIN',
'ROLE_ADMIN',
'ROLE_UTILISATEUR'
];
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=50, unique=true)
* @Assert\Length(min=2, max=50)
*/
private $username;
/**
* @ORM\Column(type="string", length=150, unique=true)
* @Assert\Email()
* @Assert\Length(min=2, max=150)
*/
private $email;
private $plainPassword;
/**
* @ORM\Column(type="string")
*/
private $password;
/**
* @ORM\Column(type="array")
*/
private $roles;
/**
* @var boolean
*
* @ORM\Column(type="boolean")
*/
protected $isEnabled = false;
/**
* @var string
*
* @ORM\Column(type="string", length=255, nullable=true)
*/
protected $nom;
/**
* @var string
*
* @ORM\Column(type="string", length=255, nullable=true)
*/
protected $prenom;
/**
* @var string
*
* @ORM\Column(type="string", length=32, nullable=true)
*/
protected $activationToken = null;
/**
* @var bool
*
* @ORM\Column(type="boolean")
*/
protected $isComparaisonAll = true;
/**
* @var \DateTime
*
* @ORM\Column(type="datetime")
*/
protected $theDateTimeCreation;
/**
* @var ArrayCollection
*
* @ORM\OneToMany(targetEntity="App\Entity\Fiche\FicheBatiment", mappedBy="theUser")
*/
protected $listFicheBatiment;
/**
* @ORM\ManyToOne(targetEntity=VisaExigences::class, inversedBy="User")
*/
private $visaExigences;
public static function labelizeRole($role)
{
return trim(ucwords(strtolower(str_replace(['ROLE', '_'], [' ', ' '], $role))));
}
public function __construct()
{
$this->setTheDateTimeCreation(new \DateTime());
$this->listFicheBatiment = new ArrayCollection();
}
public function __toString()
{
return $this->getPatronyme();
}
public function getId()
{
return $this->id;
}
public function getUsername()
{
return $this->username;
}
public function setUsername(string $username): self
{
$this->username = $username;
return $this;
}
public function getEmail()
{
return $this->email;
}
public function setEmail(string $email): self
{
$this->email = $email;
return $this;
}
/**
* @return mixed
*/
public function getPlainPassword()
{
return $this->plainPassword;
}
/**
* @param mixed $plainPassword
*/
public function setPlainPassword($plainPassword): self
{
$this->plainPassword = $plainPassword;
return $this;
}
public function getPassword()
{
return $this->password;
}
public function setPassword(string $password): self
{
$this->password = $password;
return $this;
}
public function getRoles()
{
$roles = $this->roles;
// il est obligatoire d'avoir au moins un rôle si on est authentifié, par convention c'est ROLE_UTILISATEUR
if (empty($roles)) {
$roles[] = 'ROLE_UTILISATEUR';
}
return array_unique($roles);
}
public function addRole(string $role): self
{
if (!array_search($role, $this->getRoles())) {
$this->roles[] = $role;
}
return $this;
}
public function removeRole(string $role): self
{
$index = array_search($role, $this->getRoles());
if ($index !== false) {
unset($this->roles[$index]);
}
return $this;
}
public function hasRole(string $role): bool
{
$isRole = false;
foreach($this->getRoles() as $strRole) {
if ($strRole == $role) {
$isRole = true;
break;
}
}
return $isRole;
}
/**
* @return bool
*/
public function getIsEnabled()
{
return $this->isEnabled;
}
/**
* @param bool $isEnabled
*/
public function setIsEnabled(bool $isEnabled): self
{
$this->isEnabled = $isEnabled;
return $this;
}
public function getSalt(): ?string
{
return null;
}
public function eraseCredentials(): void
{
}
/**
* @return string
*/
public function getNom()
{
return $this->nom;
}
/**
* @param string $nom
*/
public function setNom(string $nom): self
{
$this->nom = $nom;
return $this;
}
/**
* @return string
*/
public function getPrenom()
{
return $this->prenom;
}
/**
* @param string $prenom
*/
public function setPrenom(string $prenom): self
{
$this->prenom = $prenom;
return $this;
}
/**
* @return string
*/
public function getActivationToken(): ?string
{
return $this->activationToken;
}
/**
* @param string $activationToken
*/
public function setActivationToken(?string $activationToken): void
{
$this->activationToken = $activationToken;
}
/**
* @return bool
*/
public function isComparaisonAll(): bool
{
return $this->isComparaisonAll;
}
/**
* @param bool $isComparaisonAll
*/
public function setIsComparaisonAll(bool $isComparaisonAll): void
{
$this->isComparaisonAll = $isComparaisonAll;
}
/**
* @return bool
*/
public function getLibelleComparaisonAll(): string
{
if ($this->isComparaisonAll()) {
$libelle = 'Toute la base';
} else {
$libelle = 'Uniquement mes fiches';
}
return $libelle;
}
/**
* @return \DateTime
*/
public function getTheDateTimeCreation(): \DateTime
{
return $this->theDateTimeCreation;
}
/**
* @param \DateTime $theDateCreation
*
* @return User
*/
public function setTheDateTimeCreation(\DateTime $theDateTimeCreation): self
{
$this->theDateTimeCreation = $theDateTimeCreation;
return $this;
}
public function getPatronyme()
{
return ucfirst($this->getPrenom()) . ' ' . strtoupper($this->getNom());
}
public function getPatronymeAndRole()
{
return $this->getPatronyme() . ' (' . $this->getRolePrincipal() . ')';
}
public function setRolePrincipal($role)
{
$this->roles = array();
$this->addRole($role);
return $this;
}
public function getRolePrincipal()
{
if (count($this->getRoles()) > 0) {
return $this->getRoles()[0];
} else {
return null;
}
}
public function getLibelleRolePrincipal()
{
return self::labelizeRole($this->getRolePrincipal());
}
/**
* @return ArrayCollection
*/
public function getListFicheBatiment()
{
return $this->listFicheBatiment;
}
public function getVisaExigences(): ?VisaExigences
{
return $this->visaExigences;
}
public function setVisaExigences(?VisaExigences $visaExigences): self
{
$this->visaExigences = $visaExigences;
return $this;
}
public function setRoles(array $roles): self
{
$this->roles = $roles;
return $this;
}
public function isIsEnabled(): ?bool
{
return $this->isEnabled;
}
public function isIsComparaisonAll(): ?bool
{
return $this->isComparaisonAll;
}
public function addListFicheBatiment(FicheBatiment $listFicheBatiment): self
{
if (!$this->listFicheBatiment->contains($listFicheBatiment)) {
$this->listFicheBatiment->add($listFicheBatiment);
$listFicheBatiment->setTheUser($this);
}
return $this;
}
public function removeListFicheBatiment(FicheBatiment $listFicheBatiment): self
{
if ($this->listFicheBatiment->removeElement($listFicheBatiment)) {
// set the owning side to null (unless already changed)
if ($listFicheBatiment->getTheUser() === $this) {
$listFicheBatiment->setTheUser(null);
}
}
return $this;
}
}