Update Auth

This commit is contained in:
Ananda Zakia S 2023-12-25 23:41:51 +07:00
parent d6253aaacf
commit 631c86d8e6
17 changed files with 1234 additions and 807 deletions

View File

@ -2,8 +2,15 @@
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Password;
use Illuminate\Support\Facades\Cookie;
use Illuminate\Support\Facades\Session;
class AuthController extends Controller
{
@ -13,19 +20,158 @@ public function showLoginForm()
}
public function login(Request $request)
{
$credentials = $request->only(['nomorinduk', 'password']);
{
$credentials = $request->only(['username', 'password']);
if (Auth::attempt($credentials)) {
$user = Auth::user();
if (Auth::attempt($credentials)) {
$user = Auth::user();
if ($user->role === 'wakil_kepala') {
return redirect()->intended('/wakil_kepala/dashboard');
} elseif ($user->role === 'siswa') {
return redirect()->intended('/siswa/dashboard');
if ($user->role === 'wakil_kepala') {
return redirect()->intended('/wakil_kepala/dashboard');
} elseif ($user->role === 'siswa') {
return redirect()->intended('/siswa/dashboard');
}
}
$validator = Validator::make($request->all(), [
'username' => 'required',
'password' => 'required',
], [
'required' => ':attribute harus diisi.',
]);
$userCount = User::where('username', $request->username)->count();
if ($validator->fails() || $userCount == 0) {
// Tambahkan pesan error khusus jika username tidak terdaftar
$validator->errors()->add('username', 'Akun tidak terdaftar.');
return redirect('/login')
->withErrors($validator)
->withInput();
}
$remember = true; // Sesuaikan dengan kebutuhan Anda
if (Auth::attempt(['username' => $request->username, 'password' => $request->password], $remember)) {
$user = Auth::user();
$request->session()->put('user_id', $user->id);
// Membuat dan menyimpan token "remember me"
$token = $user->createToken("auth-token")->plainTextToken;
$user->update(['remember_token' => $token]);
return redirect('/dashboard')->with('success', 'Login berhasil!');
} else {
return redirect('/login')
->withErrors(['username' => 'Username atau password salah.'])
->withInput();
}
}
return redirect('/login')->with('error', 'Login gagal. Periksa kembali NIS/NIP dan password Anda.');
public function showRegisterForm()
{
return view('auth.register');
}
public function register(Request $request)
{
$validator = Validator::make($request->all(), [
'name' => ['required', 'min:3', 'max:225'],
'username' => ['required', 'min:3', 'max:10'],
'email' => 'required|email',
'password' => 'required|min:5|max:255',
], [
'required' => ':attribute harus diisi.',
'email' => ':attribute harus berupa email yang valid.',
'min' => 'panjang :attribute minimal :min karakter.',
]);
if ($validator->fails()) {
return redirect('/register')
->withErrors($validator)
->withInput();
}
if (User::where('username', $request->username)->exists() || User::where('email', $request->email)->exists()) {
return redirect('/register')
->withErrors(['username' => 'Username atau email sudah digunakan.'])
->withInput();
}
$user = User::create([
'name' => $request->name,
'username' => $request->username,
'email' => $request->email,
'password' => bcrypt($request->password),
'role' => 'siswa',
]);
return redirect('/login')->with('success', 'Registrasi berhasil! Silakan login.');
}
public function showResetForm(Request $request, $token = null)
{
return view('auth.reset-password')->with(
['email' => $request->email, 'token' => $token]
);
}
public function showLinkRequestForm(Request $request)
{
return view('auth.forgot-password');
}
// Mengirim email tautan reset password
public function sendResetLinkEmail(Request $request)
{
$request->validate(['email' => 'required|email']);
$status = Password::sendResetLink(
$request->only('email')
);
return $status === Password::RESET_LINK_SENT
? back()->with(['status' => __($status)])
: back()->withErrors(['email' => __($status)]);
}
// Menangani proses reset password
public function resetPassword(Request $request)
{
$request->validate([
'token' => 'required',
'email' => 'required|email',
'password' => 'required|confirmed|min:6',
]);
$status = Password::reset(
$request->only('email', 'password', 'password_confirmation', 'token'),
function ($user, $password) {
$user->forceFill([
'password' => bcrypt($password),
'remember_token' => Str::random(60),
])->save();
// Hapus token "remember me" setelah reset password
$user->tokens()->delete();
}
);
return $status == Password::PASSWORD_RESET
? redirect('/login')->with(['status' => __($status)])
: back()->withErrors(['email' => [__($status)]]);
}
public function logout(Request $request)
{
$guard = 'web'; // Sesuaikan dengan guard yang digunakan
// Hapus seluruh cookie sesi
Session::flush();
// Logout pengguna
Auth::guard($guard)->logout();
return redirect('/login')->with('success', 'Terimakasih sudah logout! Silakan login kembali.');
}
}

View File

@ -19,7 +19,8 @@ class User extends Authenticatable
*/
protected $fillable = [
'name',
'nomorinduk', // Ubah 'email' menjadi 'NIS'
'username',
'email',
'password',
'role',
];

View File

@ -14,7 +14,9 @@ public function up(): void
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('nomorinduk')->unique();
$table->string('username');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->string('role');
$table->rememberToken();

View File

@ -381,8 +381,8 @@ .highcharts-root{
.bootstrap-select .dropdown-toggle{
height: 45px;
padding-right: 30px;
font-size: 14px;
font-weight: 400;
font-size: 12px;
font-weight: 200;
}
.bootstrap-select.form-control-sm .dropdown-toggle{
height: 38px;
@ -1131,12 +1131,12 @@ .user-info-dropdown .dropdown-toggle{
font-size: 16px;
}
.user-info-dropdown .dropdown-toggle .user-icon{
width: 52px;
height: 52px;
font-size: 24px;
width: 20px;
height: 20px;
font-size: 10px;
background: #ebeff3;
color: #1b00ff;
line-height: 52px;
line-height: 20px;
text-align: center;
display: inline-block;
vertical-align: middle;
@ -1468,7 +1468,7 @@ .sidebar-menu .dropdown-toggle .micon{
left: 10px;
width: 42px;
height: 42px;
font-size: 22px;
font-size: 12px;
font-weight: 400;
display: flex;
align-items: center;

View File

@ -0,0 +1,47 @@
@extends('layout.main')
<body class="forgot-password-page">
<div class="login-wrap d-flex align-items-center flex-wrap justify-content-center">
<div class="container">
<div class="row align-items-center">
<div class="col-md-6 col-lg-7">
<img src="{{ asset('vendors/images/forgot-password.png') }}" alt="">
</div>
@if(session('error'))
<div class="alert alert-danger">{{ session('error') }}</div>
@endif
<div class="col-md-6 col-lg-5">
<div class="login-box bg-white box-shadow border-radius-10">
<div class="login-title">
<h2 class="text-center text-primary">Forgot Password</h2>
</div>
<form method="POST" action="{{ route('password.email') }}">
@csrf
<div class="input-group custom mb-2">
<input id="email" type="text" class="form-control" name="email" placeholder="email" value="{{ old('email') }}">
<div class="input-group-append custom">
<span class="input-group-text"><i class="icon-copy dw dw-user1"></i></span>
</div>
</div>
@if($errors->has('email'))
<div class="alert alert-danger">{{ $errors->first('email') }}</div>
@endif
<div class="row">
<div class="col-sm-12">
<div class="input-group mb-2">
<button class="btn btn-primary btn-lg btn-block" type="submit">Send Link</button>
</div>
<div class="input-group mb-2">
<a
class="btn btn-outline-primary btn-lg btn-block"
href="/login">Back to Login</a>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</body>

View File

@ -1,70 +1,72 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Login</title>
<link rel="stylesheet" href="{{ asset('css/app.css') }}">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-BmbxuPwQa2lc/FVzBcNJ7UAyJxM6wuqIj61tLrc4wSX0szH/Ev+nYRRuWlolflfl" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css">
<link rel="stylesheet" href="https://unpkg.com/bootstrap@5.3.2/dist/css/bootstrap.min.css">
</head>
<body>
<section class="bg-light p-3 p-md-4 p-xl-5">
<div class="container">
<div class="row justify-content-center">
<div class="col-12 col-xxl-11">
<div class="card border-light-subtle shadow-sm">
<div class="row g-0">
<div class="col-12 col-md-6">
<img class="img-fluid rounded-start w-100 h-100 object-fit-cover" loading="lazy" src="{{ asset('img/login.jpeg') }}" alt="Welcome back you've been missed!">
</div>
<div class="col-12 col-md-6 d-flex align-items-center justify-content-center">
<div class="col-12 col-lg-11 col-xl-10">
<div class="card-body p-3 p-md-4 p-xl-5">
@if(session('error'))
<div class="alert alert-danger">{{ session('error') }}</div>
@endif
<div class="row">
<div class="col-12">
<div class="mb-5">
<div class="text-center mb-4">
<a href="#!">
<img src="{{ asset('img/logo.png') }}" alt="BootstrapBrain Logo" width="220" height="90">
</a>
</div>
<h4 class="text-center">Selamat Datang !</h4>
</div>
</div>
@extends('layout.main')
<body class="login-page">
<div class="login-wrap d-flex align-items-center flex-wrap justify-content-center">
<div class="container">
<div class="row align-items-center">
<div class="col-md-6 col-lg-7">
<img src="{{ asset('vendors/images/login-page-img.png') }}" alt="">
</div>
<form method="POST" action="{{ route('login') }}">
@csrf
<div class="row gy-3 overflow-hidden">
<div class="col-12">
<div class="form-floating mb-3">
<input id="nomorinduk" type="text" class="form-control" name="nomorinduk" placeholder="NIP/NIS">
<label for="nomorinduk" class="form-label">NIP/NIS</label>
</div>
@if(session('error'))
<div class="alert alert-danger">{{ session('error') }}</div>
@endif
<div class="col-md-6 col-lg-5">
<div class="login-box bg-white box-shadow border-radius-10">
<div class="login-title">
<h2 class="text-center text-primary">Login</h2>
</div>
<form method="POST" action="{{ route('login') }}">
@csrf
<div class="input-group custom mb-2">
<input id="username" type="text" class="form-control" name="username" placeholder="username" required>
<div class="input-group-append custom">
<span class="input-group-text"><i class="icon-copy dw dw-user1"></i></span>
</div>
</div>
@if($errors->has('username'))
<div class="alert alert-danger">{{ $errors->first('username') }}</div>
@endif
<div class="input-group custom mb-2">
<input type="password" class="form-control" name="password" id="password" value="" placeholder="password" required>
<div class="input-group-append custom">
<span class="input-group-text"><i class="dw dw-padlock1"></i></span>
</div>
</div>
@if($errors->has('password'))
<div class="alert alert-danger">{{ $errors->first('password') }}</div>
@endif
<div class="row pb-30">
<div class="col-6">
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" id="customCheck1"/>
<label class="custom-control-label" for="customCheck1">Remember</label>
</div>
</div>
<div class="col-6">
<div class="forgot-password">
<a href="{{ route('password.request') }}">Forgot Password?</a>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12">
<div class="input-group mb-0">
<button class="btn btn-primary btn-lg btn-block" type="submit">Login</button>
</div>
<small class="d-block text-center my-3">Don't have an account?
</small>
<div class="input-group mb-0">
<a
class="btn btn-outline-primary btn-lg btn-block"
href="/register">Register To Create Account</a>
</div>
</div>
</div>
</form>
</div>
<div class="col-12">
<div class="form-floating mb-3">
<input type="password" class="form-control" name="password" id="password" value="" placeholder="Password" required>
<label for="password" class="form-label">Password</label>
</div>
</div>
<div class="d-grid">
<button class="btn btn-dark btn-lg" type="submit">Log in now</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
</body>
</body>
</html>

View File

@ -0,0 +1,73 @@
@extends('layout.main')
<body class="register-page">
<div class="login-wrap d-flex align-items-center flex-wrap justify-content-center">
<div class="container">
<div class="row align-items-center">
<div class="col-md-6 col-lg-7">
<img src="{{ asset('vendors/images/register-page-img.png') }}" alt="">
</div>
@if(session('error'))
<div class="alert alert-danger">{{ session('error') }}</div>
@endif
<div class="col-md-6 col-lg-5">
<div class="login-box bg-white box-shadow border-radius-10">
<div class="login-title">
<h2 class="text-center text-primary">Register</h2>
</div>
<form method="POST" action="{{ route('register') }}">
@csrf
<div class="input-group custom mb-2">
<input id="name" type="text" class="form-control" name="name" placeholder="name" value="{{ old('name') }}">
<div class="input-group-append custom">
<span class="input-group-text"><i class="icon-copy dw dw-user1"></i></span>
</div>
</div>
@if($errors->has('name'))
<div class="alert alert-danger">{{ $errors->first('name') }}</div>
@endif
<div class="input-group custom mb-2">
<input id="username" type="text" class="form-control" name="username" placeholder="username" value="{{ old('username') }}">
<div class="input-group-append custom">
<span class="input-group-text"><i class="icon-copy dw dw-user1"></i></span>
</div>
</div>
@if($errors->has('username'))
<div class="alert alert-danger">{{ $errors->first('username') }}</div>
@endif
<div class="input-group custom mb-2">
<input id="email" type="email" class="form-control" name="email" placeholder="email" value="{{ old('email') }}">
<div class="input-group-append custom">
<span class="input-group-text"><i class="icon-copy dw dw-email"></i></span>
</div>
</div>
@if($errors->has('email'))
<div class="alert alert-danger">{{ $errors->first('email') }}</div>
@endif
<div class="input-group custom mb-2">
<input type="password" class="form-control" name="password" id="password" value="" placeholder="password" required>
<div class="input-group-append custom">
<span class="input-group-text"><i class="dw dw-padlock1"></i></span>
</div>
</div>
@if($errors->has('password'))
<div class="alert alert-danger">{{ $errors->first('password') }}</div>
@endif
<div class="row">
<div class="col-sm-12">
<div class="input-group mb-0">
<button class="btn btn-primary btn-lg btn-block" type="submit">Register</button>
</div>
<small class="d-block text-center my-3">Already have an account?</small>
<div class="input-group mb-0">
<a class="btn btn-outline-primary btn-lg btn-block" href="/login">Login</a>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</body>

View File

@ -0,0 +1,61 @@
@extends('layout.main')
<body class="reset-password-page">
<div class="login-wrap d-flex align-items-center flex-wrap justify-content-center">
<div class="container">
<div class="row align-items-center">
<div class="col-md-6 col-lg-7">
<img src="{{ asset('vendors/images/forgot-password.png') }}" alt="">
{{-- <img src="vendors/images/login-page-img.png" alt="" /> --}}
</div>
@if(session('error'))
<div class="alert alert-danger">{{ session('error') }}</div>
@endif
<div class="col-md-6 col-lg-5">
<div class="login-box bg-white box-shadow border-radius-10">
<div class="login-title">
<h2 class="text-center text-primary">Reset Password</h2>
</div>
<form method="POST" action="{{ route('password.update') }}">
@csrf
@if($errors->has('email'))
<div class="alert alert-danger">{{ $errors->first('email') }}</div>
@endif
<div class="input-group custom mb-2">
<input id="email" type="text" class="form-control" name="email" placeholder="email" value="{{ $email ?? old('email') }}">
<div class="input-group-append custom">
<span class="input-group-text"><i class="icon-copy dw dw-user1"></i></span>
</div>
</div>
@if($errors->has('password'))
<div class="alert alert-danger">{{ $errors->first('password') }}</div>
@endif
<div class="input-group custom mb-2">
<input type="password" class="form-control" name="password" id="password" value="" placeholder="password" required>
<div class="input-group-append custom">
<span class="input-group-text"><i class="dw dw-padlock1"></i></span>
</div>
</div>
@if($errors->has('password_confirmation'))
<div class="alert alert-danger">{{ $errors->first('password_confirmation') }}</div>
@endif
<div class="input-group custom mb-2">
<input type="password_confirmation" class="form-control" name="password_confirmation" id="password_confirmation" value="" placeholder="confirm password" required>
<div class="input-group-append custom">
<span class="input-group-text"><i class="dw dw-padlock1"></i></span>
</div>
</div>
<div class="row">
<div class="col-sm-12">
<div class="input-group mb-2">
<button class="btn btn-primary btn-lg btn-block" type="submit">Reset</button>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</body>

View File

@ -0,0 +1 @@
ini halaman index

View File

@ -0,0 +1,91 @@
<!DOCTYPE html>
<html>
<head>
<!-- Basic Page Info -->
<meta charset="utf-8" />
<title>DeskApp</title>
<!-- Site favicon -->
<link rel="apple-touch-icon" sizes="180x180" href="{{ asset('vendors/images/apple-touch-icon.png') }}" />
<link rel="icon" type="image/png" sizes="32x32" href="{{ asset('vendors/images/favicon-32x32.png') }}" />
<link rel="icon" type="image/png" sizes="16x16" href="{{ asset('vendors/images/favicon-16x16.png') }}" />
<!-- Mobile Specific Metas -->
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
<!-- Google Font -->
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap"
rel="stylesheet" />
<!-- CSS -->
<link rel="stylesheet" type="text/css" href="{{ asset('vendors/styles/core.css') }}" />
<link rel="stylesheet" type="text/css" href="{{ asset('vendors/styles/icon-font.min.css') }}" />
<link rel="stylesheet" type="text/css"
href="{{ asset('src/plugins/datatables/css/dataTables.bootstrap4.min.css') }}" />
<link rel="stylesheet" type="text/css"
href="{{ asset('src/plugins/datatables/css/responsive.bootstrap4.min.css') }}" />
<link rel="stylesheet" type="text/css" href="{{ asset('vendors/styles/style.css') }}" />
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-GBZ3SGGX85"></script>
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2973766580778258"
crossorigin="anonymous"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag("js", new Date());
gtag("config", "G-GBZ3SGGX85");
</script>
<!-- Google Tag Manager -->
<script>
(function(w, d, s, l, i) {
w[l] = w[l] || [];
w[l].push({
"gtm.start": new Date().getTime(),
event: "gtm.js"
});
var f = d.getElementsByTagName(s)[0],
j = d.createElement(s),
dl = l != "dataLayer" ? "&l=" + l : "";
j.async = true;
j.src = "https://www.googletagmanager.com/gtm.js?id=" + i + dl;
f.parentNode.insertBefore(j, f);
})(window, document, "script", "dataLayer", "GTM-NXZMQSS");
</script>
<!-- End Google Tag Manager -->
</head>
<body>
<div id="app">
@yield('body')
</div>
</div>
<!-- js -->
<script src="{{ asset('vendors/scripts/core.js') }}"></script>
<script src="{{ asset('vendors/scripts/script.min.js') }}"></script>
<script src="{{ asset('vendors/scripts/process.js') }}"></script>
<script src="{{ asset('vendors/scripts/layout-settings.js') }}"></script>
<script src="{{ asset('src/plugins/apexcharts/apexcharts.min.js') }}"></script>
<script src="{{ asset('src/plugins/datatables/js/jquery.dataTables.min.js') }}"></script>
<script src="{{ asset('src/plugins/datatables/js/dataTables.bootstrap4.min.js') }}"></script>
<script src="{{ asset('src/plugins/datatables/js/dataTables.responsive.min.js') }}"></script>
<script src="{{ asset('src/plugins/datatables/js/responsive.bootstrap4.min.js') }}"></script>
<script src="{{ asset('vendors/scripts/dashboard.js') }}"></script>
<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-NXZMQSS" height="0" width="0"
style="display: none; visibility: hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->
{{-- @include('sweetalert::alert') --}}
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,65 @@
@extends('layout.main')
<div class="header">
<div class="header-left">
<div class="menu-icon bi bi-list"></div>
<div class="search-toggle-icon bi bi-search" data-toggle="header_search"></div>
<div class="header-search">
<form>
<div class="form-group mb-0">
<i class="dw dw-search2 search-icon"></i>
<input type="text" class="form-control search-input" placeholder="Search Here" />
<div class="dropdown">
<div class="dropdown-menu dropdown-menu-right">
<div class="form-group row">
<label class="col-sm-12 col-md-2 col-form-label">From</label>
<div class="col-sm-12 col-md-10">
<input class="form-control form-control-sm form-control-line" type="text" />
</div>
</div>
<div class="form-group row">
<label class="col-sm-12 col-md-2 col-form-label">To</label>
<div class="col-sm-12 col-md-10">
<input class="form-control form-control-sm form-control-line" type="text" />
</div>
</div>
<div class="form-group row">
<label class="col-sm-12 col-md-2 col-form-label">Subject</label>
<div class="col-sm-12 col-md-10">
<input class="form-control form-control-sm form-control-line" type="text" />
</div>
</div>
<div class="text-right">
<button class="btn btn-primary">Search</button>
</div>
</div>
</div>
</div>
</form>
</div>
</div>
<div class="header-right">
<div class="user-info-dropdown">
<div class="dropdown">
<a class="dropdown-toggle" href="#" role="button" data-toggle="dropdown">
<span class="user-icon">
{{ strtoupper(substr(Auth::user()->username, 0, 2)) }}
</span>
<span class="user-name"> Hi, {{ Auth::user()->username }}</span>
</a>
<div class="dropdown-menu dropdown-menu-right dropdown-menu-icon-list">
<a class="dropdown-item" href="profile.html"><i class="dw dw-user1"></i> Profile</a>
@auth
<a href="{{ route('logout') }}" class="dropdown-item has-icon text-danger"
onclick="event.preventDefault(); document.getElementById('logout-form').submit();">
<i class="dw dw-logout"></i> Logout
</a>
<form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;">
@csrf
</form>
@endauth
</div>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,40 @@
@extends('layout.main')
<div class="main-container">
<div class="pd-ltr-20 xs-pd-20-10">
<div class="min-height-200px">
<div class="page-header">
<div class="row">
<div class="col-md-6 col-sm-12">
<div class="title">
<h4>blank</h4>
</div>
<nav aria-label="breadcrumb" role="navigation">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="index.html">Home</a></li>
<li class="breadcrumb-item active" aria-current="page">blank</li>
</ol>
</nav>
</div>
<div class="col-md-6 col-sm-12 text-right">
<div class="dropdown">
<a class="btn btn-primary dropdown-toggle" href="#" role="button" data-toggle="dropdown">
January 2018
</a>
<div class="dropdown-menu dropdown-menu-right">
<a class="dropdown-item" href="#">Export List</a>
<a class="dropdown-item" href="#">Policies</a>
<a class="dropdown-item" href="#">View Assets</a>
</div>
</div>
</div>
</div>
</div>
<div class="pd-20 bg-white border-radius-4 box-shadow mb-30">
</div>
</div>
<div class="footer-wrap pd-20 mb-20 card-box">
DeskApp - Bootstrap 4 Admin Template By <a href="https://github.com/dropways" target="_blank">Ankit Hingarajiya</a>
</div>
</div>
</div>

View File

@ -0,0 +1,75 @@
@extends('layout.main')
<div class="left-side-bar">
<div class="brand-logo">
<a href="index.html">
<img src="{{ asset('vendors/images/deskapp-logo.svg') }}" alt="" class="dark-logo" />
<img src="{{ asset('vendors/images/deskapp-logo-white.svg') }}" alt="" class="light-logo" />
</a>
<div class="close-sidebar" data-toggle="left-sidebar-close">
<i class="ion-close-round"></i>
</div>
</div>
<div class="menu-block customscroll">
<div class="sidebar-menu">
<ul id="accordion-menu">
<li>
<div class="sidebar-small-cap">Home</div>
</li>
<li>
<a href="{{ route('siswa.dashboard') }}" class="dropdown-toggle no-arrow">
<span class="micon bi bi-house"></span><span class="mtext">Dashboard</span>
</a>
</li>
<li>
<div class="dropdown-divider"></div>
</li>
<li>
<div class="sidebar-small-cap">Master</div>
</li>
<li>
<a href="invoice.html" class="dropdown-toggle no-arrow">
<span class="micon bi bi-house"></span><span class="mtext">Data Kriteria</span>
</a>
</li>
<li>
<a href="invoice.html" class="dropdown-toggle no-arrow">
<span class="micon bi bi-house"></span><span class="mtext">Data Sub Kriteria</span>
</a>
</li>
<li>
<a href="invoice.html" class="dropdown-toggle no-arrow">
<span class="micon bi bi-house"></span><span class="mtext">Data Ekstrakurikuler</span>
</a>
</li>
<li>
<a href="invoice.html" class="dropdown-toggle no-arrow">
<span class="micon bi bi-house"></span><span class="mtext">Data User</span>
</a>
</li>
<li>
<div class="dropdown-divider"></div>
</li>
<li>
<div class="sidebar-small-cap">Perhitungan</div>
</li>
<li>
<a href="invoice.html" class="dropdown-toggle no-arrow">
<span class="micon bi bi-house"></span><span class="mtext">Hasil Hitung Kriteria</span>
</a>
</li>
<li>
<div class="dropdown-divider"></div>
</li>
<li>
<div class="sidebar-small-cap">Penilaian</div>
</li>
<li>
<a href="invoice.html" class="dropdown-toggle no-arrow">
<span class="micon bi bi-house"></span><span class="mtext">Input Penilaian</span>
</a>
</li>
</ul>
</div>
</div>
</div>

View File

@ -1,25 +1,21 @@
@extends('layouts.siswa')
@extends('layout.main')
@section('body')
@include('layout.navbar')
@include('layout.sidebar')
<div class="main-container">
<div class="pd-ltr-20">
<div class="card-box pd-20 height-50-p mb-30">
<div class="row align-items-center">
<div class="col-md-4">
<img src="{{ asset('vendors/images/banner-img.png') }}" alt="" />
</div>
<div class="col-md-8">
<h1 class="font-20 weight-500 mb-10 text-capitalize">
Selamat Datang
<div class="weight-600 font-30 text-blue">Hi, {{ auth()->user()->name }}!</div>
Welcome Back!
<div class="weight-600 font-30 text-blue">{{ auth()->user()->name }}!</div>
</h1>
<p class="font-18 max-width-600">
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Unde
hic non repellendus debitis iure, doloremque assumenda. Autem
modi, corrupti, nobis ea iure fugiat, veniam non quaerat
mollitia animi error corporis.
</p>
</div>
</div>
</div>
</div>
</div>
@endsection

View File

@ -4,6 +4,7 @@
use App\Http\Controllers\AuthController;
use App\Http\Controllers\WakilKepalaController;
use App\Http\Controllers\SiswaController;
use Illuminate\Support\Facades\Auth;
/*
|--------------------------------------------------------------------------
@ -29,10 +30,35 @@
})->name('ekstrakurikuler');
// Route::get('/login', function () {
// if (Auth::check()) {
// return redirect('/dashboard');
// }
// return view('auth.login');
// })->name('login');
Route::get('/login', [AuthController::class, 'showLoginForm'])->name('login');
Route::post('/login', [AuthController::class, 'login']);
// Route::get('/register', function () {
// if (Auth::check()) {
// return redirect('/dashboard');
// }
// return view('auth.register');
// })->name('register');
Route::get('/register', [AuthController::class, 'showRegisterForm'])->name('register');
Route::post('/register', [AuthController::class, 'register']);
Route::get('/forgot-password', function () {
if (Auth::check()) {
return redirect('/dashboard');
}
return view('auth.forgot-password');
})->name('password.request');
Route::post('/forgot-password', [AuthController::class, 'sendResetLinkEmail'])->name('password.email');
Route::get('/reset-password/{token}', [AuthController::class, 'showResetForm'])->name('password.reset');
Route::post('/reset-password', [AuthController::class, 'resetPassword'])->name('password.update');
Route::middleware(['auth', 'role:wakil_kepala'])->group(function () {
Route::get('/wakil_kepala/dashboard', [WakilKepalaController::class, 'dashboard'])->name('wakil_kepala.dashboard');
Route::get('/wakil_kepala/kriteria', [WakilKepalaController::class, 'kriteria'])->name('wakil_kepala.kriteria');
@ -42,3 +68,6 @@
Route::middleware(['auth', 'role:siswa'])->group(function () {
Route::get('/siswa/dashboard', [SiswaController::class, 'dashboard'])->name('siswa.dashboard');
});
Route::get('/logout', [AuthController::class, 'logout'])->name('logout');
Route::post('/logout', [AuthController::class, 'logout'])->name('logout');