src/Entity/CompetenceReference.php line 25

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use App\Entity\Traits\Timestampable;
  4. use App\Repository\CompetenceReferenceRepository;
  5. use Doctrine\Common\Collections\ArrayCollection;
  6. use Doctrine\Common\Collections\Collection;
  7. use Doctrine\ORM\Mapping as ORM;
  8. /**
  9.  * Compétence du programme national (créée par le super-admin), rattachée à un
  10.  * SubjectReference. `quarterNumber` (1, 2 ou 3) situe la compétence dans
  11.  * l'année scolaire de façon abstraite — un SubjectReference n'est pas
  12.  * rattaché à une école donc pas à un Quarter concret ; la conversion
  13.  * "trimestre N → Quarter réel d'une école" se fait au moment de la copie
  14.  * (voir CompetenceCopier), en ordonnant les Quarter de l'année par id ASC.
  15.  *
  16.  * Copiée vers Competence (locale, par école) à la création d'un Subject issu
  17.  * de ce SubjectReference, uniquement pour les classes en système d'évaluation
  18.  * "par compétence" — cf. CompetenceCopier, calqué sur SubjectLessonCopier.
  19.  */
  20. #[ORM\HasLifecycleCallbacks]
  21. #[ORM\Entity(repositoryClassCompetenceReferenceRepository::class)]
  22. class CompetenceReference
  23. {
  24.     use Timestampable;
  25.     #[ORM\Id]
  26.     #[ORM\GeneratedValue]
  27.     #[ORM\Column]
  28.     private ?int $id null;
  29.     #[ORM\ManyToOne(inversedBy'competenceReferences')]
  30.     #[ORM\JoinColumn(nullablefalse)]
  31.     private ?SubjectReference $subjectReference null;
  32.     #[ORM\Column]
  33.     private ?int $quarterNumber null;
  34.     // Nullable : null pour une évaluation supplémentaire (evaluationOf non
  35.     // null) — son libellé est alors hérité du leader, voir getDisplayContent().
  36.     #[ORM\Column(type'text'nullabletrue)]
  37.     private ?string $content null;
  38.     /**
  39.      * Ordre d'affichage parmi les compétences du même trimestre.
  40.      */
  41.     #[ORM\Column]
  42.     private ?int $position null;
  43.     #[ORM\ManyToOne]
  44.     private ?User $author null;
  45.     // Une même compétence évaluée plusieurs fois dans le trimestre, définie une
  46.     // fois pour toutes par le super-admin au niveau national : les écoles qui
  47.     // copient ce SubjectReference héritent directement du regroupement (voir
  48.     // CompetenceCopier), sans avoir à recréer l'évaluation supplémentaire
  49.     // elles-mêmes. Mirroir de Competence::evaluationOf (voir ce fichier pour le
  50.     // détail du principe : un seul niveau de rattachement, jamais de chaîne).
  51.     #[ORM\ManyToOne(targetEntityself::class, inversedBy'additionalEvaluations')]
  52.     #[ORM\JoinColumn(name'evaluation_of_id'nullabletrueonDelete'RESTRICT')]
  53.     private ?CompetenceReference $evaluationOf null;
  54.     /** @var Collection<int, CompetenceReference> */
  55.     #[ORM\OneToMany(mappedBy'evaluationOf'targetEntityself::class)]
  56.     private Collection $additionalEvaluations;
  57.     public function __construct()
  58.     {
  59.         $this->additionalEvaluations = new ArrayCollection();
  60.     }
  61.     public function __toString(): string
  62.     {
  63.         return $this->getDisplayContent() ?? '';
  64.     }
  65.     public function getId(): ?int
  66.     {
  67.         return $this->id;
  68.     }
  69.     public function getSubjectReference(): ?SubjectReference
  70.     {
  71.         return $this->subjectReference;
  72.     }
  73.     public function setSubjectReference(?SubjectReference $subjectReference): static
  74.     {
  75.         $this->subjectReference $subjectReference;
  76.         return $this;
  77.     }
  78.     public function getQuarterNumber(): ?int
  79.     {
  80.         return $this->quarterNumber;
  81.     }
  82.     public function setQuarterNumber(int $quarterNumber): static
  83.     {
  84.         $this->quarterNumber $quarterNumber;
  85.         return $this;
  86.     }
  87.     public function getContent(): ?string
  88.     {
  89.         return $this->content;
  90.     }
  91.     public function setContent(?string $content): static
  92.     {
  93.         $this->content $content;
  94.         return $this;
  95.     }
  96.     public function getPosition(): ?int
  97.     {
  98.         return $this->position;
  99.     }
  100.     public function setPosition(int $position): static
  101.     {
  102.         $this->position $position;
  103.         return $this;
  104.     }
  105.     public function getAuthor(): ?User
  106.     {
  107.         return $this->author;
  108.     }
  109.     public function setAuthor(?User $author): static
  110.     {
  111.         $this->author $author;
  112.         return $this;
  113.     }
  114.     public function getEvaluationOf(): ?self
  115.     {
  116.         return $this->evaluationOf;
  117.     }
  118.     public function setEvaluationOf(?self $evaluationOf): static
  119.     {
  120.         $this->evaluationOf $evaluationOf;
  121.         return $this;
  122.     }
  123.     /** @return Collection<int, CompetenceReference> */
  124.     public function getAdditionalEvaluations(): Collection
  125.     {
  126.         return $this->additionalEvaluations;
  127.     }
  128.     public function isAdditionalEvaluation(): bool
  129.     {
  130.         return $this->evaluationOf !== null;
  131.     }
  132.     /**
  133.      * La CompetenceReference "leader" du groupe (elle-même si autonome ou déjà
  134.      * leader). Sert de clé de regroupement à l'affichage (programme national,
  135.      * et bulletin une fois copiée en Competence — voir CompetenceCopier).
  136.      */
  137.     public function getGroupLeader(): self
  138.     {
  139.         return $this->evaluationOf ?? $this;
  140.     }
  141.     public function getDisplayContent(): ?string
  142.     {
  143.         return $this->content ?? $this->evaluationOf?->getContent();
  144.     }
  145. }