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
Ciao!
Sei nella scuola:
Non hai ancora effettuato ordini
Vai ai corsi
| Data |
Ordine |
Prodotto |
Ingressi |
Scadenza |
Prezzo |
Stato |
|
# |
|
/
|
Nessuna
|
€ |
|
Nessuna scuola associata.
= htmlspecialchars($sname) ?>
= htmlspecialchars($fullAddress) ?>
Selezionata