<?php
namespace App\Entity;
use App\Repository\UserRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
use Scheb\TwoFactorBundle\Model\Email\TwoFactorInterface;
use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface;
use Symfony\Component\Security\Core\User\UserInterface;
use Sonata\UserBundle\Entity\BaseUser;
/**
* @ORM\Entity(repositoryClass=UserRepository::class)
* @ORM\Table(name="`user`")
*/
class User extends BaseUser implements UserInterface, PasswordAuthenticatedUserInterface, TwoFactorInterface
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
protected $id;
/**
* @var string
*
* @ORM\Column(name="firstname", type="string", length=255, nullable=true)
*/
private $firstname;
/**
* @var string
*
* @ORM\Column(name="lastname", type="string", length=255, nullable=true)
*/
private $lastname;
/**
* @var string
*
* @ORM\Column(name="locale", type="string", length=255, nullable=true, options={"default" : "fr"})
*/
private $locale = "fr";
/**
* @ORM\Column(type="string", nullable=true)
*/
private $authCode;
/**
*
* @var Company $company
* @ORM\ManyToOne(targetEntity="Company", inversedBy="users")
* @ORM\JoinColumn(name="company_id", referencedColumnName="id")
*/
private $company;
/**
* @ORM\ManyToMany(targetEntity="Campaign", inversedBy="admins", cascade={"persist"})
* @ORM\JoinTable(name="campaign_admin")
*/
private $adminCampaigns;
/**
* @ORM\OneToMany(targetEntity="Participation", mappedBy="participant")
*/
private $participations;
/**
* @ORM\OneToMany(targetEntity="RememberMeToken", mappedBy="user")
*/
private $rememberMeTokens;
/**
* @var \DateTime
*
* @ORM\Column(name="deleted_at", type="datetime", nullable=true)
*/
private $deletedAt;
/**
* @var boolean
* @ORM\Column(name="archived", type="boolean", options={"default" : false})
*/
private $archived = false;
public function __construct()
{
$this->adminCampaigns = new ArrayCollection();
$this->participations = new ArrayCollection();
$this->rememberMeTokens = new ArrayCollection();
}
public function isEmailAuthEnabled(): bool
{
return true; // This can be a persisted field to switch email code authentication on/off
}
public function getEmailAuthRecipient(): string
{
return $this->email;
}
public function getEmailAuthCode(): string
{
if (null === $this->authCode) {
throw new \LogicException('The email authentication code was not set');
}
return $this->authCode;
}
public function setEmailAuthCode(string $authCode): void
{
$this->authCode = $authCode;
}
public function getId(): ?int
{
return $this->id;
}
public function getFirstname(): ?string
{
return $this->firstname;
}
public function setFirstname(?string $firstname): self
{
$this->firstname = $firstname;
return $this;
}
public function getLastname(): ?string
{
return $this->lastname;
}
public function setLastname(?string $lastname): self
{
$this->lastname = $lastname;
return $this;
}
public function getFullname(): ?string
{
return $this->firstname." ".$this->lastname;
}
public function getLocale(): ?string
{
return $this->locale;
}
public function setLocale(?string $locale): self
{
$this->locale = $locale;
return $this;
}
public function getAuthCode(): ?string
{
return $this->authCode;
}
public function setAuthCode(?string $authCode): self
{
$this->authCode = $authCode;
return $this;
}
public function getCompany(): ?Company
{
return $this->company;
}
public function setCompany(?Company $company): self
{
$this->company = $company;
return $this;
}
/**
* @return Collection<int, Campaign>
*/
public function getAdminCampaigns(): Collection
{
return $this->adminCampaigns;
}
public function addAdminCampaign(Campaign $campaign): self
{
if (!$this->adminCampaigns->contains($campaign)) {
$this->adminCampaigns->add($campaign);
}
return $this;
}
public function removeAdminCampaign(Campaign $campaign): self
{
$this->adminCampaigns->removeElement($campaign);
return $this;
}
/**
* @return Collection<int, Participation>
*/
public function getParticipations(): Collection
{
return $this->participations;
}
public function addParticipation(Participation $participation): self
{
if (!$this->participations->contains($participation)) {
$this->participations[] = $participation;
$participation->setParticipant($this);
}
return $this;
}
public function removeParticipation(Participation $participation): self
{
if ($this->participations->removeElement($participation)) {
// set the owning side to null (unless already changed)
if ($participation->getParticipant() === $this) {
$participation->setParticipant(null);
}
}
return $this;
}
public function getDeletedAt(): ?\DateTimeInterface
{
return $this->deletedAt;
}
public function setDeletedAt(?\DateTimeInterface $deletedAt): self
{
$this->deletedAt = $deletedAt;
return $this;
}
public function getArchived(): ?bool
{
return $this->archived;
}
public function setArchived(bool $archived): self
{
$this->archived = $archived;
return $this;
}
public function isArchived(): ?bool
{
return $this->archived;
}
/**
* @return Collection<int, RememberMeToken>
*/
public function getRememberMeTokens(): Collection
{
return $this->rememberMeTokens;
}
public function addRememberMeToken(RememberMeToken $rememberMeToken): self
{
if (!$this->rememberMeTokens->contains($rememberMeToken)) {
$this->rememberMeTokens[] = $rememberMeToken;
$rememberMeToken->setUser($this);
}
return $this;
}
public function removeRememberMeToken(RememberMeToken $rememberMeToken): self
{
if ($this->rememberMeTokens->removeElement($rememberMeToken)) {
// set the owning side to null (unless already changed)
if ($rememberMeToken->getUser() === $this) {
$rememberMeToken->setUser(null);
}
}
return $this;
}
function __toString()
{
return "".$this->getId()."-".$this->getEmail();
}
}