| Server IP : 188.114.96.3 / Your IP : 216.73.216.143 Web Server : Apache System : Linux sv058.home.net.pl 6.8.2 husak_dirty_pages_fix #1 SMP PREEMPT_DYNAMIC Tue Apr 2 22:06:51 CEST 2024 x86_64 User : ( 3194769) PHP Version : 8.5.12 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : OFF Directory : /polana/admin/ |
Upload File : |
<?php
declare(strict_types=1);
require_once dirname(__DIR__) . '/includes/functions.php';
require_login();
ensure_reservations_schema();
$keys = [
'reservations_enabled',
'reservation_admin_email',
'reservation_min_guests',
'reservation_max_guests',
'reservation_days_ahead',
'reservation_intro',
'reservation_success_message',
'reservation_auto_reply_enabled',
'reservation_received_subject',
'reservation_received_body',
'reservation_confirmed_subject',
'reservation_confirmed_body',
'reservation_rejected_subject',
'reservation_rejected_body',
'reservation_cancelled_subject',
'reservation_cancelled_body',
'smtp_enabled',
'smtp_host',
'smtp_port',
'smtp_security',
'smtp_username',
'smtp_from_email',
'smtp_from_name',
];
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
verify_csrf();
$action = (string)($_POST['action'] ?? 'save');
try {
if ($action === 'save') {
$stmt = db()->prepare(
'INSERT INTO settings (setting_key, setting_value)
VALUES (?, ?)
ON DUPLICATE KEY UPDATE setting_value = VALUES(setting_value)'
);
foreach ($keys as $key) {
$value = trim((string)($_POST[$key] ?? ''));
$stmt->execute([$key, $value]);
}
$password = (string)($_POST['smtp_password'] ?? '');
if ($password !== '') {
$stmt->execute([
'smtp_password_secret',
smtp_encrypt_password($password),
]);
}
admin_log('reservation_settings', 'Zmieniono ustawienia rezerwacji i SMTP');
flash('success', 'Ustawienia rezerwacji i SMTP zostały zapisane.');
redirect('/admin/reservation-settings.php');
}
if ($action === 'test_smtp') {
$testEmail = trim((string)($_POST['test_email'] ?? ''));
if ($testEmail === '') {
throw new RuntimeException('Podaj adres testowy.');
}
smtp_send_mail(
$testEmail,
'Test SMTP – ' . setting('site_name', APP_NAME),
reservation_email_html(
'Test SMTP',
'Jeśli widzisz tę wiadomość, konfiguracja SMTP działa poprawnie.'
),
'Jeśli widzisz tę wiadomość, konfiguracja SMTP działa poprawnie.'
);
flash('success', 'Wiadomość testowa została wysłana.');
redirect('/admin/reservation-settings.php');
}
} catch (Throwable $e) {
flash('error', $e->getMessage());
redirect('/admin/reservation-settings.php');
}
}
$defaults = reservation_default_settings();
$values = [];
foreach ($keys as $key) {
$values[$key] = setting($key, $defaults[$key] ?? '');
}
render_admin_header('Rezerwacje – ustawienia');
?>
<div class="admin-title-row">
<div>
<h1>Rezerwacje – ustawienia i SMTP</h1>
<p>Formularz publiczny, autoresponder i serwer pocztowy.</p>
</div>
<a class="btn btn-light" href="/admin/reservations.php">← Rezerwacje</a>
</div>
<!-- POLANA_V175_SETTINGS_LINK -->
<div class="form-card" style="margin-bottom:18px;padding:18px"><strong>Godziny rezerwacji i wygląd e-maili</strong><p style="margin:7px 0 12px">Ustaw dni otwarcia, zablokuj niedostępne godziny i zobacz podgląd autoresponderów.</p><a class="btn btn-primary" href="/admin/polana-godziny-rezerwacji.php">Otwórz godziny i wiadomości →</a></div>
<form class="form-card form-grid" method="post">
<?= csrf_field() ?>
<input type="hidden" name="action" value="save">
<div class="full admin-section-title">
<h2>Formularz rezerwacji</h2>
</div>
<label>
Rezerwacje online
<select name="reservations_enabled">
<option value="1" <?= $values['reservations_enabled'] === '1' ? 'selected' : '' ?>>Włączone</option>
<option value="0" <?= $values['reservations_enabled'] === '0' ? 'selected' : '' ?>>Wyłączone</option>
</select>
</label>
<label>
E-mail obsługi
<input type="email" name="reservation_admin_email" value="<?= e($values['reservation_admin_email']) ?>">
</label>
<label>
Min. liczba osób
<input type="number" name="reservation_min_guests" min="1" value="<?= e($values['reservation_min_guests']) ?>">
</label>
<label>
Maks. liczba osób
<input type="number" name="reservation_max_guests" min="1" value="<?= e($values['reservation_max_guests']) ?>">
</label>
<label>
Rezerwacje maks. ile dni naprzód
<input type="number" name="reservation_days_ahead" min="1" max="365" value="<?= e($values['reservation_days_ahead']) ?>">
</label>
<label class="full">
Tekst nad formularzem
<textarea name="reservation_intro" rows="3"><?= e($values['reservation_intro']) ?></textarea>
</label>
<label class="full">
Tekst po wysłaniu
<textarea name="reservation_success_message" rows="3"><?= e($values['reservation_success_message']) ?></textarea>
</label>
<div class="full admin-section-title">
<h2>SMTP</h2>
<p>Hasło jest zapisywane osobno i szyfrowane lokalnym kluczem w katalogu storage.</p>
</div>
<label>
SMTP
<select name="smtp_enabled">
<option value="1" <?= $values['smtp_enabled'] === '1' ? 'selected' : '' ?>>Włączony</option>
<option value="0" <?= $values['smtp_enabled'] === '0' ? 'selected' : '' ?>>Wyłączony</option>
</select>
</label>
<label>
Host SMTP
<input name="smtp_host" value="<?= e($values['smtp_host']) ?>" placeholder="np. smtp.twojadomena.pl">
</label>
<label>
Port
<input type="number" name="smtp_port" value="<?= e($values['smtp_port']) ?>">
</label>
<label>
Szyfrowanie
<select name="smtp_security">
<option value="starttls" <?= $values['smtp_security'] === 'starttls' ? 'selected' : '' ?>>STARTTLS</option>
<option value="ssl" <?= $values['smtp_security'] === 'ssl' ? 'selected' : '' ?>>SSL/TLS</option>
<option value="none" <?= $values['smtp_security'] === 'none' ? 'selected' : '' ?>>Brak</option>
</select>
</label>
<label>
Login SMTP
<input name="smtp_username" value="<?= e($values['smtp_username']) ?>" autocomplete="username">
</label>
<label>
Hasło SMTP
<input type="password" name="smtp_password" value="" autocomplete="new-password" placeholder="<?= smtp_password_is_set() ? 'Hasło zapisane – zostaw puste, aby nie zmieniać' : 'Wpisz hasło SMTP' ?>">
</label>
<label>
Adres nadawcy
<input type="email" name="smtp_from_email" value="<?= e($values['smtp_from_email']) ?>" placeholder="[email protected]">
</label>
<label>
Nazwa nadawcy
<input name="smtp_from_name" value="<?= e($values['smtp_from_name']) ?>">
</label>
<div class="full admin-section-title">
<h2>Automatyczne odpowiedzi</h2>
<p>Możesz używać: {code}, {name}, {date}, {time}, {guests}, {phone}, {email}, {notes}, {site}</p>
</div>
<label>
Autoresponder po wysłaniu
<select name="reservation_auto_reply_enabled">
<option value="1" <?= $values['reservation_auto_reply_enabled'] === '1' ? 'selected' : '' ?>>Włączony</option>
<option value="0" <?= $values['reservation_auto_reply_enabled'] === '0' ? 'selected' : '' ?>>Wyłączony</option>
</select>
</label>
<label class="full">
Temat – odebraliśmy prośbę
<input name="reservation_received_subject" value="<?= e($values['reservation_received_subject']) ?>">
</label>
<label class="full">
Treść – odebraliśmy prośbę
<textarea name="reservation_received_body" rows="7"><?= e($values['reservation_received_body']) ?></textarea>
</label>
<label class="full">
Temat – potwierdzona
<input name="reservation_confirmed_subject" value="<?= e($values['reservation_confirmed_subject']) ?>">
</label>
<label class="full">
Treść – potwierdzona
<textarea name="reservation_confirmed_body" rows="6"><?= e($values['reservation_confirmed_body']) ?></textarea>
</label>
<label class="full">
Temat – brak dostępności
<input name="reservation_rejected_subject" value="<?= e($values['reservation_rejected_subject']) ?>">
</label>
<label class="full">
Treść – brak dostępności
<textarea name="reservation_rejected_body" rows="6"><?= e($values['reservation_rejected_body']) ?></textarea>
</label>
<label class="full">
Temat – anulowana
<input name="reservation_cancelled_subject" value="<?= e($values['reservation_cancelled_subject']) ?>">
</label>
<label class="full">
Treść – anulowana
<textarea name="reservation_cancelled_body" rows="6"><?= e($values['reservation_cancelled_body']) ?></textarea>
</label>
<div class="full">
<button class="btn btn-primary" type="submit">Zapisz ustawienia</button>
</div>
</form>
<form class="form-card form-grid" method="post">
<?= csrf_field() ?>
<input type="hidden" name="action" value="test_smtp">
<div class="full admin-section-title">
<h2>Test SMTP</h2>
<p>Najpierw zapisz ustawienia powyżej, potem wyślij wiadomość testową.</p>
</div>
<label class="full">
Wyślij test na
<input type="email" name="test_email" value="<?= e($values['reservation_admin_email']) ?>" required>
</label>
<div class="full">
<button class="btn btn-green" type="submit">Wyślij test SMTP</button>
</div>
</form>
<?php render_admin_footer(); ?>