login guru (still undone)

This commit is contained in:
RetasyaSalsabila 2026-02-14 10:06:11 +07:00
parent a71d652e8d
commit 55ba55e100
9 changed files with 148 additions and 89 deletions

View File

@ -4,6 +4,9 @@
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Models\Mengajar; use App\Models\Mengajar;
use App\Models\Guru;
use App\Models\Kelas;
use App\Models\Siswa;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
class DashboardController extends Controller class DashboardController extends Controller
@ -12,25 +15,32 @@ public function index()
{ {
$guru = Auth::guard('guru')->user(); $guru = Auth::guard('guru')->user();
// Hitung total kelas yang diajar // Cek table mengajars ada data atau enggak
$totalKelas = Mengajar::where('nip', $guru->nip) try {
->distinct('id_kelas') // Hitung total kelas yang diajar
->count('id_kelas'); $totalKelas = Mengajar::where('nip', $guru->nip)
->distinct('id_kelas')
// Hitung total mapel yang diajar ->count('id_kelas');
$totalMapel = Mengajar::where('nip', $guru->nip)
->distinct('id_mapel') // Hitung total mapel yang diajar
->count('id_mapel'); $totalMapel = Mengajar::where('nip', $guru->nip)
->distinct('id_mapel')
// Hitung total siswa yang diajar (lewat kelas) ->count('id_mapel');
$totalSiswa = Mengajar::where('nip', $guru->nip)
->with('kelas.siswa') // Hitung total siswa yang diajar (lewat kelas)
->get() $kelasIds = Mengajar::where('nip', $guru->nip)
->pluck('kelas.siswa') ->pluck('id_kelas')
->flatten() ->unique();
->unique('nisn')
->count(); $totalSiswa = Siswa::whereIn('id_kelas', $kelasIds)->count();
} catch (\Exception $e) {
// Kalau error (table kosong atau relasi belum ada), set default 0
$totalKelas = 0;
$totalMapel = 0;
$totalSiswa = 0;
}
return view('guru.dashboard', compact('totalKelas', 'totalMapel', 'totalSiswa')); return view('guru.dashboard', compact('totalKelas', 'totalMapel', 'totalSiswa'));
} }
} }

View File

@ -26,4 +26,4 @@ public function index(Request $request)
return view('guru.guru.index', compact('gurus')); return view('guru.guru.index', compact('gurus'));
} }
} }

View File

@ -1,7 +1,4 @@
<?php <?php
// ============================================================
// FILE 1: app/Http/Controllers/Guru/LoginController.php
// ============================================================
namespace App\Http\Controllers\Guru; namespace App\Http\Controllers\Guru;
@ -11,12 +8,14 @@
class LoginController extends Controller class LoginController extends Controller
{ {
// Tampilkan form login
public function showLoginForm() public function showLoginForm()
{ {
return view('auth.login-guru'); return view('auth.login-guru');
} }
public function loginGuru(Request $request) // Proses login
public function login(Request $request)
{ {
$request->validate([ $request->validate([
'nip' => 'required', 'nip' => 'required',
@ -36,6 +35,7 @@ public function loginGuru(Request $request)
])->withInput($request->except('password')); ])->withInput($request->except('password'));
} }
// Logout
public function logout(Request $request) public function logout(Request $request)
{ {
Auth::guard('guru')->logout(); Auth::guard('guru')->logout();

View File

@ -35,4 +35,4 @@ public function index(Request $request)
return view('guru.siswa.index', compact('siswas', 'kelass')); return view('guru.siswa.index', compact('siswas', 'kelass'));
} }
} }

View File

@ -29,4 +29,4 @@ public function mengajars()
{ {
return $this->hasMany(Mengajar::class, 'nip', 'nip'); return $this->hasMany(Mengajar::class, 'nip', 'nip');
} }
} }

View File

@ -20,9 +20,15 @@ class Kelas extends Model
'tingkat', 'tingkat',
]; ];
// Relasi ke Siswa
public function siswa() public function siswa()
{ {
return $this->hasMany(Siswa::class, 'id_kelas', 'id_kelas'); return $this->hasMany(Siswa::class, 'id_kelas', 'id_kelas');
} }
// Relasi ke Mengajar
public function mengajars()
{
return $this->hasMany(Mengajar::class, 'id_kelas', 'id_kelas');
}
} }

View File

@ -1,3 +1,4 @@
@extends('layouts.auth') @extends('layouts.auth')
@section('title', 'Login Guru') @section('title', 'Login Guru')
@ -11,20 +12,37 @@
Kembali ke Landing Page Kembali ke Landing Page
</a> </a>
{{-- Alert Error --}}
@if($errors->any())
<div class="alert alert-danger">
{{ $errors->first() }}
</div>
@endif
<form method="POST" action="{{ route('guru.login.submit') }}"> <form method="POST" action="{{ route('guru.login.submit') }}">
@csrf @csrf
<div class="mb-3"> <div class="mb-3">
<label class="form-label">NIP</label> <label class="form-label">NIP</label>
<input type="text" name="nip" class="form-control" required> <input type="text" name="nip" class="form-control @error('nip') is-invalid @enderror"
value="{{ old('nip') }}" required>
@error('nip')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div> </div>
<div class="mb-3 position-relative"> <div class="mb-3 position-relative">
<label class="form-label">Password</label> <label class="form-label">Password</label>
<div class="input-group"> <div class="input-group">
<input type="password" name="password" id="password" class="form-control" required> <input type="password" name="password" id="password"
class="form-control @error('password') is-invalid @enderror" required>
<button type="button" class="btn btn-outline-secondary" id="togglePassword"> <button type="button" class="btn btn-outline-secondary" id="togglePassword">
👁️ 👁️
</button> </button>
</div> </div>
@error('password')
<div class="invalid-feedback d-block">{{ $message }}</div>
@enderror
</div> </div>
{{-- Remember Me --}} {{-- Remember Me --}}
@ -48,4 +66,4 @@
this.textContent = type === 'password' ? '👁️' : '🙈'; this.textContent = type === 'password' ? '👁️' : '🙈';
}); });
</script> </script>
@endsection @endsection

View File

@ -3,27 +3,71 @@
@section('title', 'Dashboard Guru') @section('title', 'Dashboard Guru')
@section('content') @section('content')
<div class="container mt-5">
<h1 class="mb-4 fw-bold text-primary">Dashboard Guru</h1>
<div class="row"> <style>
<div class="col-md-4 mb-3"> .page-title {
<div class="card text-center shadow-sm"> font-size: 30px;
<div class="card-body"> font-weight: 800;
<h5>Total Guru</h5> margin-bottom: 20px;
<p class="fs-3 fw-bold text-success">12</p> }
</div>
</div> .stats-card {
background: white;
border-radius: 20px;
padding: 25px;
border: 2px solid #e0f2fe;
text-align: center;
}
.stats-number {
font-size: 48px;
font-weight: 700;
color: #0284c7;
}
.stats-label {
font-size: 16px;
color: #64748b;
margin-top: 10px;
}
.welcome-card {
background: white;
border-radius: 20px;
padding: 30px;
border: 2px solid #e0f2fe;
margin-bottom: 30px;
}
</style>
<h3 class="page-title">DASHBOARD GURU</h3>
<div class="welcome-card">
<h4>Selamat Datang, {{ Auth::guard('guru')->user()->nama }}! 👨‍🏫</h4>
<p class="text-muted mb-0">NIP: {{ Auth::guard('guru')->user()->nip }}</p>
</div>
<div class="row">
<div class="col-md-4 mb-3">
<div class="stats-card">
<div class="stats-number">{{ $totalKelas }}</div>
<div class="stats-label">Total Kelas Diampu</div>
</div> </div>
</div>
<div class="col-md-4 mb-3"> <div class="col-md-4 mb-3">
<div class="card text-center shadow-sm"> <div class="stats-card">
<div class="card-body"> <div class="stats-number">{{ $totalMapel }}</div>
<h5>Total Siswa</h5> <div class="stats-label">Total Mata Pelajaran</div>
<p class="fs-3 fw-bold text-primary">230</p> </div>
</div> </div>
</div>
<div class="col-md-4 mb-3">
<div class="stats-card">
<div class="stats-number">{{ $totalSiswa }}</div>
<div class="stats-label">Total Siswa Diajar</div>
</div> </div>
</div> </div>
</div> </div>
@endsection
@endsection

View File

@ -4,21 +4,21 @@
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
// ADMIN CONTROLLERS
use App\Http\Controllers\Admin\LoginController; use App\Http\Controllers\Admin\LoginController;
use App\Http\Controllers\Admin\AdminController; use App\Http\Controllers\Admin\AdminController;
use App\Http\Controllers\Admin\GuruController; use App\Http\Controllers\Admin\GuruController as AdminGuruController;
use App\Http\Controllers\Admin\KelasController; use App\Http\Controllers\Admin\KelasController as AdminKelasController;
use App\Http\Controllers\Admin\SiswaController; use App\Http\Controllers\Admin\SiswaController as AdminSiswaController;
use App\Http\Controllers\Admin\MapelController; use App\Http\Controllers\Admin\MapelController as AdminMapelController;
use App\Http\Controllers\Guru\GuruLoginController; // GURU CONTROLLERS
use App\Http\Controllers\Guru\DashboardController; use App\Http\Controllers\Guru\LoginController as GuruLoginController;
use App\Http\Controllers\Guru\GuruGuruController; use App\Http\Controllers\Guru\DashboardController as GuruDashboardController;
use App\Http\Controllers\Guru\GuruSiswaController; use App\Http\Controllers\Guru\GuruController as GuruGuruController;
use App\Http\Controllers\Guru\GuruKelasController; use App\Http\Controllers\Guru\KelasController as GuruKelasController;
use App\Http\Controllers\Guru\GuruMapelController; use App\Http\Controllers\Guru\SiswaController as GuruSiswaController;
use App\Http\Controllers\Guru\GuruLeaderboardController; use App\Http\Controllers\Guru\ProfilController as GuruProfilController;
use App\Http\Controllers\Guru\GuruProfilController;
// ==================== // ====================
// LANDING PAGE // LANDING PAGE
@ -32,20 +32,14 @@
// LOGIN PAGES (VIEW ONLY) // LOGIN PAGES (VIEW ONLY)
// ======================================================= // =======================================================
// Selector login (opsional)
Route::get('/login', function () {
return view('auth.login-selector');
})->name('login.selector');
// LOGIN ADMIN // LOGIN ADMIN
Route::get('/admin/login', function () { Route::get('/admin/login', function () {
return view('auth.login-admin'); return view('auth.login-admin');
})->name('admin.login'); })->name('admin.login');
// LOGIN GURU // LOGIN GURU
Route::get('/guru/login', function () { Route::get('/guru/login', [GuruLoginController::class, 'showLoginForm'])
return view('auth.login-guru'); ->name('guru.login');
})->name('guru.login');
// LOGIN SISWA // LOGIN SISWA
Route::get('/siswa/login', function () { Route::get('/siswa/login', function () {
@ -62,16 +56,8 @@
->name('admin.login.submit'); ->name('admin.login.submit');
// GURU LOGIN PROCESS // GURU LOGIN PROCESS
Route::post('/guru/login', function (Request $request) { Route::post('/guru/login', [GuruLoginController::class, 'login'])
$credentials = $request->only('nip', 'password'); ->name('guru.login.submit');
if (Auth::guard('guru')->attempt($credentials)) {
return redirect()->route('guru.dashboard');
}
return back()->withErrors(['nip' => 'NIP atau password salah']);
})->name('guru.login.submit');
// SISWA LOGIN PROCESS // SISWA LOGIN PROCESS
Route::post('/siswa/login', function (Request $request) { Route::post('/siswa/login', function (Request $request) {
@ -101,14 +87,10 @@
})->name('profil'); })->name('profil');
// CRUD AREA // CRUD AREA
Route::resource('guru', GuruController::class); Route::resource('guru', AdminGuruController::class);
Route::resource('siswa', SiswaController::class); Route::resource('siswa', AdminSiswaController::class);
Route::resource('kelas', KelasController::class); Route::resource('kelas', AdminKelasController::class);
Route::resource('mapel', MapelController::class); Route::resource('mapel', AdminMapelController::class);
Route::resource('challenge', ChallengeController::class);
Route::get('leaderboard', [LeaderboardController::class, 'index'])
->name('leaderboard.index');
// LOGOUT ADMIN // LOGOUT ADMIN
Route::post('/logout', [LoginController::class, 'logout']) Route::post('/logout', [LoginController::class, 'logout'])
@ -117,12 +99,11 @@
// ======================================================= // =======================================================
// GURU AREA // GURU AREA (HARUS LOGIN GURU)
// ======================================================= // =======================================================
Route::middleware(['auth:guru'])->prefix('guru')->name('guru.')->group(function () { Route::middleware(['auth:guru'])->prefix('guru')->name('guru.')->group(function () {
Route::get('/dashboard', [DashboardController::class, 'index']) Route::get('/dashboard', [GuruDashboardController::class, 'index'])->name('dashboard');
->name('dashboard');
// Daftar Guru (Read Only) // Daftar Guru (Read Only)
Route::get('/daftar-guru', [GuruGuruController::class, 'index'])->name('guru.index'); Route::get('/daftar-guru', [GuruGuruController::class, 'index'])->name('guru.index');
@ -141,6 +122,7 @@
Route::post('/logout', [GuruLoginController::class, 'logout'])->name('logout'); Route::post('/logout', [GuruLoginController::class, 'logout'])->name('logout');
}); });
// ======================================================= // =======================================================
// SISWA AREA // SISWA AREA
// ======================================================= // =======================================================
@ -149,4 +131,3 @@
return view('siswa.dashboard'); return view('siswa.dashboard');
})->name('siswa.dashboard'); })->name('siswa.dashboard');
}); });