document.addEventListener('DOMContentLoaded', function() { const ajaxUrl = myanas_admin_vars.ajax_url; const nonceAct = myanas_admin_vars.nonce_actions; const nonceMark = myanas_admin_vars.nonce_mark_all; // Search const searchInput = document.getElementById('myanasSearchInput'); if (searchInput) { searchInput.addEventListener('keyup', function() { let val = this.value.toLowerCase(); let visible = 0; document.querySelectorAll('.contact-data-card').forEach(card => { let name = card.querySelector('.raw-name')?.innerText.toLowerCase() || ''; let email = card.querySelector('.raw-email')?.innerText.toLowerCase() || ''; let phone = card.querySelector('.raw-phone')?.innerText.toLowerCase() || ''; let show = name.includes(val) || email.includes(val) || phone.includes(val); card.style.display = show ? 'flex' : 'none'; if (show) visible++; }); document.getElementById('visibleCount').innerText = visible; }); } // View Modal document.querySelectorAll('.view-card-details').forEach(btn => { btn.addEventListener('click', function(e) { e.preventDefault(); let card = this.closest('.contact-data-card'); if (!card) return; document.getElementById('modalViewName').innerHTML = card.querySelector('.raw-name').innerHTML; document.getElementById('modalViewEmail').innerHTML = card.querySelector('.raw-email').innerHTML; document.getElementById('modalViewPhone').innerHTML = card.querySelector('.raw-phone').innerHTML; document.getElementById('modalViewDate').innerHTML = card.querySelector('.raw-date').innerHTML; document.getElementById('modalViewMsg').innerHTML = card.querySelector('.raw-msg').innerHTML; document.getElementById('viewDetailsModal').classList.add('active'); let badge = card.querySelector('.status-badge'); if (badge && badge.classList.contains('unread')) { let id = card.getAttribute('data-id'); fetch(ajaxUrl, { method: 'POST', headers: {'Content-Type': 'application/x-www-form-urlencoded'}, body: `action=update_contact_status&contact_id=${id}&status=read&nonce=${nonceAct}` }).then(r => r.json()).then(data => { if (data.success) { badge.classList.remove('unread'); badge.classList.add('read'); badge.innerText = 'Read'; } }); } }); }); document.getElementById('closeViewModalBtn')?.addEventListener('click', function() { document.getElementById('viewDetailsModal').classList.remove('active'); }); document.getElementById('viewDetailsModal')?.addEventListener('click', function(e) { if (e.target === this) this.classList.remove('active'); }); // Copy document.querySelectorAll('.copy-card').forEach(btn => { btn.addEventListener('click', function(e) { e.preventDefault(); let card = this.closest('.contact-data-card'); if (!card) return; let text = `Name: ${card.querySelector('.raw-name')?.innerText}\nEmail: ${card.querySelector('.raw-email')?.innerText}\nPhone: ${card.querySelector('.raw-phone')?.innerText}\nDate: ${card.querySelector('.raw-date')?.innerText}\nMessage: ${card.querySelector('.raw-msg')?.innerText}`; navigator.clipboard.writeText(text); let orig = this.innerHTML; this.innerHTML = ''; setTimeout(() => { this.innerHTML = orig; }, 1200); }); }); // Delete document.querySelectorAll('.delete-card').forEach(btn => { btn.addEventListener('click', function(e) { e.preventDefault(); let card = this.closest('.contact-data-card'); if (!card || !confirm('Delete this contact?')) return; let id = card.getAttribute('data-id'); fetch(ajaxUrl, { method: 'POST', headers: {'Content-Type': 'application/x-www-form-urlencoded'}, body: `action=delete_contact&contact_id=${id}&nonce=${nonceAct}` }).then(r => r.json()).then(data => { if (data.success) card.remove(); }); }); }); // Export Modal let activeCardForExport = null; document.querySelectorAll('.export-card').forEach(btn => { btn.addEventListener('click', function(e) { e.preventDefault(); activeCardForExport = this.closest('.contact-data-card'); document.getElementById('exportModal').classList.add('active'); }); }); function getCardData(card) { if (!card) return null; return { name: card.querySelector('.raw-name')?.innerText || '', email: card.querySelector('.raw-email')?.innerText || '', phone: card.querySelector('.raw-phone')?.innerText || '', date: card.querySelector('.raw-date')?.innerText || '', rawDate: card.querySelector('.raw-date')?.getAttribute('data-raw') || '', msg: card.querySelector('.raw-msg')?.innerText || '' }; } function downloadCSV(content, filename) { let blob = new Blob([content], {type: 'text/csv;charset=utf-8;'}); let link = document.createElement('a'); link.href = URL.createObjectURL(blob); link.download = filename; link.click(); URL.revokeObjectURL(link.href); } function closeExportModal() { document.getElementById('exportModal').classList.remove('active'); let dateInput = document.getElementById('exportDateInput'); dateInput.value = ''; dateInput.classList.remove('show-input'); document.getElementById('exportDateConfirm').style.display = 'none'; activeCardForExport = null; } document.getElementById('closeExportModalBtn')?.addEventListener('click', closeExportModal); document.getElementById('exportModal')?.addEventListener('click', function(e) { if (e.target === this) closeExportModal(); }); document.getElementById('exportThisBtn')?.addEventListener('click', () => { let d = getCardData(activeCardForExport); if (!d) return; downloadCSV(`Name,Email,Phone,Date,Message\n"${d.name}","${d.email}","${d.phone}","${d.date}","${d.msg}"`, `contact_${d.name.replace(/\s/g,'_')}.csv`); closeExportModal(); }); document.getElementById('exportAllBtnModal')?.addEventListener('click', () => { let csv = "Name,Email,Phone,Message,Status,Date\n"; document.querySelectorAll('.contact-data-card').forEach(card => { if (card.style.display !== 'none') { let d = getCardData(card); if (d) csv += `"${d.name}","${d.email}","${d.phone}","${d.msg}","${card.dataset.status}","${d.date}"\n`; } }); downloadCSV(csv, 'all_contacts.csv'); closeExportModal(); }); let dateInput = document.getElementById('exportDateInput'); let dateConfirm = document.getElementById('exportDateConfirm'); document.getElementById('exportByDateBtnModal')?.addEventListener('click', () => { dateInput.classList.toggle('show-input'); if (dateInput.classList.contains('show-input')) { dateConfirm.style.display = 'block'; } else { dateInput.value = ''; dateConfirm.style.display = 'none'; } }); dateConfirm?.addEventListener('click', () => { let selected = dateInput.value; if (!selected) return; let csv = "Name,Email,Phone,Message,Status,Date\n"; let found = false; document.querySelectorAll('.contact-data-card').forEach(card => { let d = getCardData(card); if (d && d.rawDate && d.rawDate.split(' ')[0] === selected) { csv += `"${d.name}","${d.email}","${d.phone}","${d.msg}","${card.dataset.status}","${d.date}"\n`; found = true; } }); if (found) downloadCSV(csv, `contacts_${selected}.csv`); closeExportModal(); }); document.getElementById('topExportAllBtn')?.addEventListener('click', (e) => { e.preventDefault(); document.getElementById('exportAllBtnModal')?.click(); }); // Mark All Read document.getElementById('markAllReadBtn')?.addEventListener('click', (e) => { e.preventDefault(); fetch(ajaxUrl, { method: 'POST', headers: {'Content-Type': 'application/x-www-form-urlencoded'}, body: `action=mark_all_read_on_visit&nonce=${nonceMark}` }).then(() => { document.querySelectorAll('.status-badge.unread').forEach(b => { b.classList.remove('unread'); b.classList.add('read'); b.innerText = 'Read'; }); }); }); // Status Badge Toggle document.querySelectorAll('.status-badge').forEach(badge => { badge.addEventListener('click', function(e) { e.preventDefault(); e.stopPropagation(); let card = this.closest('.contact-data-card'); if (!card) return; let id = card.getAttribute('data-id'); let newStatus = this.classList.contains('read') ? 'unread' : 'read'; fetch(ajaxUrl, { method: 'POST', headers: {'Content-Type': 'application/x-www-form-urlencoded'}, body: `action=update_contact_status&contact_id=${id}&status=${newStatus}&nonce=${nonceAct}` }).then(r => r.json()).then(data => { if (data.success) { this.classList.remove('read', 'unread'); this.classList.add(newStatus); this.innerText = newStatus === 'read' ? 'Read' : 'Unread'; card.setAttribute('data-status', newStatus); } }); }); }); // ========== IMPORT FUNCTIONALITY ========== const importBtn = document.getElementById('topImportBtn'); const importModal = document.getElementById('importModal'); const closeImportBtn = document.getElementById('closeImportModalBtn'); const importForm = document.getElementById('importForm'); const importSubmitBtn = document.getElementById('importSubmitBtn'); const importProgress = document.getElementById('importProgress'); const importProgressBar = document.getElementById('importProgressBar'); const importStatus = document.getElementById('importStatus'); if (importBtn) { importBtn.addEventListener('click', () => { importModal.classList.add('active'); }); } if (closeImportBtn) { closeImportBtn.addEventListener('click', () => { importModal.classList.remove('active'); importForm.reset(); importProgress.style.display = 'none'; importProgressBar.style.width = '0%'; importStatus.innerHTML = ''; }); } if (importModal) { importModal.addEventListener('click', (e) => { if (e.target === importModal) { importModal.classList.remove('active'); importForm.reset(); importProgress.style.display = 'none'; } }); } if (importForm) { importForm.addEventListener('submit', async (e) => { e.preventDefault(); const fileInput = document.getElementById('importFile'); const file = fileInput.files[0]; if (!file) { alert('Please select a CSV file'); return; } const formData = new FormData(); formData.append('action', 'import_contacts_csv'); formData.append('csv_file', file); formData.append('nonce', nonceAct); importSubmitBtn.disabled = true; importSubmitBtn.textContent = '⏳ Importing...'; importProgress.style.display = 'block'; importProgressBar.style.width = '50%'; importStatus.innerHTML = 'Processing your file...'; importStatus.style.color = '#64748b'; try { const response = await fetch(ajaxUrl, { method: 'POST', body: formData }); const result = await response.json(); importProgressBar.style.width = '100%'; if (result.success) { importStatus.innerHTML = `✅ ${result.data.message}`; setTimeout(() => { window.location.reload(); }, 2000); } else { importStatus.innerHTML = `❌ ${result.data}`; importSubmitBtn.disabled = false; importSubmitBtn.textContent = '📥 Try Again'; } } catch (error) { importStatus.innerHTML = '❌ Network error. Please try again.'; importSubmitBtn.disabled = false; importSubmitBtn.textContent = '📥 Try Again'; } }); } }); https://www.myanas.com/post-sitemap1.xml 2026-05-29T13:58:39+00:00 https://www.myanas.com/page-sitemap1.xml 2026-05-30T05:11:47+00:00 https://www.myanas.com/category-sitemap1.xml 2026-05-30T11:41:16+06:00 https://www.myanas.com/news.xml 2026-05-30T11:41:16+06:00 https://www.myanas.com/video-sitemap1.xml 2026-05-29T13:58:39+00:00