add video backend server, fix styling and more #54
+160
-111
@@ -29,7 +29,7 @@
|
|||||||
<body class="bg-light">
|
<body class="bg-light">
|
||||||
|
|
||||||
<nav class="navbar navbar-expand-lg navbar-custom">
|
<nav class="navbar navbar-expand-lg navbar-custom">
|
||||||
<div class="container">
|
<div class="container-fluid px-3 px-lg-4">
|
||||||
<a class="navbar-brand" style="margin-left: -7px;">
|
<a class="navbar-brand" style="margin-left: -7px;">
|
||||||
<img src="img/logo_w.png" style="max-width: 220px; height: 70px; object-fit: contain;">
|
<img src="img/logo_w.png" style="max-width: 220px; height: 70px; object-fit: contain;">
|
||||||
</a>
|
</a>
|
||||||
@@ -51,126 +51,175 @@
|
|||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<div class="container mt-5" style="max-width: 720px;">
|
<div class="container-fluid px-3 px-lg-4 py-4">
|
||||||
<h2>Admin - Année active</h2>
|
<div class="d-flex flex-wrap align-items-end justify-content-between gap-2 mb-3">
|
||||||
<p class="text-muted mb-3">
|
<div>
|
||||||
Cette année pilote tout le site (films affichés, checklist et statistiques).
|
<h2 class="mb-0">Admin</h2>
|
||||||
</p>
|
<div class="text-muted">Paramètres, utilisateurs et gestion des films.</div>
|
||||||
|
|
||||||
<div class="card p-3 mb-4">
|
|
||||||
<div class="row g-2 align-items-end">
|
|
||||||
<div class="col-md-6">
|
|
||||||
<label for="active_oscar_year" class="form-label">Année active</label>
|
|
||||||
<input type="number" class="form-control" id="active_oscar_year" placeholder="2026" min="1900" max="3000">
|
|
||||||
<div class="form-text">Ex: mets 2025 → tout le monde voit les stats/films 2025.</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-6">
|
|
||||||
<button type="button" id="save-active-year" class="btn btn-warning w-100">Appliquer l’année</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h2>Admin - Réinitialiser mot de passe utilisateur</h2>
|
|
||||||
<p class="text-muted mb-3">
|
|
||||||
Génère un mot de passe temporaire aléatoire. L'utilisateur devra choisir un nouveau mot de passe à sa prochaine connexion.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<div id="user-reset-response" class="alert d-none" role="alert"></div>
|
|
||||||
|
|
||||||
<form id="reset-user-password-form" class="card p-3 mb-4">
|
|
||||||
<div class="row g-2 align-items-end">
|
|
||||||
<div class="col-md-8">
|
|
||||||
<label for="reset_user_email" class="form-label">Email utilisateur</label>
|
|
||||||
<input type="email" class="form-control" id="reset_user_email" placeholder="[email protected]" required>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-4">
|
|
||||||
<button type="submit" class="btn btn-danger w-100">Reset</button>
|
|
||||||
</div>
|
|
||||||
<div class="col-12">
|
|
||||||
<div class="form-text">
|
|
||||||
Important: le mot de passe temporaire est affiché une seule fois ici. Copie-le et envoie-le à l'utilisateur.
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
|
|
||||||
<h2>Admin - Ajouter un film</h2>
|
|
||||||
<p class="text-muted mb-4">
|
|
||||||
Ajoute un film via l’API (<code>/api/movies/add</code>). Le serveur récupère automatiquement le titre/plot/affiche depuis OMDb avec l’<code>imdb_id</code>.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<div id="response" class="alert d-none" role="alert"></div>
|
<div id="response" class="alert d-none" role="alert"></div>
|
||||||
|
|
||||||
<form id="add-movie-form" class="card p-3">
|
<ul class="nav nav-tabs" id="adminTabs" role="tablist">
|
||||||
<div class="mb-3">
|
<li class="nav-item" role="presentation">
|
||||||
<label for="oscar_year" class="form-label">Oscar year</label>
|
<button class="nav-link active" id="admin-settings-tab" data-bs-toggle="tab" data-bs-target="#admin-settings" type="button" role="tab" aria-controls="admin-settings" aria-selected="true">
|
||||||
<input type="number" class="form-control" id="oscar_year" placeholder="2026" min="1900" max="3000" required>
|
Réglages
|
||||||
<div class="form-text">Permet de séparer les films et les stats par année.</div>
|
</button>
|
||||||
</div>
|
</li>
|
||||||
<div class="mb-3">
|
<li class="nav-item" role="presentation">
|
||||||
<label for="imdb_id" class="form-label">IMDB ID (ex: tt1234567)</label>
|
<button class="nav-link" id="admin-users-tab" data-bs-toggle="tab" data-bs-target="#admin-users" type="button" role="tab" aria-controls="admin-users" aria-selected="false">
|
||||||
<input type="text" class="form-control" id="imdb_id" placeholder="tt..." required>
|
Utilisateurs
|
||||||
</div>
|
</button>
|
||||||
<div class="mb-3">
|
</li>
|
||||||
<label for="category" class="form-label">Catégorie</label>
|
<li class="nav-item" role="presentation">
|
||||||
<input type="text" class="form-control" id="category" placeholder="Best Picture, etc." required>
|
<button class="nav-link" id="admin-movies-tab" data-bs-toggle="tab" data-bs-target="#admin-movies" type="button" role="tab" aria-controls="admin-movies" aria-selected="false">
|
||||||
</div>
|
Films
|
||||||
<div class="mb-3">
|
</button>
|
||||||
<label for="vod_link" class="form-label">Lien VOD</label>
|
</li>
|
||||||
<input type="url" class="form-control" id="vod_link" placeholder="https://..." required>
|
</ul>
|
||||||
</div>
|
|
||||||
<div class="d-flex gap-2">
|
|
||||||
<button type="submit" class="btn btn-primary">Ajouter</button>
|
|
||||||
<button type="button" id="reset-form" class="btn btn-outline-secondary">Reset</button>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
|
|
||||||
<hr class="my-4">
|
<div class="tab-content pt-3">
|
||||||
|
<div class="tab-pane fade show active" id="admin-settings" role="tabpanel" aria-labelledby="admin-settings-tab">
|
||||||
<h2>Admin - Gérer les films</h2>
|
<div class="row g-3">
|
||||||
<p class="text-muted mb-3">
|
<div class="col-12 col-xl-8">
|
||||||
Sélectionne une année, puis coche les films à supprimer.
|
<div class="card p-3">
|
||||||
</p>
|
<h4 class="mb-1">Année active</h4>
|
||||||
|
<p class="text-muted mb-3">
|
||||||
<div class="card p-3">
|
Cette année pilote tout le site (films affichés, checklist et statistiques).
|
||||||
<div class="row g-2 align-items-end">
|
</p>
|
||||||
<div class="col-md-6">
|
<div class="row g-2 align-items-end">
|
||||||
<label for="manage_year" class="form-label">Oscar year</label>
|
<div class="col-md-6">
|
||||||
<select id="manage_year" class="form-select">
|
<label for="active_oscar_year" class="form-label">Année active</label>
|
||||||
<option value="">Toutes</option>
|
<input type="number" class="form-control" id="active_oscar_year" placeholder="2026" min="1900" max="3000">
|
||||||
</select>
|
<div class="form-text">Ex: mets 2025 → tout le monde voit les stats/films 2025.</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-6 d-flex gap-2">
|
<div class="col-md-6">
|
||||||
<button type="button" id="refresh-movies" class="btn btn-outline-primary w-100">Rafraîchir</button>
|
<button type="button" id="save-active-year" class="btn btn-warning w-100">Appliquer l’année</button>
|
||||||
<button type="button" id="delete-selected" class="btn btn-danger w-100" disabled>Supprimer la sélection</button>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="mt-3">
|
|
||||||
<div class="d-flex justify-content-between align-items-center">
|
|
||||||
<div class="form-check">
|
|
||||||
<input class="form-check-input" type="checkbox" id="select-all-movies">
|
|
||||||
<label class="form-check-label" for="select-all-movies">Tout sélectionner</label>
|
|
||||||
</div>
|
</div>
|
||||||
<small class="text-muted"><span id="selected-count">0</span> sélectionné(s)</small>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="table-responsive mt-2">
|
<div class="tab-pane fade" id="admin-users" role="tabpanel" aria-labelledby="admin-users-tab">
|
||||||
<table class="table table-sm align-middle mb-0">
|
<div class="row g-3">
|
||||||
<thead>
|
<div class="col-12 col-xl-8">
|
||||||
<tr>
|
<div class="card p-3">
|
||||||
<th style="width: 1%;">Sel.</th>
|
<h4 class="mb-1">Réinitialiser mot de passe utilisateur</h4>
|
||||||
<th>Titre</th>
|
<p class="text-muted mb-3">
|
||||||
<th style="width: 20%;">Catégorie</th>
|
Génère un mot de passe temporaire aléatoire. L'utilisateur devra choisir un nouveau mot de passe à sa prochaine connexion.
|
||||||
<th style="width: 12%;">Année</th>
|
</p>
|
||||||
<th style="width: 1%;">Actions</th>
|
|
||||||
</tr>
|
<div id="user-reset-response" class="alert d-none" role="alert"></div>
|
||||||
</thead>
|
|
||||||
<tbody id="admin-movies-body">
|
<form id="reset-user-password-form">
|
||||||
<tr><td colspan="5" class="text-muted">Charge la liste…</td></tr>
|
<div class="row g-2 align-items-end">
|
||||||
</tbody>
|
<div class="col-md-8">
|
||||||
</table>
|
<label for="reset_user_email" class="form-label">Email utilisateur</label>
|
||||||
|
<input type="email" class="form-control" id="reset_user_email" placeholder="[email protected]" required>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4">
|
||||||
|
<button type="submit" class="btn btn-danger w-100">Reset</button>
|
||||||
|
</div>
|
||||||
|
<div class="col-12">
|
||||||
|
<div class="form-text">
|
||||||
|
Important: le mot de passe temporaire est affiché une seule fois ici. Copie-le et envoie-le à l'utilisateur.
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="tab-pane fade" id="admin-movies" role="tabpanel" aria-labelledby="admin-movies-tab">
|
||||||
|
<div class="row g-3">
|
||||||
|
<div class="col-12 col-xxl-4">
|
||||||
|
<div class="card p-3">
|
||||||
|
<h4 class="mb-1">Ajouter un film</h4>
|
||||||
|
<p class="text-muted mb-3">
|
||||||
|
Ajoute un film via l’API (<code>/api/movies/add</code>). Le serveur récupère automatiquement le titre/plot/affiche depuis OMDb avec l’<code>imdb_id</code>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<form id="add-movie-form">
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="oscar_year" class="form-label">Oscar year</label>
|
||||||
|
<input type="number" class="form-control" id="oscar_year" placeholder="2026" min="1900" max="3000" required>
|
||||||
|
<div class="form-text">Permet de séparer les films et les stats par année.</div>
|
||||||
|
</div>
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="imdb_id" class="form-label">IMDB ID (ex: tt1234567)</label>
|
||||||
|
<input type="text" class="form-control" id="imdb_id" placeholder="tt..." required>
|
||||||
|
</div>
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="category" class="form-label">Catégorie</label>
|
||||||
|
<input type="text" class="form-control" id="category" placeholder="Best Picture, etc." required>
|
||||||
|
</div>
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="vod_link" class="form-label">Lien VOD</label>
|
||||||
|
<input type="url" class="form-control" id="vod_link" placeholder="https://..." required>
|
||||||
|
</div>
|
||||||
|
<div class="d-flex gap-2">
|
||||||
|
<button type="submit" class="btn btn-primary">Ajouter</button>
|
||||||
|
<button type="button" id="reset-form" class="btn btn-outline-secondary">Reset</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-12 col-xxl-8">
|
||||||
|
<div class="card p-3">
|
||||||
|
<div class="d-flex flex-wrap align-items-end justify-content-between gap-2 mb-2">
|
||||||
|
<div>
|
||||||
|
<h4 class="mb-1">Gérer les films</h4>
|
||||||
|
<div class="text-muted">Sélectionne une année, puis coche les films à supprimer.</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row g-2 align-items-end">
|
||||||
|
<div class="col-md-6 col-xl-4">
|
||||||
|
<label for="manage_year" class="form-label">Oscar year</label>
|
||||||
|
<select id="manage_year" class="form-select">
|
||||||
|
<option value="">Toutes</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6 col-xl-4 d-flex gap-2">
|
||||||
|
<button type="button" id="refresh-movies" class="btn btn-outline-primary w-100">Rafraîchir</button>
|
||||||
|
<button type="button" id="delete-selected" class="btn btn-danger w-100" disabled>Supprimer</button>
|
||||||
|
</div>
|
||||||
|
<div class="col-12 col-xl-4">
|
||||||
|
<div class="d-flex justify-content-between align-items-center">
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="checkbox" id="select-all-movies">
|
||||||
|
<label class="form-check-label" for="select-all-movies">Tout sélectionner</label>
|
||||||
|
</div>
|
||||||
|
<small class="text-muted"><span id="selected-count">0</span> sélectionné(s)</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="table-responsive mt-2">
|
||||||
|
<table class="table table-sm align-middle mb-0">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th style="width: 1%;">Sel.</th>
|
||||||
|
<th>Titre</th>
|
||||||
|
<th style="width: 20%;">Catégorie</th>
|
||||||
|
<th style="width: 12%;">Année</th>
|
||||||
|
<th style="width: 1%;">Actions</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody id="admin-movies-body">
|
||||||
|
<tr><td colspan="5" class="text-muted">Charge la liste…</td></tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user