<?php
namespace User\Entity;
use Core\Entity\Traits\EntityTrait;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Entity(repositoryClass="User\Repository\UserRepository")
* @ORM\Table(name="users_user")
*/
class User implements UserInterface, \Serializable
{
use EntityTrait {
EntityTrait::__construct as private __entityConstruct;
}
/**
*
* @ORM\ManyToMany(targetEntity="UserGroup", mappedBy="users")
*/
private $userGroups;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $lastname;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $firstname;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $email;
/**
* @Assert\NotBlank()
* @Assert\Length(max=250)
*/
private $plainPassword;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $password;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $forgot_token;
/**
* Date de création
*
* @ORM\Column(type="datetime", nullable=true)
*/
private $forgot_time;
/**
* @ORM\Column(name="is_active", type="boolean")
*/
private $isActive;
/**
* @ORM\Column(name="roles", type="array")
*/
private $roles = array();
/**
* Constructeur
* @throws \Exception
*/
public function __construct()
{
$this->__entityConstruct();
$this->isActive = true;
// $this->salt = md5(uniqid('', true));
$this->userGroups = new ArrayCollection();
}
/**
* @return mixed
*/
public function getForgotToken()
{
return $this->forgot_token;
}
/**
* @param mixed $forgot_token
*/
public function setForgotToken($forgot_token): void
{
$this->forgot_token = $forgot_token;
}
/**
* @return mixed
*/
public function getForgotTime()
{
return $this->forgot_time;
}
/**
* @param mixed $forgot_time
*/
public function setForgotTime($forgot_time): void
{
$this->forgot_time = $forgot_time;
}
public function getUserGroups()
{
return $this->userGroups;
}
/**
* @param UserGroup $userGroup
*/
public function addUserGroup(UserGroup $userGroup)
{
if ($this->userGroups->contains($userGroup)) {
return;
}
$this->userGroups->add($userGroup);
}
public function hasUserGroup($group_id){
foreach($this->userGroups as $group){
if($group->getId() == $group_id){
return true;
}
}
return false;
}
public function clearUserGroups()
{
$this->userGroups = new ArrayCollection();
return $this->getUserGroups();
}
/**
* @param UserGroup $userGroup
*/
public function removeUserGroup(UserGroup $userGroup)
{
if (!$this->userGroups->contains($userGroup)) {
return;
}
$this->userGroups->removeElement($userGroup);
}
public function getIdentity()
{
return trim((String)$this->getFirstname() . ' ' . $this->getLastname());
}
/**
* @return mixed
*/
public function getLastname()
{
return $this->lastname;
}
/**
* @param mixed $lastname
*/
public function setLastname($lastname): void
{
$this->lastname = $lastname;
}
/**
* @return mixed
*/
public function getFirstname()
{
return $this->firstname;
}
/**
* @param mixed $firstname
*/
public function setFirstname($firstname): void
{
$this->firstname = $firstname;
}
public function getUsername()
{
return $this->email;
}
public function getSalt()
{
// you *may* need a real salt depending on your encoder
// see section on salt below
return null;
}
public function getPassword()
{
return $this->password;
}
public function setPassword($password)
{
$this->password = $password;
}
public function getRoles()
{
if (empty($this->roles)) {
return ['ROLE_USER'];
}
return $this->roles;
}
public function addRole($role)
{
$this->roles[] = $role;
}
public function eraseCredentials()
{
}
/** @see \Serializable::serialize() */
public function serialize()
{
return json_encode([
'id' => $this->id,
'email' => $this->email,
'password' => $this->password,
'isActive' => $this->isActive
]);
}
/** @see \Serializable::unserialize() */
public function unserialize($serialized)
{
$params = json_decode($serialized);
$this->id = $params->id;
$this->email = $params->email;
$this->password = $params->password;
$this->isActive = $params->isActive;
return $this;
}
public function getId()
{
return $this->id;
}
public function getEmail()
{
return $this->email;
}
public function getPlainPassword()
{
return $this->plainPassword;
}
public function getIsActive()
{
return $this->isActive;
}
public function setId($id)
{
$this->id = $id;
}
public function setEmail($email)
{
$this->email = $email;
}
public function setPlainPassword($plainPassword)
{
$this->plainPassword = $plainPassword;
}
public function setIsActive($isActive)
{
$this->isActive = $isActive;
}
public function __toString()
{
return $this->getIdentity();
}
}