connect_error) { die("Connessione al database fallita: " . $conn->connect_error); } // Inizializza log $logFile = 'rebook_from_cancel_log.txt'; $logMessage = "Esecuzione riprogrammazione: " . date('Y-m-d H:i:s') . "\n"; // Log del database utilizzato $logMessage .= "Database connesso: $dbname\n"; // Recupera parametri GET if (!isset($_GET['idbookingclass']) || !isset($_GET['token'])) { $logMessage .= "Parametri mancanti: idbookingclass o token\n"; file_put_contents($logFile, $logMessage, FILE_APPEND); echo "
Parametri mancanti.
"; echo "Torna al portale"; $conn->close(); exit; } $idbookingclass = filter_var($_GET['idbookingclass'], FILTER_VALIDATE_INT); $token = $_GET['token']; if (!$idbookingclass) { $logMessage .= "Errore: idbookingclass non valido: " . $_GET['idbookingclass'] . "\n"; file_put_contents($logFile, $logMessage, FILE_APPEND); echo "Parametro idbookingclass non valido.
"; echo "Torna al portale"; $conn->close(); exit; } // Verifica validità della prenotazione $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); if (!$stmt) { $logMessage .= "Errore preparazione query per ID $idbookingclass: " . $conn->error . "\n"; file_put_contents($logFile, $logMessage, FILE_APPEND); echo "Errore nella preparazione della query.
"; echo "Torna al portale"; $conn->close(); exit; } $stmt->bind_param("is", $idbookingclass, $token); $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows === 0) { $logMessage .= "Tentativo di riprogrammazione fallito per ID $idbookingclass: link non valido o lezione non prenotata\n"; file_put_contents($logFile, $logMessage, FILE_APPEND); echo "Il link non è valido o la lezione non è prenotata.
"; echo "Torna al portale"; $stmt->close(); $conn->close(); exit; } $row = $result->fetch_assoc(); $bookingstart = $row['bookingstart']; $newtimeformat = date("d-m-Y H:i", strtotime($bookingstart)); $expireon = $row['expireon'] ? date("d-m-Y", strtotime($row['expireon'])) : "sconosciuta"; $emailuser = $row['email']; $firstname = $row['first_name'] ?? 'Utente'; $servicename = $row['servicename'] ?? 'Sconosciuta'; $iduser = $row['iduser']; $idserviceordered = $row['idservice']; $idorder = $row['idorder']; // Verifica il limite di cancellazione/riprogrammazione $lessonTime = new DateTime($bookingstart); $hour = (int)$lessonTime->format('H'); $minute = (int)$lessonTime->format('i'); $isBefore1700 = ($hour < 17) || ($hour === 17 && $minute === 0); $currentTime = new DateTime(); $lessonDate = $lessonTime->format('Y-m-d'); if ($isBefore1700) { $deadline = new DateTime("$lessonDate 00:01:00"); } else { $deadline = new DateTime("$lessonDate 12:00:00"); } if ($currentTime > $deadline) { $logMessage .= "Tentativo di riprogrammazione fallito per ID $idbookingclass: orario oltre il limite (" . $deadline->format('Y-m-d H:i:s') . ")\n"; file_put_contents($logFile, $logMessage, FILE_APPEND); echo "Non è possibile riprogrammare la lezione dopo le " . ($isBefore1700 ? "00:01" : "12:00") . " del giorno della lezione.
"; echo "Torna al portale"; $stmt->close(); $conn->close(); exit; } // Recupera la data di scadenza dell'ordine $expiryDate = new DateTime($row['expireon']); // Query sulla tabella associateclass $sql = "SELECT idassociateservice FROM associateclass WHERE idmainservice = ?"; $stmt = $conn->prepare($sql); $stmt->bind_param("i", $idserviceordered); $stmt->execute(); $result = $stmt->get_result(); $idassociateservices = array(); array_push($idassociateservices, $idserviceordered); if ($result->num_rows > 0) { while ($row = $result->fetch_assoc()) { $idassociateservices[] = $row['idassociateservice']; } } $stmt->close(); // Verifica se è stata specificata una richiesta per cambiare il mese if (isset($_GET['prev_month'])) { $currentMonthStart = $_GET['prev_month'] . '-01'; } elseif (isset($_GET['next_month'])) { $currentMonthStart = $_GET['next_month'] . '-01'; } else { $currentMonthStart = date("Y-m-01"); } $currentMonthEnd = date("Y-m-t", strtotime($currentMonthStart)); // Aggiungi filtro per la data di scadenza $expiryCondition = ''; if ($expiryDate) { $expiryCondition = "AND ss.dateschedule <= '{$expiryDate->format('Y-m-d 23:59:59')}'"; } // Query per le lezioni disponibili $placeholders = implode(',', array_fill(0, count($idassociateservices), '?')); $query = "SELECT ss.*, s.servicename, s.colorclass, s.maxcapacity FROM serviceschedule ss LEFT JOIN service s ON ss.idservice = s.idservice WHERE ss.dateschedule BETWEEN ? AND DATE_ADD(?, INTERVAL 1 DAY) $expiryCondition AND ss.idservice IN ($placeholders) ORDER BY ss.dateschedule"; $logMessage .= "Query lezioni disponibili: $query\n"; $logMessage .= "Parametri: " . json_encode(array_merge([$currentMonthStart, $currentMonthEnd], $idassociateservices)) . "\n"; file_put_contents($logFile, $logMessage, FILE_APPEND); $stmt = $conn->prepare($query); if (!$stmt) { $logMessage .= "Errore preparazione query per lezioni disponibili: " . $conn->error . "\n"; file_put_contents($logFile, $logMessage, FILE_APPEND); echo "Errore nella preparazione della query per le lezioni disponibili.
"; echo "Torna al portale"; $conn->close(); exit; } $types = 'ss' . str_repeat('i', count($idassociateservices)); $params = array_merge([$currentMonthStart, $currentMonthEnd], $idassociateservices); $stmt->bind_param($types, ...$params); $stmt->execute(); $bookedclass = $stmt->get_result(); if ($conn->error) { $logMessage .= "Errore esecuzione query per lezioni disponibili: " . $conn->error . "\n"; file_put_contents($logFile, $logMessage, FILE_APPEND); echo "Errore nell'esecuzione della query: " . $conn->error . "
"; echo "Torna al portale"; $conn->close(); exit; } // Mappa dei mesi in italiano $italianMonths = [ "January" => "Gennaio", "February" => "Febbraio", "March" => "Marzo", "April" => "Aprile", "May" => "Maggio", "June" => "Giugno", "July" => "Luglio", "August" => "Agosto", "September" => "Settembre", "October" => "Ottobre", "November" => "Novembre", "December" => "Dicembre" ]; $logMessage .= "Caricata pagina di riprogrammazione per ID $idbookingclass, mese: $currentMonthStart\n"; file_put_contents($logFile, $logMessage, FILE_APPEND); ?>Lezione attuale: del
Scadenza abbonamento:
fetch_assoc()) { ?>Giorno:
Orario:
Durata: ore