fix grafica

This commit is contained in:
Francesco Picone
2025-12-06 17:53:12 +01:00
parent ca1d604701
commit 0be59cc836
18 changed files with 501 additions and 48 deletions

View File

@@ -68,7 +68,14 @@ $top_lessons = $stmt->fetchAll();
<header class="header">
<div class="container">
<div class="header-content">
<h1 class="logo">Pilates Studio - Admin</h1>
<?php if (file_exists('../uploads/images/logo.png')): ?>
<div class="logo">
<img src="../uploads/images/logo.png" alt="Pilates Studio" class="logo-image">
<span style="margin-left: 10px; color: var(--primary-color); font-weight: 600;">Admin</span>
</div>
<?php else: ?>
<h1 class="logo">Pilates Studio - Admin</h1>
<?php endif; ?>
<nav class="nav">
<a href="../index.php" class="btn btn-outline">Vedi Sito</a>
<a href="../includes/logout.php" class="btn btn-secondary">Logout</a>

View File

@@ -32,6 +32,29 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$is_demo = isset($_POST['is_demo']) ? 1 : 0;
$is_active = isset($_POST['is_active']) ? 1 : 0;
// Gestione upload file locale
if ($type === 'video' && $video_platform === 'local' && isset($_FILES['video_file']) && $_FILES['video_file']['error'] === UPLOAD_ERR_OK) {
$upload_dir = $is_demo ? '../uploads/lessons/demo/' : '../uploads/lessons/pay/';
// Crea nome file sicuro
$file_extension = strtolower(pathinfo($_FILES['video_file']['name'], PATHINFO_EXTENSION));
$allowed_extensions = ['mp4', 'webm', 'ogg', 'mov'];
if (!in_array($file_extension, $allowed_extensions)) {
$error = 'Formato video non supportato. Usa: mp4, webm, ogg, mov';
} else {
$file_name = uniqid('video_') . '_' . time() . '.' . $file_extension;
$upload_path = $upload_dir . $file_name;
if (move_uploaded_file($_FILES['video_file']['tmp_name'], $upload_path)) {
// Imposta il percorso relativo per il database
$video_url = '/uploads/lessons/' . ($is_demo ? 'demo' : 'pay') . '/' . $file_name;
} else {
$error = 'Errore durante il caricamento del file';
}
}
}
// Validazione
if (empty($title)) {
$error = 'Il titolo è obbligatorio';
@@ -39,7 +62,9 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$error = 'La descrizione è obbligatoria';
} elseif ($type === 'live' && empty($live_date)) {
$error = 'Per le lezioni live, la data è obbligatoria';
} else {
} elseif ($type === 'video' && $video_platform === 'local' && empty($video_url)) {
$error = 'Devi caricare un file video per le lezioni locali';
} elseif (!$error) {
$pdo = get_db_connection();
try {
@@ -94,7 +119,14 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
<header class="header">
<div class="container">
<div class="header-content">
<h1 class="logo">Pilates Studio - Admin</h1>
<?php if (file_exists('../uploads/images/logo.png')): ?>
<div class="logo">
<img src="../uploads/images/logo.png" alt="Pilates Studio" class="logo-image">
<span style="margin-left: 10px; color: var(--primary-color); font-weight: 600;">Admin</span>
</div>
<?php else: ?>
<h1 class="logo">Pilates Studio - Admin</h1>
<?php endif; ?>
<nav class="nav">
<a href="lessons.php" class="btn btn-outline">← Torna alle Lezioni</a>
<a href="../includes/logout.php" class="btn btn-secondary">Logout</a>
@@ -122,7 +154,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
<?php endif; ?>
<div class="card">
<form method="POST" action="">
<form method="POST" action="" enctype="multipart/form-data">
<!-- Informazioni Base -->
<h3 style="margin-bottom: 1rem; color: var(--primary-color);">Informazioni Base</h3>
@@ -156,20 +188,29 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
<div class="form-group">
<label for="video_platform" class="form-label">Piattaforma Video</label>
<select id="video_platform" name="video_platform" class="form-control">
<option value="local">File Locale</option>
<select id="video_platform" name="video_platform" class="form-control" onchange="toggleVideoInput()">
<option value="local">File Locale (Carica dal PC)</option>
<option value="youtube">YouTube</option>
<option value="vimeo">Vimeo</option>
<option value="s3">AWS S3</option>
</select>
</div>
<div class="form-group">
<label for="video_url" class="form-label">URL/Percorso Video</label>
<!-- Upload file locale -->
<div id="local-upload" class="form-group">
<label for="video_file" class="form-label">Carica Video *</label>
<input type="file" id="video_file" name="video_file" class="form-control"
accept="video/mp4,video/webm,video/ogg,video/quicktime">
<small class="text-muted">Formati supportati: MP4, WebM, OGG, MOV. Il file verrà salvato automaticamente nella cartella demo/pay.</small>
</div>
<!-- URL esterno -->
<div id="external-url" class="form-group" style="display: none;">
<label for="video_url" class="form-label">URL Video</label>
<input type="text" id="video_url" name="video_url" class="form-control"
placeholder="es: https://youtube.com/watch?v=..."
value="<?php echo htmlspecialchars($_POST['video_url'] ?? ''); ?>">
<small class="text-muted">Lascia vuoto se caricherai il video successivamente</small>
<small class="text-muted">Inserisci l'URL del video sulla piattaforma esterna</small>
</div>
<div class="form-group">
@@ -280,6 +321,29 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
liveFields.style.display = 'block';
}
}
// Mostra/nascondi campi upload/URL in base alla piattaforma
function toggleVideoInput() {
const platform = document.getElementById('video_platform').value;
const localUpload = document.getElementById('local-upload');
const externalUrl = document.getElementById('external-url');
const videoFileInput = document.getElementById('video_file');
if (platform === 'local') {
localUpload.style.display = 'block';
externalUrl.style.display = 'none';
videoFileInput.required = true;
} else {
localUpload.style.display = 'none';
externalUrl.style.display = 'block';
videoFileInput.required = false;
}
}
// Inizializza lo stato al caricamento
document.addEventListener('DOMContentLoaded', function() {
toggleVideoInput();
});
</script>
<script src="../assets/js/main.js"></script>
</body>

View File

@@ -53,7 +53,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$category = sanitize_input($_POST['category'] ?? '');
$price = floatval($_POST['price'] ?? 0);
$duration = !empty($_POST['duration']) ? intval($_POST['duration']) : null;
$video_url = sanitize_input($_POST['video_url'] ?? '');
$video_url = sanitize_input($_POST['video_url'] ?? '') ?: $lesson['video_url']; // Mantieni il vecchio se non specificato
$video_platform = $_POST['video_platform'] ?? 'local';
$live_url = sanitize_input($_POST['live_url'] ?? '');
$live_platform = sanitize_input($_POST['live_platform'] ?? '');
@@ -61,6 +61,33 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$is_demo = isset($_POST['is_demo']) ? 1 : 0;
$is_active = isset($_POST['is_active']) ? 1 : 0;
// Gestione upload nuovo file locale (opzionale)
if ($type === 'video' && $video_platform === 'local' && isset($_FILES['video_file']) && $_FILES['video_file']['error'] === UPLOAD_ERR_OK) {
$upload_dir = $is_demo ? '../uploads/lessons/demo/' : '../uploads/lessons/pay/';
// Crea nome file sicuro
$file_extension = strtolower(pathinfo($_FILES['video_file']['name'], PATHINFO_EXTENSION));
$allowed_extensions = ['mp4', 'webm', 'ogg', 'mov'];
if (!in_array($file_extension, $allowed_extensions)) {
$error = 'Formato video non supportato. Usa: mp4, webm, ogg, mov';
} else {
$file_name = uniqid('video_') . '_' . time() . '.' . $file_extension;
$upload_path = $upload_dir . $file_name;
if (move_uploaded_file($_FILES['video_file']['tmp_name'], $upload_path)) {
// Elimina il vecchio file se esisteva
if (!empty($lesson['video_url']) && file_exists('../' . $lesson['video_url'])) {
@unlink('../' . $lesson['video_url']);
}
// Imposta il nuovo percorso
$video_url = '/uploads/lessons/' . ($is_demo ? 'demo' : 'pay') . '/' . $file_name;
} else {
$error = 'Errore durante il caricamento del file';
}
}
}
// Validazione
if (empty($title)) {
$error = 'Il titolo è obbligatorio';
@@ -68,7 +95,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$error = 'La descrizione è obbligatoria';
} elseif ($type === 'live' && empty($live_date)) {
$error = 'Per le lezioni live, la data è obbligatoria';
} else {
} elseif (!$error) {
try {
$stmt = $pdo->prepare("
UPDATE lessons SET
@@ -130,7 +157,14 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
<header class="header">
<div class="container">
<div class="header-content">
<h1 class="logo">Pilates Studio - Admin</h1>
<?php if (file_exists('../uploads/images/logo.png')): ?>
<div class="logo">
<img src="../uploads/images/logo.png" alt="Pilates Studio" class="logo-image">
<span style="margin-left: 10px; color: var(--primary-color); font-weight: 600;">Admin</span>
</div>
<?php else: ?>
<h1 class="logo">Pilates Studio - Admin</h1>
<?php endif; ?>
<nav class="nav">
<a href="lessons.php" class="btn btn-outline">← Torna alle Lezioni</a>
<a href="../includes/logout.php" class="btn btn-secondary">Logout</a>
@@ -158,7 +192,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
<?php endif; ?>
<div class="card">
<form method="POST" action="">
<form method="POST" action="" enctype="multipart/form-data">
<!-- Informazioni Base -->
<h3 style="margin-bottom: 1rem; color: var(--primary-color);">Informazioni Base</h3>
@@ -192,20 +226,34 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
<div class="form-group">
<label for="video_platform" class="form-label">Piattaforma Video</label>
<select id="video_platform" name="video_platform" class="form-control">
<option value="local" <?php echo ($_POST['video_platform'] ?? $lesson['video_platform']) === 'local' ? 'selected' : ''; ?>>File Locale</option>
<select id="video_platform" name="video_platform" class="form-control" onchange="toggleVideoInput()">
<option value="local" <?php echo ($_POST['video_platform'] ?? $lesson['video_platform']) === 'local' ? 'selected' : ''; ?>>File Locale (Carica dal PC)</option>
<option value="youtube" <?php echo ($_POST['video_platform'] ?? $lesson['video_platform']) === 'youtube' ? 'selected' : ''; ?>>YouTube</option>
<option value="vimeo" <?php echo ($_POST['video_platform'] ?? $lesson['video_platform']) === 'vimeo' ? 'selected' : ''; ?>>Vimeo</option>
<option value="s3" <?php echo ($_POST['video_platform'] ?? $lesson['video_platform']) === 's3' ? 'selected' : ''; ?>>AWS S3</option>
</select>
</div>
<div class="form-group">
<label for="video_url" class="form-label">URL/Percorso Video</label>
<!-- Upload file locale -->
<div id="local-upload" class="form-group" style="display: <?php echo ($_POST['video_platform'] ?? $lesson['video_platform']) === 'local' ? 'block' : 'none'; ?>;">
<?php if (!empty($lesson['video_url'])): ?>
<div style="margin-bottom: 0.5rem; padding: 0.5rem; background: #e8f4f8; border-radius: 4px;">
<strong>File attuale:</strong> <?php echo htmlspecialchars(basename($lesson['video_url'])); ?>
</div>
<?php endif; ?>
<label for="video_file" class="form-label">Carica Nuovo Video (opzionale)</label>
<input type="file" id="video_file" name="video_file" class="form-control"
accept="video/mp4,video/webm,video/ogg,video/quicktime">
<small class="text-muted">Formati supportati: MP4, WebM, OGG, MOV. Lascia vuoto per mantenere il file attuale.</small>
</div>
<!-- URL esterno -->
<div id="external-url" class="form-group" style="display: <?php echo ($_POST['video_platform'] ?? $lesson['video_platform']) === 'local' ? 'none' : 'block'; ?>;">
<label for="video_url" class="form-label">URL Video</label>
<input type="text" id="video_url" name="video_url" class="form-control"
placeholder="es: https://youtube.com/watch?v=..."
value="<?php echo htmlspecialchars($_POST['video_url'] ?? $lesson['video_url'] ?? ''); ?>">
<small class="text-muted">Lascia vuoto se caricherai il video successivamente</small>
<small class="text-muted">Inserisci l'URL del video sulla piattaforma esterna</small>
</div>
<div class="form-group">
@@ -323,6 +371,26 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
liveFields.style.display = 'block';
}
}
// Mostra/nascondi campi upload/URL in base alla piattaforma
function toggleVideoInput() {
const platform = document.getElementById('video_platform').value;
const localUpload = document.getElementById('local-upload');
const externalUrl = document.getElementById('external-url');
if (platform === 'local') {
localUpload.style.display = 'block';
externalUrl.style.display = 'none';
} else {
localUpload.style.display = 'none';
externalUrl.style.display = 'block';
}
}
// Inizializza lo stato al caricamento
document.addEventListener('DOMContentLoaded', function() {
toggleVideoInput();
});
</script>
<script src="../assets/js/main.js"></script>
</body>

View File

@@ -58,7 +58,14 @@ $lessons = $stmt->fetchAll();
<header class="header">
<div class="container">
<div class="header-content">
<h1 class="logo">Pilates Studio - Admin</h1>
<?php if (file_exists('../uploads/images/logo.png')): ?>
<div class="logo">
<img src="../uploads/images/logo.png" alt="Pilates Studio" class="logo-image">
<span style="margin-left: 10px; color: var(--primary-color); font-weight: 600;">Admin</span>
</div>
<?php else: ?>
<h1 class="logo">Pilates Studio - Admin</h1>
<?php endif; ?>
<nav class="nav">
<a href="../index.php" class="btn btn-outline">Vedi Sito</a>
<a href="../includes/logout.php" class="btn btn-secondary">Logout</a>
@@ -90,6 +97,7 @@ $lessons = $stmt->fetchAll();
<div class="card">
<?php if (!empty($lessons)): ?>
<div class="table-container">
<table class="table">
<thead>
<tr>
@@ -135,6 +143,7 @@ $lessons = $stmt->fetchAll();
<?php endforeach; ?>
</tbody>
</table>
</div>
<?php else: ?>
<p class="text-muted text-center">Nessuna lezione disponibile. <a href="lesson_create.php">Creane una!</a></p>
<?php endif; ?>

View File

@@ -49,7 +49,14 @@ $stats = $stmt->fetch();
<header class="header">
<div class="container">
<div class="header-content">
<h1 class="logo">Pilates Studio - Admin</h1>
<?php if (file_exists('../uploads/images/logo.png')): ?>
<div class="logo">
<img src="../uploads/images/logo.png" alt="Pilates Studio" class="logo-image">
<span style="margin-left: 10px; color: var(--primary-color); font-weight: 600;">Admin</span>
</div>
<?php else: ?>
<h1 class="logo">Pilates Studio - Admin</h1>
<?php endif; ?>
<nav class="nav">
<a href="../index.php" class="btn btn-outline">Vedi Sito</a>
<a href="../includes/logout.php" class="btn btn-secondary">Logout</a>
@@ -99,6 +106,7 @@ $stats = $stmt->fetch();
<div class="card">
<?php if (!empty($purchases)): ?>
<div class="table-container">
<table class="table">
<thead>
<tr>

View File

@@ -56,7 +56,14 @@ $users = $stmt->fetchAll();
<header class="header">
<div class="container">
<div class="header-content">
<h1 class="logo">Pilates Studio - Admin</h1>
<?php if (file_exists('../uploads/images/logo.png')): ?>
<div class="logo">
<img src="../uploads/images/logo.png" alt="Pilates Studio" class="logo-image">
<span style="margin-left: 10px; color: var(--primary-color); font-weight: 600;">Admin</span>
</div>
<?php else: ?>
<h1 class="logo">Pilates Studio - Admin</h1>
<?php endif; ?>
<nav class="nav">
<a href="../index.php" class="btn btn-outline">Vedi Sito</a>
<a href="../includes/logout.php" class="btn btn-secondary">Logout</a>
@@ -87,6 +94,7 @@ $users = $stmt->fetchAll();
<p class="text-muted mb-2">Totale utenti registrati: <strong><?php echo count($users); ?></strong></p>
<?php if (!empty($users)): ?>
<div class="table-container">
<table class="table">
<thead>
<tr>
@@ -132,6 +140,7 @@ $users = $stmt->fetchAll();
<?php endforeach; ?>
</tbody>
</table>
</div>
<?php else: ?>
<p class="text-muted text-center">Nessun utente registrato ancora.</p>
<?php endif; ?>