'boolean', ]; /** @return BelongsTo */ public function classe(): BelongsTo { return $this->belongsTo(Classe::class); } /** @return HasMany */ public function questions(): HasMany { return $this->hasMany(QuestionQuiz::class)->orderBy('ordre'); } /** @return HasMany */ public function sessions(): HasMany { return $this->hasMany(SessionQuiz::class); } /** * Copie indépendante de ce quiz (questions et choix compris) dans une * autre classe — jamais ses sessions ni ses réponses. La copie n'est * jamais partagée elle-même : partager de nouveau est un choix * volontaire du prof qui la reçoit, pas hérité. */ public function dupliquerDans(Classe $classe): self { return DB::transaction(function () use ($classe) { $copie = self::create(['classe_id' => $classe->id, 'titre' => $this->titre, 'partage' => false]); foreach ($this->questions as $question) { $copieQuestion = $copie->questions()->create([ 'enonce' => $question->enonce, 'type' => $question->type, 'ordre' => $question->ordre, 'reponse_vrai_faux' => $question->reponse_vrai_faux, ]); foreach ($question->choix as $choix) { $copieQuestion->choix()->create([ 'texte' => $choix->texte, 'est_correct' => $choix->est_correct, 'ordre' => $choix->ordre, ]); } } return $copie; }); } }