public function store(Request $request) { $error = 0; if (!$request->hasFile('answer')) { $error = 1; $message = 'لم تقم برفع أي ملف'; return response()->json(compact('error', 'message'), 200, [], JSON_NUMERIC_CHECK); } $file = $request->file('answer'); $exam_file = json_decode(file_get_contents($file->getRealPath())); if (empty($exam_file->exam_id)) { $error = 1; $message = 'الملف الذي رفعته غير صحيح'; return response()->json(compact('error', 'message'), 200, [], JSON_NUMERIC_CHECK); } if (empty($exam_file->questions) or !is_array($exam_file->questions)) { $error = 1; $message = 'لا توجد إجابات بالاختبار الذي رفعته'; return response()->json(compact('error', 'message'), 200, [], JSON_NUMERIC_CHECK); } $exam_id = $exam_file->exam_id; $student_id = $exam_file->student_id; if (!($exam = Exam::with('questions', 'questions.choices')->find($exam_id))) { $error = 1; $message = 'الاختبار الذي تحاول رفع إجابته غير موجود'; return response()->json(compact('error', 'message'), 200, [], JSON_NUMERIC_CHECK); } $result_data = ['student_id' => $student_id, 'exam_id' => $exam->id, 'semester_id' => $exam->semester_id]; $grade_per_question = 0.5; if ($exam->type == 'activity') { $grade_per_question = round($this->activity_points / $exam->questions->count(), 2); } // dd($grade_per_question); if ($result = ExamResult::firstOrCreate($result_data)) { $result_answers = []; $grade = 0.0; $answers = $exam_file->questions; foreach ($answers as $answer) { $result_answer = []; $result_answer['question_id'] = $answer->question_id; $result_answer['answer'] = $answer->answer; $result_answers[] = $result_answer; } StudentGrade::where('student_id', $student_id)->where(['ref_key' => 'exam', 'ref_value' => $exam->id])->delete(); $result->answers()->delete(); foreach ($result_answers as $a) { $result->answers()->create($a); } foreach ($exam->questions as $question) { switch ($question->type) { case 'true_false': $true_choice = $question->choices->first(function ($key, $choice) { return $choice->istrue; }); $is_true = array_where($answers, function ($key, $answer) use($true_choice) { return $answer->answer == $true_choice->id; }); // var_dump($true_choice->toArray()); if (count($is_true)) { $grade += round($grade_per_question, 2); } break; case 'single_choice': $true_choice = $question->choices->first(function ($key, $choice) { return $choice->istrue; }); $is_true = array_where($answers, function ($key, $answer) use($true_choice) { return $answer->answer == $true_choice->id; }); if (count($is_true)) { $grade += round($grade_per_question, 2); } break; case 'multiple_choice': $multiple_answer = array_first($answers, function ($key, $answer) use($question) { return $answer->question_id == $question->id; }); if ($multiple_answer) { $all_answers = $multiple_answer ? explode(",", $multiple_answer->answer) : 0; if (count($all_answers) == $question->choices->count()) { $grade += "0.00"; } else { $true_answers = $question->choices->filter(function ($question) { return $question->istrue; }); if ($true_answers) { $true_answers_ids = $true_answers->pluck('id')->toArray(); $intersect = array_intersect($all_answers, $true_answers_ids); $multichoice_grade = count($intersect) * ($grade_per_question / count($true_answers_ids)); $grade += round($multichoice_grade, 2); } } } break; } } if ($exam->type == 'activity' && $grade > $this->activity_points) { $grade = $this->activity_points; } $data = ['student_id' => $student_id, 'value' => $grade, 'ref_value' => $exam->id, 'ref_key' => 'exam', 'subject_id' => $exam->subject_id, 'semester_id' => Semester()->id, 'notes' => 'درجة الأنشطة']; StudentGrade::create($data); $message = 'تم رفع الإجابة بنجاح'; return response()->json(compact('error', 'message'), 200, [], JSON_NUMERIC_CHECK); } else { $error = 1; $message = 'لم يتم حفظ الإجابة!! حدث خلل.'; return response()->json(compact('error', 'message'), 200, [], JSON_NUMERIC_CHECK); } return response()->json(compact('error', 'message'), 200, [], JSON_NUMERIC_CHECK); }
public function storeresult(Request $request) { $value = $request->value; $student_id = $request->student_id; $subject_id = $request->subject_id; $exam_id = $request->exam_id; $question_id = $request->question_id; $exam_type = $request->exam_type; StudentGrade::where('student_id', $student_id)->where(['ref_key' => 'examessay', 'ref_value' => $exam_id])->delete(); DB::table('exam_result_answers')->where('exam_result_id', '=', $exam_id)->where('question_id', '=', $question_id)->delete(); $data = ['student_id' => $student_id, 'value' => $value, 'ref_value' => $exam_id, 'ref_key' => 'examessay', 'subject_id' => $subject_id, 'semester_id' => Semester()->id, 'notes' => 'درجة المقالى']; StudentGrade::create($data); DB::table('exam_result_answers')->insert(['exam_result_id' => $exam_id, 'question_id' => $question_id, 'degree' => $value, 'answer' => 'essay']); return redirect()->route('teachers.profile.students', [$subject_id, $exam_type])->with('success', 'تم حفظ الدرجه بنجاح'); }