refactor: 拆分 config.php 为 lib/ 模块,消除页面层重复代码

纯结构性重构,不改变任何功能。

- 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 文件语法检查全部通过。
This commit is contained in:
2026-09-21 12:56:30 +08:00
parent 40e1bc5e56
commit dd957d45bd
13 changed files with 1002 additions and 1022 deletions
+12 -35
View File
@@ -17,11 +17,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['
$place = trim($_POST['place'] ?? '');
$name = trim($_POST['name'] ?? '');
$address = trim($_POST['address'] ?? '');
$color = trim($_POST['color'] ?? '#888888');
// 校验颜色格式
if (!preg_match('/^#[a-fA-F0-9]{6}$/', $color)) {
$color = '#888888';
}
$color = normalizeHexColor($_POST['color'] ?? '#888888');
if (empty($name)) {
$error = '影院名称不能为空';
@@ -38,10 +34,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['
$place = trim($_POST['place'] ?? '');
$name = trim($_POST['name'] ?? '');
$address = trim($_POST['address'] ?? '');
$color = trim($_POST['color'] ?? '#888888');
if (!preg_match('/^#[a-fA-F0-9]{6}$/', $color)) {
$color = '#888888';
}
$color = normalizeHexColor($_POST['color'] ?? '#888888');
if (empty($name)) {
$error = '影院名称不能为空';
@@ -91,35 +84,19 @@ if (isset($_GET['action']) && $_GET['action'] === 'edit' && isset($_GET['id']))
}
}
// ---------- 预设50色 ----------
// ---------- 预设 50 色 ----------
$preset_colors = [
// 红色系 (5)
'#e74c3c', '#c0392b', '#e67e22', '#d35400', '#f39c12',
// 橙色系 (3)
'#f1c40f', '#f7dc6f', '#f5b041',
// 黄色系 (3)
'#f4d03f', '#f9e79f', '#f8c471',
// 绿色系 (5)
'#2ecc71', '#27ae60', '#1abc9c', '#16a085', '#58d68d',
// 青色系 (4)
'#48c9b0', '#45b39d', '#82e0aa', '#a3e4d7',
// 蓝色系 (7)
'#3498db', '#2980b9', '#2e86c1', '#5dade2', '#85c1e9', '#5499c7', '#aed6f1',
// 紫色系 (5)
'#9b59b6', '#8e44ad', '#af7ac5', '#bb8fce', '#d2b4de',
// 粉色系 (4)
'#e84393', '#fd79a8', '#e91e63', '#f06292',
// 灰色系 (6)
'#95a5a6', '#7f8c8d', '#bdc3c7', '#d5dbdb', '#aab7b8', '#99a3a4',
// 棕色/米色系 (4)
'#a67c52', '#8d6e63', '#d4a574', '#c9a87c',
// 其他 (4)
'#00b894', '#0984e3', '#6c5ce7', '#fd79a8'
'#f1c40f', '#f7dc6f', '#f5b041', '#f4d03f', '#f9e79f',
'#f8c471', '#2ecc71', '#27ae60', '#1abc9c', '#16a085',
'#58d68d', '#48c9b0', '#45b39d', '#82e0aa', '#a3e4d7',
'#3498db', '#2980b9', '#2e86c1', '#5dade2', '#85c1e9',
'#5499c7', '#aed6f1', '#9b59b6', '#8e44ad', '#af7ac5',
'#bb8fce', '#d2b4de', '#e84393', '#fd79a8', '#e91e63',
'#f06292', '#95a5a6', '#7f8c8d', '#bdc3c7', '#d5dbdb',
'#aab7b8', '#99a3a4', '#a67c52', '#8d6e63', '#d4a574',
'#c9a87c', '#00b894', '#0984e3', '#6c5ce7', '#fd79a8',
];
// 只取前50个,如果有重复或不足可调整,但这里正好约50个(实际46个,再补几个)
$extra = ['#2d3436', '#636e72', '#b2bec3', '#dfe6e9', '#fab1a0', '#e17055', '#00cec9', '#a29bfe'];
$preset_colors = array_merge($preset_colors, $extra);
$preset_colors = array_slice($preset_colors, 0, 50); // 确保正好50个
?>
<!DOCTYPE html>
<html lang="zh-CN">