MIF_E31210592/app/Http/Controllers/api/GuruMobileController.php

387 lines
14 KiB
PHP

<?php
namespace App\Http\Controllers\api;
use App\Http\Controllers\Controller;
use App\Events\HelloEvent;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Response;
use Illuminate\Support\Facades\Storage;
class GuruMobileController extends Controller
{
public function tampilKelasGuru(Request $request)
{
$id_guru = $request->input('id_guru');
$kelas = DB::table('kelas')
->select('kelas.*')
->join('mengajar', 'mengajar.id_kelas', '=', 'kelas.id_kelas')
->where('mengajar.id_guru', $id_guru)
->get();
return response()->json($kelas);
}
public function tampilMataPelajaranGuru(Request $request)
{
$id_guru = $request->input('id_guru');
$mataPelajaranguru = DB::table('mata_pelajaran')
->select('mata_pelajaran.id_mapel', 'mata_pelajaran.nama_mapel', 'kelas.nama_kelas', 'kelas.id_kelas')
->join('mengajar as mengajar_mapel', 'mengajar_mapel.id_mapel', '=', 'mata_pelajaran.id_mapel')
->join('kelas', 'kelas.id_kelas', '=', 'mengajar_mapel.id_kelas')
->where('mengajar_mapel.id_guru', $id_guru)
->get();
return response()->json($mataPelajaranguru);
}
public function tampilTugasDetailMateriGuru(Request $request)
{
$id_materi = $request->input('id_materi');
$tugas = DB::table('tugas')
->select('tugas.id_tugas', 'materi.judul_materi', 'tugas.tenggat_waktu', 'tugas.keterangan')
->join('materi', 'materi.id_materi', '=', 'tugas.id_materi')
->where('tugas.id_materi', $id_materi)
->orderBy('tugas.id_tugas', 'desc')
->get();
return response()->json($tugas);
}
public function tambahTugasGuru(Request $request)
{
// Validasi input
$validated = $request->validate([
'id_materi' => 'required|integer',
'tenggat_waktu' => 'required|date_format:Y-m-d',
'keterangan' => 'required|string',
'file' => 'nullable|string', // file bisa null
'message' => 'nullable|string',
]);
$id_materi = $validated['id_materi'];
$tenggat_waktu = $validated['tenggat_waktu'];
$keterangan = $validated['keterangan'];
$fileBase64 = $validated['file'] ?? null;
try {
// Cek apakah sudah ada tugas dengan id_materi yang sama
$existingTugas = DB::table('tugas')
->where('id_materi', $id_materi)
->first();
if ($existingTugas) {
return response()->json(['message' => 'Tugas untuk materi ini sudah ada'], 400);
}
$fileName = null;
// Jika file disertakan, proses file
if ($fileBase64) {
// Decode base64 file
$fileData = base64_decode($fileBase64);
// Generate nama file dengan format idMateri_tanggalWaktu.pdf
$fileName = $id_materi . '_' . now()->format('YmdHis') . '.pdf';
$targetPath = public_path('storage/tugas/') . $fileName;
// Simpan file ke storage
file_put_contents($targetPath, $fileData);
}
// Tambah tugas baru
DB::table('tugas')->insert([
'id_materi' => $id_materi,
'tenggat_waktu' => $tenggat_waktu,
'keterangan' => $keterangan,
'file_path' => $fileName, // bisa bernilai null jika file tidak disertakan
]);
$title = "Tugas Baru";
$message = "Tugas baru telah ditambahkan ";
broadcast(new HelloEvent($title, $message))->toOthers();
return response()->json(['message' => 'Tugas berhasil ditambahkan'], 200);
} catch (\Exception $e) {
return response()->json(['message' => 'Terjadi kesalahan: ' . $e->getMessage()], 500);
}
}
public function editTugasGuru(Request $request)
{
// Validasi input
$validated = $request->validate([
'id_tugas' => 'required|integer',
'tenggat_waktu' => 'required|date_format:Y-m-d',
'keterangan' => 'required|string',
'file' => 'nullable|string' // Tambahkan validasi untuk file (Base64 encoded string)
]);
$id_tugas = $validated['id_tugas'];
$tenggat_waktu = $validated['tenggat_waktu'];
$keterangan = $validated['keterangan'];
$fileBase64 = $validated['file'] ?? null; // Ambil file jika ada
try {
// Update tugas berdasarkan id_tugas
$updateData = [
'tenggat_waktu' => $tenggat_waktu,
'keterangan' => $keterangan,
];
if ($fileBase64) {
// Decode file dari Base64 ke binary
$binaryFile = base64_decode($fileBase64);
// Generate nama file dengan format idTugas_tanggalWaktu.pdf
$filename = $id_tugas . '_' . now()->format('YmdHis') . '.pdf';
$targetPath = public_path('storage/tugas/') . $filename;
file_put_contents($targetPath, $binaryFile);
// Tambahkan nama file ke data yang akan diupdate
$updateData['file_path'] = 'storage/tugas/' . $filename;
}
$updated = DB::table('tugas')
->where('id_tugas', $id_tugas)
->update($updateData);
if ($updated) {
return response()->json(['message' => 'Tugas berhasil diupdate']);
} else {
return response()->json(['message' => 'Tidak ada perubahan yang dilakukan'], 200);
}
} catch (\Exception $e) {
return response()->json(['message' => 'Terjadi kesalahan: ' . $e->getMessage()], 500);
}
}
public function tampilPengumpulanTugasGuru(Request $request)
{
// Validasi input
$validated = $request->validate([
'id_guru' => 'required|integer',
]);
$id_guru = $validated['id_guru'];
try {
$pengumpulanTugas = DB::table('pengumpulan_tugas')
->join('tugas', 'pengumpulan_tugas.id_tugas', '=', 'tugas.id_tugas')
->join('materi', 'tugas.id_materi', '=', 'materi.id_materi')
->join('mata_pelajaran', 'materi.id_mapel', '=', 'mata_pelajaran.id_mapel')
->join('mengajar', function ($join) use ($id_guru) {
$join->on('mengajar.id_mapel', '=', 'mata_pelajaran.id_mapel')
->where('mengajar.id_guru', '=', $id_guru);
})
->join('siswa', 'pengumpulan_tugas.id_siswa', '=', 'siswa.nisn') // Join ke tabel siswa
->select(
'pengumpulan_tugas.*',
'siswa.nama_siswa', // Menambahkan nama_siswa ke dalam hasil query
'materi.judul_materi'
)
->get();
return response()->json($pengumpulanTugas);
} catch (\Exception $e) {
return response()->json(['message' => 'Terjadi kesalahan: ' . $e->getMessage()], 500);
}
}
public function editNilaiTugasGuru(Request $request)
{
// Validasi input
$validated = $request->validate([
'id_pengumpulan' => 'required|integer|exists:pengumpulan_tugas,id_pengumpulan',
'nilai' => 'required|integer|min:0|max:100', // asumsi nilai antara 0 dan 100
]);
$id_pengumpulan = $validated['id_pengumpulan'];
$nilai = $validated['nilai'];
try {
// Cari pengumpulan tugas berdasarkan id_pengumpulan
$pengumpulanTugas = DB::table('pengumpulan_tugas')
->where('id_pengumpulan', $id_pengumpulan)
->first();
// Cek apakah pengumpulan tugas ditemukan
if (!$pengumpulanTugas) {
return response()->json(['message' => 'Pengumpulan tugas tidak ditemukan.'], 404);
}
// Update nilai
DB::table('pengumpulan_tugas')
->where('id_pengumpulan', $id_pengumpulan)
->update(['nilai' => $nilai]);
return response()->json(['message' => 'Nilai berhasil diperbarui.']);
} catch (\Exception $e) {
return response()->json(['message' => 'Terjadi kesalahan: ' . $e->getMessage()], 500);
}
}
// public function downloadTugas(Request $request)
// {
// // Validasi request
// $request->validate([
// 'id_pengumpulan' => 'required|string', // Pastikan 'file_name' sesuai dengan nama field yang digunakan di Android
// ]);
// $id_pengumpulan = $request->input('id_pengumpulan');
// $fileName = DB::table('pengumpulan_tugas')
// ->where('id_pengumpulan', $id_pengumpulan)
// ->value('lampiran_tugas');
// // Dapatkan path lengkap ke file
// $filePath = public_path('documents/' . $fileName);
// // Periksa apakah file ada
// if (file_exists($filePath)) {
// // Jika ada, kirimkan file sebagai respons
// return response()->download($filePath, $fileName);
// } else {
// // Jika tidak, kirimkan respons file tidak ditemukan
// return response()->json(['message' => 'File tidak ditemukan'], 404);
// }
// }
public function downloadTugas(Request $request)
{
// Validasi request
$request->validate([
'id_pengumpulan' => 'required|string', // Pastikan 'file_name' sesuai dengan nama field yang digunakan di Android
]);
$id_pengumpulan = $request->input('id_pengumpulan');
// Dapatkan nama file dari database
$fileName = DB::table('pengumpulan_tugas')
->where('id_pengumpulan', $id_pengumpulan)
->value('lampiran_tugas');
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 materi yang ditemukan
return response()->json(['message' => 'Materi tidak ditemukan'], 404);
}
}
public function tampilTugasGuru(Request $request)
{
$id_guru = $request->input('id_guru');
$tugas = DB::table('tugas')
->select('tugas.id_tugas', 'materi.judul_materi', 'tugas.tenggat_waktu', 'tugas.keterangan')
->join('materi', 'materi.id_materi', '=', 'tugas.id_materi')
->join('mata_pelajaran', 'mata_pelajaran.id_mapel', '=', 'materi.id_mapel')
->join('kelas', 'kelas.id_kelas', '=', 'mata_pelajaran.id_kelas')
->join('mengajar', 'mengajar.id_mapel', '=', 'mata_pelajaran.id_mapel')
->where('mengajar.id_guru', $id_guru)
->orderBy('tugas.id_tugas', 'desc')
->get();
return response()->json($tugas);
}
public function updatePasswordGuru(Request $request)
{
$nip = $request->input('nip');
$oldPassword = $request->input('old_password');
$newPassword = $request->input('new_password');
$user = DB::table('guru')->where('nip', $nip)->first();
if ($user && $user->password === $oldPassword) {
// The old password matches, so update the password
DB::table('guru')->where('nip', $nip)->update([
'password' => $newPassword,
]);
$updatedUser = DB::table('guru')->where('nip', $nip)->first();
$response = array(
'success' => true,
'message' => 'Password telah diperbarui',
);
return response()->json($response);
} else {
return "Invalid old password";
}
}
public function tampilMateriGuru(Request $request)
{
$id_mapel = $request->input('id_mapel');
$materi = DB::table('materi')
->select('materi.id_materi', 'materi.judul_materi', 'materi.keterangan')
->where('materi.id_mapel', $id_mapel)
->get();
return response()->json($materi);
}
public function TambahMateriGuru(Request $request)
{
// Ambil input dari request
$lampiranMateri = $request->input('lampiran_materi');
$judulMateri = $request->input('judul_materi');
$keterangan = $request->input('keterangan');
$idMapel = $request->input('id_mapel');
try {
// Decode file dari Base64 ke binary
$binaryFile = base64_decode($lampiranMateri);
// Generate nama file dengan format judulMateri_tanggalWaktu.pdf
$filename = $judulMateri . '_' . now()->format('YmdHis') . '.pdf';
$targetPath = public_path('storage/materi/') . $filename;
// Simpan file ke path target
file_put_contents($targetPath, $binaryFile);
// Tambahkan data ke database
DB::table('materi')->insert([
'lampiran_materi' => 'materi/' . $filename,
'judul_materi' => $judulMateri,
'keterangan' => $keterangan,
'id_mapel' => $idMapel,
'created_at' => now(),
'updated_at' => now(),
]);
return response()->json(['message' => 'File berhasil diupload dan data tugas ditambahkan'], 200);
} catch (\Exception $e) {
// Tangani semua kesalahan yang terjadi dan kembalikan respons kesalahan
return response()->json(['message' => 'Gagal menambahkan materi: ' . $e->getMessage()], 500);
}
}
}