getConnection(); /* |-------------------------------------------------------------------------- | 1) Carico le scuole attive dell'utente |-------------------------------------------------------------------------- */ $stmt = $pdo->prepare(" SELECT s.id, s.name, s.logo, s.address_street, s.address_city, s.address_postal_code, s.address_province, s.address_country FROM user_schools us JOIN schools s ON us.school_id = s.id WHERE us.user_id = ? AND us.status = 'active' AND s.status = 'active' ORDER BY s.name "); $stmt->execute([(int)$iduserlogin]); $userSchools = $stmt->fetchAll(PDO::FETCH_ASSOC); /* |-------------------------------------------------------------------------- | 2) Cambio scuola da modale (POST) |-------------------------------------------------------------------------- */ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'change_school') { $newSchoolId = (int)($_POST['school_id'] ?? 0); $allowedIds = array_map(fn($r) => (int)$r['id'], $userSchools); if ($newSchoolId > 0 && in_array($newSchoolId, $allowedIds, true)) { // imposto sessione $_SESSION['school_id'] = $newSchoolId; // imposto anche il nome (comodo per UI) foreach ($userSchools as $r) { if ((int)$r['id'] === $newSchoolId) { $_SESSION['school_name'] = $r['name']; break; } } // flag: selezione esplicita $_SESSION['school_selected'] = 1; header('Location: user_dashboard.php'); exit; } } /* |-------------------------------------------------------------------------- | 3) Validazione school_id in sessione |-------------------------------------------------------------------------- */ $allowedIds = array_map(fn($r) => (int)$r['id'], $userSchools); // Se l'utente non ha scuole -> vai alla select (dove vedrà le pubbliche) if (count($userSchools) === 0) { header('Location: select_school.php'); exit; } // Se school_id esiste ma NON appartiene all'utente -> reset if (!empty($_SESSION['school_id']) && !in_array((int)$_SESSION['school_id'], $allowedIds, true)) { unset($_SESSION['school_id'], $_SESSION['school_name'], $_SESSION['school_selected']); } // Caso: una sola scuola -> auto-select (OK) if (count($userSchools) === 1 && empty($_SESSION['school_id'])) { $_SESSION['school_id'] = (int)$userSchools[0]['id']; $_SESSION['school_name'] = $userSchools[0]['name']; $_SESSION['school_selected'] = 1; echo $_SESSION['school_name']; exit; } // Caso: più scuole -> OBBLIGO selezione esplicita if (count($userSchools) > 1) { if (empty($_SESSION['school_id']) || empty($_SESSION['school_selected'])) { header('Location: select_school.php'); exit; } } // === DATI UTENTE === $stmt = $pdo->prepare("SELECT first_name, last_name, email, avatar FROM auth_users WHERE id = ?"); $stmt->execute([$iduserlogin]); $user = $stmt->fetch(); $avatar = $user['avatar'] ? '../upload/users/' . $user['avatar'] : '../assets/images/default-avatar.png'; // === SCUOLA CORRENTE === $school_id = (int)($_SESSION['school_id'] ?? 0); if ($school_id <= 0) { header('Location: select_school.php'); exit; } $school_name = 'Nessuna scuola selezionata'; $school_logo_path = null; // niente default if ($school_id) { $stmt = $pdo->prepare("SELECT name, logo FROM schools WHERE id = ?"); $stmt->execute([$school_id]); $school = $stmt->fetch(); if ($school) { $school_name = $school['name']; $logoRaw = trim($school['logo'] ?? ''); if (!empty($logoRaw)) { // Percorso fisico per verificare esistenza $physicalPath = __DIR__ . '/../' . $logoRaw; // da userarea/ sale a public/ + photoschool/... if (file_exists($physicalPath)) { // Percorso web corretto (root-relative) $school_logo_path = '/' . $logoRaw; } else { // Debug: scrivi nel log se il file non esiste error_log("LOGO SCUOLA NON TROVATO - school_id: $school_id | path fisico: $physicalPath"); } } } } // === ORDINI UTENTE === $stmt = $pdo->prepare(" SELECT o.*, p.name AS product_name, pv.name AS variation_name, c.name AS class_name, ct.level, ct.day_of_week FROM orders o JOIN products p ON o.product_id = p.id LEFT JOIN product_variations pv ON o.variation_id = pv.id LEFT JOIN classes c ON o.class_id = c.id LEFT JOIN class_types ct ON o.class_type_id = ct.id WHERE o.user_id = ? AND o.school_id = ? ORDER BY o.created_at DESC "); $stmt->execute([$iduserlogin, $school_id]); $orders = $stmt->fetchAll(); // Lezioni ACQUISTATE totali $stmt_acquistate = $pdo->prepare(" SELECT COALESCE(SUM(total_entries), 0) AS acquistate FROM orders WHERE user_id = ? AND school_id = ? AND status = 'completed' "); $stmt_acquistate->execute([$iduserlogin, $school_id]); $acquistate = (int) $stmt_acquistate->fetchColumn(); // Da PRATICARE (booked future) $stmt_da_praticare = $pdo->prepare(" SELECT COUNT(sb.id) AS da_praticare FROM session_bookings sb JOIN class_sessions cs ON sb.session_id = cs.id WHERE sb.user_id = ? AND cs.school_id = ? AND sb.status = 'booked' AND cs.session_date >= CURDATE() "); $stmt_da_praticare->execute([$iduserlogin, $school_id]); $da_praticare = (int) $stmt_da_praticare->fetchColumn(); // PRATICATE (attended + booked passate) $stmt_praticate = $pdo->prepare(" SELECT COUNT(sb.id) AS praticate FROM session_bookings sb JOIN class_sessions cs ON sb.session_id = cs.id WHERE sb.user_id = ? AND cs.school_id = ? AND ( sb.status = 'attended' OR (sb.status = 'booked' AND cs.session_date < CURDATE()) ) "); $stmt_praticate->execute([$iduserlogin, $school_id]); $praticate = (int) $stmt_praticate->fetchColumn(); // PERSE (missed + data passata) $stmt_perse = $pdo->prepare(" SELECT COUNT(sb.id) AS perse FROM session_bookings sb JOIN class_sessions cs ON sb.session_id = cs.id WHERE sb.user_id = ? AND cs.school_id = ? AND sb.status = 'missed' AND cs.session_date < CURDATE() "); $stmt_perse->execute([$iduserlogin, $school_id]); $perse = (int) $stmt_perse->fetchColumn(); // DA PROGRAMMARE (residuo = acquistate - perse - praticate - da_praticare) $da_programmare = max(0, $acquistate - $perse - $praticate - $da_praticare);; // === CONTROLLA CERTIFICATI VALIDI === $stmt_cert = $pdo->prepare(" SELECT COUNT(*) AS valid_count FROM user_medical_certificates WHERE user_id = ? AND expiry_date IS NOT NULL AND expiry_date >= CURDATE() AND is_valid = 1 "); $stmt_cert->execute([$iduserlogin]); $cert_result = $stmt_cert->fetch(PDO::FETCH_ASSOC); $has_valid_cert = ($cert_result['valid_count'] > 0); // === STATISTICHE RAPIDE === $total_spent = array_sum(array_column($orders, 'price')); $total_entries = array_sum(array_column($orders, 'total_entries')); $available_entries = array_sum(array_column($orders, 'available_entries')); $active_orders = count(array_filter($orders, fn($o) => $o['status'] === 'completed' && (!$o['expiration_date'] || strtotime($o['expiration_date']) >= time()))); ?> La mia Dashboard - Yogiboook
Logo <?php echo htmlspecialchars($school_name); ?>

Ciao!

Sei nella scuola:

Le mie lezioni

Acquistate

Praticate

Da praticare

Perse

Da programmare

I tuoi ordini

totali
Non hai ancora effettuato ordini
Vai ai corsi
Data Ordine Prodotto Ingressi Scadenza Prezzo Stato
#

/ Nessuna
Rimuovimi da questa scuola

(azione irreversibile: perderai lezioni, crediti e storico associato)