266 lines
9.0 KiB
PHP
266 lines
9.0 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\DataSoalModel;
|
|
use App\Models\DetailTestModel;
|
|
use App\Models\TestSessionsModel;
|
|
use Illuminate\Http\Request;
|
|
|
|
class HalamanUjianController extends Controller
|
|
{
|
|
|
|
public function getCurrentAnswer(Request $request) {
|
|
$data_answer = DetailTestModel::where('id_soal', $request->id_question)
|
|
->where('id_test_sessions', $request->session_id)
|
|
->first();
|
|
|
|
if($data_answer != null) {
|
|
return response()->json([
|
|
'status' => 'success',
|
|
'jawaban' => $data_answer->jawaban
|
|
]);
|
|
} else {
|
|
return response()->json([
|
|
'status' => 'error',
|
|
'message' => 'Data jawaban tidak ditemukan.'
|
|
]);
|
|
}
|
|
}
|
|
|
|
public function getTimeLeft(Request $request) {
|
|
$data_session = TestSessionsModel::where('id_test_sessions', $request->session_id)->first();
|
|
if($data_session != null) {
|
|
if($data_session->status_session != '1') {
|
|
return response()->json([
|
|
'status' => 'error',
|
|
'message' => 'Data sesi tes belum dimulai atau telah usai. Silahkan cek status dengan kode untuk informasi lebih lanjut.'
|
|
]);
|
|
} else if($data_session->status_session == '1') {
|
|
if($data_session->is_active == '1') {
|
|
$time_left = $data_session->unix_end_time - time();
|
|
if($time_left <= 0) {
|
|
$data_session->update([
|
|
'status_session' => '2',
|
|
'is_active' => '0'
|
|
]);
|
|
return response()->json([
|
|
'status' => 'error',
|
|
'message' => 'Waktu sesi tes telah habis. Silahkan cek status dengan kode untuk informasi lebih lanjut.'
|
|
]);
|
|
} else {
|
|
return response()->json([
|
|
'status' => 'success',
|
|
'time_left' => $data_session->unix_end_time
|
|
]);
|
|
}
|
|
} else {
|
|
return response()->json([
|
|
'status' => 'error',
|
|
'message' => 'Sesi tes belum aktif. Silahkan mulai tes terlebih dahulu.'
|
|
]);
|
|
}
|
|
}
|
|
} else {
|
|
return response()->json([
|
|
'status' => 'error',
|
|
'message' => 'Data sesi tes tidak ditemukan. Silakan mulai tes terlebih dahulu.'
|
|
]);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Display a listing of the resource.
|
|
*/
|
|
public function index(Request $request)
|
|
{
|
|
|
|
$id_session = null;
|
|
if(session('id_test_sessions') != null) {
|
|
$id_session = session('id_test_sessions');
|
|
} else if($request->id_test_sessions != null) {
|
|
$id_session = $request->id_test_sessions;
|
|
} else {
|
|
return redirect()->route('cek-status.index')->with('error', 'Data sesi tes tidak ditemukan. Silakan mulai tes terlebih dahulu.');
|
|
}
|
|
|
|
$data_session = TestSessionsModel::where('id_test_sessions', $id_session)->first();
|
|
if($data_session != null) {
|
|
if($data_session->status_session != '1') {
|
|
return redirect()->route('cek-status.index')->with('error', 'Data sesi tes belum dimulai atau telah usai. Silahkan cek status dengan kode untuk informasi lebih lanjut.');
|
|
} else if($data_session->status_session == '1') {
|
|
if($data_session->is_active == '0') {
|
|
$data_session->update([
|
|
'is_active' => '1',
|
|
'unix_start_time' => time(),
|
|
'unix_end_time' => time() + (20 * 60)
|
|
]);
|
|
} else if($data_session->is_active == '1') {
|
|
if(time() > $data_session->unix_end_time) {
|
|
$data_session->update([
|
|
'status_session' => '2',
|
|
'is_active' => '0'
|
|
]);
|
|
return redirect()->route('cek-status.index')->with('error', 'Waktu sesi tes telah habis. Silahkan cek status dengan kode untuk informasi lebih lanjut.');
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
return redirect()->route('cek-status.index')->with('error', 'Data sesi tes tidak ditemukan. Silakan mulai tes terlebih dahulu.');
|
|
}
|
|
|
|
$question_number = null;
|
|
$data_question = null;
|
|
if(session('question') != null) {
|
|
$question_number = session('question');
|
|
} else if($request->question != null) {
|
|
$question_number = $request->question;
|
|
} else {
|
|
$question_number = 1;
|
|
}
|
|
|
|
$data_question = DataSoalModel::all();
|
|
$answered_question = [];
|
|
$index_question = 1;
|
|
foreach($data_question as $detail) {
|
|
$detail_answer = DetailTestModel::where('id_soal', $detail->id_soal)
|
|
->where('id_test_sessions', $id_session)
|
|
->first();
|
|
if($detail_answer != null) {
|
|
$answered_question[] = [
|
|
'id_soal' => $detail->id_soal,
|
|
'nomor_soal' => $index_question,
|
|
'answered' => true,
|
|
'jawaban' => $detail_answer->jawaban
|
|
];
|
|
} else {
|
|
$answered_question[] = [
|
|
'id_soal' => $detail->id_soal,
|
|
'nomor_soal' => $index_question,
|
|
'answered' => false,
|
|
'jawaban' => null
|
|
];
|
|
}
|
|
$index_question++;
|
|
}
|
|
|
|
$total_question = null;
|
|
$is_last_question = false;
|
|
if($question_number <= 0 || $question_number > count($data_question)) {
|
|
$question_number = 1;
|
|
}
|
|
if(count($data_question) == $question_number) {
|
|
$is_last_question = true;
|
|
}
|
|
$total_question = count($data_question);
|
|
$data_question = $data_question[$question_number - 1];
|
|
|
|
$answer = [];
|
|
if($data_question->jawaban_a != null) {
|
|
$answer[] = [
|
|
'key' => 'a',
|
|
'value' => $data_question->jawaban_a
|
|
];
|
|
}
|
|
if($data_question->jawaban_b != null) {
|
|
$answer[] = [
|
|
'key' => 'b',
|
|
'value' => $data_question->jawaban_b
|
|
];
|
|
}
|
|
if($data_question->jawaban_c != null) {
|
|
$answer[] = [
|
|
'key' => 'c',
|
|
'value' => $data_question->jawaban_c
|
|
];
|
|
}
|
|
if($data_question->jawaban_d != null) {
|
|
$answer[] = [
|
|
'key' => 'd',
|
|
'value' => $data_question->jawaban_d
|
|
];
|
|
}
|
|
if($data_question->jawaban_e != null) {
|
|
$answer[] = [
|
|
'key' => 'e',
|
|
'value' => $data_question->jawaban_e
|
|
];
|
|
}
|
|
|
|
// dd($answer);
|
|
|
|
return view("user.pages.ujian.index", compact('data_session', 'data_question', 'total_question', 'is_last_question', 'question_number', 'answer', 'answered_question'));
|
|
}
|
|
|
|
/**
|
|
* Show the form for creating a new resource.
|
|
*/
|
|
public function create()
|
|
{
|
|
//
|
|
}
|
|
|
|
/**
|
|
* Store a newly created resource in storage.
|
|
*/
|
|
public function store(Request $request)
|
|
{
|
|
$data_session = TestSessionsModel::where('id_test_sessions', $request->session_id)->first();
|
|
if($data_session != null) {
|
|
if($data_session->status_session != '1') {
|
|
return response()->json([
|
|
'status' => 'error',
|
|
'message' => 'Data sesi tes belum dimulai atau telah usai. Silahkan cek status dengan kode untuk informasi lebih lanjut.'
|
|
]);
|
|
}
|
|
DetailTestModel::updateOrCreate(
|
|
[
|
|
'id_soal' => $request->id_question,
|
|
'id_test_sessions' => $request->session_id
|
|
],
|
|
[
|
|
'jawaban' => $request->jawaban_final
|
|
]
|
|
);
|
|
} else {
|
|
return response()->json([
|
|
'status' => 'error',
|
|
'message' => 'Data sesi tes tidak ditemukan. Silakan mulai tes terlebih dahulu.'
|
|
]);
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* Display the specified resource.
|
|
*/
|
|
public function show(string $id)
|
|
{
|
|
//
|
|
}
|
|
|
|
/**
|
|
* Show the form for editing the specified resource.
|
|
*/
|
|
public function edit(string $id)
|
|
{
|
|
//
|
|
}
|
|
|
|
/**
|
|
* Update the specified resource in storage.
|
|
*/
|
|
public function update(Request $request, string $id)
|
|
{
|
|
//
|
|
}
|
|
|
|
/**
|
|
* Remove the specified resource from storage.
|
|
*/
|
|
public function destroy(string $id)
|
|
{
|
|
//
|
|
}
|
|
}
|