255 lines
9.6 KiB
PHP
255 lines
9.6 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\Pengajar;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Validator;
|
|
|
|
class ManajemenTenagaPendidikController extends Controller
|
|
{
|
|
public function index()
|
|
{
|
|
$pengajars = Pengajar::ordered()->with('jurusan')->get();
|
|
$jurusans = \App\Models\Jurusan::ordered()->get();
|
|
return view('admin.tenaga-pendidik.index', compact('pengajars', 'jurusans'));
|
|
}
|
|
|
|
public function store(Request $request)
|
|
{
|
|
$validator = Validator::make($request->all(), [
|
|
'nama_pengajar' => 'required|string|max:255',
|
|
'nip' => 'nullable|string|max:50',
|
|
'jurusan_id' => 'required|exists:jurusans,id',
|
|
'jabatan' => 'required|string|max:255',
|
|
'foto_pengajar' => 'nullable|image|mimes:jpeg,png,jpg,gif,webp|max:5120',
|
|
'status' => 'boolean',
|
|
'urutan' => 'nullable|integer|min:0',
|
|
], [
|
|
'nama_pengajar.required' => 'Nama pengajar harus diisi',
|
|
'nama_pengajar.max' => 'Nama pengajar maksimal 255 karakter',
|
|
'nip.max' => 'NIP maksimal 50 karakter',
|
|
'jurusan_id.required' => 'Jurusan harus dipilih',
|
|
'jurusan_id.exists' => 'Jurusan tidak valid',
|
|
'jabatan.required' => 'Jabatan harus diisi',
|
|
'jabatan.max' => 'Jabatan maksimal 255 karakter',
|
|
'foto_pengajar.image' => 'File harus berupa gambar',
|
|
'foto_pengajar.mimes' => 'Format gambar harus jpeg, png, jpg, gif, atau webp',
|
|
'foto_pengajar.max' => 'Ukuran gambar maksimal 5MB',
|
|
'urutan.integer' => 'Urutan harus berupa angka',
|
|
'urutan.min' => 'Urutan minimal 0',
|
|
]);
|
|
|
|
if ($validator->fails()) {
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'Validasi gagal',
|
|
'errors' => $validator->errors()
|
|
], 422);
|
|
}
|
|
|
|
try {
|
|
$data = [
|
|
'nama_pengajar' => $request->nama_pengajar,
|
|
'nip' => $request->nip,
|
|
'jurusan_id' => $request->jurusan_id,
|
|
'jabatan' => $request->jabatan,
|
|
'status' => $request->has('status') ? true : false,
|
|
'urutan' => $request->urutan ?? 0,
|
|
];
|
|
|
|
if ($request->hasFile('foto_pengajar')) {
|
|
$file = $request->file('foto_pengajar');
|
|
$fileName = time() . '_' . uniqid() . '.' . $file->getClientOriginalExtension();
|
|
$file->move(storage_path('guru'), $fileName);
|
|
$data['foto_pengajar'] = $fileName;
|
|
}
|
|
|
|
$pengajar = Pengajar::create($data);
|
|
|
|
return response()->json([
|
|
'success' => true,
|
|
'message' => 'Tenaga pendidik berhasil ditambahkan!',
|
|
'pengajar' => [
|
|
'id' => $pengajar->id,
|
|
'nama_pengajar' => $pengajar->nama_pengajar,
|
|
'nip' => $pengajar->nip,
|
|
'jurusan' => $pengajar->jurusan->nama_jurusan ?? '-',
|
|
'jabatan' => $pengajar->jabatan,
|
|
'jabatan_pendek' => $pengajar->jabatan_pendek,
|
|
'foto_pengajar_url' => $pengajar->foto_pengajar_url,
|
|
'status' => $pengajar->status,
|
|
'urutan' => $pengajar->urutan,
|
|
'created_at' => $pengajar->created_at->format('d M Y'),
|
|
]
|
|
]);
|
|
|
|
} catch (\Exception $e) {
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'Terjadi kesalahan: ' . $e->getMessage()
|
|
], 500);
|
|
}
|
|
}
|
|
|
|
public function show(Pengajar $pengajar)
|
|
{
|
|
return response()->json([
|
|
'success' => true,
|
|
'pengajar' => [
|
|
'id' => $pengajar->id,
|
|
'nama_pengajar' => $pengajar->nama_pengajar,
|
|
'nip' => $pengajar->nip,
|
|
'jurusan_id' => $pengajar->jurusan_id,
|
|
'nama_jurusan' => $pengajar->jurusan->nama_jurusan ?? '-',
|
|
'jabatan' => $pengajar->jabatan,
|
|
'foto_pengajar_url' => $pengajar->foto_pengajar_url,
|
|
'status' => $pengajar->status,
|
|
'urutan' => $pengajar->urutan,
|
|
'created_at' => $pengajar->created_at->format('d F Y'),
|
|
'updated_at' => $pengajar->updated_at->format('d F Y'),
|
|
]
|
|
]);
|
|
}
|
|
|
|
public function update(Request $request, Pengajar $pengajar)
|
|
{
|
|
$validator = Validator::make($request->all(), [
|
|
'nama_pengajar' => 'required|string|max:255',
|
|
'nip' => 'nullable|string|max:50',
|
|
'jurusan_id' => 'required|exists:jurusans,id',
|
|
'jabatan' => 'required|string|max:255',
|
|
'foto_pengajar' => 'nullable|image|mimes:jpeg,png,jpg,gif,webp|max:5120',
|
|
'status' => 'boolean',
|
|
'urutan' => 'nullable|integer|min:0',
|
|
], [
|
|
'nama_pengajar.required' => 'Nama pengajar harus diisi',
|
|
'nama_pengajar.max' => 'Nama pengajar maksimal 255 karakter',
|
|
'nip.max' => 'NIP maksimal 50 karakter',
|
|
'jurusan_id.required' => 'Jurusan harus dipilih',
|
|
'jurusan_id.exists' => 'Jurusan tidak valid',
|
|
'jabatan.required' => 'Jabatan harus diisi',
|
|
'jabatan.max' => 'Jabatan maksimal 255 karakter',
|
|
'foto_pengajar.image' => 'File harus berupa gambar',
|
|
'foto_pengajar.mimes' => 'Format gambar harus jpeg, png, jpg, gif, atau webp',
|
|
'foto_pengajar.max' => 'Ukuran gambar maksimal 5MB',
|
|
'urutan.integer' => 'Urutan harus berupa angka',
|
|
'urutan.min' => 'Urutan minimal 0',
|
|
]);
|
|
|
|
if ($validator->fails()) {
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'Validasi gagal',
|
|
'errors' => $validator->errors()
|
|
], 422);
|
|
}
|
|
|
|
try {
|
|
$data = [
|
|
'nama_pengajar' => $request->nama_pengajar,
|
|
'nip' => $request->nip,
|
|
'jurusan_id' => $request->jurusan_id,
|
|
'jabatan' => $request->jabatan,
|
|
'status' => $request->has('status') ? true : false,
|
|
'urutan' => $request->urutan ?? $pengajar->urutan,
|
|
];
|
|
|
|
if ($request->hasFile('foto_pengajar')) {
|
|
if ($pengajar->foto_pengajar &&
|
|
file_exists(storage_path('guru/' . $pengajar->foto_pengajar))) {
|
|
unlink(storage_path('guru/' . $pengajar->foto_pengajar));
|
|
}
|
|
|
|
$file = $request->file('foto_pengajar');
|
|
$fileName = time() . '_' . uniqid() . '.' . $file->getClientOriginalExtension();
|
|
$file->move(storage_path('guru'), $fileName);
|
|
$data['foto_pengajar'] = $fileName;
|
|
}
|
|
|
|
$pengajar->update($data);
|
|
|
|
return response()->json([
|
|
'success' => true,
|
|
'message' => 'Tenaga pendidik berhasil diperbarui!',
|
|
'pengajar' => [
|
|
'id' => $pengajar->id,
|
|
'nama_pengajar' => $pengajar->nama_pengajar,
|
|
'nip' => $pengajar->nip,
|
|
'jurusan' => $pengajar->jurusan->nama_jurusan ?? '-',
|
|
'jabatan' => $pengajar->jabatan,
|
|
'jabatan_pendek' => $pengajar->jabatan_pendek,
|
|
'foto_pengajar_url' => $pengajar->foto_pengajar_url,
|
|
'status' => $pengajar->status,
|
|
'urutan' => $pengajar->urutan,
|
|
'updated_at' => $pengajar->updated_at->format('d M Y'),
|
|
]
|
|
]);
|
|
|
|
} catch (\Exception $e) {
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'Terjadi kesalahan: ' . $e->getMessage()
|
|
], 500);
|
|
}
|
|
}
|
|
|
|
public function destroy(Pengajar $pengajar)
|
|
{
|
|
try {
|
|
if ($pengajar->foto_pengajar &&
|
|
file_exists(storage_path('guru/' . $pengajar->foto_pengajar))) {
|
|
unlink(storage_path('guru/' . $pengajar->foto_pengajar));
|
|
}
|
|
|
|
$pengajar->delete();
|
|
|
|
return response()->json([
|
|
'success' => true,
|
|
'message' => 'Tenaga pendidik berhasil dihapus!'
|
|
]);
|
|
|
|
} catch (\Exception $e) {
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'Terjadi kesalahan: ' . $e->getMessage()
|
|
], 500);
|
|
}
|
|
}
|
|
|
|
public function updateStatus(Request $request, Pengajar $pengajar)
|
|
{
|
|
$validator = Validator::make($request->all(), [
|
|
'status' => 'required|boolean',
|
|
]);
|
|
|
|
if ($validator->fails()) {
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'Validasi gagal'
|
|
], 422);
|
|
}
|
|
|
|
try {
|
|
$pengajar->update([
|
|
'status' => $request->status
|
|
]);
|
|
|
|
return response()->json([
|
|
'success' => true,
|
|
'message' => 'Status tenaga pendidik berhasil diperbarui!',
|
|
'pengajar' => [
|
|
'id' => $pengajar->id,
|
|
'status' => $pengajar->status,
|
|
]
|
|
]);
|
|
|
|
} catch (\Exception $e) {
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'Terjadi kesalahan: ' . $e->getMessage()
|
|
], 500);
|
|
}
|
|
}
|
|
}
|