login guru (still undone)
This commit is contained in:
parent
a71d652e8d
commit
55ba55e100
|
|
@ -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'));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
}
|
||||
}
|
||||
|
|
@ -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 --}}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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');
|
||||
});
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue