<?php
namespace App\Entity;
use App\Repository\AppUserRepository;
use DateTime;
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=AppUserRepository::class)
* @UniqueEntity("email",message="Tento email je již zaregistrován")
*/
class AppUser implements UserInterface
{
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=180, unique=true)
* @Assert\Email(message="Zadejte platný email")
* @Assert\NotBlank(message="Zadejte Email")
*/
private $email;
/**
* @ORM\Column(type="string", length=255)
* @Assert\NotNull(message="Zadejte platné křestní jméno")
* @Assert\NotBlank(message="Zadejte platné křestní jméno")
*/
private $firstName;
/**
* @ORM\Column(type="string", length=255)
* @Assert\NotNull(message="Zadejte platné příjmení")
* @Assert\NotBlank(message="Zadejte platné příjmení")
*/
private $lastName;
/**
* @var string
* @ORM\Column (name="street",nullable=true,type="string")
*/
private $street;
/**
* @var string
* @ORM\Column (name="town",nullable=true,type="string")
*/
private $town;
/**
* @var string
* @ORM\Column (name="postal_code",nullable=true,type="string")
*
* @Assert\Type(
* type="numeric",
* message="Zadejte validní PSČ",
* groups={"Edit","Default"})
*
* @Assert\Length (
* min=5,
* max=5,
* exactMessage="Zadejte validní PSČ",
* minMessage="PSČ je příliš krátké",
* maxMessage="PSČ je příliš dlouhé",
* groups={"Edit","Default"})
*/
private $postalCode;
/**
* @ORM\Column(type="string", length=255)
*
* @Assert\NotNull(
* message="Zadejte platné telefoní číslo")
*
* @Assert\NotBlank(
* message="Zadejte platné telefoní číslo")
*
* @Assert\Type(
* type="numeric",
* message="Zadejte validní telefoní číslo",
* groups={"Default","Edit"})
*
*/
private $telephone;
/**
* @var Department
* @ORM\ManyToOne(targetEntity="App\Entity\Department")
* @ORM\JoinColumn(name="department",referencedColumnName="id",nullable=true, onDelete="SET NULL")
*/
private $department;
/**
* @ORM\Column(type="json")
*/
private $roles = [];
/**
* @var string|null The hashed password
* @ORM\Column(type="string")
* @Assert\Regex(
* "/^(?=.*[0-9])(?=.*[A-Z]).{8,30}$/",
* message="Heslo musí obsahovat malé, velké písmeno a číslo. Minimální počet znaků je 8 max 30",
* groups={"Default"})
*
* @Assert\NotBlank(message="Zadejte heslo")
*/
private $password;
/**
* @var string|null
* @ORM\Column (name="sign",type="string",nullable=true)
*/
private ?string $sign;
/**
* @var boolean
* @ORM\Column(type="boolean")
*/
private $active = false;
/**
* @var datetime
* @ORM\Column(type="datetime")
*/
private $created;
/**
* @var string|null
* @ORM\Column(type="uuid",unique=true,nullable=true)
*/
private $activationToken;
/**
* @var datetime|null
* @ORM\Column(type="datetime",nullable=true)
*/
private $resendDateActivation;
/**
* @var string|null
* @ORM\Column(type="uuid",unique=true,nullable=true)
*/
private $lostPasswordToken;
/**
* @var datetime|null
* @ORM\Column(type="datetime",nullable=true)
*/
private $lostPasswordDate;
/**
* @var string|null
* @ORM\Column(type="string",nullable=true)
*/
private ?string $accountPrefix;
/**
* @var string|null
* @ORM\Column(type="string",nullable=true)
*
* @Assert\NotBlank (
* message="Číslo účtu nesmí být prázdné",
* groups={"Edit"})
*
* @Assert\Regex(
* pattern="/^[0-9]*$/",
* message="Zadejte validní číslo účtu",
* groups={"Edit"})
*/
private ?string $accountNumber;
/**
* @var string|null
* @ORM\Column(type="string",nullable=true)
*
* @Assert\NotBlank (
* message="Kód banky nesmí být prázdný",
* groups={"Edit"})
*
* @Assert\Regex(
* pattern="/^[0-9]*$/",
* message="Zadejte validní 4 místný kód banky",
* groups={"Edit"})
*
* @Assert\Length (
* min=4,
* max=4,
* exactMessage="Kód banky musí být 4 místné číslo",
* minMessage="Kód banky je příliš krátky. Kód banky musí být 4 místné číslo",
* maxMessage="Kód banky je příliš Dlouhé. Kód banky musí být 4 místné číslo",
* groups={"Edit"})
*/
private ?string $bankCode;
/**
* @var date|null
* @ORM\Column(type="date",nullable=true)
*/
private $birthDate;
/**
* @var date|null
* @ORM\Column(type="date",nullable=true)
*/
private $passportDateOfPublication;
/**
* @var string|null
* @ORM\Column(type="string",nullable=true)
*/
private ?string $passportPlaceOfPublication;
/**
* @var string|null
* @ORM\Column(type="string",nullable=true)
*/
private ?string $passportNumber;
/**
* @var date|null
* @ORM\Column(type="date",nullable=true)
*/
private $passportValidTo;
private $salt = "CzechRepublicGreatAgain";
public function getId(): ?int
{
return $this->id;
}
public function getEmail(): ?string
{
return $this->email;
}
public function setEmail(?string $email): self
{
$this->email = $email;
return $this;
}
/**
* @return mixed
*/
public function getFirstName()
{
return $this->firstName;
}
/**
* @param mixed $firstName
*/
public function setFirstName($firstName): self
{
$this->firstName = $firstName;
return $this;
}
/**
* @return mixed
*/
public function getLastName()
{
return $this->lastName;
}
/**
* @param mixed $lastName
*/
public function setLastName($lastName): self
{
$this->lastName = $lastName;
return $this;
}
/**
* @return mixed
*/
public function getTelephone()
{
return $this->telephone;
}
/**
* @param mixed $telephone
*/
public function setTelephone($telephone): self
{
$this->telephone = $telephone;
return $this;
}
/**
* @return Department
*/
public function getDepartment(): ?Department
{
return $this->department;
}
/**
* @param Department $department
*/
public function setDepartment(?Department $department): self
{
$this->department = $department;
return $this;
}
public function hasDepartment(string $department) {
if(is_null($this->department))
{
return false;
}
return $this->department->getName() === $department;
}
/**
* A visual identifier that represents this user.
*
* @see UserInterface
*/
public function getUsername(): string
{
return (string) $this->email;
}
/**
* @see UserInterface
*/
public function getRoles(): array
{
$roles = $this->roles;
// guarantee every user at least has ROLE_USER
$roles[] = 'ROLE_USER';
return array_unique($roles);
}
public function setRoles(array $roles): self
{
$this->roles = $roles;
return $this;
}
public function hasRole(string $role): bool {
return in_array($role,$this->roles);
}
/**
* @see UserInterface
*/
public function getPassword(): ?string
{
return (string) $this->password;
}
public function setPassword(?string $password): self
{
$this->password = $password;
return $this;
}
/**
* Returning a salt is only needed, if you are not using a modern
* hashing algorithm (e.g. bcrypt or sodium) in your security.yaml.
*
* @see UserInterface
*/
public function getSalt(): ?string
{
return $this->salt;
}
/**
* @see UserInterface
*/
public function eraseCredentials()
{
// If you store any temporary, sensitive data on the user, clear it here
// $this->plainPassword = null;
}
/**
* @return bool
*/
public function isActive(): bool
{
return $this->active;
}
/**
* @param bool $active
*/
public function setActive(bool $active): self
{
$this->active = $active;
return $this;
}
/**
* @return DateTime
*/
public function getCreated(): DateTime
{
return $this->created;
}
/**
* @param DateTime $created
*/
public function setCreated(DateTime $created): self
{
$this->created = $created;
return $this;
}
/**
* @return string|null
*/
public function getActivationToken(): ?string
{
return $this->activationToken;
}
/**
* @param string|null $activationToken
*/
public function setActivationToken(?string $activationToken): self
{
$this->activationToken = $activationToken;
return $this;
}
/**
* @return string|null
*/
public function getLostPasswordToken(): ?string
{
return $this->lostPasswordToken;
}
/**
* @param string|null $lostPasswordToken
*/
public function setLostPasswordToken(?string $lostPasswordToken): self
{
$this->lostPasswordToken = $lostPasswordToken;
return $this;
}
/**
* @return DateTime|null
*/
public function getResendDateActivation(): ?DateTime
{
return $this->resendDateActivation;
}
/**
* @param DateTime|null $resendDateActivation
*/
public function setResendDateActivation(?DateTime $resendDateActivation): self
{
$this->resendDateActivation = $resendDateActivation;
return $this;
}
/**
* @return DateTime|null
*/
public function getLostPasswordDate(): ?DateTime
{
return $this->lostPasswordDate;
}
/**
* @param DateTime|null $lostPasswordDate
*/
public function setLostPasswordDate(?DateTime $lostPasswordDate): self
{
$this->lostPasswordDate = $lostPasswordDate;
return $this;
}
/**
* @return string
*/
public function getStreet(): ?string
{
return $this->street;
}
/**
* @param string $street
*/
public function setStreet(string $street): self
{
$this->street = $street;
return $this;
}
/**
* @return string
*/
public function getTown(): ?string
{
return $this->town;
}
/**
* @param string $town
*/
public function setTown(string $town): self
{
$this->town = $town;
return $this;
}
/**
* @return string
*/
public function getPostalCode(): ?string
{
return $this->postalCode;
}
/**
* @param string $postalCode
*/
public function setPostalCode(string $postalCode): self
{
$this->postalCode = $postalCode;
return $this;
}
/**
* @return string|null
*/
public function getSign(): ?string
{
return $this->sign;
}
/**
* @param string|null $sign
*/
public function setSign(?string $sign): self
{
$this->sign = $sign;
return $this;
}
/**
* @return string|null
*/
public function getAccountPrefix(): ?string
{
return $this->accountPrefix;
}
/**
* @param string|null $accountPrefix
*/
public function setAccountPrefix(?string $accountPrefix): void
{
$this->accountPrefix = $accountPrefix;
}
/**
* @return string|null
*/
public function getAccountNumber(): ?string
{
return $this->accountNumber;
}
/**
* @param string|null $accountNumber
*/
public function setAccountNumber(?string $accountNumber): void
{
$this->accountNumber = $accountNumber;
}
/**
* @return string|null
*/
public function getBankCode(): ?string
{
return $this->bankCode;
}
/**
* @param string|null $bankCode
*/
public function setBankCode(?string $bankCode): self
{
$this->bankCode = $bankCode;
return $this;
}
public function __toString()
{
return $this->firstName . ' ' . $this->lastName;
}
/**
* @return DateTime|null
*/
public function getBirthDate(): ?DateTime
{
return $this->birthDate;
}
/**
* @param DateTime|null $birthDate
*/
public function setBirthDate(?DateTime $birthDate): self
{
$this->birthDate = $birthDate;
return $this;
}
/**
* @return DateTime|null
*/
public function getPassportDateOfPublication(): ?DateTime
{
return $this->passportDateOfPublication;
}
/**
* @param DateTime|null $passportDateOfPublication
*/
public function setPassportDateOfPublication(?DateTime $passportDateOfPublication): self
{
$this->passportDateOfPublication = $passportDateOfPublication;
return $this;
}
/**
* @return DateTime|null
*/
public function getPassportValidTo(): ?DateTime
{
return $this->passportValidTo;
}
/**
* @param DateTime|null $passportValidTo
*/
public function setPassportValidTo(?DateTime $passportValidTo): self
{
$this->passportValidTo = $passportValidTo;
return $this;
}
/**
* @return string|null
*/
public function getPassportPlaceOfPublication(): ?string
{
return $this->passportPlaceOfPublication;
}
/**
* @param string|null $passportPlaceOfPublication
*/
public function setPassportPlaceOfPublication(?string $passportPlaceOfPublication): self
{
$this->passportPlaceOfPublication = $passportPlaceOfPublication;
return $this;
}
/**
* @return string|null
*/
public function getPassportNumber(): ?string
{
return $this->passportNumber;
}
/**
* @param string|null $passportNumber
*/
public function setPassportNumber(?string $passportNumber): self
{
$this->passportNumber = $passportNumber;
return $this;
}
}