public static function calculateTotals($application) { // Select scores for the current application that have been finalized (appear in the judged table) $scores = Score::where('scores.application_id', $application->id)->join('judged', function ($join) { $join->on('judged.user_id', '=', 'scores.user_id')->on('judged.application_id', '=', 'scores.application_id'); })->get(); $objective = 0; $subjective = 0; foreach ($scores as $score) { if ($score->criteria->type == 'objective') { if ((int) $score->score) { $objective += (int) $score->score; } else { $objective += 1; } } else { $subjective += (int) $score->score; } } $application->objective_score = $objective; $application->subjective_score = $subjective; $application->total_score = $objective + $subjective; $application->save(); return compact('objective', 'subjective', 'total'); }
public function listScores() { $applications = Application::whereIn('status', ['submitted', 'review'])->get(); $criteria = Criteria::get(); $appScores = []; // Store the average scores for each criterion of each application foreach ($applications as $application) { $scores = Score::where('scores.application_id', $application->id)->join('judged', function ($join) { $join->on('judged.user_id', '=', 'scores.user_id')->on('judged.application_id', '=', 'scores.application_id'); })->get(); $criteriaScores = []; foreach ($scores as $score) { if (!isset($criteriaScores[$score->criteria_id])) { $criteriaScores[$score->criteria_id] = ['average' => 0, 'total' => 0, 'count' => 0]; } $criteriaScores[$score->criteria_id]['count']++; $criteriaScores[$score->criteria_id]['total'] += $score->score; $criteriaScores[$score->criteria_id]['average'] = $criteriaScores[$score->criteria_id]['total'] / $criteriaScores[$score->criteria_id]['count']; } foreach ($criteria as $criterion) { if (!isset($criteriaScores[$criterion->id])) { $criteriaScores[$criterion->id] = ['average' => 0]; } $appScores[$application->id][$criterion->id] = $criteriaScores[$criterion->id]['average']; } } return view('pages/scores/list', compact('applications', 'criteria', 'appScores')); }
public function index() { $quizzs = Quizz::all(); $questions = Question::all(); $themes = Theme::all(); $users = User::all(); $actifQuizz = Quizz::where('actif', 1)->first(); if (!$actifQuizz) { $goodAnswerNbr = 0; $badAnswerNbr = 0; } else { $goodAnswerNbr = Score::where('quizz_id', $actifQuizz->id)->where('correct', true)->count(); $badAnswerNbr = Score::where('quizz_id', $actifQuizz->id)->where('correct', false)->count(); } return view('admin.dashboard.index', ['quizzs' => $quizzs, 'questions' => $questions, 'themes' => $themes, 'users' => $users, 'actifQuizz' => $actifQuizz, 'goodAnswerNbr' => $goodAnswerNbr, 'badAnswerNbr' => $badAnswerNbr]); }
public function scoreClassement($quizz) { $scoreUsers = Score::where('quizz_id', $quizz->id)->groupBy('user_id')->get(); $scoreClassement = array(); foreach ($scoreUsers as $score) { $timeQuestion = Score::where('user_id', $score->user_id)->where('quizz_id', $quizz->id)->where('already_answered', true)->get(); $timeFirstQuestion = $timeQuestion->first()->created_at; $timeQuestion = Score::where('user_id', $score->user_id)->where('quizz_id', $quizz->id)->where('already_answered', true)->get(); $timeLastQuestion = $timeQuestion->last()->updated_at; Carbon::setLocale('fr'); $time = $timeLastQuestion->diffForHumans($timeFirstQuestion, true); $scoreUser = Score::where('user_id', $score->user_id)->where('quizz_id', $quizz->id)->where('already_answered', true)->where('correct', true)->count(); $user = User::where('id', $score->user_id)->first(); $scoreClassement[$user->id] = ['prenom' => $user->first_name, 'profil' => 'facebook.com/' . $user->id, 'avatar' => $user->avatar, 'score' => $scoreUser, 'time' => $time]; } $classementCollect = collect($scoreClassement); $classementCollect->sortBy('score')->sortByDesc('time'); return $classementCollect; }
public function question() { $quizz = $this->quizzRepository->getActif(); $answerExist = Score::where('user_id', Auth::user()->id)->where('quizz_id', $quizz->id)->exists(); if (!$answerExist) { $question = $quizz->questions->random(1); $this->scoreRepository->storeUnansweredQuestion($quizz, $question); } else { $unansweredQuestion = $this->scoreRepository->getUnansweredQuestion($quizz); if (!$unansweredQuestion) { return redirect('/result', 302, [], true); } $question = $unansweredQuestion->question; } $answeredQuestionNbr = $this->scoreRepository->getAnsweredQuestionNbr($quizz); if ($answeredQuestionNbr < $quizz->max_question) { return view('front.question', ['question' => $question, 'numQuest' => $answeredQuestionNbr, 'nbQuest' => $quizz->max_question]); } return redirect('/result', 302, [], true); }