38451-vm/admin/backend_settings.php
2026-02-19 07:21:30 +00:00

217 lines
11 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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);
?>