";
+ echo "Torna al portale";
+ $conn->close();
+ exit;
+}
- // Verifica validità: token corrisponde, lezione futura e prima delle 12:00 del giorno
- $query = "SELECT * FROM bookingclass
- WHERE idbookingclass = ?
- AND cancellation_token = ?
- AND status = 'booked'
- AND bookingstart > NOW()
- AND NOW() <= DATE_ADD(DATE(bookingstart), INTERVAL 12 HOUR)";
- $stmt = $conn->prepare($query);
+// Sanitizza idbookingclass
+$idbookingclass = filter_var($_GET['idbookingclass'], FILTER_VALIDATE_INT);
+$token = $_GET['token'];
- if ($stmt) {
- $stmt->bind_param("is", $idbookingclass, $token);
- $stmt->execute();
- $result = $stmt->get_result();
+if (!$idbookingclass) {
+ $logMessage .= "Errore: idbookingclass non valido: " . $_GET['idbookingclass'] . "\n";
+ file_put_contents($logFile, $logMessage, FILE_APPEND);
+ echo "
Cancellazione non possibile
";
+ echo "
Parametro idbookingclass non valido.
";
+ echo "Torna al portale";
+ $conn->close();
+ exit;
+}
- if ($result->num_rows > 0) {
- $row = $result->fetch_assoc();
- $bookingstart = $row['bookingstart'];
- $newtimeformat = date("d-m-Y H:i", strtotime($bookingstart));
+// Verifica validità: token corrisponde, lezione futura
+$query = "SELECT bc.*, ob.expireon, au.email, au.first_name, s.servicename
+ FROM bookingclass bc
+ LEFT JOIN orderbook ob ON bc.idorder = ob.order_id
+ LEFT JOIN auth_users au ON bc.iduser = au.id
+ LEFT JOIN service s ON bc.idservice = s.idservice
+ WHERE bc.idbookingclass = ?
+ AND bc.cancellation_token = ?
+ AND bc.status = 'booked'
+ AND bc.bookingstart > NOW()";
+$stmt = $conn->prepare($query);
- // Aggiorna status a 'cancelled' e invalida token
- $updateQuery = "UPDATE bookingclass
- SET status = 'cancelled', cancellation_token = NULL
- WHERE idbookingclass = ?";
- $updateStmt = $conn->prepare($updateQuery);
- $updateStmt->bind_param("i", $idbookingclass);
- $updateStmt->execute();
+if (!$stmt) {
+ $logMessage .= "Errore preparazione query per ID $idbookingclass: " . $conn->error . "\n";
+ file_put_contents($logFile, $logMessage, FILE_APPEND);
+ echo "
Cancellazione non possibile
";
+ echo "
Errore nella preparazione della query.
";
+ echo "Torna al portale";
+ $conn->close();
+ exit;
+}
- // Recupera dati utente e servizio
- $dataQuery = "SELECT bookingclass.*, auth_users.*, service.*
- FROM bookingclass
- LEFT JOIN auth_users ON bookingclass.iduser = auth_users.id
- LEFT JOIN service ON bookingclass.idservice = service.idservice
- WHERE bookingclass.idbookingclass = ?";
- $dataStmt = $conn->prepare($dataQuery);
- $dataStmt->bind_param("i", $idbookingclass);
- $dataStmt->execute();
- $dataResult = $dataStmt->get_result();
- $dataRow = $dataResult->fetch_assoc();
+$stmt->bind_param("is", $idbookingclass, $token);
+$stmt->execute();
+$result = $stmt->get_result();
- $emailuser = $dataRow['email'];
- $firstname = $dataRow['first_name'] ?? 'Utente';
+if ($result->num_rows === 0) {
+ $checkQuery = "SELECT * FROM bookingclass
+ WHERE idbookingclass = ?
+ AND cancellation_token = ?
+ AND status = 'booked'
+ AND bookingstart > NOW()";
+ $checkStmt = $conn->prepare($checkQuery);
+ $checkStmt->bind_param("is", $idbookingclass, $token);
+ $checkStmt->execute();
+ $checkResult = $checkStmt->get_result();
- // Prepara messaggio email
- $messagecancel = "
Ciao $firstname ,
-
La tua lezione è stata cancellata con successo!
-
Dettaglio: $newtimeformat
-
-
Per vedere e gestire le tue lezioni clicca qui: https://yogibook.yogasoul.it
-
+ if ($checkResult->num_rows > 0) {
+ $row = $checkResult->fetch_assoc();
+ $bookingstart = $row['bookingstart'];
+ $lessonTime = new DateTime($bookingstart);
+ $hour = (int)$lessonTime->format('H');
+ $minute = (int)$lessonTime->format('i');
+ $isBefore1700 = ($hour < 17) || ($hour === 17 && $minute === 0);
+ $logMessage .= "Tentativo di cancellazione fallito per ID $idbookingclass: orario oltre il limite (" . ($isBefore1700 ? "00:01" : "12:00") . ")\n";
+ echo "
Cancellazione non possibile
";
+ echo "
Non è possibile cancellare la lezione dopo le " . ($isBefore1700 ? "00:01" : "12:00") . " del giorno della lezione.
";
+ echo "Torna al portale";
+ } else {
+ $logMessage .= "Tentativo di cancellazione fallito per ID $idbookingclass: link non valido o lezione non prenotata\n";
+ echo "
Cancellazione non possibile
";
+ echo "
Il link non è valido o la lezione non è prenotata.
+
+
+
+
+
+
+
+
+
+close();
+$conn->close();
+?>
\ No newline at end of file
diff --git a/public/userpanel.php b/public/userpanel.php
index f67ee1f..f51f05b 100644
--- a/public/userpanel.php
+++ b/public/userpanel.php
@@ -11,7 +11,6 @@ $optionquery->setQuery("SELECT * FROM option");
$optionquery->execute();
?>
setQuery("SELECT * FROM bookingclass
WHERE bookingclass.iduser = '$iduserlogin' AND bookingclass.status = 'booked'
AND serviceschedule.dateschedule BETWEEN '$currentMonthStart' AND DATE_ADD('$currentMonthEnd', INTERVAL 1 DAY) ORDER BY serviceschedule.dateschedule");
$bookedclass->execute();
-
?>
connect_error) {
@@ -98,10 +95,6 @@ $query = "SELECT COUNT(*) AS total,
LEFT JOIN serviceschedule ON bookingclass.idserviceschedule = serviceschedule.idserviceschedule
WHERE bookingclass.iduser = $iduser";
-
-
-
-
$result = $conn->query($query);
if ($result) {
$row = $result->fetch_assoc();
@@ -119,7 +112,6 @@ $conn->close();
-
YogiBook - Prenotazioni YogaSoul
@@ -214,7 +206,6 @@ $conn->close();
border-radius: 4px;
cursor: pointer;
transition: background-color 0.2s;
-
}
.custom-action-button:hover {
@@ -261,6 +252,48 @@ $conn->close();
width: 100%;
}
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Prenotazione Classi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
Benvenuta/o
Di seguito puoi vedere lo stato delle tue prenotazioni
-
@@ -486,292 +408,193 @@ $conn->close();
- Car* Yogi, ti ricordiamo che il pacchetto 4 lezioni ha validità entro le 5 settimane dall'acquisto e il pacchetto da 12 lezioni entro il 20 dicembre 2025 🙏
+ Car* Yogi, ti ricordiamo che il pacchetto 4 lezioni ha validità entro le 5 settimane dall'acquisto e il pacchetto da 12 lezioni entro il 20 dicembre 2025 🙏
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Richiesta di riprogrammazione inviata con successo!
-
-
";
+ } else {
+ while (!$bookedclass->atEnd()) {
+ $wa_startindex = $bookedclass->Index;
+ $dateschedule = $bookedclass->getColumnVal("dateschedule");
+ $dateObj = new DateTime($dateschedule);
+ $dayInItalian = $dateObj->format("d");
+ $monthInItalian = $dateObj->format("F");
+ $monthInItalian = $italianMonths[$monthInItalian];
+ $newDateFormat = $dateObj->format("d-m-Y H:i");
-
-
+ // Calcola se la lezione può essere riprogrammata
+ $currentTime = new DateTime();
+ $classTime = new DateTime($dateschedule);
+ $isSameDay = $classTime->format('Y-m-d') === $currentTime->format('Y-m-d');
+ $classHour = (int)$classTime->format('H');
+ $classMinute = (int)$classTime->format('i');
+ $isBefore1700 = ($classHour < 17) || ($classHour === 17 && $classMinute === 0);
+ // Definisci il limite per la riprogrammazione
+ if ($isSameDay) {
+ if ($isBefore1700) {
+ // Lezioni prima delle 17:00: cancellazione valida fino alle 00:01 dello stesso giorno
+ $deadline = new DateTime($classTime->format('Y-m-d 00:01:00'));
+ } else {
+ // Lezioni alle 17:00 o dopo: cancellazione valida fino alle 12:00 dello stesso giorno
+ $deadline = new DateTime($classTime->format('Y-m-d 12:00:00'));
+ }
+ $canBeDeleted = $currentTime <= $deadline;
+ } else {
+ // Per lezioni in giorni futuri, la riprogrammazione è sempre consentita
+ $canBeDeleted = true;
+ }
+ ?>
+
+
+
+
+
+
">
+
getColumnVal("servicename")); ?>
+
Quando:
+
Luogo: via Valassina 62/B Seregno - Sala Contesto Yoga