387 lines
14 KiB
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);
|
|
}
|
|
}
|
|
|
|
|
|
}
|