| Server IP : 193.86.120.172 / Your IP : 216.73.216.67 Web Server : Apache/2.4.63 (Unix) System : Linux JServices 3.10.108 #86003 SMP Wed Oct 22 13:20:46 CST 2025 x86_64 User : kubec ( 1026) PHP Version : 8.2.28 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /volume1/web/kadernictvi_jservices_cz/ |
Upload File : |
<?php
// ============================================
// cron_pripominky.php
// Odesílá e-mailové připomenutí o blížící se rezervaci.
// Spouštět pravidelně (např. každých 15-30 minut) přes cron:
// php /cesta/k/cron_pripominky.php
// nebo přes URL s tajným klíčem (volitelně).
// ============================================
require_once __DIR__ . '/includes/config.php';
require_once __DIR__ . '/includes/db.php';
require_once __DIR__ . '/includes/mailer.php';
// Zjisti nastavení připomenutí
$stmt = db()->prepare("SELECT klic, hodnota FROM nastaveni WHERE klic IN ('pripominka_zapnuta','pripominka_hodin')");
$stmt->execute();
$nastaveni = [];
foreach ($stmt->fetchAll() as $row) {
$nastaveni[$row['klic']] = $row['hodnota'];
}
$zapnuto = ($nastaveni['pripominka_zapnuta'] ?? '0') === '1';
$hodin = (int)($nastaveni['pripominka_hodin'] ?? 24);
if (!$zapnuto || $hodin < 1) {
echo "Připomenutí je vypnuto nebo má neplatnou hodnotu.\n";
exit;
}
// Najdi rezervace, kterým za $hodin hodin začíná termín a ještě nebyla odeslána připomínka
// Okno tolerance 15 minut (aby cron běžící každých 15 min nezachytil rezervaci dvakrát ani ji nevynechal)
$cilovy_cas_od = date('Y-m-d H:i:s', strtotime("+{$hodin} hours"));
$cilovy_cas_do = date('Y-m-d H:i:s', strtotime("+{$hodin} hours +15 minutes"));
$stmt = db()->prepare("
SELECT r.id, r.jmeno, r.prijmeni, r.email, r.datum, r.cas_od, r.poznamka, r.token_zmena,
s.nazev AS sluzba_nazev, s.cena AS sluzba_cena,
r.cena_upravena
FROM rezervace r
JOIN sluzby s ON s.id = r.sluzba_id
WHERE r.stav = 'potvrzena'
AND r.pripominka_odeslana = 0
AND CONCAT(r.datum, ' ', r.cas_od) BETWEEN ? AND ?
");
$stmt->execute([$cilovy_cas_od, $cilovy_cas_do]);
$rezervace = $stmt->fetchAll();
echo "Nalezeno " . count($rezervace) . " rezervací k odeslání připomenutí.\n";
foreach ($rezervace as $rez) {
// Načti doplňky
$stmt_d = db()->prepare("SELECT * FROM rezervace_doplnky WHERE rezervace_id = ?");
$stmt_d->execute([$rez['id']]);
$doplnky = $stmt_d->fetchAll();
$cena = ($rez['cena_upravena'] !== null)
? number_format((float)$rez['cena_upravena'], 0, ',', ' ')
: (($rez['sluzba_cena'] !== null) ? number_format((float)$rez['sluzba_cena'], 0, ',', ' ') : 'Individuální');
$rez_mail = [
'jmeno' => $rez['jmeno'],
'prijmeni' => $rez['prijmeni'],
'email' => $rez['email'],
'datum' => $rez['datum'],
'cas_od' => substr($rez['cas_od'], 0, 5),
'cena' => $cena,
'cena_upravena' => $rez['cena_upravena'],
'token_zmena' => $rez['token_zmena'],
'poznamka' => $rez['poznamka'] ?? '',
'doplnky' => $doplnky,
];
try {
$ok = email_pripominka($rez_mail, $rez['sluzba_nazev'], $hodin);
if ($ok) {
db()->prepare("UPDATE rezervace SET pripominka_odeslana = 1 WHERE id = ?")->execute([$rez['id']]);
echo "✓ Odeslána připomínka rezervaci #{$rez['id']} ({$rez['jmeno']} {$rez['prijmeni']})\n";
} else {
echo "✗ Chyba při odesílání rezervaci #{$rez['id']}\n";
}
} catch (Exception $e) {
echo "✗ Výjimka u rezervace #{$rez['id']}: " . $e->getMessage() . "\n";
}
}
echo "Hotovo.\n";