MIF_E31231003/app/Http/Controllers/Admin/SiswaAdminController.php

73 lines
2.4 KiB
PHP

<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\Siswa;
use App\Models\User;
use App\Services\ActivityLogger;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
class SiswaAdminController extends Controller
{
public function index()
{
$query = Siswa::with('user');
if (request('search')) {
$query->whereHas('user', fn($q) => $q->where('nama', 'like', '%'.request('search').'%')
->orWhere('email', 'like', '%'.request('search').'%'));
}
$siswas = $query->latest()->paginate(15);
return view('pages.admin.siswa.index', compact('siswas'));
}
public function edit($id)
{
$siswa = Siswa::with('user')->findOrFail($id);
return view('pages.admin.siswa.edit', compact('siswa'));
}
public function update(Request $request, $id)
{
$siswa = Siswa::with('user')->findOrFail($id);
$request->validate([
'nama' => 'required|string|max:120',
'email' => 'required|email|unique:users,email,'.$siswa->user_id,
'no_telepon' => 'nullable|string|max:20',
'alamat' => 'nullable|string',
'sekolah_asal' => 'nullable|string|max:120',
'password' => 'nullable|string|min:8',
]);
$siswa->user->update([
'nama' => $request->nama,
'email' => $request->email,
]);
if ($request->filled('password')) {
$siswa->user->update(['password_hash' => Hash::make($request->password)]);
}
$siswa->update([
'no_telepon' => $request->no_telepon,
'alamat' => $request->alamat,
'sekolah_asal' => $request->sekolah_asal,
]);
ActivityLogger::log('Admin edit siswa: ' . $request->nama);
return redirect()->route('admin.siswa.index')
->with('success', "Data siswa {$request->nama} berhasil diperbarui!");
}
public function toggleStatus($id)
{
$siswa = Siswa::with('user')->findOrFail($id);
$siswa->user->update(['is_active' => !$siswa->user->is_active]);
$status = $siswa->user->is_active ? 'diaktifkan' : 'dinonaktifkan';
ActivityLogger::log("Admin {$status} siswa: {$siswa->user->nama}");
return redirect()->back()->with('success', "Akun siswa berhasil {$status}.");
}
}