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() ]); } }