Exemple #1
0
 /**
  * Run the database seeds.
  *
  * @return void
  */
 public function run()
 {
     $nb_epreuves_classees_corrigees = 5;
     $nb_qcm_par_epreuve = 15;
     DB::table('epreuve')->truncate();
     DB::table('correction_qcm')->truncate();
     DB::table('statistiques_qcm')->truncate();
     DB::table('statistiques_epreuve')->truncate();
     DB::table('utilisateur_note_epreuve')->truncate();
     DB::table('grille_qcm')->truncate();
     DB::table('utilisateur_note_grille_qcm')->truncate();
     $session_scolaire_courrante_id = DB::table('session_scolaire')->whereNull('date_fin')->pluck('id');
     //affectation cyclique des UE aux épreuves
     $ue_disponibles = DB::table('ue')->where('session_scolaire_id', $session_scolaire_courrante_id);
     $nb_ue_disponibles = $ue_disponibles->count();
     $ue_affectee_id = null;
     //création de 5 épreuves classées et corrigées
     for ($i = 1; $i <= $nb_epreuves_classees_corrigees; $i++) {
         //date de l'épreuve : on fait une épreuve par semaine
         $date_epreuve = time() - $i * 3600 * 24 * 7;
         //epreuve
         $ue_affectee_id = $ue_disponibles->offset($i % $nb_ue_disponibles)->pluck('id');
         $epreuve_id = DB::table('epreuve')->insertGetId(['session_scolaire_id' => $session_scolaire_courrante_id, 'ue_id' => $ue_affectee_id, 'titre' => 'Epreuve ' . $i, 'date' => $date_epreuve, 'visible' => true, 'date_modif_correction' => time()]);
         $array_correction_qcm_to_insert = null;
         $array_statistiques_qcm_to_insert = null;
         //15 QCM par epreuve
         for ($j = 1; $j <= $nb_qcm_par_epreuve; $j++) {
             //barème aléatoire parmi les choix possibles dans la table barème
             $nb_baremes = DB::table('bareme')->count();
             $bareme_id = DB::table('bareme')->offset(rand(0, $nb_baremes - 1))->pluck('id');
             //réponse aux items
             $item_a = rand(1, 100) != 1 ? rand(0, 1) : 2;
             //1 chance sur 100 que l'item soit annulé = mis en double
             $item_b = rand(1, 100) != 1 ? rand(0, 1) : 2;
             //1 chance sur 100 que l'item soit annulé
             $item_c = rand(1, 100) != 1 ? rand(0, 1) : 2;
             //1 chance sur 100 que l'item soit annulé
             $item_d = rand(1, 100) != 1 ? rand(0, 1) : 2;
             //1 chance sur 100 que l'item soit annulé
             $item_e = rand(1, 100) != 1 ? rand(0, 1) : 2;
             //1 chance sur 100 que l'item soit annulé
             //correction QCM
             $array_correction_qcm_to_insert[] = ['epreuve_id' => $epreuve_id, 'numero_qcm' => $j, 'bareme_id' => $bareme_id, 'annule' => rand(1, 50) == 1, 'item_a' => $item_a, 'item_b' => $item_b, 'item_c' => $item_c, 'item_d' => $item_d, 'item_e' => $item_e, 'date_modif' => $date_epreuve + 3600 * 24];
             //statistiques aléatoires par qcm;
             $ecart = (rand(0, 400) - 200) / 1000;
             $array_statistiques_qcm_to_insert[] = ['epreuve_id' => $epreuve_id, 'numero_qcm' => $j, 'taux_item_a' => pow(rand(0, 1000) / 1000, 1 / 5), 'taux_item_b' => pow(rand(0, 1000) / 1000, 1 / 5), 'taux_item_c' => pow(rand(0, 1000) / 1000, 1 / 5), 'taux_item_d' => pow(rand(0, 1000) / 1000, 1 / 5), 'taux_item_e' => pow(rand(0, 1000) / 1000, 1 / 5), 'taux_0_discordance' => 0.2 + $ecart, 'taux_1_discordance' => 0.2 + $ecart * 0.5, 'taux_2_discordance' => 0.2 + $ecart * 0.1, 'taux_3_discordance' => 0.2 - $ecart * 0.1, 'taux_4_discordance' => 0.2 - $ecart * 0.5, 'taux_5_discordance' => 0.2 - $ecart];
         }
         DB::table('correction_qcm')->insert($array_correction_qcm_to_insert);
         DB::table('statistiques_qcm')->insert($array_statistiques_qcm_to_insert);
         //notes et classements individuels + grille QCM,
         $etudiants = DB::table('utilisateur')->where('statut', '=', 'student')->get();
         $nb_etudiants = count($etudiants);
         $nb_qcm_epreuve = DB::table('correction_qcm')->where('epreuve_id', $epreuve_id)->count();
         //note max de l'ue
         $note_max_ue = DB::table('epreuve')->join('ue', 'epreuve.ue_id', '=', 'ue.id')->where('epreuve.id', $epreuve_id)->pluck('ue.note_max');
         $array_utilisateur_note_epreuve_to_insert = null;
         $array_nb_discordances_to_insert = null;
         foreach ($etudiants as $etudiant) {
             if (rand(1, 7) != 1) {
                 $note_base = rand(0, 1000) / 1000;
                 $note_reelle = $note_base * $note_max_ue;
                 $note_ajustee = sqrt($note_base) * $note_max_ue;
                 //note et classement
                 $array_utilisateur_note_epreuve_to_insert[] = ['utilisateur_id' => $etudiant->id, 'epreuve_id' => $epreuve_id, 'classement' => rand(1, $nb_etudiants), 'note_reelle' => $note_reelle, 'note_ajustee' => $note_ajustee];
                 //grille reponse
                 for ($k = 1; $k < $nb_qcm_epreuve + 1; $k++) {
                     DB::table('grille_qcm')->insert(['utilisateur_id' => $etudiant->id, 'epreuve_id' => $epreuve_id, 'numero_qcm' => $k, 'item_a' => rand(0, 1), 'item_b' => rand(0, 1), 'item_c' => rand(0, 1), 'item_d' => rand(0, 1), 'item_e' => rand(0, 1)]);
                     //on compte les discordances
                     $user_qcm = DB::table('grille_qcm')->where('utilisateur_id', $etudiant->id)->where('epreuve_id', $epreuve_id)->where('numero_qcm', $k)->first();
                     $correction_qcm = DB::table('correction_qcm')->where('epreuve_id', $epreuve_id)->where('numero_qcm', $k)->first();
                     $nb_discordances = Test::countDiscordances($user_qcm, $correction_qcm);
                     $array_nb_discordances_to_insert[] = ['utilisateur_id' => $etudiant->id, 'epreuve_id' => $epreuve_id, 'numero_qcm' => $k, 'nb_discordances' => $nb_discordances];
                 }
             }
         }
         DB::table('utilisateur_note_epreuve')->insert($array_utilisateur_note_epreuve_to_insert);
         DB::table('utilisateur_note_grille_qcm')->insert($array_nb_discordances_to_insert);
         //statistiques des épreuves
         $nb_participants = count(DB::table('utilisateur_note_epreuve')->where('epreuve_id', $epreuve_id)->get());
         $min = DB::table('utilisateur_note_epreuve')->where('epreuve_id', $epreuve_id)->min('note_reelle');
         $max = DB::table('utilisateur_note_epreuve')->where('epreuve_id', $epreuve_id)->max('note_reelle');
         $moy = DB::table('utilisateur_note_epreuve')->where('epreuve_id', $epreuve_id)->avg('note_reelle');
         DB::table('statistiques_epreuve')->insert(['epreuve_id' => $epreuve_id, 'nb_participants' => $nb_participants, 'min' => $min, 'max' => $max, 'moy' => $moy, 'date_generation' => time() + 10]);
     }
     //création de 1 épreuve corrigée sans classement
     for ($i = 1; $i < 2; $i++) {
         //date de l'épreuve : on fait une épreuve par semaine
         $date_epreuve = time();
         //epreuve
         $ue_affectee_id = $ue_disponibles->offset($i % $nb_ue_disponibles)->pluck('id');
         $epreuve_id = DB::table('epreuve')->insertGetId(['session_scolaire_id' => $session_scolaire_courrante_id, 'ue_id' => $ue_affectee_id, 'titre' => 'Epreuve non classée ' . $i, 'date' => $date_epreuve, 'visible' => true, 'date_modif_correction' => time() + 10]);
         //15 QCM par epreuve
         for ($j = 1; $j < 16; $j++) {
             //barème aléatoire parmi les choix possibles dans la table barème
             $nb_baremes = DB::table('bareme')->count();
             $bareme_id = DB::table('bareme')->offset(rand(0, $nb_baremes - 1))->pluck('id');
             //réponse aux items
             $item_a = rand(1, 100) != 1 ? rand(0, 1) : 2;
             //1 chance sur 100 que l'item soit annulé
             $item_b = rand(1, 100) != 1 ? rand(0, 1) : 2;
             //1 chance sur 100 que l'item soit annulé
             $item_c = rand(1, 100) != 1 ? rand(0, 1) : 2;
             //1 chance sur 100 que l'item soit annulé
             $item_d = rand(1, 100) != 1 ? rand(0, 1) : 2;
             //1 chance sur 100 que l'item soit annulé
             $item_e = rand(1, 100) != 1 ? rand(0, 1) : 2;
             //1 chance sur 100 que l'item soit annulé
             //correction QCM
             DB::table('correction_qcm')->insert(['epreuve_id' => $epreuve_id, 'numero_qcm' => $j, 'bareme_id' => $bareme_id, 'annule' => rand(1, 50) == 1, 'item_a' => $item_a, 'item_b' => $item_b, 'item_c' => $item_c, 'item_d' => $item_d, 'item_e' => $item_e, 'date_modif' => $date_epreuve + 3600 * 24]);
         }
     }
     //création de 1 épreuve non corrigée, invisible
     for ($i = 1; $i < 2; $i++) {
         //date de l'épreuve : on fait une épreuve par semaine
         $date_epreuve = time();
         //epreuve
         $ue_affectee_id = $ue_disponibles->offset($i % $nb_ue_disponibles)->pluck('id');
         $epreuve_id = DB::table('epreuve')->insertGetId(['session_scolaire_id' => $session_scolaire_courrante_id, 'ue_id' => $ue_affectee_id, 'titre' => 'Epreuve non corrigée ' . $i, 'date' => $date_epreuve, 'visible' => false]);
     }
 }