src/Entity/User.php line 21

  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Entity;
  4. use App\Repository\UserRepository;
  5. use DateTime;
  6. use DateTimeInterface;
  7. use DateTimeZone;
  8. use Doctrine\ORM\Mapping as ORM;
  9. use Doctrine\Common\Collections\ArrayCollection;
  10. use Doctrine\Common\Collections\Collection;
  11. use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
  12. use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface;
  13. use Symfony\Component\Validator\Constraints as Assert;
  14. use Symfony\Component\Security\Core\User\UserInterface;
  15. #[ORM\Entity(repositoryClassUserRepository::class)]
  16. #[UniqueEntity(fields'email'message'Email already taken')]
  17. class User implements UserInterfacePasswordAuthenticatedUserInterface
  18. {
  19.     #[ORM\Id]
  20.     #[ORM\Column(type'integer')]
  21.     #[ORM\GeneratedValue(strategy'AUTO')]
  22.     private ?int $id null;
  23.     #[ORM\Column(type'string'length100uniquetrueoptions: ['collation' => 'latin1_general_ci'])]
  24.     #[Assert\NotBlank]
  25.     #[Assert\Email]
  26.     private string $email;
  27.     #[Assert\Length(min4)]
  28.     private ?string $plainPassword null;
  29.     #[ORM\Column(type'string'length64)]
  30.     private ?string $password '';
  31.     #[ORM\Column(type'array')]
  32.     private array $roles = ['ROLE_USER'];
  33.     #[ORM\OneToMany(mappedBy'author'targetEntityWidget::class)]
  34.     private Collection $widgets;
  35.     #[ORM\ManyToOne(targetEntityCompany::class, cascade: ['persist'], inversedBy'employees')]
  36.     #[ORM\JoinColumn(nullabletrueonDelete'CASCADE')]
  37.     private ?Company $company;
  38.     #[ORM\Column(type'datetime'nullabletrue)]
  39.     private ?DateTimeInterface $registerDate;
  40.     #[ORM\Column(type'string'length32nullabletrue)]
  41.     private ?string $confirmationToken;
  42.     #[ORM\Column(type'string'length99nullabletrue)]
  43.     private ?string $dropboxToken;
  44.     #[ORM\Column(type'boolean')]
  45.     private ?bool $isCompanyAdmin;
  46.     #[ORM\OneToMany(mappedBy'user'targetEntitySubscription::class, cascade: ['persist'])]
  47.     private Collection $subscriptions;
  48.     #[ORM\Column(type'boolean')]
  49.     private ?bool $isEnabled false;
  50.     #[ORM\Column(type'datetime'nullabletrue)]
  51.     private ?DateTimeInterface $lastLogin;
  52.     #[ORM\Column(type'integer')]
  53.     private ?int $uploadCount 0;
  54.     #[ORM\Column(type'text'nullabletrue)]
  55.     private ?string $mailerSubscription;
  56.     #[ORM\Column(type'string'length2)]
  57.     private ?string $locale 'fr';
  58.     #[ORM\ManyToMany(targetEntityTeam::class, inversedBy'users')]
  59.     private Collection $team;
  60.     public function __construct()
  61.     {
  62.         $this->widgets = new ArrayCollection();
  63.         $this->subscriptions = new ArrayCollection();
  64.         $this->setRegisterDate(new DateTime('now', new DateTimeZone('Europe/Paris')));
  65.         $this->setConfirmationToken(bin2hex(random_bytes(16)));
  66.         $this->team = new ArrayCollection();
  67.     }
  68.     public function getId(): ?int
  69.     {
  70.         return $this->id;
  71.     }
  72.     public function getEmail()
  73.     {
  74.         return $this->email;
  75.     }
  76.     public function setEmail($email): self
  77.     {
  78.         $this->email $email;
  79.         return $this;
  80.     }
  81.     public function getUsername()
  82.     {
  83.         return $this->getEmail();
  84.     }
  85.     public function getPlainPassword()
  86.     {
  87.         return $this->plainPassword;
  88.     }
  89.     public function setPlainPassword($password): self
  90.     {
  91.         $this->plainPassword $password;
  92.         return $this;
  93.     }
  94.     public function getPassword(): ?string
  95.     {
  96.         return $this->password;
  97.     }
  98.     public function setPassword(string $password): self
  99.     {
  100.         $this->password $password;
  101.         return $this;
  102.     }
  103.     public function getSalt()
  104.     {
  105.         return null;
  106.     }
  107.     public function getRoles(): array
  108.     {
  109.         return $this->roles;
  110.     }
  111.     public function getUserIdentifier(): string
  112.     {
  113.         return $this->getUsername();
  114.     }
  115.     public function setRoles(string|array $role): void
  116.     {
  117.         // Only used in EasyAdminBundle
  118.         if (is_array($role)) {
  119.             $role $role[0];
  120.         }
  121.         $this->roles = [strtoupper($role)];
  122.     }
  123.     public function eraseCredentials()
  124.     {
  125.     }
  126.     public function getWidgets(): Collection
  127.     {
  128.         return $this->widgets;
  129.     }
  130.     public function getCompany(): ?Company
  131.     {
  132.         return $this->company;
  133.     }
  134.     public function setCompany(?Company $company): self
  135.     {
  136.         $this->company $company;
  137.         return $this;
  138.     }
  139.     public function getRegisterDate(): ?DateTimeInterface
  140.     {
  141.         return $this->registerDate;
  142.     }
  143.     public function setRegisterDate(?DateTimeInterface $registerDate): self
  144.     {
  145.         $this->registerDate $registerDate;
  146.         return $this;
  147.     }
  148.     public function getConfirmationToken(): ?string
  149.     {
  150.         return $this->confirmationToken;
  151.     }
  152.     public function setConfirmationToken(?string $confirmationToken): self
  153.     {
  154.         $this->confirmationToken $confirmationToken;
  155.         return $this;
  156.     }
  157.     public function getDropboxToken(): ?string
  158.     {
  159.         return $this->dropboxToken;
  160.     }
  161.     public function setDropboxToken(?string $dropboxToken): self
  162.     {
  163.         $this->dropboxToken $dropboxToken;
  164.         return $this;
  165.     }
  166.     /**
  167.      * Get all uploads tags for company
  168.      */
  169.     public function getCompanyTags(): array
  170.     {
  171.         $companyTags = [];
  172.         /** @var Widget $widget */
  173.         foreach ($this->getCompanyWidgets() as $widget) {
  174.             foreach ($widget->getUploads() as $upload) {
  175.                 $companyTags array_merge($companyTags$upload->getTags());
  176.             }
  177.         }
  178.         return array_unique($companyTags);
  179.     }
  180.     public function __toString(): string
  181.     {
  182.         return $this->getEmail();
  183.     }
  184.     public function getCompanyWidgets()
  185.     {
  186.         $companyWidgets = [];
  187.         // If user is in company, get company widget's
  188.         if ($this->getCompany() != null) {
  189.             foreach ($this->getCompany()->getEmployees() as $employee) {
  190.                 foreach ($employee->getWidgets() as $widget) {
  191.                     array_push($companyWidgets$widget);
  192.                 }
  193.             }
  194.         } else {
  195.             // Else, get user widget's
  196.             foreach ($this->getWidgets() as $widget) {
  197.                 // @codeCoverageIgnoreStart
  198.                 array_push($companyWidgets$widget);
  199.                 // @codeCoverageIgnoreEnd
  200.             }
  201.         }
  202.         return $companyWidgets;
  203.     }
  204.     public function getIsCompanyAdmin(): ?bool
  205.     {
  206.         return $this->isCompanyAdmin;
  207.     }
  208.     public function setIsCompanyAdmin(bool $isCompanyAdmin): self
  209.     {
  210.         $this->isCompanyAdmin $isCompanyAdmin;
  211.         return $this;
  212.     }
  213.     public function getSubscriptions(): Collection
  214.     {
  215.         return $this->subscriptions;
  216.     }
  217.     public function getActiveSubscription()
  218.     {
  219.         /** @var Subscription $subscription */
  220.         foreach ($this->getSubscriptions() as $subscription) {
  221.             if (($subscription->getIsActive() && !$subscription->getIsDelete()) || (!$subscription->getIsActive() && !$subscription->getIsDelete())) {
  222.                 return $subscription;
  223.             }
  224.         }
  225.         return null;
  226.     }
  227.     public function getIsEnabled(): ?bool
  228.     {
  229.         return $this->isEnabled;
  230.     }
  231.     public function setIsEnabled(bool $isEnabled): self
  232.     {
  233.         $this->isEnabled $isEnabled;
  234.         return $this;
  235.     }
  236.     public function getLastLogin(): ?DateTimeInterface
  237.     {
  238.         return $this->lastLogin;
  239.     }
  240.     public function setLastLogin(?DateTimeInterface $lastLogin): self
  241.     {
  242.         $this->lastLogin $lastLogin;
  243.         return $this;
  244.     }
  245.     public function getUploadCount()
  246.     {
  247.         return $this->uploadCount;
  248.     }
  249.     public function setUploadCount(int $uploadCount): self
  250.     {
  251.         $this->uploadCount $uploadCount;
  252.         return $this;
  253.     }
  254.     public function getMailerSubscription()
  255.     {
  256.         return $this->mailerSubscription;
  257.     }
  258.     public function setMailerSubscription(array $mailerSubscription): self
  259.     {
  260.         $this->mailerSubscription json_encode($mailerSubscription);
  261.         return $this;
  262.     }
  263.     public function getLocale(): ?string
  264.     {
  265.         return $this->locale;
  266.     }
  267.     public function setLocale(string $locale): self
  268.     {
  269.         $this->locale $locale;
  270.         return $this;
  271.     }
  272.     public function getTeam(): Collection
  273.     {
  274.         return $this->team;
  275.     }
  276.     public function addTeam(Team $team): self
  277.     {
  278.         if (!$this->team->contains($team)) {
  279.             $this->team[] = $team;
  280.         }
  281.         return $this;
  282.     }
  283.     public function removeTeam(Team $team): self
  284.     {
  285.         if ($this->team->contains($team)) {
  286.             $this->team->removeElement($team);
  287.         }
  288.         return $this;
  289.     }
  290. }