| 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);
/** POLANA 17.2 Mail hub – no password display, no mail sending on page load. */
require_once dirname(__DIR__) . '/includes/functions.php';
require_admin_role();
header('Cache-Control: private, no-store, max-age=0');
header('X-Robots-Tag: noindex,nofollow');
function pk172_e($x):string{return htmlspecialchars((string)$x,ENT_QUOTES|ENT_SUBSTITUTE,'UTF-8');}
$domain='mojapolanasmakow.pl';
$notification=setting('reservation_admin_email','rezerwacje@'.$domain);
$sender=setting('smtp_from_email','no-reply@'.$domain);
$host=setting('smtp_host','');
$login=setting('smtp_username','');
$port=setting('smtp_port','');
$enabled=setting('smtp_enabled','0')==='1';
$pass=smtp_password_is_set() && smtp_password()!=='';
$auto=setting('reservation_auto_reply_enabled','1')==='1';
$mailOk=$enabled && $pass && $host!=='' && $sender!=='' && $login!=='';
$counts=['active'=>0,'pending'=>0,'unsubscribed'=>0];
try{ $has=db()->query("SHOW TABLES LIKE 'newsletter_subscribers'")->fetchColumn();
if($has) foreach(db()->query('SELECT status,COUNT(*) AS n FROM newsletter_subscribers GROUP BY status')->fetchAll(PDO::FETCH_ASSOC) as $r){$counts[(string)$r['status']]=(int)$r['n'];}}
catch(Throwable $ignored) {}
$errorEvents=[];
try{
$errorEvents=db()->query("SELECT e.created_at,e.message,r.reservation_code FROM reservation_events e INNER JOIN reservations r ON r.id=e.reservation_id WHERE e.event_type='email_error' ORDER BY e.id DESC LIMIT 8")->fetchAll(PDO::FETCH_ASSOC);
}catch(Throwable $ignored){}
render_admin_header('Poczta, rezerwacje i newsletter');
?>
<style>
.pk172{max-width:1350px;margin:0 auto 65px;padding:16px;color:#20372c}.pk172 *{box-sizing:border-box}.pk172 h1{font-size:clamp(26px,3vw,37px);margin:0 0 7px}.pk172 h2{font-size:21px}.pk172 p{line-height:1.6}.pk172 .cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}.pk172 .card{border:1px solid #d7e2d9;border-radius:17px;background:#fff;padding:20px}.pk172 .button{display:inline-block;padding:12px 15px;background:#1b5d43;color:#fff;border-radius:10px;text-decoration:none;font-weight:750;margin:6px 5px 5px 0;min-height:44px}.pk172 .button.alt{background:#e8f0e9;color:#1e5a40}.pk172 .big{font-size:24px;font-weight:800}.pk172 .status{padding:5px 9px;border-radius:99px;background:#e7f4ec;color:#155537;font-weight:700;font-size:12px}.pk172 .status.warn{background:#fff0da;color:#7c4409}.pk172 .flow{display:flex;align-items:stretch;gap:9px;flex-wrap:wrap}.pk172 .flow span{padding:15px;border-radius:11px;background:#eef5ef;flex:1;min-width:180px;font-size:14px}.pk172 .flow .arrow{flex:0;min-width:0;background:transparent;align-self:center}.pk172 .note{padding:15px;border-left:4px solid #277b53;border-radius:8px;background:#ecf5ee;margin-top:15px}.pk172 .error{border-bottom:1px solid #e0e5de;padding:9px 0}.pk172 .muted{color:#66766a;font-size:14px}.pk172 code{overflow-wrap:anywhere}.pk172 .links{margin:10px 0 20px}@media(max-width:970px){.pk172 .cards{grid-template-columns:1fr 1fr}}@media(max-width:650px){.pk172 .cards{grid-template-columns:1fr}.pk172 .card{padding:16px}.pk172 .flow .arrow{display:none}}
</style>
<div class="pk172">
<div class="links"><a class="button alt" href="/admin/polana-zarzadzanie.php">← Zarządzanie</a><a class="button alt" href="/admin/reservations.php">Rezerwacje</a><a class="button alt" href="/admin/polana-newsletter.php">Newsletter</a><a class="button" href="/admin/polana-kalendarz.php">Google Kalendarz</a></div>
<h1>Poczta i komunikacja — Moja Polana Smaków</h1><p>W jednym miejscu: kto otrzymuje wiadomości, automatyczne odpowiedzi, SMTP home.pl, test wysyłki i lista zgód newslettera.</p>
<div class="cards">
<section class="card"><h2>📨 SMTP home.pl</h2><span class="status <?=$mailOk?'':'warn'?>"><?=$mailOk?'Włączone i zapisane':'Wymaga konfiguracji'?></span><p><b>Serwer:</b> <?=pk172_e($host?:'serwer2200110.home.pl')?><br><b>Port:</b> <?=pk172_e($port?:'465')?> · <?=pk172_e(setting('smtp_security','ssl'))?><br><b>Login:</b> <?=pk172_e($login?:'no-reply@'.$domain)?><br><b>Hasło:</b> <?=$pass?'zapisane':'brak'?></p><a class="button" href="/admin/polana-poczta.php">Konfiguruj hasło i wyślij test</a></section>
<section class="card"><h2>📅 Rezerwacje</h2><p><b>Powiadomienia do:</b><br><code><?=pk172_e($notification)?></code></p><p><b>Wiadomości od:</b><br><code><?=pk172_e($sender)?></code></p><p>Autoresponder: <span class="status <?=$auto?'':'warn'?>"><?=$auto?'Włączony':'Wyłączony'?></span></p><a class="button" href="/admin/reservation-settings.php">Zmień treść odpowiedzi</a></section>
<section class="card"><h2>🗓️ Google Kalendarz</h2><p>Po potwierdzeniu rezerwacja automatycznie trafia do prywatnego kalendarza obsługi. Anulowanie usuwa wydarzenie. Wszyscy pracownicy zobaczą go na telefonach po udostępnieniu kalendarza.</p><a class="button" href="/admin/polana-kalendarz.php">Połącz Google i ustaw kalendarz</a></section><section class="card"><h2>✉️ Newsletter</h2><div class="big"><?=pk172_e($counts['active'])?> aktywnych</div><p><?=pk172_e($counts['pending'])?> oczekuje na potwierdzenie · <?=pk172_e($counts['unsubscribed'])?> wypisanych</p><p>Nowe zapisy: potwierdzenie e-mail (double opt-in). Brak wysyłki masowej w tej wersji.</p><a class="button" href="/admin/polana-newsletter.php">Lista, zgody i eksport CSV</a></section>
</div>
<section class="card" style="margin-top:18px"><h2>Jak działają automatyczne wiadomości?</h2><div class="flow"><span><b>1. Gość</b><br>Wysyła prośbę o rezerwację</span><span class="arrow">→</span><span><b>2. Restauracja</b><br>Otrzymuje mail na <code>[email protected]</code></span><span class="arrow">→</span><span><b>3. Gość</b><br>Dostaje autoresponder „Otrzymaliśmy prośbę” — nie potwierdzenie stolika</span></div><p>Po ręcznym zatwierdzeniu, odrzuceniu lub anulowaniu rezerwacji klient otrzymuje odpowiednią wiadomość statusową (jeżeli SMTP działa). Odpowiedź na wiadomość do gościa powinna trafiać na <code>[email protected]</code>.</p><a class="button alt" href="/admin/reservations.php">Przejdź do rezerwacji</a><a class="button alt" href="/admin/reservation-settings.php">Edytuj wszystkie szablony</a></section>
<section class="card" style="margin-top:18px"><h2>Przekazywanie poczty — ważne rozróżnienie</h2><p><strong>Powiadomienia ze strony</strong> są wysyłane przez SMTP <code>[email protected]</code> bezpośrednio na <code>[email protected]</code>. Nie potrzebują reguły forward.</p><p><strong>Wiadomości przychodzące na skrzynkę no-reply</strong> to osobna sprawa: jeżeli mają automatycznie trafiać na <code>[email protected]</code>, ustaw przekierowanie/alias po stronie panelu poczty home.pl. Sam PHP nie przekazuje wiadomości przychodzących.</p><p class="muted">Nie podawaj hasła SMTP w czacie. Wpisujesz je tylko w „Konfiguruj hasło i wyślij test”.</p></section>
<?php if($errorEvents):?><section class="card" style="margin-top:18px"><h2>Ostatnie błędy wysyłki rezerwacji</h2><?php foreach($errorEvents as $er):?><div class="error"><b><?=pk172_e($er['reservation_code'])?></b> · <?=pk172_e($er['created_at'])?><p><?=pk172_e($er['message'])?></p></div><?php endforeach;?></section><?php endif; ?>
</div>
<?php render_admin_footer(); ?>