From 6cb4a1bd64aac3e70a834d255c4c37d91a9f807e Mon Sep 17 00:00:00 2001 From: RetasyaSalsabila Date: Mon, 23 Feb 2026 11:16:23 +0700 Subject: [PATCH] login siswa update --- .../Controllers/Admin/SiswaController.php | 8 +- .../Controllers/Siswa/LoginController.php | 49 ++++ app/Models/Siswa.php | 29 ++- resources/views/auth/landing-page.blade.php | 1 + resources/views/auth/login-siswa.blade.php | 105 +++++---- resources/views/siswa/dashboard.blade.php | 75 ++++++ resources/views/siswa/layouts/app.blade.php | 219 ++++++++++++++++++ resources/views/siswa/siswa/index.blade.php | 0 routes/web.php | 32 +-- 9 files changed, 453 insertions(+), 65 deletions(-) create mode 100644 app/Http/Controllers/Siswa/LoginController.php create mode 100644 resources/views/siswa/dashboard.blade.php create mode 100644 resources/views/siswa/layouts/app.blade.php create mode 100644 resources/views/siswa/siswa/index.blade.php diff --git a/app/Http/Controllers/Admin/SiswaController.php b/app/Http/Controllers/Admin/SiswaController.php index 431c7ef..cdfff82 100644 --- a/app/Http/Controllers/Admin/SiswaController.php +++ b/app/Http/Controllers/Admin/SiswaController.php @@ -71,9 +71,9 @@ public function store(Request $request) ->with('success', 'Data siswa berhasil ditambahkan!'); } - public function update(Request $request, $nisn) + public function update(Request $request, $id) { - $siswa = Siswa::findOrFail($nisn); + $siswa = Siswa::findOrFail($id); $validated = $request->validate([ 'nama' => 'required|string|max:100', @@ -105,9 +105,9 @@ public function update(Request $request, $nisn) ->with('success', 'Data siswa berhasil diupdate!'); } - public function destroy($nisn) + public function destroy($id) { - $siswa = Siswa::findOrFail($nisn); + $siswa = Siswa::findOrFail($id); $siswa->delete(); return redirect()->route('admin.siswa.index') diff --git a/app/Http/Controllers/Siswa/LoginController.php b/app/Http/Controllers/Siswa/LoginController.php new file mode 100644 index 0000000..12f3340 --- /dev/null +++ b/app/Http/Controllers/Siswa/LoginController.php @@ -0,0 +1,49 @@ +check()) { + return redirect()->route('siswa.dashboard'); + } + return view('auth.login-siswa'); + } + + public function login(Request $request) + { + $request->validate([ + 'nisn' => 'required|string', + 'password' => 'required|string', + ], [ + 'nisn.required' => 'NISN wajib diisi.', + 'password.required' => 'Password wajib diisi.', + ]); + + $credentials = $request->only('nisn', 'password'); + + if (Auth::guard('siswa')->attempt($credentials, $request->boolean('remember'))) { + $request->session()->regenerate(); + return redirect()->route('siswa.dashboard'); + } + + return back()->withErrors([ + 'nisn' => 'NISN atau password salah.', + ])->withInput($request->only('nisn')); + } + + public function logout(Request $request) + { + Auth::guard('siswa')->logout(); + $request->session()->invalidate(); + $request->session()->regenerateToken(); + return redirect()->route('siswa.login'); + } +} \ No newline at end of file diff --git a/app/Models/Siswa.php b/app/Models/Siswa.php index d413490..39d03d6 100644 --- a/app/Models/Siswa.php +++ b/app/Models/Siswa.php @@ -3,18 +3,15 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; -use Illuminate\Database\Eloquent\Model; +use Illuminate\Foundation\Auth\User as Authenticatable; -class Siswa extends Model +class Siswa extends Authenticatable { use HasFactory; protected $table = 'siswas'; - protected $primaryKey = 'id_siswa'; - public $incrementing = true; - protected $keyType = 'int'; protected $fillable = [ @@ -28,11 +25,31 @@ class Siswa extends Model protected $hidden = [ 'password', + 'remember_token', ]; - // Relasi ke Kelas public function kelas() { return $this->belongsTo(Kelas::class, 'id_kelas', 'id_kelas'); } + + public function pengumpulanTugas() + { + return $this->hasMany(PengumpulanTugas::class, 'id_siswa', 'id_siswa'); + } + + public function badges() + { + return $this->hasMany(SiswaBadge::class, 'id_siswa', 'id_siswa'); + } + + public function leaderboards() + { + return $this->hasMany(Leaderboard::class, 'id_siswa', 'id_siswa'); + } + + public function pesertaChallenges() + { + return $this->hasMany(PesertaChallenge::class, 'id_siswa', 'id_siswa'); + } } \ No newline at end of file diff --git a/resources/views/auth/landing-page.blade.php b/resources/views/auth/landing-page.blade.php index 1f7b688..932b1d8 100644 --- a/resources/views/auth/landing-page.blade.php +++ b/resources/views/auth/landing-page.blade.php @@ -8,5 +8,6 @@

Ini halaman landing sederhana. Silakan pilih login sesuai role kamu.

Login Admin Login Guru + Login Siswa @endsection diff --git a/resources/views/auth/login-siswa.blade.php b/resources/views/auth/login-siswa.blade.php index 0668ddb..71d6860 100644 --- a/resources/views/auth/login-siswa.blade.php +++ b/resources/views/auth/login-siswa.blade.php @@ -3,49 +3,76 @@ @section('title', 'Login Siswa') @section('content') -
-

Login Siswa

+ - {{-- Tombol Back ke Landing Page --}} - - ← Kembali ke Landing Page - - -
- @csrf -
- - -
-
- -
- - +
+ + + + + ← Kembali ke Landing Page +
+ -{{-- Script show/hide password --}} -@endsection +@endsection \ No newline at end of file diff --git a/resources/views/siswa/dashboard.blade.php b/resources/views/siswa/dashboard.blade.php new file mode 100644 index 0000000..674cce6 --- /dev/null +++ b/resources/views/siswa/dashboard.blade.php @@ -0,0 +1,75 @@ +@extends('siswa.layouts.app') + +@section('title', 'Dashboard Siswa') + +@section('content') + +
+

Dashboard

+ + +
+
+
+
+
+ +
+
+
Tugas Aktif
+
0
+
+
+
+
+ +
+
+
+
+ +
+
+
Challenge Selesai
+
0
+
+
+
+
+ +
+
+
+
+ +
+
+
Total EXP
+
0
+
+
+
+
+
+ + +
+
Informasi Akun
+ + + + + + + + + + + + + +
Nama: {{ Auth::guard('siswa')->user()->nama }}
NISN: {{ Auth::guard('siswa')->user()->nisn }}
Kelas: {{ Auth::guard('siswa')->user()->kelas->nama_kelas ?? '-' }}
+
+
+ +@endsection \ No newline at end of file diff --git a/resources/views/siswa/layouts/app.blade.php b/resources/views/siswa/layouts/app.blade.php new file mode 100644 index 0000000..e270b79 --- /dev/null +++ b/resources/views/siswa/layouts/app.blade.php @@ -0,0 +1,219 @@ + + + + + + @yield('title', 'Siswa Panel') + + + + + + + @stack('styles') + + + +
+ + + + + +
+ + +
+
+ 👋 Hai, {{ Auth::guard('siswa')->user()->nama ?? 'Siswa' }} +
+ +
+ Notification + Profile +
+
+ + +
+ @yield('content') +
+ +
+
+ + +@stack('scripts') + + \ No newline at end of file diff --git a/resources/views/siswa/siswa/index.blade.php b/resources/views/siswa/siswa/index.blade.php new file mode 100644 index 0000000..e69de29 diff --git a/routes/web.php b/routes/web.php index ec420ba..49864c0 100644 --- a/routes/web.php +++ b/routes/web.php @@ -25,6 +25,8 @@ use App\Http\Controllers\Guru\MapelController as GuruMapelController; use App\Http\Controllers\Guru\LeaderboardController as GuruLeaderboardController; +//SISWA CONTROLLERS +use App\Http\Controllers\Siswa\LoginController as SiswaLoginController; // ==================== // LANDING PAGE @@ -48,9 +50,8 @@ ->name('guru.login'); // LOGIN SISWA -Route::get('/siswa/login', function () { - return view('auth.login-siswa'); -})->name('siswa.login'); +Route::get('/siswa/login', [SiswaLoginController::class, 'showLoginForm']) + ->name('siswa.login'); // ======================================================= @@ -66,15 +67,8 @@ ->name('guru.login.submit'); // SISWA LOGIN PROCESS -Route::post('/siswa/login', function (Request $request) { - $credentials = $request->only('nisn', 'password'); - - if (Auth::guard('siswa')->attempt($credentials)) { - return redirect()->route('siswa.dashboard'); - } - - return back()->withErrors(['nisn' => 'NISN atau password salah']); -})->name('siswa.login.submit'); +Route::post('/siswa/login', [SiswaLoginController::class, 'login']) + ->name('siswa.login.submit'); // ======================================================= @@ -151,8 +145,14 @@ // ======================================================= // SISWA AREA // ======================================================= -Route::middleware(['auth:siswa'])->group(function () { - Route::get('/siswa/dashboard', function () { + +Route::middleware(['auth:siswa'])->prefix('siswa')->name('siswa.')->group(function () { + + Route::get('/dashboard', function () { return view('siswa.dashboard'); - })->name('siswa.dashboard'); -}); + })->name('dashboard'); + + // LOGOUT SISWA + Route::post('/logout', [SiswaLoginController::class, 'logout'])->name('logout'); + +}); \ No newline at end of file