prepare("SELECT role FROM team_members WHERE team_id = ? AND user_id = ?"); $stmt->execute([$team_id, $user_id]); $current_user_role = $stmt->fetchColumn(); // Fetch team details $stmt = $pdo->prepare("SELECT name, owner_user_id FROM teams WHERE id = ?"); $stmt->execute([$team_id]); $team = $stmt->fetch(); if (!$team) { header('Location: teams.php'); exit(); } $is_owner = ($current_user_role == 'owner'); $is_admin = ($current_user_role == 'admin'); $is_member = $current_user_role; // Handle POST requests for team management if ($_SERVER['REQUEST_METHOD'] === 'POST') { // Must be a member to perform any action if (!$is_member) { header("Location: team.php?id=$team_id"); exit(); } // Add a new member if (isset($_POST['add_member']) && ($is_owner || $is_admin)) { $email = trim($_POST['email']); $stmt = $pdo->prepare("SELECT id FROM users WHERE email = ?"); $stmt->execute([$email]); $new_member_id = $stmt->fetchColumn(); if ($new_member_id) { // Add as a 'member' by default $stmt = $pdo->prepare("INSERT IGNORE INTO team_members (team_id, user_id, role) VALUES (?, ?, 'member')"); $stmt->execute([$team_id, $new_member_id]); } } // Remove a member if (isset($_POST['remove_member']) && isset($_POST['member_id'])) { $member_id_to_remove = $_POST['member_id']; // Get the role of the member to be removed $stmt = $pdo->prepare("SELECT role FROM team_members WHERE team_id = ? AND user_id = ?"); $stmt->execute([$team_id, $member_id_to_remove]); $member_to_remove_role = $stmt->fetchColumn(); // Owners can remove anyone except themselves // Admins can only remove members if ($is_owner && $member_id_to_remove != $user_id) { $stmt = $pdo->prepare("DELETE FROM team_members WHERE team_id = ? AND user_id = ?"); $stmt->execute([$team_id, $member_id_to_remove]); } elseif ($is_admin && $member_to_remove_role == 'member') { $stmt = $pdo->prepare("DELETE FROM team_members WHERE team_id = ? AND user_id = ?"); $stmt->execute([$team_id, $member_id_to_remove]); } } // Promote to Admin if (isset($_POST['promote_admin']) && isset($_POST['member_id']) && $is_owner) { $member_id_to_promote = $_POST['member_id']; $stmt = $pdo->prepare("UPDATE team_members SET role = 'admin' WHERE team_id = ? AND user_id = ? AND role = 'member'"); $stmt->execute([$team_id, $member_id_to_promote]); } // Demote to Member if (isset($_POST['demote_admin']) && isset($_POST['member_id']) && $is_owner) { $member_id_to_demote = $_POST['member_id']; $stmt = $pdo->prepare("UPDATE team_members SET role = 'member' WHERE team_id = ? AND user_id = ? AND role = 'admin'"); $stmt->execute([$team_id, $member_id_to_demote]); } // Transfer Ownership if (isset($_POST['make_owner']) && isset($_POST['member_id']) && $is_owner) { $new_owner_id = $_POST['member_id']; // Start transaction $pdo->beginTransaction(); try { // New owner becomes 'owner' $stmt = $pdo->prepare("UPDATE team_members SET role = 'owner' WHERE team_id = ? AND user_id = ?"); $stmt->execute([$team_id, $new_owner_id]); // Old owner becomes 'admin' $stmt = $pdo->prepare("UPDATE team_members SET role = 'admin' WHERE team_id = ? AND user_id = ?"); $stmt->execute([$team_id, $user_id]); // Update owner_user_id in teams table $stmt = $pdo->prepare("UPDATE teams SET owner_user_id = ? WHERE id = ?"); $stmt->execute([$new_owner_id, $team_id]); $pdo->commit(); } catch (Exception $e) { $pdo->rollBack(); } } // Leave team if (isset($_POST['leave_team']) && !$is_owner) { $stmt = $pdo->prepare("DELETE FROM team_members WHERE team_id = ? AND user_id = ?"); $stmt->execute([$team_id, $user_id]); header("Location: teams.php"); // Redirect to teams list after leaving exit(); } header("Location: team.php?id=$team_id"); exit(); } require_once 'partials/header.php'; // Fetch all team members with their roles and user details $stmt = $pdo->prepare( "SELECT u.id, u.name, u.email, tm.role FROM users u " . "JOIN team_members tm ON u.id = tm.user_id " . "WHERE tm.team_id = ? ORDER BY tm.role, u.name" ); $stmt->execute([$team_id]); $members = $stmt->fetchAll(); ?>

Team:

You are the owner. Transfer ownership to leave.
You are not a member of this team.
Add New Member

Members ()

()