文件
2026-06-04 22:42:27 +08:00

310 行
8.8 KiB
PHP

<?php
// 引入数据库模块和用户模块
require_once __DIR__ . '/../db.php';
require_once __DIR__ . '/user.php';
// 创建群组
function createGroup($creatorId, $groupName, $memberIds = []) {
$db = Database::getInstance();
// 检查用户邮箱是否已验证
if (!isEmailVerified($creatorId)) {
return false; // 邮箱未验证,不能创建群组
}
// 创建新群组
$newGroup = [
'id' => generateId(),
'group_id' => 'G' . strtoupper(substr(md5(generateId()), 0, 8)), // 生成群号
'name' => $groupName,
'creator_id' => $creatorId,
'created_at' => getCurrentTimestamp(),
'avatar' => '' // 默认群头像
];
// 插入新群组
$sql = "INSERT INTO groups (id, group_id, name, creator_id, created_at, avatar)
VALUES (:id, :group_id, :name, :creator_id, :created_at, :avatar)";
$db->execute($sql, [
'id' => $newGroup['id'],
'group_id' => $newGroup['group_id'],
'name' => $newGroup['name'],
'creator_id' => $newGroup['creator_id'],
'created_at' => $newGroup['created_at'],
'avatar' => $newGroup['avatar']
]);
// 添加创建者为群成员
$db->execute("INSERT INTO group_members (group_id, user_id, role, joined_at)
VALUES (:group_id, :user_id, :role, :joined_at)", [
'group_id' => $newGroup['id'],
'user_id' => $creatorId,
'role' => 'admin',
'joined_at' => getCurrentTimestamp()
]);
// 添加其他成员
foreach ($memberIds as $memberId) {
if ($memberId !== $creatorId) {
$db->execute("INSERT INTO group_members (group_id, user_id, role, joined_at)
VALUES (:group_id, :user_id, :role, :joined_at)", [
'group_id' => $newGroup['id'],
'user_id' => $memberId,
'role' => 'member',
'joined_at' => getCurrentTimestamp()
]);
}
}
return $newGroup;
}
// 获取用户加入的所有群组
function getUserGroups($userId) {
$db = Database::getInstance();
$userGroups = [];
// 筛选用户加入的群组
$result = $db->query("SELECT g.*, gm.role FROM groups g
JOIN group_members gm ON g.id = gm.group_id
WHERE gm.user_id = :userId", ['userId' => $userId]);
foreach ($result as $group) {
// 为每个群组添加成员信息
$members = getGroupMembers($group['id']);
$group['members'] = $members;
// 调试:记录群组成员数量
error_log("群组ID: {$group['id']}, 成员数量: " . count($members));
$userGroups[] = $group;
}
return $userGroups;
}
// 获取群组成员
function getGroupMembers($groupId) {
$db = Database::getInstance();
$members = [];
// 筛选群组成员
$result = $db->query("SELECT * FROM group_members WHERE group_id = :groupId", ['groupId' => $groupId]);
if (empty($result)) {
return [];
}
// 收集所有用户ID
$userIds = [];
foreach ($result as $member) {
$userIds[] = $member['user_id'];
}
// 批量获取用户信息
$userIds = array_unique($userIds);
$placeholders = [];
$params = [];
foreach ($userIds as $index => $id) {
$key = 'id' . $index;
$placeholders[] = ':' . $key;
$params[$key] = $id;
}
$sql = "SELECT * FROM users WHERE id IN (" . implode(',', $placeholders) . ")";
$users = $db->query($sql, $params);
// 构建用户ID到信息的映射
$usersMap = [];
foreach ($users as $user) {
$usersMap[$user['id']] = $user;
}
// 构建成员列表
foreach ($result as $member) {
if (isset($usersMap[$member['user_id']])) {
$user = $usersMap[$member['user_id']];
$memberInfo = [
'id' => $user['id'],
'username' => $user['username'],
'role' => $member['role'],
'joined_at' => $member['joined_at'],
'avatar' => isset($user['avatar']) ? $user['avatar'] : '',
'muted' => false // 默认不禁言
];
$members[] = $memberInfo;
}
}
return $members;
}
// 添加群成员
function addGroupMember($groupId, $userId, $role = 'member') {
$db = Database::getInstance();
// 检查用户是否已经是群成员
$result = $db->query("SELECT * FROM group_members WHERE group_id = :groupId AND user_id = :userId", [
'groupId' => $groupId,
'userId' => $userId
]);
if (!empty($result)) {
return false; // 已经是群成员
}
// 添加新成员
$sql = "INSERT INTO group_members (group_id, user_id, role, joined_at)
VALUES (:group_id, :user_id, :role, :joined_at)";
return $db->execute($sql, [
'group_id' => $groupId,
'user_id' => $userId,
'role' => $role,
'joined_at' => getCurrentTimestamp()
]);
}
// 移除群成员
function removeGroupMember($groupId, $userId) {
$db = Database::getInstance();
$sql = "DELETE FROM group_members WHERE group_id = :groupId AND user_id = :userId";
return $db->execute($sql, [
'groupId' => $groupId,
'userId' => $userId
]);
}
// 更新群组信息
function updateGroup($groupId, $groupData) {
$db = Database::getInstance();
// 构建更新语句
$setClause = [];
$params = ['groupId' => $groupId];
foreach ($groupData as $key => $value) {
$setClause[] = "$key = :$key";
$params[$key] = $value;
}
if (empty($setClause)) {
return false;
}
$setClause = implode(', ', $setClause);
$sql = "UPDATE groups SET $setClause WHERE id = :groupId";
return $db->execute($sql, $params);
}
// 删除群组
function deleteGroup($groupId) {
$db = Database::getInstance();
// 删除群组
$db->execute("DELETE FROM groups WHERE id = :groupId", ['groupId' => $groupId]);
// 移除群组成员
return $db->execute("DELETE FROM group_members WHERE group_id = :groupId", ['groupId' => $groupId]);
}
// 获取群组信息
function getGroupById($groupId) {
$db = Database::getInstance();
$result = $db->query("SELECT * FROM groups WHERE id = :groupId", ['groupId' => $groupId]);
return !empty($result) ? $result[0] : null;
}
// 检查用户是否是群成员
function isGroupMember($groupId, $userId) {
$db = Database::getInstance();
$result = $db->query("SELECT * FROM group_members WHERE group_id = :groupId AND user_id = :userId", [
'groupId' => $groupId,
'userId' => $userId
]);
return !empty($result);
}
// 获取用户在群组中的角色
function getUserGroupRole($groupId, $userId) {
$db = Database::getInstance();
$result = $db->query("SELECT role FROM group_members WHERE group_id = :groupId AND user_id = :userId", [
'groupId' => $groupId,
'userId' => $userId
]);
return !empty($result) ? $result[0]['role'] : null;
}
// 通过群号获取群组信息
function getGroupByGroupId($group_id) {
$db = Database::getInstance();
$result = $db->query("SELECT * FROM groups WHERE group_id = :group_id", ['group_id' => $group_id]);
return !empty($result) ? $result[0] : null;
}
// 通过群号加入群组
function joinGroupByGroupId($group_id, $userId) {
// 检查用户邮箱是否已验证
if (!isEmailVerified($userId)) {
return false; // 邮箱未验证,不能加入群组
}
// 查找群组
$group = getGroupByGroupId($group_id);
if (!$group) {
return false; // 群组不存在
}
// 检查用户是否已经是群成员
if (isGroupMember($group['id'], $userId)) {
return false; // 已经是群成员
}
// 添加用户为群成员
return addGroupMember($group['id'], $userId);
}
// 退出群组
function leaveGroup($groupId, $userId) {
// 检查用户是否是群成员
if (!isGroupMember($groupId, $userId)) {
return false; // 不是群成员
}
// 检查用户是否是管理员
$userRole = getUserGroupRole($groupId, $userId);
if ($userRole === 'admin') {
return false; // 管理员不能退出群组
}
// 移除用户作为群成员
return removeGroupMember($groupId, $userId);
}
// 禁言/解禁用户
function muteUser($groupId, $userId, $muted) {
// 检查用户是否是群成员
if (!isGroupMember($groupId, $userId)) {
return false; // 不是群成员
}
// 目前暂不支持禁言功能,返回false
return false;
}
// 检查用户是否在群组中被禁言
function isUserMuted($groupId, $userId) {
// 目前暂不支持禁言功能,返回false
return false;
}
?>