| 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_admin_role();
require_once dirname(__DIR__).'/includes/polana_v11_lang.php';
function p11_schema(): void {
db()->exec("CREATE TABLE IF NOT EXISTS polana_v11_page_locales (
path VARCHAR(180) NOT NULL, lang CHAR(2) NOT NULL,
ready TINYINT(1) NOT NULL DEFAULT 0,
reviewed_at DATETIME NULL,
PRIMARY KEY(path,lang)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci");
}
p11_schema();
$pages=['/'=>'Strona główna','/menu'=>'Menu','/andrzej-polan'=>'Andrzej Polan','/kontakt'=>'Kontakt',
'/rezerwacja'=>'Rezerwacje','/galeria'=>'Galeria','/alergeny'=>'Alergeny',
'/polityka-prywatnosci'=>'Prywatność','/blog'=>'Blog','/wspolpraca'=>'Współpraca'];
$error='';
if($_SERVER['REQUEST_METHOD']==='POST'){
verify_csrf();
try{
$path=(string)($_POST['path']??'');$lang=(string)($_POST['lang']??'');
if(!array_key_exists($path,$pages)||!in_array($lang,['en','de','es'],true))throw new RuntimeException('Nieprawidłowa strona lub język');
$ready=(($_POST['action']??'')==='approve')?1:0;
$q=db()->prepare('INSERT INTO polana_v11_page_locales(path,lang,ready,reviewed_at) VALUES (?,?,?,IF(?=1,NOW(),NULL)) ON DUPLICATE KEY UPDATE ready=VALUES(ready),reviewed_at=VALUES(reviewed_at)');
$q->execute([$path,$lang,$ready,$ready]);
admin_log('v11_language_review',$path.' '.$lang.' => '.$ready);
header('Location: polana-v11-podstrony.php',true,303);exit;
}catch(Throwable $e){$error=$e->getMessage();}
}
render_admin_header('Podstrony i języki — V11');
?>
<style>.p11-outer{max-width:1200px;margin:20px auto;padding:12px}.p11-table{width:100%;border-collapse:collapse}.p11-table td,.p11-table th{border-bottom:1px solid #ddd;padding:11px;vertical-align:top;text-align:left}.p11-badge{display:inline-block;background:#e5f6e9;color:#23522a;padding:3px 8px;border-radius:9px}.p11-form{display:inline}.p11-action{border:1px solid #aaa;border-radius:6px;padding:7px;background:#fafafa;cursor:pointer}.p11-action.approve{background:#2f643b;color:white;border:0}</style>
<main class="p11-outer"><h1>Wersje językowe podstron</h1>
<p>PL jest oryginałem. Kliknij <b>Sprawdź stronę</b>, sprawdź pełną treść na komputerze i telefonie, a dopiero potem <b>Zatwierdź pod SEO</b>. To jest kontrola gotowości językowej — <b>nie zastępuje tłumaczenia podstrony</b>.</p>
<?php if($error): ?><p style="color:#b22"><?= e($error) ?></p><?php endif; ?>
<div style="overflow-x:auto"><table class="p11-table"><thead><tr><th>Podstrona</th><th>EN</th><th>DE</th><th>ES</th></tr></thead><tbody>
<?php foreach($pages as $path=>$label): ?><tr><th><?= e($label) ?><small style="display:block"><?= e($path) ?></small></th>
<?php foreach(['en','de','es'] as $lang): ?>
<td>
<a href="<?= e(p11_path($path,$lang)) ?>" target="_blank" rel="noopener">Sprawdź stronę ↗</a><br>
<?php $ready=p11_page_ready($path,$lang); ?>
<?php if($ready): ?><span class="p11-badge">SEO gotowe</span><?php endif; ?>
<form class="p11-form" method="post"><?= csrf_field() ?><input type="hidden" name="path" value="<?= e($path) ?>"><input type="hidden" name="lang" value="<?= e($lang) ?>">
<button class="p11-action <?= $ready?'':'approve' ?>" name="action" value="<?= $ready?'revoke':'approve' ?>" onclick="return confirm('<?= $ready?'Wycofać zatwierdzenie strony?':'Potwierdzasz, że cała podstrona została przetłumaczona i sprawdzona?' ?>')"><?= $ready?'Cofnij':'Zatwierdź pod SEO' ?></button>
</form>
</td>
<?php endforeach; ?></tr><?php endforeach; ?>
</tbody></table></div>
<p><strong>Artykuły bloga:</strong> ich wersje EN/DE/ES zostaną dodane do sitemap automatycznie, gdy mają zatwierdzone tytuły i treści oraz są już opublikowane. Samo przetłumaczenie szkicu nie publikuje go przed terminem.</p>
<p><a href="/admin/polana-v11-harmonogram.php">Harmonogram 40 wpisów →</a> · <a href="/admin/v9-review.php">Centrum tłumaczeń →</a></p>
</main>
<?php render_admin_footer(); ?>