Oke! Kita tambahkan fitur Pemulihan Akun yang Terhapus (Backup Sebelum Hapus Akun) di WHM Custom.
✅ Fitur yang Akan Dibuat:
- Sebelum akun dihapus, backup data akun disimpan.
- User bisa mengajukan permintaan pemulihan akun dalam waktu 7 hari setelah dihapus.
- Admin bisa melihat daftar akun yang bisa dipulihkan & memulihkannya.
- Gunakan Cron Job untuk menghapus backup setelah 7 hari jika tidak ada permintaan pemulihan.
1️⃣ Buat Backup Sebelum Akun Dihapus
📌 Update cron/delete_account.php agar melakukan backup sebelum menghapus akun.
<?php
include '../includes/config.php';
// Ambil akun yang disuspend lebih dari 37 hari
$date = date('Y-m-d', strtotime('-37 days'));
$stmt = $conn->prepare("SELECT id, username, email FROM accounts WHERE status = 'suspended' AND expired_date < ?");
$stmt->bind_param("s", $date);
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
$account_id = $row['id'];
$username = $row['username'];
$email = $row['email'];
// Backup data akun sebelum dihapus
$stmt = $conn->prepare("INSERT INTO account_backup (account_id, username, email, expired_date, backup_date)
SELECT id, username, email, expired_date, NOW() FROM accounts WHERE id = ?");
$stmt->bind_param("i", $account_id);
$stmt->execute();
// Hapus akun dari database
$stmt = $conn->prepare("DELETE FROM accounts WHERE id = ?");
$stmt->bind_param("i", $account_id);
$stmt->execute();
echo "Akun $username telah dihapus permanen, namun data telah dibackup.\n";
}
echo "Proses penghapusan akun expired selesai!";
?>
📌 Sebelum akun dihapus, data akan disimpan di tabel account_backup.
2️⃣ Buat Halaman untuk Admin Memulihkan Akun
📌 File admin/recover_account.php
<?php
include '../includes/config.php';
include '../includes/mail_config.php';
if (isset($_GET['id'])) {
$backup_id = $_GET['id'];
// Ambil data dari backup
$stmt = $conn->prepare("SELECT account_id, username, email, expired_date FROM account_backup WHERE id = ?");
$stmt->bind_param("i", $backup_id);
$stmt->execute();
$result = $stmt->get_result();
if ($row = $result->fetch_assoc()) {
$account_id = $row['account_id'];
$username = $row['username'];
$email = $row['email'];
$expired_date = date('Y-m-d', strtotime('+1 month')); // Perpanjang 1 bulan
// Pulihkan akun
$stmt = $conn->prepare("INSERT INTO accounts (id, username, email, expired_date, status) VALUES (?, ?, ?, ?, 'active')");
$stmt->bind_param("isss", $account_id, $username, $email, $expired_date);
$stmt->execute();
// Hapus dari backup
$stmt = $conn->prepare("DELETE FROM account_backup WHERE id = ?");
$stmt->bind_param("i", $backup_id);
$stmt->execute();
// Kirim email notifikasi
$subject = "Akun Hosting Anda Telah Dipulihkan!";
$message = "
<h2>Halo, $username</h2>
<p>Akun hosting Anda telah berhasil dipulihkan dan diperpanjang selama 1 bulan.</p>
<p>Terima kasih telah menggunakan layanan kami.</p>
<p><b>Tim Hosting</b></p>
";
sendEmail($email, $subject, $message);
echo "Akun berhasil dipulihkan & email notifikasi telah dikirim!";
} else {
echo "Data akun tidak ditemukan!";
}
}
?>
📌 Admin bisa memulihkan akun dari backup & memperpanjangnya 1 bulan.
3️⃣ Buat Halaman Admin untuk Melihat Daftar Akun yang Bisa Dipulihkan
📌 File admin/backup_accounts.php
<?php
include '../includes/config.php';
// Ambil daftar akun yang ada di backup
$result = $conn->query("SELECT id, username, email, backup_date FROM account_backup WHERE backup_date > DATE_SUB(NOW(), INTERVAL 7 DAY)");
?>
<h2>Daftar Akun yang Bisa Dipulihkan</h2>
<table border="1">
<tr>
<th>Username</th>
<th>Email</th>
<th>Backup Date</th>
<th>Aksi</th>
</tr>
<?php while ($row = $result->fetch_assoc()) { ?>
<tr>
<td><?php echo $row['username']; ?></td>
<td><?php echo $row['email']; ?></td>
<td><?php echo $row['backup_date']; ?></td>
<td>
<a href="recover_account.php?id=<?php echo $row['id']; ?>">Pulihkan</a>
</td>
</tr>
<?php } ?>
</table>
📌 Admin bisa melihat daftar akun yang bisa dipulihkan & mengembalikannya sebelum terhapus permanen.
4️⃣ Buat Cron Job untuk Menghapus Backup Setelah 7 Hari
📌 File cron/delete_backup.php
<?php
include '../includes/config.php';
// Hapus backup yang lebih dari 7 hari
$stmt = $conn->prepare("DELETE FROM account_backup WHERE backup_date < DATE_SUB(NOW(), INTERVAL 7 DAY)");
$stmt->execute();
echo "Backup lama berhasil dihapus!";
?>
📌 Backup akan otomatis dihapus setelah 7 hari jika akun tidak dipulihkan.
📌 Tambahkan cron job di server:
crontab -e
0 0 * * * /usr/bin/php /path/to/cron/delete_backup.php
📌 Pastikan /path/to/cron/ sesuai dengan lokasi file di server Anda.
🔥 Sekarang WHM Custom Bisa Memulihkan Akun yang Terhapus!
✔ Sebelum akun dihapus, backup data akun disimpan.
✔ User bisa mengajukan pemulihan dalam waktu 7 hari setelah dihapus.
✔ Admin bisa melihat daftar akun yang bisa dipulihkan & mengembalikannya.
✔ Cron job otomatis menghapus backup setelah 7 hari jika tidak dipulihkan.