GermanAirlinesVA-Schooling/models/ExamTyperating.php
2021-08-15 17:18:15 +02:00

100 lines
2.5 KiB
PHP

<?php namespace GermanAirlinesVa\Schooling\Models;
use Model;
/**
* Model
*/
class ExamTyperating extends Model
{
use \October\Rain\Database\Traits\Validation;
/*
* Disable timestamps by default.
* Remove this line if timestamps are defined in the database table.
*/
public $timestamps = false;
/**
* @var string The database table used by the model.
*/
public $table = 'exams';
protected $connection = 'germanairlinesva_schooling';
/**
* @var array Validation rules
*/
public $rules = [
'member_id' => 'required',
'typerating_id' => 'required',
'start' => 'required',
'status' => 'required',
];
public $belongsTo = [
'typerating' => 'GermanAirlinesVa\Schooling\Models\Typerating',
'member' => 'GermanAirlinesVa\Social\Models\Member',
];
public $belongsToMany = [
'exam_questions' => [
'GermanAirlinesVa\Schooling\Models\ExamTyperatingQuestion',
'table' => 'exam_exam_answer_exam_question',
'key' => 'exam_id',
'otherKey' => 'exam_question_id',
],
'exam_answers' => [
'GermanAirlinesVa\Schooling\Models\ExamTyperatingAnswer',
'table' => 'exam_exam_answer_exam_question',
'key' => 'exam_id',
'otherKey' => 'exam_answer_id',
],
];
/**
* The "booting" method of the model.
*
* @return void
*/
protected static function boot()
{
parent::boot();
static::addGlobalScope('exam_typerating_typerating_id', function ($builder) {
$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];
}
}