getConnection(); $row = $pdo->query("SELECT * FROM `option` LIMIT 1")->fetch(PDO::FETCH_ASSOC) ?: []; } catch (Throwable $e) { $row = []; } $opt = [ 'cc_email' => trim((string) ($row['event_notify_email'] ?? '')), 'cc' => [ 'booking' => ($row['event_cc_booking'] ?? 'N') === 'Y', 'user_cancel' => ($row['event_cc_user_cancel'] ?? 'N') === 'Y', 'event_cancel' => ($row['event_cc_event_cancel'] ?? 'N') === 'Y', 'reminder' => ($row['event_cc_reminder'] ?? 'N') === 'Y', 'promotion' => ($row['event_cc_promotion'] ?? 'N') === 'Y', ], ]; return $opt; } /* ---------- Invio base ---------- */ function yse_send(string $to, string $toName, string $subject, string $html, bool $ccSchool): bool { $env = $_ENV; try { $mail = new \PHPMailer\PHPMailer\PHPMailer(true); $mail->isSMTP(); $mail->Host = $env['MAIL_HOST'] ?? ''; $mail->SMTPAuth = true; $mail->Username = $env['MAIL_USERNAME'] ?? ''; $mail->Password = $env['MAIL_PASSWORD'] ?? ''; $enc = strtolower($env['MAIL_ENCRYPTION'] ?? 'ssl'); $mail->SMTPSecure = ($enc === 'tls') ? \PHPMailer\PHPMailer\PHPMailer::ENCRYPTION_STARTTLS : \PHPMailer\PHPMailer\PHPMailer::ENCRYPTION_SMTPS; $mail->Port = (int) ($env['MAIL_PORT'] ?? 465); $mail->CharSet = 'UTF-8'; $mail->setFrom($env['MAIL_FROM_ADDRESS'] ?? 'info@yogasoul.it', $env['MAIL_FROM_NAME'] ?? 'YogiBook'); $mail->addAddress($to, $toName); if ($ccSchool) { $ccEmail = yse_mail_options()['cc_email']; if ($ccEmail !== '' && strcasecmp($ccEmail, $to) !== 0) { $mail->addCC($ccEmail); } } $mail->isHTML(true); $mail->Subject = $subject; $mail->Body = $html; $mail->AltBody = trim(preg_replace( '/\n{3,}/', "\n\n", strip_tags(str_replace(['
', '' . $f[1] . ':
' . nl2br(yse_h($val)) . '
Ciao ' . yse_h($name) . ", ti abbiamo messo in lista d'attesa per questo evento. Ti avviseremo appena si libera un posto.
"; } else { $heading = 'Prenotazione confermata'; $intro = 'Ciao ' . yse_h($name) . ', la tua prenotazione è confermata. Ecco i dettagli:
'; } $body = $intro; $body .= yse_event_info_block($event); $body .= 'Posti prenotati: ' . (int) $booking['seats'] . '
'; $body .= 'Se non puoi più partecipare, puoi annullare qui:
'; $body .= '' . yse_button(yse_cancel_url($booking), 'Annulla prenotazione', $accent) . '
'; $subject = ($waiting ? "Lista d'attesa: " : 'Prenotazione confermata: ') . $event['title']; $html = yse_email_layout($event, $heading, $body); return yse_send($booking['email'], $booking['name'], $subject, $html, yse_mail_options()['cc']['booking']); } /** B) Disdetta fatta dall'utente */ function yse_mail_user_cancel(array $booking, array $event): bool { $parts = explode(' ', trim($booking['name'])); $name = $parts[0] ?? ''; $body = 'Ciao ' . yse_h($name) . ', la tua prenotazione per questo evento è stata annullata.
'; $body .= yse_event_info_block($event); $body .= 'Ci dispiace non vederti questa volta. A presto!
'; $subject = 'Prenotazione annullata: ' . $event['title']; $html = yse_email_layout($event, 'Prenotazione annullata', $body); return yse_send($booking['email'], $booking['name'], $subject, $html, yse_mail_options()['cc']['user_cancel']); } /** C) Evento annullato dall'insegnante (a ciascun iscritto) */ function yse_mail_event_cancel(array $booking, array $event): bool { $parts = explode(' ', trim($booking['name'])); $name = $parts[0] ?? ''; $body = 'Ciao ' . yse_h($name) . ", ci dispiace: l'evento è stato annullato.
"; $body .= yse_event_info_block($event); $body .= 'La tua prenotazione è stata annullata automaticamente. Per informazioni, rispondi pure a questa email.
'; $subject = 'Evento annullato: ' . $event['title']; $html = yse_email_layout($event, 'Evento annullato', $body); return yse_send($booking['email'], $booking['name'], $subject, $html, yse_mail_options()['cc']['event_cancel']); } /** E) Promozione da lista d'attesa — con RICONFERMA */ function yse_mail_promotion(array $booking, array $event): bool { $accent = $event['color'] ?? '#4CAF50'; $parts = explode(' ', trim($booking['name'])); $name = $parts[0] ?? ''; $body = 'Ciao ' . yse_h($name) . ", buone notizie: si è liberato un posto e tocca a te!
"; $body .= yse_event_info_block($event); $body .= 'Conferma entro breve per tenere il posto:
'; $body .= '' . yse_button(yse_confirm_url($booking), 'Confermo, ci sarò', $accent) . '
'; $body .= 'Se non puoi partecipare, annulla qui così offriamo il posto a un\'altra persona.
'; $subject = 'Si è liberato un posto: ' . $event['title']; $html = yse_email_layout($event, 'Un posto per te', $body); return yse_send($booking['email'], $booking['name'], $subject, $html, yse_mail_options()['cc']['promotion']); } /** D) Promemoria prima dell'evento (testo e punto di ritrovo opzionali) */ function yse_mail_reminder(array $booking, array $event, string $message = '', string $meetingLink = ''): bool { $accent = $event['color'] ?? '#4CAF50'; $parts = explode(' ', trim($booking['name'])); $name = $parts[0] ?? ''; $note = $message !== '' ? nl2br(yse_h($message)) : 'Ti ricordiamo il tuo prossimo appuntamento.'; $body = 'Ciao ' . yse_h($name) . ',
' . $note . '
Punto di ritrovo: apri la posizione sulla mappa
'; } $body .= 'Se non puoi più partecipare, avvisaci annullando:
'; $body .= '' . yse_button(yse_cancel_url($booking), 'Annulla prenotazione', $accent) . '
'; $subject = 'Promemoria: ' . $event['title']; $html = yse_email_layout($event, 'Ci vediamo presto', $body); return yse_send($booking['email'], $booking['name'], $subject, $html, yse_mail_options()['cc']['reminder']); }