From 7a1bbb020de7f2c3b6825c587136611085c52182 Mon Sep 17 00:00:00 2001 From: ghozahimma65 Date: Fri, 14 Nov 2025 13:20:21 +0700 Subject: [PATCH] Akun --- app/Http/Controllers/Admin/AkunController.php | 96 +++++++++++++++++ app/Models/Guru.php | 16 ++- app/Models/WaliMurid.php | 8 +- resources/views/admin/akun/create.blade.php | 54 ++++++++++ resources/views/admin/akun/edit.blade.php | 48 +++++++++ resources/views/admin/akun/index.blade.php | 102 ++++++++++++++++++ resources/views/layouts/app.blade.php | 9 +- routes/web.php | 22 ++-- 8 files changed, 335 insertions(+), 20 deletions(-) create mode 100644 app/Http/Controllers/Admin/AkunController.php create mode 100644 resources/views/admin/akun/create.blade.php create mode 100644 resources/views/admin/akun/edit.blade.php create mode 100644 resources/views/admin/akun/index.blade.php diff --git a/app/Http/Controllers/Admin/AkunController.php b/app/Http/Controllers/Admin/AkunController.php new file mode 100644 index 0000000..2740876 --- /dev/null +++ b/app/Http/Controllers/Admin/AkunController.php @@ -0,0 +1,96 @@ +get(); + return view('admin.akun.index', compact('users')); + } + + public function create() + { + $gurus = Guru::whereNull('user_id')->get(['id', 'nama_guru']); + $waliMurids = WaliMurid::whereNull('user_id')->get(['id', 'nama_wali']); + + return view('admin.akun.create', compact('gurus', 'waliMurids')); + } + + public function store(Request $request) + { + $request->validate([ + 'role' => 'required|in:guru,wali_murid', + 'user_id' => 'required', + ]); + + if ($request->role == 'guru') { + $data = Guru::findOrFail($request->user_id); + $name = $data->nama_guru; + $email = $data->email ?? strtolower(str_replace(' ', '', $data->nama_guru)) . '@paud.local'; + $data = WaliMurid::findOrFail($request->user_id); + $name = $data->nama_wali; + $email = $data->email ?? strtolower(str_replace(' ', '', $data->nama_wali)) . '@paud.local'; + } + + if (User::where('email', $email)->exists()) { + return back()->with('error', 'Email sudah digunakan untuk akun lain.'); + } + + $user = User::create([ + 'name' => $name, + 'email' => $email, + 'password' => Hash::make('123456'), + 'role' => $request->role, + ]); + + $data->update(['user_id' => $user->id]); + + return redirect()->route('akun.index')->with('success', 'Akun berhasil dibuat!'); + } + + public function destroy(User $akun) + { + $akun->delete(); + return redirect()->route('akun.index')->with('success', 'Akun berhasil dihapus.'); + } + + public function edit(User $akun) + { + return view('admin.akun.edit', compact('akun')); + } + + public function update(Request $request, User $akun) + { + $request->validate([ + 'name' => 'required|string|max:255', + 'email' => 'required|email|unique:users,email,' . $akun->id, + 'role' => 'required|in:admin,guru,wali_murid', + ]); + + $akun->update([ + 'name' => $request->name, + 'email' => $request->email, + 'role' => $request->role, + ]); + + return redirect()->route('akun.index')->with('success', 'Akun berhasil diperbarui.'); + } + + public function resetPassword(User $akun) + { + $akun->update([ + 'password' => Hash::make('123456'), + ]); + + return redirect()->route('akun.index')->with('success', 'Password berhasil direset ke default (123456).'); + } +} diff --git a/app/Models/Guru.php b/app/Models/Guru.php index d5f234b..c83a833 100644 --- a/app/Models/Guru.php +++ b/app/Models/Guru.php @@ -8,12 +8,20 @@ class Guru extends Model { use HasFactory; + + // kasih tahu Laravel kalau nama tabelnya "guru", bukan "gurus" protected $table = 'guru'; - + protected $fillable = [ - 'nama_guru', - 'email', + 'nama', + 'jenis_guru', 'no_hp', - 'bidang', + 'email', + 'user_id', ]; + + public function user() + { + return $this->belongsTo(User::class); + } } \ No newline at end of file diff --git a/app/Models/WaliMurid.php b/app/Models/WaliMurid.php index b153333..0e0f087 100644 --- a/app/Models/WaliMurid.php +++ b/app/Models/WaliMurid.php @@ -13,14 +13,14 @@ class WaliMurid extends Model protected $fillable = [ 'nama_wali', - 'email', 'no_hp', + 'email', 'alamat', + 'user_id', ]; - // Tambahin relasi ke siswa - public function siswas() + public function user() { - return $this->hasMany(Siswa::class, 'wali_id'); + return $this->belongsTo(User::class); } } \ No newline at end of file diff --git a/resources/views/admin/akun/create.blade.php b/resources/views/admin/akun/create.blade.php new file mode 100644 index 0000000..8971404 --- /dev/null +++ b/resources/views/admin/akun/create.blade.php @@ -0,0 +1,54 @@ +@extends('layouts.app') + +@section('content') +
+

➕ Tambah Akun

+ +
+ @csrf + +
+ + +
+ +
+ + +
+ + + +
+ Batal + +
+
+
+ + +@endsection diff --git a/resources/views/admin/akun/edit.blade.php b/resources/views/admin/akun/edit.blade.php new file mode 100644 index 0000000..3c9cb6d --- /dev/null +++ b/resources/views/admin/akun/edit.blade.php @@ -0,0 +1,48 @@ +@extends('layouts.app') + +@section('content') +
+

✏️ Edit Akun

+ +
+ @csrf + @method('PUT') + + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ Batal + +
+
+
+@endsection diff --git a/resources/views/admin/akun/index.blade.php b/resources/views/admin/akun/index.blade.php new file mode 100644 index 0000000..7f70ca8 --- /dev/null +++ b/resources/views/admin/akun/index.blade.php @@ -0,0 +1,102 @@ +@extends('layouts.app') + +@section('content') +
+
+

🔐 Daftar Akun

+ + Tambah Akun +
+ + @if(session('success')) +
{{ session('success') }}
+ @endif + @if(session('error')) +
{{ session('error') }}
+ @endif + + + + + + + + + + + + + + @forelse ($users as $i => $user) + + + + + + + {{-- Kolom password (disembunyikan tapi bisa dilihat) --}} + + + {{-- Tombol Aksi --}} + + + @empty + + + + @endforelse + +
#NamaEmailRolePasswordAksi
{{ $i + 1 }}{{ $user->name }}{{ $user->email }} + @if($user->role == 'guru') + Guru + @elseif($user->role == 'wali_murid') + Wali Murid + @else + Admin + @endif + +
+ + +
+
+ Edit + +
+ @csrf + +
+ +
+ @csrf + @method('DELETE') + +
+
Belum ada akun terdaftar.
+
+ +{{-- Script show/hide password --}} + +@endsection diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index f37355d..6ae888a 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -37,9 +37,12 @@

Menu Akun

diff --git a/routes/web.php b/routes/web.php index eabcb19..6b98f76 100644 --- a/routes/web.php +++ b/routes/web.php @@ -8,33 +8,37 @@ use App\Http\Controllers\Admin\SiswaController; use App\Http\Controllers\Admin\PengumumanController; use App\Http\Controllers\Admin\PerkembanganController; +use App\Http\Controllers\Admin\AkunController; // Login routes Route::get('/login', [AuthController::class, 'showLogin'])->name('login'); Route::post('/login', [AuthController::class, 'login']); Route::post('/logout', [AuthController::class, 'logout'])->name('logout'); -// Splash screen (halaman awal) +// Splash Route::get('/', function () { return view('splash'); }); -// Hanya bisa diakses setelah login Route::middleware('auth')->group(function () { - Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard'); - Route::resource('pengumuman', \App\Http\Controllers\Admin\PengumumanController::class); -Route::prefix('admin')->group(function () { + Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard'); + + Route::resource('pengumuman', PengumumanController::class); + + Route::prefix('admin')->group(function () { + Route::resource('guru', GuruController::class); Route::resource('wali-murid', WaliMuridController::class); Route::resource('siswa', SiswaController::class); -Route::middleware(['auth'])->group(function () { - Route::prefix('admin')->group(function () { Route::get('/perkembangan', [PerkembanganController::class, 'index'])->name('admin.perkembangan.index'); Route::get('/perkembangan/{id}', [PerkembanganController::class, 'show'])->name('admin.perkembangan.show'); Route::get('/perkembangan/{id}/print', [PerkembanganController::class, 'print'])->name('admin.perkembangan.print'); + + // Akun + Route::resource('akun', AkunController::class); + Route::post('akun/{akun}/reset-password', [AkunController::class, 'resetPassword'])->name('akun.resetPassword'); }); -}); -}); + }); \ No newline at end of file