feat(版本管理): 添加Markdown预览功能并改进版本删除逻辑
- 在版本上传和编辑表单中添加Markdown实时预览功能 - 使用marked.js库实现Markdown解析 - 改进版本删除逻辑,使用事务处理确保数据一致性 - 为历史版本日志添加Markdown渲染切换功能
This commit is contained in:
@@ -81,39 +81,80 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['add_version'])) {
|
||||
}
|
||||
}
|
||||
|
||||
// 处理删除版本
|
||||
if (isset($_GET['delete_id']) && is_numeric($_GET['delete_id'])) {
|
||||
$versionId = $_GET['delete_id'];
|
||||
// 处理版本删除请求
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['delete_version'])) {
|
||||
// 设置内容类型为纯文本
|
||||
header('Content-Type: text/plain');
|
||||
|
||||
// 获取版本信息
|
||||
$getVersionSql = "SELECT file_path FROM app_versions WHERE id = ? AND app_id = ?";
|
||||
$stmt = $conn->prepare($getVersionSql);
|
||||
$stmt->bind_param("ii", $versionId, $appId);
|
||||
$stmt->execute();
|
||||
$result = $stmt->get_result();
|
||||
$versionId = $_POST['version_id'];
|
||||
$appId = $_POST['app_id'];
|
||||
|
||||
if ($result->num_rows === 1) {
|
||||
$version = $result->fetch_assoc();
|
||||
// 初始化消息变量
|
||||
$message = '';
|
||||
|
||||
// 开始事务
|
||||
$conn->begin_transaction();
|
||||
|
||||
try {
|
||||
// 1. 获取文件路径
|
||||
$filePath = '';
|
||||
$getFilePathSql = "SELECT file_path FROM app_versions WHERE id = ? AND app_id = ?";
|
||||
$getFileStmt = $conn->prepare($getFilePathSql);
|
||||
|
||||
// 删除文件
|
||||
if (file_exists($version['file_path'])) {
|
||||
unlink($version['file_path']);
|
||||
if (!$getFileStmt) {
|
||||
throw new Exception("获取文件路径查询准备失败: " . $conn->error);
|
||||
}
|
||||
|
||||
// 删除数据库记录
|
||||
$getFileStmt->bind_param("ii", $versionId, $appId);
|
||||
$getFileStmt->execute();
|
||||
$fileResult = $getFileStmt->get_result();
|
||||
|
||||
if ($fileResult->num_rows > 0) {
|
||||
$fileRow = $fileResult->fetch_assoc();
|
||||
$filePath = $fileRow['file_path'];
|
||||
}
|
||||
|
||||
// 2. 从数据库删除版本记录
|
||||
$deleteVersionSql = "DELETE FROM app_versions WHERE id = ? AND app_id = ?";
|
||||
$stmt = $conn->prepare($deleteVersionSql);
|
||||
$stmt->bind_param("ii", $versionId, $appId);
|
||||
$deleteVersionStmt = $conn->prepare($deleteVersionSql);
|
||||
|
||||
if ($stmt->execute() === TRUE) {
|
||||
header('Location: manage_versions.php?app_id=' . $appId . '&success=版本删除成功');
|
||||
exit;
|
||||
} else {
|
||||
$error = '版本删除失败: ' . $conn->error;
|
||||
if (!$deleteVersionStmt) {
|
||||
throw new Exception("版本删除查询准备失败: " . $conn->error);
|
||||
}
|
||||
} else {
|
||||
$error = '版本不存在';
|
||||
|
||||
$deleteVersionStmt->bind_param("ii", $versionId, $appId);
|
||||
|
||||
if (!$deleteVersionStmt->execute()) {
|
||||
throw new Exception("版本删除执行失败: " . $conn->error);
|
||||
}
|
||||
|
||||
// 检查是否有记录被删除
|
||||
if ($deleteVersionStmt->affected_rows === 0) {
|
||||
throw new Exception("未找到要删除的版本记录");
|
||||
}
|
||||
|
||||
// 3. 如果数据库删除成功,尝试删除文件(即使文件删除失败也不回滚数据库操作)
|
||||
if (!empty($filePath) && file_exists($filePath)) {
|
||||
if (!unlink($filePath)) {
|
||||
// 文件删除失败不影响数据库操作,继续处理
|
||||
}
|
||||
}
|
||||
|
||||
// 提交事务
|
||||
$conn->commit();
|
||||
$message = '版本删除成功';
|
||||
|
||||
} catch (Exception $e) {
|
||||
// 回滚事务
|
||||
$conn->rollback();
|
||||
$message = '版本删除失败: ' . $e->getMessage();
|
||||
}
|
||||
|
||||
// 只输出消息,不包含任何HTML
|
||||
echo $message;
|
||||
|
||||
// 确保脚本终止,不执行后续代码
|
||||
exit;
|
||||
}
|
||||
|
||||
// 处理编辑版本
|
||||
|
||||
Reference in New Issue
Block a user