src/Entity/User.php line 16

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use Doctrine\Common\Collections\ArrayCollection;
  4. use Doctrine\Common\Collections\Collection;
  5. use Doctrine\ORM\Mapping as ORM;
  6. use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
  7. use Symfony\Component\Security\Core\User\UserInterface;
  8. use Symfony\Component\Validator\Constraints as Assert;
  9. /**
  10.  * @ORM\Entity(repositoryClass="App\Repository\UserRepository")
  11.  * @ORM\Table(name="app_user")
  12.  */
  13. class User implements UserInterface
  14. {   
  15.     /**
  16.      * @ORM\Id()
  17.      * @ORM\GeneratedValue()
  18.      * @ORM\Column(type="integer")
  19.      */
  20.     private $id;
  21.      /**
  22.      * @ORM\Column(type="string", length=2, nullable=true)
  23.      * @Assert\Locale(
  24.      *     canonicalize = true
  25.      * )
  26.      */
  27.     protected $locale;
  28.     /**
  29.      * @ORM\Column(type="string", length=180, nullable=true)
  30.      */
  31.     private $username;
  32.     
  33.     /**
  34.      * @ORM\Column(type="string", length=180, nullable=true)
  35.      * @Assert\Email()
  36.      */
  37.     private $email;
  38.     /**
  39.      * @ORM\Column(type="json")
  40.      */
  41.     private $roles = [];
  42.     /**
  43.      * @var string The hashed password
  44.      * @ORM\Column(type="string", nullable=true)
  45.      */
  46.     private $password;
  47.     /**
  48.      * @ORM\Column(type="boolean", nullable=true)
  49.      */
  50.     private $gender;
  51.     /**
  52.      * @ORM\Column(type="boolean", nullable=true, options={"default": false})
  53.      */
  54.     private $enabled;
  55.     /**
  56.      * @ORM\Column(type="datetime", nullable=true)
  57.      */
  58.     private $createdAt;
  59.     /**
  60.      * @ORM\Column(type="datetime", nullable=true)
  61.      */
  62.     private $lastActivityAt;
  63.     /**
  64.      * @ORM\Column(type="boolean", options={"default": false})
  65.      */
  66.     private $deleted;
  67.     /**
  68.      * @ORM\Column(type="datetime", nullable=true)
  69.      */
  70.     private $deletedAt;
  71.     
  72.     /**
  73.      * @ORM\OneToMany(targetEntity=Image::class, mappedBy="author", cascade={"persist", "remove"})
  74.      */
  75.     private $images;
  76.     /**
  77.      * @ORM\Column(type="string", length=100, nullable=true)
  78.      * @Assert\Length(
  79.      *      min = 10,
  80.      *      max = 20
  81.      * )
  82.      */
  83.     private $phone;
  84.     /**
  85.      * @ORM\Column(type="string", length=255, nullable=true)
  86.      */
  87.     private $resetToken;
  88.     /**
  89.      * @ORM\Column(type="string", length=255, nullable=true)
  90.      */
  91.     private $lastName;
  92.     /**
  93.      * @ORM\Column(type="string", length=255, nullable=true)
  94.      */
  95.     private $firstName;
  96.     /**
  97.      * @ORM\Column(type="text", nullable=true)
  98.      */
  99.     private $address;
  100.     /**
  101.      * @ORM\Column(type="string", length=255, nullable=true)
  102.      */
  103.     private $postalCode;
  104.     /**
  105.      * @ORM\Column(type="string", length=255, nullable=true)
  106.      */
  107.     private $city;
  108.     /**
  109.      * @ORM\Column(type="boolean", options={"default": true})
  110.      */
  111.     private $optin;
  112.     /**
  113.      * @ORM\Column(type="string", length=255, nullable=true)
  114.      */
  115.     private $companyName;
  116.     /**
  117.      * @ORM\Column(type="datetime", nullable=true)
  118.      */
  119.     private $updatedAt;
  120.     /**
  121.      * @ORM\Column(type="text", nullable=true)
  122.      */
  123.     private $internalMemo;
  124.     /**
  125.      * @ORM\Column(type="string", length=13, nullable=true)
  126.      */
  127.     private $uniqueId;
  128.     /**
  129.      * @ORM\Column(type="string", length=255, nullable=true)
  130.      */
  131.     private $publicId;
  132.     /**
  133.      * @ORM\Column(type="string", length=20, nullable=true)
  134.      * @Assert\Length(
  135.      *      min = 2,
  136.      *      max = 20
  137.      * )
  138.      */
  139.     private $pseudo;
  140.     /**
  141.      * @ORM\ManyToOne(targetEntity=Platform::class, inversedBy="users")
  142.      * @ORM\JoinColumn(nullable=false)
  143.      */
  144.     private $platform;
  145.     /**
  146.      * @ORM\OneToMany(targetEntity=Subscription::class, mappedBy="user")
  147.      */
  148.     private $subscriptions;
  149.     
  150.     /**
  151.      * @ORM\OneToMany(targetEntity=Ticket::class, mappedBy="user")
  152.      */
  153.     private $tickets;
  154.     /**
  155.      * @ORM\Column(type="boolean", options={"default": false})
  156.      */
  157.     private $hidden;
  158.     /**
  159.      * @ORM\Column(type="text", nullable=true)
  160.      */
  161.     private $callbackUrl;
  162.     /**
  163.      * @ORM\Column(type="string", unique=true, length=255, nullable=true)
  164.      */
  165.     private $apiToken;
  166.     /**
  167.      * @ORM\OneToMany(targetEntity=Stat::class, mappedBy="publisher")
  168.      */
  169.     private $stats;
  170.     public function __construct()
  171.     {
  172.         $this->deleted false;
  173.         $this->createdAt = new \Datetime();
  174.         $this->updatedAt = new \Datetime();
  175.         $this->enabled false;
  176.         $this->optin true;
  177.         $this->uniqueId uniqid();
  178.         $this->publicId uniqid();
  179.         $this->subscriptions = new ArrayCollection();
  180.         $this->tickets = new ArrayCollection();
  181.         $this->images = new ArrayCollection();
  182.         $this->hidden false;
  183.         $this->apiToken self::newApiToken();
  184.         $this->stats = new ArrayCollection();
  185.     }
  186.     
  187.     public static function newApiToken()
  188.     {
  189.         return bin2hex(random_bytes(64));
  190.     }
  191.     public function getId(): ?int
  192.     {
  193.         return $this->id;
  194.     }
  195.     /**
  196.      * @see UserInterface
  197.      */
  198.     public function getRoles(): array
  199.     {
  200.         $roles $this->roles;
  201.         // guarantee every user at least has ROLE_USER
  202.         $roles[] = 'ROLE_USER';
  203.         return array_unique($roles);
  204.     }
  205.     public function setRoles(array $roles): self
  206.     {
  207.         $this->roles $roles;
  208.         return $this;
  209.     }
  210.     
  211.     public function addRole($role): self
  212.     {
  213.         if (!in_array($role$this->roles)) {
  214.             $this->roles[] = $role;
  215.         }
  216.         
  217.         return $this;
  218.     }
  219.     
  220.     public function hasRole($role): ?bool
  221.     {
  222.         foreach($this->roles as $r) {
  223.             if ($r == $role) {
  224.                 return true;
  225.             }
  226.         }
  227.         return false;
  228.     }
  229.     /**
  230.      * @see UserInterface
  231.      */
  232.     public function getPassword(): string
  233.     {
  234.         return (string) $this->password;
  235.     }
  236.     public function setPassword($password): self
  237.     {
  238.         $this->password $password;
  239.         return $this;
  240.     }
  241.     /**
  242.      * @see UserInterface
  243.      */
  244.     public function getSalt()
  245.     {
  246.         // not needed when using the "bcrypt" algorithm in security.yaml
  247.     }
  248.     /**
  249.      * @see UserInterface
  250.      */
  251.     public function eraseCredentials()
  252.     {
  253.         // If you store any temporary, sensitive data on the user, clear it here
  254.         // $this->plainPassword = null;
  255.     }
  256.     public function getGender(): ?bool
  257.     {
  258.         return $this->gender;
  259.     }
  260.     public function setGender(?bool $gender): self
  261.     {
  262.         $this->gender $gender;
  263.         return $this;
  264.     }
  265.     public function getEnabled(): ?bool
  266.     {
  267.         return $this->enabled;
  268.     }
  269.     public function setEnabled(?bool $enabled): self
  270.     {
  271.         $this->enabled $enabled;
  272.         return $this;
  273.     }
  274.     public function getCreatedAt(): ?\DateTimeInterface
  275.     {
  276.         return $this->createdAt;
  277.     }
  278.     public function setCreatedAt(\DateTimeInterface $createdAt): self
  279.     {
  280.         $this->createdAt $createdAt;
  281.         return $this;
  282.     }
  283.     
  284.     public function getLocale(): ?string
  285.     {
  286.         return $this->locale;
  287.     }
  288.     
  289.     public function setLocale($locale): self
  290.     {
  291.         $this->locale $locale;
  292.         return $this;
  293.     }
  294.     public function getLastActivityAt(): ?\DateTimeInterface
  295.     {
  296.         return $this->lastActivityAt;
  297.     }
  298.     public function setLastActivityAt(?\DateTimeInterface $lastActivityAt): self
  299.     {
  300.         $this->lastActivityAt $lastActivityAt;
  301.         return $this;
  302.     }
  303.     
  304.     public function isActiveNow()
  305.     {
  306.         // Delay during wich the user will be considered as still active
  307.         $delay = new \DateTime('1 minute ago');
  308.         return ( $this->getLastActivityAt() > $delay );
  309.     }
  310.     public function getDeleted(): ?bool
  311.     {
  312.         return $this->deleted;
  313.     }
  314.     public function setDeleted(bool $deleted): self
  315.     {
  316.         $this->deleted $deleted;
  317.         return $this;
  318.     }
  319.     public function getDeletedAt(): ?\DateTimeInterface
  320.     {
  321.         return $this->deletedAt;
  322.     }
  323.     public function setDeletedAt(?\DateTimeInterface $deletedAt): self
  324.     {
  325.         $this->deletedAt $deletedAt;
  326.         return $this;
  327.     }
  328.     public function getEmail(): ?string
  329.     {
  330.         return $this->email;
  331.     }
  332.     public function setEmail($email): self
  333.     {
  334.         $this->email $email;
  335.         return $this;
  336.     }
  337.     public function getPhone(): ?string
  338.     {
  339.         return $this->phone;
  340.     }
  341.     public function setPhone($phone): self
  342.     {
  343.         $this->phone $phone;
  344.         return $this;
  345.     }
  346.     public function getLastName(): ?string
  347.     {
  348.         return $this->lastName;
  349.     }
  350.     public function setLastName($lastName): self
  351.     {
  352.         $this->lastName $lastName;
  353.         return $this;
  354.     }
  355.     public function getUsername(): ?string
  356.     {
  357.         return $this->username;
  358.     }
  359.     public function setUsername($username): self
  360.     {
  361.         $this->username $username;
  362.         return $this;
  363.     }
  364.     
  365.     public function getFirstName(): ?string
  366.     {
  367.         return $this->firstName;
  368.     }
  369.     public function setFirstName($firstName): self
  370.     {
  371.         $this->firstName $firstName;
  372.         return $this;
  373.     }
  374.     public function getAddress(): ?string
  375.     {
  376.         return $this->address;
  377.     }
  378.     public function setAddress($address): self
  379.     {
  380.         $this->address $address;
  381.         return $this;
  382.     }
  383.     public function getPostalCode(): ?string
  384.     {
  385.         return $this->postalCode;
  386.     }
  387.     public function setPostalCode($postalCode): self
  388.     {
  389.         $this->postalCode $postalCode;
  390.         return $this;
  391.     }
  392.     public function getCity(): ?string
  393.     {
  394.         return $this->city;
  395.     }
  396.     public function setCity($city): self
  397.     {
  398.         $this->city $city;
  399.         return $this;
  400.     }
  401.     public function getOptin(): ?bool
  402.     {
  403.         return $this->optin;
  404.     }
  405.     public function setOptin(bool $optin): self
  406.     {
  407.         $this->optin $optin;
  408.         return $this;
  409.     }
  410.     public function getCompanyName(): ?string
  411.     {
  412.         return $this->companyName;
  413.     }
  414.     public function setCompanyName($companyName): self
  415.     {
  416.         $this->companyName $companyName;
  417.         return $this;
  418.     }
  419.     public function getUpdatedAt(): ?\DateTimeInterface
  420.     {
  421.         return $this->updatedAt;
  422.     }
  423.     public function setUpdatedAt(?\DateTimeInterface $updatedAt): self
  424.     {
  425.         $this->updatedAt $updatedAt;
  426.         return $this;
  427.     }
  428.     public function getInternalMemo(): ?string
  429.     {
  430.         return $this->internalMemo;
  431.     }
  432.     public function setInternalMemo($internalMemo): self
  433.     {
  434.         $this->internalMemo $internalMemo;
  435.         return $this;
  436.     }
  437.     public function getResetToken(): ?string
  438.     {
  439.         return $this->resetToken;
  440.     }
  441.     public function setResetToken($resetToken): self
  442.     {
  443.         $this->resetToken $resetToken;
  444.         return $this;
  445.     }
  446.     
  447.     public function generateNewResetToken()
  448.     {
  449.         return md5(random_bytes(20));
  450.     }
  451.     
  452.     public function setNewResetToken(): self
  453.     {
  454.         $this->resetToken $this->generateNewResetToken();
  455.         return $this;
  456.     }
  457.     public function getUniqueId(): ?string
  458.     {
  459.         return $this->uniqueId;
  460.     }
  461.     public function setUniqueId($uniqueId): self
  462.     {
  463.         $this->uniqueId $uniqueId;
  464.         return $this;
  465.     }
  466.     public function getPlatform(): ?Platform
  467.     {
  468.         return $this->platform;
  469.     }
  470.     public function setPlatform(?Platform $platform): self
  471.     {
  472.         $this->platform $platform;
  473.         return $this;
  474.     }
  475.     /**
  476.      * @return Collection|Subscription[]
  477.      */
  478.     public function getSubscriptions(): Collection
  479.     {
  480.         return $this->subscriptions;
  481.     }
  482.     public function addSubscription(Subscription $subscription): self
  483.     {
  484.         if (!$this->subscriptions->contains($subscription)) {
  485.             $this->subscriptions[] = $subscription;
  486.             $subscription->setUser($this);
  487.         }
  488.         return $this;
  489.     }
  490.     public function removeSubscription(Subscription $subscription): self
  491.     {
  492.         if ($this->subscriptions->removeElement($subscription)) {
  493.             // set the owning side to null (unless already changed)
  494.             if ($subscription->getUser() === $this) {
  495.                 $subscription->setUser(null);
  496.             }
  497.         }
  498.         return $this;
  499.     }
  500.     
  501.     /**
  502.      * @return Collection|Ticket[]
  503.      */
  504.     public function getTickets(): Collection
  505.     {
  506.         return $this->tickets;
  507.     }
  508.     public function addTicket(Ticket $ticket): self
  509.     {
  510.         if (!$this->tickets->contains($ticket)) {
  511.             $this->tickets[] = $ticket;
  512.             $ticket->setUser($this);
  513.         }
  514.         return $this;
  515.     }
  516.     public function removeTicket(Ticket $ticket): self
  517.     {
  518.         if ($this->tickets->removeElement($ticket)) {
  519.             // set the owning side to null (unless already changed)
  520.             if ($ticket->getUser() === $this) {
  521.                 $ticket->setUser(null);
  522.             }
  523.         }
  524.         return $this;
  525.     }
  526.     public function getPublicId(): ?string
  527.     {
  528.         return $this->publicId;
  529.     }
  530.     public function setPublicId(?string $publicId): self
  531.     {
  532.         $this->publicId $publicId;
  533.         return $this;
  534.     }
  535.     public function getPseudo(): ?string
  536.     {
  537.         return $this->pseudo;
  538.     }
  539.     public function setPseudo(?string $pseudo): self
  540.     {
  541.         $this->pseudo $pseudo;
  542.         return $this;
  543.     }
  544.     /**
  545.      * @return Collection|Image[]
  546.      */
  547.     public function getImages(): Collection
  548.     {
  549.         return $this->images;
  550.     }
  551.     public function addImage(Image $image): self
  552.     {
  553.         if (!$this->images->contains($image)) {
  554.             $this->images[] = $image;
  555.             $image->setAuthor($this);
  556.         }
  557.         return $this;
  558.     }
  559.     public function removeImage(Image $image): self
  560.     {
  561.         if ($this->images->removeElement($image)) {
  562.             // set the owning side to null (unless already changed)
  563.             if ($image->getAuthor() === $this) {
  564.                 $image->setAuthor(null);
  565.             }
  566.         }
  567.         return $this;
  568.     }
  569.     
  570.     public function getUniqueName(): ?string
  571.     {
  572.         return '#'.$this->id.' '.$this->pseudo;
  573.     }
  574.     
  575.     public function getAutocompletionLabel(): ?string
  576.     {
  577.         return $this->getUniqueName();
  578.     }
  579.     public function getHidden(): ?bool
  580.     {
  581.         return $this->hidden;
  582.     }
  583.     public function setHidden(bool $hidden): self
  584.     {
  585.         $this->hidden $hidden;
  586.         return $this;
  587.     }
  588.     public function getCallbackUrl(): ?string
  589.     {
  590.         return $this->callbackUrl;
  591.     }
  592.     public function setCallbackUrl(?string $callbackUrl): self
  593.     {
  594.         $this->callbackUrl $callbackUrl;
  595.         return $this;
  596.     }
  597.     public function getApiToken(): ?string
  598.     {
  599.         return $this->apiToken;
  600.     }
  601.     public function setApiToken(?string $apiToken): self
  602.     {
  603.         $this->apiToken $apiToken;
  604.         return $this;
  605.     }
  606.     /**
  607.      * @return Collection|Stat[]
  608.      */
  609.     public function getStats(): Collection
  610.     {
  611.         return $this->stats;
  612.     }
  613.     public function addStat(Stat $stat): self
  614.     {
  615.         if (!$this->stats->contains($stat)) {
  616.             $this->stats[] = $stat;
  617.             $stat->setPublisher($this);
  618.         }
  619.         return $this;
  620.     }
  621.     public function removeStat(Stat $stat): self
  622.     {
  623.         if ($this->stats->removeElement($stat)) {
  624.             // set the owning side to null (unless already changed)
  625.             if ($stat->getPublisher() === $this) {
  626.                 $stat->setPublisher(null);
  627.             }
  628.         }
  629.         return $this;
  630.     }
  631. }