Commit User Profile dan CRUD Kriteria

This commit is contained in:
Ananda Zakia S 2023-12-27 14:06:43 +07:00
parent 2ba29a0dae
commit 7dabc26b0f
13 changed files with 404 additions and 60 deletions

View File

@ -4,6 +4,7 @@
use App\Models\Criteria;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use PhpParser\Node\NullableType;
use RealRashid\SweetAlert\Facades\Alert;
class CriteriaController extends Controller
@ -22,7 +23,7 @@ public function index()
*/
public function create()
{
//
}
/**
@ -30,7 +31,7 @@ public function create()
*/
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
$validator = Validator::make($request->only('nama', 'prioritas'), [
'nama' => 'required',
'prioritas' => 'required',
]);
@ -44,7 +45,7 @@ public function store(Request $request)
'prioritas'=>$request->prioritas,
]);
return redirect()->route('kriteria.index')->with('success', 'Tambah Data Berhasil!');
return redirect()->route('kriteria.index')->with('success', 'Data Kriteria Berhasil Ditambah!');
}
/**
@ -60,7 +61,8 @@ public function show(string $id)
*/
public function edit(string $id)
{
//
$kriteria = Criteria::findOrFail($id);
return view('kriteria.edit', compact('kriteria'));
}
/**
@ -68,7 +70,20 @@ public function edit(string $id)
*/
public function update(Request $request, string $id)
{
//
// $kriteria = Criteria::findorfail($id);
// $kriteria->update($request->all());
// return redirect('kriteria')->with('success', 'Data Kriteria Berhasil Diperbarui!');
$validatedData = $request->validate([
'nama' => 'required',
'prioritas' => 'required',
]);
$kriteria = Criteria::findOrFail($id);
$kriteria->update($validatedData);
return redirect()->route('kriteria.index')->with('success', 'Data Kriteria Berhasil Diperbarui!');
}
/**
@ -76,6 +91,9 @@ public function update(Request $request, string $id)
*/
public function destroy(string $id)
{
//
$kriteria = Criteria::findorfail($id);
$kriteria->delete();
return back()->with('info', 'Data Kriteria Berhasil Dihapus!');
}
}

View File

@ -0,0 +1,46 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Str;
use Illuminate\Http\Request;
use Illuminate\Foundation\Auth\User;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;
class UserController extends Controller
{
public function showProfile()
{
return view('user-profile');
}
public function update_profile(Request $request)
{
$validator = Validator::make($request->all(), [
'name' => ['required', 'min:3', 'max:225'],
'username' => ['required', 'min:3', 'max:10'],
'email' => 'required|email',
], [
'required' => ':attribute harus diisi.',
'email' => ':attribute harus berupa email yang valid.',
'min' => 'panjang :attribute minimal :min karakter.',
]);
if ($validator->fails()) {
return response()->json([
'error' => true,
'message' => Str::ucfirst($validator->errors()->first()),
'data' => null
]);
}
$user = User::findOrFail(Auth::user()->id);
$user->update([
'name' => $request->name,
'username' => $request->username,
'email' => $request->email,
]);
return redirect('user-profile')->with('success', 'Profile Berhasil Diperbarui!');
}
}

View File

@ -36,6 +36,7 @@ class Kernel extends HttpKernel
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\App\Http\Middleware\PreventBackHistory::class,
],
@ -65,6 +66,7 @@ class Kernel extends HttpKernel
'signed' => \App\Http\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'PreventBackHistory' =>\App\Http\Middleware\PreventBackHistory::class,
];
protected $routeMiddleware = [

View File

@ -0,0 +1,24 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
class PreventBackHistory
{
/**
* Handle an incoming request.
*
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
*/
public function handle(Request $request, Closure $next): Response
{
$response = $next($request);
return $response->header('Cache-Control', 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0')
->header('Pragma', 'no-cache')
->header('Expires', '0');
}
}

View File

@ -7,6 +7,7 @@
class Criteria extends Model
{
protected $guarded = ['id'];
protected $fillable = ['nama' , 'prioritas' .'bobot'];
public function SubCriteria() {

View File

@ -14,7 +14,7 @@ public function up(): void
Schema::create('criterias', function (Blueprint $table) {
$table->id();
$table->string('nama');
$table->integer('prioritas');
$table->string('prioritas');
$table->string('bobot');
$table->timestamps();
});

View File

@ -1,21 +1,30 @@
@extends('layout.main')
@section('body')
@php
$menu = 'Dashboard';
$pageTitle = 'Home';
@endphp
@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-8">
<h1 class="font-20 weight-500 mb-10 text-capitalize">
Welcome Back!
<div class="weight-600 font-20 text-blue">{{ auth()->user()->name }}</div>
</h1>
<div class="pd-ltr-20 xs-pd-20-10">
<div class="min-height-200px">
<div class="card-box pd-20 height-50-p mb-30">
<div class="row align-items-center">
<div class="col-md-8">
<h1 class="font-20 weight-500 mb-10 text-capitalize">
Welcome Back!
<div class="weight-600 font-20 text-blue">{{ auth()->user()->name }}</div>
</h1>
</div>
</div>
</div>
</div>
<div class="footer-wrap pd-20 mb-20 card-box">
<strong>Sistem Pendukung Keputusan Pemilihan Ekstrakurikuler Metode SMARTER</strong>
</div>
</div>
</div>
@endsection

View File

@ -5,14 +5,32 @@
$pageTitle = 'Data Kriteria';
@endphp
@include('layout.page')
@include('layout.navbar')
@include('layout.sidebar')
@include('layout.navbar')
@include('layout.sidebar')
{{-- Main Content --}}
<div class="main-container">
<div class="pd-ltr-20 xs-pd-20-10">
<div class="min-height-10px">
<div class="min-height-200px">
<div class="page-header">
<div class="row">
<div class="col-md-6 col-sm-12">
<div class="title">
<h4>{{ $menu }}</h4>
</div>
<nav aria-label="breadcrumb" role="navigation">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{{ route('dashboard.index') }}">Dashboard</a></li>
@if(isset($pageTitle))
<li class="breadcrumb-item active" aria-current="page">{{ $pageTitle }}</li>
@else
<li class="breadcrumb-item active" aria-current="page"></li>
@endif
</ol>
</nav>
</div>
</div>
</div>
<div class="card-box mb-30">
<div class="pd-20">
<h4 class="text-blue h4">Data Kriteria</h4>
@ -42,13 +60,10 @@
<td>{{ $criteria->prioritas }}</td>
<td>{{ $criteria->bobot }}</td>
<td>
<button type="button" class="badge btn-success" title="View">
<i class="icon dw dw-eye"></i>
</button>
<button type="button" class="badge btn-primary" title="Edit">
<button type="button" class="badge btn-primary" data-toggle="modal" data-target="#edit-criteria" title="Edit">
<i class="icon dw dw-edit2"></i>
</button>
<button type="button" class="badge btn-danger" title="Delete">
<button type="button" class="badge btn-danger" data-toggle="modal" data-target="#delete-criteria" title="Delete">
<i class="icon dw dw-delete-3"></i>
</button>
</td>
@ -60,6 +75,9 @@
</div>
</div>
</div>
<div class="footer-wrap pd-20 mb-20 card-box">
<strong>Sistem Pendukung Keputusan Pemilihan Ekstrakurikuler Metode SMARTER</strong>
</div>
</div>
</div>
@ -84,7 +102,7 @@
<div class="form-group row">
<label class="col-sm-2 col-form-label">Nama</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="name" name="name" required="">
<input type="text" class="form-control" id="nama" name="nama" required="">
<div class="invalid-feedback">
Tolong isi Nama Kriteria!
</div>
@ -109,11 +127,93 @@
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Batal</button>
<button type="submit" class="btn btn-primary" data-target="#add-criteria">Simpan</button>
<button type="submit" class="btn btn-primary">Simpan</button>
</div>
</form>
</div>
</div>
</div>
</div>
{{-- Modal Edit --}}
<div class="modal fade" id="edit-criteria" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel"
style="display: none;" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
@if(session('error'))
<div class="alert alert-danger">{{ session('error') }}</div>
@endif
<div class="modal-header">
<h4 class="modal-title" id="myLargeModalLabel">
Edit Kriteria
</h4>
<button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
</div>
<div class="modal-body">
<form action="{{ route('kriteria.update', $criteria->id) }}" class="needs-validation" novalidate="" method="POST">
@csrf
@method('PUT')
<div class="card-body">
<div class="form-group row">
<label class="col-sm-2 col-form-label">Nama</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="nama" name="nama" required="" value="{{ $criteria->nama }}">
<div class="invalid-feedback">
Tolong isi Nama Kriteria!
</div>
</div>
</div>
@if($errors->has('nama'))
<div class="alert alert-danger">{{ $errors->first('nama') }}</div>
@endif
<div class="form-group row">
<label class="col-sm-2 col-form-label">Prioritas</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="prioritas" name="prioritas" required="" value="{{ $criteria->prioritas }}">
<div class="invalid-feedback">
Tolong isi Urutan Prioritas!
</div>
</div>
</div>
@if($errors->has('prioritas'))
<div class="alert alert-danger">{{ $errors->first('prioritas') }}</div>
@endif
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Batal</button>
<button type="submit" class="btn btn-primary">Simpan</button>
</div>
</form>
</div>
</div>
</div>
</div>
<!-- Modal Delete -->
<div class="modal fade" id="delete-criteria" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel"
style="display: none;" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title" id="myLargeModalLabel">
Konfirmasi Hapus Data Kriteria
</h4>
<button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
</div>
<div class="modal-body">
<p>Apakah Anda yakin ingin menghapus data kriteria ini?</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Batal</button>
<form id="delete-form" action="{{ route('kriteria.destroy', $criteria->id) }}" method="POST">
@csrf
@method('DELETE')
<button type="submit" class="btn btn-danger">Hapus</button>
</form>
</div>
</div>
</div>
</div>
@endsection

View File

@ -4,7 +4,7 @@
<head>
<!-- Basic Page Info -->
<meta charset="utf-8" />
<title>DeskApp</title>
<title>SIPEX</title>
<!-- Site favicon -->
<link rel="apple-touch-icon" sizes="180x180" href="{{ asset('vendors/images/apple-touch-icon.png') }}" />

View File

@ -48,7 +48,7 @@
<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>
<a href="({{ route('user-profile') }})" class="dropdown-item"><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();">

View File

@ -1,30 +0,0 @@
@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>{{ $menu }}</h4>
</div>
<nav aria-label="breadcrumb" role="navigation">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{{ route('dashboard.index') }}">Dashboard</a></li>
@if(isset($pageTitle))
<li class="breadcrumb-item active" aria-current="page">{{ $pageTitle }}</li>
@else
<li class="breadcrumb-item active" aria-current="page"></li>
@endif
</ol>
</nav>
</div>
</div>
</div>
</div>
{{-- <div class="footer-wrap pd-20 mb-20 card-box">
Sistem Pendukung Keputusan Pemilihan Ekstrakurikuler Metode SMARTER
</div> --}}
</div>
</div>

View File

@ -0,0 +1,162 @@
@extends('layout.main')
@section('body')
@php
$menu = 'Profile';
$pageTitle = 'User Profile';
@endphp
@include('layout.navbar')
@include('layout.sidebar')
{{-- Main Content --}}
<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>{{ $menu }}</h4>
</div>
<nav aria-label="breadcrumb" role="navigation">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{{ route('dashboard.index') }}">Dashboard</a></li>
@if (isset($pageTitle))
<li class="breadcrumb-item active" aria-current="page">{{ $pageTitle }}</li>
@else
<li class="breadcrumb-item active" aria-current="page"></li>
@endif
</ol>
</nav>
</div>
</div>
</div>
<div class="row">
<div class="col-xl-4 col-lg-4 col-md-4 col-sm-12 mb-30">
<div class="pd-20 card-box height-50-p">
<div class="profile-photo">
<a href="modal" data-toggle="modal" data-target="#modal" class="edit-avatar">
<i class="fa fa-pencil"></i>
</a>
<img src="vendors/images/photo1.jpg" alt="" class="avatar-photo" />
<div class="modal fade" id="modal" tabindex="-1" role="dialog"
aria-labelledby="modalLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-body pd-5">
<div class="img-container">
<img id="image" src="vendors/images/photo2.jpg" alt="Picture" />
</div>
</div>
<div class="modal-footer">
<input type="submit" value="Update" class="btn btn-primary" />
<button type="button" class="btn btn-default" data-dismiss="modal">
Close
</button>
</div>
</div>
</div>
</div>
</div>
<h5 class="text-center h5 mb-0">{{ Auth::user()->name }}</h5>
<p class="text-center text-muted font-14">
{{ Auth::user()->role }}
</p>
</div>
</div>
<div class="col-xl-8 col-lg-8 col-md-8 col-sm-12 mb-30">
<div class="card-box height-100-p overflow-hidden">
<div class="profile-tab height-100-p">
<div class="tab height-100-p">
<ul class="nav nav-tabs customtab" role="tablist">
<li class="nav-item">
<a class="nav-link active" data-toggle="tab" href="#profile"
role="tab">Profile</a>
</li>
<li class="nav-item">
<a class="nav-link" data-toggle="tab" href="#password"
role="tab">Password</a>
</li>
</ul>
<div class="tab-content">
<!-- Profile -->
<div class="tab-pane fade show active" id="profile" role="tabpanel">
<div class="profile-setting">
<form method="POST" action="{{ route('user-profile') }}" class="needs-validation" novalidate="">
@csrf
<h4 class=" text-center text-blue h5 mt-3 mb-0">Edit Your Personal Data</h4>
<ul class="profile-edit-list row">
<li class="col-md-4">
<div class="form-group">
<label for="name">Name</label>
<input id="name" type="text" class="form-control" name="name" value="{{ Auth::user()->name }}">
<div class="invalid-feedback">Please fill in your name </div>
</div>
</li>
<li class="col-md-4">
<div class="form-group">
<label for="name">Username</label>
<input id="name" type="text" class="form-control" name="username" value="{{ Auth::user()->username }}">
<div class="invalid-feedback">Please fill in your username </div>
</div>
</li>
<li class="col-md-4">
<div class="form-group">
<label for="name">Email</label>
<input id="name" type="text" class="form-control" name="email" value="{{ Auth::user()->email }}">
<div class="invalid-feedback">Please fill in your email </div>
</div>
</li>
</ul>
<div class="col-sm-12">
<div class="input-group mb-3 mx-auto">
<button class="btn btn-primary btn-lg btn-block" type="submit">Save Changes</button>
</div>
</div>
</form>
</div>
</div>
<!-- Password -->
<div class="tab-pane fade" id="password" role="tabpanel">
<div class="profile-setting">
<form method="POST" action="{{ route('user-profile') }}" class="needs-validation" novalidate="">
@csrf
<h4 class=" text-center text-blue h5 mt-3 mb-0">Edit Your Personal Password</h4>
<ul class="profile-edit-list row">
<li class="col-md-6">
<div class="form-group">
<label for="password">Current Password</label>
<input id="password" type="text" class="form-control" name="password">
<div class="invalid-feedback">Please fill in your current password </div>
</div>
</li>
<li class="col-md-6">
<div class="form-group">
<label for="new_password">New Password</label>
<input id="new_password" type="text" class="form-control" name="new_password">
<div class="invalid-feedback">Please fill in your new password </div>
</div>
</li>
</ul>
<div class="col-sm-12">
<div class="input-group mb-3 mx-auto">
<button class="btn btn-primary btn-lg btn-block" type="submit">Save Changes</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="footer-wrap pd-20 mb-20 card-box">
<strong>Sistem Pendukung Keputusan Pemilihan Ekstrakurikuler Metode SMARTER</strong>
</div>
</div>
</div>
@endsection

View File

@ -3,6 +3,7 @@
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\AuthController;
use App\Http\Controllers\UserController;
use App\Http\Controllers\SiswaController;
use App\Http\Controllers\CriteriaController;
use App\Http\Controllers\WakilKepalaController;
@ -76,11 +77,22 @@
// Route::get('/siswa/dashboard', [SiswaController::class, 'dashboard'])->name('siswa.dashboard');
// });
Route::get('/dashboard/index', function () {
Route::middleware(['auth','web','PreventBackHistory'])->group(function () {
Route::get('/dashboard', function () {
return view('dashboard.index');
})->name('dashboard.index');
Route::get('/user-profile', function () {
if (!Auth::check()) {
return redirect('/login');
}
return view('user.user-profile');
})->name('user-profile');
Route::post('/user-profile', [UserController::class, 'update_profile']);
Route::resource('kriteria', CriteriaController::class);
Route::get('/logout', [AuthController::class, 'logout'])->name('logout');
Route::post('/logout', [AuthController::class, 'logout'])->name('logout');
});