217 lines
11 KiB
PHP
217 lines
11 KiB
PHP
<?php
|
||
require_once __DIR__ . '/layout.php';
|
||
|
||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||
$settings = [
|
||
'email_verification_enabled' => $_POST['email_verification_enabled'] ?? '0',
|
||
'usdt_trc20_address' => $_POST['usdt_trc20_address'] ?? '',
|
||
'usdt_erc20_address' => $_POST['usdt_erc20_address'] ?? '',
|
||
'usdt_bep20_address' => $_POST['usdt_bep20_address'] ?? '',
|
||
'service_link' => $_POST['service_link'] ?? '',
|
||
'site_name' => $_POST['site_name'] ?? 'Byro',
|
||
];
|
||
|
||
foreach ($settings as $key => $val) {
|
||
$stmt = db()->prepare("INSERT INTO system_settings (setting_key, setting_value) VALUES (?, ?) ON DUPLICATE KEY UPDATE setting_value = ?");
|
||
$stmt->execute([$key, $val, $val]);
|
||
}
|
||
|
||
// Handle logo upload if provided
|
||
if (isset($_FILES['logo_file']) && $_FILES['logo_file']['error'] === 0) {
|
||
$ext = pathinfo($_FILES['logo_file']['name'], PATHINFO_EXTENSION);
|
||
$filename = 'logo_' . time() . '.' . $ext;
|
||
$target = __DIR__ . '/../assets/images/' . $filename;
|
||
if (!is_dir(__DIR__ . '/../assets/images/')) {
|
||
mkdir(__DIR__ . '/../assets/images/', 0777, true);
|
||
}
|
||
if (move_uploaded_file($_FILES['logo_file']['tmp_name'], $target)) {
|
||
$logo_path = '/assets/images/' . $filename;
|
||
$stmt = db()->prepare("INSERT INTO system_settings (setting_key, setting_value) VALUES ('site_logo', ?) ON DUPLICATE KEY UPDATE setting_value = ?");
|
||
$stmt->execute([$logo_path, $logo_path]);
|
||
}
|
||
}
|
||
|
||
// Handle favicon upload if provided
|
||
if (isset($_FILES['favicon_file']) && $_FILES['favicon_file']['error'] === 0) {
|
||
$ext = pathinfo($_FILES['favicon_file']['name'], PATHINFO_EXTENSION);
|
||
$filename = 'favicon_' . time() . '.' . $ext;
|
||
$target = __DIR__ . '/../assets/images/' . $filename;
|
||
if (!is_dir(__DIR__ . '/../assets/images/')) {
|
||
mkdir(__DIR__ . '/../assets/images/', 0777, true);
|
||
}
|
||
if (move_uploaded_file($_FILES['favicon_file']['tmp_name'], $target)) {
|
||
$favicon_path = '/assets/images/' . $filename;
|
||
$stmt = db()->prepare("INSERT INTO system_settings (setting_key, setting_value) VALUES ('site_favicon', ?) ON DUPLICATE KEY UPDATE setting_value = ?");
|
||
$stmt->execute([$favicon_path, $favicon_path]);
|
||
}
|
||
}
|
||
|
||
// Handle certificate upload if provided
|
||
if (isset($_FILES['certificate_files']) && !empty($_FILES['certificate_files']['name'][0])) {
|
||
$paths = [];
|
||
foreach ($_FILES['certificate_files']['name'] as $i => $name) {
|
||
if ($_FILES['certificate_files']['error'][$i] === 0) {
|
||
$ext = pathinfo($name, PATHINFO_EXTENSION);
|
||
$filename = 'certificate_' . time() . '_' . $i . '.' . $ext;
|
||
$target = __DIR__ . '/../assets/images/' . $filename;
|
||
if (!is_dir(__DIR__ . '/../assets/images/')) {
|
||
mkdir(__DIR__ . '/../assets/images/', 0777, true);
|
||
}
|
||
if (move_uploaded_file($_FILES['certificate_files']['tmp_name'][$i], $target)) {
|
||
$paths[] = '/assets/images/' . $filename;
|
||
}
|
||
}
|
||
}
|
||
if (!empty($paths)) {
|
||
$certificate_path = json_encode($paths);
|
||
$stmt = db()->prepare("INSERT INTO system_settings (setting_key, setting_value) VALUES ('site_certificate', ?) ON DUPLICATE KEY UPDATE setting_value = ?");
|
||
$stmt->execute([$certificate_path, $certificate_path]);
|
||
}
|
||
}
|
||
|
||
$success = true;
|
||
}
|
||
|
||
$email_verify = getSetting('email_verification_enabled', '0');
|
||
$site_logo = getSetting('site_logo', '');
|
||
$site_favicon = getSetting('site_favicon', '');
|
||
$site_certificate = getSetting('site_certificate', '');
|
||
$trc20_addr = getSetting('usdt_trc20_address', '');
|
||
$erc20_addr = getSetting('usdt_erc20_address', '');
|
||
$bep20_addr = getSetting('usdt_bep20_address', '');
|
||
$service_link = getSetting('service_link', '');
|
||
$site_name = getSetting('site_name', 'Byro');
|
||
|
||
$title = '后台设置';
|
||
ob_start();
|
||
?>
|
||
<div class="d-flex justify-content-between align-items-center mb-4">
|
||
<div class="d-flex align-items-center gap-3">
|
||
<a href="index.php" class="btn btn-outline-secondary btn-sm"><i class="bi bi-arrow-left"></i> 返回</a>
|
||
<h4 class="mb-0">系统设置</h4>
|
||
</div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-md-8">
|
||
<div class="table-container">
|
||
<h5 class="fw-bold mb-4">系统全局配置</h5>
|
||
|
||
<?php if (isset($success)): ?>
|
||
<div class="alert alert-success alert-dismissible fade show" role="alert">
|
||
设置已成功保存!
|
||
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
||
</div>
|
||
<?php endif; ?>
|
||
|
||
<form method="POST" enctype="multipart/form-data">
|
||
<div class="mb-4">
|
||
<label class="form-label fw-bold">网站名称</label>
|
||
<input type="text" name="site_name" class="form-control" value="<?= htmlspecialchars($site_name) ?>">
|
||
</div>
|
||
|
||
<div class="mb-4">
|
||
<label class="form-label fw-bold">网站 LOGO</label>
|
||
<div class="d-flex align-items-center gap-3 mb-2">
|
||
<?php if ($site_logo): ?>
|
||
<div class="bg-dark p-2 rounded">
|
||
<img src="<?= $site_logo ?>?v=<?= time() ?>" height="40" class="d-block">
|
||
</div>
|
||
<?php endif; ?>
|
||
<input type="file" name="logo_file" class="form-control">
|
||
</div>
|
||
<div class="form-text">上传后将同步更新网站所有页面的 LOGO。建议使用透明 PNG。</div>
|
||
</div>
|
||
|
||
<div class="mb-4">
|
||
<label class="form-label fw-bold">网站图标 (Favicon)</label>
|
||
<div class="d-flex align-items-center gap-3 mb-2">
|
||
<?php if ($site_favicon): ?>
|
||
<div class="bg-white p-2 rounded border">
|
||
<img src="<?= $site_favicon ?>" height="32" width="32" class="d-block">
|
||
</div>
|
||
<?php endif; ?>
|
||
<input type="file" name="favicon_file" class="form-control">
|
||
</div>
|
||
<div class="form-text">上传后将同步更新浏览器标签页图标。建议使用 32x32 或 64x64 的正方形图片。</div>
|
||
</div>
|
||
|
||
<div class="mb-4">
|
||
<label class="form-label fw-bold">平台注册证书</label>
|
||
<div class="mb-2">
|
||
<?php
|
||
if ($site_certificate):
|
||
$certs = json_decode($site_certificate, true);
|
||
if (!is_array($certs)) $certs = [$site_certificate];
|
||
?>
|
||
<div class="d-flex flex-wrap gap-2 mb-2">
|
||
<?php foreach ($certs as $cert): ?>
|
||
<div class="bg-light p-1 rounded border position-relative">
|
||
<img src="<?= $cert ?>" height="60" class="d-block shadow-sm">
|
||
</div>
|
||
<?php endforeach; ?>
|
||
</div>
|
||
<?php endif; ?>
|
||
<input type="file" name="certificate_files[]" class="form-control" multiple>
|
||
</div>
|
||
<div class="form-text">支持多选。上传后,用户可在个人中心点击“注册证书”查看所有证书。</div>
|
||
</div>
|
||
|
||
<hr class="my-4">
|
||
<h6 class="fw-bold mb-3 text-primary"><i class="bi bi-wallet2 me-2"></i>充值地址配置</h6>
|
||
|
||
<div class="mb-3">
|
||
<label class="form-label fw-bold">USDT (TRC20) 地址</label>
|
||
<input type="text" name="usdt_trc20_address" class="form-control" value="<?= htmlspecialchars($trc20_addr) ?>" placeholder="请输入 TRC20 钱包地址">
|
||
</div>
|
||
|
||
<div class="mb-3">
|
||
<label class="form-label fw-bold">USDT (ERC20) 地址</label>
|
||
<input type="text" name="usdt_erc20_address" class="form-control" value="<?= htmlspecialchars($erc20_addr) ?>" placeholder="请输入 ERC20 钱包地址">
|
||
</div>
|
||
|
||
<div class="mb-3">
|
||
<label class="form-label fw-bold">USDT (BEP20) 地址</label>
|
||
<input type="text" name="usdt_bep20_address" class="form-control" value="<?= htmlspecialchars($bep20_addr) ?>" placeholder="请输入 BEP20 钱包地址">
|
||
</div>
|
||
|
||
<hr class="my-4">
|
||
<h6 class="fw-bold mb-3 text-primary"><i class="bi bi-shield-check me-2"></i>安全与功能</h6>
|
||
|
||
<div class="mb-4">
|
||
<div class="form-check form-switch">
|
||
<input class="form-check-input" type="checkbox" name="email_verification_enabled" value="1" id="emailSwitch" <?= $email_verify == '1' ? 'checked' : '' ?>>
|
||
<label class="form-check-label fw-bold" for="emailSwitch">注册时开启邮箱/手机验证码</label>
|
||
</div>
|
||
<div class="form-text">开启后,用户注册必须输入验证码(演示环境默认验证码:123456)。</div>
|
||
</div>
|
||
|
||
<div class="mb-4">
|
||
<label class="form-label fw-bold">在线客服链接</label>
|
||
<input type="text" name="service_link" class="form-control" value="<?= htmlspecialchars($service_link) ?>" placeholder="https://...">
|
||
</div>
|
||
|
||
<hr class="my-4">
|
||
|
||
<button type="submit" class="btn btn-primary px-5 btn-lg">
|
||
<i class="bi bi-check-lg me-1"></i> 提交保存
|
||
</button>
|
||
</form>
|
||
</div>
|
||
</div>
|
||
<div class="col-md-4">
|
||
<div class="card p-4 border-0 shadow-sm card-dismissible card-auto-dismiss" data-card-id="settings_instructions">
|
||
<h6 class="fw-bold mb-3">使用说明</h6>
|
||
<ul class="small text-muted ps-3 mb-0">
|
||
<li class="mb-2"><strong>网站名称:</strong>影响浏览器标签页标题。</li>
|
||
<li class="mb-2"><strong>LOGO:</strong>上传后会自动替换后台左上角及前端所有引用处。</li>
|
||
<li class="mb-2"><strong>充值地址:</strong>对应前端充值页面的三个网络,请务必填写正确。</li>
|
||
<li class="mb-2"><strong>验证码:</strong>若未配置 SMTP 邮件服务,建议保持关闭或使用固定验证码。</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<?php
|
||
$content = ob_get_clean();
|
||
renderAdminPage($content, $title);
|
||
?>
|