824 lines
18 KiB
PHP
824 lines
18 KiB
PHP
<?php
|
|
|
|
include "config/connect.php";
|
|
include 'list_data/sweetalert.php';
|
|
include 'config/tanggal_indo.php';
|
|
|
|
|
|
// =====================================================
|
|
// CEK SESSION WAJIB UPDATE
|
|
// =====================================================
|
|
|
|
if (
|
|
!isset($_SESSION['wajib_update_akun']) ||
|
|
$_SESSION['wajib_update_akun'] !== true ||
|
|
empty($_SESSION['update_akun_id']) ||
|
|
empty($_SESSION['update_akun_tipe'])
|
|
) {
|
|
|
|
header("Location: aut_akses.php");
|
|
exit;
|
|
}
|
|
|
|
|
|
$idUser = (int) $_SESSION['update_akun_id'];
|
|
$tipeUser = $_SESSION['update_akun_tipe'];
|
|
|
|
|
|
// =====================================================
|
|
// VALIDASI TIPE USER
|
|
// =====================================================
|
|
|
|
if (!in_array($tipeUser, ['master', 'user'], true)) {
|
|
|
|
session_unset();
|
|
session_destroy();
|
|
|
|
header("Location: aut_akses.php");
|
|
exit;
|
|
}
|
|
|
|
|
|
// =====================================================
|
|
// AMBIL DATA USER SAAT INI
|
|
// =====================================================
|
|
|
|
try {
|
|
|
|
if ($tipeUser === 'master') {
|
|
|
|
$stmt = $pdo->prepare("
|
|
SELECT
|
|
id,
|
|
username,
|
|
email
|
|
FROM data_server
|
|
WHERE id = :id
|
|
LIMIT 1
|
|
");
|
|
|
|
} else {
|
|
|
|
$stmt = $pdo->prepare("
|
|
SELECT
|
|
id,
|
|
username,
|
|
email,
|
|
status
|
|
FROM user_akses
|
|
WHERE id = :id
|
|
AND status = 'active'
|
|
LIMIT 1
|
|
");
|
|
|
|
}
|
|
|
|
$stmt->execute([
|
|
':id' => $idUser
|
|
]);
|
|
|
|
$dataUser = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
|
|
|
if (!$dataUser) {
|
|
|
|
unset($_SESSION['wajib_update_akun']);
|
|
unset($_SESSION['update_akun_id']);
|
|
unset($_SESSION['update_akun_tipe']);
|
|
|
|
header("Location: aut_akses.php");
|
|
exit;
|
|
|
|
}
|
|
|
|
} catch (PDOException $e) {
|
|
|
|
header("Location: aut_akses.php");
|
|
exit;
|
|
|
|
}
|
|
|
|
?>
|
|
<!DOCTYPE html>
|
|
<html lang="en">
|
|
|
|
<head>
|
|
|
|
<meta charset="utf-8">
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
|
|
<title>ManjaPro - Perbarui Akun</title>
|
|
|
|
|
|
<!-- Google Font -->
|
|
<link
|
|
rel="stylesheet"
|
|
href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700&display=fallback"
|
|
>
|
|
|
|
|
|
<!-- Font Awesome -->
|
|
<link
|
|
rel="stylesheet"
|
|
href="plugins/fontawesome-free/css/all.min.css"
|
|
>
|
|
|
|
|
|
<!-- Theme style -->
|
|
<link
|
|
rel="stylesheet"
|
|
href="dist/css/adminlte.min.css"
|
|
>
|
|
|
|
|
|
<!-- Icon -->
|
|
<link
|
|
rel="icon"
|
|
href="dist/img/logo-sm.png"
|
|
type="image/gif"
|
|
>
|
|
|
|
|
|
<!-- SweetAlert -->
|
|
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
|
|
|
|
</head>
|
|
|
|
|
|
<body class="hold-transition login-page">
|
|
|
|
|
|
<div class="login-box" style="zoom:115%; width:400px;">
|
|
|
|
|
|
<div class="card card-outline card-primary">
|
|
|
|
|
|
<!-- HEADER -->
|
|
<div class="card-header text-center">
|
|
|
|
<img
|
|
src="dist/img/logo-login.png"
|
|
width="150px"
|
|
class="mt-4"
|
|
>
|
|
|
|
<br>
|
|
|
|
<p>
|
|
<small>Managemen Jaringan Propesional</small>
|
|
</p>
|
|
|
|
</div>
|
|
|
|
|
|
<!-- BODY -->
|
|
<div class="card-body">
|
|
|
|
|
|
<p class="login-box-msg">
|
|
|
|
<strong>Perbarui Akun</strong>
|
|
|
|
<br>
|
|
|
|
<small class="text-muted">
|
|
Demi keamanan akun, silakan buat username dan password baru.
|
|
</small>
|
|
|
|
</p>
|
|
|
|
|
|
<div class="alert alert-info">
|
|
|
|
<small>
|
|
|
|
<i class="fas fa-info-circle mr-1"></i>
|
|
|
|
Username minimal <strong>6 karakter</strong> dan password minimal
|
|
<strong>8 karakter</strong>.
|
|
|
|
</small>
|
|
|
|
</div>
|
|
|
|
|
|
<form method="post" id="formUpdateAkun">
|
|
|
|
|
|
<!-- USERNAME -->
|
|
<label>
|
|
<small>Username Baru</small>
|
|
</label>
|
|
|
|
<div class="input-group mb-3">
|
|
|
|
<input
|
|
type="text"
|
|
class="form-control"
|
|
id="username_baru"
|
|
name="username_baru"
|
|
placeholder="Username baru"
|
|
minlength="6"
|
|
maxlength="20"
|
|
autocomplete="username"
|
|
value="<?= htmlspecialchars($_POST['username_baru'] ?? $dataUser['username']); ?>"
|
|
required
|
|
>
|
|
|
|
|
|
<div class="input-group-append">
|
|
|
|
<div class="input-group-text">
|
|
|
|
<span class="fas fa-user"></span>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
<small class="text-muted d-block mb-3">
|
|
|
|
Minimal 6 karakter dan maksimal 20 karakter.
|
|
|
|
</small>
|
|
|
|
|
|
|
|
<!-- PASSWORD BARU -->
|
|
<label>
|
|
<small>Password Baru</small>
|
|
</label>
|
|
|
|
|
|
<div class="input-group mb-3">
|
|
|
|
|
|
<input
|
|
type="password"
|
|
class="form-control"
|
|
id="password_baru"
|
|
name="password_baru"
|
|
placeholder="Password baru"
|
|
minlength="8"
|
|
autocomplete="new-password"
|
|
required
|
|
>
|
|
|
|
|
|
<div class="input-group-append">
|
|
|
|
<div
|
|
class="input-group-text"
|
|
style="cursor:pointer;"
|
|
>
|
|
|
|
<span
|
|
class="fas fa-eye"
|
|
id="toggle-password-baru"
|
|
></span>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<!-- KONFIRMASI PASSWORD -->
|
|
<label>
|
|
<small>Konfirmasi Password Baru</small>
|
|
</label>
|
|
|
|
|
|
<div class="input-group mb-3">
|
|
|
|
|
|
<input
|
|
type="password"
|
|
class="form-control"
|
|
id="konfirmasi_password"
|
|
name="konfirmasi_password"
|
|
placeholder="Ulangi password baru"
|
|
minlength="8"
|
|
autocomplete="new-password"
|
|
required
|
|
>
|
|
|
|
|
|
<div class="input-group-append">
|
|
|
|
<div
|
|
class="input-group-text"
|
|
style="cursor:pointer;"
|
|
>
|
|
|
|
<span
|
|
class="fas fa-eye"
|
|
id="toggle-konfirmasi-password"
|
|
></span>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<!-- BUTTON -->
|
|
<div class="row mt-4">
|
|
|
|
<div class="col-12">
|
|
|
|
<button
|
|
type="submit"
|
|
name="update_akun"
|
|
class="btn btn-primary btn-block"
|
|
>
|
|
|
|
<i class="fas fa-save mr-1"></i>
|
|
|
|
Simpan dan Lanjutkan
|
|
|
|
</button>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
</form>
|
|
|
|
|
|
<?php
|
|
|
|
// =====================================================
|
|
// PROSES UPDATE AKUN
|
|
// =====================================================
|
|
|
|
if (isset($_POST['update_akun'])) {
|
|
|
|
|
|
$usernameBaru = trim($_POST['username_baru'] ?? '');
|
|
|
|
$passwordBaru = $_POST['password_baru'] ?? '';
|
|
|
|
$konfirmasiPassword = $_POST['konfirmasi_password'] ?? '';
|
|
|
|
|
|
// =====================================================
|
|
// VALIDASI USERNAME
|
|
// =====================================================
|
|
|
|
if ($usernameBaru === '') {
|
|
|
|
sweetAlert(
|
|
"Username baru harus diisi",
|
|
"error"
|
|
);
|
|
|
|
|
|
} elseif (mb_strlen($usernameBaru) < 6) {
|
|
|
|
sweetAlert(
|
|
"Username minimal 6 karakter",
|
|
"error"
|
|
);
|
|
|
|
|
|
} elseif (mb_strlen($usernameBaru) > 20) {
|
|
|
|
sweetAlert(
|
|
"Username maksimal 20 karakter",
|
|
"error"
|
|
);
|
|
|
|
|
|
// =====================================================
|
|
// VALIDASI PASSWORD
|
|
// =====================================================
|
|
|
|
} elseif ($passwordBaru === '') {
|
|
|
|
sweetAlert(
|
|
"Password baru harus diisi",
|
|
"error"
|
|
);
|
|
|
|
|
|
} elseif (strlen($passwordBaru) < 8) {
|
|
|
|
sweetAlert(
|
|
"Password minimal 8 karakter",
|
|
"error"
|
|
);
|
|
|
|
|
|
} elseif ($passwordBaru !== $konfirmasiPassword) {
|
|
|
|
sweetAlert(
|
|
"Konfirmasi password tidak sama",
|
|
"error"
|
|
);
|
|
|
|
|
|
} else {
|
|
|
|
try {
|
|
|
|
|
|
// =====================================================
|
|
// CEK USERNAME DI DATA_SERVER
|
|
// =====================================================
|
|
|
|
if ($tipeUser === 'master') {
|
|
|
|
$stmt = $pdo->prepare("
|
|
SELECT id
|
|
FROM data_server
|
|
WHERE (
|
|
username = :username
|
|
OR email = :username
|
|
)
|
|
AND id != :id
|
|
LIMIT 1
|
|
");
|
|
|
|
} else {
|
|
|
|
/*
|
|
* Untuk user_akses, tetap cek data_server juga.
|
|
*
|
|
* Hal ini penting karena proses login selalu
|
|
* mencari data_server terlebih dahulu.
|
|
*/
|
|
|
|
$stmt = $pdo->prepare("
|
|
SELECT id
|
|
FROM data_server
|
|
WHERE username = :username
|
|
OR email = :username
|
|
LIMIT 1
|
|
");
|
|
|
|
}
|
|
|
|
|
|
$stmt->execute([
|
|
':username' => $usernameBaru,
|
|
...($tipeUser === 'master' ? [':id' => $idUser] : [])
|
|
]);
|
|
|
|
|
|
$usernameDiMaster = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
|
|
|
if ($usernameDiMaster) {
|
|
|
|
sweetAlert(
|
|
"Username sudah digunakan. Silakan gunakan username lain.",
|
|
"error"
|
|
);
|
|
|
|
} else {
|
|
|
|
|
|
// =====================================================
|
|
// CEK USERNAME DI USER_AKSES
|
|
// =====================================================
|
|
|
|
if ($tipeUser === 'user') {
|
|
|
|
$stmt = $pdo->prepare("
|
|
SELECT id
|
|
FROM user_akses
|
|
WHERE (
|
|
username = :username
|
|
OR email = :username
|
|
)
|
|
AND id != :id
|
|
LIMIT 1
|
|
");
|
|
|
|
$stmt->execute([
|
|
':username' => $usernameBaru,
|
|
':id' => $idUser
|
|
]);
|
|
|
|
} else {
|
|
|
|
$stmt = $pdo->prepare("
|
|
SELECT id
|
|
FROM user_akses
|
|
WHERE username = :username
|
|
OR email = :username
|
|
LIMIT 1
|
|
");
|
|
|
|
$stmt->execute([
|
|
':username' => $usernameBaru
|
|
]);
|
|
|
|
}
|
|
|
|
|
|
$usernameDiUser = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
|
|
|
if ($usernameDiUser) {
|
|
|
|
sweetAlert(
|
|
"Username sudah digunakan. Silakan gunakan username lain.",
|
|
"error"
|
|
);
|
|
|
|
} else {
|
|
|
|
|
|
// =====================================================
|
|
// HASH PASSWORD BARU
|
|
// =====================================================
|
|
|
|
$passwordHash = password_hash(
|
|
$passwordBaru,
|
|
PASSWORD_DEFAULT
|
|
);
|
|
|
|
|
|
if ($passwordHash === false) {
|
|
|
|
throw new Exception(
|
|
"Gagal membuat hash password"
|
|
);
|
|
|
|
}
|
|
|
|
|
|
// =====================================================
|
|
// UPDATE DATABASE
|
|
// =====================================================
|
|
|
|
if ($tipeUser === 'master') {
|
|
|
|
$stmtUpdate = $pdo->prepare("
|
|
UPDATE data_server
|
|
SET
|
|
username = :username,
|
|
password = :password
|
|
WHERE id = :id
|
|
");
|
|
|
|
} else {
|
|
|
|
$stmtUpdate = $pdo->prepare("
|
|
UPDATE user_akses
|
|
SET
|
|
username = :username,
|
|
password = :password
|
|
WHERE id = :id
|
|
AND status = 'active'
|
|
");
|
|
|
|
}
|
|
|
|
|
|
$stmtUpdate->execute([
|
|
':username' => $usernameBaru,
|
|
':password' => $passwordHash,
|
|
':id' => $idUser
|
|
]);
|
|
|
|
|
|
// =====================================================
|
|
// BERSIHKAN SESSION SEMENTARA
|
|
// =====================================================
|
|
|
|
unset($_SESSION['wajib_update_akun']);
|
|
unset($_SESSION['update_akun_id']);
|
|
unset($_SESSION['update_akun_tipe']);
|
|
|
|
|
|
// =====================================================
|
|
// BUAT SESSION LOGIN NORMAL
|
|
// =====================================================
|
|
|
|
session_regenerate_id(true);
|
|
|
|
|
|
if ($tipeUser === 'master') {
|
|
|
|
$_SESSION['master'] = $idUser;
|
|
|
|
} else {
|
|
|
|
$_SESSION['user'] = $idUser;
|
|
|
|
}
|
|
|
|
|
|
// =====================================================
|
|
// BERHASIL
|
|
// =====================================================
|
|
|
|
sweetAlert(
|
|
"Username dan Password berhasil diperbarui",
|
|
"success",
|
|
baseurl()
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
} catch (PDOException $e) {
|
|
|
|
sweetAlert(
|
|
"Gagal memperbarui akun. Terjadi kesalahan pada sistem.",
|
|
"error"
|
|
);
|
|
|
|
// Debugging:
|
|
// error_log($e->getMessage());
|
|
|
|
|
|
} catch (Exception $e) {
|
|
|
|
sweetAlert(
|
|
"Gagal memperbarui akun",
|
|
"error"
|
|
);
|
|
|
|
// error_log($e->getMessage());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
?>
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<!-- jQuery -->
|
|
<script src="plugins/jquery/jquery.min.js"></script>
|
|
|
|
|
|
<!-- Bootstrap -->
|
|
<script src="plugins/bootstrap/js/bootstrap.bundle.min.js"></script>
|
|
|
|
|
|
<!-- AdminLTE -->
|
|
<script src="dist/js/adminlte.min.js"></script>
|
|
|
|
|
|
|
|
<script>
|
|
|
|
// =====================================================
|
|
// SHOW / HIDE PASSWORD BARU
|
|
// =====================================================
|
|
|
|
document
|
|
.getElementById('toggle-password-baru')
|
|
.addEventListener('click', function () {
|
|
|
|
const input = document.getElementById('password_baru');
|
|
|
|
if (input.type === 'password') {
|
|
|
|
input.type = 'text';
|
|
|
|
this.classList.remove('fa-eye');
|
|
this.classList.add('fa-eye-slash');
|
|
|
|
} else {
|
|
|
|
input.type = 'password';
|
|
|
|
this.classList.remove('fa-eye-slash');
|
|
this.classList.add('fa-eye');
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
// =====================================================
|
|
// SHOW / HIDE KONFIRMASI PASSWORD
|
|
// =====================================================
|
|
|
|
document
|
|
.getElementById('toggle-konfirmasi-password')
|
|
.addEventListener('click', function () {
|
|
|
|
const input = document.getElementById('konfirmasi_password');
|
|
|
|
if (input.type === 'password') {
|
|
|
|
input.type = 'text';
|
|
|
|
this.classList.remove('fa-eye');
|
|
this.classList.add('fa-eye-slash');
|
|
|
|
} else {
|
|
|
|
input.type = 'password';
|
|
|
|
this.classList.remove('fa-eye-slash');
|
|
this.classList.add('fa-eye');
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
// =====================================================
|
|
// VALIDASI PASSWORD DI BROWSER
|
|
// =====================================================
|
|
|
|
document
|
|
.getElementById('formUpdateAkun')
|
|
.addEventListener('submit', function (event) {
|
|
|
|
const username = document
|
|
.getElementById('username_baru')
|
|
.value
|
|
.trim();
|
|
|
|
const password = document
|
|
.getElementById('password_baru')
|
|
.value;
|
|
|
|
const konfirmasi = document
|
|
.getElementById('konfirmasi_password')
|
|
.value;
|
|
|
|
|
|
if (username.length < 6) {
|
|
|
|
event.preventDefault();
|
|
|
|
Swal.fire({
|
|
icon: 'error',
|
|
title: 'Username terlalu pendek',
|
|
text: 'Username minimal 6 karakter.'
|
|
});
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
if (password.length < 8) {
|
|
|
|
event.preventDefault();
|
|
|
|
Swal.fire({
|
|
icon: 'error',
|
|
title: 'Password terlalu pendek',
|
|
text: 'Password minimal 8 karakter.'
|
|
});
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
if (password !== konfirmasi) {
|
|
|
|
event.preventDefault();
|
|
|
|
Swal.fire({
|
|
icon: 'error',
|
|
title: 'Password tidak sama',
|
|
text: 'Konfirmasi password harus sama dengan password baru.'
|
|
});
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
</script>
|
|
|
|
|
|
</body>
|
|
</html>
|