/** * ========================================================================= * Mon Cinéma - Module d'Administration (admin.js) * ========================================================================= */ const API_URL = '../api.php'; let allItems = []; let currentAdminTab = 'critique'; // ── 1. GARDE DE SESSION ── (function guardSession() { if (window.location.pathname.includes('dashboard.html') && !localStorage.getItem('token')) { window.location.href = 'login.html'; } })(); // ══════════════════════════════════════════════════════════════════ // CHARGEMENT & RENDU (DASHBOARD) // ══════════════════════════════════════════════════════════════════ async function loadDashboardData() { try { const res = await fetch(`${API_URL}?action=get_films`); allItems = await res.json(); const secRes = await fetch(`${API_URL}?action=check_security_status`); const secData = await secRes.json(); const banner = document.getElementById('security-banner'); if (banner) banner.style.display = secData.is_blank ? 'flex' : 'none'; renderAdminTable(); } catch (err) { console.error('Erreur chargement :', err); } } function renderAdminTable() { const tbody = document.getElementById('admin-table-body'); const countLabel = document.getElementById('admin-count-label'); if (!tbody) return; tbody.innerHTML = ''; const filtered = allItems.filter(item => item.type === currentAdminTab); if (countLabel) countLabel.textContent = `${filtered.length} élément(s) dans cette catégorie`; if (filtered.length === 0) { tbody.innerHTML = `Aucun film trouvé.`; return; } filtered.forEach(f => { const tr = document.createElement('tr'); const imgHTML = f.poster ? `${f.title}` : `
`; const dynamicCell = currentAdminTab === 'critique' ? `${'★'.repeat(f.rating)}` : `${f.format || 'Physique'}`; tr.innerHTML = ` ${imgHTML} ${f.title} ${f.year || ''} ${f.director || ''} ${dynamicCell} `; tbody.appendChild(tr); }); } // ══════════════════════════════════════════════════════════════════ // IMPORT / EXPORT CSV // ══════════════════════════════════════════════════════════════════ function exportToCSV() { if (!allItems.length) return alert("Aucune donnée."); const headers = ['ID', 'Titre', 'Annee', 'Realisateur', 'Note', 'Critique', 'URL_Affiche']; const csvRows = [headers.join(';')]; allItems.forEach(f => { csvRows.push([f.id, `"${f.title}"`, f.year, `"${f.director}"`, f.rating, `"${f.review}"`, `"${f.poster}"`].join(';')); }); const blob = new Blob(["\uFEFF" + csvRows.join("\n")], { type: 'text/csv;charset=utf-8;' }); const link = document.createElement("a"); link.href = URL.createObjectURL(blob); link.download = "export_cinema.csv"; link.click(); } async function handleCsvUpload(input) { if (!input.files[0]) return; const formData = new FormData(); formData.append('csv_file', input.files[0]); try { const res = await fetch(`${API_URL}?action=import_csv`, { method: 'POST', headers: { 'Authorization': localStorage.getItem('token') }, body: formData }); const data = await res.json(); if (data.success) { alert(`Succès : ${data.imported} films ajoutés.`); loadDashboardData(); } } catch (e) { console.error(e); } } // ══════════════════════════════════════════════════════════════════ // GESTION ACTIONS UNITAIRES // ══════════════════════════════════════════════════════════════════ async function deleteSingleFilm(id) { if (!confirm('Supprimer cette œuvre ?')) return; await fetch(`${API_URL}?action=delete_film&id=${id}&type=${currentAdminTab}`, { method: 'DELETE', headers: { 'Authorization': localStorage.getItem('token') } }); loadDashboardData(); } function switchAdminTab(tabName) { currentAdminTab = tabName; renderAdminTable(); } // ── INITIALISATION ── document.addEventListener('DOMContentLoaded', () => { if (document.getElementById('admin-table-body')) { loadDashboardData(); } });