src/Entity/User.php line 226

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use App\Entity\Domain;
  4. use App\Entity\Course;
  5. use App\Entity\SchoolYear;
  6. use Doctrine\DBAL\Types\Types;
  7. use Doctrine\ORM\Mapping as ORM;
  8. use App\Entity\Traits\TimeStampable;
  9. use App\Repository\UserRepository;
  10. use App\Entity\Traits\HasUploadableField;
  11. use App\Repository\AttributionRepository;
  12. use Doctrine\Common\Collections\Collection;
  13. use Doctrine\Common\Collections\ArrayCollection;
  14. use Symfony\Component\Validator\Constraints as Assert;
  15. use Symfony\Component\Security\Core\User\UserInterface;
  16. use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
  17. /**
  18.  * @ORM\Entity(repositoryClass=UserRepository::class)
  19.  * @UniqueEntity(fields={"email"}, message="There is already an account with this email")
  20.  * @UniqueEntity(fields={"phoneNumber"}, message="There is already an account with this phone number")
  21.  * @UniqueEntity(fields={"numCni"}, message="There is already an account with this cni number")
  22.  * @ORM\HasLifecycleCallbacks
  23.  * 
  24.  */
  25. class User implements UserInterface//, PasswordAuthenticatedUserInterface
  26. {
  27.     use TimeStampable;
  28.     use HasUploadableField;
  29.      /**
  30.      * @ORM\Id
  31.      * @ORM\GeneratedValue
  32.      * @ORM\Column(type="integer")
  33.      */
  34.     private $id;
  35.     /**
  36.      * @ORM\Column(type="string", length=180, unique=true)
  37.      * @Assert\NotBlank(message="Please enter your email address")
  38.      * @Assert\NotBlank(message="Please enter a valid  email address")
  39.      */
  40.     private $email;
  41.      
  42.     private $roles = [];
  43.     /**
  44.      * @var string The hashed password
  45.      * @ORM\Column(type="string")
  46.      */
  47.     private $password;
  48.       /**
  49.      * @Assert\EqualTo( value="password",
  50.      * message = " Le mot de passe et le mot de passe de verification doivent etre les memes ")
  51.      */
  52.     public $confirm_password;
  53.     /**
  54.      * @ORM\Column(type="boolean")
  55.      */
  56.     private $isVerified false;
  57.       /**
  58.      * @ORM\OneToMany(targetEntity=Email::class, mappedBy="sender")
  59.      */
  60.     private $emails;
  61.   
  62.     
  63.    
  64.       /**
  65.      * @ORM\Column(name="avatarPath", type="string", length=255, nullable=true)
  66.      */
  67.     protected $avatarPath;
  68.    
  69.     /**
  70.      * @var string
  71.      *
  72.      * @ORM\Column(name="phoneNumber", type="string", length=255, nullable=false)
  73.      */
  74.     protected $phoneNumber;
  75.     /** 
  76.      *  @var string
  77.      * @ORM\Column(name="gender", nullable=true, unique=false, length=10) 
  78.      * @Assert\Choice(choices = { 0, 1 },  message = "précisez le sexe")
  79.      */
  80.     protected $gender;
  81.     /**
  82.      * @var \Date
  83.      *
  84.      * @ORM\Column(name="birthday", type="date", nullable=true)
  85.      */
  86.     protected $birthday;
  87.     /**
  88.      * @var string
  89.      *
  90.      * @ORM\Column(name="birthplace", type="string", length=255, nullable=true)
  91.      */
  92.     private $birthplace;
  93.     /**
  94.      * @var string
  95.      *
  96.      * @ORM\Column(name="nationality", type="string", length=255, nullable=true)
  97.      */
  98.     protected $nationality;
  99.     /**
  100.      * @var string
  101.      *
  102.      * @ORM\Column(name="location", type="string", length=255, nullable=true)
  103.      */
  104.     protected $location;
  105.     /** @ORM\Column(name="region", nullable=true, unique=false, length=10) 
  106.      * @Assert\Choice(
  107.      * choices = { "Adamaoua", "Centre" ,"Est", "Extrême-Nord" ,"Littoral", "Nord", "Nord-Ouest" ,"Ouest", "Sud", "Sud-Ouest"},
  108.      * message = "précisez votre region d'origine")
  109.      */
  110.     protected $region;
  111.       /**
  112.      * @var string
  113.      *
  114.      * @ORM\Column(name="department", type="string", length=255, nullable=true)
  115.      */
  116.     protected $department;
  117.     /** @ORM\Column(name="academicLevel", nullable=true, unique=false, length=10) 
  118.      * @Assert\Choice(
  119.      * choices = { "BAC", "LICENCE" ,"DIP1", "DIP2" ,"MASTER", "DOCTORAT"},
  120.      * message = "précisez le niveau académique")
  121.      */
  122.     protected $academicLevel;
  123.     /**
  124.      * @var string
  125.      *
  126.      * @ORM\Column(name="numCni", type="string", length=255, nullable=true, unique=false)
  127.      */
  128.     protected $numCni;
  129.   
  130.     /** @ORM\Column(name="status", nullable=true, unique=false, length=10) 
  131.      * @Assert\Choice(
  132.      * choices = {"ELEVE","ADMIN", "PROF", "FINANCE", "PRINCIPAL", "PREFET"},
  133.      * * message = "précisez votre statu dans ISBB")
  134.      */
  135.     protected $status;
  136.     /**
  137.      * @ORM\ManyToOne(targetEntity=Domain::class, inversedBy="teachers")
  138.      */
  139.     private $domain;
  140.     
  141.       /**
  142.      * @ORM\OneToMany(targetEntity=Domain::class, mappedBy="headOfDepartment")
  143.      */
  144.     private $headOfDepartementOf;
  145.     
  146.     /**
  147.      * @ORM\OneToMany(targetEntity=Attribution::class, mappedBy="teacher")
  148.      */
  149.     private $attributions;
  150.     /**
  151.      * @ORM\OneToMany(targetEntity=MainTeacher::class, mappedBy="teacher")
  152.      */
  153.     private $mainTeachers;
  154.     /**
  155.      * @ORM\Column(type="string", length=255, nullable=true)
  156.      */
  157.     private $fullName;
  158.      /**
  159.      * @ORM\Column(type="string", length=255, nullable=true)
  160.      */
  161.     private $securityQuestion;
  162.     /**
  163.      * @ORM\Column(type="string", length=255,options={"default": "bethesda"}, nullable=true)
  164.      */
  165.     private $securityAnswer;
  166.     public function getSecurityQuestion(): ?string
  167.     {
  168.         return $this->securityQuestion;
  169.     }
  170.     public function setSecurityQuestion(string $securityQuestion): self
  171.     {
  172.         $this->securityQuestion $securityQuestion;
  173.         return $this;
  174.     }
  175.     public function getSecurityAnswer(): ?string
  176.     {
  177.         return $this->securityAnswer;
  178.     }
  179.     public function setSecurityAnswer(string $securityAnswer): self
  180.     {
  181.         $this->securityAnswer $securityAnswer;
  182.         return $this;
  183.     }
  184.   
  185.    
  186.     public function getAvatar(int $size 50): ?string
  187.     {
  188.         return "https://www.gravatar.com/avatar/"md5(strtolower(trim($this->getEmail())))."/?s=".$size;
  189.     }
  190.     public function __construct()
  191.     {
  192.         
  193.         $this->emails = new ArrayCollection();
  194.         $this->fullTeacherOf = new ArrayCollection();
  195.         $this->attributions = new ArrayCollection();
  196.         $this->headOfDepartementOf = new ArrayCollection();
  197.         $this->mainTeachers = new ArrayCollection();
  198.     }
  199.     public function getId(): ?int
  200.     {
  201.         return $this->id;
  202.     }
  203.     public function getAvatarPath(): ?string
  204.     {
  205.         return $this->avatarPath;
  206.     }
  207.     public function setAvatarPath(?string $imageName): self
  208.     {
  209.         $this->avatarPath $imageName;
  210.         return $this;
  211.     }
  212.    
  213.     public function __toString() {
  214.         $username = ( is_null($this->getFullName())) ? "" $this->getFullName();
  215.         return $username;
  216.     }
  217.     public function getEmail(): ?string
  218.     {
  219.         return $this->email;
  220.     }
  221.     public function setEmail(string $email): self
  222.     {
  223.         $this->email $email;
  224.         return $this;
  225.     }
  226.     /**
  227.      * A visual identifier that represents this user.
  228.      *
  229.      * @see UserInterface
  230.      */
  231.     public function getUsername(): string
  232.     {
  233.         return (string) $this->email;
  234.     }
  235.     /**
  236.      * @see UserInterface
  237.      */
  238.     public function getRoles(): array
  239.     {
  240.         $roles $this->roles;
  241.         // guarantee every user at least has ROLE_USER
  242.         // $roles[] = 'ROLE_USER';
  243.         //$roles[] = 'ROLE_ADMIN';
  244.         switch ($this->getStatus()) {
  245.             case "PROF":
  246.                 $roles[] = 'ROLE_USER';
  247.                 $roles[] = 'ROLE_PROF';
  248.              break;
  249.             case "ADMIN":
  250.                 $roles[] = 'ROLE_USER';
  251.                 $roles[] = 'ROLE_ADMIN';
  252.             break;
  253.             case "DISCIPLINE":
  254.                 $roles[] = 'ROLE_USER';
  255.                 $roles[] = 'ROLE_DISCIPLINE';
  256.             break;
  257.             case "FINANCIAL":
  258.                 $roles[] = 'ROLE_USER';
  259.                 $roles[] = 'ROLE_FINANCIAL';
  260.             break;
  261.             default:
  262.                 $roles[] = 'ROLE_USER';
  263.             break;
  264.           }
  265.         return array_unique($roles);
  266.     }
  267.     public function setRoles(array $roles): self
  268.     {
  269.         $this->roles $roles;
  270.         return $this;
  271.     }
  272.     /**
  273.      * @see UserInterface
  274.      */
  275.     public function getPassword(): string
  276.     {
  277.         return $this->password;
  278.     }
  279.     public function setPassword(string $password): self
  280.     {
  281.         $this->password $password;
  282.         return $this;
  283.     }
  284.     /**
  285.      * Returning a salt is only needed, if you are not using a modern
  286.      * hashing algorithm (e.g. bcrypt or sodium) in your security.yaml.
  287.      *
  288.      * @see UserInterface
  289.      */
  290.     public function getSalt(): ?string
  291.     {
  292.         return null;
  293.     }
  294.     public function addRole($role): self
  295.     {
  296.         array_push($this->roles$role);
  297.         $this->setRoles(array_unique($this->roles));
  298.         return $this;
  299.     }
  300.     /**
  301.      * @see UserInterface
  302.      */
  303.     public function eraseCredentials()
  304.     {
  305.         // If you store any temporary, sensitive data on the user, clear it here
  306.         // $this->plainPassword = null;
  307.     }
  308.     public function isVerified(): bool
  309.     {
  310.         return $this->isVerified;
  311.     }
  312.     public function toggleIsVerified(): self
  313.     {
  314.          $this->isVerified = !$this->isVerified;
  315.          return $this;
  316.     }
  317.     public function setIsVerified(bool $isVerified): self
  318.     {
  319.         $this->isVerified $isVerified;
  320.         return $this;
  321.     }
  322.     public function getPhoneNumber(): ?string
  323.     {
  324.         return $this->phoneNumber;
  325.     }
  326.     public function setPhoneNumber(string $phone): self
  327.     {
  328.         $this->phoneNumber $phone;
  329.         return $this;
  330.     }
  331.      /**
  332.      * 
  333.      *
  334.      * @return string
  335.      */
  336.     public function getStatus() {
  337.         return $this->status;
  338.     }
  339.     public function setStatus($email) {
  340.         if (!empty($email))
  341.             $this->status $email;
  342.         return $this;
  343.     }
  344.       /**
  345.      * Set birthplace
  346.      *
  347.      * @param string $birthplace
  348.      *
  349.      * @return User
  350.      */
  351.     public function setBirthplace($birthplace)
  352.     {
  353.         $this->birthplace $birthplace;
  354.         return $this;
  355.     }
  356.     /**
  357.      * Get birthplace
  358.      *
  359.      * @return string
  360.      */
  361.     public function getBirthplace()
  362.     {
  363.         return $this->birthplace;
  364.     }
  365.      /**
  366.      * Set birthday
  367.      *
  368.      * @param \DateTime $birthday
  369.      *
  370.      * @return User
  371.      */
  372.     public function setBirthday($birthday)
  373.     {
  374.         $this->birthday $birthday;
  375.         return $this;
  376.     }
  377.     /**
  378.      * Get birthday
  379.      *
  380.      * @return \DateTime
  381.      */
  382.     public function getBirthday()
  383.     {
  384.         return $this->birthday;
  385.     }
  386.      /**
  387.      * Set gender
  388.      *
  389.      * @param string $gender
  390.      *
  391.      * @return User
  392.      */
  393.     public function setGender($gender) {
  394.         $this->gender $gender;
  395.         return $this;
  396.     }
  397.     /**
  398.      * Get gender
  399.      *
  400.      * @return string
  401.      */
  402.     public function getGender() {
  403.         return $this->gender;
  404.     }
  405.      /**
  406.      * Set nationality
  407.      *
  408.      * @param string $nationality
  409.      *
  410.      * @return User
  411.      */
  412.     public function setNationality($nationality) {
  413.         $this->nationality $nationality;
  414.         return $this;
  415.     }
  416.     /**
  417.      * Get nationality
  418.      *
  419.      * @return string
  420.      */
  421.     public function getNationality() {
  422.         return $this->nationality;
  423.     }
  424.     /**
  425.      * Set location
  426.      *
  427.      * @param string $location
  428.      *
  429.      * @return User
  430.      */
  431.     public function setLocation($location) {
  432.         $this->location $location;
  433.         return $this;
  434.     }
  435.     /**
  436.      * Get location
  437.      *
  438.      * @return string
  439.      */
  440.     public function getLocation() {
  441.         return $this->location;
  442.     }
  443.     /**
  444.      * Set academicLevel
  445.      *
  446.      * @param string $academicLevel
  447.      *
  448.      * @return User
  449.      */
  450.     public function setAcademicLevel($academicLevel) {
  451.         $this->academicLevel $academicLevel;
  452.         return $this;
  453.     }
  454.     /**
  455.      * Get academicLevel
  456.      *
  457.      * @return string
  458.      */
  459.     public function getAcademicLevel() {
  460.         return $this->academicLevel;
  461.     }
  462.     /**
  463.      * Set numCni
  464.      *
  465.      * @param string $numCni
  466.      *
  467.      * @return User
  468.      */
  469.     public function setNumCni($numCni) {
  470.         $this->numCni $numCni;
  471.         return $this;
  472.     }
  473.     /**
  474.      * Get numCni
  475.      *
  476.      * @return string
  477.      */
  478.     public function getNumCni() {
  479.         return $this->numCni;
  480.     }
  481.      /**
  482.      * Set domain
  483.      *
  484.      * @param \App\Entity\Domain $domain
  485.      *
  486.      * @return User
  487.      */
  488.     public function setDomain(Domain $domain null) {
  489.         $this->domain $domain;
  490.         return $this;
  491.     }
  492.     /**
  493.      * Get domain
  494.      *
  495.      * @return \App\Entity\Domain
  496.      */
  497.     public function getDomain() {
  498.         return $this->domain;
  499.     }
  500.     /**
  501.      * @return Collection|ClassRoom[]
  502.      */
  503.     public function getFullTeacherOf(): Collection
  504.     {
  505.         return $this->fullTeacherOf;
  506.     }
  507.     public function addFullTeacherOf(ClassRoom $fullTeacherOf): self
  508.     {
  509.         if (!$this->fullTeacherOf->contains($fullTeacherOf)) {
  510.             $this->fullTeacherOf[] = $fullTeacherOf;
  511.             $fullTeacherOf->setFullTeacher($this);
  512.         }
  513.         return $this;
  514.     }
  515.     public function removeFullTeacherOf(ClassRoom $fullTeacherOf): self
  516.     {
  517.         if ($this->fullTeacherOf->removeElement($fullTeacherOf)) {
  518.             // set the owning side to null (unless already changed)
  519.             if ($fullTeacherOf->getFullTeacher() === $this) {
  520.                 $fullTeacherOf->setFullTeacher(null);
  521.             }
  522.         }
  523.         return $this;
  524.     }
  525.     public function getUsernameCanonical(): ?string
  526.     {
  527.         return $this->username_canonical;
  528.     }
  529.     public function setUsernameCanonical(string $username_canonical): self
  530.     {
  531.         $this->username_canonical $username_canonical;
  532.         return $this;
  533.     }
  534.     public function getEmailCanonical(): ?string
  535.     {
  536.         return $this->email_canonical;
  537.     }
  538.     public function setEmailCanonical(string $email_canonical): self
  539.     {
  540.         $this->email_canonical $email_canonical;
  541.         return $this;
  542.     }
  543.     public function getEnabled(): ?bool
  544.     {
  545.         return $this->enabled;
  546.     }
  547.     public function setEnabled(bool $enabled): self
  548.     {
  549.         $this->enabled $enabled;
  550.         return $this;
  551.     }
  552.     public function setSalt(?string $salt): self
  553.     {
  554.         $this->salt $salt;
  555.         return $this;
  556.     }
  557.     public function getLastLogin(): ?\DateTimeInterface
  558.     {
  559.         return $this->last_login;
  560.     }
  561.     public function setLastLogin(?\DateTimeInterface $last_login): self
  562.     {
  563.         $this->last_login $last_login;
  564.         return $this;
  565.     }
  566.     public function getConfirmationToken(): ?string
  567.     {
  568.         return $this->confirmation_token;
  569.     }
  570.     public function setConfirmationToken(?string $confirmation_token): self
  571.     {
  572.         $this->confirmation_token $confirmation_token;
  573.         return $this;
  574.     }
  575.     public function getPasswordRequestedAt(): ?\DateTimeImmutable
  576.     {
  577.         return $this->password_requested_at;
  578.     }
  579.     public function setPasswordRequestedAt(?\DateTimeImmutable $password_requested_at): self
  580.     {
  581.         $this->password_requested_at $password_requested_at;
  582.         return $this;
  583.     }
  584.     public function getFullName(): ?string
  585.     {
  586.         return $this->fullName;
  587.     }
  588.     public function setFullName(?string $fullName): self
  589.     {
  590.         $this->fullName $fullName;
  591.         return $this;
  592.     }
  593.     
  594.     public function getIsVerified(): ?bool
  595.     {
  596.         return $this->isVerified;
  597.     }
  598.     /**
  599.      * @return Collection|Email[]
  600.      */
  601.     public function getEmails(): Collection
  602.     {
  603.         return $this->emails;
  604.     }
  605.     public function addEmail(Email $email): self
  606.     {
  607.         if (!$this->emails->contains($email)) {
  608.             $this->emails[] = $email;
  609.             $email->setSender($this);
  610.         }
  611.         return $this;
  612.     }
  613.     public function removeEmail(Email $email): self
  614.     {
  615.         if ($this->emails->removeElement($email)) {
  616.             // set the owning side to null (unless already changed)
  617.             if ($email->getSender() === $this) {
  618.                 $email->setSender(null);
  619.             }
  620.         }
  621.         return $this;
  622.     }
  623.     /**
  624.      * @return Collection|Attribution[]
  625.      */
  626.     public function getAttributions(): Collection
  627.     {
  628.         return $this->attributions;
  629.     }
  630.     /**
  631.      * list of courses assigned to a teacher during a given year
  632.      */
  633.     public function getCourses(SchoolYear $year)
  634.     {
  635.         $courses = [];
  636.         foreach($this->attributions as $attribution){
  637.             if($attribution->getSchoolYear()==$year){
  638.                 $courses[] = $attribution->getCourse();
  639.             }
  640.         }
  641.         return $courses;
  642.     }
  643.     public function addAttribution(Attribution $attribution): self
  644.     {
  645.         if (!$this->attributions->contains($attribution)) {
  646.             $this->attributions[] = $attribution;
  647.             $attribution->setTeacher($this);
  648.         }
  649.         return $this;
  650.     }
  651.     public function removeAttribution(Attribution $attribution): self
  652.     {
  653.         if ($this->attributions->removeElement($attribution)) {
  654.             // set the owning side to null (unless already changed)
  655.             if ($attribution->getTeacher() === $this) {
  656.                  
  657.             }
  658.         }
  659.         return $this;
  660.     }
  661.     public function getUserIdentifier() {
  662.       return $this->getEmail();
  663.     }
  664.     public function isIsVerified(): ?bool
  665.     {
  666.         return $this->isVerified;
  667.     }
  668.  
  669.     public function getDepartment(): ?string
  670.     {
  671.         return $this->department;
  672.     }
  673.     public function setDepartment(?string $department): static
  674.     {
  675.         $this->department $department;
  676.         return $this;
  677.     }
  678.     public function getRegion(): ?string
  679.     {
  680.         return $this->region;
  681.     }
  682.     public function setRegion(?string $region): static
  683.     {
  684.         $this->region $region;
  685.         return $this;
  686.     }
  687.     /**
  688.      * @return Collection<int, Domain>
  689.      */
  690.     public function getHeadOfDepartementOf(): Collection
  691.     {
  692.         return $this->headOfDepartementOf;
  693.     }
  694.     public function addHeadOfDepartementOf(Domain $headOfDepartementOf): static
  695.     {
  696.         if (!$this->headOfDepartementOf->contains($headOfDepartementOf)) {
  697.             $this->headOfDepartementOf->add($headOfDepartementOf);
  698.             $headOfDepartementOf->setHeadOfDepartment($this);
  699.         }
  700.         return $this;
  701.     }
  702.     public function removeHeadOfDepartementOf(Domain $headOfDepartementOf): static
  703.     {
  704.         if ($this->headOfDepartementOf->removeElement($headOfDepartementOf)) {
  705.             // set the owning side to null (unless already changed)
  706.             if ($headOfDepartementOf->getHeadOfDepartment() === $this) {
  707.                 $headOfDepartementOf->setHeadOfDepartment(null);
  708.             }
  709.         }
  710.         return $this;
  711.     }
  712.     /**
  713.      * @return Collection<int, MainTeacher>
  714.      */
  715.     public function getMainTeachers(): Collection
  716.     {
  717.         return $this->mainTeachers;
  718.     }
  719.     public function addMainTeacher(MainTeacher $mainTeacher): static
  720.     {
  721.         if (!$this->mainTeachers->contains($mainTeacher)) {
  722.             $this->mainTeachers->add($mainTeacher);
  723.             $mainTeacher->setTeacher($this);
  724.         }
  725.         return $this;
  726.     }
  727.     public function removeMainTeacher(MainTeacher $mainTeacher): static
  728.     {
  729.         if ($this->mainTeachers->removeElement($mainTeacher)) {
  730.             // set the owning side to null (unless already changed)
  731.             if ($mainTeacher->getTeacher() === $this) {
  732.                 $mainTeacher->setTeacher(null);
  733.             }
  734.         }
  735.         return $this;
  736.     }
  737.   
  738. }