src/Entity/User.php line 22

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use App\Repository\UserRepository;
  4. use Doctrine\Common\Collections\ArrayCollection;
  5. use Doctrine\Common\Collections\Collection;
  6. use Doctrine\DBAL\Types\Types;
  7. use Doctrine\ORM\Mapping as ORM;
  8. use Symfony\Component\Security\Core\User\UserInterface;
  9. use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
  10. use Symfony\Component\Validator\Constraints as Assert;
  11. use Symfony\Component\HttpFoundation\File\File;
  12. use Vich\UploaderBundle\Mapping\Annotation as Vich;
  13. /**
  14.  * @ORM\Entity(repositoryClass=UserRepository::class)
  15.  * @ORM\HasLifecycleCallbacks()
  16.  * @UniqueEntity("email",message="L'adresse mail existe déjà.")
  17.  * @Vich\Uploadable
  18.  */
  19. class User implements UserInterface
  20. {
  21.     /**
  22.      * @ORM\Id
  23.      * @ORM\GeneratedValue
  24.      * @ORM\Column(type="integer")
  25.      */
  26.     private $id;
  27.     /**
  28.      * @ORM\Column(type="string", length=180, unique=true)
  29.      * @Assert\NotBlank(message="Le mail est obligatoire")
  30.      * @Assert\Email(message="Email non valide")
  31.      */
  32.     private $email;
  33.     /**
  34.      * @ORM\Column(type="json")
  35.      */
  36.     private $roles = [];
  37.     /**
  38.      * @var string The hashed password
  39.      * @ORM\Column(type="string")
  40.      *
  41.      * @ORM\Column(type="string", length=255)
  42.      * @Assert\NotBlank(message="Le mot de passe ne doit pas être vide.")
  43.      * @Assert\Length(
  44.      *      min = 8,
  45.      *      minMessage = "Le mot de passe doit être minimun de {{ limit }} caractères",
  46.      * )
  47.      * @Assert\Regex(
  48.      *     pattern="/((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/",
  49.      *     message="Le mot de passe doit avoir au moins une lettre majuscule, une lettre miniscule, un caractère spécial et un chiffre"
  50.      * )
  51.      */
  52.     private $password;
  53.     private $password_edit;
  54.     private $nomComplet;
  55.     /**
  56.      * @ORM\Column(type="string", length=255, nullable=true)
  57.      * @Assert\NotBlank(message="Le prénom est obligatoire")
  58.      */
  59.     private $firstName;
  60.     /**
  61.      * @ORM\Column(type="string", length=255, nullable=true)
  62.      * @Assert\NotBlank(message="Le nom est obligatoire")
  63.      */
  64.     private $lastName;
  65.     /**
  66.      * @ORM\Column(type="string", length=255, nullable=true)
  67.      */
  68.     private $tel;
  69.     /**
  70.      * @ORM\Column(type="string", length=255, nullable=true)
  71.      * @Assert\NotBlank(message="Le choix d'un rôle est obligatoire")
  72.      */
  73.     private $role;
  74.     /**
  75.      * @ORM\Column(type="string", length=255, nullable=true)
  76.      */
  77.     private $avatar;
  78.     /**
  79.      * @var File
  80.      * @Vich\UploadableField(mapping="avatars", fileNameProperty="avatar")
  81.      */
  82.     private $avatarFile;
  83.     /**
  84.      * @ORM\Column(type="boolean", nullable=true)
  85.      */
  86.     private $active;
  87.     /**
  88.      * @ORM\Column(type="string", length=255, nullable=true)
  89.      */
  90.     private $token;
  91.     /**
  92.      * @ORM\Column(type="datetime", nullable=true)
  93.      */
  94.     private $createdAt;
  95.     /**
  96.      * @ORM\Column(type="datetime", nullable=true)
  97.      */
  98.     private $updatedAt;
  99.     /**
  100.      * @ORM\OneToMany(targetEntity=Client::class,orphanRemoval=true, mappedBy="user")
  101.      */
  102.     private $clients;
  103.     /**
  104.      * @ORM\OneToMany(targetEntity=Piece::class,orphanRemoval=true, mappedBy="user")
  105.      */
  106.     private $pieces;
  107.     /**
  108.      * @ORM\OneToMany(targetEntity=Payment::class, mappedBy="user")
  109.      */
  110.     private $payments;
  111.     /**
  112.      * @ORM\OneToMany(targetEntity=Gift::class, mappedBy="user")
  113.      */
  114.     private $gifts;
  115.     public function __construct()
  116.     {
  117.         $this->clients = new ArrayCollection();
  118.         $this->pieces = new ArrayCollection();
  119.         $this->payments = new ArrayCollection();
  120.         $this->gifts = new ArrayCollection();
  121.     }
  122.     /**
  123.      * @ORM\PrePersist
  124.      */
  125.     public function createDate()
  126.     {
  127.         $this->createdAt = new \DateTime();
  128.         $this->updatedAt = new \DateTime();
  129.     }
  130.     /**
  131.      * @ORM\PreUpdate
  132.      */
  133.     public function updateDate()
  134.     {
  135.         $this->updatedAt = new \DateTime();
  136.     }
  137.     public function list_roles()
  138.     {
  139.         return [
  140.             'ROLE_SUPER_ADMIN' => 'Super Admin',
  141.             'ROLE_RESPONSABLE' => 'Responsable',
  142.         ];
  143.     }
  144.     public function getId(): ?int
  145.     {
  146.         return $this->id;
  147.     }
  148.     public function getEmail(): ?string
  149.     {
  150.         return $this->email;
  151.     }
  152.     public function setEmail(string $email): self
  153.     {
  154.         $this->email $email;
  155.         return $this;
  156.     }
  157.     /**
  158.      * A visual identifier that represents this user.
  159.      *
  160.      * @see UserInterface
  161.      */
  162.     public function getUsername(): string
  163.     {
  164.         return (string) $this->email;
  165.     }
  166.     /**
  167.      * @see UserInterface
  168.      */
  169.     public function getRoles(): array
  170.     {
  171.         $roles $this->roles;
  172.         // guarantee every user at least has ROLE_USER
  173.         $roles[] = 'ROLE_USER';
  174.         return array_unique($roles);
  175.     }
  176.     public function setRoles(array $roles): self
  177.     {
  178.         $this->roles $roles;
  179.         return $this;
  180.     }
  181.     /**
  182.      * @see UserInterface
  183.      */
  184.     public function getPassword(): string
  185.     {
  186.         return (string) $this->password;
  187.     }
  188.     public function setPassword(string $password): self
  189.     {
  190.         $this->password $password;
  191.         return $this;
  192.     }
  193.     /**
  194.      * @see UserInterface
  195.      */
  196.     public function getSalt()
  197.     {
  198.         // not needed when using the "bcrypt" algorithm in security.yaml
  199.     }
  200.     /**
  201.      * @see UserInterface
  202.      */
  203.     public function eraseCredentials()
  204.     {
  205.         // If you store any temporary, sensitive data on the user, clear it here
  206.         // $this->plainPassword = null;
  207.     }
  208.     public function getFirstName(): ?string
  209.     {
  210.         return $this->firstName;
  211.     }
  212.     public function setFirstName(?string $firstName): self
  213.     {
  214.         $this->firstName $firstName;
  215.         return $this;
  216.     }
  217.     public function getLastName(): ?string
  218.     {
  219.         return $this->lastName;
  220.     }
  221.     public function setLastName(?string $lastName): self
  222.     {
  223.         $this->lastName $lastName;
  224.         return $this;
  225.     }
  226.     public function getTel(): ?string
  227.     {
  228.         return $this->tel;
  229.     }
  230.     public function setTel(?string $tel): self
  231.     {
  232.         $this->tel $tel;
  233.         return $this;
  234.     }
  235.     public function getRole(): ?string
  236.     {
  237.         return $this->role;
  238.     }
  239.     public function setRole(?string $role): self
  240.     {
  241.         $this->role $role;
  242.         return $this;
  243.     }
  244.     public function getAvatar(): ?string
  245.     {
  246.         return $this->avatar;
  247.     }
  248.     public function setAvatar(?string $avatar): self
  249.     {
  250.         $this->avatar $avatar;
  251.         return $this;
  252.     }
  253.     public function getActive(): ?bool
  254.     {
  255.         return $this->active;
  256.     }
  257.     public function setActive(?bool $active): self
  258.     {
  259.         $this->active $active;
  260.         return $this;
  261.     }
  262.     public function getToken(): ?string
  263.     {
  264.         return $this->token;
  265.     }
  266.     public function setToken(?string $token): self
  267.     {
  268.         $this->token $token;
  269.         return $this;
  270.     }
  271.     public function getCreatedAt(): ?\DateTimeInterface
  272.     {
  273.         return $this->createdAt;
  274.     }
  275.     public function setCreatedAt(?\DateTimeInterface $createdAt): self
  276.     {
  277.         $this->createdAt $createdAt;
  278.         return $this;
  279.     }
  280.     public function getUpdatedAt(): ?\DateTimeInterface
  281.     {
  282.         return $this->updatedAt;
  283.     }
  284.     public function setUpdatedAt(?\DateTimeInterface $updatedAt): self
  285.     {
  286.         $this->updatedAt $updatedAt;
  287.         return $this;
  288.     }
  289.     /**
  290.      * Set avatarFile.
  291.      *
  292.      * @param string $avatarFile
  293.      *
  294.      * @return AvatarFile
  295.      */
  296.     public function setAvatarFile(File $avatarFile null)
  297.     {
  298.         $this->avatarFile $avatarFile;
  299.         if ($avatarFile)
  300.             $this->updatedAt = new \DateTimeImmutable();
  301.         return $this;
  302.     }
  303.     /**
  304.      * Get avatarFile.
  305.      *
  306.      * @return string
  307.      */
  308.     public function getAvatarFile()
  309.     {
  310.         return $this->avatarFile;
  311.     }
  312.     public function getPasswordEdit(): ?string
  313.     {
  314.         return $this->password_edit;
  315.     }
  316.     public function setPasswordEdit(string $password_edit): void
  317.     {
  318.         $this->password_edit $password_edit;
  319.     }
  320.     public function getNomcomplet(): ?string
  321.     {
  322.         return $this->firstName." ".$this->lastName;
  323.     }
  324.     public function generateRandom(){
  325.         $random '';
  326.         $str 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
  327.         for($i 0;  $i<50$i++){
  328.             $random .= $str[rand(0,61)];
  329.         }
  330.         return $random;
  331.     }
  332.     /**
  333.      * @return Collection|Client[]
  334.      */
  335.     public function getClients(): Collection
  336.     {
  337.         return $this->clients;
  338.     }
  339.     public function addClient(Client $client): self
  340.     {
  341.         if (!$this->clients->contains($client)) {
  342.             $this->clients[] = $client;
  343.             $client->setUser($this);
  344.         }
  345.         return $this;
  346.     }
  347.     public function removeClient(Client $client): self
  348.     {
  349.         if ($this->clients->contains($client)) {
  350.             $this->clients->removeElement($client);
  351.             // set the owning side to null (unless already changed)
  352.             if ($client->getUser() === $this) {
  353.                 $client->setUser(null);
  354.             }
  355.         }
  356.         return $this;
  357.     }
  358.     /**
  359.      * @return Collection|Piece[]
  360.      */
  361.     public function getPieces(): Collection
  362.     {
  363.         return $this->pieces;
  364.     }
  365.     public function addPiece(Piece $piece): self
  366.     {
  367.         if (!$this->pieces->contains($piece)) {
  368.             $this->pieces[] = $piece;
  369.             $piece->setUser($this);
  370.         }
  371.         return $this;
  372.     }
  373.     public function removePiece(Piece $piece): self
  374.     {
  375.         if ($this->pieces->contains($piece)) {
  376.             $this->pieces->removeElement($piece);
  377.             // set the owning side to null (unless already changed)
  378.             if ($piece->getUser() === $this) {
  379.                 $piece->setUser(null);
  380.             }
  381.         }
  382.         return $this;
  383.     }
  384.     /**
  385.      * Check if user is Assistante
  386.      * @return BOOL
  387.      */
  388.     public function isSuperAdmin(){
  389.         return in_array('ROLE_SUPER_ADMIN'$this->getRoles());
  390.     }
  391.     /**
  392.      * Check if user is Assistante
  393.      * @return BOOL
  394.      */
  395.     public function isResponsable(){
  396.         return in_array('ROLE_RESPONSABLE'$this->getRoles());
  397.     }
  398.     public function isActive(): ?bool
  399.     {
  400.         return $this->active;
  401.     }
  402.     /**
  403.      * @return Collection<int, Payment>
  404.      */
  405.     public function getPayments(): Collection
  406.     {
  407.         return $this->payments;
  408.     }
  409.     public function addPayment(Payment $payment): self
  410.     {
  411.         if (!$this->payments->contains($payment)) {
  412.             $this->payments->add($payment);
  413.             $payment->setUser($this);
  414.         }
  415.         return $this;
  416.     }
  417.     public function removePayment(Payment $payment): self
  418.     {
  419.         if ($this->payments->removeElement($payment)) {
  420.             // set the owning side to null (unless already changed)
  421.             if ($payment->getUser() === $this) {
  422.                 $payment->setUser(null);
  423.             }
  424.         }
  425.         return $this;
  426.     }
  427.     /**
  428.      * @return Collection<int, Gift>
  429.      */
  430.     public function getGifts(): Collection
  431.     {
  432.         return $this->gifts;
  433.     }
  434.     public function addGift(Gift $gift): self
  435.     {
  436.         if (!$this->gifts->contains($gift)) {
  437.             $this->gifts->add($gift);
  438.             $gift->setUser($this);
  439.         }
  440.         return $this;
  441.     }
  442.     public function removeGift(Gift $gift): self
  443.     {
  444.         if ($this->gifts->removeElement($gift)) {
  445.             // set the owning side to null (unless already changed)
  446.             if ($gift->getUser() === $this) {
  447.                 $gift->setUser(null);
  448.             }
  449.         }
  450.         return $this;
  451.     }
  452.     public function getGift(){
  453.         foreach($this->getGifts() as $gift){
  454.             return $gift;
  455.         }
  456.     }
  457.     public function getCollectedPoints(){
  458.         $gift $this->getGift();
  459.         if(is_null($gift)){
  460.             return 0;
  461.         }
  462.         $points 0;
  463.         foreach($this->getClients() as $client){
  464.             if(is_null($client->getDateRef()) or !$client->isEditInvoices()){
  465.                 continue;
  466.             }
  467.             $points += $client->getCollectedPoints($client->getDateRef(),$gift->getPercent());
  468.         }
  469.         return $points;
  470.     }
  471.     public function canViewProgramm(Programm $programm){
  472.         if($this->isSuperAdmin()){
  473.             return true;
  474.         }
  475.         if(!$programm->getClient()->isEditFitness()){
  476.             return false;
  477.         }
  478.         return $programm->getClient()->getDateRef() <= $programm->getDateFin();
  479.     }
  480.     public function canViewProgramme(Programme $programme){
  481.         if($this->isSuperAdmin()){
  482.             return true;
  483.         }
  484.         if(!$programme->getClient()->isEditDiete()){
  485.             return false;
  486.         }
  487.         return $programme->getClient()->getDateRef() <= $programme->getDateFin();
  488.     }
  489.     public function canViewInvoice(Piece $piece){
  490.         if($this->isSuperAdmin()){
  491.             return true;
  492.         }
  493.         if(!$piece->getClient()->isEditInvoices()){
  494.             return false;
  495.         }
  496.         return $piece->getClient()->getDateRef() <= $piece->getDate();
  497.     }
  498.     public function canViewPayment(Payment $payment){
  499.         if($this->isSuperAdmin()){
  500.             return true;
  501.         }
  502.         if(!$payment->getClient()->isEditInvoices()){
  503.             return false;
  504.         }
  505.         return $payment->getClient()->getDateRef() <= $payment->getDate();
  506.     }
  507.     }