update
parent
31a18aaa13
commit
d586507bc2
|
|
@ -10,9 +10,33 @@ use App\Models\Master\Kecamatan;
|
|||
use App\Models\Master\Sekolah;
|
||||
use App\Models\Penilaian;
|
||||
use App\Models\Kuesioner;
|
||||
use App\Models\User;
|
||||
|
||||
class AjaxController extends Controller
|
||||
{
|
||||
function sendCode(Request $request) {
|
||||
// $request->validate(['email' => 'required|email']);
|
||||
if($request->email){
|
||||
$user = User::where('email', $request->email)->first();
|
||||
if(@$user){
|
||||
$user->code_change_password = \Str::random(5);
|
||||
$user->save();
|
||||
return response()->json(['status' => true,'code' => true]);
|
||||
}else{
|
||||
return response()->json(['status' => false,'message' => 'Email Tidak Valid']);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
function checkEmail(Request $request){
|
||||
$request->validate(['email' => 'required|email']);
|
||||
|
||||
$exists = User::where('email', $request->email)->exists();
|
||||
|
||||
return response()->json(['exists' => $exists]);
|
||||
}
|
||||
public function uploadTemp(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
|
|
|
|||
|
|
@ -13,6 +13,30 @@ use App\Models\Master\Sekolah;
|
|||
|
||||
class CustomLoginController extends Controller
|
||||
{
|
||||
public function forgotpass()
|
||||
{
|
||||
if(Auth::check()){
|
||||
return redirect('dashboard');
|
||||
}
|
||||
return view('auth.passwords.reset');
|
||||
}
|
||||
|
||||
function forgotpass_post(Request $request) {
|
||||
|
||||
$user = User::where('email', $request->email)->first();
|
||||
if(@$user){
|
||||
|
||||
}else{
|
||||
return redirect()
|
||||
->back()
|
||||
->withInput()
|
||||
->with([
|
||||
'message' => trans('Email anda tidak ditemukan'),
|
||||
'type' => "error"
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
public function index()
|
||||
{
|
||||
if(Auth::check()){
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ class Profile
|
|||
public function handle(Request $request, Closure $next): Response
|
||||
{
|
||||
$user = User::with(['profile'])->where('id',auth()->user()->id)->first();
|
||||
if(!@$user->profile){
|
||||
if(!@$user->profile && ($user->ms_group_id == 2)){
|
||||
return redirect('profile-sekolah/lengkapi/'.encode_id($user->username));
|
||||
}
|
||||
return $next($request);
|
||||
|
|
|
|||
|
|
@ -20,12 +20,7 @@ class User extends Authenticatable
|
|||
*/
|
||||
// protected $table = 'user';
|
||||
// protected $primaryKey = 'user_id';
|
||||
protected $fillable = [
|
||||
'name',
|
||||
'username',
|
||||
'email',
|
||||
'password',
|
||||
];
|
||||
protected $guarded = [];
|
||||
|
||||
/**
|
||||
* The attributes that should be hidden for serialization.
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ return new class extends Migration
|
|||
$table->string('email')->unique();
|
||||
$table->timestamp('email_verified_at')->nullable();
|
||||
$table->string('password');
|
||||
$table->string('code_change_password')->nullable();
|
||||
$table->rememberToken();
|
||||
$table->timestamps();
|
||||
});
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@
|
|||
<img src="{{asset('assets/logo-dinas.ico')}}" width="50">
|
||||
</div>
|
||||
<div>
|
||||
<h5 class="fw-500">Sistem Informasi Adiwiyata</h5>
|
||||
<h5 class="fw-500">SIDIA Jakarta</h5>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
|
|
@ -57,14 +57,17 @@
|
|||
<input type="text" required name="email" class="form-control" placeholder="Masukan Email/NPSN anda">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="form-label">Password</label>
|
||||
<label class="form-label">Kata Sandi</label>
|
||||
<div class="input-group">
|
||||
<input type="password" required id="password" name="password" class="form-control" placeholder="Masukan Password">
|
||||
<input type="password" required id="password" name="password" class="form-control" placeholder="Masukan Kata Sandi">
|
||||
<div class="input-group-append">
|
||||
<button class="btn btn-default waves-effect waves-themed" type="button" id="togglePassword"><i class="fal fa-eye"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="form-label"><a href="{{ url('forgotpass') }}">Lupa Kata Sandi ?</a></label>
|
||||
</div>
|
||||
<div class="row no-gutters">
|
||||
<div class="col-lg-12 pr-lg-1 my-2">
|
||||
<button type="submit" class="btn btn-primary btn-block">Masuk</button>
|
||||
|
|
@ -78,7 +81,7 @@
|
|||
</div>
|
||||
</form>
|
||||
<p class="text-muted mt-auto text-center mb-0 pt-3" style="font-size:12px;">
|
||||
{{date('Y')}} © Dinas Lingkungan Hidup DKI Jakarta
|
||||
{{date('Y')}} © Dinas Lingkungan Hidup Provinsi DKI Jakarta
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,65 +1,190 @@
|
|||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
<div class="container">
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>
|
||||
Lupa Kata Sandi - SIDIA Jakarta
|
||||
</title>
|
||||
<meta name="description" content="Login">
|
||||
<meta name="csrf-token" content="{{ csrf_token() }}">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no, user-scalable=no, minimal-ui">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||
<meta name="msapplication-tap-highlight" content="no">
|
||||
<link rel="stylesheet" media="screen, print" href="{{asset('assets/css/vendors.bundle.css')}}">
|
||||
<link rel="stylesheet" media="screen, print" href="{{asset('assets/css/app.bundle.css')}}">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="{{asset('assets/logo-dinas.ico')}}">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="{{asset('assets/logo-dinas.ico')}}">
|
||||
<link rel="mask-icon" href="{{asset('assets/logo-dinas.ico')}}" color="#5bbad5">
|
||||
<link rel="stylesheet" href="{{asset('assets/css/toast.min.css')}}">
|
||||
<link rel="stylesheet" media="screen, print" href="{{asset('assets/css/fa-brands.css')}}">
|
||||
<style type="text/css">
|
||||
.bg-login{
|
||||
background-image: url("{{('assets/bg-login.png')}}");
|
||||
background-repeat: no-repeat;
|
||||
background-size: cover;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body class="bg-login">
|
||||
<div class=" d-flex align-items-center justify-content-center min-vh-100">
|
||||
<div class="container py-4 py-lg-5 px-4 px-sm-0">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-8">
|
||||
<div class="card">
|
||||
<div class="card-header">{{ __('Reset Password') }}</div>
|
||||
<div class="col-sm-12 col-md-12 col-lg-5 col-xl-5">
|
||||
@include('include.alert')
|
||||
<div class="card rounded-plus bg-faded" style="border:none;">
|
||||
<div class="row">
|
||||
<div class="col-md-12 p-4 d-flex mx-auto flex-column justify-content-center align-items-center gap-3">
|
||||
<!-- <h1 class="text-left mb-3">Login</h1>
|
||||
<br> -->
|
||||
<div class="">
|
||||
<div class="d-flex flex-column gap-3 align-items-center justify-content-center mb-5">
|
||||
<div>
|
||||
<img src="{{asset('assets/logo-dinas.ico')}}" width="50">
|
||||
</div>
|
||||
<div>
|
||||
<h5 class="fw-500">SIDIA Jakarta</h5>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<h6 class="mb-3">Lupa Password</h6>
|
||||
{{-- <form action="#"> --}}
|
||||
<div class="form-group divEmail">
|
||||
<label class="form-label">Email</label>
|
||||
<div class="input-group">
|
||||
<input type="text" required name="email" class="form-control" placeholder="Masukan Email Anda" id="email">
|
||||
<div class="input-group-append">
|
||||
<button class="btn btn-default waves-effect waves-themed" type="button" id="togglePassword"><i class="fal fa-envelope"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group divKode mb-2 d-none">
|
||||
<div class="alert alert-info">
|
||||
Silahkan cek email anda dan masukan kode
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group divKode d-none">
|
||||
<label class="form-label">Kode</label>
|
||||
<input type="text" required name="kode" class="form-control" placeholder="Masukan Kode Anda" id="kode">
|
||||
</div>
|
||||
<div class="form-group divPassword d-none">
|
||||
<label class="form-label">Kata Sandi</label>
|
||||
<div class="input-group">
|
||||
<input type="password" required id="password" name="password" class="form-control" placeholder="Masukan Kata Sandi">
|
||||
<div class="input-group-append">
|
||||
<button class="btn btn-default waves-effect waves-themed" type="button" id="togglePassword"><i class="fal fa-eye"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="emailFeedback" class="mt-2 text-sm"></div>
|
||||
</div>
|
||||
<div class="row no-gutters">
|
||||
<div class="col-lg-12 pr-lg-1 my-2">
|
||||
<button type="submit" disabled class="btn btn-primary btnProses btn-block">Proses <i class="fal fa-sign-in"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
{{-- </form> --}}
|
||||
<p class="text-muted mt-auto text-center mb-0 pt-3" style="font-size:12px;">
|
||||
{{date('Y')}} © Dinas Lingkungan Hidup Provinsi DKI Jakarta
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="{{asset('assets/js/vendors.bundle.js')}}"></script>
|
||||
<script src="{{asset('assets/js/app.bundle.js')}}"></script>
|
||||
<script src="{{asset('assets/js/toast.min.js')}}"></script>
|
||||
<script>
|
||||
let typingTimer;
|
||||
$('#email').on('keyup',function(){
|
||||
clearTimeout(typingTimer);
|
||||
const email = $(this).val().trim();
|
||||
if (email.length > 0) {
|
||||
typingTimer = setTimeout(function () {
|
||||
checkEmail(email);
|
||||
}, 800);
|
||||
} else {
|
||||
$('#emailFeedback').html('');
|
||||
}
|
||||
});
|
||||
function checkEmail(email) {
|
||||
let base_url = "{{ url('/') }}";
|
||||
$.ajax({
|
||||
url: base_url+'/checkEmail',
|
||||
method: 'POST',
|
||||
data: {
|
||||
email: email,
|
||||
_token: $('meta[name="csrf-token"]').attr('content')
|
||||
},
|
||||
success: function(response) {
|
||||
if (response.exists) {
|
||||
$('.btnProses').removeAttr('disabled');
|
||||
// $('#emailFeedback').html('<span class="text-green-600">Email terdaftar ✔️</span>');
|
||||
} else {
|
||||
toastr.error("Email Tidak Ditemukan", 'Error!', {positionClass: 'toast-bottom-right', containerId: 'toast-bottom-right'});
|
||||
}
|
||||
},
|
||||
error: function(response) {
|
||||
toastr.error('Email Tidak Valid', 'Error!', {positionClass: 'toast-bottom-right', containerId: 'toast-bottom-right'});
|
||||
}
|
||||
});
|
||||
}
|
||||
$(document).ready(function() {
|
||||
|
||||
<div class="card-body">
|
||||
<form method="POST" action="{{ route('password.update') }}">
|
||||
@csrf
|
||||
$('#togglePassword').on('click', function() {
|
||||
let passwordField = $('#password');
|
||||
let icon = $(this).find('i');
|
||||
|
||||
<input type="hidden" name="token" value="{{ $token }}">
|
||||
// Cek apakah input saat ini bertipe password
|
||||
if (passwordField.attr('type') === 'password') {
|
||||
passwordField.attr('type', 'text'); // Ubah ke teks
|
||||
icon.removeClass('fa-eye').addClass('fa-eye-slash'); // Ganti ikon
|
||||
} else {
|
||||
passwordField.attr('type', 'password'); // Ubah ke password
|
||||
icon.removeClass('fa-eye-slash').addClass('fa-eye'); // Kembalikan ikon
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="email" class="col-md-4 col-form-label text-md-end">{{ __('Email Address') }}</label>
|
||||
$('.btnProses').on('click',function(){
|
||||
let base_url = "{{ url('/') }}";
|
||||
let email = $('#email').val();
|
||||
$.ajax({
|
||||
url: base_url+'/sendCode',
|
||||
method: 'POST',
|
||||
data: {
|
||||
email: email,
|
||||
_token: $('meta[name="csrf-token"]').attr('content')
|
||||
},
|
||||
success: function(response) {
|
||||
if (response.status == true) {
|
||||
if(response.code == true){
|
||||
$('.divKode').removeClass('d-none');
|
||||
$('.divEmail').addClass('d-none');
|
||||
}
|
||||
|
||||
<div class="col-md-6">
|
||||
<input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ $email ?? old('email') }}" required autocomplete="email" autofocus>
|
||||
if(response.password == true){
|
||||
$('.divPassword').removeClass('d-none');
|
||||
$('.divKode').addClass('d-none');
|
||||
$('.divEmail').addClass('d-none');
|
||||
}
|
||||
|
||||
@error('email')
|
||||
<span class="invalid-feedback" role="alert">
|
||||
<strong>{{ $message }}</strong>
|
||||
</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
// toastr.success("Berhasil Request Ubah Kata Sandi", 'Error!', {positionClass: 'toast-bottom-right', containerId: 'toast-bottom-right'});
|
||||
} else {
|
||||
toastr.error(response.message, 'Error!', {positionClass: 'toast-bottom-right', containerId: 'toast-bottom-right'});
|
||||
}
|
||||
},
|
||||
error: function(response) {
|
||||
toastr.error('Email Tidak Valid', 'Error!', {positionClass: 'toast-bottom-right', containerId: 'toast-bottom-right'});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="password" class="col-md-4 col-form-label text-md-end">{{ __('Password') }}</label>
|
||||
|
||||
<div class="col-md-6">
|
||||
<input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="new-password">
|
||||
|
||||
@error('password')
|
||||
<span class="invalid-feedback" role="alert">
|
||||
<strong>{{ $message }}</strong>
|
||||
</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="password-confirm" class="col-md-4 col-form-label text-md-end">{{ __('Confirm Password') }}</label>
|
||||
|
||||
<div class="col-md-6">
|
||||
<input id="password-confirm" type="password" class="form-control" name="password_confirmation" required autocomplete="new-password">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-0">
|
||||
<div class="col-md-6 offset-md-4">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
{{ __('Reset Password') }}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@
|
|||
<img src="{{asset('assets/logo-dinas.ico')}}" width="50">
|
||||
</div>
|
||||
<div>
|
||||
<h5 class="fw-500">Sistem Informasi Adiwiyata</h5>
|
||||
<h5 class="fw-500">SIDIA Jakarta</h5>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
|
|
@ -255,7 +255,7 @@
|
|||
</div>
|
||||
</form>
|
||||
<p class="text-muted mt-auto text-center mb-0 pt-3">
|
||||
{{date('Y')}} © Dinas Lingkungan Hidup DKI Jakarta
|
||||
{{date('Y')}} © Dinas Lingkungan Hidup Provinsi DKI Jakarta
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -20,6 +20,10 @@ use App\Http\Controllers\FrontController;
|
|||
| be assigned to the "web" middleware group. Make something great!
|
||||
|
|
||||
*/
|
||||
|
||||
Route::get('forgotpass',[CustomLoginController::class,'forgotpass'])->name('forgotpass');
|
||||
Route::post('forgotpass',[CustomLoginController::class,'forgotpass_post'])->name('forgotpass_post');
|
||||
|
||||
Route::get('login',[CustomLoginController::class,'index'])->name('login');
|
||||
Route::post('login',[CustomLoginController::class,'post_login'])->name('post_login');
|
||||
|
||||
|
|
@ -31,6 +35,8 @@ Route::post('get/sekolah',[AjaxController::class,'getSekolah'])->name('getSekola
|
|||
Route::post('sekolahNpsn',[AjaxController::class,'sekolahNpsn'])->name('sekolahNpsn');
|
||||
Route::post('uploadTemp', [AjaxController::class, 'uploadTemp'])->name('uploadTemp');
|
||||
Route::post('uploadTempImage', [AjaxController::class, 'uploadTempImage'])->name('uploadTempImage');
|
||||
Route::post('checkEmail', [AjaxController::class, 'checkEmail'])->name('checkEmail');
|
||||
Route::post('sendCode', [AjaxController::class, 'sendCode'])->name('sendCode');
|
||||
Route::get('hash/{hash}', function ($hash) {
|
||||
return Hash::make($hash);
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in New Issue