纯结构性重构,不改变任何功能。 - config.php 由 739 行缩减为 42 行,改为纯引导入口;新增 ROOT_DIR 常量 统一拼接绝对路径(lib/ 内模块的 __DIR__ 会指向 lib/,必须替换) - 新增 lib/ 五个模块 db.php / helpers.php / auth.php / movies.php / stats.php, 由 config.php 按 db → helpers → auth → movies → stats 顺序加载 - add.php、edit.php 各自约 80 行重复的 POST 处理改为调用 resolveCinemaId / resolvePersonIds / linkViewers / uploadImageFile / saveBase64Image / uploadMultiplePhotos / deleteStoredFile - cinemas.php、persons.php 中重复 4 次的颜色校验改用 normalizeHexColor() - toggleNewViewer / removeViewerRow / toggleNewCinema 下沉至 js/main.js, add.php 中的 removeViewer 统一更名为 removeViewerRow - 删除死代码:imageUrl()(全项目无调用);cinemas.php 配色数组中本就会被 array_slice 丢弃的 extra 颜色逻辑,简化为单条扁平 50 元素数组 - README 目录结构补充 lib/ 说明 验证方式:以便携 PHP 8.4 搭建 A/B 回归环境,播种固定数据后遍历 47 个 GET/POST 端点录制「状态码 + 响应体」。重构前后 42 个逐字节相同、2 个仅 上传文件名时间戳不同、3 个差异均为内联脚本下沉(已单独校验函数体逐字符 等价,剥离脚本后 HTML 标记完全一致)。24 个 PHP 文件语法检查全部通过。
70 lines
2.2 KiB
PHP
70 lines
2.2 KiB
PHP
<?php
|
|
// ============================================
|
|
// 文件: lib/auth.php
|
|
// 说明: 登录校验与管理员账号管理
|
|
// ============================================
|
|
|
|
// 登录检查
|
|
function checkLogin() {
|
|
if (!isset($_SESSION['admin_id'])) {
|
|
header('Location: login.php');
|
|
exit;
|
|
}
|
|
}
|
|
|
|
// 获取当前管理员(含关联观影人信息)
|
|
function getCurrentAdmin() {
|
|
if (isset($_SESSION['admin_id'])) {
|
|
$db = getDB();
|
|
$stmt = $db->prepare("
|
|
SELECT a.*, p.id as person_id, p.name as person_name, p.color as person_color, p.avatar as person_avatar
|
|
FROM admins a
|
|
LEFT JOIN persons p ON a.person_id = p.id
|
|
WHERE a.id = ?
|
|
");
|
|
$stmt->execute([$_SESSION['admin_id']]);
|
|
return $stmt->fetch();
|
|
}
|
|
return null;
|
|
}
|
|
|
|
// 获取所有管理员(含关联观影人)
|
|
function getAllAdmins() {
|
|
$db = getDB();
|
|
$stmt = $db->query("
|
|
SELECT a.id, a.username, a.avatar, a.person_id, p.name as person_name
|
|
FROM admins a
|
|
LEFT JOIN persons p ON a.person_id = p.id
|
|
ORDER BY a.id
|
|
");
|
|
return $stmt->fetchAll();
|
|
}
|
|
|
|
// 添加管理员(支持关联观影人)
|
|
function addAdmin($username, $password, $avatar = null, $person_id = null) {
|
|
$db = getDB();
|
|
$stmt = $db->prepare("SELECT COUNT(*) FROM admins WHERE username = ?");
|
|
$stmt->execute([$username]);
|
|
if ($stmt->fetchColumn() > 0) return false;
|
|
$hashed = password_hash($password, PASSWORD_DEFAULT);
|
|
$stmt = $db->prepare("INSERT INTO admins (username, password, avatar, person_id) VALUES (?, ?, ?, ?)");
|
|
return $stmt->execute([$username, $hashed, $avatar, $person_id]);
|
|
}
|
|
|
|
// 删除管理员
|
|
function deleteAdmin($id) {
|
|
$db = getDB();
|
|
$stmt = $db->query("SELECT COUNT(*) FROM admins");
|
|
if ($stmt->fetchColumn() <= 1) return false;
|
|
if ($id == $_SESSION['admin_id']) return false;
|
|
$stmt = $db->prepare("DELETE FROM admins WHERE id = ?");
|
|
return $stmt->execute([$id]);
|
|
}
|
|
|
|
// 更新管理员的观影人关联
|
|
function updateAdminPersonId($admin_id, $person_id) {
|
|
$db = getDB();
|
|
$stmt = $db->prepare("UPDATE admins SET person_id = ? WHERE id = ?");
|
|
return $stmt->execute([$person_id, $admin_id]);
|
|
}
|