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
Ciao!
Sei nella scuola:
Attenzione! Non hai un certificato medico valido caricato.
Ti potrebbe essere vietato l'accesso alle lezioni/pratiche.
Caricalo subito qui →
= number_format($acquistate) ?>
Acquistate
= number_format($praticate) ?>
Praticate
= number_format($da_praticare) ?>
Da praticare
= number_format($perse) ?>
Perse
= number_format($da_programmare) ?>
Da programmare
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)
Nessuna scuola associata.
= htmlspecialchars($sname) ?>
= htmlspecialchars($fullAddress) ?>
Selezionata