src/Entity/Language.php line 42

Open in your IDE?
  1. <?php
  2. /**
  3.  * @author Leo BANNHOLTZER (contact@scaledev.fr)
  4.  * @copyright 2021 - ScaleDEV SAS, 12 RUE CHARLES MORET, 10120 ST ANDRE LES VERGERS
  5.  * @license commercial
  6.  */
  7. declare(strict_types=1);
  8. namespace App\Entity;
  9. use Symfony\Component\Uid\Uuid;
  10. use Doctrine\ORM\Mapping as ORM;
  11. use App\Repository\LanguageRepository;
  12. use Gedmo\Mapping\Annotation as Gedmo;
  13. use App\DoctrineExtensions\IsActiveEntity;
  14. use App\DoctrineExtensions\IsDefaultEntity;
  15. use App\EventListener\LanguageSaveListener;
  16. use Doctrine\Common\Collections\Collection;
  17. use Doctrine\Common\Collections\ArrayCollection;
  18. use Symfony\Bridge\Doctrine\IdGenerator\UuidGenerator;
  19. use App\DoctrineExtensions\Timestampable\Traits\UserTimestampableEntity;
  20. use App\DoctrineExtensions\SoftDeleteable\Traits\UserSoftDeleteableEntity;
  21. use Symfony\Component\Serializer\Annotation\Groups;
  22. /**
  23.  * @ORM\Entity(repositoryClass=LanguageRepository::class)
  24.  * @ORM\Table(name="language", indexes={
  25.  *  @ORM\Index(name="name", columns={"name"}),
  26.  *  @ORM\Index(name="iso_code", columns={"iso_code"}),
  27.  *  @ORM\Index(name="locale", columns={"locale"}),
  28.  *  @ORM\Index(name="is_default", columns={"is_default"}),
  29.  *  @ORM\Index(name="is_active", columns={"is_active"}),
  30.  *  @ORM\Index(name="deleted_at", columns={"deleted_at"}),
  31.  *  @ORM\Index(name="created_at", columns={"created_at"}),
  32.  *  @ORM\Index(name="updated_at", columns={"updated_at"})
  33.  * })
  34.  * @Gedmo\SoftDeleteable(fieldName="deletedAt", timeAware=false, hardDelete=false)
  35.  * @ORM\EntityListeners({LanguageSaveListener::class})
  36.  */
  37. class Language
  38. {
  39.     use UserTimestampableEntity;
  40.     use UserSoftDeleteableEntity;
  41.     use IsActiveEntity;
  42.     use IsDefaultEntity;
  43.     /**
  44.      * @ORM\Id
  45.      * @ORM\Column(type="uuid")
  46.      * @ORM\GeneratedValue(strategy="CUSTOM")
  47.      * @ORM\CustomIdGenerator(class=UuidGenerator::class)
  48.      * @Groups({"get", "write"})
  49.      */
  50.     private ?Uuid $id null;
  51.     /**
  52.      * @ORM\Column(type="string", length=32)
  53.      * @Groups({"get"})
  54.      */
  55.     private string $name;
  56.     /**
  57.      * @ORM\Column(type="string", length=3)
  58.      * @Groups({"get"})
  59.      */
  60.     private string $iso_code;
  61.     /**
  62.      * @ORM\Column(type="string", length=5)
  63.      * @Groups({"get"})
  64.      */
  65.     private string $locale;
  66.     /**
  67.      * @ORM\OneToMany(targetEntity=User::class, mappedBy="language", fetch="EXTRA_LAZY")
  68.      */
  69.     private Collection $users;
  70.     public function __construct()
  71.     {
  72.         $this->users = new ArrayCollection();
  73.     }
  74.     /**
  75.      * @return Uuid|null
  76.      */
  77.     public function getId(): ?Uuid
  78.     {
  79.         return $this->id;
  80.     }
  81.     /**
  82.      * @return string
  83.      */
  84.     public function getName(): string
  85.     {
  86.         return $this->name;
  87.     }
  88.     /**
  89.      * @param string $name
  90.      * @return $this
  91.      */
  92.     public function setName(string $name): self
  93.     {
  94.         $this->name $name;
  95.         return $this;
  96.     }
  97.     /**
  98.      * @return string
  99.      */
  100.     public function getIsoCode(): string
  101.     {
  102.         return $this->iso_code;
  103.     }
  104.     /**
  105.      * @param string $iso_code
  106.      * @return $this
  107.      */
  108.     public function setIsoCode(string $iso_code): self
  109.     {
  110.         $this->iso_code strtoupper($iso_code);
  111.         return $this;
  112.     }
  113.     /**
  114.      * @return string
  115.      */
  116.     public function getLocale(): ?string
  117.     {
  118.         return $this->locale;
  119.     }
  120.     /**
  121.      * @param string $locale
  122.      * @return $this
  123.      */
  124.     public function setLocale(string $locale): self
  125.     {
  126.         $this->locale strtolower($locale);
  127.         return $this;
  128.     }
  129.     /**
  130.      * @return Collection|User[]
  131.      */
  132.     public function getUsers(): Collection
  133.     {
  134.         return $this->users;
  135.     }
  136.     /**
  137.      * @param User $user
  138.      * @return $this
  139.      */
  140.     public function addUser(User $user): self
  141.     {
  142.         if (!$this->users->contains($user)) {
  143.             $this->users[] = $user;
  144.             $user->setLanguage($this);
  145.         }
  146.         return $this;
  147.     }
  148.     /**
  149.      * @param User $user
  150.      * @return $this
  151.      */
  152.     public function removeUser(User $user): self
  153.     {
  154.         if ($this->users->removeElement($user)) {
  155.             if ($user->getLanguage() === $this) {
  156.                 $user->setLanguage(null);
  157.             }
  158.         }
  159.         return $this;
  160.     }
  161. }