<?php
namespace App\Entity;
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;
/**
* @ORM\Entity(repositoryClass="App\Repository\UserRepository")
* @UniqueEntity(fields={"email"}, message="user.email.exist")
* @ORM\Table(indexes={
* @ORM\Index(name="createdAt",columns={"created_at"}),
* @ORM\Index(name="updatedAt",columns={"updated_at"}),
* @ORM\Index(name="deletedAt",columns={"deleted_at"}),
* @ORM\Index(name="created",columns={"created"}),
* })
* @ORM\HasLifecycleCallbacks
*/
class User implements UserInterface {
const ROLE_USER = 'ROLE_USER';
const ROLE_MANAGER = 'ROLE_MANAGER';
const ROLE_ADMIN = 'ROLE_ADMIN';
const ENABLED = 'Habiltiado';
const DISABLED = 'No habilitado';
const STR_ROLE_USER = 'USUARIO';
const STR_ROLE_MANAGER = 'MANAGER';
const STR_ROLE_ADMIN = 'ADMINISTRADOR';
/**
*
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(name="id", type="integer")
*/
protected $id;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
protected $firebaseId;
/**
* One User has One Profile.
* @ORM\OneToOne(targetEntity="Profile", cascade={"persist"})
* @ORM\JoinColumn(name="profile_id", referencedColumnName="id")
*/
protected $profile;
/**
* Encrypted password. Must be persisted.
* @ORM\Column(name="username", type="string", length=180)
* @var string
*/
protected $username;
/**
* Encrypted password. Must be persisted.
* @ORM\Column(name="email", type="string", length=180)
* @var string
*/
protected $email;
/**
* @var bool
* @ORM\Column(name="enabled", type="boolean")
*/
protected $enabled;
/**
* The salt to use for hashing.
*
* @var string
* @ORM\Column(name="salt", type="string", nullable=true)
*/
protected $salt;
/**
* Encrypted password. Must be persisted.
*
* @var string
* @ORM\Column(name="password", type="string")
*/
protected $password;
/**
* Encrypted password. Must be persisted.
*
* @var string
* @ORM\Column(type="boolean", nullable=true)
*/
protected $taasEnabled = false;
/**
* Encrypted password. Must be persisted.
*
* @var bool
* @ORM\Column(type="boolean", nullable=true)
*/
protected $demo = false;
/**
* @var \DateTime|null
* @ORM\Column(name="last_login", type="datetime", nullable=true)
*/
protected $lastLogin;
/**
* @var \DateTime|null
* @ORM\Column(name="last_cloud_login", type="datetime", nullable=true)
*/
protected $lastCloudLogin;
/**
* @var bool
* @ORM\Column(name="first_cloud_login", type="boolean", nullable=true)
*/
protected $firstCloudLogin;
/**
* Random string sent to the user email address in order to verify it.
*
* @var string|null
* @ORM\Column(name="confirmation_token", type="string", nullable=true, unique=true, length=180)
*/
protected $confirmationToken;
/**
* @var \DateTime|null
* @ORM\Column(name="password_requested_at", type="datetime", nullable=true)
*/
protected $passwordRequestedAt;
/**
* @var array
* @ORM\Column(name="roles", type="array")
*/
protected $roles;
/**
* @ORM\OneToMany(targetEntity="Treatment", mappedBy="user")
*/
protected $treatments;
/** Many users has one userType
* @ORM\ManyToOne(targetEntity="UserType")
* @ORM\JoinColumn(name="user_type_id", referencedColumnName="id",nullable=true)
*/
protected $userType;
/**
* @ORM\ManyToOne(targetEntity="Organization", inversedBy="users")
* @ORM\JoinColumn(name="organization_id", referencedColumnName="id",nullable=true)
*/
protected $organization;
/**
* @ORM\Column(type="datetime", nullable=true)
*/
protected $created;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
protected $provider;
/**
* @ORM\Column(type="string", nullable=true)
*/
protected $locale;
/**
* Many Users have One Address
* @ORM\ManyToOne(targetEntity="Address")
* @ORM\JoinColumn(name="address_id", referencedColumnName="id")
*/
private $address;
/**
* @ORM\Column(type="string", length=180, nullable=true)
*/
private $secondEmail;
/**
* @ORM\Column(type="integer", nullable=true)
*/
private $userIntoFarm;
/**
* @ORM\Column(type="datetime")
*/
private $updatedAt;
/**
* @ORM\Column(type="datetime")
*/
private $createdAt;
/**
* @ORM\Column(type="datetime", nullable=true)
*/
private $deletedAt;
/**
* @ORM\OneToMany(targetEntity=Media::class, mappedBy="user")
*/
private $media;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $isOrganization;
/** @ORM\PreUpdate */
public function PreUpdate()
{
$this->setUpdatedAt( new \DateTime() );
}
/** @ORM\PrePersist */
public function PrePersist()
{
$this->setCreatedAt( new \DateTime() );
$this->setUpdatedAt( new \DateTime() );
}
public function __construct() {
$this->enabled = false;
$this->roles = array(self::ROLE_USER);
$this->treatments = array();
$this->created = new \DateTime();
$this->media = new ArrayCollection();
}
public function __toString() {
return $this->username ?? $this->email;
}
public function getShortDescription() {
return $this->profile->getName();
}
public function getEnabledString() {
if ($this->enabled) {
return self::ENABLED;
} else {
return self::DISABLED;
}
}
public function getListRoles() {
$list = [];
foreach ($this->getRoles() as $rol) {
array_push($list, $this->getStrRole($rol));
}
return $list;
}
private function getStrRole($rol) {
switch ($rol) {
case self::ROLE_USER:
return self::STR_ROLE_USER;
case self::ROLE_MANAGER:
return self::STR_ROLE_MANAGER;
case self::ROLE_ADMIN:
return self::STR_ROLE_ADMIN;
}
}
public function hasRole( $rol )
{/*{{{*/
return in_array( $rol, $this->getRoles());
}/*}}}*/
public function isAdmin() {
if (in_array(self::ROLE_ADMIN, $this->getRoles())) {
return true;
}
return false;
}
public function isManger() {
if (in_array(self::ROLE_MANAGER, $this->getRoles())) {
return true;
}
return false;
}
public function getFirebaseId() {
return $this->firebaseId;
}
public function setFirebaseId(string $firebaseId): self {
$this->firebaseId = $firebaseId;
return $this;
}
/**
* @return mixed
*/
public function getProfile() {
return $this->profile;
}
/**
* @param mixed $profile
*/
public function setProfile( Profile $profile ) {
$this->profile = $profile;
return $this;
}
/**
* Returns the roles granted to the user.
*
* @return (Role|string)[] The user roles
*/
public function getRoles() {
$roles = $this->roles;
// guarantee every user at least has ROLE_USER
$roles[] = self::ROLE_USER;
return array_unique($roles);
}
/**
* @see UserInterface
*/
public function getPassword() {
return (string) $this->password;
}
/**
* Returns the salt that was originally used to encode the password.
*
* This can return null if the password was not encoded using a salt.
*
* @return string|null The salt
*/
public function getSalt() {
return $this->salt;
}
/**
* Returns the username used to authenticate the user.
*
* @return string The username
*/
public function getUsername() {
return $this->username;
}
/**
* @param string $username
*/
public function setUsername(string $username) {
$this->username = $username;
}
/**
* @param string $email
*/
public function setEmail(string $email) {
$this->email = $email;
$this->username = $email;
}
/**
* @param bool $enabled
*/
public function setEnabled(bool $enabled) {
$this->enabled = $enabled;
}
/**
* @param bool $firstCloudLogin
*/
public function setFirstCloudLogin(bool $firstCloudLogin) {
$this->firstCloudLogin = $firstCloudLogin;
}
/**
* @param string $salt
*/
public function setSalt(string $salt) {
$this->salt = $salt;
}
/**
* @param string $password
*/
public function setPassword(?string $password) {
/* nunca un password null ni '' */
$password and $this->password = $password;
}
/**
* @param \DateTime|null $lastLogin
*/
public function setLastLogin(?\DateTime $lastLogin) {
$this->lastLogin = $lastLogin;
}
/**
* @param \DateTime|null $lastCloudLogin
*/
public function setLastCloudLogin(?\DateTime $lastCloudLogin) {
$this->lastCloudLogin = $lastCloudLogin;
}
/**
* @param string|null $confirmationToken
*/
public function setConfirmationToken(?string $confirmationToken) {
$this->confirmationToken = $confirmationToken;
}
/**
* @param \DateTime|null $passwordRequestedAt
*/
public function setPasswordRequestedAt(?\DateTime $passwordRequestedAt) {
$this->passwordRequestedAt = $passwordRequestedAt;
}
/**
* @param array $roles
*/
public function setRoles(array $roles) {
if (sizeof($roles) == 0)
$roles[] = 'ROLE_USER';
$this->roles = $roles;
}
/**
* @return mixed
*/
public function getProvider() {
return $this->provider;
}
/**
* @param mixed $provider
*/
public function setProvider($provider) {
$this->provider = $provider;
}
/**
* @return string
*/
public function getEmail() {
return $this->email;
}
/**
* @return bool
*/
public function isEnabled() {
return $this->enabled;
}
/**
* @return bool
*/
public function isFirstCloudLogin() {
return $this->firstCloudLogin;
}
/**
* @return \DateTime|null
*/
public function getLastLogin() {
return $this->lastLogin;
}
/**
* @return \DateTime|null
*/
public function getLastCloudLogin() {
return $this->lastCloudLogin;
}
/**
* @return string|null
*/
public function getConfirmationToken() {
return $this->confirmationToken;
}
/**
* @return \DateTime|null
*/
public function getPasswordRequestedAt() {
return $this->passwordRequestedAt;
}
/**
* Removes sensitive data from the user.
*
* This is important if, at any given point, sensitive information like
* the plain-text password is stored on this object.
*/
public function eraseCredentials() {
// TODO: Implement eraseCredentials() method.
}
/**
* @return mixed
*/
public function getId() {
return $this->id;
}
/**
* @param mixed $id
*/
public function setId($id) {
$this->id = $id;
}
/**
* @return mixed
*/
public function getTreatments() {
return $this->treatments;
}
/**
* @param mixed $treatments
*/
public function setTreatments($treatments) {
$this->treatments = $treatments;
}
/**
* @return mixed
*/
public function getCreated() {
return $this->created;
}
/**
* @param mixed $created
*/
public function setCreated($created): void {
$this->created = $created;
}
/**
* @return mixed
*/
public function getUserType() {
return $this->userType;
}
/**
* @param mixed $userType
*/
public function setUserType($userType): void {
$this->userType = $userType;
}
public function getEnabled(): ?bool {
return $this->enabled;
}
public function addTreatment(Treatment $treatment): self {
if (!$this->treatments->contains($treatment)) {
$this->treatments[] = $treatment;
$treatment->setUser($this);
}
return $this;
}
public function removeTreatment(Treatment $treatment): self {
if ($this->treatments->contains($treatment)) {
$this->treatments->removeElement($treatment);
// set the owning side to null (unless already changed)
if ($treatment->getUser() === $this) {
$treatment->setUser(null);
}
}
return $this;
}
public function getOrganization(): ?Organization {
return $this->organization;
}
public function setOrganization(?Organization $organization): self {
$this->organization = $organization;
return $this;
}
public function getTaasEnabled(): ?bool {
return $this->taasEnabled;
}
public function setTaasEnabled(?bool $taasEnabled): self {
$this->taasEnabled = $taasEnabled;
return $this;
}
/**
* @return bool
*/
public function isDemo(): ?bool {
return $this->demo;
}
/**
* @param bool $demo
*/
public function setDemo(?bool $demo): void {
$this->demo = $demo;
}
public function getDemo(): ?bool
{
return $this->demo;
}
public function getFirstCloudLogin(): ?bool
{
return $this->firstCloudLogin;
}
public function getLocale(): ?string
{
return $this->locale;
}
public function setLocale(?string $locale): self
{
$this->locale = $locale;
return $this;
}
public function getAddress(): ?Address
{
return $this->address;
}
public function setAddress(?Address $address): self
{
$this->address = $address;
return $this;
}
public function isTaasEnabled(): ?bool
{
return $this->taasEnabled;
}
public function getSecondEmail(): ?string
{
return $this->secondEmail;
}
public function setSecondEmail(?string $secondEmail): self
{
$this->secondEmail = $secondEmail;
return $this;
}
public function getUserIntoFarm(): ?int
{
return $this->userIntoFarm;
}
public function setUserIntoFarm(?int $userIntoFarm): self
{
$this->userIntoFarm = $userIntoFarm;
return $this;
}
public function getUpdatedAt(): ?\DateTime
{
return $this->updatedAt;
}
public function setUpdatedAt(\DateTime $updatedAt): self
{
$this->updatedAt = $updatedAt;
return $this;
}
public function getCreatedAt(): ?\DateTime
{
return $this->createdAt;
}
public function setCreatedAt(\DateTime $createdAt): self
{
$this->createdAt = $createdAt;
return $this;
}
public function getDeletedAt(): ?\DateTime
{
return $this->deletedAt;
}
public function setDeletedAt(?\DateTime $deletedAt): self
{
$this->deletedAt = $deletedAt;
return $this;
}
/**
* @return Collection<int, Media>
*/
public function getMedia(): Collection
{
return $this->media;
}
public function addMedium(Media $medium): self
{
if (!$this->media->contains($medium)) {
$this->media[] = $medium;
$medium->setUser($this);
}
return $this;
}
public function removeMedium(Media $medium): self
{
if ($this->media->removeElement($medium)) {
// set the owning side to null (unless already changed)
if ($medium->getUser() === $this) {
$medium->setUser(null);
}
}
return $this;
}
public function isIsOrganization(): ?bool
{
return $this->isOrganization;
}
public function setIsOrganization(?bool $isOrganization): self
{
$this->isOrganization = $isOrganization;
return $this;
}
}