Your IP : 216.73.217.78


Current Path : /home/seto/888mirror.pm/admin/
Upload File :
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">&lt;div id="casino-widget"&gt;&lt;/div&gt;
&lt;script src="https://888mirror.pm/widget.js?v=5"
  data-target="#casino-widget"&gt;
&lt;/script&gt;</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">&lt;div id="casino-widget"&gt;&lt;/div&gt;
&lt;script src="https://888mirror.pm/widget.js?v=5"
  data-layout="<?= h($cur_layout) ?>"
  data-target="#casino-widget"&gt;
&lt;/script&gt;</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">&lt;div id="casino-widget"&gt;&lt;/div&gt;
&lt;script src="https://888mirror.pm/widget.js?v=5"
  data-layout="liquid"
  data-country="de"
  data-lang="de"
  data-target="#casino-widget"&gt;
&lt;/script&gt;</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>