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\Models\Mengajar;
use App\Models\Guru;
use App\Models\Kelas;
use App\Models\Siswa;
use Illuminate\Support\Facades\Auth;
class DashboardController extends Controller
@ -12,6 +15,8 @@ public function index()
{
$guru = Auth::guard('guru')->user();
// Cek table mengajars ada data atau enggak
try {
// Hitung total kelas yang diajar
$totalKelas = Mengajar::where('nip', $guru->nip)
->distinct('id_kelas')
@ -23,13 +28,18 @@ public function index()
->count('id_mapel');
// Hitung total siswa yang diajar (lewat kelas)
$totalSiswa = Mengajar::where('nip', $guru->nip)
->with('kelas.siswa')
->get()
->pluck('kelas.siswa')
->flatten()
->unique('nisn')
->count();
$kelasIds = Mengajar::where('nip', $guru->nip)
->pluck('id_kelas')
->unique();
$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'));
}

View File

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

View File

@ -20,9 +20,15 @@ class Kelas extends Model
'tingkat',
];
// Relasi ke Siswa
public function siswa()
{
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')
@section('title', 'Login Guru')
@ -11,20 +12,37 @@
Kembali ke Landing Page
</a>
{{-- Alert Error --}}
@if($errors->any())
<div class="alert alert-danger">
{{ $errors->first() }}
</div>
@endif
<form method="POST" action="{{ route('guru.login.submit') }}">
@csrf
<div class="mb-3">
<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 class="mb-3 position-relative">
<label class="form-label">Password</label>
<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>
</div>
@error('password')
<div class="invalid-feedback d-block">{{ $message }}</div>
@enderror
</div>
{{-- Remember Me --}}

View File

@ -3,27 +3,71 @@
@section('title', 'Dashboard Guru')
@section('content')
<div class="container mt-5">
<h1 class="mb-4 fw-bold text-primary">Dashboard Guru</h1>
<div class="row">
<style>
.page-title {
font-size: 30px;
font-weight: 800;
margin-bottom: 20px;
}
.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="card text-center shadow-sm">
<div class="card-body">
<h5>Total Guru</h5>
<p class="fs-3 fw-bold text-success">12</p>
</div>
<div class="stats-card">
<div class="stats-number">{{ $totalKelas }}</div>
<div class="stats-label">Total Kelas Diampu</div>
</div>
</div>
<div class="col-md-4 mb-3">
<div class="card text-center shadow-sm">
<div class="card-body">
<h5>Total Siswa</h5>
<p class="fs-3 fw-bold text-primary">230</p>
<div class="stats-card">
<div class="stats-number">{{ $totalMapel }}</div>
<div class="stats-label">Total Mata Pelajaran</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>
@endsection

View File

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