/home/ejrndhmu/tokobiolink.com/admin/pages/settings.php
<?php
// Handle logo upload
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'upload_logo') {
$csrf_token = $_POST['csrf_token'] ?? '';
if (!verifyCSRFToken($csrf_token)) {
$message = 'Token keamanan tidak valid.';
$messageType = 'error';
} else {
$logo_type = $_POST['logo_type'] ?? '';
if (in_array($logo_type, ['logo_sidebar', 'logo_login'])) {
$upload_result = uploadLogo($_FILES['logo_file'], $logo_type);
if ($upload_result['success']) {
$message = 'Logo berhasil diupload.';
$messageType = 'success';
} else {
$message = $upload_result['message'];
$messageType = 'error';
}
} else {
$message = 'Tipe logo tidak valid.';
$messageType = 'error';
}
}
}
// Handle Telegram settings update
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'update_telegram_settings') {
$csrf_token = $_POST['csrf_token'] ?? '';
if (!verifyCSRFToken($csrf_token)) {
$message = 'Token keamanan tidak valid.';
$messageType = 'error';
} else {
$telegramSettings = [
'telegram_bot_token' => sanitizeInput($_POST['telegram_bot_token'] ?? ''),
'telegram_channel_id' => sanitizeInput($_POST['telegram_channel_id'] ?? ''),
'telegram_notifications_enabled' => isset($_POST['telegram_notifications_enabled']) ? '1' : '0'
];
$success = true;
foreach ($telegramSettings as $key => $value) {
if (!updateSetting($key, $value)) {
$success = false;
break;
}
}
if ($success) {
$message = 'Pengaturan Telegram berhasil disimpan.';
$messageType = 'success';
} else {
$message = 'Gagal menyimpan pengaturan Telegram.';
$messageType = 'error';
}
}
}
// Handle change password
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'change_password') {
$csrf_token = $_POST['csrf_token'] ?? '';
if (!verifyCSRFToken($csrf_token)) {
$message = 'Token keamanan tidak valid.';
$messageType = 'error';
} else {
$old_password = $_POST['old_password'] ?? '';
$new_password = $_POST['new_password'] ?? '';
$confirm_password = $_POST['confirm_password'] ?? '';
// Validate inputs
if (empty($old_password) || empty($new_password) || empty($confirm_password)) {
$message = 'Semua field password harus diisi.';
$messageType = 'error';
} elseif (strlen($new_password) < 6) {
$message = 'Password baru minimal 6 karakter.';
$messageType = 'error';
} elseif ($new_password !== $confirm_password) {
$message = 'Password baru dan konfirmasi password tidak cocok.';
$messageType = 'error';
} else {
// Get current admin data
$db = new Database();
$db->query("SELECT password FROM admins WHERE id = :id");
$db->bind(':id', $_SESSION['admin_id']);
$admin = $db->single();
if ($admin && password_verify($old_password, $admin['password'])) {
// Update password
$hashed_password = password_hash($new_password, PASSWORD_DEFAULT);
$db->query("UPDATE admins SET password = :password WHERE id = :id");
$db->bind(':password', $hashed_password);
$db->bind(':id', $_SESSION['admin_id']);
if ($db->execute()) {
$message = 'Password berhasil diubah.';
$messageType = 'success';
} else {
$message = 'Gagal mengubah password.';
$messageType = 'error';
}
} else {
$message = 'Password lama tidak benar.';
$messageType = 'error';
}
}
}
}
// Handle settings update
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'update_settings') {
$csrf_token = $_POST['csrf_token'] ?? '';
if (!verifyCSRFToken($csrf_token)) {
$message = 'Token keamanan tidak valid.';
$messageType = 'error';
} else {
$settings = [
'site_name' => sanitizeInput($_POST['site_name'] ?? ''),
'site_description' => sanitizeInput($_POST['site_description'] ?? ''),
'contact_email' => sanitizeInput($_POST['contact_email'] ?? ''),
'domain_utama' => sanitizeInput($_POST['domain_utama'] ?? ''),
'admin_whatsapp' => sanitizeInput($_POST['admin_whatsapp'] ?? '')
];
$success = true;
foreach ($settings as $key => $value) {
if (!updateSetting($key, $value)) {
$success = false;
break;
}
}
if ($success) {
$message = 'Pengaturan berhasil disimpan.';
$messageType = 'success';
} else {
$message = 'Gagal menyimpan pengaturan.';
$messageType = 'error';
}
}
}
// Handle email settings update
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'update_email_settings') {
$csrf_token = $_POST['csrf_token'] ?? '';
if (!verifyCSRFToken($csrf_token)) {
$message = 'Token keamanan tidak valid.';
$messageType = 'error';
} else {
$emailSettings = [
'smtp_host' => sanitizeInput($_POST['smtp_host'] ?? ''),
'smtp_port' => sanitizeInput($_POST['smtp_port'] ?? ''),
'smtp_username' => sanitizeInput($_POST['smtp_username'] ?? ''),
'smtp_password' => sanitizeInput($_POST['smtp_password'] ?? ''),
'smtp_encryption' => sanitizeInput($_POST['smtp_encryption'] ?? ''),
'email_from' => sanitizeInput($_POST['email_from'] ?? ''),
'email_from_name' => sanitizeInput($_POST['email_from_name'] ?? ''),
'email_reply_to' => sanitizeInput($_POST['email_reply_to'] ?? ''),
'admin_email' => sanitizeInput($_POST['admin_email'] ?? '')
];
$success = true;
foreach ($emailSettings as $key => $value) {
if (!updateSetting($key, $value)) {
$success = false;
break;
}
}
if ($success) {
$message = 'Pengaturan email berhasil disimpan.';
$messageType = 'success';
} else {
$message = 'Gagal menyimpan pengaturan email.';
$messageType = 'error';
}
}
}
// Handle email notification settings update
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'update_email_notification_settings') {
$csrf_token = $_POST['csrf_token'] ?? '';
if (!verifyCSRFToken($csrf_token)) {
$message = 'Token keamanan tidak valid.';
$messageType = 'error';
} else {
$emailNotificationSettings = [
'email_notifications_enabled' => isset($_POST['email_notifications_enabled']) ? '1' : '0',
'email_checkout_notifications' => isset($_POST['email_checkout_notifications']) ? '1' : '0',
'email_activation_notifications' => isset($_POST['email_activation_notifications']) ? '1' : '0',
'email_cancellation_notifications' => isset($_POST['email_cancellation_notifications']) ? '1' : '0',
'email_checkout_subject' => sanitizeInput($_POST['email_checkout_subject'] ?? ''),
'email_checkout_content' => $_POST['email_checkout_content'] ?? '',
'email_activation_subject' => sanitizeInput($_POST['email_activation_subject'] ?? ''),
'email_activation_content' => $_POST['email_activation_content'] ?? '',
'email_cancellation_subject' => sanitizeInput($_POST['email_cancellation_subject'] ?? ''),
'email_cancellation_content' => $_POST['email_cancellation_content'] ?? '',
'email_checkout_template' => $_POST['email_checkout_template'] ?? '',
'email_activation_template' => $_POST['email_activation_template'] ?? '',
'email_cancellation_template' => $_POST['email_cancellation_template'] ?? ''
];
$success = true;
foreach ($emailNotificationSettings as $key => $value) {
if (!updateSetting($key, $value)) {
$success = false;
break;
}
}
if ($success) {
$message = 'Pengaturan notifikasi email berhasil disimpan.';
$messageType = 'success';
} else {
$message = 'Gagal menyimpan pengaturan notifikasi email.';
$messageType = 'error';
}
}
}
// Handle email templates update
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'update_email_templates') {
$csrf_token = $_POST['csrf_token'] ?? '';
if (!verifyCSRFToken($csrf_token)) {
$message = 'Token keamanan tidak valid.';
$messageType = 'error';
} else {
$emailTemplates = [
'email_checkout_subject' => sanitizeInput($_POST['email_checkout_subject'] ?? ''),
'email_checkout_content' => $_POST['email_checkout_content'] ?? '',
'email_activation_subject' => sanitizeInput($_POST['email_activation_subject'] ?? ''),
'email_activation_content' => $_POST['email_activation_content'] ?? '',
'email_cancellation_subject' => sanitizeInput($_POST['email_cancellation_subject'] ?? ''),
'email_cancellation_content' => $_POST['email_cancellation_content'] ?? ''
];
$success = true;
foreach ($emailTemplates as $key => $value) {
if (!updateSetting($key, $value)) {
$success = false;
break;
}
}
if ($success) {
$message = 'Template email berhasil disimpan.';
$messageType = 'success';
} else {
$message = 'Gagal menyimpan template email.';
$messageType = 'error';
}
}
}
// Handle test email
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'test_email') {
$csrf_token = $_POST['csrf_token'] ?? '';
if (!verifyCSRFToken($csrf_token)) {
$message = 'Token keamanan tidak valid.';
$messageType = 'error';
} else {
$testEmail = sanitizeInput($_POST['test_email'] ?? '');
if (filter_var($testEmail, FILTER_VALIDATE_EMAIL)) {
require_once __DIR__ . '/../../config/email.php';
require_once __DIR__ . '/../../includes/functions.php';
$result = testEmailConfiguration($testEmail);
if ($result) {
$message = 'Email test berhasil dikirim ke ' . $testEmail;
$messageType = 'success';
} else {
$message = 'Gagal mengirim email test. Periksa konfigurasi SMTP.';
$messageType = 'error';
}
} else {
$message = 'Email tidak valid.';
$messageType = 'error';
}
}
}
// Handle Mailketing settings update
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'update_mailketing_settings') {
$csrf_token = $_POST['csrf_token'] ?? '';
if (!verifyCSRFToken($csrf_token)) {
$message = 'Token keamanan tidak valid.';
$messageType = 'error';
} else {
$mailketingSettings = [
'mailketing_api_token' => sanitizeInput($_POST['mailketing_api_token'] ?? ''),
'mailketing_list_id' => sanitizeInput($_POST['mailketing_list_id'] ?? ''),
'mailketing_auto_sync' => isset($_POST['mailketing_auto_sync']) ? '1' : '0'
];
$success = true;
foreach ($mailketingSettings as $key => $value) {
if (!updateSetting($key, $value)) {
$success = false;
break;
}
}
if ($success) {
$message = 'Pengaturan Mailketing berhasil disimpan.';
$messageType = 'success';
} else {
$message = 'Gagal menyimpan pengaturan Mailketing.';
$messageType = 'error';
}
}
}
// Handle test Mailketing connection
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'test_mailketing') {
$csrf_token = $_POST['csrf_token'] ?? '';
if (!verifyCSRFToken($csrf_token)) {
$message = 'Token keamanan tidak valid.';
$messageType = 'error';
} else {
require_once __DIR__ . '/../../includes/mailketing.php';
$mailketing = new MailketingAPI();
$result = $mailketing->testConnection();
if ($result['status'] === 'success') {
$message = 'Koneksi Mailketing berhasil!';
$messageType = 'success';
} else {
$message = 'Koneksi Mailketing gagal: ' . $result['message'];
$messageType = 'error';
}
}
}
// Handle sync users to Mailketing
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'sync_users_mailketing') {
$csrf_token = $_POST['csrf_token'] ?? '';
if (!verifyCSRFToken($csrf_token)) {
$message = 'Token keamanan tidak valid.';
$messageType = 'error';
} else {
require_once __DIR__ . '/../../includes/mailketing.php';
// Get all users with email
$stmt = $pdo->prepare("SELECT id, username, full_name, email, phone, created_at FROM users WHERE email IS NOT NULL AND email != ''");
$stmt->execute();
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);
if (empty($users)) {
$message = 'Tidak ada user yang ditemukan untuk disinkronisasi';
$messageType = 'error';
} else {
$result = bulkSyncUsersToMailketing($users);
if ($result['success_count'] > 0) {
$message = "Berhasil sinkronisasi {$result['success_count']} user ke Mailketing";
if ($result['failed_count'] > 0) {
$message .= ", {$result['failed_count']} user gagal";
}
$messageType = 'success';
} else {
$message = 'Semua user gagal disinkronisasi ke Mailketing';
$messageType = 'error';
}
}
}
}
// Handle test email notification
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'test_email_notification') {
$csrf_token = $_POST['csrf_token'] ?? '';
if (!verifyCSRFToken($csrf_token)) {
$message = 'Token keamanan tidak valid.';
$messageType = 'error';
} else {
require_once __DIR__ . '/../../includes/email.php';
$testEmail = sanitizeInput($_POST['test_notification_email'] ?? '');
$notificationType = sanitizeInput($_POST['notification_type'] ?? '');
$emailMethod = sanitizeInput($_POST['email_method'] ?? 'smtp');
if (empty($testEmail) || !filter_var($testEmail, FILTER_VALIDATE_EMAIL)) {
$message = 'Email tujuan tidak valid.';
$messageType = 'error';
} elseif (!in_array($notificationType, ['checkout', 'activation', 'cancellation'])) {
$message = 'Jenis notifikasi tidak valid.';
$messageType = 'error';
} else {
// Create sample data for testing
$sampleData = [
'customer_name' => 'Test Customer',
'order_number' => 'TEST-' . date('Ymd-His'),
'package_name' => 'Paket Test Notifikasi',
'package_price' => 'Rp 100.000',
'customer_email' => $testEmail
];
$success = false;
$errorMessage = '';
try {
if ($emailMethod === 'mailketing') {
// Test with Mailketing API
switch ($notificationType) {
case 'checkout':
$success = sendMailketingCheckoutNotification($testEmail, $sampleData);
break;
case 'activation':
$success = sendMailketingActivationNotification($testEmail, $sampleData);
break;
case 'cancellation':
$success = sendMailketingCancellationNotification($testEmail, $sampleData);
break;
}
} else {
// Test with SMTP
switch ($notificationType) {
case 'checkout':
$success = sendCheckoutNotification($testEmail, $sampleData);
break;
case 'activation':
$success = sendActivationNotification($testEmail, $sampleData);
break;
case 'cancellation':
$success = sendCancellationNotification($testEmail, $sampleData);
break;
}
}
if ($success) {
$methodText = ($emailMethod === 'mailketing') ? 'Mailketing API' : 'SMTP';
$typeText = '';
switch ($notificationType) {
case 'checkout': $typeText = 'Checkout'; break;
case 'activation': $typeText = 'Aktivasi'; break;
case 'cancellation': $typeText = 'Pembatalan'; break;
}
$message = "Email notifikasi {$typeText} berhasil dikirim ke {$testEmail} menggunakan {$methodText}.";
$messageType = 'success';
} else {
$message = 'Gagal mengirim email notifikasi. Periksa konfigurasi email Anda.';
$messageType = 'error';
}
} catch (Exception $e) {
$message = 'Error: ' . $e->getMessage();
$messageType = 'error';
}
}
}
}
// Handle Meta Ads Pixel settings update
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'update_meta_pixel_settings') {
$csrf_token = $_POST['csrf_token'] ?? '';
if (!verifyCSRFToken($csrf_token)) {
$message = 'Token keamanan tidak valid.';
$messageType = 'error';
} else {
$metaPixelSettings = [
'meta_pixel_id' => sanitizeInput($_POST['meta_pixel_id'] ?? ''),
'meta_pixel_enabled' => isset($_POST['meta_pixel_enabled']) ? '1' : '0',
'meta_pixel_checkout_event' => sanitizeInput($_POST['meta_pixel_checkout_event'] ?? 'Purchase'),
'meta_pixel_invoice_event' => sanitizeInput($_POST['meta_pixel_invoice_event'] ?? 'ViewContent'),
'meta_pixel_dashboard_event' => sanitizeInput($_POST['meta_pixel_dashboard_event'] ?? 'PageView')
];
$success = true;
foreach ($metaPixelSettings as $key => $value) {
if (!updateSetting($key, $value)) {
$success = false;
break;
}
}
if ($success) {
$message = 'Pengaturan Meta Ads Pixel berhasil disimpan.';
$messageType = 'success';
} else {
$message = 'Gagal menyimpan pengaturan Meta Ads Pixel.';
$messageType = 'error';
}
}
}
// Get current settings
$siteName = getSetting('site_name', 'Panel Digital');
$siteDescription = getSetting('site_description', 'Platform Member Area Produk Digital');
$contactEmail = getSetting('contact_email', 'support@paneldigital.com');
$domainUtama = getSetting('domain_utama', '');
$adminWhatsapp = getSetting('admin_whatsapp', '');
$logoSidebar = getLogoUrl('sidebar');
$logoLogin = getLogoUrl('login');
// Get email settings
$smtpHost = getSetting('smtp_host', 'smtp.gmail.com');
$smtpPort = getSetting('smtp_port', '587');
$smtpUsername = getSetting('smtp_username', 'your-email@gmail.com');
$smtpPassword = getSetting('smtp_password', 'your-app-password');
$smtpEncryption = getSetting('smtp_encryption', 'tls');
$emailFrom = getSetting('email_from', 'noreply@kiblatdigital.com');
$emailFromName = getSetting('email_from_name', 'Kiblat Digital');
$emailReplyTo = getSetting('email_reply_to', 'support@kiblatdigital.com');
$adminEmail = getSetting('admin_email', '');
// Get email templates
$emailCheckoutSubject = getSetting('email_checkout_subject', 'Konfirmasi Pesanan - {{order_number}}');
$emailCheckoutContent = getSetting('email_checkout_content', '<p>Halo {{customer_name}},</p><p>Terima kasih telah melakukan pemesanan. Berikut detail pesanan Anda:</p><p><strong>Nomor Pesanan:</strong> {{order_number}}<br><strong>Paket:</strong> {{package_name}}<br><strong>Harga:</strong> {{package_price}}</p><p>Pesanan Anda akan diproses setelah pembayaran dikonfirmasi.</p>');
$emailActivationSubject = getSetting('email_activation_subject', 'Pesanan Diaktivasi - {{order_number}}');
$emailActivationContent = getSetting('email_activation_content', '<p>Halo {{customer_name}},</p><p>Selamat! Pesanan Anda telah diaktivasi.</p><p><strong>Nomor Pesanan:</strong> {{order_number}}<br><strong>Paket:</strong> {{package_name}}</p><p>Anda sekarang dapat mengakses layanan yang telah Anda pesan.</p>');
$emailCancellationSubject = getSetting('email_cancellation_subject', 'Pesanan Dibatalkan - {{order_number}}');
$emailCancellationContent = getSetting('email_cancellation_content', '<p>Halo {{customer_name}},</p><p>Kami informasikan bahwa pesanan Anda telah dibatalkan.</p><p><strong>Nomor Pesanan:</strong> {{order_number}}<br><strong>Paket:</strong> {{package_name}}</p><p>Jika Anda memiliki pertanyaan, silakan hubungi tim support kami.</p>');
// Get Telegram settings
$telegramBotToken = getSetting('telegram_bot_token', '');
$telegramChannelId = getSetting('telegram_channel_id', '');
$telegramNotificationsEnabled = getSetting('telegram_notifications_enabled', '0');
?>
<div class="grid grid-cols-1 lg:grid-cols-2 gap-6">
<!-- General Settings -->
<div class="bg-white rounded-lg shadow-sm border border-gray-200">
<div class="p-6 border-b border-gray-200">
<h3 class="text-lg font-semibold text-gray-900 flex items-center">
<i class="fas fa-cog text-blue-primary mr-2"></i>
Pengaturan Umum
</h3>
</div>
<form method="POST" class="p-6 space-y-4">
<input type="hidden" name="csrf_token" value="<?php echo generateCSRFToken(); ?>">
<input type="hidden" name="action" value="update_settings">
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Nama Website</label>
<input type="text" name="site_name" value="<?php echo htmlspecialchars($siteName); ?>" required class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-primary focus:border-transparent">
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Deskripsi Website</label>
<textarea name="site_description" rows="3" class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-primary focus:border-transparent"><?php echo htmlspecialchars($siteDescription); ?></textarea>
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Email Kontak</label>
<input type="email" name="contact_email" value="<?php echo htmlspecialchars($contactEmail); ?>" required class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-primary focus:border-transparent">
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Domain Utama</label>
<input type="url" name="domain_utama" value="<?php echo htmlspecialchars($domainUtama); ?>" placeholder="https://example.com" class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-primary focus:border-transparent">
<p class="text-xs text-gray-500 mt-1">Domain utama untuk redirect dan link. Contoh: https://example.com (tanpa slash di akhir)</p>
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Nomor WhatsApp Admin</label>
<input type="text" name="admin_whatsapp" value="<?php echo htmlspecialchars($adminWhatsapp); ?>" placeholder="628123456789" class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-primary focus:border-transparent">
<p class="text-xs text-gray-500 mt-1">Nomor WhatsApp admin untuk konfirmasi pembayaran. Format: 628123456789 (tanpa tanda +)</p>
</div>
<div class="pt-4">
<button type="submit" class="w-full bg-blue-primary hover:bg-blue-dark text-white font-semibold py-2 px-4 rounded-lg transition duration-200">
<i class="fas fa-save mr-2"></i>
Simpan Pengaturan
</button>
</div>
</form>
</div>
<!-- Logo Settings -->
<div class="bg-white rounded-lg shadow-sm border border-gray-200">
<div class="p-6 border-b border-gray-200">
<h3 class="text-lg font-semibold text-gray-900 flex items-center">
<i class="fas fa-image text-blue-primary mr-2"></i>
Pengaturan Logo
</h3>
</div>
<div class="p-6 space-y-6">
<!-- Logo Sidebar -->
<div class="border border-gray-200 rounded-lg p-4">
<h4 class="text-md font-medium text-gray-800 mb-3">Logo Sidebar</h4>
<div class="flex items-center space-x-4 mb-4">
<div class="w-16 h-16 bg-gray-100 rounded-lg flex items-center justify-center border">
<?php if ($logoSidebar): ?>
<img src="<?php echo htmlspecialchars($logoSidebar); ?>" alt="Logo Sidebar" class="max-w-full max-h-full object-contain">
<?php else: ?>
<i class="fas fa-image text-gray-400 text-xl"></i>
<?php endif; ?>
</div>
<div class="flex-1">
<p class="text-sm text-gray-600">Logo yang ditampilkan di sidebar admin, reseller, dan user</p>
<p class="text-xs text-gray-500 mt-1">Format: JPG, PNG, GIF, SVG | Maksimal: 2MB</p>
</div>
</div>
<form method="POST" enctype="multipart/form-data" class="flex items-center space-x-3">
<input type="hidden" name="csrf_token" value="<?php echo generateCSRFToken(); ?>">
<input type="hidden" name="action" value="upload_logo">
<input type="hidden" name="logo_type" value="logo_sidebar">
<input type="file" name="logo_file" accept=".jpg,.jpeg,.png,.gif,.svg" required class="flex-1 text-sm text-gray-500 file:mr-4 file:py-2 file:px-4 file:rounded-lg file:border-0 file:text-sm file:font-semibold file:bg-blue-50 file:text-blue-700 hover:file:bg-blue-100">
<button type="submit" class="bg-blue-primary hover:bg-blue-dark text-white px-4 py-2 rounded-lg text-sm font-medium transition duration-200">
<i class="fas fa-upload mr-1"></i>
Upload
</button>
</form>
</div>
<!-- Logo Login -->
<div class="border border-gray-200 rounded-lg p-4">
<h4 class="text-md font-medium text-gray-800 mb-3">Logo Login</h4>
<div class="flex items-center space-x-4 mb-4">
<div class="w-16 h-16 bg-gray-100 rounded-lg flex items-center justify-center border">
<?php if ($logoLogin): ?>
<img src="<?php echo htmlspecialchars($logoLogin); ?>" alt="Logo Login" class="max-w-full max-h-full object-contain">
<?php else: ?>
<i class="fas fa-image text-gray-400 text-xl"></i>
<?php endif; ?>
</div>
<div class="flex-1">
<p class="text-sm text-gray-600">Logo yang ditampilkan di halaman login admin dan user</p>
<p class="text-xs text-gray-500 mt-1">Format: JPG, PNG, GIF, SVG | Maksimal: 2MB</p>
</div>
</div>
<form method="POST" enctype="multipart/form-data" class="flex items-center space-x-3">
<input type="hidden" name="csrf_token" value="<?php echo generateCSRFToken(); ?>">
<input type="hidden" name="action" value="upload_logo">
<input type="hidden" name="logo_type" value="logo_login">
<input type="file" name="logo_file" accept=".jpg,.jpeg,.png,.gif,.svg" required class="flex-1 text-sm text-gray-500 file:mr-4 file:py-2 file:px-4 file:rounded-lg file:border-0 file:text-sm file:font-semibold file:bg-blue-50 file:text-blue-700 hover:file:bg-blue-100">
<button type="submit" class="bg-blue-primary hover:bg-blue-dark text-white px-4 py-2 rounded-lg text-sm font-medium transition duration-200">
<i class="fas fa-upload mr-1"></i>
Upload
</button>
</form>
</div>
</div>
</div>
<!-- Telegram Notification Settings -->
<div class="bg-white rounded-lg shadow-sm border border-gray-200">
<div class="p-6 border-b border-gray-200">
<h3 class="text-lg font-semibold text-gray-900 flex items-center">
<i class="fab fa-telegram text-blue-primary mr-2"></i>
Notifikasi Telegram
</h3>
</div>
<form method="POST" class="p-6 space-y-4">
<input type="hidden" name="csrf_token" value="<?php echo generateCSRFToken(); ?>">
<input type="hidden" name="action" value="update_telegram_settings">
<div class="flex items-center mb-4">
<input type="checkbox" name="telegram_notifications_enabled" id="telegram_notifications_enabled"
<?php echo $telegramNotificationsEnabled === '1' ? 'checked' : ''; ?>
class="h-4 w-4 text-blue-primary focus:ring-blue-primary border-gray-300 rounded">
<label for="telegram_notifications_enabled" class="ml-2 block text-sm text-gray-700">
Aktifkan notifikasi Telegram
</label>
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Token Bot Telegram</label>
<input type="text" name="telegram_bot_token" value="<?php echo htmlspecialchars($telegramBotToken); ?>"
placeholder="123456789:ABCdefGHIjklMNOpqrsTUVwxyz"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-primary focus:border-transparent">
<p class="text-xs text-gray-500 mt-1">Token bot yang didapat dari @BotFather di Telegram</p>
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Channel ID Telegram</label>
<input type="text" name="telegram_channel_id" value="<?php echo htmlspecialchars($telegramChannelId); ?>"
placeholder="-1001234567890"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-primary focus:border-transparent">
<p class="text-xs text-gray-500 mt-1">ID channel/grup Telegram untuk menerima notifikasi. Dimulai dengan tanda minus (-)</p>
</div>
<div class="bg-blue-50 border border-blue-200 rounded-lg p-4">
<h4 class="text-sm font-medium text-blue-800 mb-2">Cara Setup Telegram Bot:</h4>
<ol class="text-xs text-blue-700 space-y-1 list-decimal list-inside">
<li>Chat @BotFather di Telegram</li>
<li>Ketik /newbot dan ikuti instruksi</li>
<li>Salin token bot yang diberikan</li>
<li>Tambahkan bot ke channel/grup Anda</li>
<li>Berikan admin permission ke bot</li>
<li>Gunakan @userinfobot untuk mendapatkan Channel ID</li>
</ol>
</div>
<div class="pt-4">
<button type="submit" class="w-full bg-blue-primary hover:bg-blue-dark text-white font-semibold py-2 px-4 rounded-lg transition duration-200">
<i class="fas fa-save mr-2"></i>
Simpan Pengaturan Telegram
</button>
</div>
</form>
</div>
<!-- System Information -->
<div class="bg-white rounded-lg shadow-sm border border-gray-200">
<div class="p-6 border-b border-gray-200">
<h3 class="text-lg font-semibold text-gray-900 flex items-center">
<i class="fas fa-info-circle text-blue-primary mr-2"></i>
Informasi Sistem
</h3>
</div>
<div class="p-6 space-y-4">
<div class="flex justify-between items-center py-2 border-b border-gray-100">
<span class="text-sm font-medium text-gray-600">Versi PHP</span>
<span class="text-sm text-gray-900"><?php echo phpversion(); ?></span>
</div>
<div class="flex justify-between items-center py-2 border-b border-gray-100">
<span class="text-sm font-medium text-gray-600">Server Software</span>
<span class="text-sm text-gray-900"><?php echo $_SERVER['SERVER_SOFTWARE'] ?? 'Unknown'; ?></span>
</div>
<div class="flex justify-between items-center py-2 border-b border-gray-100">
<span class="text-sm font-medium text-gray-600">Database</span>
<span class="text-sm text-gray-900">MySQL</span>
</div>
<div class="flex justify-between items-center py-2 border-b border-gray-100">
<span class="text-sm font-medium text-gray-600">Timezone</span>
<span class="text-sm text-gray-900"><?php echo date_default_timezone_get(); ?></span>
</div>
<div class="flex justify-between items-center py-2">
<span class="text-sm font-medium text-gray-600">Waktu Server</span>
<span class="text-sm text-gray-900"><?php echo date('Y-m-d H:i:s'); ?></span>
</div>
</div>
</div>
<!-- Admin Account Settings -->
<div class="bg-white rounded-lg shadow-sm border border-gray-200">
<div class="p-6 border-b border-gray-200">
<h3 class="text-lg font-semibold text-gray-900 flex items-center">
<i class="fas fa-user-shield text-blue-primary mr-2"></i>
Akun Administrator
</h3>
</div>
<div class="p-6 space-y-4">
<div class="flex justify-between items-center py-2 border-b border-gray-100">
<span class="text-sm font-medium text-gray-600">Username</span>
<span class="text-sm text-gray-900"><?php echo htmlspecialchars($_SESSION['username']); ?></span>
</div>
<div class="flex justify-between items-center py-2 border-b border-gray-100">
<span class="text-sm font-medium text-gray-600">Nama Lengkap</span>
<span class="text-sm text-gray-900"><?php echo htmlspecialchars($_SESSION['full_name']); ?></span>
</div>
<div class="pt-4">
<button onclick="openChangePasswordModal()" class="w-full bg-gray-600 hover:bg-gray-700 text-white font-semibold py-2 px-4 rounded-lg transition duration-200">
<i class="fas fa-key mr-2"></i>
Ubah Password
</button>
</div>
</div>
</div>
<!-- Email Settings -->
<div class="bg-white rounded-lg shadow-sm border border-gray-200">
<div class="p-6 border-b border-gray-200">
<h3 class="text-lg font-semibold text-gray-900 flex items-center">
<i class="fas fa-envelope text-blue-primary mr-2"></i>
Pengaturan Email SMTP
</h3>
</div>
<form method="POST" class="p-6 space-y-4">
<input type="hidden" name="csrf_token" value="<?php echo generateCSRFToken(); ?>">
<input type="hidden" name="action" value="update_email_settings">
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">SMTP Host</label>
<input type="text" name="smtp_host" value="<?php echo htmlspecialchars($smtpHost); ?>" required class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-primary focus:border-transparent">
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">SMTP Port</label>
<input type="number" name="smtp_port" value="<?php echo htmlspecialchars($smtpPort); ?>" required class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-primary focus:border-transparent">
</div>
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">SMTP Username</label>
<input type="email" name="smtp_username" value="<?php echo htmlspecialchars($smtpUsername); ?>" required class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-primary focus:border-transparent">
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">SMTP Password</label>
<input type="password" name="smtp_password" value="<?php echo htmlspecialchars($smtpPassword); ?>" required class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-primary focus:border-transparent">
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Enkripsi</label>
<select name="smtp_encryption" required class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-primary focus:border-transparent">
<option value="tls" <?php echo $smtpEncryption === 'tls' ? 'selected' : ''; ?>>TLS</option>
<option value="ssl" <?php echo $smtpEncryption === 'ssl' ? 'selected' : ''; ?>>SSL</option>
</select>
</div>
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Email Pengirim</label>
<input type="email" name="email_from" value="<?php echo htmlspecialchars($emailFrom); ?>" required class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-primary focus:border-transparent">
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Nama Pengirim</label>
<input type="text" name="email_from_name" value="<?php echo htmlspecialchars($emailFromName); ?>" required class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-primary focus:border-transparent">
</div>
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Email Reply-To</label>
<input type="email" name="email_reply_to" value="<?php echo htmlspecialchars($emailReplyTo); ?>" required class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-primary focus:border-transparent">
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Email Admin (Penerima Notifikasi)</label>
<input type="email" name="admin_email" value="<?php echo htmlspecialchars($adminEmail); ?>" placeholder="admin@domain.com" class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-primary focus:border-transparent">
<p class="text-xs text-gray-500 mt-1">Email admin yang akan menerima notifikasi order baru dari customer</p>
</div>
<div class="pt-4">
<button type="submit" class="w-full bg-blue-primary hover:bg-blue-dark text-white font-semibold py-2 px-4 rounded-lg transition duration-200">
<i class="fas fa-save mr-2"></i>
Simpan Pengaturan Email
</button>
</div>
</form>
</div>
<!-- Email Test -->
<div class="bg-white rounded-lg shadow-sm border border-gray-200">
<div class="p-6 border-b border-gray-200">
<h3 class="text-lg font-semibold text-gray-900 flex items-center">
<i class="fas fa-paper-plane text-blue-primary mr-2"></i>
Test Email
</h3>
</div>
<form method="POST" class="p-6 space-y-4">
<input type="hidden" name="csrf_token" value="<?php echo generateCSRFToken(); ?>">
<input type="hidden" name="action" value="test_email">
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Email Tujuan Test</label>
<input type="email" name="test_email" placeholder="test@example.com" required class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-primary focus:border-transparent">
</div>
<div class="pt-4">
<button type="submit" class="w-full bg-green-600 hover:bg-green-700 text-white font-semibold py-2 px-4 rounded-lg transition duration-200">
<i class="fas fa-paper-plane mr-2"></i>
Kirim Email Test
</button>
</div>
</form>
</div>
<!-- Test Email Notifications -->
<div class="bg-white rounded-lg shadow-sm border border-gray-200">
<div class="p-6 border-b border-gray-200">
<h3 class="text-lg font-semibold text-gray-900 flex items-center">
<i class="fas fa-bell text-blue-primary mr-2"></i>
Test Email Notifikasi
</h3>
<p class="text-sm text-gray-600 mt-1">Test email notifikasi checkout, aktivasi, dan pembatalan dengan data sample</p>
</div>
<form method="POST" class="p-6 space-y-4">
<input type="hidden" name="csrf_token" value="<?php echo generateCSRFToken(); ?>">
<input type="hidden" name="action" value="test_email_notification">
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Email Tujuan Test</label>
<input type="email" name="test_notification_email" placeholder="test@example.com" required class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-primary focus:border-transparent">
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Jenis Notifikasi</label>
<select name="notification_type" required class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-primary focus:border-transparent">
<option value="checkout">Notifikasi Checkout</option>
<option value="activation">Notifikasi Aktivasi</option>
<option value="cancellation">Notifikasi Pembatalan</option>
</select>
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Metode Pengiriman</label>
<select name="email_method" required class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-primary focus:border-transparent">
<option value="smtp">SMTP (Email Biasa)</option>
<option value="mailketing">Mailketing API</option>
</select>
</div>
<div class="bg-gray-50 p-4 rounded-lg">
<h5 class="text-sm font-medium text-gray-700 mb-2">Data Sample yang Akan Digunakan:</h5>
<ul class="text-xs text-gray-600 space-y-1">
<li><strong>Nama Customer:</strong> Test Customer</li>
<li><strong>Nomor Order:</strong> TEST-<?php echo date('Ymd-His'); ?></li>
<li><strong>Nama Paket:</strong> Paket Test Notifikasi</li>
<li><strong>Harga Paket:</strong> Rp 100.000</li>
</ul>
</div>
<div class="pt-4">
<button type="submit" class="w-full bg-purple-600 hover:bg-purple-700 text-white font-semibold py-2 px-4 rounded-lg transition duration-200">
<i class="fas fa-paper-plane mr-2"></i>
Kirim Test Notifikasi
</button>
</div>
</form>
</div>
</div>
<!-- Email Templates -->
<div class="bg-white rounded-lg shadow-sm border border-gray-200 col-span-1 lg:col-span-2">
<div class="p-6 border-b border-gray-200">
<h3 class="text-lg font-semibold text-gray-900 flex items-center">
<i class="fas fa-edit text-blue-primary mr-2"></i>
Template Email
</h3>
<p class="text-sm text-gray-600 mt-1">Atur konten email yang dikirim ke pelanggan. Gunakan placeholder: {{customer_name}}, {{order_number}}, {{package_name}}, {{package_price}}</p>
</div>
<form method="POST" class="p-6 space-y-6">
<input type="hidden" name="csrf_token" value="<?php echo generateCSRFToken(); ?>">
<input type="hidden" name="action" value="update_email_templates">
<!-- Checkout Email Template -->
<div class="border border-gray-200 rounded-lg p-4">
<h4 class="text-md font-medium text-gray-800 mb-3 flex items-center">
<i class="fas fa-shopping-cart text-green-600 mr-2"></i>
Email Konfirmasi Checkout
</h4>
<div class="space-y-3">
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Subject Email</label>
<input type="text" name="email_checkout_subject" value="<?php echo htmlspecialchars($emailCheckoutSubject); ?>" required class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-primary focus:border-transparent">
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Konten Email</label>
<textarea name="email_checkout_content" rows="4" required class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-primary focus:border-transparent"><?php echo htmlspecialchars($emailCheckoutContent); ?></textarea>
</div>
</div>
</div>
<!-- Activation Email Template -->
<div class="border border-gray-200 rounded-lg p-4">
<h4 class="text-md font-medium text-gray-800 mb-3 flex items-center">
<i class="fas fa-check-circle text-blue-600 mr-2"></i>
Email Aktivasi Pesanan
</h4>
<div class="space-y-3">
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Subject Email</label>
<input type="text" name="email_activation_subject" value="<?php echo htmlspecialchars($emailActivationSubject); ?>" required class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-primary focus:border-transparent">
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Konten Email</label>
<textarea name="email_activation_content" rows="4" required class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-primary focus:border-transparent"><?php echo htmlspecialchars($emailActivationContent); ?></textarea>
</div>
</div>
</div>
<!-- Cancellation Email Template -->
<div class="border border-gray-200 rounded-lg p-4">
<h4 class="text-md font-medium text-gray-800 mb-3 flex items-center">
<i class="fas fa-times-circle text-red-600 mr-2"></i>
Email Pembatalan Pesanan
</h4>
<div class="space-y-3">
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Subject Email</label>
<input type="text" name="email_cancellation_subject" value="<?php echo htmlspecialchars($emailCancellationSubject); ?>" required class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-primary focus:border-transparent">
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Konten Email</label>
<textarea name="email_cancellation_content" rows="4" required class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-primary focus:border-transparent"><?php echo htmlspecialchars($emailCancellationContent); ?></textarea>
</div>
</div>
</div>
<div class="pt-4">
<button type="submit" class="w-full bg-purple-600 hover:bg-purple-700 text-white font-semibold py-2 px-4 rounded-lg transition duration-200">
<i class="fas fa-save mr-2"></i>
Simpan Template Email
</button>
</div>
</form>
</div>
<!-- Meta Ads Pixel Settings -->
<div class="bg-white rounded-lg shadow-sm border border-gray-200">
<div class="p-6 border-b border-gray-200">
<h3 class="text-lg font-semibold text-gray-900 flex items-center">
<i class="fab fa-facebook text-blue-600 mr-2"></i>
Pengaturan Meta Ads Pixel
</h3>
<p class="text-sm text-gray-600 mt-1">Konfigurasi Meta (Facebook) Ads Pixel untuk tracking konversi dan event</p>
</div>
<form method="POST" class="p-6 space-y-6">
<input type="hidden" name="csrf_token" value="<?php echo generateCSRFToken(); ?>">
<input type="hidden" name="action" value="update_meta_pixel_settings">
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Meta Pixel ID</label>
<input type="text" name="meta_pixel_id" value="<?php echo htmlspecialchars(getSetting('meta_pixel_id', '')); ?>" placeholder="Masukkan Meta Pixel ID (contoh: 123456789012345)" class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-primary focus:border-transparent">
<p class="text-xs text-gray-500 mt-1">Dapatkan Pixel ID dari Facebook Ads Manager > Events Manager</p>
</div>
<div class="flex items-center">
<input type="checkbox" name="meta_pixel_enabled" id="meta_pixel_enabled" value="1" <?php echo getSetting('meta_pixel_enabled', '0') === '1' ? 'checked' : ''; ?> class="h-4 w-4 text-blue-primary focus:ring-blue-primary border-gray-300 rounded">
<label for="meta_pixel_enabled" class="ml-2 block text-sm text-gray-700">
Aktifkan Meta Ads Pixel
</label>
</div>
<div class="border border-gray-200 rounded-lg p-4">
<h4 class="text-md font-medium text-gray-800 mb-3 flex items-center">
<i class="fas fa-chart-line text-green-600 mr-2"></i>
Konfigurasi Event Tracking
</h4>
<div class="space-y-4">
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Event untuk Halaman Checkout</label>
<select name="meta_pixel_checkout_event" class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-primary focus:border-transparent">
<option value="Purchase" <?php echo getSetting('meta_pixel_checkout_event', 'Purchase') === 'Purchase' ? 'selected' : ''; ?>>Purchase (Pembelian)</option>
<option value="InitiateCheckout" <?php echo getSetting('meta_pixel_checkout_event', 'Purchase') === 'InitiateCheckout' ? 'selected' : ''; ?>>InitiateCheckout (Mulai Checkout)</option>
<option value="AddToCart" <?php echo getSetting('meta_pixel_checkout_event', 'Purchase') === 'AddToCart' ? 'selected' : ''; ?>>AddToCart (Tambah ke Keranjang)</option>
<option value="Lead" <?php echo getSetting('meta_pixel_checkout_event', 'Purchase') === 'Lead' ? 'selected' : ''; ?>>Lead (Prospek)</option>
</select>
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Event untuk Halaman Invoice</label>
<select name="meta_pixel_invoice_event" class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-primary focus:border-transparent">
<option value="ViewContent" <?php echo getSetting('meta_pixel_invoice_event', 'ViewContent') === 'ViewContent' ? 'selected' : ''; ?>>ViewContent (Lihat Konten)</option>
<option value="Purchase" <?php echo getSetting('meta_pixel_invoice_event', 'ViewContent') === 'Purchase' ? 'selected' : ''; ?>>Purchase (Pembelian)</option>
<option value="CompleteRegistration" <?php echo getSetting('meta_pixel_invoice_event', 'ViewContent') === 'CompleteRegistration' ? 'selected' : ''; ?>>CompleteRegistration (Selesai Daftar)</option>
<option value="Lead" <?php echo getSetting('meta_pixel_invoice_event', 'ViewContent') === 'Lead' ? 'selected' : ''; ?>>Lead (Prospek)</option>
</select>
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Event untuk Halaman Dashboard</label>
<select name="meta_pixel_dashboard_event" class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-primary focus:border-transparent">
<option value="PageView" <?php echo getSetting('meta_pixel_dashboard_event', 'PageView') === 'PageView' ? 'selected' : ''; ?>>PageView (Lihat Halaman)</option>
<option value="ViewContent" <?php echo getSetting('meta_pixel_dashboard_event', 'PageView') === 'ViewContent' ? 'selected' : ''; ?>>ViewContent (Lihat Konten)</option>
<option value="CompleteRegistration" <?php echo getSetting('meta_pixel_dashboard_event', 'PageView') === 'CompleteRegistration' ? 'selected' : ''; ?>>CompleteRegistration (Selesai Daftar)</option>
</select>
</div>
</div>
</div>
<div class="pt-4">
<button type="submit" class="w-full bg-blue-600 hover:bg-blue-700 text-white font-semibold py-2 px-4 rounded-lg transition duration-200">
<i class="fas fa-save mr-2"></i>
Simpan Pengaturan Meta Ads Pixel
</button>
</div>
</form>
<div class="p-6 border-t border-gray-200">
<div class="bg-blue-50 border border-blue-200 rounded-lg p-4">
<h5 class="text-sm font-medium text-blue-800 mb-2">Informasi Meta Ads Pixel:</h5>
<ul class="text-xs text-blue-700 space-y-1">
<li>• Pixel akan otomatis diterapkan di halaman checkout, invoice, dan dashboard</li>
<li>• Event tracking membantu mengoptimalkan kampanye iklan Facebook/Instagram</li>
<li>• Pastikan Pixel ID sudah benar sebelum mengaktifkan</li>
<li>• Gunakan Facebook Pixel Helper untuk memverifikasi pixel bekerja dengan baik</li>
</ul>
</div>
</div>
</div>
<!-- Mailketing Settings -->
<div class="bg-white rounded-lg shadow-sm border border-gray-200">
<div class="p-6 border-b border-gray-200">
<h3 class="text-lg font-semibold text-gray-900 flex items-center">
<i class="fas fa-envelope-open-text text-orange-500 mr-2"></i>
Pengaturan Mailketing
</h3>
<p class="text-sm text-gray-600 mt-1">Integrasi dengan layanan email marketing Mailketing untuk sinkronisasi user</p>
</div>
<div class="p-6 space-y-6">
<!-- Mailketing Configuration Form -->
<form method="POST" class="space-y-4">
<input type="hidden" name="csrf_token" value="<?php echo generateCSRFToken(); ?>">
<input type="hidden" name="action" value="update_mailketing_settings">
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">API Token Mailketing</label>
<input type="text" name="mailketing_api_token" value="<?php echo htmlspecialchars(getSetting('mailketing_api_token', '')); ?>" placeholder="Masukkan API Token dari Mailketing" class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-primary focus:border-transparent">
<p class="text-xs text-gray-500 mt-1">Dapatkan API Token dari dashboard Mailketing Anda</p>
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">List ID Mailketing</label>
<input type="text" name="mailketing_list_id" value="<?php echo htmlspecialchars(getSetting('mailketing_list_id', '')); ?>" placeholder="Masukkan List ID untuk menyimpan user" class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-primary focus:border-transparent">
<p class="text-xs text-gray-500 mt-1">ID list dimana user akan disimpan di Mailketing</p>
</div>
<div class="flex items-center">
<input type="checkbox" name="mailketing_auto_sync" id="mailketing_auto_sync" value="1" <?php echo getSetting('mailketing_auto_sync', '0') === '1' ? 'checked' : ''; ?> class="h-4 w-4 text-blue-primary focus:ring-blue-primary border-gray-300 rounded">
<label for="mailketing_auto_sync" class="ml-2 block text-sm text-gray-700">
Sinkronisasi otomatis saat user baru mendaftar
</label>
</div>
<div class="pt-4">
<button type="submit" class="w-full bg-orange-500 hover:bg-orange-600 text-white font-semibold py-2 px-4 rounded-lg transition duration-200">
<i class="fas fa-save mr-2"></i>
Simpan Pengaturan Mailketing
</button>
</div>
</form>
<!-- Test Connection and Sync Actions -->
<div class="border-t border-gray-200 pt-6">
<h4 class="text-md font-medium text-gray-800 mb-4">Aksi Mailketing</h4>
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
<!-- Test Connection -->
<form method="POST" class="inline">
<input type="hidden" name="csrf_token" value="<?php echo generateCSRFToken(); ?>">
<input type="hidden" name="action" value="test_mailketing">
<button type="submit" class="w-full bg-blue-500 hover:bg-blue-600 text-white font-medium py-2 px-4 rounded-lg transition duration-200">
<i class="fas fa-plug mr-2"></i>
Test Koneksi
</button>
</form>
<!-- Sync All Users -->
<form method="POST" class="inline" onsubmit="return confirm('Apakah Anda yakin ingin sinkronisasi semua user ke Mailketing? Proses ini mungkin memakan waktu.')">
<input type="hidden" name="csrf_token" value="<?php echo generateCSRFToken(); ?>">
<input type="hidden" name="action" value="sync_users_mailketing">
<button type="submit" class="w-full bg-green-500 hover:bg-green-600 text-white font-medium py-2 px-4 rounded-lg transition duration-200">
<i class="fas fa-sync mr-2"></i>
Sinkronisasi Semua User
</button>
</form>
</div>
<div class="mt-4 p-4 bg-blue-50 border border-blue-200 rounded-lg">
<h5 class="text-sm font-medium text-blue-800 mb-2">Informasi:</h5>
<ul class="text-xs text-blue-700 space-y-1">
<li>• Pastikan API Token dan List ID sudah benar sebelum melakukan sinkronisasi</li>
<li>• Sinkronisasi otomatis akan menambahkan user baru ke Mailketing saat mereka mendaftar</li>
<li>• Gunakan "Sinkronisasi Semua User" untuk menambahkan user yang sudah ada</li>
<li>• Hanya user dengan email yang valid yang akan disinkronisasi</li>
</ul>
</div>
</div>
</div>
</div>
<!-- Email Notification Settings -->
<div class="bg-white rounded-lg shadow-sm border border-gray-200 mb-6">
<div class="p-6 border-b border-gray-200">
<h2 class="text-xl font-semibold text-gray-900 flex items-center">
<i class="fas fa-envelope mr-3 text-blue-primary"></i>
Pengaturan Notifikasi Email
</h2>
<p class="text-gray-600 mt-1">Konfigurasi notifikasi email untuk checkout dan aktivasi paket</p>
</div>
<div class="p-6">
<form method="POST" class="space-y-6">
<input type="hidden" name="csrf_token" value="<?php echo generateCSRFToken(); ?>">
<input type="hidden" name="action" value="update_email_notification_settings">
<!-- Enable Email Notifications -->
<div class="flex items-start space-x-3">
<div class="flex items-center h-5">
<input type="checkbox" name="email_notifications_enabled" id="email_notifications_enabled" value="1" <?php echo (getSetting('email_notifications_enabled') == '1') ? 'checked' : ''; ?> class="w-4 h-4 text-blue-primary bg-gray-100 border-gray-300 rounded focus:ring-blue-primary focus:ring-2">
</div>
<div class="flex-1">
<label for="email_notifications_enabled" class="text-sm font-medium text-gray-900">Aktifkan Notifikasi Email</label>
<p class="text-xs text-gray-500">Aktifkan untuk mengirim notifikasi email saat checkout dan aktivasi paket</p>
</div>
</div>
<!-- Checkout Notifications -->
<div class="flex items-start space-x-3">
<div class="flex items-center h-5">
<input type="checkbox" name="email_checkout_notifications" id="email_checkout_notifications" value="1" <?php echo (getSetting('email_checkout_notifications') == '1') ? 'checked' : ''; ?> class="w-4 h-4 text-blue-primary bg-gray-100 border-gray-300 rounded focus:ring-blue-primary focus:ring-2">
</div>
<div class="flex-1">
<label for="email_checkout_notifications" class="text-sm font-medium text-gray-900">Notifikasi Checkout</label>
<p class="text-xs text-gray-500">Kirim email ke customer dan reseller saat ada order baru</p>
</div>
</div>
<!-- Activation Notifications -->
<div class="flex items-start space-x-3">
<div class="flex items-center h-5">
<input type="checkbox" name="email_activation_notifications" id="email_activation_notifications" value="1" <?php echo (getSetting('email_activation_notifications') == '1') ? 'checked' : ''; ?> class="w-4 h-4 text-blue-primary bg-gray-100 border-gray-300 rounded focus:ring-blue-primary focus:ring-2">
</div>
<div class="flex-1">
<label for="email_activation_notifications" class="text-sm font-medium text-gray-900">Notifikasi Aktivasi</label>
<p class="text-xs text-gray-500">Kirim email ke customer saat paket diaktifkan oleh reseller</p>
</div>
</div>
<!-- Cancellation Notifications -->
<div class="flex items-start space-x-3">
<div class="flex items-center h-5">
<input type="checkbox" name="email_cancellation_notifications" id="email_cancellation_notifications" value="1" <?php echo (getSetting('email_cancellation_notifications') == '1') ? 'checked' : ''; ?> class="w-4 h-4 text-blue-primary bg-gray-100 border-gray-300 rounded focus:ring-blue-primary focus:ring-2">
</div>
<div class="flex-1">
<label for="email_cancellation_notifications" class="text-sm font-medium text-gray-900">Notifikasi Pembatalan</label>
<p class="text-xs text-gray-500">Kirim email ke customer saat paket dibatalkan</p>
</div>
</div>
<hr class="border-gray-200">
<!-- Email Templates -->
<div class="space-y-4">
<h3 class="text-lg font-medium text-gray-900">Template Email</h3>
<!-- Checkout Template -->
<div>
<label for="email_checkout_template" class="block text-sm font-medium text-gray-700 mb-2">Template Email Checkout</label>
<textarea name="email_checkout_template" id="email_checkout_template" rows="6" class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-primary focus:border-transparent" placeholder="Template email untuk notifikasi checkout..."><?php echo htmlspecialchars(getSetting('email_checkout_template')); ?></textarea>
<p class="text-xs text-gray-500 mt-1">
Placeholder: {customer_name}, {customer_email}, {reseller_name}, {package_name}, {package_price}, {order_date}, {site_name}
</p>
</div>
<!-- Activation Template -->
<div>
<label for="email_activation_template" class="block text-sm font-medium text-gray-700 mb-2">Template Email Aktivasi</label>
<textarea name="email_activation_template" id="email_activation_template" rows="6" class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-primary focus:border-transparent" placeholder="Template email untuk notifikasi aktivasi..."><?php echo htmlspecialchars(getSetting('email_activation_template')); ?></textarea>
<p class="text-xs text-gray-500 mt-1">
Placeholder: {customer_name}, {customer_email}, {reseller_name}, {package_name}, {activation_date}, {site_name}
</p>
</div>
<!-- Cancellation Template -->
<div>
<label for="email_cancellation_template" class="block text-sm font-medium text-gray-700 mb-2">Template Email Pembatalan</label>
<textarea name="email_cancellation_template" id="email_cancellation_template" rows="6" class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-primary focus:border-transparent" placeholder="Template email untuk notifikasi pembatalan..."><?php echo htmlspecialchars(getSetting('email_cancellation_template')); ?></textarea>
<p class="text-xs text-gray-500 mt-1">
Placeholder: {customer_name}, {customer_email}, {reseller_name}, {package_name}, {cancellation_date}, {site_name}
</p>
</div>
</div>
<!-- Save Button -->
<div class="flex justify-end">
<button type="submit" class="bg-blue-primary hover:bg-blue-dark text-white font-medium py-2 px-6 rounded-lg transition duration-200">
<i class="fas fa-save mr-2"></i>
Simpan Pengaturan
</button>
</div>
</form>
<!-- Information Box -->
<div class="mt-6 p-4 bg-blue-50 border border-blue-200 rounded-lg">
<h5 class="text-sm font-medium text-blue-800 mb-2">Informasi:</h5>
<ul class="text-xs text-blue-700 space-y-1">
<li>• Notifikasi email menggunakan Mailketing API yang sudah dikonfigurasi</li>
<li>• Pastikan pengaturan Mailketing sudah benar sebelum mengaktifkan notifikasi</li>
<li>• Template email mendukung HTML dan placeholder dinamis</li>
<li>• Email akan dikirim otomatis saat checkout dan aktivasi paket</li>
</ul>
</div>
</div>
</div>
<!-- Change Password Modal -->
<div id="changePasswordModal" class="fixed inset-0 bg-black bg-opacity-50 hidden z-50 flex items-center justify-center p-4">
<div class="bg-white rounded-lg max-w-md w-full">
<div class="p-6 border-b border-gray-200">
<div class="flex justify-between items-center">
<h3 class="text-lg font-semibold text-gray-900">Ubah Password</h3>
<button onclick="closeChangePasswordModal()" class="text-gray-400 hover:text-gray-600">
<i class="fas fa-times"></i>
</button>
</div>
</div>
<form id="changePasswordForm" method="POST" class="p-6 space-y-4">
<input type="hidden" name="csrf_token" value="<?php echo generateCSRFToken(); ?>">
<input type="hidden" name="action" value="change_password">
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Password Lama</label>
<input type="password" name="old_password" required class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-primary focus:border-transparent">
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Password Baru</label>
<input type="password" name="new_password" required minlength="6" class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-primary focus:border-transparent">
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Konfirmasi Password Baru</label>
<input type="password" name="confirm_password" required minlength="6" class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-primary focus:border-transparent">
</div>
<div class="flex justify-end space-x-3 pt-4">
<button type="button" onclick="closeChangePasswordModal()" class="px-4 py-2 text-gray-600 border border-gray-300 rounded-lg hover:bg-gray-50 transition duration-200">
Batal
</button>
<button type="submit" class="px-4 py-2 bg-blue-primary text-white rounded-lg hover:bg-blue-dark transition duration-200">
Ubah Password
</button>
</div>
</form>
</div>
</div>
<script>
function openChangePasswordModal() {
document.getElementById('changePasswordModal').classList.remove('hidden');
}
function closeChangePasswordModal() {
document.getElementById('changePasswordModal').classList.add('hidden');
document.getElementById('changePasswordForm').reset();
}
function backupDatabase() {
if (confirm('Apakah Anda yakin ingin membuat backup database?')) {
alert('Fitur backup database akan segera hadir.');
}
}
function optimizeDatabase() {
if (confirm('Apakah Anda yakin ingin mengoptimasi database?')) {
alert('Fitur optimasi database akan segera hadir.');
}
}
// Close modal when clicking outside
document.getElementById('changePasswordModal').addEventListener('click', function(e) {
if (e.target === this) {
closeChangePasswordModal();
}
});
// Validate password confirmation
document.getElementById('changePasswordForm').addEventListener('submit', function(e) {
const newPassword = document.querySelector('input[name="new_password"]').value;
const confirmPassword = document.querySelector('input[name="confirm_password"]').value;
if (newPassword !== confirmPassword) {
e.preventDefault();
alert('Password baru dan konfirmasi password tidak cocok.');
}
});
</script>