<?php
session_start();
require_once 'database/db_config.php';
// Check if user has admin privileges
require_admin_privileges('login.php');
// Process form submissions
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Handle team member updates, additions, or deletions
if (isset($_POST['action'])) {
$action = $_POST['action'];
// Add new team member
if ($action === 'add') {
$first_name = mysqli_real_escape_string($conn, $_POST['first_name']);
$last_name = mysqli_real_escape_string($conn, $_POST['last_name']);
$email = mysqli_real_escape_string($conn, $_POST['email']);
$role = mysqli_real_escape_string($conn, $_POST['role']);
$designation = mysqli_real_escape_string($conn, $_POST['designation']);
$expertise = mysqli_real_escape_string($conn, $_POST['expertise']);
$bio = mysqli_real_escape_string($conn, $_POST['bio']);
$facebook = mysqli_real_escape_string($conn, isset($_POST['facebook']) ? $_POST['facebook'] : '');
$twitter = mysqli_real_escape_string($conn, isset($_POST['twitter']) ? $_POST['twitter'] : '');
$linkedin = mysqli_real_escape_string($conn, isset($_POST['linkedin']) ? $_POST['linkedin'] : '');
$instagram = mysqli_real_escape_string($conn, isset($_POST['instagram']) ? $_POST['instagram'] : '');
$username = strtolower(str_replace(' ', '', $first_name)) . rand(100, 999);
$password = password_hash('password123', PASSWORD_DEFAULT); // Default password
// Check which columns exist in the users table
$columns = ["first_name", "last_name", "email", "username", "password", "role", "is_team_member"];
$values = [$first_name, $last_name, $email, $username, $password, $role, 1];
$types = "ssssssi";
// Add optional columns if they exist
$column_checks = [
'designation' => $conn->query("SHOW COLUMNS FROM users LIKE 'designation'")->num_rows > 0,
'expertise' => $conn->query("SHOW COLUMNS FROM users LIKE 'expertise'")->num_rows > 0,
'bio' => $conn->query("SHOW COLUMNS FROM users LIKE 'bio'")->num_rows > 0,
'facebook' => $conn->query("SHOW COLUMNS FROM users LIKE 'facebook'")->num_rows > 0,
'twitter' => $conn->query("SHOW COLUMNS FROM users LIKE 'twitter'")->num_rows > 0,
'linkedin' => $conn->query("SHOW COLUMNS FROM users LIKE 'linkedin'")->num_rows > 0,
'instagram' => $conn->query("SHOW COLUMNS FROM users LIKE 'instagram'")->num_rows > 0
];
if ($column_checks['designation']) {
$columns[] = "designation";
$values[] = $designation;
$types .= "s";
}
if ($column_checks['expertise']) {
$columns[] = "expertise";
$values[] = $expertise;
$types .= "s";
}
if ($column_checks['bio']) {
$columns[] = "bio";
$values[] = $bio;
$types .= "s";
}
if ($column_checks['facebook']) {
$columns[] = "facebook";
$values[] = $facebook;
$types .= "s";
}
if ($column_checks['twitter']) {
$columns[] = "twitter";
$values[] = $twitter;
$types .= "s";
}
if ($column_checks['linkedin']) {
$columns[] = "linkedin";
$values[] = $linkedin;
$types .= "s";
}
if ($column_checks['instagram']) {
$columns[] = "instagram";
$values[] = $instagram;
$types .= "s";
}
// Add status and created_at
$columns[] = "status";
$values[] = "active";
$types .= "s";
$columns[] = "created_at";
// Build the query
$add_query = "INSERT INTO users (" . implode(", ", $columns) . ")
VALUES (";
$placeholders = array_fill(0, count($columns)-1, "?");
$placeholders[] = "NOW()";
$add_query .= implode(", ", $placeholders) . ")";
$stmt = $conn->prepare($add_query);
// Trim the last element (NOW()) from the values array since it's directly in the query
array_pop($values);
$stmt->bind_param($types, ...$values);
if ($stmt->execute()) {
$new_user_id = $stmt->insert_id;
// Handle profile image upload
if (isset($_FILES['profile_image']) && $_FILES['profile_image']['size'] > 0) {
$upload_dir = '../assets/img/team/';
// Create directory if it doesn't exist
if (!file_exists($upload_dir)) {
mkdir($upload_dir, 0755, true);
}
$file_name = $username . '_' . time() . '.' . pathinfo($_FILES['profile_image']['name'], PATHINFO_EXTENSION);
$target_file = $upload_dir . $file_name;
if (move_uploaded_file($_FILES['profile_image']['tmp_name'], $target_file)) {
// Update the user with the profile image path
$update_query = "UPDATE users SET profile_image = ? WHERE id = ?";
$stmt = $conn->prepare($update_query);
$image_path = 'assets/img/team/' . $file_name;
$stmt->bind_param("si", $image_path, $new_user_id);
$stmt->execute();
}
}
$_SESSION['success_message'] = "New team member added successfully! Default username: $username";
} else {
$_SESSION['error_message'] = "Failed to add team member: " . $conn->error;
}
}
// Convert existing user to team member
else if ($action === 'convert_existing' && isset($_POST['existing_user_id'])) {
$user_id = (int)$_POST['existing_user_id'];
$role = mysqli_real_escape_string($conn, $_POST['role']);
$designation = mysqli_real_escape_string($conn, $_POST['designation']);
$expertise = mysqli_real_escape_string($conn, $_POST['expertise']);
$bio = mysqli_real_escape_string($conn, $_POST['bio']);
$facebook = mysqli_real_escape_string($conn, isset($_POST['facebook']) ? $_POST['facebook'] : '');
$twitter = mysqli_real_escape_string($conn, isset($_POST['twitter']) ? $_POST['twitter'] : '');
$linkedin = mysqli_real_escape_string($conn, isset($_POST['linkedin']) ? $_POST['linkedin'] : '');
$instagram = mysqli_real_escape_string($conn, isset($_POST['instagram']) ? $_POST['instagram'] : '');
// Check which columns exist in the users table
$column_checks = [
'designation' => $conn->query("SHOW COLUMNS FROM users LIKE 'designation'")->num_rows > 0,
'expertise' => $conn->query("SHOW COLUMNS FROM users LIKE 'expertise'")->num_rows > 0,
'bio' => $conn->query("SHOW COLUMNS FROM users LIKE 'bio'")->num_rows > 0,
'facebook' => $conn->query("SHOW COLUMNS FROM users LIKE 'facebook'")->num_rows > 0,
'twitter' => $conn->query("SHOW COLUMNS FROM users LIKE 'twitter'")->num_rows > 0,
'linkedin' => $conn->query("SHOW COLUMNS FROM users LIKE 'linkedin'")->num_rows > 0,
'instagram' => $conn->query("SHOW COLUMNS FROM users LIKE 'instagram'")->num_rows > 0
];
// Build the SET part of the update query
$set_clauses = [
"role = ?",
"is_team_member = 1"
];
$values = [$role];
$types = "s";
if ($column_checks['designation']) {
$set_clauses[] = "designation = ?";
$values[] = $designation;
$types .= "s";
}
if ($column_checks['expertise']) {
$set_clauses[] = "expertise = ?";
$values[] = $expertise;
$types .= "s";
}
if ($column_checks['bio']) {
$set_clauses[] = "bio = ?";
$values[] = $bio;
$types .= "s";
}
if ($column_checks['facebook']) {
$set_clauses[] = "facebook = ?";
$values[] = $facebook;
$types .= "s";
}
if ($column_checks['twitter']) {
$set_clauses[] = "twitter = ?";
$values[] = $twitter;
$types .= "s";
}
if ($column_checks['linkedin']) {
$set_clauses[] = "linkedin = ?";
$values[] = $linkedin;
$types .= "s";
}
if ($column_checks['instagram']) {
$set_clauses[] = "instagram = ?";
$values[] = $instagram;
$types .= "s";
}
// Add user_id for WHERE clause
$values[] = $user_id;
$types .= "i";
// Build the complete query
$update_query = "UPDATE users SET " . implode(", ", $set_clauses) . " WHERE id = ?";
$stmt = $conn->prepare($update_query);
$stmt->bind_param($types, ...$values);
if ($stmt->execute()) {
$_SESSION['success_message'] = "User successfully converted to team member!";
} else {
$_SESSION['error_message'] = "Failed to convert user to team member: " . $conn->error;
}
}
// Update existing team member
else if ($action === 'update' && isset($_POST['user_id'])) {
$user_id = (int)$_POST['user_id'];
$first_name = mysqli_real_escape_string($conn, $_POST['first_name']);
$last_name = mysqli_real_escape_string($conn, $_POST['last_name']);
$email = mysqli_real_escape_string($conn, $_POST['email']);
$role = mysqli_real_escape_string($conn, $_POST['role']);
$designation = mysqli_real_escape_string($conn, $_POST['designation']);
$expertise = mysqli_real_escape_string($conn, $_POST['expertise']);
$bio = mysqli_real_escape_string($conn, $_POST['bio']);
$facebook = mysqli_real_escape_string($conn, isset($_POST['facebook']) ? $_POST['facebook'] : '');
$twitter = mysqli_real_escape_string($conn, isset($_POST['twitter']) ? $_POST['twitter'] : '');
$linkedin = mysqli_real_escape_string($conn, isset($_POST['linkedin']) ? $_POST['linkedin'] : '');
$instagram = mysqli_real_escape_string($conn, isset($_POST['instagram']) ? $_POST['instagram'] : '');
$status = mysqli_real_escape_string($conn, $_POST['status']);
// Check which columns exist in the users table
$column_checks = [
'designation' => $conn->query("SHOW COLUMNS FROM users LIKE 'designation'")->num_rows > 0,
'expertise' => $conn->query("SHOW COLUMNS FROM users LIKE 'expertise'")->num_rows > 0,
'bio' => $conn->query("SHOW COLUMNS FROM users LIKE 'bio'")->num_rows > 0,
'facebook' => $conn->query("SHOW COLUMNS FROM users LIKE 'facebook'")->num_rows > 0,
'twitter' => $conn->query("SHOW COLUMNS FROM users LIKE 'twitter'")->num_rows > 0,
'linkedin' => $conn->query("SHOW COLUMNS FROM users LIKE 'linkedin'")->num_rows > 0,
'instagram' => $conn->query("SHOW COLUMNS FROM users LIKE 'instagram'")->num_rows > 0
];
// Build the SET part of the update query
$set_clauses = [
"first_name = ?",
"last_name = ?",
"email = ?",
"role = ?",
"status = ?",
"is_team_member = ?"
];
$values = [$first_name, $last_name, $email, $role, $status, 1];
$types = "sssssi";
if ($column_checks['designation']) {
$set_clauses[] = "designation = ?";
$values[] = $designation;
$types .= "s";
}
if ($column_checks['expertise']) {
$set_clauses[] = "expertise = ?";
$values[] = $expertise;
$types .= "s";
}
if ($column_checks['bio']) {
$set_clauses[] = "bio = ?";
$values[] = $bio;
$types .= "s";
}
if ($column_checks['facebook']) {
$set_clauses[] = "facebook = ?";
$values[] = $facebook;
$types .= "s";
}
if ($column_checks['twitter']) {
$set_clauses[] = "twitter = ?";
$values[] = $twitter;
$types .= "s";
}
if ($column_checks['linkedin']) {
$set_clauses[] = "linkedin = ?";
$values[] = $linkedin;
$types .= "s";
}
if ($column_checks['instagram']) {
$set_clauses[] = "instagram = ?";
$values[] = $instagram;
$types .= "s";
}
// Add user_id for WHERE clause
$values[] = $user_id;
$types .= "i";
// Build the complete query
$update_query = "UPDATE users SET " . implode(", ", $set_clauses) . " WHERE id = ?";
$stmt = $conn->prepare($update_query);
$stmt->bind_param($types, ...$values);
if ($stmt->execute()) {
// Handle profile image upload if a file was selected
if (isset($_FILES['profile_image']) && $_FILES['profile_image']['size'] > 0) {
// Get user username for the filename
$username_query = "SELECT username FROM users WHERE id = ?";
$stmt = $conn->prepare($username_query);
$stmt->bind_param("i", $user_id);
$stmt->execute();
$result = $stmt->get_result();
$user_data = $result->fetch_assoc();
$username = $user_data['username'];
$upload_dir = '../assets/img/team/';
// Create directory if it doesn't exist
if (!file_exists($upload_dir)) {
mkdir($upload_dir, 0755, true);
}
$file_name = $username . '_' . time() . '.' . pathinfo($_FILES['profile_image']['name'], PATHINFO_EXTENSION);
$target_file = $upload_dir . $file_name;
if (move_uploaded_file($_FILES['profile_image']['tmp_name'], $target_file)) {
// Update the user with the profile image path
$update_query = "UPDATE users SET profile_image = ? WHERE id = ?";
$stmt = $conn->prepare($update_query);
$image_path = 'assets/img/team/' . $file_name;
$stmt->bind_param("si", $image_path, $user_id);
$stmt->execute();
}
}
$_SESSION['success_message'] = "Team member updated successfully!";
} else {
$_SESSION['error_message'] = "Failed to update team member: " . $conn->error;
}
}
// Delete team member
else if ($action === 'delete' && isset($_POST['user_id'])) {
$user_id = (int)$_POST['user_id'];
// Check if user exists
$check_query = "SELECT id, role FROM users WHERE id = ?";
$stmt = $conn->prepare($check_query);
$stmt->bind_param("i", $user_id);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows > 0) {
// Set is_team_member to 0 instead of changing role
$update_query = "UPDATE users SET is_team_member = 0 WHERE id = ?";
$stmt = $conn->prepare($update_query);
$stmt->bind_param("i", $user_id);
if ($stmt->execute()) {
$_SESSION['success_message'] = "Team member removed successfully. They will no longer appear in the team list, but their role and permissions remain unchanged.";
} else {
$_SESSION['error_message'] = "Failed to remove team member: " . $conn->error;
}
} else {
$_SESSION['error_message'] = "Team member not found!";
}
}
}
// Redirect to prevent form resubmission
header('Location: team_management.php');
exit();
}
// Get team members
// Check which columns exist in the users table
$column_checks = [
'designation' => $conn->query("SHOW COLUMNS FROM users LIKE 'designation'")->num_rows > 0,
'expertise' => $conn->query("SHOW COLUMNS FROM users LIKE 'expertise'")->num_rows > 0,
'bio' => $conn->query("SHOW COLUMNS FROM users LIKE 'bio'")->num_rows > 0,
'facebook' => $conn->query("SHOW COLUMNS FROM users LIKE 'facebook'")->num_rows > 0,
'twitter' => $conn->query("SHOW COLUMNS FROM users LIKE 'twitter'")->num_rows > 0,
'linkedin' => $conn->query("SHOW COLUMNS FROM users LIKE 'linkedin'")->num_rows > 0,
'instagram' => $conn->query("SHOW COLUMNS FROM users LIKE 'instagram'")->num_rows > 0
];
// Check if is_team_member column exists, if not create it
if ($conn->query("SHOW COLUMNS FROM users LIKE 'is_team_member'")->num_rows === 0) {
$conn->query("ALTER TABLE users ADD COLUMN is_team_member TINYINT(1) DEFAULT 1");
// Update existing team members
$conn->query("UPDATE users SET is_team_member = 1 WHERE role IN ('instructor', 'director', 'developer')");
}
// Build the query dynamically based on which columns exist
$query = "SELECT id, first_name, last_name, email, username, role, profile_image";
if ($column_checks['designation']) {
$query .= ", designation";
}
if ($column_checks['expertise']) {
$query .= ", expertise";
}
if ($column_checks['bio']) {
$query .= ", bio";
}
if ($column_checks['facebook']) {
$query .= ", facebook";
}
if ($column_checks['twitter']) {
$query .= ", twitter";
}
if ($column_checks['linkedin']) {
$query .= ", linkedin";
}
if ($column_checks['instagram']) {
$query .= ", instagram";
}
$query .= ", status, created_at
FROM users
WHERE role IN ('instructor', 'director', 'developer') AND is_team_member = 1
ORDER BY CASE
WHEN role = 'director' THEN 1
WHEN role = 'developer' THEN 2
ELSE 3
END, first_name";
$result = $conn->query($query);
$team_members = [];
if ($result && $result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
$team_members[] = $row;
}
}
// Get existing users who are not already team members for the user selection dropdown
$existing_users_query = "SELECT id, CONCAT(first_name, ' ', last_name) as name, email, username
FROM users
WHERE is_team_member = 0 OR is_team_member IS NULL
ORDER BY first_name";
$existing_users_result = $conn->query($existing_users_query);
$existing_users = [];
if ($existing_users_result && $existing_users_result->num_rows > 0) {
while ($row = $existing_users_result->fetch_assoc()) {
$existing_users[] = $row;
}
}
// Include header
include 'includes/header.php';
?>
<div class="container-fluid">
<h1 class="h3 mb-4 text-gray-800">Team Management</h1>
<?php if (isset($_SESSION['success_message'])): ?>
<div class="alert alert-success alert-dismissible fade show" role="alert">
<?php
echo $_SESSION['success_message'];
unset($_SESSION['success_message']);
?>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
<?php endif; ?>
<?php if (isset($_SESSION['error_message'])): ?>
<div class="alert alert-danger alert-dismissible fade show" role="alert">
<?php
echo $_SESSION['error_message'];
unset($_SESSION['error_message']);
?>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
<?php endif; ?>
<!-- Add Team Member Button -->
<div class="d-flex justify-content-end mb-3">
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#addTeamMemberModal">
<i class="fas fa-plus me-1"></i> Add Team Member
</button>
</div>
<!-- Team Members Table -->
<div class="card shadow mb-4">
<div class="card-header py-3 d-flex justify-content-between align-items-center">
<h6 class="m-0 font-weight-bold text-primary">Team Members</h6>
<!-- Filter Buttons -->
<div class="btn-group" role="group">
<button type="button" class="btn btn-outline-primary active filter-btn" data-filter="all">All</button>
<button type="button" class="btn btn-outline-primary filter-btn" data-filter="director">Directors</button>
<button type="button" class="btn btn-outline-primary filter-btn" data-filter="developer">Developers</button>
<button type="button" class="btn btn-outline-primary filter-btn" data-filter="instructor">Instructors</button>
</div>
</div>
<div class="card-body">
<div class="row" id="teamGrid">
<?php foreach ($team_members as $member): ?>
<div class="col-md-4 mb-4 team-card" data-role="<?php echo $member['role']; ?>">
<div class="card h-100">
<div class="card-img-top team-member-img-container">
<?php
$profile_image = isset($member['profile_image']) && !empty($member['profile_image'])
? '../' . $member['profile_image']
: '../assets/img/defaults/default-avatar.png';
?>
<img src="<?php echo $profile_image; ?>" class="card-img-top team-member-img" alt="<?php echo htmlspecialchars($member['first_name'] . ' ' . $member['last_name']); ?>">
</div>
<div class="card-body">
<h5 class="card-title"><?php echo htmlspecialchars($member['first_name'] . ' ' . $member['last_name']); ?></h5>
<?php
$role_badge_class = '';
$role_display = ucfirst($member['role']);
if ($member['role'] === 'director') {
$role_badge_class = 'bg-orange';
} elseif ($member['role'] === 'developer') {
$role_badge_class = 'bg-blue';
} else {
$role_badge_class = 'bg-purple';
}
?>
<span class="badge <?php echo $role_badge_class; ?> mb-2"><?php echo $role_display; ?></span>
<?php if (isset($member['designation']) && !empty($member['designation'])): ?>
<p class="card-text"><strong>Title:</strong> <?php echo htmlspecialchars($member['designation']); ?></p>
<?php endif; ?>
<p class="card-text"><strong>Email:</strong> <?php echo htmlspecialchars($member['email']); ?></p>
<?php if (isset($member['expertise']) && !empty($member['expertise'])): ?>
<p class="card-text"><strong>Expertise:</strong> <?php echo htmlspecialchars($member['expertise']); ?></p>
<?php endif; ?>
<?php if (isset($member['bio']) && !empty($member['bio'])): ?>
<p class="card-text"><strong>Bio:</strong> <?php echo nl2br(htmlspecialchars($member['bio'])); ?></p>
<?php endif; ?>
<p class="card-text">
<strong>Status:</strong>
<?php if ($member['status'] === 'active'): ?>
<span class="badge bg-success">Active</span>
<?php else: ?>
<span class="badge bg-danger">Inactive</span>
<?php endif; ?>
</p>
<?php
// Show social media links if any exist
$has_social = false;
if (
(isset($member['facebook']) && !empty($member['facebook'])) ||
(isset($member['twitter']) && !empty($member['twitter'])) ||
(isset($member['linkedin']) && !empty($member['linkedin'])) ||
(isset($member['instagram']) && !empty($member['instagram']))
) {
$has_social = true;
}
if ($has_social): ?>
<div class="social-links mt-3">
<?php if (isset($member['facebook']) && !empty($member['facebook'])): ?>
<a href="<?php echo htmlspecialchars($member['facebook']); ?>" class="social-icon" target="_blank">
<i class="fab fa-facebook-f"></i>
</a>
<?php endif; ?>
<?php if (isset($member['twitter']) && !empty($member['twitter'])): ?>
<a href="<?php echo htmlspecialchars($member['twitter']); ?>" class="social-icon" target="_blank">
<i class="fab fa-twitter"></i>
</a>
<?php endif; ?>
<?php if (isset($member['linkedin']) && !empty($member['linkedin'])): ?>
<a href="<?php echo htmlspecialchars($member['linkedin']); ?>" class="social-icon" target="_blank">
<i class="fab fa-linkedin-in"></i>
</a>
<?php endif; ?>
<?php if (isset($member['instagram']) && !empty($member['instagram'])): ?>
<a href="<?php echo htmlspecialchars($member['instagram']); ?>" class="social-icon" target="_blank">
<i class="fab fa-instagram"></i>
</a>
<?php endif; ?>
</div>
<?php endif; ?>
</div>
<div class="card-footer">
<button class="btn btn-sm btn-primary edit-btn"
data-id="<?php echo $member['id']; ?>"
data-firstname="<?php echo htmlspecialchars($member['first_name']); ?>"
data-lastname="<?php echo htmlspecialchars($member['last_name']); ?>"
data-email="<?php echo htmlspecialchars($member['email']); ?>"
data-role="<?php echo $member['role']; ?>"
<?php if (isset($member['designation'])): ?>
data-designation="<?php echo htmlspecialchars($member['designation']); ?>"
<?php endif; ?>
<?php if (isset($member['expertise'])): ?>
data-expertise="<?php echo htmlspecialchars($member['expertise']); ?>"
<?php endif; ?>
<?php if (isset($member['bio'])): ?>
data-bio="<?php echo htmlspecialchars($member['bio']); ?>"
<?php endif; ?>
<?php if (isset($member['facebook'])): ?>
data-facebook="<?php echo htmlspecialchars($member['facebook']); ?>"
<?php endif; ?>
<?php if (isset($member['twitter'])): ?>
data-twitter="<?php echo htmlspecialchars($member['twitter']); ?>"
<?php endif; ?>
<?php if (isset($member['linkedin'])): ?>
data-linkedin="<?php echo htmlspecialchars($member['linkedin']); ?>"
<?php endif; ?>
<?php if (isset($member['instagram'])): ?>
data-instagram="<?php echo htmlspecialchars($member['instagram']); ?>"
<?php endif; ?>
<?php
$profile_image = isset($member['profile_image']) && !empty($member['profile_image'])
? '../' . $member['profile_image']
: '../assets/img/defaults/default-avatar.png';
?>
data-profileimage="<?php echo $profile_image; ?>"
data-status="<?php echo $member['status']; ?>"
data-bs-toggle="modal" data-bs-target="#editTeamMemberModal">
<i class="fas fa-edit"></i> Edit
</button>
<button class="btn btn-sm btn-danger delete-btn"
data-id="<?php echo $member['id']; ?>"
data-name="<?php echo htmlspecialchars($member['first_name'] . ' ' . $member['last_name']); ?>"
data-bs-toggle="modal" data-bs-target="#deleteTeamMemberModal">
<i class="fas fa-trash"></i> Delete
</button>
</div>
</div>
</div>
<?php endforeach; ?>
</div>
</div>
</div>
</div>
<!-- Add Team Member Modal -->
<div class="modal fade" id="addTeamMemberModal" tabindex="-1" aria-hidden="true">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Add Team Member</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<!-- Tab Navigation -->
<ul class="nav nav-tabs nav-fill" id="addTeamMemberTabs" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="new-user-tab" data-bs-toggle="tab" data-bs-target="#new-user-pane" type="button" role="tab" aria-controls="new-user-pane" aria-selected="true">Create New User</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="existing-user-tab" data-bs-toggle="tab" data-bs-target="#existing-user-pane" type="button" role="tab" aria-controls="existing-user-pane" aria-selected="false">Select Existing User</button>
</li>
</ul>
<!-- Tab Content -->
<div class="tab-content p-3" id="addTeamMemberTabContent">
<!-- Create New User Tab -->
<div class="tab-pane fade show active" id="new-user-pane" role="tabpanel" aria-labelledby="new-user-tab">
<form action="team_management.php" method="post">
<input type="hidden" name="action" value="add">
<div class="modal-body">
<div class="row">
<div class="col-md-6 mb-3">
<label for="first_name" class="form-label">First Name</label>
<input type="text" class="form-control" id="first_name" name="first_name" required>
</div>
<div class="col-md-6 mb-3">
<label for="last_name" class="form-label">Last Name</label>
<input type="text" class="form-control" id="last_name" name="last_name" required>
</div>
</div>
<div class="row">
<div class="col-md-6 mb-3">
<label for="email" class="form-label">Email</label>
<input type="email" class="form-control" id="email" name="email" required>
</div>
<div class="col-md-6 mb-3">
<label for="role" class="form-label">Role</label>
<select class="form-select" id="role" name="role" required>
<option value="">Select Role</option>
<option value="director">Director</option>
<option value="developer">Developer</option>
<option value="instructor">Instructor</option>
</select>
</div>
</div>
<div class="mb-3">
<label for="designation" class="form-label">Designation/Title</label>
<input type="text" class="form-control" id="designation" name="designation" placeholder="e.g. Senior Web Developer">
</div>
<div class="mb-3">
<label for="expertise" class="form-label">Areas of Expertise</label>
<input type="text" class="form-control" id="expertise" name="expertise" placeholder="e.g. HTML, CSS, JavaScript, PHP">
<small class="text-muted">Separate with commas</small>
</div>
<div class="mb-3">
<label for="bio" class="form-label">Bio</label>
<textarea class="form-control" id="bio" name="bio" rows="4"></textarea>
</div>
<div class="mb-3">
<label for="profile_image" class="form-label">Profile Image</label>
<input type="file" class="form-control" id="profile_image" name="profile_image">
</div>
<div class="mb-3">
<label class="form-label">Social Media Links</label>
<div class="input-group mb-2">
<span class="input-group-text"><i class="fab fa-facebook-f"></i></span>
<input type="url" class="form-control" id="facebook" name="facebook" placeholder="Facebook Profile URL">
</div>
<div class="input-group mb-2">
<span class="input-group-text"><i class="fab fa-twitter"></i></span>
<input type="url" class="form-control" id="twitter" name="twitter" placeholder="Twitter Profile URL">
</div>
<div class="input-group mb-2">
<span class="input-group-text"><i class="fab fa-linkedin-in"></i></span>
<input type="url" class="form-control" id="linkedin" name="linkedin" placeholder="LinkedIn Profile URL">
</div>
<div class="input-group">
<span class="input-group-text"><i class="fab fa-instagram"></i></span>
<input type="url" class="form-control" id="instagram" name="instagram" placeholder="Instagram Profile URL">
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>
<button type="submit" class="btn btn-primary">Add Team Member</button>
</div>
</form>
</div>
<!-- Select Existing User Tab -->
<div class="tab-pane fade" id="existing-user-pane" role="tabpanel" aria-labelledby="existing-user-tab">
<form action="team_management.php" method="post">
<input type="hidden" name="action" value="convert_existing">
<div class="modal-body">
<div class="mb-4">
<label for="existing_user_id" class="form-label">Select User</label>
<select class="form-select" id="existing_user_id" name="existing_user_id" required>
<option value="">Select Existing User</option>
<?php foreach ($existing_users as $user): ?>
<option value="<?php echo $user['id']; ?>"
data-email="<?php echo htmlspecialchars($user['email']); ?>"
data-username="<?php echo htmlspecialchars($user['username']); ?>">
<?php echo htmlspecialchars($user['name']); ?> (<?php echo htmlspecialchars($user['email']); ?>)
</option>
<?php endforeach; ?>
</select>
</div>
<div class="mb-3">
<label for="existing_role" class="form-label">Assign Role</label>
<select class="form-select" id="existing_role" name="role" required>
<option value="">Select Role</option>
<option value="director">Director</option>
<option value="developer">Developer</option>
<option value="instructor">Instructor</option>
</select>
</div>
<div class="mb-3">
<label for="existing_designation" class="form-label">Designation/Title</label>
<input type="text" class="form-control" id="existing_designation" name="designation" placeholder="e.g. Senior Web Developer">
</div>
<div class="mb-3">
<label for="existing_expertise" class="form-label">Areas of Expertise</label>
<input type="text" class="form-control" id="existing_expertise" name="expertise" placeholder="e.g. HTML, CSS, JavaScript, PHP">
<small class="text-muted">Separate with commas</small>
</div>
<div class="mb-3">
<label for="existing_bio" class="form-label">Bio</label>
<textarea class="form-control" id="existing_bio" name="bio" rows="4"></textarea>
</div>
<div class="mb-3">
<label class="form-label">Social Media Links</label>
<div class="input-group mb-2">
<span class="input-group-text"><i class="fab fa-facebook-f"></i></span>
<input type="url" class="form-control" id="existing_facebook" name="facebook" placeholder="Facebook Profile URL">
</div>
<div class="input-group mb-2">
<span class="input-group-text"><i class="fab fa-twitter"></i></span>
<input type="url" class="form-control" id="existing_twitter" name="twitter" placeholder="Twitter Profile URL">
</div>
<div class="input-group mb-2">
<span class="input-group-text"><i class="fab fa-linkedin-in"></i></span>
<input type="url" class="form-control" id="existing_linkedin" name="linkedin" placeholder="LinkedIn Profile URL">
</div>
<div class="input-group">
<span class="input-group-text"><i class="fab fa-instagram"></i></span>
<input type="url" class="form-control" id="existing_instagram" name="instagram" placeholder="Instagram Profile URL">
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>
<button type="submit" class="btn btn-primary">Assign as Team Member</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<!-- Edit Team Member Modal -->
<div class="modal fade" id="editTeamMemberModal" tabindex="-1" aria-hidden="true">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Edit Team Member</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<form action="team_management.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="action" value="update">
<input type="hidden" name="user_id" id="edit_user_id">
<div class="modal-body">
<div class="row">
<div class="col-md-6 mb-3">
<label for="edit_first_name" class="form-label">First Name</label>
<input type="text" class="form-control" id="edit_first_name" name="first_name" required>
</div>
<div class="col-md-6 mb-3">
<label for="edit_last_name" class="form-label">Last Name</label>
<input type="text" class="form-control" id="edit_last_name" name="last_name" required>
</div>
</div>
<div class="row">
<div class="col-md-6 mb-3">
<label for="edit_email" class="form-label">Email</label>
<input type="email" class="form-control" id="edit_email" name="email" required>
</div>
<div class="col-md-6 mb-3">
<label for="edit_role" class="form-label">Role</label>
<select class="form-select" id="edit_role" name="role" required>
<option value="">Select Role</option>
<option value="director">Director</option>
<option value="developer">Developer</option>
<option value="instructor">Instructor</option>
</select>
</div>
</div>
<div class="mb-3">
<label for="edit_designation" class="form-label">Designation/Title</label>
<input type="text" class="form-control" id="edit_designation" name="designation" placeholder="e.g. Senior Web Developer">
</div>
<div class="mb-3">
<label for="edit_expertise" class="form-label">Areas of Expertise</label>
<input type="text" class="form-control" id="edit_expertise" name="expertise" placeholder="e.g. HTML, CSS, JavaScript, PHP">
<small class="text-muted">Separate with commas</small>
</div>
<div class="mb-3">
<label for="edit_bio" class="form-label">Bio</label>
<textarea class="form-control" id="edit_bio" name="bio" rows="4"></textarea>
</div>
<div class="mb-3">
<label for="edit_profile_image" class="form-label">Profile Image</label>
<input type="file" class="form-control" id="edit_profile_image" name="profile_image">
<div id="current_image_preview" class="mt-2"></div>
</div>
<div class="mb-3">
<label class="form-label">Social Media Links</label>
<div class="input-group mb-2">
<span class="input-group-text"><i class="fab fa-facebook-f"></i></span>
<input type="url" class="form-control" id="edit_facebook" name="facebook" placeholder="Facebook Profile URL">
</div>
<div class="input-group mb-2">
<span class="input-group-text"><i class="fab fa-twitter"></i></span>
<input type="url" class="form-control" id="edit_twitter" name="twitter" placeholder="Twitter Profile URL">
</div>
<div class="input-group mb-2">
<span class="input-group-text"><i class="fab fa-linkedin-in"></i></span>
<input type="url" class="form-control" id="edit_linkedin" name="linkedin" placeholder="LinkedIn Profile URL">
</div>
<div class="input-group mb-2">
<span class="input-group-text"><i class="fab fa-instagram"></i></span>
<input type="url" class="form-control" id="edit_instagram" name="instagram" placeholder="Instagram Profile URL">
</div>
</div>
<div class="mb-3">
<label for="edit_status" class="form-label">Status</label>
<select class="form-select" id="edit_status" name="status" required>
<option value="active">Active</option>
<option value="inactive">Inactive</option>
</select>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>
<button type="submit" class="btn btn-primary">Update Team Member</button>
</div>
</form>
</div>
</div>
</div>
<!-- Delete Team Member Modal -->
<div class="modal fade" id="deleteTeamMemberModal" tabindex="-1" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Confirm Team Member Removal</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<p>Are you sure you want to remove <span id="delete_member_name"></span> from the team?</p>
<p class="text-info"><i class="fas fa-info-circle"></i> Their user account will remain intact with the same role and permissions, but they will no longer be shown in the team listing.</p>
</div>
<div class="modal-footer">
<form action="team_management.php" method="post">
<input type="hidden" name="action" value="delete">
<input type="hidden" name="user_id" id="delete_user_id">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>
<button type="submit" class="btn btn-warning">Remove from Team</button>
</form>
</div>
</div>
</div>
</div>
<style>
.bg-orange {
background: linear-gradient(135deg, #ff9500, #ff5e3a);
color: white;
}
.bg-blue {
background: linear-gradient(135deg, #3a7bd5, #00d2ff);
color: white;
}
.bg-purple {
background: linear-gradient(135deg, #6a11cb, #2575fc);
color: white;
}
.team-member-img-container {
height: 250px;
overflow: hidden;
position: relative;
background-color: #f8f9fc;
}
.team-member-img {
width: 100%;
height: 100%;
object-fit: cover;
object-position: center;
transition: transform 0.3s ease;
}
.card:hover .team-member-img {
transform: scale(1.05);
}
.card {
transition: box-shadow 0.3s ease, transform 0.3s ease;
border-radius: 10px;
overflow: hidden;
}
.card:hover {
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
transform: translateY(-5px);
}
.card-footer {
background-color: rgba(0, 0, 0, 0.03);
display: flex;
justify-content: space-between;
padding: 0.75rem 1.25rem;
}
.social-links {
display: flex;
gap: 10px;
}
.social-icon {
display: flex;
align-items: center;
justify-content: center;
width: 36px;
height: 36px;
border-radius: 50%;
background-color: #f8f9fc;
color: #666;
transition: all 0.3s ease;
}
.social-icon:hover {
transform: translateY(-3px);
}
.social-icon i.fa-facebook-f:hover {
color: #3b5998;
}
.social-icon i.fa-twitter:hover {
color: #1da1f2;
}
.social-icon i.fa-linkedin-in:hover {
color: #0077b5;
}
.social-icon i.fa-instagram:hover {
color: #e1306c;
}
</style>
<script>
document.addEventListener('DOMContentLoaded', function() {
// File upload preview for new user
if (document.getElementById('profile_image')) {
document.getElementById('profile_image').addEventListener('change', function(e) {
const file = e.target.files[0];
if (file) {
const reader = new FileReader();
reader.onload = function(event) {
const imgPreview = document.createElement('img');
imgPreview.src = event.target.result;
imgPreview.style.maxWidth = '100%';
imgPreview.style.marginTop = '10px';
imgPreview.style.borderRadius = '5px';
const previewContainer = document.getElementById('profile_image').parentNode;
const existingPreview = previewContainer.querySelector('img');
if (existingPreview) {
previewContainer.removeChild(existingPreview);
}
previewContainer.appendChild(imgPreview);
};
reader.readAsDataURL(file);
}
});
}
// File upload preview for edit user
if (document.getElementById('edit_profile_image')) {
document.getElementById('edit_profile_image').addEventListener('change', function(e) {
const file = e.target.files[0];
if (file) {
const reader = new FileReader();
reader.onload = function(event) {
const imgPreview = document.createElement('img');
imgPreview.src = event.target.result;
imgPreview.style.maxWidth = '100%';
imgPreview.style.height = '150px';
imgPreview.style.objectFit = 'cover';
imgPreview.style.borderRadius = '5px';
const previewContainer = document.getElementById('current_image_preview');
previewContainer.innerHTML = '';
previewContainer.appendChild(imgPreview);
};
reader.readAsDataURL(file);
}
});
}
// Fix for modal backdrop not being removed
const fixBackdropIssue = () => {
const modals = document.querySelectorAll('.modal');
modals.forEach(modal => {
modal.addEventListener('hidden.bs.modal', function() {
// Remove any lingering backdrops
const backdrops = document.querySelectorAll('.modal-backdrop');
backdrops.forEach(backdrop => {
backdrop.remove();
});
// Ensure body doesn't have modal-open class
document.body.classList.remove('modal-open');
document.body.style.overflow = '';
document.body.style.paddingRight = '';
});
});
// Also add click handler to close buttons
const closeButtons = document.querySelectorAll('[data-bs-dismiss="modal"]');
closeButtons.forEach(button => {
button.addEventListener('click', function() {
setTimeout(() => {
if (!document.querySelector('.modal.show')) {
// No visible modals, so clean up
const backdrops = document.querySelectorAll('.modal-backdrop');
backdrops.forEach(backdrop => {
backdrop.remove();
});
document.body.classList.remove('modal-open');
document.body.style.overflow = '';
document.body.style.paddingRight = '';
}
}, 300); // Wait for animation to complete
});
});
};
// Run the fix
fixBackdropIssue();
// Existing users dropdown handler
if (document.getElementById('existing_user_id')) {
document.getElementById('existing_user_id').addEventListener('change', function() {
const selectedOption = this.options[this.selectedIndex];
if (selectedOption.value) {
const email = selectedOption.getAttribute('data-email');
const username = selectedOption.getAttribute('data-username');
// You can use this data if needed
console.log('Selected User Email:', email);
console.log('Selected User Username:', username);
}
});
}
// Make sure form enctype is set for file uploads
const newUserForm = document.querySelector('#new-user-pane form');
if (newUserForm) {
newUserForm.setAttribute('enctype', 'multipart/form-data');
}
// Edit button click handler
const editButtons = document.querySelectorAll('.edit-btn');
editButtons.forEach(button => {
button.addEventListener('click', function() {
const id = this.getAttribute('data-id');
const firstName = this.getAttribute('data-firstname');
const lastName = this.getAttribute('data-lastname');
const email = this.getAttribute('data-email');
const role = this.getAttribute('data-role');
const designation = this.getAttribute('data-designation');
const expertise = this.getAttribute('data-expertise');
const bio = this.getAttribute('data-bio');
const facebook = this.getAttribute('data-facebook');
const twitter = this.getAttribute('data-twitter');
const linkedin = this.getAttribute('data-linkedin');
const instagram = this.getAttribute('data-instagram');
const status = this.getAttribute('data-status');
const profileImage = this.getAttribute('data-profileimage');
document.getElementById('edit_user_id').value = id;
document.getElementById('edit_first_name').value = firstName;
document.getElementById('edit_last_name').value = lastName;
document.getElementById('edit_email').value = email;
document.getElementById('edit_role').value = role;
document.getElementById('edit_designation').value = designation || '';
document.getElementById('edit_expertise').value = expertise || '';
document.getElementById('edit_bio').value = bio || '';
document.getElementById('edit_facebook').value = facebook || '';
document.getElementById('edit_twitter').value = twitter || '';
document.getElementById('edit_linkedin').value = linkedin || '';
document.getElementById('edit_instagram').value = instagram || '';
document.getElementById('edit_status').value = status;
// Show current profile image preview if available
if (profileImage) {
const imgPreview = document.createElement('img');
imgPreview.src = profileImage;
imgPreview.style.maxWidth = '100%';
imgPreview.style.height = '150px';
imgPreview.style.objectFit = 'cover';
imgPreview.style.borderRadius = '5px';
const previewContainer = document.getElementById('current_image_preview');
previewContainer.innerHTML = '';
previewContainer.appendChild(imgPreview);
}
});
});
// Delete button click handler
const deleteButtons = document.querySelectorAll('.delete-btn');
deleteButtons.forEach(button => {
button.addEventListener('click', function() {
const id = this.getAttribute('data-id');
const name = this.getAttribute('data-name');
document.getElementById('delete_user_id').value = id;
document.getElementById('delete_member_name').textContent = name;
});
});
// Filter buttons click handler
const filterButtons = document.querySelectorAll('.filter-btn');
const teamCards = document.querySelectorAll('.team-card');
filterButtons.forEach(button => {
button.addEventListener('click', function() {
const filter = this.getAttribute('data-filter');
// Update active button
filterButtons.forEach(btn => btn.classList.remove('active'));
this.classList.add('active');
// Filter cards
teamCards.forEach(card => {
const role = card.getAttribute('data-role');
if (filter === 'all' || filter === role) {
card.style.display = '';
} else {
card.style.display = 'none';
}
});
});
});
});
</script>
<?php include 'includes/footer.php'; ?>