Initial commit
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
<footer class="page-footer">
|
||||
<p class="mb-0">YogiBook © 2025. All right reserved.</p>
|
||||
</footer>
|
||||
@@ -0,0 +1,75 @@
|
||||
<?php
|
||||
require_once(__DIR__ . '/../class/db-functions.php');
|
||||
|
||||
$db = DBHandlerSelect::getInstance()->getConnection();
|
||||
|
||||
ini_set('display_errors', 1);
|
||||
ini_set('display_startup_errors', 1);
|
||||
error_reporting(E_ALL | E_STRICT);
|
||||
|
||||
include('../../extra/auth.php');
|
||||
|
||||
if (! Auth::check()) {
|
||||
redirectTo('../../public/login');
|
||||
}
|
||||
|
||||
$user = Auth::user();
|
||||
|
||||
$iduserlogin = $user->present()->id;
|
||||
$nameuser = $user->present()->first_name;
|
||||
$surnameuser = $user->present()->last_name;
|
||||
$emailuser = $user->present()->email;
|
||||
$avatar = $user->present()->avatar;
|
||||
$kindofrole = $user->present()->role_id; // <-- Questo è il ruolo (es. 1=admin, 2=teacher, 3=student, ecc.)
|
||||
|
||||
// --- INIZIO: Reindirizzamento intelligente per studenti senza profilo ---
|
||||
if (session_status() == PHP_SESSION_NONE) {
|
||||
session_start();
|
||||
}
|
||||
|
||||
// Definisci qui l'ID del ruolo STUDENTE (cambialo se è diverso!)
|
||||
define('ROLE_STUDENTE', 2); // Cambia 3 con il ruolo corretto del tuo studente
|
||||
|
||||
// Escludi alcune pagine dove NON vuoi il redirect (es. login, logout, profile)
|
||||
$current_page = basename($_SERVER['PHP_SELF']);
|
||||
$no_redirect_pages = ['login.php', 'logout.php', 'student_profile.php', 'register.php'];
|
||||
|
||||
if (
|
||||
$kindofrole == ROLE_STUDENTE &&
|
||||
!in_array($current_page, $no_redirect_pages) &&
|
||||
!isset($_SESSION['student_profile_completed'])
|
||||
) {
|
||||
// Controlla se esiste il record in tabella students
|
||||
$stmt = $db->prepare("SELECT id FROM students WHERE user_id = ? LIMIT 1");
|
||||
$stmt->execute([$iduserlogin]);
|
||||
$student_exists = $stmt->fetch();
|
||||
|
||||
if (!$student_exists) {
|
||||
// Non ha completato il profilo → reindirizza
|
||||
$_SESSION['student_profile_pending'] = true;
|
||||
header("Location: student_profile.php");
|
||||
exit;
|
||||
} else {
|
||||
// Ha già completato → segna per non controllare più
|
||||
$_SESSION['student_profile_completed'] = true;
|
||||
}
|
||||
}
|
||||
// --- FINE: Reindirizzamento intelligente ---
|
||||
|
||||
$_SESSION["iduserlogin"] = $iduserlogin;
|
||||
$_SESSION["nameuser"] = $nameuser;
|
||||
$_SESSION["surnameuser"] = $surnameuser;
|
||||
$_SESSION["emailuser"] = $emailuser;
|
||||
$_SESSION["photouser"] = $avatar;
|
||||
|
||||
$photouser = $_SESSION["photouser"];
|
||||
|
||||
|
||||
|
||||
|
||||
// include school settings
|
||||
include('schoolid_select.php');
|
||||
|
||||
|
||||
// include school settings
|
||||
include('school_settings_loader.php');
|
||||
@@ -0,0 +1,215 @@
|
||||
<?php
|
||||
// Recupera logo e nome scuola corrente (da sessione)
|
||||
$school_logo_path = null;
|
||||
$school_display_name = 'Nessuna scuola selezionata';
|
||||
|
||||
if (!empty($_SESSION['school_id'])) {
|
||||
$school_id = (int)$_SESSION['school_id'];
|
||||
|
||||
$stmt_school = $pdo->prepare("SELECT name, logo FROM schools WHERE id = ?");
|
||||
$stmt_school->execute([$school_id]);
|
||||
$current_school = $stmt_school->fetch(PDO::FETCH_ASSOC);
|
||||
echo $current_school['name'];
|
||||
echo "Ciao";
|
||||
if ($current_school) {
|
||||
$school_display_name = $current_school['name'];
|
||||
|
||||
$logoRaw = trim($current_school['logo'] ?? '');
|
||||
if (!empty($logoRaw)) {
|
||||
$physicalPath = __DIR__ . '/../' . $logoRaw; // adatta path se necessario
|
||||
if (file_exists($physicalPath)) {
|
||||
$school_logo_path = '/' . $logoRaw; // path web root-relative
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
<style>
|
||||
.school-info {
|
||||
background: #f8f9fa;
|
||||
border-bottom: 1px solid #dee2e6;
|
||||
}
|
||||
|
||||
.school-info img {
|
||||
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
.school-info .fw-bold {
|
||||
color: #343a40;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
</style>
|
||||
<div class="sidebar-wrapper" data-simplebar="true">
|
||||
<div class="sidebar-header">
|
||||
<div>
|
||||
<img src="assets/images/logo-icon.png" class="logo-icon" alt="logo icon">
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="logo-text">YogiBoook</h4>
|
||||
</div>
|
||||
<div class="toggle-icon ms-auto"><i class='bx bx-arrow-back'></i>
|
||||
</div>
|
||||
</div>
|
||||
<!--navigation-->
|
||||
<ul class="metismenu" id="menu">
|
||||
<!-- Logo e nome scuola corrente -->
|
||||
<!-- Logo e nome scuola corrente (rettangolare, naturale) -->
|
||||
<div class="school-info text-center py-3 px-2 border-bottom">
|
||||
<?php if ($logoRaw): ?>
|
||||
<img src="<?= htmlspecialchars($logoRaw) ?>"
|
||||
alt="Logo <?= htmlspecialchars($school_display_name) ?>"
|
||||
class="img-fluid mb-2"
|
||||
style="max-height: 80px; width: auto; object-fit: contain; border-radius: 8px; border: 1px solid #e9ecef; box-shadow: 0 2px 6px rgba(0,0,0,0.08);">
|
||||
<?php else: ?>
|
||||
<div class="bg-light d-inline-block p-3 mb-2 rounded-3" style="width: 60px; height: 60px;">
|
||||
<i class="bx bx-building-house bx-md text-muted"></i>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="fw-bold text-truncate" style="font-size: 1rem; max-width: 180px; margin: 0 auto;">
|
||||
<?= htmlspecialchars($school_display_name) ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
//menù user
|
||||
if ((Auth::user()->hasRole('User')) || (Auth::user()->hasRole('Admin'))) : ?>
|
||||
<li class="menu-label">Utente</li>
|
||||
<li>
|
||||
<a href="user_dashboard.php">
|
||||
<div class="parent-icon"><i class="bx bx-home"></i></div>
|
||||
<div class="menu-title">Dashboard Utente</div>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="my_lessons.php">
|
||||
<div class="parent-icon"><i class="bx bx-store"></i></div>
|
||||
<div class="menu-title">Le mie prenotazioni</div>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="my_certificates.php">
|
||||
<div class="parent-icon"><i class="bx bx-store"></i></div>
|
||||
<div class="menu-title">Certificati</div>
|
||||
</a>
|
||||
</li>
|
||||
<?php if (!empty($schoolSettings['portal_purchases_enabled'])): ?>
|
||||
<li>
|
||||
<a href="shop-school.php">
|
||||
<div class="parent-icon"><i class="bx bx-store"></i></div>
|
||||
<div class="menu-title">Shop</div>
|
||||
</a>
|
||||
</li>
|
||||
<?php endif; ?>
|
||||
<li>
|
||||
<a href="checkout.php">
|
||||
<div class="parent-icon"><i class="bx bx-cart"></i></div>
|
||||
<div class="menu-title">Carrello</div>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="user-settings.php">
|
||||
<div class="parent-icon"><i class="bx bx-cog"></i></div>
|
||||
<div class="menu-title">Impostazioni</div>
|
||||
</a>
|
||||
</li>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php
|
||||
//menù school_owner
|
||||
if ((Auth::user()->hasRole('school_owner')) || (Auth::user()->hasRole('Admin'))) : ?>
|
||||
<li class="menu-label">Proprietario Scuola</li>
|
||||
<li>
|
||||
<a href="school_dashboard.php">
|
||||
<div class="parent-icon"><i class="bx bx-chalkboard"></i></div>
|
||||
<div class="menu-title">Dashboard Scuola</div>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="future_sessions.php">
|
||||
<div class="parent-icon"><i class="bx bx-chalkboard"></i></div>
|
||||
<div class="menu-title">Calendario Lezioni</div>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="products.php">
|
||||
<div class="parent-icon"><i class="bx bx-package"></i></div>
|
||||
<div class="menu-title">Prodotti</div>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="school_settings.php">
|
||||
<div class="parent-icon"><i class="bx bx-cog"></i></div>
|
||||
<div class="menu-title">Impostazioni</div>
|
||||
</a>
|
||||
</li>
|
||||
<?php endif; ?>
|
||||
<li class="menu-label">Insegnanti</li>
|
||||
<?php
|
||||
//menù teacher
|
||||
|
||||
if ((Auth::user()->hasRole('school_owner')) || (Auth::user()->hasRole('Admin'))) : ?>
|
||||
|
||||
<li>
|
||||
<a href="teacher_list.php">
|
||||
<div class="parent-icon"><i class="bx bx-chalkboard"></i></div>
|
||||
<div class="menu-title">Profilo insegnanti</div>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<?php endif; ?>
|
||||
|
||||
<?php
|
||||
if ((Auth::user()->hasRole('school_owner')) || (Auth::user()->hasRole('Admin')) || (Auth::user()->hasRole('teacher'))) : ?>
|
||||
|
||||
<li>
|
||||
<a href="teacher_page.php">
|
||||
<div class="parent-icon"><i class="bx bx-chalkboard"></i></div>
|
||||
<div class="menu-title">Il mio profilo</div>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<?php endif; ?>
|
||||
|
||||
|
||||
<?php
|
||||
//menù admin only
|
||||
if ((Auth::user()->hasRole('Admin'))) : ?>
|
||||
<li class="menu-label">Subscription Area</li>
|
||||
<li>
|
||||
<a href="admin_subscriptions.php" target="">
|
||||
<div class="parent-icon"><i class="bx bx-layout"></i></div>
|
||||
<div class="menu-title">Subscription</div>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="admin_subscription_plans.php" target="">
|
||||
<div class="parent-icon"><i class="bx bx-layout"></i></div>
|
||||
<div class="menu-title">Subscription Plan</div>
|
||||
</a>
|
||||
</li>
|
||||
<li class="menu-label">Others</li>
|
||||
<li>
|
||||
<a href="template/index.html" target="_blank">
|
||||
<div class="parent-icon"><i class="bx bx-layout"></i></div>
|
||||
<div class="menu-title">Template</div>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://codervent.com/rocker/documentation/index.html" target="_blank">
|
||||
<div class="parent-icon"><i class="bx bx-book"></i></div>
|
||||
<div class="menu-title">Documentation</div>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://themeforest.net/user/codervent" target="_blank">
|
||||
<div class="parent-icon"><i class="bx bx-support"></i></div>
|
||||
<div class="menu-title">Support</div>
|
||||
</a>
|
||||
</li>
|
||||
<?php endif; ?>
|
||||
</ul>
|
||||
|
||||
<!--end navigation-->
|
||||
</div>
|
||||
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
session_start();
|
||||
|
||||
// Recupera la chiave dell'elemento da rimuovere
|
||||
$cart_key = $_POST['cart_key'] ?? '';
|
||||
|
||||
if ($cart_key && isset($_SESSION['cart'][$cart_key])) {
|
||||
// Rimuovi l'elemento dal carrello
|
||||
unset($_SESSION['cart'][$cart_key]);
|
||||
echo json_encode(['success' => true]);
|
||||
} else {
|
||||
echo json_encode(['success' => false, 'message' => 'Elemento non trovato']);
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
<?php
|
||||
// include/school_settings_loader.php
|
||||
|
||||
// Evita inclusioni multiple
|
||||
if (defined('SCHOOL_SETTINGS_LOADED')) return;
|
||||
define('SCHOOL_SETTINGS_LOADED', true);
|
||||
|
||||
global $schoolSettings; // o usa $_SESSION['school_settings'] se preferisci
|
||||
|
||||
$school_id = (int)($_SESSION['school_id'] ?? 0);
|
||||
|
||||
if ($school_id <= 0) {
|
||||
// Nessuna scuola selezionata → valori di default minimi
|
||||
$schoolSettings = [
|
||||
'portal_purchases_enabled' => 0,
|
||||
'allowed_product_types' => 'subscription,carnet,drop_in',
|
||||
'payment_methods' => 'manual',
|
||||
'currency_code' => 'EUR',
|
||||
'enable_notifications' => 1,
|
||||
'allow_freeze_global' => 1,
|
||||
'freeze_max_days_global' => 30,
|
||||
'auto_propagate_on_purchase' => 1,
|
||||
'allow_full_access_rebooking' => 1,
|
||||
// ... aggiungi tutti gli altri campi con default sensati
|
||||
];
|
||||
} else {
|
||||
$pdo = DBHandlerSelect::getInstance()->getConnection();
|
||||
|
||||
$stmt = $pdo->prepare("
|
||||
SELECT *
|
||||
FROM school_settings
|
||||
WHERE school_id = ?
|
||||
LIMIT 1
|
||||
");
|
||||
$stmt->execute([$school_id]);
|
||||
$settings = $stmt->fetch(PDO::FETCH_ASSOC);
|
||||
|
||||
if ($settings) {
|
||||
$schoolSettings = $settings;
|
||||
} else {
|
||||
// Scuola senza impostazioni → crea record con default
|
||||
$stmt_insert = $pdo->prepare("
|
||||
INSERT INTO school_settings (school_id) VALUES (?)
|
||||
");
|
||||
$stmt_insert->execute([$school_id]);
|
||||
|
||||
// Ricarica dopo insert
|
||||
$stmt = $pdo->prepare("SELECT * FROM school_settings WHERE school_id = ? LIMIT 1");
|
||||
$stmt->execute([$school_id]);
|
||||
$schoolSettings = $stmt->fetch(PDO::FETCH_ASSOC) ?: [];
|
||||
}
|
||||
|
||||
// Fallback per campi che potrebbero essere NULL
|
||||
$schoolSettings = array_merge([
|
||||
'portal_purchases_enabled' => 1,
|
||||
'allowed_product_types' => 'subscription,carnet,drop_in',
|
||||
'payment_methods' => 'manual',
|
||||
'currency_code' => 'EUR',
|
||||
'enable_notifications' => 1,
|
||||
'allow_freeze_global' => 1,
|
||||
'freeze_max_days_global' => 30,
|
||||
'auto_propagate_on_purchase' => 1,
|
||||
'allow_full_access_rebooking' => 1,
|
||||
// ... tutti gli altri campi che vuoi default
|
||||
], $schoolSettings);
|
||||
}
|
||||
|
||||
// Trasforma stringhe separate da virgola in array (molto comodo)
|
||||
$schoolSettings['payment_methods_array'] = array_filter(explode(',', $schoolSettings['payment_methods'] ?? ''));
|
||||
$schoolSettings['allowed_product_types_array'] = array_filter(explode(',', $schoolSettings['allowed_product_types'] ?? ''));
|
||||
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
// check school id if user go to select school
|
||||
// include/require_school_context.php
|
||||
|
||||
if (Auth::user()->hasRole('User')) {
|
||||
|
||||
$school_id = (int)($_SESSION['school_id'] ?? 0);
|
||||
|
||||
if ($school_id <= 0) {
|
||||
// manda alla pagina che decide: 1 scuola -> set in automatico, >1 -> selezione
|
||||
header('Location: /select-school.php');
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// --- SCHOOL OWNER & ADMIN: assegna automaticamente la scuola ---
|
||||
if (
|
||||
Auth::check() &&
|
||||
(
|
||||
Auth::user()->hasRole('school_owner') ||
|
||||
Auth::user()->hasRole('Admin')
|
||||
)
|
||||
) {
|
||||
|
||||
$school_id = (int)($_SESSION['school_id'] ?? 0);
|
||||
|
||||
if ($school_id <= 0) {
|
||||
|
||||
$stmt = $db->prepare("
|
||||
SELECT id
|
||||
FROM schools
|
||||
WHERE owner_id = ?
|
||||
AND status = 'active'
|
||||
LIMIT 1
|
||||
");
|
||||
$stmt->execute([$iduserlogin]);
|
||||
$owner_school_id = (int)$stmt->fetchColumn();
|
||||
|
||||
if ($owner_school_id > 0) {
|
||||
$_SESSION['school_id'] = $owner_school_id;
|
||||
} else {
|
||||
// caso limite: admin/owner senza scuola
|
||||
die('Nessuna scuola associata a questo account.');
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
<div class="modal" id="SearchModal" tabindex="-1">
|
||||
<div class="modal-dialog modal-dialog-centered modal-dialog-scrollable modal-fullscreen-md-down">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header gap-2">
|
||||
<div class="position-relative popup-search w-100">
|
||||
<input class="form-control form-control-lg ps-5 border border-3 border-primary" type="search" placeholder="Search">
|
||||
<span class="position-absolute top-50 search-show ms-3 translate-middle-y start-0 top-50 fs-4"><i class='bx bx-search'></i></span>
|
||||
</div>
|
||||
<button type="button" class="btn-close d-md-none" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="search-list">
|
||||
<p class="mb-1">Html Templates</p>
|
||||
<div class="list-group">
|
||||
<a href="javascript:;" class="list-group-item list-group-item-action active align-items-center d-flex gap-2 py-1"><i class='bx bxl-angular fs-4'></i>Best Html Templates</a>
|
||||
<a href="javascript:;" class="list-group-item list-group-item-action align-items-center d-flex gap-2 py-1"><i class='bx bxl-vuejs fs-4'></i>Html5 Templates</a>
|
||||
<a href="javascript:;" class="list-group-item list-group-item-action align-items-center d-flex gap-2 py-1"><i class='bx bxl-magento fs-4'></i>Responsive Html5 Templates</a>
|
||||
<a href="javascript:;" class="list-group-item list-group-item-action align-items-center d-flex gap-2 py-1"><i class='bx bxl-shopify fs-4'></i>eCommerce Html Templates</a>
|
||||
</div>
|
||||
<p class="mb-1 mt-3">Web Designe Company</p>
|
||||
<div class="list-group">
|
||||
<a href="javascript:;" class="list-group-item list-group-item-action align-items-center d-flex gap-2 py-1"><i class='bx bxl-windows fs-4'></i>Best Html Templates</a>
|
||||
<a href="javascript:;" class="list-group-item list-group-item-action align-items-center d-flex gap-2 py-1"><i class='bx bxl-dropbox fs-4'></i>Html5 Templates</a>
|
||||
<a href="javascript:;" class="list-group-item list-group-item-action align-items-center d-flex gap-2 py-1"><i class='bx bxl-opera fs-4'></i>Responsive Html5 Templates</a>
|
||||
<a href="javascript:;" class="list-group-item list-group-item-action align-items-center d-flex gap-2 py-1"><i class='bx bxl-wordpress fs-4'></i>eCommerce Html Templates</a>
|
||||
</div>
|
||||
<p class="mb-1 mt-3">Software Development</p>
|
||||
<div class="list-group">
|
||||
<a href="javascript:;" class="list-group-item list-group-item-action align-items-center d-flex gap-2 py-1"><i class='bx bxl-mailchimp fs-4'></i>Best Html Templates</a>
|
||||
<a href="javascript:;" class="list-group-item list-group-item-action align-items-center d-flex gap-2 py-1"><i class='bx bxl-zoom fs-4'></i>Html5 Templates</a>
|
||||
<a href="javascript:;" class="list-group-item list-group-item-action align-items-center d-flex gap-2 py-1"><i class='bx bxl-sass fs-4'></i>Responsive Html5 Templates</a>
|
||||
<a href="javascript:;" class="list-group-item list-group-item-action align-items-center d-flex gap-2 py-1"><i class='bx bxl-vk fs-4'></i>eCommerce Html Templates</a>
|
||||
</div>
|
||||
<p class="mb-1 mt-3">Online Shoping Portals</p>
|
||||
<div class="list-group">
|
||||
<a href="javascript:;" class="list-group-item list-group-item-action align-items-center d-flex gap-2 py-1"><i class='bx bxl-slack fs-4'></i>Best Html Templates</a>
|
||||
<a href="javascript:;" class="list-group-item list-group-item-action align-items-center d-flex gap-2 py-1"><i class='bx bxl-skype fs-4'></i>Html5 Templates</a>
|
||||
<a href="javascript:;" class="list-group-item list-group-item-action align-items-center d-flex gap-2 py-1"><i class='bx bxl-twitter fs-4'></i>Responsive Html5 Templates</a>
|
||||
<a href="javascript:;" class="list-group-item list-group-item-action align-items-center d-flex gap-2 py-1"><i class='bx bxl-vimeo fs-4'></i>eCommerce Html Templates</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,123 @@
|
||||
<div class="switcher-wrapper">
|
||||
<div class="switcher-btn"> <i class='bx bx-cog bx-spin'></i>
|
||||
</div>
|
||||
<div class="switcher-body">
|
||||
<div class="d-flex align-items-center">
|
||||
<h5 class="mb-0 text-uppercase">Theme Customizer</h5>
|
||||
<button type="button" class="btn-close ms-auto close-switcher" aria-label="Close"></button>
|
||||
</div>
|
||||
<hr />
|
||||
<h6 class="mb-0">Theme Styles</h6>
|
||||
<hr />
|
||||
<div class="d-flex align-items-center justify-content-between">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="radio" name="flexRadioDefault" id="lightmode" checked>
|
||||
<label class="form-check-label" for="lightmode">Light</label>
|
||||
</div>
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="radio" name="flexRadioDefault" id="darkmode">
|
||||
<label class="form-check-label" for="darkmode">Dark</label>
|
||||
</div>
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="radio" name="flexRadioDefault" id="semidark">
|
||||
<label class="form-check-label" for="semidark">Semi Dark</label>
|
||||
</div>
|
||||
</div>
|
||||
<hr />
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="radio" id="minimaltheme" name="flexRadioDefault">
|
||||
<label class="form-check-label" for="minimaltheme">Minimal Theme</label>
|
||||
</div>
|
||||
<hr />
|
||||
<h6 class="mb-0">Header Colors</h6>
|
||||
<hr />
|
||||
<div class="header-colors-indigators">
|
||||
<div class="row row-cols-auto g-3">
|
||||
<div class="col">
|
||||
<div class="indigator headercolor1" id="headercolor1"></div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="indigator headercolor2" id="headercolor2"></div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="indigator headercolor3" id="headercolor3"></div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="indigator headercolor4" id="headercolor4"></div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="indigator headercolor5" id="headercolor5"></div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="indigator headercolor6" id="headercolor6"></div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="indigator headercolor7" id="headercolor7"></div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="indigator headercolor8" id="headercolor8"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<hr />
|
||||
<h6 class="mb-0">Sidebar Colors</h6>
|
||||
<hr />
|
||||
<div class="header-colors-indigators">
|
||||
<div class="row row-cols-auto g-3">
|
||||
<div class="col">
|
||||
<div class="indigator headercolor1" id="headercolor1"></div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="indigator headercolor2" id="headercolor2"></div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="indigator headercolor3" id="headercolor3"></div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="indigator headercolor4" id="headercolor4"></div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="indigator headercolor5" id="headercolor5"></div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="indigator headercolor6" id="headercolor6"></div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="indigator headercolor7" id="headercolor7"></div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="indigator headercolor8" id="headercolor8"></div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="indigator headercolor9" id="headercolor9"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<hr />
|
||||
<h6 class="mb-0">Custom Colors</h6>
|
||||
<hr />
|
||||
<h6 class="mb-0">Custom Header Colors</h6>
|
||||
<div class="custom-colors-indigators">
|
||||
<div class="row row-cols-auto g-3">
|
||||
<div class="col">
|
||||
<div class="indigator customheadercolor1" id="customheadercolor1"></div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="indigator customheadercolor2" id="customheadercolor2"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<hr />
|
||||
<h6 class="mb-0">Custom Sidebar Colors</h6>
|
||||
<div class="custom-colors-indigators">
|
||||
<div class="row row-cols-auto g-3">
|
||||
<div class="col">
|
||||
<div class="indigator customsidebarcolor1" id="customsidebarcolor1"></div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="indigator customsidebarcolor2" id="customsidebarcolor2"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,374 @@
|
||||
<?php
|
||||
// Ottieni l'istanza del DBHandlerSelect
|
||||
$dbHandler = DBHandlerSelect::getInstance();
|
||||
$pdo = $dbHandler->getConnection();
|
||||
|
||||
// Inizializza il carrello se non esiste
|
||||
if (!isset($_SESSION['cart'])) {
|
||||
$_SESSION['cart'] = [];
|
||||
}
|
||||
|
||||
// Recupera i prodotti nel carrello
|
||||
$cart_items = [];
|
||||
$total_price = 0;
|
||||
if (!empty($_SESSION['cart'])) {
|
||||
foreach ($_SESSION['cart'] as $cart_key => $item) {
|
||||
$product_id = $item['product_id'];
|
||||
$variation_id = $item['variation_id'];
|
||||
$class_type_id = $item['class_type_id'];
|
||||
$quantity = $item['quantity'];
|
||||
|
||||
// Query per ottenere i dettagli del prodotto, variazione e classe
|
||||
$stmt = $pdo->prepare("
|
||||
SELECT p.name AS product_name, pv.name AS variation_name, pv.price, c.name AS class_name, c.photo AS class_photo,
|
||||
ct.level, ct.day_of_week
|
||||
FROM products p
|
||||
JOIN product_variations pv ON pv.id = ?
|
||||
LEFT JOIN product_class_types pct ON p.id = pct.product_id AND pct.variation_id IS NULL
|
||||
LEFT JOIN class_types ct ON ct.id = ?
|
||||
LEFT JOIN classes c ON ct.class_id = c.id
|
||||
WHERE p.id = ?
|
||||
");
|
||||
$stmt->execute([$variation_id, $class_type_id, $product_id]);
|
||||
$cart_item = $stmt->fetch(PDO::FETCH_ASSOC);
|
||||
|
||||
if ($cart_item) {
|
||||
$cart_items[$cart_key] = [
|
||||
'product_name' => $cart_item['product_name'],
|
||||
'variation_name' => $cart_item['variation_name'],
|
||||
'class_name' => $cart_item['class_name'],
|
||||
'level' => $cart_item['level'],
|
||||
'day_of_week' => $cart_item['day_of_week'],
|
||||
'photo' => $cart_item['class_photo'] ?: 'default_class_image.jpg',
|
||||
'price' => $cart_item['price'],
|
||||
'quantity' => $quantity,
|
||||
'subtotal' => $cart_item['price'] * $quantity
|
||||
];
|
||||
$total_price += $cart_item['price'] * $quantity;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Calcola il numero totale di elementi nel carrello
|
||||
$cart_count = array_sum(array_column($_SESSION['cart'], 'quantity'));
|
||||
?>
|
||||
|
||||
<header>
|
||||
<div class="topbar d-flex align-items-center">
|
||||
<nav class="navbar navbar-expand gap-3">
|
||||
<div class="mobile-toggle-menu"><i class='bx bx-menu'></i></div>
|
||||
<div class="search-bar d-lg-block d-none" data-bs-toggle="modal" data-bs-target="#SearchModal">
|
||||
<a href="javascript:;" class="btn d-flex align-items-center"><i class='bx bx-search'></i>Search</a>
|
||||
</div>
|
||||
<div class="top-menu ms-auto">
|
||||
<ul class="navbar-nav align-items-center gap-1">
|
||||
<li class="nav-item mobile-search-icon d-flex d-lg-none" data-bs-toggle="modal" data-bs-target="#SearchModal">
|
||||
<a class="nav-link" href="javascript:;"><i class='bx bx-search'></i></a>
|
||||
</li>
|
||||
<li class="nav-item dropdown dropdown-laungauge d-none d-sm-flex">
|
||||
<a class="nav-link dropdown-toggle dropdown-toggle-nocaret" href="javascript:;" data-bs-toggle="dropdown"><img src="assets/images/county/02.png" width="22" alt=""></a>
|
||||
<ul class="dropdown-menu dropdown-menu-end">
|
||||
<li><a class="dropdown-item d-flex align-items-center py-2" href="javascript:;"><img src="assets/images/county/01.png" width="20" alt=""><span class="ms-2">English</span></a></li>
|
||||
<li><a class="dropdown-item d-flex align-items-center py-2" href="javascript:;"><img src="assets/images/county/02.png" width="20" alt=""><span class="ms-2">Catalan</span></a></li>
|
||||
<li><a class="dropdown-item d-flex align-items-center py-2" href="javascript:;"><img src="assets/images/county/03.png" width="20" alt=""><span class="ms-2">French</span></a></li>
|
||||
<li><a class="dropdown-item d-flex align-items-center py-2" href="javascript:;"><img src="assets/images/county/04.png" width="20" alt=""><span class="ms-2">Belize</span></a></li>
|
||||
<li><a class="dropdown-item d-flex align-items-center py-2" href="javascript:;"><img src="assets/images/county/05.png" width="20" alt=""><span class="ms-2">Colombia</span></a></li>
|
||||
<li><a class="dropdown-item d-flex align-items-center py-2" href="javascript:;"><img src="assets/images/county/06.png" width="20" alt=""><span class="ms-2">Spanish</span></a></li>
|
||||
<li><a class="dropdown-item d-flex align-items-center py-2" href="javascript:;"><img src="assets/images/county/07.png" width="20" alt=""><span class="ms-2">Georgian</span></a></li>
|
||||
<li><a class="dropdown-item d-flex align-items-center py-2" href="javascript:;"><img src="assets/images/county/08.png" width="20" alt=""><span class="ms-2">Hindi</span></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="nav-item dark-mode d-none d-sm-flex">
|
||||
<a class="nav-link dark-mode-icon" href="javascript:;"><i class='bx bx-moon'></i></a>
|
||||
</li>
|
||||
<li class="nav-item dropdown dropdown-app">
|
||||
<a class="nav-link dropdown-toggle dropdown-toggle-nocaret" data-bs-toggle="dropdown" href="javascript:;"><i class='bx bx-grid-alt'></i></a>
|
||||
<div class="dropdown-menu dropdown-menu-end p-0">
|
||||
<div class="app-container p-2 my-2">
|
||||
<div class="row gx-0 gy-2 row-cols-3 justify-content-center p-2">
|
||||
<div class="col"><a href="javascript:;">
|
||||
<div class="app-box text-center">
|
||||
<div class="app-icon"><img src="assets/images/app/slack.png" width="30" alt=""></div>
|
||||
<div class="app-name">
|
||||
<p class="mb-0 mt-1">Slack</p>
|
||||
</div>
|
||||
</div>
|
||||
</a></div>
|
||||
<div class="col"><a href="javascript:;">
|
||||
<div class="app-box text-center">
|
||||
<div class="app-icon"><img src="assets/images/app/behance.png" width="30" alt=""></div>
|
||||
<div class="app-name">
|
||||
<p class="mb-0 mt-1">Behance</p>
|
||||
</div>
|
||||
</div>
|
||||
</a></div>
|
||||
<div class="col"><a href="javascript:;">
|
||||
<div class="app-box text-center">
|
||||
<div class="app-icon"><img src="assets/images/app/google-drive.png" width="30" alt=""></div>
|
||||
<div class="app-name">
|
||||
<p class="mb-0 mt-1">Dribble</p>
|
||||
</div>
|
||||
</div>
|
||||
</a></div>
|
||||
<div class="col"><a href="javascript:;">
|
||||
<div class="app-box text-center">
|
||||
<div class="app-icon"><img src="assets/images/app/outlook.png" width="30" alt=""></div>
|
||||
<div class="app-name">
|
||||
<p class="mb-0 mt-1">Outlook</p>
|
||||
</div>
|
||||
</div>
|
||||
</a></div>
|
||||
<div class="col"><a href="javascript:;">
|
||||
<div class="app-box text-center">
|
||||
<div class="app-icon"><img src="assets/images/app/github.png" width="30" alt=""></div>
|
||||
<div class="app-name">
|
||||
<p class="mb-0 mt-1">GitHub</p>
|
||||
</div>
|
||||
</div>
|
||||
</a></div>
|
||||
<div class="col"><a href="javascript:;">
|
||||
<div class="app-box text-center">
|
||||
<div class="app-icon"><img src="assets/images/app/stack-overflow.png" width="30" alt=""></div>
|
||||
<div class="app-name">
|
||||
<p class="mb-0 mt-1">Stack</p>
|
||||
</div>
|
||||
</div>
|
||||
</a></div>
|
||||
<div class="col"><a href="javascript:;">
|
||||
<div class="app-box text-center">
|
||||
<div class="app-icon"><img src="assets/images/app/figma.png" width="30" alt=""></div>
|
||||
<div class="app-name">
|
||||
<p class="mb-0 mt-1">Stack</p>
|
||||
</div>
|
||||
</div>
|
||||
</a></div>
|
||||
<div class="col"><a href="javascript:;">
|
||||
<div class="app-box text-center">
|
||||
<div class="app-icon"><img src="assets/images/app/twitter.png" width="30" alt=""></div>
|
||||
<div class="app-name">
|
||||
<p class="mb-0 mt-1">Twitter</p>
|
||||
</div>
|
||||
</div>
|
||||
</a></div>
|
||||
<div class="col"><a href="javascript:;">
|
||||
<div class="app-box text-center">
|
||||
<div class="app-icon"><img src="assets/images/app/google-calendar.png" width="30" alt=""></div>
|
||||
<div class="app-name">
|
||||
<p class="mb-0 mt-1">Calendar</p>
|
||||
</div>
|
||||
</div>
|
||||
</a></div>
|
||||
<div class="col"><a href="javascript:;">
|
||||
<div class="app-box text-center">
|
||||
<div class="app-icon"><img src="assets/images/app/spotify.png" width="30" alt=""></div>
|
||||
<div class="app-name">
|
||||
<p class="mb-0 mt-1">Spotify</p>
|
||||
</div>
|
||||
</div>
|
||||
</a></div>
|
||||
<div class="col"><a href="javascript:;">
|
||||
<div class="app-box text-center">
|
||||
<div class="app-icon"><img src="assets/images/app/google-photos.png" width="30" alt=""></div>
|
||||
<div class="app-name">
|
||||
<p class="mb-0 mt-1">Photos</p>
|
||||
</div>
|
||||
</div>
|
||||
</a></div>
|
||||
<div class="col"><a href="javascript:;">
|
||||
<div class="app-box text-center">
|
||||
<div class="app-icon"><img src="assets/images/app/pinterest.png" width="30" alt=""></div>
|
||||
<div class="app-name">
|
||||
<p class="mb-0 mt-1">Photos</p>
|
||||
</div>
|
||||
</div>
|
||||
</a></div>
|
||||
<div class="col"><a href="javascript:;">
|
||||
<div class="app-box text-center">
|
||||
<div class="app-icon"><img src="assets/images/app/linkedin.png" width="30" alt=""></div>
|
||||
<div class="app-name">
|
||||
<p class="mb-0 mt-1">linkedin</p>
|
||||
</div>
|
||||
</div>
|
||||
</a></div>
|
||||
<div class="col"><a href="javascript:;">
|
||||
<div class="app-box text-center">
|
||||
<div class="app-icon"><img src="assets/images/app/dribble.png" width="30" alt=""></div>
|
||||
<div class="app-name">
|
||||
<p class="mb-0 mt-1">Dribble</p>
|
||||
</div>
|
||||
</div>
|
||||
</a></div>
|
||||
<div class="col"><a href="javascript:;">
|
||||
<div class="app-box text-center">
|
||||
<div class="app-icon"><img src="assets/images/app/youtube.png" width="30" alt=""></div>
|
||||
<div class="app-name">
|
||||
<p class="mb-0 mt-1">YouTube</p>
|
||||
</div>
|
||||
</div>
|
||||
</a></div>
|
||||
<div class="col"><a href="javascript:;">
|
||||
<div class="app-box text-center">
|
||||
<div class="app-icon"><img src="assets/images/app/google.png" width="30" alt=""></div>
|
||||
<div class="app-name">
|
||||
<p class="mb-0 mt-1">News</p>
|
||||
</div>
|
||||
</div>
|
||||
</a></div>
|
||||
<div class="col"><a href="javascript:;">
|
||||
<div class="app-box text-center">
|
||||
<div class="app-icon"><img src="assets/images/app/envato.png" width="30" alt=""></div>
|
||||
<div class="app-name">
|
||||
<p class="mb-0 mt-1">Envato</p>
|
||||
</div>
|
||||
</div>
|
||||
</a></div>
|
||||
<div class="col"><a href="javascript:;">
|
||||
<div class="app-box text-center">
|
||||
<div class="app-icon"><img src="assets/images/app/safari.png" width="30" alt=""></div>
|
||||
<div class="app-name">
|
||||
<p class="mb-0 mt-1">Safari</p>
|
||||
</div>
|
||||
</div>
|
||||
</a></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="nav-item dropdown dropdown-large">
|
||||
<a class="nav-link dropdown-toggle dropdown-toggle-nocaret position-relative" href="#" data-bs-toggle="dropdown"><span class="alert-count cart-count"><?php echo $cart_count; ?></span>
|
||||
<i class='bx bx-bell'></i>
|
||||
</a>
|
||||
<div class="dropdown-menu dropdown-menu-end">
|
||||
<a href="javascript:;">
|
||||
<div class="msg-header">
|
||||
<p class="msg-header-title">Notifications</p>
|
||||
<p class="msg-header-badge">8 New</p>
|
||||
</div>
|
||||
</a>
|
||||
<div class="header-notifications-list">
|
||||
<a class="dropdown-item" href="javascript:;">
|
||||
<div class="d-flex align-items-center">
|
||||
<div class="user-online">
|
||||
<img src="assets/images/avatars/avatar-1.png" class="msg-avatar" alt="user avatar">
|
||||
</div>
|
||||
<div class="flex-grow-1">
|
||||
<h6 class="msg-name">Daisy Anderson<span class="msg-time float-end">5 sec ago</span></h6>
|
||||
<p class="msg-info">The standard chunk of lorem</p>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
<!-- Altre notifiche... -->
|
||||
</div>
|
||||
<a href="javascript:;">
|
||||
<div class="text-center msg-footer">
|
||||
<button class="btn btn-primary w-100">View All Notifications</button>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</li>
|
||||
<li class="nav-item dropdown dropdown-large">
|
||||
<a class="nav-link dropdown-toggle dropdown-toggle-nocaret position-relative" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
|
||||
<span class="alert-count cart-count"><?php echo $cart_count; ?></span>
|
||||
<i class='bx bx-shopping-bag'></i>
|
||||
</a>
|
||||
<div class="dropdown-menu dropdown-menu-end">
|
||||
<a href="javascript:;">
|
||||
<div class="msg-header">
|
||||
<p class="msg-header-title">My Cart</p>
|
||||
<p class="msg-header-badge"><?php echo $cart_count; ?> Items</p>
|
||||
</div>
|
||||
</a>
|
||||
<div class="header-message-list">
|
||||
<?php if (empty($cart_items)): ?>
|
||||
<p class="text-center text-muted p-3">Il carrello è vuoto.</p>
|
||||
<?php else: ?>
|
||||
<?php foreach ($cart_items as $cart_key => $item): ?>
|
||||
<a class="dropdown-item" href="javascript:;">
|
||||
<div class="d-flex align-items-center gap-3">
|
||||
<div class="position-relative">
|
||||
<div class="cart-product rounded-circle bg-light">
|
||||
<img src="<?php echo htmlspecialchars($item['photo']); ?>" class="rounded-circle" width="50" alt="product image">
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex-grow-1">
|
||||
<h6 class="cart-product-title mb-0"><?php echo htmlspecialchars($item['product_name']); ?></h6>
|
||||
<p class="cart-product-price mb-0"><?php echo htmlspecialchars($item['variation_name']); ?></p>
|
||||
<p class="cart-product-price mb-0"><?php echo htmlspecialchars($item['class_name'] . ' - ' . $item['level'] . ' (' . $item['day_of_week'] . ')'); ?></p>
|
||||
<p class="cart-product-price mb-0"><?php echo $item['quantity']; ?> x €<?php echo number_format($item['price'], 2); ?></p>
|
||||
</div>
|
||||
<div class="">
|
||||
<p class="cart-price mb-0">€<?php echo number_format($item['subtotal'], 2); ?></p>
|
||||
</div>
|
||||
<div class="cart-product-cancel">
|
||||
<a href="javascript:;" class="remove-cart-item" data-key="<?php echo $cart_key; ?>"><i class="bx bx-x"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
<?php endforeach; ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<a href="javascript:;">
|
||||
<div class="text-center msg-footer">
|
||||
<div class="d-flex align-items-center justify-content-between mb-3">
|
||||
<h5 class="mb-0">Total</h5>
|
||||
<h5 class="mb-0 ms-auto">€<?php echo number_format($total_price, 2); ?></h5>
|
||||
</div>
|
||||
<a href="checkout.php" class="btn btn-primary w-100">Checkout</a>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="user-box dropdown px-3">
|
||||
<a class="d-flex align-items-center nav-link dropdown-toggle gap-3 dropdown-toggle-nocaret" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
|
||||
<img src="<?php echo htmlspecialchars('../upload/users/' . basename($_SESSION['photouser'])); ?>" class="user-img" alt="user avatar">
|
||||
<div class="user-info">
|
||||
<p class="user-name mb-0"><?php echo htmlspecialchars($_SESSION['nameuser'] . ' ' . $_SESSION['surnameuser']); ?></p>
|
||||
<p class="designattion mb-0"><?php echo htmlspecialchars($_SESSION['emailuser']); ?></p>
|
||||
</div>
|
||||
</a>
|
||||
<ul class="dropdown-menu dropdown-menu-end">
|
||||
<li><a class="dropdown-item d-flex align-items-center" href="student_profile.php"><i class="bx bx-user fs-5"></i><span>Profilo Utente</span></a></li>
|
||||
<li><a class="dropdown-item d-flex align-items-center" href="javascript:;"><i class="bx bx-cog fs-5"></i><span>Settings</span></a></li>
|
||||
<li><a class="dropdown-item d-flex align-items-center" href="javascript:;"><i class="bx bx-home-circle fs-5"></i><span>Dashboard</span></a></li>
|
||||
<li><a class="dropdown-item d-flex align-items-center" href="javascript:;"><i class="bx bx-dollar-circle fs-5"></i><span>Earnings</span></a></li>
|
||||
<li><a class="dropdown-item d-flex align-items-center" href="javascript:;"><i class="bx bx-download fs-5"></i><span>Downloads</span></a></li>
|
||||
<li>
|
||||
<div class="dropdown-divider mb-0"></div>
|
||||
</li>
|
||||
<li><a class="dropdown-item d-flex align-items-center" href="../logout"><i class="bx bx-log-out-circle"></i><span>Logout</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
// Rimuovi un elemento dal carrello
|
||||
$('.remove-cart-item').on('click', function(e) {
|
||||
e.preventDefault();
|
||||
const cartKey = $(this).data('key');
|
||||
|
||||
$.ajax({
|
||||
url: 'remove_from_cart.php',
|
||||
method: 'POST',
|
||||
data: {
|
||||
cart_key: cartKey
|
||||
},
|
||||
success: function(response) {
|
||||
const result = JSON.parse(response);
|
||||
if (result.success) {
|
||||
location.reload(); // Ricarica la pagina per aggiornare il carrello
|
||||
} else {
|
||||
alert('Errore durante la rimozione del prodotto dal carrello.');
|
||||
}
|
||||
},
|
||||
error: function() {
|
||||
alert('Errore di connessione.');
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,70 @@
|
||||
<?php
|
||||
// include/user_settings_loader.php
|
||||
|
||||
// Evita inclusioni multiple
|
||||
if (defined('USER_SETTINGS_LOADED')) return;
|
||||
define('USER_SETTINGS_LOADED', true);
|
||||
|
||||
global $userSettings; // o usa $_SESSION['user_settings'] se preferisci
|
||||
|
||||
$user_id = (int)($iduserlogin ?? $_SESSION['iduserlogin'] ?? 0);
|
||||
|
||||
if ($user_id <= 0) {
|
||||
// Utente non loggato → valori di default minimi/sicuri
|
||||
$userSettings = [
|
||||
'notify_email' => 1,
|
||||
'notify_whatsapp' => 0,
|
||||
'notify_push' => 0,
|
||||
'notify_booking_confirm' => 1,
|
||||
'notify_booking_cancel' => 1,
|
||||
'notify_session_cancel' => 1,
|
||||
'notify_payment_receipt' => 1,
|
||||
'notify_expiration_reminder' => 1,
|
||||
'newsletter_opt_in' => 0,
|
||||
'marketing_opt_in' => 0,
|
||||
'locale' => 'it',
|
||||
'timezone' => 'Europe/Rome',
|
||||
];
|
||||
} else {
|
||||
$pdo = DBHandlerSelect::getInstance()->getConnection();
|
||||
|
||||
$stmt = $pdo->prepare("
|
||||
SELECT *
|
||||
FROM user_settings
|
||||
WHERE user_id = ?
|
||||
LIMIT 1
|
||||
");
|
||||
$stmt->execute([$user_id]);
|
||||
$settings = $stmt->fetch(PDO::FETCH_ASSOC);
|
||||
|
||||
if ($settings) {
|
||||
$userSettings = $settings;
|
||||
} else {
|
||||
// Utente senza impostazioni → crea record con default
|
||||
$stmt_insert = $pdo->prepare("
|
||||
INSERT INTO user_settings (user_id) VALUES (?)
|
||||
");
|
||||
$stmt_insert->execute([$user_id]);
|
||||
|
||||
// Ricarica dopo insert
|
||||
$stmt = $pdo->prepare("SELECT * FROM user_settings WHERE user_id = ? LIMIT 1");
|
||||
$stmt->execute([$user_id]);
|
||||
$userSettings = $stmt->fetch(PDO::FETCH_ASSOC) ?: [];
|
||||
}
|
||||
|
||||
// Fallback per campi che potrebbero essere NULL o mancanti
|
||||
$userSettings = array_merge([
|
||||
'notify_email' => 1,
|
||||
'notify_whatsapp' => 0,
|
||||
'notify_push' => 0,
|
||||
'notify_booking_confirm' => 1,
|
||||
'notify_booking_cancel' => 1,
|
||||
'notify_session_cancel' => 1,
|
||||
'notify_payment_receipt' => 1,
|
||||
'notify_expiration_reminder' => 1,
|
||||
'newsletter_opt_in' => 0,
|
||||
'marketing_opt_in' => 0,
|
||||
'locale' => 'it',
|
||||
'timezone' => 'Europe/Rome',
|
||||
], $userSettings);
|
||||
}
|
||||
Reference in New Issue
Block a user