Baru lagi ommm

This commit is contained in:
Flatlogic Bot 2026-02-25 23:20:40 +00:00
parent b7baac6c0c
commit afb01a6973
6 changed files with 50 additions and 25 deletions

View File

@ -13,7 +13,7 @@ class NewsletterController extends Controller {
$email = $input['email'] ?? '';
if (empty($email) || !filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo json_encode(['error' => 'Please provide a valid email address.']);
echo json_encode(['error' => __('newsletter_invalid_email', 'Please provide a valid email address.')]);
return;
}
@ -21,13 +21,13 @@ class NewsletterController extends Controller {
try {
$stmt = $db->prepare("INSERT INTO newsletter_subscribers (email) VALUES (?)");
$stmt->execute([$email]);
echo json_encode(['success' => 'Thank you for subscribing!']);
echo json_encode(['success' => __('newsletter_success', 'Thank you for subscribing!')]);
} catch (\PDOException $e) {
if ($e->getCode() == 23000) { // Duplicate entry
echo json_encode(['success' => 'You are already subscribed!']);
echo json_encode(['success' => __('newsletter_already_subscribed', 'You are already subscribed!')]);
} else {
echo json_encode(['error' => 'An error occurred. Please try again.']);
echo json_encode(['error' => __('newsletter_error', 'An error occurred. Please try again.')]);
}
}
}
}
}

View File

@ -137,15 +137,18 @@ document.addEventListener('DOMContentLoaded', () => {
// Newsletter AJAX
const initNewsletterAjax = () => {
const btn = document.getElementById('newsletter-btn');
const emailInput = document.getElementById('newsletter-email');
const msg = document.getElementById('newsletter-msg');
document.addEventListener('click', (e) => {
const btn = e.target.closest('.newsletter-submit-btn');
if (!btn) return;
if (!btn || !emailInput) return;
const form = btn.closest('.newsletter-form') || btn.parentElement;
const emailInput = form.querySelector('.newsletter-email');
const msg = form.querySelector('.newsletter-msg') || form.nextElementSibling;
if (!emailInput) return;
btn.addEventListener('click', () => {
const email = emailInput.value;
if (!email) return;
if (!email || !email.includes('@')) return;
btn.disabled = true;
const originalText = btn.innerHTML;
@ -161,18 +164,29 @@ document.addEventListener('DOMContentLoaded', () => {
btn.disabled = false;
btn.innerHTML = originalText;
if (data.success) {
msg.innerHTML = `<span class="text-success">${data.success}</span>`;
if (msg) msg.innerHTML = `<span class="text-success">${data.success}</span>`;
else alert(data.success);
emailInput.value = '';
} else {
msg.innerHTML = `<span class="text-danger">${data.error}</span>`;
if (msg) msg.innerHTML = `<span class="text-danger">${data.error}</span>`;
else alert(data.error);
}
})
.catch(err => {
btn.disabled = false;
btn.innerHTML = originalText;
msg.innerHTML = '<span class="text-danger">An error occurred.</span>';
if (msg) msg.innerHTML = '<span class="text-danger">An error occurred.</span>';
});
});
// Also handle form submit for the one in home.php
document.addEventListener('submit', (e) => {
if (e.target.classList.contains('newsletter-form')) {
e.preventDefault();
const btn = e.target.querySelector('.newsletter-submit-btn');
if (btn) btn.click();
}
});
};
// AI Chat Assistant Logic
@ -309,4 +323,4 @@ document.addEventListener('DOMContentLoaded', () => {
});
console.log('ApkNusa AJAX Engine active.');
});
});

View File

@ -145,4 +145,8 @@ return array (
'404_title' => 'Page Not Found',
'404_text' => 'The page you are looking for might have been removed, had its name changed, or is temporarily unavailable.',
'back_to_home' => 'Back to Home',
);
'newsletter_invalid_email' => 'Please provide a valid email address.',
'newsletter_success' => 'Thank you for subscribing!',
'newsletter_already_subscribed' => 'You are already subscribed!',
'newsletter_error' => 'An error occurred. Please try again.',
);

View File

@ -145,4 +145,8 @@ return array (
'404_title' => 'Halaman Tidak Ditemukan',
'404_text' => 'Halaman yang Anda cari mungkin telah dihapus, namanya diubah, atau sementara tidak tersedia.',
'back_to_home' => 'Kembali ke Beranda',
);
'newsletter_invalid_email' => 'Harap berikan alamat email yang valid.',
'newsletter_success' => 'Terima kasih telah berlangganan!',
'newsletter_already_subscribed' => 'Anda sudah berlangganan!',
'newsletter_error' => 'Terjadi kesalahan. Silakan coba lagi.',
);

View File

@ -36,11 +36,13 @@
<div class="col-lg-4">
<h6 class="fw-bold mb-3"><?php echo __('subscribe'); ?></h6>
<p class="text-muted small"><?php echo __('subscribe_text'); ?></p>
<div class="input-group">
<input type="email" id="newsletter-email" class="form-control border-light-subtle" placeholder="<?php echo __('email_placeholder'); ?>">
<button class="btn btn-success px-3" id="newsletter-btn" type="button"><?php echo __('subscribe'); ?></button>
</div>
<div id="newsletter-msg" class="mt-2 small"></div>
<form class="newsletter-form">
<div class="input-group">
<input type="email" class="form-control border-light-subtle newsletter-email" placeholder="<?php echo __('email_placeholder'); ?>">
<button class="btn btn-success px-3 newsletter-submit-btn" type="button"><?php echo __('subscribe'); ?></button>
</div>
<div class="newsletter-msg mt-2 small"></div>
</form>
</div>
</div>
<hr class="my-5 text-black-50 opacity-25">

View File

@ -109,10 +109,11 @@
<p class="text-muted mb-0">Get notified about the latest APKs and updates directly in your inbox.</p>
</div>
<div class="col-lg-6">
<form action="/newsletter/subscribe" method="POST" class="d-flex gap-2 p-1 bg-light rounded-pill border shadow-sm">
<input type="email" name="email" class="form-control border-0 bg-transparent px-4 py-2" placeholder="Enter your email" required>
<button type="submit" class="btn btn-success rounded-pill px-4">Subscribe</button>
<form action="/api/newsletter/subscribe" method="POST" class="d-flex gap-2 p-1 bg-light rounded-pill border shadow-sm newsletter-form">
<input type="email" name="email" class="form-control border-0 bg-transparent px-4 py-2 newsletter-email" placeholder="Enter your email" required>
<button type="submit" class="btn btn-success rounded-pill px-4 newsletter-submit-btn">Subscribe</button>
</form>
<div class="newsletter-msg mt-3 ps-3 small"></div>
</div>
</div>
</div>