Actualiser admin/dashboard.html
This commit is contained in:
+155
-122
@@ -8,154 +8,170 @@
|
|||||||
<link rel="stylesheet" href="../css/admin.css">
|
<link rel="stylesheet" href="../css/admin.css">
|
||||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@tabler/icons-webfont@latest/tabler-icons.min.css">
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@tabler/icons-webfont@latest/tabler-icons.min.css">
|
||||||
</head>
|
</head>
|
||||||
<body class="admin-body">
|
<body>
|
||||||
|
|
||||||
<div class="admin-wrap">
|
<div class="site-wrap admin-wrap">
|
||||||
|
|
||||||
<div class="security-banner" id="security-banner" style="display:none;">
|
<div class="security-banner" id="security-banner" style="display:none;">
|
||||||
<span><i class="ti ti-alert-triangle"></i> <strong>Attention :</strong> Aucun mot de passe défini.</span>
|
<div class="sec-text">
|
||||||
<button onclick="openPasswordModal()">Sécuriser le compte</button>
|
<i class="ti ti-alert-triangle"></i>
|
||||||
|
<strong>Attention :</strong> Aucun mot de passe défini pour protéger l'administration.
|
||||||
|
</div>
|
||||||
|
<button onclick="openPasswordModal()" class="btn-action danger-solid btn-small">Sécuriser le compte</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<header class="admin-header">
|
<header class="site-header admin-header">
|
||||||
<div>
|
<div class="header-titles">
|
||||||
<h1 class="admin-title">Espace <span>Admin</span></h1>
|
<h1 class="site-title">Espace <span>Admin</span></h1>
|
||||||
<p id="admin-subtitle">Gestion centralisée de votre cinémathèque</p>
|
<p class="site-subtitle">Gestion centralisée de votre cinémathèque</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="admin-actions">
|
<div class="header-actions">
|
||||||
<button class="btn btn-outline" onclick="openConfigModal()"><i class="ti ti-key"></i> Clé TMDB</button>
|
<button class="btn-action outline" onclick="openConfigModal()">
|
||||||
<button class="btn btn-outline" onclick="openPasswordModal()"><i class="ti ti-lock"></i> Sécurité</button>
|
<i class="ti ti-settings"></i> Configuration
|
||||||
<button class="btn btn-danger" onclick="logout()"><i class="ti ti-logout"></i> Quitter</button>
|
</button>
|
||||||
|
<button class="btn-action outline" onclick="openPasswordModal()">
|
||||||
|
<i class="ti ti-shield-lock"></i> Sécurité
|
||||||
|
</button>
|
||||||
|
<button class="btn-action danger outline" onclick="logout()">
|
||||||
|
<i class="ti ti-logout"></i> Quitter
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<nav class="admin-tabs">
|
<div class="pub-tabs-container">
|
||||||
<button class="tab-btn active" id="btn-tab-critique" onclick="switchAdminTab('critique')">
|
<div class="pub-tabs">
|
||||||
<i class="ti ti-message-star"></i> Critiques
|
<button id="btn-tab-critique" class="tab-btn active" onclick="switchAdminTab('critique')">
|
||||||
</button>
|
<i class="ti ti-message-star"></i> Mes Critiques
|
||||||
<button class="tab-btn" id="btn-tab-videotheque" onclick="switchAdminTab('videotheque')">
|
</button>
|
||||||
<i class="ti ti-device-tv"></i> Vidéothèque
|
<button id="btn-tab-videotheque" class="tab-btn" onclick="switchAdminTab('videotheque')">
|
||||||
</button>
|
<i class="ti ti-device-tv"></i> Ma Vidéothèque
|
||||||
</nav>
|
</button>
|
||||||
|
|
||||||
<section id="import-section" class="import-box">
|
|
||||||
<i class="ti ti-file-upload"></i>
|
|
||||||
<p>Importez vos exports <strong>Letterboxd</strong> (.csv)</p>
|
|
||||||
<input type="file" id="csv-file-input" accept=".csv" style="display:none;" onchange="handleCsvUpload(this)">
|
|
||||||
<button class="btn btn-outline" onclick="document.getElementById('csv-file-input').click()">
|
|
||||||
<i class="ti ti-file-spreadsheet"></i> Choisir un fichier
|
|
||||||
</button>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<div class="toolbar-container">
|
|
||||||
<div class="bulk-actions-bar" id="bulk-actions-bar" style="display:none;">
|
|
||||||
<span><i class="ti ti-checkbox"></i> <span id="bulk-count">0</span> élément(s) sélectionné(s)</span>
|
|
||||||
<button class="btn btn-danger" onclick="executeBulkDelete()"><i class="ti ti-trash"></i> Supprimer la sélection</button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="toolbar-actions">
|
|
||||||
<span class="count" id="admin-count-label">Chargement…</span>
|
|
||||||
<button class="btn btn-gold" onclick="openAddModal()"><i class="ti ti-plus"></i> Ajouter une œuvre</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="admin-table-wrap">
|
<div class="admin-toolbar">
|
||||||
|
<div class="toolbar-left">
|
||||||
|
<span class="count" id="admin-count-label">0 élément</span>
|
||||||
|
</div>
|
||||||
|
<div class="toolbar-right">
|
||||||
|
<button class="btn-action primary" onclick="openAddModal()">
|
||||||
|
<i class="ti ti-plus"></i> Ajouter une œuvre
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="bulk-actions-bar" id="bulk-actions-bar" style="display:none;">
|
||||||
|
<span><i class="ti ti-checkbox"></i> <strong id="bulk-count">0</strong> élément(s) sélectionné(s)</span>
|
||||||
|
<button class="btn-action danger-solid btn-small" onclick="executeBulkDelete()">
|
||||||
|
<i class="ti ti-trash"></i> Supprimer la sélection
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="table-container">
|
||||||
<table class="admin-table">
|
<table class="admin-table">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th style="width:48px; text-align:center;">
|
<th style="width: 50px; text-align: center;">
|
||||||
<input type="checkbox" id="select-all-checkbox" class="film-checkbox" onclick="toggleSelectAll(this)">
|
<input type="checkbox" id="select-all-checkbox" onclick="toggleSelectAll(this)">
|
||||||
</th>
|
</th>
|
||||||
<th style="width:60px; text-align:center;">Affiche</th>
|
<th style="width: 80px; text-align: center;">Affiche</th>
|
||||||
<th>Titre</th>
|
<th>Titre</th>
|
||||||
<th>Année</th>
|
<th>Année</th>
|
||||||
<th>Réalisateur</th>
|
<th>Réalisateur</th>
|
||||||
<th id="th-dynamic">Note</th>
|
<th>Informations</th>
|
||||||
<th style="width:120px; text-align:center;">Actions</th>
|
<th style="width: 100px; text-align: right;">Actions</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody id="admin-table-body"></tbody>
|
<tbody id="admin-table-body">
|
||||||
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<footer style="text-align: center; margin-top: 3rem; color: var(--muted); font-size: 0.9rem;">
|
||||||
|
Mon Cinéma — Administration
|
||||||
|
</footer>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="overlay" id="admin-modal">
|
||||||
<div class="overlay" id="admin-modal" onclick="if(event.target===this) closeAdminModal()">
|
<div class="modal" style="max-width: 700px;">
|
||||||
<div class="modal" style="max-width:600px;">
|
|
||||||
<button class="modal-close" onclick="closeAdminModal()"><i class="ti ti-x"></i></button>
|
<button class="modal-close" onclick="closeAdminModal()"><i class="ti ti-x"></i></button>
|
||||||
<h3 class="modal-h" id="modal-form-title">Ajouter une œuvre</h3>
|
<h3 class="modal-h"><i class="ti ti-movie"></i> Éditer l'œuvre</h3>
|
||||||
|
|
||||||
<form id="film-form" onsubmit="saveFilmForm(event)">
|
<form id="film-form">
|
||||||
<input type="hidden" id="f-id">
|
<input type="hidden" id="f-id">
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-grid">
|
||||||
<label>Titre du film *</label>
|
<div class="form-group" style="grid-column: span 2;">
|
||||||
<input type="text" id="f-title" required autocomplete="off">
|
<label>Titre</label>
|
||||||
</div>
|
<input type="text" id="f-title" required placeholder="Ex: Inception">
|
||||||
|
</div>
|
||||||
<div class="form-row">
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Année</label>
|
<label>Année</label>
|
||||||
<input type="number" id="f-year" min="1800" max="2100">
|
<input type="text" id="f-year" placeholder="Ex: 2010">
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Réalisateur</label>
|
<label>Réalisateur</label>
|
||||||
<input type="text" id="f-director">
|
<input type="text" id="f-director" placeholder="Ex: Christopher Nolan">
|
||||||
|
</div>
|
||||||
|
<div class="form-group" style="grid-column: span 2;">
|
||||||
|
<label>URL de l'affiche</label>
|
||||||
|
<input type="text" id="f-poster" placeholder="https://...">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group">
|
|
||||||
<label>URL de l'affiche</label>
|
|
||||||
<input type="url" id="f-poster" placeholder="https://image.tmdb.org/…">
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="form-critique-fields">
|
<div id="form-critique-fields">
|
||||||
<div class="form-group">
|
<div class="divider">Spécifique aux critiques</div>
|
||||||
<label>Note (1 à 5 étoiles)</label>
|
<div class="form-grid">
|
||||||
<select id="f-rating">
|
<div class="form-group">
|
||||||
<option value="5">★★★★★ (5/5)</option>
|
<label>Note (sur 5)</label>
|
||||||
<option value="4">★★★★☆ (4/5)</option>
|
<select id="f-rating">
|
||||||
<option value="3" selected>★★★☆☆ (3/5)</option>
|
<option value="5">5 - Chef d'œuvre</option>
|
||||||
<option value="2">★★☆☆☆ (2/5)</option>
|
<option value="4">4 - Très bon</option>
|
||||||
<option value="1">★☆☆☆☆ (1/5)</option>
|
<option value="3" selected>3 - Bon</option>
|
||||||
</select>
|
<option value="2">2 - Moyen</option>
|
||||||
|
<option value="1">1 - Mauvais</option>
|
||||||
|
<option value="0">0 - Navet</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Lien Streaming / VOD</label>
|
||||||
|
<input type="text" id="f-streaming" placeholder="Lien Netflix, Canal+, etc.">
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Critique</label>
|
<label>Critique / Avis</label>
|
||||||
<textarea id="f-review" rows="5"></textarea>
|
<textarea id="f-review" rows="4" placeholder="Votre avis sur le film..."></textarea>
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label>Plateforme / Mode de visionnage</label>
|
|
||||||
<input type="text" id="f-streaming" placeholder="Ex : Canal+, Cinéma, Blu-ray…">
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="form-videotheque-fields" style="display:none;">
|
<div id="form-videotheque-fields" style="display:none;">
|
||||||
<div class="form-row">
|
<div class="divider">Spécifique à la vidéothèque</div>
|
||||||
|
<div class="form-grid">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Format physique</label>
|
<label>Format</label>
|
||||||
<input type="text" id="f-format" placeholder="4K Ultra HD, Blu-ray, DVD…">
|
<select id="f-format">
|
||||||
|
<option value="Blu-ray 4K">Blu-ray 4K</option>
|
||||||
|
<option value="Blu-ray">Blu-ray</option>
|
||||||
|
<option value="DVD">DVD</option>
|
||||||
|
<option value="VHS">VHS</option>
|
||||||
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
|
||||||
<label>Durée (minutes)</label>
|
|
||||||
<input type="number" id="f-length">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-row">
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Éditeur</label>
|
<label>Éditeur</label>
|
||||||
<input type="text" id="f-publisher">
|
<input type="text" id="f-publisher" placeholder="Ex: Warner Bros">
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Format image</label>
|
<label>Durée</label>
|
||||||
<input type="text" id="f-aspect" placeholder="2.39:1, 1.85:1…">
|
<input type="text" id="f-length" placeholder="Ex: 148 min">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
<div class="form-row">
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Code barre (EAN)</label>
|
<label>Format Image</label>
|
||||||
<input type="text" id="f-ean">
|
<input type="text" id="f-aspect" placeholder="Ex: 2.39:1">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Code Barre (EAN)</label>
|
||||||
|
<input type="text" id="f-ean" placeholder="Ex: 3344428068...">
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Nombre de disques</label>
|
<label>Nombre de disques</label>
|
||||||
@@ -163,36 +179,46 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Synopsis / Notes d'édition</label>
|
<label>Description / Synopsis</label>
|
||||||
<textarea id="f-description" rows="4"></textarea>
|
<textarea id="f-description" rows="3" placeholder="Notes ou synopsis de l'édition..."></textarea>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<button type="submit" class="btn-save"><i class="ti ti-device-floppy"></i> Enregistrer</button>
|
<div style="text-align: right; margin-top: 1.5rem;">
|
||||||
|
<button type="submit" class="btn-action primary"><i class="ti ti-device-floppy"></i> Sauvegarder</button>
|
||||||
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="overlay" id="config-modal" onclick="if(event.target===this) closeConfigModal()">
|
<div class="overlay" id="config-modal">
|
||||||
<div class="modal" style="max-width:440px;">
|
<div class="modal" style="max-width: 500px;">
|
||||||
<button class="modal-close" onclick="closeConfigModal()"><i class="ti ti-x"></i></button>
|
<button class="modal-close" onclick="closeConfigModal()"><i class="ti ti-x"></i></button>
|
||||||
<h3 class="modal-h"><i class="ti ti-key"></i> Clé API TMDB</h3>
|
<h3 class="modal-h"><i class="ti ti-settings"></i> Configuration globale</h3>
|
||||||
<div class="api-notice">
|
|
||||||
Obtenez votre clé gratuite sur <a href="https://www.themoviedb.org/settings/api" target="_blank">themoviedb.org</a>.
|
<div class="form-group" style="margin-bottom: 2rem;">
|
||||||
Elle sera chiffrée en base de données.
|
<label>Clé API TMDB (Pour récupération auto)</label>
|
||||||
|
<div style="display:flex; gap:0.5rem;">
|
||||||
|
<input type="text" id="tmdb-key-input" placeholder="Votre clé secrète TMDB">
|
||||||
|
<button class="btn-action outline" onclick="saveTmdbKey()"><i class="ti ti-check"></i></button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
|
||||||
<label>Clé API (v3)</label>
|
<div class="divider">Importation de données</div>
|
||||||
<input type="password" id="tmdb-key-input" placeholder="Saisir la clé…">
|
<div class="import-box">
|
||||||
|
<i class="ti ti-file-upload"></i>
|
||||||
|
<h4>Importer un fichier CSV</h4>
|
||||||
|
<p style="color:var(--muted); font-size:0.85rem; margin-top:0.5rem;">Glissez votre fichier ici ou cliquez pour parcourir</p>
|
||||||
|
<input type="file" id="csv-file" accept=".csv">
|
||||||
</div>
|
</div>
|
||||||
<button class="btn-save" onclick="saveTmdbKey()">Sauvegarder</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="overlay" id="password-modal" onclick="if(event.target===this) closePasswordModal()">
|
<div class="overlay" id="password-modal">
|
||||||
<div class="modal" style="max-width:400px;">
|
<div class="modal" style="max-width: 400px;">
|
||||||
<button class="modal-close" onclick="closePasswordModal()"><i class="ti ti-x"></i></button>
|
<button class="modal-close" onclick="closePasswordModal()"><i class="ti ti-x"></i></button>
|
||||||
<h3 class="modal-h"><i class="ti ti-lock"></i> Changer le mot de passe</h3>
|
<h3 class="modal-h"><i class="ti ti-shield-lock"></i> Sécurité du compte</h3>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Nouveau mot de passe</label>
|
<label>Nouveau mot de passe</label>
|
||||||
<input type="password" id="new-password-input" placeholder="Minimum 4 caractères">
|
<input type="password" id="new-password-input" placeholder="Minimum 4 caractères">
|
||||||
@@ -201,18 +227,25 @@
|
|||||||
<label>Confirmation</label>
|
<label>Confirmation</label>
|
||||||
<input type="password" id="new-password-confirm" placeholder="Répétez le mot de passe">
|
<input type="password" id="new-password-confirm" placeholder="Répétez le mot de passe">
|
||||||
</div>
|
</div>
|
||||||
<p id="pwd-error" style="color:#c0392b; font-size:0.82rem; display:none; margin-bottom:0.8rem;"></p>
|
<p id="pwd-error" style="color:#ff6b6b; font-size:0.85rem; display:none; margin-bottom:1rem;"></p>
|
||||||
<button class="btn-save" onclick="saveNewPassword()">Mettre à jour</button>
|
|
||||||
|
<div style="text-align: right;">
|
||||||
|
<button class="btn-action primary" onclick="saveNewPassword()"><i class="ti ti-lock-check"></i> Mettre à jour</button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="overlay" id="confirm-modal" onclick="if(event.target===this) closeConfirmModal()">
|
<div class="overlay" id="confirm-modal">
|
||||||
<div class="modal" style="max-width:350px; text-align:center;">
|
<div class="modal" style="max-width: 380px; text-align: center;">
|
||||||
<h3 class="modal-h" style="color:var(--red);">Suppression</h3>
|
<button class="modal-close" onclick="closeConfirmModal()"><i class="ti ti-x"></i></button>
|
||||||
<p style="margin-bottom: 2rem; color:var(--text-secondary);">Êtes-vous sûr de vouloir supprimer ces éléments ? Cette action est irréversible.</p>
|
<div style="font-size: 3rem; color: #ff6b6b; margin-bottom: 1rem;">
|
||||||
<div style="display:flex; gap:1rem;">
|
<i class="ti ti-alert-circle"></i>
|
||||||
<button class="btn btn-outline" style="flex:1;" onclick="closeConfirmModal()">Annuler</button>
|
</div>
|
||||||
<button class="btn btn-danger" style="flex:1;" id="confirm-btn">Supprimer</button>
|
<h3 style="color:var(--text); margin-bottom: 1rem; font-size: 1.2rem;">Suppression définitive</h3>
|
||||||
|
<p style="margin-bottom: 2rem; color:var(--muted); font-size: 0.95rem;">Êtes-vous sûr de vouloir supprimer ces éléments ? Cette action est irréversible et supprimera les données de la base.</p>
|
||||||
|
<div style="display: flex; gap: 1rem; justify-content: center;">
|
||||||
|
<button class="btn-action outline" onclick="closeConfirmModal()">Annuler</button>
|
||||||
|
<button class="btn-action danger-solid" id="confirm-btn">Oui, supprimer</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user