Skip to content

Instantly share code, notes, and snippets.

@acxgray
Last active February 26, 2022 11:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save acxgray/ef0237560bc30592b6ed4c67c07b704a to your computer and use it in GitHub Desktop.
Save acxgray/ef0237560bc30592b6ed4c67c07b704a to your computer and use it in GitHub Desktop.
Full Calendar (Html + jQuery) Frontend
@extends('admin.layouts.admin')
{{-- Page Title --}}
@section('title', 'Administrator')
{{-- Main Content --}}
@section('content')
<style>
.fc-event .fc-content {
position: relative;
z-index: 2;
color: #fff !important;
background: #17a2b8 !important;
}
</style>
<div class="row mb-2 mb-xl-3">
<div class="col-auto d-none d-sm-block">
<h3 class="font-weight-bold">University Calendar</h3>
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="card shadow">
<div class="card-header h5 text-info font-weight-bold ">Set Calendar Event</div>
<div class="card-body">
<div class="row">
<div class="col-lg-12">
<div id="calendar"></div>
</div>
</div>
</div>
</div>
</div>
</div>
{{-- Modal --}}
<div class="modal fade" id="addEventModal" data-backdrop="static" data-keyboard="false" tabindex="-1" aria-labelledby="addEventModalLabel" aria-hidden="true">
<div class="modal-dialog modal-sm">
<div class="modal-content">
<div class="modal-header bg-info">
<h5 class="modal-title font-weight-bold text-uppercase text-white" id="addEventModalLabel">Add Event</h5>
<button type="button" class="close text-white" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<input type="hidden" name="event_start" id="in_event_start">
<input type="hidden" name="event_end" id="in_event_end">
<input type="hidden" name="event_end" id="in_allDay">
<div class="form-group">
<label for="" class="font-weight-bold text-uppercase">Event Title</label>
<input type="text" class="form-control" name="event_title" id="event_title">
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<button id="addEventBtn" type="button" class="btn btn-primary">Save</button>
</div>
</div>
</div>
</div>
@endsection
@section('jsscript')
<script type="text/javascript">
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$(document).ready(function() {
var SITEURL = "{{ url('/') }}";
var scevents = @json($events);
var calendar = $('#calendar').fullCalendar({
editable: true,
// themeSystem: "bootstrap4",
header: {
left: 'prev, next today',
center: 'title',
right: 'month, agendaWeek, listMonth',
today: 'Today',
month: 'Month',
week: 'Week',
day: 'Day',
listMonth: 'List'
},
events: scevents,
displayEventTime: false,
eventRender: function (event, element, view) {
if (event.allDay === 'true') {
event.allDay = true;
} else {
event.allDay = false;
}
},
selectable: true,
selectHelper: true,
select: function (event_start, event_end, allDay) {
$("#in_event_start").val(event_start);
$("#in_event_end").val(event_end);
$("#in_allDay").val(allDay);
$("#addEventModal").modal('toggle');
// var event_name = prompt('Event Name:');
},
eventDrop: function (event, delta) {
var event_start = $.fullCalendar.formatDate(event.start, "Y-MM-DD");
var event_end = $.fullCalendar.formatDate(event.end, "Y-MM-DD");
$.ajax({
url: SITEURL + '/admin/calendar/process',
data: {
title: event.title,
start: event_start,
end: event_end,
id: event.id,
type: 'edit'
},
type: "POST",
success: function (response) {
notyf.success("Event updated");
}
});
},
eventClick: function (event) {
var eventDelete = confirm("Are you sure to remove this Event?");
if (eventDelete) {
$.ajax({
type: "POST",
url: SITEURL + '/admin/calendar/process',
data: {
id: event.id,
type: 'delete'
},
success: function (response) {
calendar.fullCalendar('removeEvents', event.id);
notyf.success("Event removed");
}
});
}
}
});
$("#addEventBtn").on('click', function(e){
e.preventDefault();
var event_name = $("#event_title").val();
var i_event_start = $("#in_event_start").val();
var i_event_end = $("#in_event_end").val();
var i_allDay = $("#in_allDay").val();
if (event_name) {
var event_start = moment(i_event_start).format('YYYY-MM-DD');
var event_end = moment(i_event_end).format('YYYY-MM-DD');
$.ajax({
url: SITEURL + "/admin/calendar/process",
data: {
event_name: event_name,
event_start: event_start,
event_end: event_end,
type: 'create'
},
type: "POST",
success: function (data) {
notyf.success("Event created.");
calendar.fullCalendar('renderEvent', {
id: data.id,
title: event_name,
start: event_start,
end: event_end,
allDay: i_allDay
}, true);
calendar.fullCalendar('unselect');
$("#addEventModal").modal('hide');
$("#event_title").val("");
$("#in_event_start").val("");
$("#in_event_end").val("");
}
});
}
});
});
</script>
@endsection
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Calendar;
class CalendarController extends Controller
{
public function index(Request $request) {
$events = array();
$scevents = Calendar::all();
foreach($scevents as $scevents){
$events[] =[
'id' => $scevents->id,
'title' => $scevents->event_name,
'start' => $scevents->event_start,
'end' => $scevents->event_end,
];
}
return view('admin.calendar', ['events' => $events]);
}
public function calendarEvents(Request $request) {
switch ($request->type) {
case 'create':
$event = Calendar::create([
'event_name' => $request->event_name,
'event_start' => $request->event_start,
'event_end' => $request->event_end,
]);
return response()->json($event);
break;
case 'edit':
$event = Calendar::find($request->id)->update([
'event_name' => $request->title,
'event_start' => $request->start,
'event_end' => $request->end,
]);
return response()->json($event);
break;
case 'delete':
$event = Calendar::find($request->id)->delete();
return response()->json($event);
break;
default:
# ...
break;
}
}
}
<?php
require "../../config.php";
session_start();
class Settings {
public $id;
public $fname;
public $mname;
public $lname;
public $suffix;
public $gender;
public $cnumber;
public $lnumber;
public $email;
public $currentPass;
public $password;
private $conn;
public function __construct($db) {
$this->conn = $db;
}
public function changeProfileInformation(){
if($this->fname && $this->lname){
$stmt = $this->conn->prepare("UPDATE tbl_app_users SET fname = ?, mname = ?, lname = ?, suffix = ?, gender = ?, contactNum = ?, landline = ? WHERE userId = ?");
$this->fname = htmlspecialchars(stripslashes($this->fname));
$this->mname = htmlspecialchars(stripslashes($this->mname));
$this->lname = htmlspecialchars(stripslashes($this->lname));
$this->suffix = htmlspecialchars(stripslashes($this->suffix));
$this->gender = htmlspecialchars(stripslashes($this->gender));
$this->cnumber = htmlspecialchars(stripslashes($this->cnumber));
$this->landline = htmlspecialchars(stripslashes($this->landline));
$stmt->bind_param("sssssssi",$this->fname,$this->mname,$this->lname,$this->suffix,$this->gender,$this->cnumber,$this->landline,$this->id);
if($stmt->execute()){
$_SESSION["ufname"] = $this->fname;
$_SESSION["umname"] = $this->mname;
$_SESSION["ulname"] = $this->lname;
$_SESSION["usuffix"] = $this->suffix;
return true;
} else {
return false;
}
}
}
public function changeEmail(){
if($this->email){
$stmt = $this->conn->prepare("UPDATE tbl_app_users SET email = ? WHERE userId = ?");
$this->email = htmlspecialchars(stripslashes($this->email));
$stmt->bind_param("si",$this->email,$this->id);
if($stmt->execute()){
$_SESSION['uemail'] = $this->email;
return true;
} else {
return false;
}
}
}
public function changePassword(){
if($this->currentPass && $this->password){
$stmt = $this->conn->prepare("SELECT password FROM tbl_app_users WHERE userId = ?");
$stmt->bind_param("i",$this->id);
$stmt->execute();
$row = $stmt->get_result();
$user = $row->fetch_assoc();
if(password_verify($this->currentPass, $user['password'])){
$cstmt = $this->conn->prepare("UPDATE tbl_app_users SET password = ? WHERE userId = ?");
$hashedPass = password_hash($this->password,PASSWORD_BCRYPT);
$cstmt->bind_param("si",$hashedPass,$this->id);
if($cstmt->execute()){
$response_array['status'] = 'password_changed';
echo json_encode($response_array);
return true;
}
} else {
$response_array['status'] = 'invalid';
echo json_encode($response_array);
return true;
}
}
}
// Two Factor Authentication
public function verifyPassword(){
if($this->id && $this->password) {
$stmt = $this->conn->prepare("SELECT * FROM tbl_app_users WHERE userId = ?");
$stmt->bind_param("s",$this->id);
$stmt->execute();
$result = $stmt->get_result();
$row = $result->fetch_assoc();
if($row){
if(password_verify($this->password, $row['password'])){
$response_array['status'] = 'valid';
echo json_encode($response_array);
return true;
} else {
$response_array['status'] = 'invalid';
echo json_encode($response_array);
return false;
}
}
}
}
public function manageTwoFactor(){
if($this->id){
$stmt = $this->conn->prepare("SELECT isOTPenabled FROM tbl_app_users WHERE userId = ?");
$stmt->bind_param("i",$this->id);
$stmt->execute();
$result = $stmt->get_result();
$row = $result->fetch_assoc();
if($row){
if($row['isOTPenabled'] == 0){
$stmt1 = $this->conn->prepare("UPDATE tbl_app_users SET `isOTPenabled` = ? WHERE userId = ?");
$this->id = htmlspecialchars(strip_tags($this->id));
$tval = 1;
$stmt1->bind_param("is",$tval,$this->id);
if($stmt1->execute()){
$response_array['status'] = 'enabled';
echo json_encode($response_array);
return true;
}
} else if($row['isOTPenabled'] == 1){
$stmt1 = $this->conn->prepare("UPDATE tbl_app_users SET `isOTPenabled` = ? WHERE userId = ?");
$this->id = htmlspecialchars(strip_tags($this->id));
$tval = 0;
$stmt1->bind_param("is",$tval,$this->id);
if($stmt1->execute()){
$response_array['status'] = 'disabled';
echo json_encode($response_array);
return true;
}
}
}
}
}
}
$database = new Database();
$db = $database->getConnection();
$se = new Settings($db);
if(!empty($_POST['action']) && $_POST['action'] == 'changeProfileInfo') {
$se->fname = $_POST['fname'];
$se->mname = $_POST['mname'];
$se->lname = $_POST['lname'];
$se->suffix = $_POST['suffix'];
$se->gender = $_POST['gender'];
$se->cnumber = $_POST['cnumber'];
$se->lnumber = $_POST['lnumber'];
$se->id = $_POST['profileUid'];
$se->changeProfileInformation();
}
if(!empty($_POST['action1']) && $_POST['action1'] == 'changeEmail') {
$se->email = $_POST['emailAdd'];
$se->id = $_POST['userId'];
$se->changeEmail();
}
if(!empty($_POST['action2']) && $_POST['action2'] == 'changePassword'){
$se->id = $_POST['userId1'];
$se->currentPass = $_POST['oldpass'];
$se->password = $_POST['newpass'];
$se->changePassword();
}
if(!empty($_POST['action']) && $_POST['action'] == 'checkPassword') {
$se->id = $_POST['uid'];
$se->password = $_POST['passwd'];
$se->verifyPassword();
}
if(!empty($_POST['action']) && $_POST['action'] == 'manageTwoFactor') {
$se->id = $_POST['uid'];
$se->manageTwoFactor();
}
?>
<?php
require "../config.php";
session_start();
if(!isset($_SESSION['user'])){
header("Location: ../login.php");
}
$database = new Database();
$db = $database->getConnection();
$stats = "";
if($query = $db->prepare("SELECT * FROM tbl_app_users WHERE userId = ?")){
$query->bind_param('s',$_SESSION["uuid"]);
$query->execute();
$row = $query->get_result();
$user = $row->fetch_assoc();
if($user){
if($user['isOTPenabled'] == 0){
$stats = '<span id="stats" class="badge bg-danger text-uppercase ms-2">Off</span>';
} else if($user['isOTPenabled'] == 1) {
$stats = '<spanid ="stats" class="badge bg-success text-uppercase ms-2">On</span>';
}
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>QCYDO Scholarship App</title>
<link rel="shortcut icon" href="../qc.ico" />
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-+0n0xVW2eSR5OomGNYDnhzAbDsOXxcvSN1TPprVMTNDbiYZCxYbOOl7+AMvyTG2x" crossorigin="anonymous">
<link href="css/main.css" rel="stylesheet">
<!-- Fonts -->
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/animate.css@4.1.1/animate.min.css" integrity="sha256-X7rrn44l1+AUO65h1LGALBbOc5C5bOstSYsNlv9MhT8=" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5.15.3/css/all.min.css" integrity="sha256-2H3fkXt6FEmrReK448mDVGKb3WW2ZZw35gI7vqHOE4Y=" crossorigin="anonymous">
</head>
<body>
<?php include "include/header.php"; ?>
<div class="main">
<main class="content">
<div class="container-fluid p-0">
<!-- <h3>HOME</h3> -->
<div class="row p-2">
<h3 class="fw-bold text-uppercase animate__animated animate__fadeIn">Settings</h3>
<div class="col-lg-3 col-md-4 col-sm-4 mb-3">
<!-- <div class="d-flex align-items-start"> -->
<div class="card shadow border-0 animate__animated animate__fadeIn">
<div class="card-body">
<div class="nav flex-column nav-pills" id="v-pills-tab" role="tablist" aria-orientation="vertical">
<a class="nav-link text-uppercase disabled" id="v-pills-home-tab" data-bs-toggle="pill" aria-selected="false">Settings</a>
<a class="nav-link active text-uppercase" id="v-pills-ps-tab" data-bs-toggle="pill" href="#v-pills-ps" role="tab" aria-controls="v-pills-ps" aria-selected="true">Personal Information</a>
<a class="nav-link text-uppercase" id="v-pills-profile-tab" data-bs-toggle="pill" href="#v-pills-profile" role="tab" aria-controls="v-pills-profile" aria-selected="false">Email</a>
<a class="nav-link text-uppercase" id="v-pills-messages-tab" data-bs-toggle="pill" href="#v-pills-messages" role="tab" aria-controls="v-pills-messages" aria-selected="false">Security</a>
</div>
</div>
</div>
</div>
<div class="col-lg-9 col-md-8 col-sm-8 mb-3 align-items-start">
<div class="tab-content" id="v-pills-tabContent">
<!-- Profile -->
<div class="tab-pane fade show active" id="v-pills-ps" role="tabpanel" aria-labelledby="v-pills-ps-tab">
<div class="card card shadow border-0 animate__animated animate__fadeIn">
<div class="card-header bg-secondary bg-gradient">
<span class="text-white text-uppercase fw-bold h6">Personal Information</span>
</div>
<div id="perInfoDiv" class="card-body p-4">
<!-- <h4 class="fw-bold text-uppercase text-info">Personal Information</h4> -->
<form id="perInfoForm" method="POST">
<div class="row mb-4 d-flex">
<div class="col-lg-6 ">
<label for="fname" class="form-label fw-bold text-uppercase">First Name <span class="text-danger">*</span></label>
<input type="text" class="form-control form-control-sm" id="fname" name="fname" placeholder="Enter your First Name">
</div>
<div class="col-lg-6">
<label for="mname" class="form-label fw-bold text-uppercase">Middle Name</label>
<input type="text" class="form-control form-control-sm" id="mname" name="mname" placeholder="Enter your Middle Name">
</div>
</div>
<div class="row mb-4 d-flex">
<div class="col-lg-6">
<label for="lname" class="form-label fw-bold text-uppercase">Last Name <span class="text-danger">*</span></label>
<input type="text" class="form-control form-control-sm" id="lname" name="lname" placeholder="Enter your Last Name">
</div>
<div class="col-lg-6">
<label for="suffix" class="form-label fw-bold text-uppercase">Suffix</label>
<select class="form-select form-select-sm" id="suffix" name="suffix">
<option value="" selected>Please select a suffix</option>
<option value="Jr">Jr.</option>
<option value="Sr.">Sr.</option>
<option value="I">I</option>
<option value="II">II</option>
<option value="III">III</option>
<option value="IV">IV</option>
<option value="V">V</option>
<option value="VI">VI</option>
</select>
</div>
</div>
<div class="row d-flex ">
<div class="col-lg-6">
<label for="gender" class="form-label fw-bold text-uppercase">Gender <span class="text-danger">*</span></label>
<select class="form-select form-select-sm" id="gender" name="gender">
<option value="" selected>Please select a Gender</option>
<option value="Male">Male</option>
<option value="Female">Female</option>
</select>
</div>
<div class="col-lg-6">
<label for="cnumber" class="form-label fw-bold text-uppercase">Contact Number <span class="text-danger">*</span></label>
<input type="text" class="form-control form-control-sm" id="cnumber" name="cnumber" placeholder="Enter your Contact Number">
</div>
</div>
<div class="row d-flex mt-4">
<div class="col-lg-6">
<label for="lnumber" class="form-label fw-bold text-uppercase">Landline Number</label>
<input type="text" class="form-control form-control-sm" id="lnumber" name="lnumber" placeholder="Enter your Landline Number">
</div>
</div>
<div class="row d-flex mt-4">
<div class="col-lg-12">
<input type="hidden" name="action" id="action" value="changeProfileInfo">
<input type="hidden" name="profileUid" id="profieUid" value="<?php echo $_SESSION['uuid']; ?>" />
<button id="perInfoSubmitBtn" type="submit" class="btn btn-sm btn-primary text-uppercase">Save Changes</button>
</div>
</div>
</form>
</div>
</div>
</div>
<!-- Email -->
<div class="tab-pane fade" id="v-pills-profile" role="tabpanel" aria-labelledby="v-pills-profile-tab">
<div class="card card shadow border-0">
<div class="card-header bg-secondary gradient">
<span class="text-white text-uppercase fw-bold h6">Email Address</span>
</div>
<div id="emailDiv" class="card-body p-4">
<div class="alert alert-warning alert-dismissible fade show" role="alert">
<strong>Warning!</strong> Once your Email Address has changed, Your OTP Code will be sent to your new Email Address.
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
<form id="emailForm" method="POST">
<div class="row mb-3">
<div class="col-lg-6">
<label for="currEmail" class="form-label text-uppercase fw-bold">Current Email address</label>
<span class="form-control-plaintext text-black-50" id="currEmail" ><?php echo $_SESSION['uemail']; ?></span>
<!-- <input type="email" class="form-control form-control-sm" id="currEmail" name="currEmail" placeholder="name@example.com"> -->
</div>
</div>
<div class="row mb-3">
<div class="col-lg-6">
<label for="emailAdd" class="form-label text-uppercase fw-bold">New Email address</label>
<input type="email" class="form-control form-control-sm" id="emailAdd" name="emailAdd" placeholder="name@example.com">
</div>
</div>
<div class="row">
<div class="col-lg-12">
<input type="hidden" id="action1" name="action1" value="changeEmail">
<input type="hidden" id="userId" name="userId" value="<?php echo $_SESSION['uuid']; ?>">
<button type="submit" id="submitEmailBtn" class="btn btn-sm btn-primary text-uppercase">Save Changes</button>
</div>
</div>
</form>
</div>
</div>
</div>
<!-- 2FA -->
<div class="tab-pane fade" id="v-pills-messages" role="tabpanel" aria-labelledby="v-pills-messages-tab">
<div class="card card shadow border-0">
<div class="card-header bg-secondary gradient">
<span class="text-white text-uppercase fw-bold h6">Security</span>
</div>
<div class="card-body p-4">
<h5 class="text-uppercase fw-bold">Password</h5>
<div class="row mb-4">
<div id="passDiv" class="col-xl-12 col-lg-12">
<form id="passForm" method="POST">
<div class="row mb-3">
<div class="col-lg-6">
<label for="oldpass" class="form-label fw-bold text-uppercase">Old Password</label>
<input type="password" class="form-control form-control-sm" id="oldpass" name="oldpass" placeholder="Enter your Old Password">
<span id="invalidOldPass" class="errorx"></span>
</div>
</div>
<div class="row mb-3">
<div class="col-lg-6">
<label for="newpass" class="form-label fw-bold text-uppercase">New Password</label>
<input type="password" class="form-control form-control-sm" id="newpass" name="newpass" placeholder="Enter your New Password">
</div>
</div>
<div class="row mb-3">
<div class="col-lg-6">
<label for="repass" class="form-label fw-bold text-uppercase">Confirm New Password</label>
<input type="password" class="form-control form-control-sm" id="repass" name="repass" placeholder="Confirm your New Password">
</div>
</div>
<div class="row">
<div class="col-lg-12">
<input type="hidden" id="action2" name="action2" value="changePassword">
<input type="hidden" id="userId1" name="userId1" value="<?php echo $_SESSION['uuid']; ?>">
<button id="submitPassBtn" type="submit" class="btn btn-sm btn-primary text-uppercase">Save Changes</button>
</div>
</div>
</form>
</div>
</div>
<h5 class="mt-4 text-uppercase fw-bold">Two Factor Authentication (2FA)</h5>
<div class="row">
<div class="col-xl-12 col-lg-12">
<p class="mb-3">Status: <?php echo $stats; ?></p>
<p class="text-break fw-light">When enabled, we will send an OTP Code to your Current Email Address to access the app.</p>
<form>
<div class="row mb-3">
<label for="2fa" class="col-sm-4 col-form-label fw-bold text-uppercase">Two Factor Authentication </label>
<div class="col-sm-8 d-flex justify-content-start">
<input type="hidden" id="userId2" name="userId2" value="<?php echo $_SESSION['uuid'];?>">
<?php
if($query = $db->prepare("SELECT * FROM tbl_app_users WHERE userId = ?")){
$query->bind_param('s',$_SESSION["uuid"]);
$query->execute();
$row = $query->get_result();
$user = $row->fetch_assoc();
if($user){
if($user['isOTPenabled'] == 0){
?>
<button type="button" id="twoFactorBtn" class="btn btn-sm btn-success" data-toggle="modal" data-target="#exampleModal3" data-value="enable"><i class="fas fa-check me-2"></i> Enable</button>
<?php
} else if($user['isOTPenabled'] == 1) {
?>
<button type="button" id="twoFactorBtn" class="btn btn-sm btn-danger" data-toggle="modal" data-target="#exampleModal3" data-value="disable"><i class="fas fa-times me-2"></i> Disable</button>
<?php
}
}
}
?>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- </div> -->
</div>
</div>
</main>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-gtEjrD/SeCtmISkJkNUaaKMoLD0//ElJ19smozuHV6z3Iehds+3Ulb9Bn9Plx0x4" crossorigin="anonymous"></script>
<script src="//cdn.jsdelivr.net/npm/sweetalert2@11"></script>
<script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5.15.3/js/all.min.js" integrity="sha256-u11/XQI2A6mpXa0j1p0l0UpO3ZuiMTInGUqaT2K9ZWQ=" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/jquery-validation@1.19.3/dist/jquery.validate.min.js" integrity="sha256-TAzGN4WNZQPLqSYvi+dXQMKehTYFoVOnveRqbi42frA=" crossorigin="anonymous"></script>
<script>
$(document).ready(function(){
// Validate Personal Information
$('#fname').on('keypress blur paste', function (e) {
var regex = new RegExp("^[a-zA-Z ]+$");
var strigChar = String.fromCharCode(!e.charCode ? e.which : e.charCode);
if (regex.test(strigChar)) {
return true;
}
return false
});
$('#mname').on('keypress blur paste',function (e) {
var regex = new RegExp("^[a-zA-Z ]+$");
var strigChar = String.fromCharCode(!e.charCode ? e.which : e.charCode);
if (regex.test(strigChar)) {
return true;
}
return false
});
$('#lname').on('keypress blur paste',function (e) {
var regex = new RegExp("^[a-zA-Z- ]+$");
var strigChar = String.fromCharCode(!e.charCode ? e.which : e.charCode);
if (regex.test(strigChar)) {
return true;
}
return false
});
$('#cnumber').on('input blur paste', function(){
$(this).val($(this).val().replace(/\D/g, ''))
});
$('#lnumber').on('input blur paste', function(){
$(this).val($(this).val().replace(/\D/g, ''))
});
var perInfoFormValidate = $("#perInfoForm").validate({
errorClass: 'errorx',
ignore: [], // ignore NOTHING
rules: {
fname: {
required: true,
minlength: 2
},
mname: {
minlength: 2
},
lname: {
required: true,
minlength: 2
},
gender: {
required: true,
},
cnumber: {
required: true,
},
},
messages: {
fname: {
required: "Please Enter your First Name",
},
lname: {
required: "Please Enter your Last Name",
},
gender: {
required: "Please Select a Gender"
},
cnumber: {
required: "Please Enter your Phone Number",
},
},
// errorElement: "em",
errorPlacement: function (error,element) {
// Add the `invalid-feedback` class to the error element
error.addClass( "invalid-feedback" );
if (element.prop("type") === "checkbox" ) {
error.insertAfter(element.next( "label"));
} else {
error.insertAfter(element);
}
Swal.fire({
title: 'Empty fields!',
text: 'Please fill out all required fields.',
icon: 'error',
})
},
highlight: function (element, errorClass, validClass) {
$(element).addClass("is-invalid").removeClass("is-valid");
},
unhighlight: function (element, errorClass, validClass) {
$(element).addClass("is-valid").removeClass("is-invalid");
},
});
$("#perInfoDiv").on('submit','#perInfoForm',function(event){
event.preventDefault();
$("#perInfoSubmitBtn").attr("disabled","disabled");
var pfData = $(this).serialize();
$.ajax({
url: "lib/settings.class.php",
method: 'POST',
data: pfData,
success: function(data){
Swal.fire({
title: 'Success!',
text: "Profile Information Updated",
icon: 'success',
showCancelButton: false,
confirmButtonText: 'OK'
}).then((result) => {
if (result.isConfirmed) {
$('#perInfoForm')[0].reset();
$('#perInfoSubmitBtn').attr('disabled', false);
perInfoFormValidate.resetForm();
}
});
}
});
$('#perInfoSubmitBtn').attr('disabled', false);
});
// Validate Email
$.validator.addMethod(
/* The value you can use inside the email object in the validator. */
"regex",
/* The function that tests a given string against a given regEx. */
function(value, element, regexp) {
/* Check if the value is truthy (avoid null.constructor) & if it's not a RegEx. (Edited: regex --> regexp)*/
if (regexp && regexp.constructor != RegExp) {
/* Create a new regular expression using the regex argument. */
regexp = new RegExp(regexp);
}
/* Check whether the argument is global and, if so set its last index to 0. */
else if (regexp.global) regexp.lastIndex = 0;
/* Return whether the element is optional or the result of the validation. */
return this.optional(element) || regexp.test(value);
}
);
var emailFormValidate = $("#emailForm").validate({
errorClass: 'errorx',
ignore: [], // ignore NOTHING
rules: {
emailAdd: {
required: true,
email: true,
regex: /^\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b$/i,
},
},
messages: {
emailAdd: {
required: "Please Enter your New Email Address",
email: "Invalid Email Address entered",
regex: "Invalid Email Address entered",
},
},
});
$("#emailDiv").on('submit','#emailForm',function(event){
event.preventDefault();
$("#submitEmailBtn").attr("disabled","disabled");
var emData = $(this).serialize();
$.ajax({
url: "lib/settings.class.php",
method: 'POST',
data: emData,
success: function(data){
Swal.fire({
title: 'Success!',
text: "Your Email Address has been changed.",
icon: 'success',
showCancelButton: false,
confirmButtonText: 'OK'
}).then((result) => {
if (result.isConfirmed) {
$('#emailForm')[0].reset();
$('#submitEmailBtn').attr('disabled', false);
emailFormValidate.resetForm();
location.reload();
}
});
}
});
$('#submitEmailBtn').attr('disabled', false);
});
// Validate Password
var passValidate = $("#passForm").validate({
errorClass: 'errorx',
rules: {
oldpass: {
required: true,
},
newpass: {
required: true,
},
repass: {
equalTo: "#newpass",
}
},
messages: {
oldpass: {
required: "Please Enter your current password",
},
newpass: {
required: "Please Enter your new password",
},
}
});
$("#passDiv").on('submit','#passForm',function(event){
event.preventDefault();
$("#submitPassBtn").attr('disabled','disabled');
var psData = $(this).serialize();
$.ajax({
url: "lib/settings.class.php",
method: "POST",
data: psData,
dataType: 'json',
success:function(data){
if(data.status === "password_changed"){
$("#invalidOldPass").html("");
Swal.fire(
'Success!',
'Your Password has been changed.',
'success'
)
} else if(data.status === "invalid"){
$("#invalidOldPass").html("");
$("#invalidOldPass").html("Invalid Password. Please Try again");
}
$('#passForm')[0].reset();
$('#submitPassBtn').attr('disabled', false);
}
});
});
$("#twoFactorBtn").click(async function(){
const { value: password } = await Swal.fire({
title: '<h5>To change Two Factor Authentication Setting, Please Enter your password.</h5>',
input: 'password',
inputPlaceholder: 'Enter your password',
inputAttributes: {
autocapitalize: 'off',
autocorrect: 'off'
},
inputValidator: (result) => {
return !result && 'Please Enter your Password'
}
})
if (password) {
$.ajax({
url:"lib/settings.class.php",
method:"POST",
data: {
uid: $("#userId2").val(),
passwd: password,
action:"checkPassword",
},
dataType: 'json',
success:function(data){
if(data.status == 'valid'){
// if($("#twoFactorBtn").prop("data-value") === 'Enable'){
// //alert("Enable");
twoFactor($("#userId2").val());
// } else if($("#twoFactorBtn").prop("data-value") === 'Disable'){
//alert("Disable");
// twoFactor($("#userId2").val());
// }
} else if(data.status == 'invalid'){
Swal.fire('Invalid Password! Please Try Again');
}
}
});
}
// if($(this).hasClass("btn-danger")){
// $(this).removeClass("btn-danger");
// $(this).addClass("btn-success");
// $(this).html("Enable")
// } else if($(this).hasClass("btn-success")){
// $(this).removeClass("btn-success");
// $(this).addClass("btn-danger");
// $(this).html("Disable")
// }
});
async function twoFactor(uid){
$.ajax({
url:"lib/settings.class.php",
method:"POST",
data: {
uid: uid,
action:"manageTwoFactor",
},
dataType: 'json',
success:function(data){
if(data.status == 'enabled'){
Swal.fire(
'Success!',
'Two-Factor Authentication has been enabled.',
'success'
)
if($("#twoFactorBtn").hasClass("btn-success")){
$("#twoFactorBtn").removeClass("btn-success");
$("#twoFactorBtn").addClass("btn-danger");
$("#twoFactorBtn").html('<i class="fas fa-times me-2"></i> Disable')
$("#stats").removeClass("bg-danger");
$("#stats").addClass("bg-success");
$("#stats").html('On')
}
} else if(data.status == 'disabled'){
Swal.fire(
'Success!',
'Two-Factor Authentication has been disabled.',
'success'
)
if($("#twoFactorBtn").hasClass("btn-danger")){
$("#twoFactorBtn").removeClass("btn-danger");
$("#twoFactorBtn").addClass("btn-success");
$("#twoFactorBtn").html('<i class="fas fa-check me-2"></i> Enable')
$("#stats").removeClass("bg-success");
$("#stats").addClass("bg-danger");
$("#stats").html('Off')
}
} else if(data.status == 'failure'){
Swal.fire(
'Error!',
'Something went wrong. Please Try Again Later',
'error'
)
}
}
});
}
// Validate 2FA
});
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment