diff --git a/models/ExamMemberRank.php b/models/ExamMemberRank.php index 4131000..ba7af07 100644 --- a/models/ExamMemberRank.php +++ b/models/ExamMemberRank.php @@ -64,4 +64,36 @@ class ExamMemberRank extends Model $builder->where('member_rank_id', '<>', null); }); } + + public function grade() + { + $this->load([ + 'exam_questions' => function ($query) { + $query->groupBy('id'); + }, + ]); + $returnVal = []; + $returnGrade = 0; + foreach ($this->exam_questions as $question) { + $answers = $question->exam_answers; + $returnAnswers = []; + $returnAnswerGrade = true; + foreach ($answers as $answer) { + $given = $this->exam_answers->contains($answer->id); + array_push($returnAnswers, [ + 'answer' => $answer, + 'status' => $given, + 'grade' => $given == $answer->is_correct, + ]); + $returnAnswerGrade = $returnAnswerGrade && $given == $answer->is_correct; + } + array_push($returnVal, [ + 'question' => $question, + 'answers' => $returnAnswers, + 'grade' => $returnAnswerGrade, + ]); + $returnGrade = $returnAnswerGrade ? $returnGrade + 1 : $returnGrade; + } + return ['exam' => $returnVal, 'grade' => $returnGrade]; + } } diff --git a/models/ExamTyperating.php b/models/ExamTyperating.php index a94d463..7866c64 100644 --- a/models/ExamTyperating.php +++ b/models/ExamTyperating.php @@ -64,4 +64,36 @@ class ExamTyperating extends Model $builder->where('typerating_id', '<>', null); }); } + + public function grade() + { + $this->load([ + 'exam_questions' => function ($query) { + $query->groupBy('id'); + }, + ]); + $returnVal = []; + $returnGrade = 0; + foreach ($this->exam_questions as $question) { + $answers = $question->exam_answers; + $returnAnswers = []; + $returnAnswerGrade = true; + foreach ($answers as $answer) { + $given = $this->exam_answers->contains($answer->id); + array_push($returnAnswers, [ + 'answer' => $answer, + 'status' => $given, + 'grade' => $given == $answer->is_correct, + ]); + $returnAnswerGrade = $returnAnswerGrade && $given == $answer->is_correct; + } + array_push($returnVal, [ + 'question' => $question, + 'answers' => $returnAnswers, + 'grade' => $returnAnswerGrade, + ]); + $returnGrade = $returnAnswerGrade ? $returnGrade + 1 : $returnGrade; + } + return ['exam' => $returnVal, 'grade' => $returnGrade]; + } }