/home/ejrndhmu/siapusaha.com/register_reseller.php
<?php
require_once 'config/database.php';
require_once 'includes/functions.php';
startSecureSession();
// Get reseller ID from URL parameter
$reseller_id = $_GET['reseller'] ?? null;
if (!$reseller_id) {
header('Location: login.php');
exit();
}
// Verify reseller exists and is active
$db = new Database();
$db->query('SELECT * FROM users WHERE id = :id AND role = "reseller" AND status = "active"');
$db->bind(':id', $reseller_id);
$reseller = $db->single();
if (!$reseller) {
header('Location: 404.php');
exit();
}
$message = '';
$messageType = '';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$csrf_token = $_POST['csrf_token'] ?? '';
if (!verifyCSRFToken($csrf_token)) {
$message = 'Token keamanan tidak valid.';
$messageType = 'error';
} else {
$full_name = sanitizeInput($_POST['full_name'] ?? '');
$email = sanitizeInput($_POST['email'] ?? '');
$whatsapp_number = sanitizeInput($_POST['whatsapp_number'] ?? '');
$password = $_POST['password'] ?? '';
$confirm_password = $_POST['confirm_password'] ?? '';
// Validation
if (empty($full_name) || empty($email) || empty($password)) {
$message = 'Nama lengkap, email, dan password harus diisi.';
$messageType = 'error';
} elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$message = 'Format email tidak valid.';
$messageType = 'error';
} elseif (strlen($password) < 6) {
$message = 'Password minimal 6 karakter.';
$messageType = 'error';
} elseif ($password !== $confirm_password) {
$message = 'Konfirmasi password tidak cocok.';
$messageType = 'error';
} else {
// Check if email already exists
$existingUser = getUserByEmail($email);
if ($existingUser) {
$message = 'Email sudah terdaftar dalam sistem.';
$messageType = 'error';
} else {
// Generate username from email
$username = strtolower(explode('@', $email)[0]);
$originalUsername = $username;
$counter = 1;
// Make sure username is unique
while (getUserByUsername($username)) {
$username = $originalUsername . $counter;
$counter++;
}
// Create user under this reseller
$result = createUser($username, $email, $password, $full_name, 'user', $reseller_id, $whatsapp_number, null);
if ($result === 'quota_exceeded') {
$message = 'Maaf, quota pendaftaran sudah habis. Silakan hubungi reseller.';
$messageType = 'error';
} elseif ($result) {
// Set user status to inactive
$db = new Database();
$db->query('UPDATE users SET status = "inactive" WHERE id = :id');
$db->bind(':id', $result);
$db->execute();
$message = 'Pendaftaran berhasil! Akun Anda akan diaktivasi setelah verifikasi oleh reseller.';
$messageType = 'success';
// Clear form data
$_POST = [];
} else {
$message = 'Terjadi kesalahan saat mendaftarkan akun. Silakan coba lagi.';
$messageType = 'error';
}
}
}
}
}
?>
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Pendaftaran User - <?= htmlspecialchars($reseller['full_name']) ?></title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" rel="stylesheet">
<style>
body {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
min-height: 100vh;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
}
.card {
border: none;
border-radius: 15px;
box-shadow: 0 10px 30px rgba(0,0,0,0.1);
}
.btn-primary {
background: linear-gradient(45deg, #667eea, #764ba2);
border: none;
border-radius: 10px;
padding: 12px 30px;
font-weight: 600;
transition: all 0.3s ease;
}
.btn-primary:hover {
transform: translateY(-2px);
box-shadow: 0 5px 15px rgba(0,0,0,0.2);
}
.form-control {
border-radius: 10px;
border: 2px solid #e9ecef;
padding: 12px 15px;
transition: all 0.3s ease;
}
.form-control:focus {
border-color: #667eea;
box-shadow: 0 0 0 0.2rem rgba(102, 126, 234, 0.25);
}
.reseller-info {
background: linear-gradient(45deg, #f8f9fa, #e9ecef);
border-radius: 10px;
padding: 20px;
margin-bottom: 30px;
}
</style>
</head>
<body>
<div class="container py-5">
<div class="row justify-content-center">
<div class="col-md-8 col-lg-6">
<div class="card">
<div class="card-body p-5">
<h2 class="text-center mb-4">
<i class="fas fa-user-plus text-primary me-2"></i>
Daftar Akun Baru
</h2>
<!-- Messages -->
<?php if ($message): ?>
<div class="alert alert-<?= $messageType === 'success' ? 'success' : 'danger' ?> alert-dismissible fade show" role="alert">
<i class="fas fa-<?= $messageType === 'success' ? 'check-circle' : 'exclamation-circle' ?> me-2"></i>
<?= htmlspecialchars($message) ?>
<button type="button" class="btn-close" data-bs-dismiss="alert"></button>
</div>
<?php endif; ?>
<form method="POST" id="registrationForm">
<input type="hidden" name="csrf_token" value="<?= generateCSRFToken() ?>">
<div class="mb-3">
<label for="full_name" class="form-label">
<i class="fas fa-user text-primary me-1"></i>
Nama Lengkap *
</label>
<input type="text" class="form-control" id="full_name" name="full_name"
value="<?= htmlspecialchars($_POST['full_name'] ?? '') ?>"
placeholder="Masukkan nama lengkap" required>
</div>
<div class="mb-3">
<label for="email" class="form-label">
<i class="fas fa-envelope text-primary me-1"></i>
Email *
</label>
<input type="email" class="form-control" id="email" name="email"
value="<?= htmlspecialchars($_POST['email'] ?? '') ?>"
placeholder="contoh@email.com" required>
<div class="form-text">Username akan dibuat otomatis dari email</div>
</div>
<div class="mb-3">
<label for="whatsapp_number" class="form-label">
<i class="fab fa-whatsapp text-primary me-1"></i>
Nomor WhatsApp
</label>
<input type="text" class="form-control" id="whatsapp_number" name="whatsapp_number"
value="<?= htmlspecialchars($_POST['whatsapp_number'] ?? '') ?>"
placeholder="628123456789">
<div class="form-text">Format: 628xxxxxxxxx (opsional)</div>
</div>
<div class="mb-3">
<label for="password" class="form-label">
<i class="fas fa-lock text-primary me-1"></i>
Password *
</label>
<input type="password" class="form-control" id="password" name="password"
placeholder="Minimal 6 karakter" required minlength="6">
</div>
<div class="mb-4">
<label for="confirm_password" class="form-label">
<i class="fas fa-lock text-primary me-1"></i>
Konfirmasi Password *
</label>
<input type="password" class="form-control" id="confirm_password" name="confirm_password"
placeholder="Ulangi password" required minlength="6">
</div>
<div class="alert alert-info mb-4">
<i class="fas fa-info-circle me-2"></i>
<strong>Informasi:</strong> Akun akan berstatus tidak aktif setelah pendaftaran dan akan diaktivasi oleh reseller setelah verifikasi.
</div>
<button type="submit" class="btn btn-primary w-100 mb-3">
<i class="fas fa-user-plus me-2"></i>
Daftar Sekarang
</button>
</form>
<div class="text-center">
<p class="text-muted mb-0">Sudah punya akun?</p>
<a href="login.php" class="btn btn-outline-primary">
<i class="fas fa-sign-in-alt me-1"></i>
Login di sini
</a>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
<script>
// Form validation
document.getElementById('registrationForm').addEventListener('submit', function(e) {
const password = document.getElementById('password').value;
const confirmPassword = document.getElementById('confirm_password').value;
if (password !== confirmPassword) {
e.preventDefault();
alert('Konfirmasi password tidak cocok!');
return false;
}
// Show loading state
const submitBtn = this.querySelector('button[type="submit"]');
submitBtn.innerHTML = '<i class="fas fa-spinner fa-spin me-2"></i>Memproses...';
submitBtn.disabled = true;
});
// Phone number formatting
document.getElementById('whatsapp_number').addEventListener('input', function(e) {
let value = e.target.value.replace(/\D/g, '');
if (value.startsWith('08')) {
value = '628' + value.substring(2);
}
e.target.value = value;
});
</script>
</body>
</html>