| Current Path : /home/seto/888mirror.pm/admin/ |
| Current File : /home/seto/888mirror.pm/admin/widget-settings.php |
<?php
require_once __DIR__ . '/../includes/auth.php';
require_once __DIR__ . '/../includes/helpers.php';
auth_check();
$db = db();
// Загрузить текущие настройки
$ws = [];
foreach ($db->query("SELECT key, value FROM widget_settings")->fetchAll() as $r) {
$ws[$r['key']] = $r['value'];
}
$saved = false;
$errors = [];
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$layout = $_POST['default_layout'] ?? 'table';
$limit = max(0, (int)($_POST['brand_limit'] ?? 0));
if (!in_array($layout, ['table','cards','ranked','liquid','random'])) {
$errors[] = 'Неверный layout';
}
if (empty($errors)) {
$db->prepare("INSERT OR REPLACE INTO widget_settings (key, value) VALUES ('default_layout', ?)")->execute([$layout]);
$db->prepare("INSERT OR REPLACE INTO widget_settings (key, value) VALUES ('brand_limit', ?)")->execute([$limit]);
$ws['default_layout'] = $layout;
$ws['brand_limit'] = $limit;
$saved = true;
}
}
$cur_layout = $ws['default_layout'] ?? 'table';
$cur_limit = (int)($ws['brand_limit'] ?? 0);
?>
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Widget Settings</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.css">
</head>
<body>
<?= admin_nav('widget') ?>
<div class="container" style="max-width:860px">
<div class="d-flex align-items-center justify-content-between mb-4">
<h4 class="mb-0">🧩 Настройки виджета</h4>
<a href="/admin/widget-preview.php" class="btn btn-outline-secondary btn-sm" target="_blank">
<i class="bi bi-fullscreen"></i> Preview
</a>
</div>
<?php if ($saved): ?>
<div class="alert alert-success">Настройки сохранены.</div>
<?php endif ?>
<?php foreach ($errors as $e): ?>
<div class="alert alert-danger"><?= h($e) ?></div>
<?php endforeach ?>
<div class="row g-4">
<!-- Форма настроек -->
<div class="col-md-6">
<div class="card">
<div class="card-header fw-semibold">Конфигурация</div>
<div class="card-body">
<form method="post">
<div class="mb-3">
<label class="form-label fw-semibold">Layout по умолчанию</label>
<select name="default_layout" class="form-select">
<option value="random" <?= $cur_layout==='random' ? 'selected':'' ?>>🎲 Random (A/B тест)</option>
<option value="table" <?= $cur_layout==='table' ? 'selected':'' ?>>⊞ Table</option>
<option value="cards" <?= $cur_layout==='cards' ? 'selected':'' ?>>▦ Cards</option>
<option value="ranked" <?= $cur_layout==='ranked' ? 'selected':'' ?>>☰ Ranked</option>
<option value="liquid" <?= $cur_layout==='liquid' ? 'selected':'' ?>>◈ Liquid Glass</option>
</select>
<div class="form-text">Используется когда в embed-коде не указан <code>data-layout</code></div>
</div>
<div class="mb-4">
<label class="form-label fw-semibold">Лимит брендов</label>
<input type="number" name="brand_limit" class="form-control" min="0" max="50"
value="<?= $cur_limit ?>">
<div class="form-text"><code>0</code> — без ограничений. Сначала заполняются GEO-бренды, остаток — Global.</div>
</div>
<button type="submit" class="btn btn-primary">Сохранить</button>
</form>
</div>
</div>
</div>
<!-- Embed-коды -->
<div class="col-md-6">
<div class="card">
<div class="card-header fw-semibold">Embed-код</div>
<div class="card-body">
<p class="text-muted small mb-2">Минимальный (использует настройки админки):</p>
<div class="bg-dark text-light rounded p-2 mb-3" style="font-size:12px;font-family:monospace;white-space:pre-wrap"><div id="casino-widget"></div>
<script src="https://888mirror.pm/widget.js?v=5"
data-target="#casino-widget">
</script></div>
<p class="text-muted small mb-2">С явным layout (переопределяет настройку):</p>
<div class="bg-dark text-light rounded p-2 mb-3" style="font-size:12px;font-family:monospace;white-space:pre-wrap"><div id="casino-widget"></div>
<script src="https://888mirror.pm/widget.js?v=5"
data-layout="<?= h($cur_layout) ?>"
data-target="#casino-widget">
</script></div>
<p class="text-muted small mb-2">Все параметры:</p>
<div class="bg-dark text-light rounded p-2" style="font-size:12px;font-family:monospace;white-space:pre-wrap"><div id="casino-widget"></div>
<script src="https://888mirror.pm/widget.js?v=5"
data-layout="liquid"
data-country="de"
data-lang="de"
data-target="#casino-widget">
</script></div>
</div>
</div>
<div class="card mt-3">
<div class="card-header fw-semibold">Текущие настройки</div>
<div class="card-body p-0">
<table class="table table-sm mb-0">
<tbody>
<tr><td class="text-muted ps-3">Layout</td><td><strong><?= $cur_layout === 'random' ? '🎲 Random' : h($cur_layout) ?></strong></td></tr>
<tr><td class="text-muted ps-3">Лимит брендов</td><td><strong><?= $cur_limit ?: '∞ без ограничений' ?></strong></td></tr>
</tbody>
</table>
</div>
</div>
</div><!-- col -->
</div><!-- row -->
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>