403Webshell
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 :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /polana/admin/polana-v176-diagnostyka.php
<?php
declare(strict_types=1);
/** POLANA V17.6 — read-only diagnostics. No DB changes, no email sending, no secret disclosure. */
require_once dirname(__DIR__) . '/includes/functions.php';
require_admin_role();
header('Cache-Control: private, no-store, no-cache, max-age=0');
header('X-Robots-Tag: noindex, nofollow');
header('X-Content-Type-Options: nosniff');
function pd176_e($v): string {return htmlspecialchars((string)$v, ENT_QUOTES|ENT_SUBSTITUTE,'UTF-8');}
function pd176_contains(string $file,string $needle): bool {
    if (!is_file($file) || !is_readable($file)) return false;
    $s=@file_get_contents($file);
    return is_string($s) && str_contains($s,$needle);
}
$base=dirname(__DIR__);
$tests=[];
$add=static function(string $section,string $label,string $level,string $message) use (&$tests):void {
    $tests[]=['section'=>$section,'label'=>$label,'level'=>$level,'message'=>$message];
};
$check=static function(string $path) use ($base):bool {return is_file($base.'/'.$path);};
$add('System','PHP','ok','Wersja '.PHP_VERSION);
$add('System','PDO MySQL',extension_loaded('pdo_mysql')?'ok':'bad',extension_loaded('pdo_mysql')?'Dostępne':'Brak rozszerzenia pdo_mysql');
$add('System','OpenSSL',extension_loaded('openssl')?'ok':'warn',extension_loaded('openssl')?'Dostępne':'Brak OpenSSL — SMTP/OAuth mogą nie działać');
$add('System','Eksport XLSX',($check('includes/polana_v176_xlsx.php')&&$check('admin/polana-newsletter-excel.php'))?'ok':'bad','Eksport Excel bez dodatkowych bibliotek PHP; dostępny tylko dla administratora');
try { $db=db(); $db->query('SELECT 1'); $add('System','Baza MariaDB','ok','Połączenie działa (SELECT 1)'); }
catch(Throwable $e){$db=null;$add('System','Baza MariaDB','bad','Brak połączenia. Sprawdź konfigurację bazy.');}

$mode=setting('polana_tracking_mode','off');
$ga4=setting('polana_ga4_id','');
$gtm=setting('polana_gtm_id','');
$pixel=setting('polana_meta_pixel_id','');
$add('Analityka i cookies','Tryb pomiaru',$mode==='gtm'?'ok':($mode==='direct'?'warn':'warn'),$mode==='gtm'?'GTM (jeden kontener)':($mode==='direct'?'GA4 bezpośrednio — GTM nie jest używany':'Wyłączony lub nieznany'));
$add('Analityka i cookies','Identyfikator GA4',preg_match('/^G-[A-Z0-9]{5,20}$/',$ga4)?'ok':'warn',$ga4?:'Nieustawiony');
$add('Analityka i cookies','Identyfikator GTM',preg_match('/^GTM-[A-Z0-9]{4,20}$/',$gtm)?'ok':'warn',$gtm?:'Nieustawiony');
$add('Analityka i cookies','Meta Pixel','info',$pixel!==''?'ID wpisany (nie pokazujemy numeru)':'Nieustawiony — opcjonalny');
$head=pd176_contains($base.'/includes/functions.php','POLANA_TRACKING_HEAD_V174');
$foot=pd176_contains($base.'/includes/functions.php','POLANA_TRACKING_FOOTER_V174');
$add('Analityka i cookies','Integracja z szablonem',($head&&$foot)?'ok':'bad',($head&&$foot)?'Hooki HEAD i FOOTER są obecne':'Brak jednego z hooków w functions.php');
$js=$check('assets/js/polana-tracking.js'); $css=$check('assets/css/polana-tracking.css');
$add('Analityka i cookies','Baner i skrypty',($js&&$css)?'ok':'bad',($js&&$css)?'JS i CSS są na serwerze':'Brak JS lub CSS');
$add('Analityka i cookies','Google Consent Mode v2',$js&&pd176_contains($base.'/assets/js/polana-tracking.js','ad_user_data')?'ok':'warn','Obecność obsługi w pliku JS; działanie w przeglądarce i w GTM trzeba sprawdzić osobno');
if($mode==='gtm')$add('Analityka i cookies','Tag GA4 wewnątrz GTM','info','Nie da się sprawdzić z PHP. W GTM użyj Podgląd/Tag Assistant i sprawdź zgodę analytics_storage oraz brak podwójnego page_view.');
if($mode==='direct'&&$gtm!=='')$add('Analityka i cookies','GTM nieaktywny','warn','ID kontenera zapisane, ale tryb bezpośredni — zmień tryb w Analityka i piksele, jeśli GTM ma zarządzać GA4.');

$host=setting('smtp_host',''); $from=setting('smtp_from_email',''); $notify=setting('reservation_admin_email','');
$enabled=setting('smtp_enabled','0')==='1';
$hasPass=false;
try {$hasPass=function_exists('smtp_password_is_set')&&smtp_password_is_set();} catch(Throwable $e){}
$add('Poczta i rezerwacje','SMTP',($enabled&&$hasPass&&$host!=='')?'ok':'warn',($enabled?'Włączone':'Wyłączone').'; host: '.($host?:'brak').'; hasło: '.($hasPass?'zapisane':'brak'));
$add('Poczta i rezerwacje','Nadawca',$from!==''?'ok':'warn',$from?:'Brak adresu nadawcy');
$add('Poczta i rezerwacje','Powiadomienia',filter_var($notify,FILTER_VALIDATE_EMAIL)?'ok':'warn',$notify?:'Nie ustawiono odbiorcy rezerwacji');
$add('Poczta i rezerwacje','Autoresponder',setting('reservation_auto_reply_enabled','0')==='1'?'ok':'warn',setting('reservation_auto_reply_enabled','0')==='1'?'Włączony':'Wyłączony');
$add('Poczta i rezerwacje','HTML e-mail',pd176_contains($base.'/includes/reservations.php','pv175_email_html')?'ok':'warn','Sprawdzono obecność funkcji szablonu V17.5 w module rezerwacji');
$add('Poczta i rezerwacje','Numer #POLANA',pd176_contains($base.'/includes/reservations.php','POLANA_V1752_CODE')?'ok':'warn','Sprawdzono obecność znacznika numeracji V17.5.2');
$add('Poczta i rezerwacje','Godziny rezerwacji',$check('includes/polana_v175_booking.php')?'ok':'warn',$check('includes/polana_v175_booking.php')?'Plik logiki godzin jest obecny':'Brak modułu godzin V17.5');
$add('Poczta i rezerwacje','Blokada po stronie serwera',pd176_contains($base.'/includes/reservations.php','POLANA_V175_SERVER_VALIDATION')?'ok':'warn','Sprawdzono znacznik walidacji V17.5; nie wykonano testu wysłania rezerwacji');

$add('Newsletter','Panel i double opt-in',($check('admin/polana-newsletter.php')&&$check('includes/polana_v172_newsletter.php'))?'ok':'bad','Sprawdzono obecność plików V17.2');
$add('Newsletter','Adapter zapisów',pd176_contains($base.'/includes/newsletter.php','POLANA_V172_NEWSLETTER_ADAPTER')?'ok':'warn','Sprawdzono, czy newsletter.php korzysta z adaptera V17.2');
if($db instanceof PDO){
 try {
    $exists=$db->query("SHOW TABLES LIKE 'newsletter_subscribers'")->fetchColumn();
    if(!$exists) $add('Newsletter','Tabela zapisów','bad','Nie istnieje newsletter_subscribers');
    else {
        $cols=array_column($db->query('SHOW COLUMNS FROM newsletter_subscribers')->fetchAll(PDO::FETCH_ASSOC),'Field');
        $verified=in_array('verified_at',$cols,true);
        $add('Newsletter','Tabela zapisów',$verified?'ok':'warn',$verified?'Kolumny V17.2 są dostępne':'Brak verified_at — wymagany upgrade V17.2');
        $stats=[];
        foreach($db->query('SELECT status, COUNT(*) AS n FROM newsletter_subscribers GROUP BY status')->fetchAll(PDO::FETCH_ASSOC) as $r) $stats[(string)$r['status']]=(int)$r['n'];
        $active=(int)($stats['active']??0);$pending=(int)($stats['pending']??0);$out=(int)($stats['unsubscribed']??0);
        $eligible=$verified?(int)$db->query("SELECT COUNT(*) FROM newsletter_subscribers WHERE status='active' AND verified_at IS NOT NULL")->fetchColumn():0;
        $add('Newsletter','Adresy zapisane','info','Aktywne: '.$active.'; oczekujące: '.$pending.'; wypisane: '.$out.'; do kampanii po potwierdzeniu: '.$eligible);
    }
 } catch(Throwable $e){$add('Newsletter','Tabela zapisów','bad','Błąd odczytu tabeli newslettera (bez modyfikacji danych)');}
}

$gcal=$check('includes/polana_gcal.php')&&$check('admin/polana-kalendarz.php');
$add('Google Kalendarz','Moduł integracji',$gcal?'ok':'warn',$gcal?'Pliki integracji są obecne':'Brak plików V17.3');
if($gcal){
 $private=dirname($base).'/.polana_gcal_private';
 $configured=is_readable($private.'/oauth.enc')&&is_readable($private.'/encryption.key');
 $add('Google Kalendarz','Dane OAuth',$configured?'ok':'warn',$configured?'Zaszyfrowane pliki konfiguracji są obecne; ważność tokenu nie została sprawdzona':'Brak kompletu plików połączenia Google lub brak dostępu do odczytu');
 $add('Google Kalendarz','Synchronizacja','info','Nie wywołano Google API. Sprawdź testową potwierdzoną rezerwację w panelu Kalendarza.');
}
$report='POLANA — diagnostyka V17.6 | '.date('Y-m-d H:i:s')."\n";
foreach($tests as $r) $report.='['.strtoupper($r['level']).'] '.$r['section'].' / '.$r['label'].': '.$r['message']."\n";
render_admin_header('Polana — diagnostyka V17.6');
?>
<style>
.pd176{max-width:1180px;margin:0 auto 65px;padding:16px;color:#213a2b}.pd176 *{box-sizing:border-box}.pd176 h1{font-size:clamp(25px,3vw,35px);margin:12px 0}.pd176 h2{font-size:21px;margin:0 0 15px}.pd176 p{line-height:1.6}.pd176 .links{display:flex;flex-wrap:wrap;gap:9px}.pd176 .button{display:inline-flex;align-items:center;justify-content:center;padding:11px 15px;background:#215d43;color:white;border:0;border-radius:10px;text-decoration:none;font-weight:700;cursor:pointer;font:inherit;min-height:43px}.pd176 .button.alt{background:#e6eee8;color:#214d39}.pd176 .panel{background:white;border:1px solid #d7e0d9;border-radius:16px;padding:20px;margin:16px 0}.pd176 .row{display:flex;align-items:start;justify-content:space-between;gap:12px;padding:12px 0;border-bottom:1px solid #e8ece9}.pd176 .row:last-child{border-bottom:0}.pd176 .label{font-weight:750}.pd176 .detail{font-size:13px;color:#55685c;line-height:1.5;margin-top:4px;overflow-wrap:anywhere}.pd176 .badge{flex:0 0 auto;padding:4px 10px;border-radius:99px;font-weight:800;font-size:12px;background:#e4f3e9;color:#24643f}.pd176 .badge.warn{background:#fff1d8;color:#83530d}.pd176 .badge.bad{background:#fce4e4;color:#96302e}.pd176 .badge.info{background:#eaf0f9;color:#3a567b}.pd176 .notice{padding:15px;border-left:4px solid #bf8b39;background:#fff7e9;border-radius:9px}.pd176 textarea{width:100%;min-height:125px;border:1px solid #cbd8ce;border-radius:9px;padding:10px;font:12px/1.4 monospace;resize:vertical}@media(max-width:600px){.pd176 .panel{padding:14px}.pd176 .row{flex-direction:column}.pd176 .links{display:grid}}
</style>
<div class="pd176">
<div class="links"><a class="button alt" href="/admin/polana-zarzadzanie.php">← Zarządzanie</a><a class="button alt" href="/admin/polana-analityka.php">Analityka / GTM</a><a class="button alt" href="/admin/polana-komunikacja.php">Poczta</a><a class="button alt" href="/admin/polana-newsletter.php">Newsletter</a><a class="button alt" href="/admin/polana-kalendarz.php">Google Kalendarz</a></div>
<h1>Diagnostyka Polany <small style="font-size:14px;color:#6a796d">V17.6</small></h1>
<p>Bezpieczny przegląd konfiguracji: <strong>nie zmienia bazy, nie wysyła maili, nie ujawnia haseł ani tokenów</strong>. Weryfikuje pliki i zapisane ustawienia, nie zastępuje testów w przeglądarce ani Google Tag Assistant.</p>
<div class="panel"><h2>Eksport newslettera do Excela</h2><div class="links"><a class="button" href="/admin/polana-newsletter-excel.php?status=active">Pobierz potwierdzonych (.xlsx)</a><a class="button alt" href="/admin/polana-newsletter.php?status=active&amp;export=csv">Pobierz CSV</a></div><p style="font-size:13px;color:#607465">Eksport do kampanii obejmuje wyłącznie potwierdzone adresy. Oczekujący i wypisani nie są listą marketingową.</p></div>
<?php $section='';foreach($tests as $r): if($r['section']!==$section):if($section!==''):?></div><?php endif;$section=$r['section'];?><div class="panel"><h2><?=pd176_e($section)?></h2><?php endif;?>
<div class="row"><div><div class="label"><?=pd176_e($r['label'])?></div><div class="detail"><?=pd176_e($r['message'])?></div></div><span class="badge <?=pd176_e($r['level'])?>"><?=['ok'=>'OK','warn'=>'SPRAWDŹ','bad'=>'BRAK','info'=>'INFO'][$r['level']]??'INFO'?></span></div>
<?php endforeach;if($section!==''):?></div><?php endif;?>
<div class="notice"><b>GTM i cookies:</b> w oknie incognito odrzuć cookies, sprawdź w Narzędziach deweloperskich → Sieć, czy nie ma żądań GA4/Meta. Następnie zaakceptuj analitykę i sprawdź tag w <a href="https://tagassistant.google.com/" target="_blank" rel="noopener noreferrer">Tag Assistant</a>. Ten raport nie potwierdza zdalnej konfiguracji tagów w kontenerze GTM.</div>
<div class="panel"><h2>Raport do skopiowania</h2><p>Raport nie zawiera listy adresów newslettera, haseł ani tokenów OAuth.</p><textarea id="pd176-report" readonly><?=pd176_e($report)?></textarea><p><button class="button" type="button" onclick="var t=document.getElementById('pd176-report');t.select();if(navigator.clipboard&&window.isSecureContext){navigator.clipboard.writeText(t.value).then(function(){alert('Skopiowano raport');},function(){document.execCommand('copy');alert('Skopiowano raport');});}else{document.execCommand('copy');alert('Skopiowano raport');}">Kopiuj raport</button></p></div>
</div>
<?php render_admin_footer(); ?>

Youez - 2016 - github.com/yon3zu
LinuXploit