<?php
namespace App\View\Components;
use Illuminate\Support\Facades\Auth;
use Illuminate\View\Component;
use Modules\Certificate\Entities\Certificate;
use Modules\Quiz\Entities\OnlineQuiz;
use Modules\Quiz\Entities\QuizeSetup;
use Modules\Quiz\Entities\QuizTest;
class QuizResultPageSection extends Component
{
public $quiz, $user, $course;
public function __construct($quiz, $user, $course)
{
$this->quiz = $quiz;
$this->user = $user;
$this->course = $course;
}
public function render()
{
$quiz = $this->quiz;
$quizSetup = QuizeSetup::getData();
$user = Auth::user();
$all = QuizTest::with('details')->where('course_id',$this->course->id)->where('user_id', $user->id)->get();
$result = [];
$preResult = [];
foreach ($all as $key => $i) {
$onlineQuiz = OnlineQuiz::find($i->quiz_id);
$date = showDate($i->created_at);
$totalQus = totalQuizQus($i->quiz_id);
$totalAns = count($quiz->details);
$totalCorrect = 0;
$totalScore = totalQuizMarks($i->quiz_id);
$score = 0;
if ($totalAns != 0) {
foreach ($i->details as $test) {
if ($test->status == 1) {
$score += $test->mark ?? 1;
$totalCorrect++;
}
}
}
if ($quiz->id == $i->id) {
$result['start_at'] = $i->start_at;
$result['end_at'] = $i->end_at;
$result['duration'] = $i->duration;
$result['totalQus'] = $totalQus;
$result['totalAns'] = $totalAns;
$result['totalCorrect'] = $totalCorrect;
$result['totalWrong'] = $totalAns - $totalCorrect;
$result['score'] = $score;
$result['totalScore'] = $totalScore;
$result['passMark'] = $onlineQuiz->percentage ?? 0;
$result['mark'] = $score > 0 ? round($score / $totalScore * 100) : 0;;
$result['status'] = $result['mark'] >= $result['passMark'] ? "Passed" : "Failed";
$result['text_color'] = $result['mark'] >= $result['passMark'] ? "success_text" : "error_text";
$i->pass = $result['mark'] >= $result['passMark'] ? "1" : "0";
$i->save();
} else {
$preResult[$key]['quiz_test_id'] = $i->id;
$preResult[$key]['totalQus'] = $totalQus;
$preResult[$key]['date'] = $date;
$preResult[$key]['totalAns'] = $totalAns;
$preResult[$key]['totalCorrect'] = $totalCorrect;
$preResult[$key]['totalWrong'] = $totalAns - $totalCorrect;
$preResult[$key]['score'] = $score;
$preResult[$key]['totalScore'] = $totalScore;
$preResult[$key]['passMark'] = $onlineQuiz->percentage ?? 0;
$preResult[$key]['mark'] = $score > 0 ? round($score / $totalScore * 100) : 0;
$preResult[$key]['status'] = $preResult[$key]['mark'] >= $preResult[$key]['passMark'] ? "Passed" : "Failed";
$preResult[$key]['text_color'] = $preResult[$key]['mark'] >= $preResult[$key]['passMark'] ? "success_text" : "error_text";
$i->pass = $preResult[$key]['mark'] >= $preResult[$key]['passMark'] ? "1" : "0";
$i->save();
}
}
$certificate = Certificate::where('for_quiz', 1)->first();
return view(theme('components.quiz-result-page-section'), compact('certificate', 'quizSetup', 'result', 'preResult'));
}
}