Grading Function

This commit is contained in:
Kilian Hofmann 2021-08-15 17:18:15 +02:00
parent 5f232a645c
commit fb1f54d8b9
2 changed files with 64 additions and 0 deletions

View File

@ -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];
}
}

View File

@ -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];
}
}