403Webshell
Server IP : 188.114.97.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/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /polana/polana_google_opinie.php
<?php
declare(strict_types=1);

@set_time_limit(120);
session_start();
header('Content-Type: text/html; charset=utf-8');
header('X-Robots-Tag: noindex, nofollow, noarchive', true);

/*
 * POLANA GOOGLE OPINIE / MIGRACJA v1
 * Bez tokena – po instalacji usuń ten plik.
 */

const MARKER_INCLUDE = '/* POLANA_GOOGLE_REVIEWS_INCLUDE_V1 */';
const MARKER_FOOTER  = '/* POLANA_GOOGLE_REVIEWS_FOOTER_V1 */';
const MARKER_HT_START = '# POLANA_GOOGLE_REVIEWS_ROUTES_START';
const MARKER_HT_END   = '# POLANA_GOOGLE_REVIEWS_ROUTES_END';
const CSS_START = '/* POLANA GOOGLE REVIEWS V1 START */';
const CSS_END   = '/* POLANA GOOGLE REVIEWS V1 END */';

function h(mixed $v): string { return htmlspecialchars((string)$v, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); }
function mkdirp(string $d): void {
    if (!is_dir($d) && !@mkdir($d,0775,true) && !is_dir($d)) throw new RuntimeException('Nie mogę utworzyć katalogu: '.$d);
}
function readf(string $f): string {
    $s=@file_get_contents($f);
    if ($s===false) throw new RuntimeException('Nie mogę odczytać: '.$f);
    return $s;
}
function writef(string $f,string $s): void {
    mkdirp(dirname($f));
    if (@file_put_contents($f,$s,LOCK_EX)===false) throw new RuntimeException('Nie mogę zapisać: '.$f);
}
function backupf(string $root,string $backup,string $rel): void {
    $src=$root.'/'.ltrim($rel,'/');
    if (!is_file($src)) return;
    $dst=$backup.'/'.ltrim($rel,'/');
    mkdirp(dirname($dst));
    if (!@copy($src,$dst)) throw new RuntimeException('Backup nieudany: '.$rel);
}
function lintf(string $f): ?string {
    if (!function_exists('exec')) return null;
    $disabled=array_map('trim',explode(',',(string)ini_get('disable_functions')));
    if (in_array('exec',$disabled,true)) return null;
    $o=[];$c=0;@exec('php -l '.escapeshellarg($f).' 2>&1',$o,$c);
    return $c===0?'OK':implode("\n",$o);
}
function detect_root(): string {
    foreach ([__DIR__, dirname(__DIR__)] as $r) {
        if (is_file($r.'/index.php') && is_file($r.'/includes/functions.php')) return $r;
    }
    throw new RuntimeException('Nie znalazłem katalogu strony. Wgraj instalator obok index.php.');
}
function insert_after_declare_or_php(string $src,string $code): string {
    if (preg_match('/declare\s*\(\s*strict_types\s*=\s*1\s*\)\s*;/',$src,$m,PREG_OFFSET_CAPTURE)) {
        $p=$m[0][1]+strlen($m[0][0]);
        return substr($src,0,$p)."\n".$code."\n".substr($src,$p);
    }
    $p=strpos($src,'<?php');
    if ($p===false) throw new RuntimeException('Brak <?php');
    $p+=5;
    return substr($src,0,$p)."\n".$code."\n".substr($src,$p);
}
function inject_function_start(string $src,string $fn,string $marker,string $line): string {
    if (strpos($src,$marker)!==false) return $src;
    $rx='~function\s+'.preg_quote($fn,'~').'\s*\([^)]*\)\s*(?::\s*[^{]+)?\{~s';
    if (!preg_match($rx,$src,$m,PREG_OFFSET_CAPTURE)) {
        throw new RuntimeException('Nie znalazłem funkcji '.$fn.'() w includes/functions.php.');
    }
    $p=$m[0][1]+strlen($m[0][0]);
    return substr($src,0,$p)."\n    ".$marker."\n    ".$line."\n".substr($src,$p);
}
function strip_block(string $s,string $start,string $end): string {
    $a=strpos($s,$start); $b=strpos($s,$end);
    if ($a===false || $b===false || $b<$a) return $s;
    $b += strlen($end);
    return substr($s,0,$a).ltrim(substr($s,$b),"\r\n");
}

$root=''; $msg=''; $err=''; $details=[]; $warnings=[];
try { $root=detect_root(); } catch(Throwable $e) { $err=$e->getMessage(); }

if ($root) {
    $functionsFile=$root.'/includes/functions.php';
    $libFile=$root.'/includes/google_reviews.php';
    $configFile=$root.'/includes/google_reviews_config.php';
    $reviewRedirect=$root.'/opinia.php';
    $reviewsPage=$root.'/opinie.php';
    $qrPage=$root.'/opinia-qr.php';
    $cssFile=$root.'/assets/css/style.css';
    $htaccessFile=$root.'/.htaccess';
    $widgetFile=$root.'/data/trustindex-widget.html';

    $fnText=@file_get_contents($functionsFile) ?: '';
    $hasFooterFn=(bool)preg_match('/function\s+render_public_footer\s*\(/',$fnText);
    if (!$hasFooterFn) $warnings[]='Nie znalazłem render_public_footer() – nie będę mógł automatycznie dodać bloku opinii na dół każdej strony.';
}

$configPhp = <<<'CFG'
<?php
declare(strict_types=1);

const POLANA_GOOGLE_REVIEW_URL = 'https://g.page/r/CQ197mjWBzblEAE/review';

/*
 * Trustindex:
 * po utworzeniu widgetu w Trustindex wklej wygenerowany kod do:
 * /data/trustindex-widget.html
 * Bez widgetu strona nadal działa – pokazuje natywny blok Google + CTA.
 */
CFG;

$libPhp = <<<'LIB'
<?php
declare(strict_types=1);

require_once __DIR__ . '/google_reviews_config.php';

function polana_google_widget_html(): string {
    $file = dirname(__DIR__) . '/data/trustindex-widget.html';
    if (!is_file($file)) return '';
    $html = trim((string)@file_get_contents($file));
    if ($html === '' || str_starts_with($html,'<!--')) return '';
    return $html;
}

function polana_google_reviews_render(bool $compact=false): void {
    $widget = polana_google_widget_html();
    ?>
    <section class="google-reviews-strip <?= $compact ? 'is-compact' : '' ?>" aria-labelledby="google-reviews-title">
      <div class="google-reviews-strip__inner">
        <div class="google-reviews-strip__copy">
          <span class="google-reviews-strip__eyebrow">Opinie gości</span>
          <h2 id="google-reviews-title">Byłeś na Polanie? Daj znać, jak smakowało.</h2>
          <p>Twoja opinia pomaga innym trafić do Mojej Polany Smaków i pomaga nam robić jeszcze lepszą robotę.</p>
          <div class="google-reviews-strip__actions">
            <a class="google-review-btn google-review-btn--primary" href="/opinia" rel="nofollow">Wystaw opinię w Google</a>
            <a class="google-review-btn google-review-btn--secondary" href="/opinie">Opinie o Polanie</a>
          </div>
        </div>
        <div class="google-reviews-strip__mark" aria-label="Google">
          <div class="google-gmark">G</div>
          <div>
            <strong>Opinie Google</strong>
            <span>bezpośredni link do profilu</span>
          </div>
        </div>
      </div>

      <?php if ($widget !== ''): ?>
        <div class="google-reviews-strip__widget">
          <?= $widget ?>
        </div>
      <?php endif; ?>
    </section>

    <a class="google-review-float" href="/opinia" rel="nofollow" aria-label="Wystaw opinię w Google">
      <span class="google-review-float__g">G</span>
      <span>Oceń nas</span>
    </a>
    <?php
}
LIB;

$redirectPhp = <<<'REDIRECT'
<?php
declare(strict_types=1);
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Location: https://g.page/r/CQ197mjWBzblEAE/review', true, 302);
exit;
REDIRECT;

$reviewsPhp = <<<'REVIEWS'
<?php
declare(strict_types=1);
require_once __DIR__ . '/includes/functions.php';
require_once __DIR__ . '/includes/google_reviews.php';

$title = 'Opinie – Moja Polana Smaków | Andrzej Polan';
$description = 'Poznaj opinie gości o Mojej Polanie Smaków i wystaw własną opinię w Google.';
$canonical = '/opinie';

render_public_head($title,$description,$canonical);
render_public_header('');
?>
<main class="google-reviews-page">
  <section class="google-reviews-page__hero">
    <div class="google-reviews-page__inner">
      <p class="google-reviews-strip__eyebrow">Moja Polana Smaków</p>
      <h1>Wasze opinie są częścią Polany.</h1>
      <p>Jeśli byłeś u nas, podziel się wrażeniami. Zajmuje to chwilę i trafia bezpośrednio do naszego profilu w Google.</p>
      <a class="google-review-btn google-review-btn--primary" href="/opinia" rel="nofollow">Wystaw opinię w Google</a>
    </div>
  </section>

  <?php
  $widget = polana_google_widget_html();
  if ($widget !== ''):
  ?>
    <section class="google-reviews-page__widget">
      <div class="google-reviews-page__inner">
        <?= $widget ?>
      </div>
    </section>
  <?php else: ?>
    <section class="google-reviews-page__empty">
      <div class="google-reviews-page__inner">
        <h2>Opinie Google</h2>
        <p>Widget opinii będzie tutaj po podpięciu Trustindex. Już teraz możesz wystawić opinię jednym kliknięciem.</p>
        <a class="google-review-btn google-review-btn--primary" href="/opinia" rel="nofollow">Dodaj opinię</a>
      </div>
    </section>
  <?php endif; ?>
</main>
<?php render_public_footer(); ?>
REVIEWS;

$qrPhp = <<<'QR'
<?php
declare(strict_types=1);
header('X-Robots-Tag: noindex, nofollow, noarchive', true);
?><!doctype html>
<html lang="pl">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>QR – opinia Google | Moja Polana Smaków</title>
<style>
body{margin:0;background:#f4f1e9;color:#111;font:16px/1.45 system-ui,Segoe UI,Arial,sans-serif;min-height:100vh;display:grid;place-items:center;padding:24px}
.card{width:min(560px,100%);background:#fff;border-radius:28px;padding:38px;text-align:center;box-shadow:0 20px 70px rgba(0,0,0,.09)}
h1{font-size:34px;margin:0 0 10px}p{color:#666}.qr{display:grid;place-items:center;min-height:280px;margin:22px 0}
.btn{display:inline-block;background:#9acd32;color:#111;text-decoration:none;font-weight:900;padding:14px 22px;border-radius:999px}
.small{font-size:12px;color:#888;margin-top:18px;word-break:break-all}
@media print{body{background:#fff}.card{box-shadow:none}.btn,.small{display:none}}
</style>
</head>
<body>
<div class="card">
  <h1>Jak było na Polanie?</h1>
  <p>Zeskanuj kod i zostaw opinię w Google.</p>
  <div id="qr" class="qr"></div>
  <a class="btn" href="/opinia">Wystaw opinię</a>
  <div class="small">https://g.page/r/CQ197mjWBzblEAE/review</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/qrcodejs/1.0.0/qrcode.min.js" integrity="sha512-CNgIRecGo7nphbeZ04Sc13ka07uRrKWWPBCMe2BUmZsMnFQBCFA9znJrKz1V6q6VqfP4G0YQjF8e8Zp7msmJw==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script>
(function(){
  var el=document.getElementById('qr');
  if(window.QRCode){
    new QRCode(el,{text:'https://g.page/r/CQ197mjWBzblEAE/review',width:260,height:260,correctLevel:QRCode.CorrectLevel.M});
  }else{
    el.innerHTML='<p>Nie udało się załadować generatora QR. Użyj przycisku poniżej.</p>';
  }
})();
</script>
</body>
</html>
QR;

$css = <<<'CSS'

/* POLANA GOOGLE REVIEWS V1 START */
.google-reviews-strip{background:#f4f1e9;color:#111;padding:76px 24px;border-top:1px solid rgba(0,0,0,.07)}
.google-reviews-strip__inner{width:min(1180px,100%);margin:0 auto;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:54px;align-items:center}
.google-reviews-strip__eyebrow{display:block;color:#729c16;font-size:12px;font-weight:900;letter-spacing:.13em;text-transform:uppercase;margin-bottom:12px}
.google-reviews-strip h2{margin:0 0 14px;font-size:clamp(36px,5vw,64px);line-height:.96;letter-spacing:-.045em;max-width:820px}
.google-reviews-strip__copy p{max-width:720px;margin:0;color:#5f655b;font-size:16px}
.google-reviews-strip__actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:24px}
.google-review-btn{display:inline-flex;align-items:center;justify-content:center;min-height:50px;border-radius:999px;padding:0 22px;text-decoration:none;font-weight:900;transition:.18s ease}
.google-review-btn--primary{background:#9acd32;color:#111}.google-review-btn--primary:hover{transform:translateY(-1px);filter:brightness(.97)}
.google-review-btn--secondary{border:1px solid #c9cfc2;color:#111;background:#fff}
.google-reviews-strip__mark{min-width:220px;background:#fff;border:1px solid #dde2d8;border-radius:22px;padding:19px 21px;display:flex;align-items:center;gap:15px;box-shadow:0 12px 35px rgba(0,0,0,.05)}
.google-gmark,.google-review-float__g{font-weight:1000;font-size:31px;line-height:1;color:#4285F4}
.google-reviews-strip__mark strong{display:block;font-size:17px}.google-reviews-strip__mark span{display:block;color:#777;font-size:12px;margin-top:2px}
.google-reviews-strip__widget{width:min(1180px,100%);margin:36px auto 0}
.google-review-float{position:fixed;right:18px;bottom:18px;z-index:900;display:flex;align-items:center;gap:8px;background:#fff;color:#111;text-decoration:none;border:1px solid rgba(0,0,0,.12);border-radius:999px;padding:10px 15px 10px 11px;box-shadow:0 10px 32px rgba(0,0,0,.18);font-weight:900}
.google-review-float__g{font-size:20px}
.google-reviews-page{background:#fff}.google-reviews-page__hero{background:#111;color:#fff;padding:110px 24px}.google-reviews-page__inner{width:min(1100px,100%);margin:0 auto}
.google-reviews-page__hero h1{font-size:clamp(44px,7vw,86px);line-height:.93;letter-spacing:-.05em;max-width:850px;margin:0 0 20px}.google-reviews-page__hero p{max-width:720px;color:rgba(255,255,255,.72);font-size:18px}
.google-reviews-page__widget,.google-reviews-page__empty{padding:72px 24px}.google-reviews-page__empty{background:#f4f1e9}.google-reviews-page__empty h2{font-size:42px;margin:0 0 12px}
@media(max-width:820px){.google-reviews-strip{padding:58px 18px}.google-reviews-strip__inner{grid-template-columns:1fr;gap:28px}.google-reviews-strip__mark{min-width:0;width:100%}.google-review-float{right:12px;bottom:12px}.google-reviews-page__hero{padding:80px 18px}}
/* POLANA GOOGLE REVIEWS V1 END */
CSS;

if ($root && $_SERVER['REQUEST_METHOD']==='POST') {
    try {
        $action=(string)($_POST['action'] ?? '');

        if ($action==='install') {
            $stamp=date('Ymd_His');
            $backup=$root.'/backups/google_reviews_'.$stamp;
            foreach (['includes/functions.php','includes/google_reviews.php','includes/google_reviews_config.php','opinia.php','opinie.php','opinia-qr.php','assets/css/style.css','.htaccess','data/trustindex-widget.html'] as $rel) {
                backupf($root,$backup,$rel);
            }

            writef($configFile,$configPhp);
            writef($libFile,$libPhp);
            writef($reviewRedirect,$redirectPhp);
            writef($reviewsPage,$reviewsPhp);
            writef($qrPage,$qrPhp);

            if (!is_file($widgetFile)) {
                writef($widgetFile,"<!-- Wklej tutaj kod HTML/JS widgetu Trustindex. Zostaw puste, jeśli nie używasz Trustindex. -->\n");
            }

            $fn=readf($functionsFile);
            if (strpos($fn,MARKER_INCLUDE)===false) {
                $fn=insert_after_declare_or_php(
                    $fn,
                    MARKER_INCLUDE."\nrequire_once __DIR__ . '/google_reviews.php';"
                );
            }
            $fn=inject_function_start(
                $fn,
                'render_public_footer',
                MARKER_FOOTER,
                "if (function_exists('polana_google_reviews_render')) polana_google_reviews_render();"
            );

            $tmp=$functionsFile.'.google_reviews_tmp';
            writef($tmp,$fn);
            $lint=lintf($tmp);
            if ($lint!==null && $lint!=='OK') {
                @unlink($tmp);
                throw new RuntimeException("functions.php po patchu ma błąd składni:\n".$lint);
            }
            if (!@rename($tmp,$functionsFile)) {
                @unlink($tmp);
                throw new RuntimeException('Nie udało się podmienić functions.php.');
            }

            if (!is_file($cssFile)) throw new RuntimeException('Brak assets/css/style.css');
            $style=readf($cssFile);
            if (strpos($style,CSS_START)===false) {
                $style .= "\n".$css."\n";
                writef($cssFile,$style);
            }

            $ht=is_file($htaccessFile)?readf($htaccessFile):"RewriteEngine On\n";
            $ht=strip_block($ht,MARKER_HT_START,MARKER_HT_END);
            $routes="\n".MARKER_HT_START."\n".
                "RewriteRule ^opinia/?$ opinia.php [L,QSA]\n".
                "RewriteRule ^opinie/?$ opinie.php [L,QSA]\n".
                "RewriteRule ^opinia-qr/?$ opinia-qr.php [L,QSA]\n".
                MARKER_HT_END."\n";
            if (stripos($ht,'RewriteEngine On')!==false) {
                $ht=preg_replace('/RewriteEngine\s+On/i',"RewriteEngine On".$routes,$ht,1) ?? ($routes.$ht);
            } else $ht="RewriteEngine On\n".$routes.$ht;
            writef($htaccessFile,$ht);

            foreach ([$libFile,$reviewRedirect,$reviewsPage,$qrPage] as $f) {
                $l=lintf($f);
                if ($l!==null && $l!=='OK') throw new RuntimeException(basename($f)." ma błąd składni:\n".$l);
            }

            $details[]='Bezpośrednia opinia: /opinia → Google';
            $details[]='Strona opinii: /opinie';
            $details[]='QR do wydruku: /opinia-qr';
            $details[]='Blok opinii + przycisk „Oceń nas” na dole każdej publicznej strony';
            $details[]='Slot Trustindex: data/trustindex-widget.html';
            $details[]='Backup: '.str_replace($root.'/','',$backup);
            $details[]='functions.php lint: '.($lint ?? 'exec wyłączony — pominięto');
            $msg='Google Opinie V1 zainstalowane. Kod jest przenośny i przejdzie później razem z katalogiem na mojapolanasmakow.pl.';
        }

        if ($action==='save_widget') {
            $widget=trim((string)($_POST['widget_code'] ?? ''));
            writef($widgetFile,$widget === '' ? "<!-- brak widgetu Trustindex -->\n" : $widget."\n");
            $msg=$widget === '' ? 'Widget Trustindex wyczyszczony.' : 'Kod Trustindex zapisany.';
        }

        if ($action==='self_delete') {
            @unlink(__FILE__);
            exit('<!doctype html><meta charset="utf-8"><style>body{font:18px system-ui;background:#111;color:#fff;padding:40px}</style><h1>Instalator Google Opinie usunięty.</h1>');
        }
    } catch(Throwable $e) {
        $err=$e->getMessage();
    }
}

$installed=$root && is_file($root.'/includes/google_reviews.php');
$currentWidget='';
if ($root && is_file($root.'/data/trustindex-widget.html')) $currentWidget=(string)@file_get_contents($root.'/data/trustindex-widget.html');
?><!doctype html>
<html lang="pl">
<head>
<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
<title>Polana — Google Opinie / migracja</title>
<style>
:root{--card:#171d17;--line:#2d382d;--text:#f5f6f2;--muted:#aab4a7;--green:#9acd32;--red:#b94c4c}
*{box-sizing:border-box}body{margin:0;background:#101510;color:var(--text);font:15px/1.55 system-ui,Segoe UI,Arial,sans-serif}
.wrap{max-width:1000px;margin:auto;padding:26px}.card{background:var(--card);border:1px solid var(--line);border-radius:17px;padding:20px;margin:15px 0}
h1{margin:0}.sub{color:var(--muted);margin:5px 0 18px}.msg{padding:13px 15px;border-radius:10px;margin:13px 0;white-space:pre-wrap}.ok{background:#17301d}.err{background:#401b1b}.warn{background:#352d18}
.kv{display:grid;grid-template-columns:220px 1fr;gap:9px 15px}.kv div:nth-child(odd){color:var(--muted)}
button{border:0;border-radius:10px;padding:12px 16px;font-weight:900;cursor:pointer;background:var(--green);color:#111}button.red{background:var(--red);color:#fff}
textarea{width:100%;min-height:180px;border:1px solid #3a463a;border-radius:10px;background:#0d120d;color:#fff;padding:12px;font:12px/1.45 ui-monospace,Consolas,monospace}
.good{color:#c3ef83;font-weight:800}.bad{color:#ffb1b1;font-weight:800}code{background:#0d120d;padding:2px 6px;border-radius:5px}
@media(max-width:700px){.wrap{padding:14px}.kv{grid-template-columns:1fr}}
</style>

<!-- TKLM-TRACKING-AUTO -->
<script defer src="/assets/tklm-tracking.js?v=2"></script>
<!-- /TKLM-TRACKING-AUTO -->
</head>
<body><div class="wrap">
<h1>Polana — Google Opinie / migracja</h1>
<div class="sub">Instalujemy teraz na obecnej stronie. Po przepięciu folderu wszystko pojedzie razem na <b>mojapolanasmakow.pl</b>.</div>
<div class="msg warn"><b>Instalator bez tokena.</b> Po zakończeniu kliknij „USUŃ INSTALATOR”.</div>

<?php if($msg):?><div class="msg ok"><?=h($msg)?></div><?php endif;?>
<?php if($err):?><div class="msg err"><?=h($err)?></div><?php endif;?>
<?php foreach($warnings as $w):?><div class="msg warn"><?=h($w)?></div><?php endforeach;?>

<section class="card">
<h2>Kontrola</h2>
<div class="kv">
<div>Katalog strony</div><div><?=h($root ?: 'NIE WYKRYTO')?></div>
<div>render_public_footer()</div><div class="<?=$root && $hasFooterFn?'good':'bad'?>"><?=$root && $hasFooterFn?'JEST':'BRAK'?></div>
<div>Google review link</div><div><code>https://g.page/r/CQ197mjWBzblEAE/review</code></div>
<div>Google Opinie V1</div><div class="<?=$installed?'good':'bad'?>"><?=$installed?'JUŻ JEST':'NIE'?></div>
</div>
</section>

<section class="card">
<h2>1. Zainstaluj opinie Google</h2>
<p>Dostaniesz <code>/opinia</code> jako prosty link do wystawienia opinii, <code>/opinie</code> jako stronę z opiniami oraz <code>/opinia-qr</code> do wyświetlenia/wydrukowania QR. Na dole strony pojawi się też elegancki blok „Opinie gości” i pływający przycisk „Oceń nas”.</p>
<form method="post">
<input type="hidden" name="action" value="install">
<button onclick="return confirm('Zainstalować Google Opinie V1? Backup zrobi się automatycznie.')">ZAINSTALUJ GOOGLE OPINIE</button>
</form>
</section>

<section class="card">
<h2>2. Trustindex — opcjonalnie</h2>
<p>Jeśli założysz widget Trustindex, wklej tutaj <b>dokładnie kod wygenerowany przez Trustindex</b>. Bez niego natywny blok Google nadal działa.</p>
<form method="post">
<input type="hidden" name="action" value="save_widget">
<textarea name="widget_code" placeholder="<script ...>..."><?=h(trim($currentWidget))?></textarea>
<button>ZAPISZ KOD TRUSTINDEX</button>
</form>
</section>

<?php if($details):?><section class="card"><h2>Wykonane</h2><?php foreach($details as $d):?><div>✓ <?=h($d)?></div><?php endforeach;?></section><?php endif;?>

<section class="card">
<h2>Sprzątanie</h2>
<form method="post" onsubmit="return confirm('Usunąć instalator z hostingu?')">
<input type="hidden" name="action" value="self_delete">
<button class="red">USUŃ INSTALATOR</button>
</form>
</section>
</div></body></html>

Youez - 2016 - github.com/yon3zu
LinuXploit