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; } // 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']; if (!empty($school['logo']) && file_exists("photoschool/" . $school['logo'])) { $school_logo_path = "photoschool/" . $school['logo']; } } } // === 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(); // === 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
Avatar

Ordini totali

Speso in totale

Ingressi disponibili

I tuoi ordini

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

/ Nessuna