You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
265 lines
7.0 KiB
265 lines
7.0 KiB
<?php
|
|
/**
|
|
* 用户设置API
|
|
*/
|
|
|
|
// 设置错误报告
|
|
error_reporting(E_ALL);
|
|
ini_set('display_errors', 0);
|
|
|
|
// 设置JSON响应头
|
|
header('Content-Type: application/json; charset=utf-8');
|
|
|
|
// 包含必要的类
|
|
require_once '../../utils/Config.php';
|
|
require_once '../../utils/Logger.php';
|
|
require_once '../../utils/Helper.php';
|
|
require_once '../../utils/Database.php';
|
|
|
|
// 处理请求
|
|
try {
|
|
// 获取请求方法
|
|
$method = $_SERVER['REQUEST_METHOD'] ?? 'GET';
|
|
|
|
// 连接数据库
|
|
$db = Database::getInstance();
|
|
|
|
// 根据请求方法处理
|
|
switch ($method) {
|
|
case 'GET':
|
|
// 获取用户设置
|
|
getSettings($db);
|
|
break;
|
|
case 'POST':
|
|
// 保存用户设置
|
|
saveSettings($db);
|
|
break;
|
|
case 'PUT':
|
|
// 处理特殊设置更新
|
|
$action = isset($_GET['action']) ? $_GET['action'] : '';
|
|
if ($action === 'password') {
|
|
// 修改密码
|
|
changePassword($db);
|
|
} elseif ($action === 'autoreply') {
|
|
// 设置自动回复
|
|
setAutoReply($db);
|
|
} else {
|
|
echo json_encode([
|
|
'success' => false,
|
|
'message' => '不支持的操作类型'
|
|
]);
|
|
}
|
|
break;
|
|
default:
|
|
echo json_encode([
|
|
'success' => false,
|
|
'message' => '不支持的请求方法'
|
|
]);
|
|
break;
|
|
}
|
|
} catch (Exception $e) {
|
|
echo json_encode([
|
|
'success' => false,
|
|
'message' => '服务器内部错误: ' . $e->getMessage()
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* 获取用户设置
|
|
* @param Database $db 数据库实例
|
|
*/
|
|
function getSettings($db) {
|
|
// 获取请求参数
|
|
$username = isset($_GET['username']) ? $_GET['username'] : '';
|
|
|
|
// 验证必要参数
|
|
if (empty($username)) {
|
|
echo json_encode([
|
|
'success' => false,
|
|
'message' => '缺少用户名参数'
|
|
]);
|
|
return;
|
|
}
|
|
|
|
// 查询用户设置
|
|
$settings = $db->fetchAll("SELECT setting_key, setting_value FROM user_settings WHERE user_id = ?", [$username]);
|
|
|
|
// 转换为关联数组
|
|
$settingsArray = [];
|
|
foreach ($settings as $setting) {
|
|
$settingsArray[$setting['setting_key']] = $setting['setting_value'];
|
|
}
|
|
|
|
echo json_encode([
|
|
'success' => true,
|
|
'data' => [
|
|
'settings' => $settingsArray
|
|
]
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* 保存用户设置
|
|
* @param Database $db 数据库实例
|
|
*/
|
|
function saveSettings($db) {
|
|
// 获取请求数据
|
|
$data = json_decode(file_get_contents('php://input'), true);
|
|
|
|
// 验证请求数据
|
|
if (!$data || empty($data['username']) || empty($data['settings'])) {
|
|
echo json_encode([
|
|
'success' => false,
|
|
'message' => '缺少必要参数'
|
|
]);
|
|
return;
|
|
}
|
|
|
|
$username = $data['username'];
|
|
$settings = $data['settings'];
|
|
|
|
// 开始事务
|
|
$pdo = $db->beginTransaction();
|
|
|
|
try {
|
|
// 删除现有设置
|
|
$db->execute("DELETE FROM user_settings WHERE user_id = ?", [$username]);
|
|
|
|
// 插入新设置
|
|
foreach ($settings as $key => $value) {
|
|
$db->insert(
|
|
"INSERT INTO user_settings (user_id, setting_key, setting_value) VALUES (?, ?, ?)",
|
|
[$username, $key, $value]
|
|
);
|
|
}
|
|
|
|
// 提交事务
|
|
$db->commit($pdo);
|
|
|
|
echo json_encode([
|
|
'success' => true,
|
|
'message' => '设置保存成功'
|
|
]);
|
|
} catch (Exception $e) {
|
|
// 回滚事务
|
|
$db->rollback($pdo);
|
|
|
|
echo json_encode([
|
|
'success' => false,
|
|
'message' => '保存设置失败: ' . $e->getMessage()
|
|
]);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 修改密码
|
|
* @param Database $db 数据库实例
|
|
*/
|
|
function changePassword($db) {
|
|
// 获取请求数据
|
|
$data = json_decode(file_get_contents('php://input'), true);
|
|
|
|
// 验证请求数据
|
|
if (!$data || empty($data['username']) || empty($data['oldPassword']) || empty($data['newPassword'])) {
|
|
echo json_encode([
|
|
'success' => false,
|
|
'message' => '缺少必要参数'
|
|
]);
|
|
return;
|
|
}
|
|
|
|
$username = $data['username'];
|
|
$oldPassword = $data['oldPassword'];
|
|
$newPassword = $data['newPassword'];
|
|
|
|
// 获取用户当前密码
|
|
$user = $db->fetchOne("SELECT password FROM user WHERE username = ?", [$username]);
|
|
if (!$user) {
|
|
echo json_encode([
|
|
'success' => false,
|
|
'message' => '用户不存在'
|
|
]);
|
|
return;
|
|
}
|
|
|
|
// 验证旧密码
|
|
if (!password_verify($oldPassword, $user['password'])) {
|
|
echo json_encode([
|
|
'success' => false,
|
|
'message' => '旧密码不正确'
|
|
]);
|
|
return;
|
|
}
|
|
|
|
// 更新密码
|
|
$encryptedPassword = Helper::encryptPassword($newPassword);
|
|
$db->execute("UPDATE user SET password = ? WHERE username = ?", [$encryptedPassword, $username]);
|
|
|
|
echo json_encode([
|
|
'success' => true,
|
|
'message' => '密码修改成功'
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* 设置自动回复
|
|
* @param Database $db 数据库实例
|
|
*/
|
|
function setAutoReply($db) {
|
|
// 获取请求数据
|
|
$data = json_decode(file_get_contents('php://input'), true);
|
|
|
|
// 验证请求数据
|
|
if (!$data || empty($data['username'])) {
|
|
echo json_encode([
|
|
'success' => false,
|
|
'message' => '缺少必要参数'
|
|
]);
|
|
return;
|
|
}
|
|
|
|
$username = $data['username'];
|
|
$isEnabled = isset($data['isEnabled']) ? (bool)$data['isEnabled'] : false;
|
|
$subject = isset($data['subject']) ? $data['subject'] : '';
|
|
$content = isset($data['content']) ? $data['content'] : '';
|
|
|
|
// 保存自动回复设置
|
|
$autoReplySettings = [
|
|
'auto_reply_enabled' => $isEnabled ? '1' : '0',
|
|
'auto_reply_subject' => $subject,
|
|
'auto_reply_content' => $content
|
|
];
|
|
|
|
// 开始事务
|
|
$pdo = $db->beginTransaction();
|
|
|
|
try {
|
|
// 删除现有自动回复设置
|
|
$db->execute("DELETE FROM user_settings WHERE user_id = ? AND setting_key LIKE 'auto_reply_%'", [$username]);
|
|
|
|
// 插入新设置
|
|
foreach ($autoReplySettings as $key => $value) {
|
|
$db->insert(
|
|
"INSERT INTO user_settings (user_id, setting_key, setting_value) VALUES (?, ?, ?)",
|
|
[$username, $key, $value]
|
|
);
|
|
}
|
|
|
|
// 提交事务
|
|
$db->commit($pdo);
|
|
|
|
echo json_encode([
|
|
'success' => true,
|
|
'message' => '自动回复设置成功'
|
|
]);
|
|
} catch (Exception $e) {
|
|
// 回滚事务
|
|
$db->rollback($pdo);
|
|
|
|
echo json_encode([
|
|
'success' => false,
|
|
'message' => '设置自动回复失败: ' . $e->getMessage()
|
|
]);
|
|
}
|
|
}
|