src/Entity/DiscussionClass.php line 16

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use App\Entity\Traits\Timestampable;
  4. use App\Repository\DiscussionClassRepository;
  5. use Doctrine\Common\Collections\ArrayCollection;
  6. use Doctrine\Common\Collections\Collection;
  7. use Doctrine\ORM\Mapping as ORM;
  8. use JMS\Serializer\Annotation\Groups;
  9. use JMS\Serializer\Annotation\SerializedName;
  10. use JMS\Serializer\Annotation\Type;
  11. #[ORM\Entity(repositoryClassDiscussionClassRepository::class)]
  12. #[ORM\HasLifecycleCallbacks]
  13. class DiscussionClass
  14. {
  15.     use Timestampable;
  16.     #[ORM\Id]
  17.     #[ORM\GeneratedValue]
  18.     #[ORM\Column]
  19.     #[Groups(['getDiscussionClass','getDiscussionClass'])]
  20.     private ?int $id null;
  21.     #[ORM\ManyToOne(inversedBy'discussionClasses')]
  22.     #[Groups(['getDiscussionClass',"getDiscussionClass"])]
  23.     private ?TheClass $classe null;
  24.     /**
  25.      * 'parent' (canal parents-professeurs, historique — seul type qui
  26.      * existait jusqu'ici) ou 'student' (canal élèves, distinct : un élève ne
  27.      * doit jamais accéder au canal parents de sa propre classe, voir
  28.      * DiscussionClassController::assertClassDiscussionAccess). Défaut
  29.      * 'parent' pour que les lignes déjà existantes restent correctement
  30.      * qualifiées sans backfill.
  31.      */
  32.     #[ORM\Column(length20options: ['default' => 'parent'])]
  33.     #[Groups(['getDiscussionClass'])]
  34.     // Clé JSON et type forcés explicitement (au lieu de laisser JMS les
  35.     // déduire) : l'app mobile lisait toujours "parent" quel que soit le
  36.     // vrai type en base — un canal élève retombait systématiquement sur le
  37.     // libellé "Groupe des Parents d'élève". La donnée elle-même est
  38.     // correcte (confirmé via l'affichage direct Twig, sans passer par ce
  39.     // sérialiseur, dans discussion_class/index.html.twig) : seule cette
  40.     // sérialisation JSON était en cause.
  41.     #[SerializedName('groupType')]
  42.     #[Type('string')]
  43.     private string $groupType 'parent';
  44.     #[ORM\ManyToOne(inversedBy'discussionClasses')]
  45.     private ?SchoolYear $year null;
  46.     #[ORM\ManyToOne(inversedBy'discussionClasses')]
  47.     private ?School $school null;
  48.     #[ORM\OneToMany(mappedBy'discussion'targetEntityDiscussionClassMessage::class)]
  49.     private Collection $discussionClassMessages;
  50.     public function __construct()
  51.     {
  52.         $this->discussionClassMessages = new ArrayCollection();
  53.     }
  54.     public function getId(): ?int
  55.     {
  56.         return $this->id;
  57.     }
  58.     public function getClasse(): ?TheClass
  59.     {
  60.         return $this->classe;
  61.     }
  62.     public function setClasse(?TheClass $classe): static
  63.     {
  64.         $this->classe $classe;
  65.         return $this;
  66.     }
  67.     public function getGroupType(): string
  68.     {
  69.         return $this->groupType;
  70.     }
  71.     public function setGroupType(string $groupType): static
  72.     {
  73.         $this->groupType $groupType;
  74.         return $this;
  75.     }
  76.     public function getYear(): ?SchoolYear
  77.     {
  78.         return $this->year;
  79.     }
  80.     public function setYear(?SchoolYear $year): static
  81.     {
  82.         $this->year $year;
  83.         return $this;
  84.     }
  85.     public function getSchool(): ?School
  86.     {
  87.         return $this->school;
  88.     }
  89.     public function setSchool(?School $school): static
  90.     {
  91.         $this->school $school;
  92.         return $this;
  93.     }
  94.     /**
  95.      * @return Collection<int, DiscussionClassMessage>
  96.      */
  97.     public function getDiscussionClassMessages(): Collection
  98.     {
  99.         return $this->discussionClassMessages;
  100.     }
  101.     public function addDiscussionClassMessage(DiscussionClassMessage $discussionClassMessage): static
  102.     {
  103.         if (!$this->discussionClassMessages->contains($discussionClassMessage)) {
  104.             $this->discussionClassMessages->add($discussionClassMessage);
  105.             $discussionClassMessage->setDiscussion($this);
  106.         }
  107.         return $this;
  108.     }
  109.     public function removeDiscussionClassMessage(DiscussionClassMessage $discussionClassMessage): static
  110.     {
  111.         if ($this->discussionClassMessages->removeElement($discussionClassMessage)) {
  112.             // set the owning side to null (unless already changed)
  113.             if ($discussionClassMessage->getDiscussion() === $this) {
  114.                 $discussionClassMessage->setDiscussion(null);
  115.             }
  116.         }
  117.         return $this;
  118.     }
  119. }