131 lines
4.5 KiB
PHP
131 lines
4.5 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\api;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Response;
|
|
use Illuminate\Support\Facades\Storage;
|
|
|
|
class TugasMobileController extends Controller
|
|
{
|
|
public function uploadTugas(Request $request)
|
|
{
|
|
// Validasi input
|
|
// $validator = Validator::make($request->all(), [
|
|
// 'id_tugas' => 'required|integer',
|
|
// 'id_siswa' => 'required|integer',
|
|
// 'essay_answer' => 'required|string',
|
|
// 'file_tugas' => 'nullable|string', // Validasi untuk file tugas base64 string, bisa nullable
|
|
// ]);
|
|
|
|
// if ($validator->fails()) {
|
|
// return response()->json(['message' => 'Validation error', 'errors' => $validator->errors()], 400);
|
|
// }
|
|
|
|
$idTugas = $request->input('id_tugas');
|
|
$idSiswa = $request->input('id_siswa');
|
|
$essayAnswer = $request->input('essay_answer');
|
|
$fileTugas = $request->input('file_tugas'); // Base64 encoded string
|
|
|
|
try {
|
|
// Cek apakah siswa sudah pernah meng-upload tugas dengan idTugas dan idSiswa yang sama sebelumnya
|
|
$existingSubmission = DB::table('pengumpulan_tugas')
|
|
->where('id_tugas', $idTugas)
|
|
->where('id_siswa', $idSiswa)
|
|
->exists();
|
|
|
|
if ($existingSubmission) {
|
|
return response()->json(['message' => 'Siswa sudah meng-upload tugas ini sebelumnya'], 400);
|
|
}
|
|
|
|
$filename = null;
|
|
// Proses file jika ada
|
|
if (!empty($fileTugas)) {
|
|
// Decode file dari Base64 ke binary
|
|
$binaryFile = base64_decode($fileTugas);
|
|
|
|
// Generate nama file dengan format idSiswa_idTugas_tanggalWaktu.pdf
|
|
$filename = $idSiswa . '_' . $idTugas . '_' . now()->format('YmdHis') . '.pdf';
|
|
$filePath = 'documents/' . $filename;
|
|
|
|
// Simpan file ke storage/app/public/documents
|
|
Storage::put('public/' . $filePath, $binaryFile);
|
|
}
|
|
|
|
// Tambahkan data ke database
|
|
DB::table('pengumpulan_tugas')->insert([
|
|
'lampiran_tugas' => $filePath,
|
|
'essay_answer' => $essayAnswer,
|
|
'id_tugas' => $idTugas,
|
|
'id_siswa' => $idSiswa,
|
|
'nilai' => 0,
|
|
'created_at' => now(),
|
|
'updated_at' => now(),
|
|
]);
|
|
|
|
return response()->json(['message' => 'Data tugas berhasil ditambahkan'], 200);
|
|
} catch (\Exception $e) {
|
|
// Tangani jika terjadi kesalahan
|
|
return response()->json(['message' => 'Terjadi kesalahan saat mengupload file atau menambahkan data tugas', 'error' => $e->getMessage()], 500);
|
|
}
|
|
}
|
|
|
|
public function lihatTugas(Request $request)
|
|
{
|
|
// Validasi request
|
|
$request->validate([
|
|
'id_tugas' => 'required|integer',
|
|
]);
|
|
|
|
$id_tugas = $request->input('id_tugas');
|
|
|
|
// Dapatkan nama file dari database
|
|
$fileName = DB::table('tugas')
|
|
->where('id_tugas', $id_tugas)
|
|
->value('file_path');
|
|
|
|
if ($fileName) {
|
|
// Dapatkan URL lengkap ke file
|
|
$fileUrl = Storage::url($fileName);
|
|
|
|
// Tambahkan header "ngrok-skip-browser-warning"
|
|
return response()->json([
|
|
'fileUrl' => asset($fileUrl),
|
|
]);
|
|
} else {
|
|
// Jika tidak ada data tugas yang ditemukan
|
|
return response()->json(['message' => 'Tugas tidak ditemukan'], 404);
|
|
}
|
|
}
|
|
|
|
public function tampilRiwayatPengumpulanTugas(Request $request)
|
|
{
|
|
// Validasi input
|
|
$validated = $request->validate([
|
|
'id_tugas' => 'required|integer',
|
|
'id_siswa' => 'required|integer',
|
|
]);
|
|
|
|
$id_tugas = $validated['id_tugas'];
|
|
$id_siswa = $validated['id_siswa'];
|
|
|
|
try {
|
|
// Cari data pengumpulan tugas berdasarkan id_tugas dan id_siswa
|
|
$pengumpulanTugas = DB::table('pengumpulan_tugas')
|
|
->where('id_tugas', $id_tugas)
|
|
->where('id_siswa', $id_siswa)
|
|
->get();
|
|
|
|
if ($pengumpulanTugas->isEmpty()) {
|
|
return response()->json(['message' => 'Data tidak ditemukan'], 404);
|
|
}
|
|
|
|
return response()->json($pengumpulanTugas);
|
|
} catch (\Exception $e) {
|
|
return response()->json(['message' => 'Terjadi kesalahan: ' . $e->getMessage()], 500);
|
|
}
|
|
}
|
|
}
|