<?php
// Start the session
session_start();
// Include database configuration
require_once 'database/db_config.php';
// Check if user is logged in and is an admin
if (!isset($_SESSION['user_id']) || !isset($_SESSION['role']) || ($_SESSION['role'] != 'admin' && $_SESSION['role'] != 'director')) {
header('Location: login.php');
exit;
}
// Handle team member toggle
if (isset($_POST['toggle_team_member'])) {
$user_id = (int) $_POST['user_id'];
$is_team_member = (int) $_POST['is_team_member'];
$update_query = "UPDATE users SET is_team_member = ? WHERE id = ?";
$stmt = $conn->prepare($update_query);
$stmt->bind_param("ii", $is_team_member, $user_id);
if ($stmt->execute()) {
$_SESSION['success_message'] = "Team member status updated successfully!";
} else {
$_SESSION['error_message'] = "Error updating team member status: " . $conn->error;
}
header('Location: team-management.php');
exit;
}
// Check for success or error messages
$success_message = '';
$error_message = '';
if (isset($_SESSION['success_message'])) {
$success_message = $_SESSION['success_message'];
unset($_SESSION['success_message']);
}
if (isset($_SESSION['error_message'])) {
$error_message = $_SESSION['error_message'];
unset($_SESSION['error_message']);
}
// Get all instructors, directors, and developers
$role_filter = isset($_GET['role']) ? $_GET['role'] : 'all';
$team_filter = isset($_GET['team']) ? $_GET['team'] : 'all';
$search = isset($_GET['search']) ? $_GET['search'] : '';
$sql = "SELECT * FROM users WHERE
(role = 'instructor' OR role = 'director' OR role = 'developer')";
if ($role_filter != 'all') {
$role = $conn->real_escape_string($role_filter);
$sql .= " AND role = '$role'";
}
if ($team_filter != 'all') {
$is_team = ($team_filter == 'team') ? 1 : 0;
$sql .= " AND is_team_member = $is_team";
}
if (!empty($search)) {
$search_term = $conn->real_escape_string($search);
$sql .= " AND (first_name LIKE '%$search_term%' OR last_name LIKE '%$search_term%' OR email LIKE '%$search_term%')";
}
$sql .= " ORDER BY
CASE
WHEN role = 'director' THEN 1
WHEN role = 'developer' THEN 2
ELSE 3
END,
first_name";
$team_members_result = $conn->query($sql);
// Include header
include 'includes/header.php';
?>
<!-- Begin Page Content -->
<div class="container-fluid">
<!-- Page Heading -->
<div class="d-sm-flex align-items-center justify-content-between mb-4">
<h1 class="h3 mb-0 text-gray-800">Team Management</h1>
<a href="user-add.php" class="d-none d-sm-inline-block btn btn-sm btn-primary shadow-sm">
<i class="fas fa-plus fa-sm text-white-50"></i> Add New User
</a>
</div>
<?php if (!empty($success_message)): ?>
<div class="alert alert-success alert-dismissible fade show" role="alert">
<?php echo $success_message; ?>
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<?php endif; ?>
<?php if (!empty($error_message)): ?>
<div class="alert alert-danger alert-dismissible fade show" role="alert">
<?php echo $error_message; ?>
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<?php endif; ?>
<!-- Content Row -->
<div class="row">
<div class="col-xl-3 col-md-6 mb-4">
<div class="card border-left-primary shadow h-100 py-2">
<div class="card-body">
<div class="row no-gutters align-items-center">
<div class="col mr-2">
<div class="text-xs font-weight-bold text-primary text-uppercase mb-1">
Total Team Members</div>
<div class="h5 mb-0 font-weight-bold text-gray-800">
<?php
$query = "SELECT COUNT(*) as count FROM users WHERE (role = 'instructor' OR role = 'director' OR role = 'developer') AND is_team_member = 1";
$result = $conn->query($query);
$row = $result->fetch_assoc();
echo $row['count'];
?>
</div>
</div>
<div class="col-auto">
<i class="fas fa-users fa-2x text-gray-300"></i>
</div>
</div>
</div>
</div>
</div>
<div class="col-xl-3 col-md-6 mb-4">
<div class="card border-left-success shadow h-100 py-2">
<div class="card-body">
<div class="row no-gutters align-items-center">
<div class="col mr-2">
<div class="text-xs font-weight-bold text-success text-uppercase mb-1">
Directors</div>
<div class="h5 mb-0 font-weight-bold text-gray-800">
<?php
$query = "SELECT COUNT(*) as count FROM users WHERE role = 'director' AND is_team_member = 1";
$result = $conn->query($query);
$row = $result->fetch_assoc();
echo $row['count'];
?>
</div>
</div>
<div class="col-auto">
<i class="fas fa-user-tie fa-2x text-gray-300"></i>
</div>
</div>
</div>
</div>
</div>
<div class="col-xl-3 col-md-6 mb-4">
<div class="card border-left-info shadow h-100 py-2">
<div class="card-body">
<div class="row no-gutters align-items-center">
<div class="col mr-2">
<div class="text-xs font-weight-bold text-info text-uppercase mb-1">
Developers</div>
<div class="h5 mb-0 font-weight-bold text-gray-800">
<?php
$query = "SELECT COUNT(*) as count FROM users WHERE role = 'developer' AND is_team_member = 1";
$result = $conn->query($query);
$row = $result->fetch_assoc();
echo $row['count'];
?>
</div>
</div>
<div class="col-auto">
<i class="fas fa-code fa-2x text-gray-300"></i>
</div>
</div>
</div>
</div>
</div>
<div class="col-xl-3 col-md-6 mb-4">
<div class="card border-left-warning shadow h-100 py-2">
<div class="card-body">
<div class="row no-gutters align-items-center">
<div class="col mr-2">
<div class="text-xs font-weight-bold text-warning text-uppercase mb-1">
Instructors</div>
<div class="h5 mb-0 font-weight-bold text-gray-800">
<?php
$query = "SELECT COUNT(*) as count FROM users WHERE role = 'instructor' AND is_team_member = 1";
$result = $conn->query($query);
$row = $result->fetch_assoc();
echo $row['count'];
?>
</div>
</div>
<div class="col-auto">
<i class="fas fa-chalkboard-teacher fa-2x text-gray-300"></i>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Team Management Filter Options -->
<div class="card shadow mb-4">
<div class="card-header py-3 d-flex flex-row align-items-center justify-content-between">
<h6 class="m-0 font-weight-bold text-primary">Filter Team Members</h6>
</div>
<div class="card-body">
<form action="" method="GET" class="mb-3">
<div class="row">
<div class="col-md-3 mb-3">
<select name="role" class="form-control">
<option value="all" <?php echo $role_filter == 'all' ? 'selected' : ''; ?>>All Roles</option>
<option value="director" <?php echo $role_filter == 'director' ? 'selected' : ''; ?>>Directors</option>
<option value="developer" <?php echo $role_filter == 'developer' ? 'selected' : ''; ?>>Developers</option>
<option value="instructor" <?php echo $role_filter == 'instructor' ? 'selected' : ''; ?>>Instructors</option>
</select>
</div>
<div class="col-md-3 mb-3">
<select name="team" class="form-control">
<option value="all" <?php echo $team_filter == 'all' ? 'selected' : ''; ?>>All Users</option>
<option value="team" <?php echo $team_filter == 'team' ? 'selected' : ''; ?>>Team Members Only</option>
<option value="non-team" <?php echo $team_filter == 'non-team' ? 'selected' : ''; ?>>Non-Team Members</option>
</select>
</div>
<div class="col-md-4 mb-3">
<input type="text" name="search" class="form-control" placeholder="Search by name or email..."
value="<?php echo htmlspecialchars($search); ?>">
</div>
<div class="col-md-2 mb-3">
<button type="submit" class="btn btn-primary btn-block">Filter</button>
</div>
</div>
</form>
</div>
</div>
<!-- Team Members List -->
<div class="card shadow mb-4">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold text-primary">Team Members</h6>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-bordered" id="teamTable" width="100%" cellspacing="0">
<thead>
<tr>
<th>Name</th>
<th>Email</th>
<th>Role</th>
<th>Phone</th>
<th>Status</th>
<th>Team Member</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<?php
if ($team_members_result && $team_members_result->num_rows > 0) {
while ($row = $team_members_result->fetch_assoc()) {
?>
<tr>
<td>
<div class="d-flex align-items-center">
<img src="<?php echo !empty($row['profile_image']) ? '../' . $row['profile_image'] : '../assets/img/defaults/default-avatar.png'; ?>"
alt="<?php echo htmlspecialchars($row['first_name'] . ' ' . $row['last_name']); ?>"
class="img-profile rounded-circle mr-2" style="width: 40px; height: 40px; object-fit: cover;">
<div>
<?php echo htmlspecialchars($row['first_name'] . ' ' . $row['last_name']); ?>
</div>
</div>
</td>
<td><?php echo htmlspecialchars($row['email']); ?></td>
<td>
<?php
$role_badge = '';
switch ($row['role']) {
case 'director':
$role_badge = 'badge-warning';
break;
case 'developer':
$role_badge = 'badge-info';
break;
case 'instructor':
$role_badge = 'badge-success';
break;
default:
$role_badge = 'badge-secondary';
}
?>
<span class="badge <?php echo $role_badge; ?>"><?php echo ucfirst($row['role']); ?></span>
</td>
<td><?php echo htmlspecialchars($row['phone'] ?? 'N/A'); ?></td>
<td>
<?php
$status_badge = $row['status'] == 'active' ? 'badge-success' : 'badge-danger';
?>
<span class="badge <?php echo $status_badge; ?>"><?php echo ucfirst($row['status']); ?></span>
</td>
<td class="text-center">
<form action="team-management.php" method="POST">
<input type="hidden" name="user_id" value="<?php echo $row['id']; ?>">
<input type="hidden" name="is_team_member" value="<?php echo $row['is_team_member'] ? '0' : '1'; ?>">
<button type="submit" name="toggle_team_member" class="btn btn-sm <?php echo $row['is_team_member'] ? 'btn-success active' : 'btn-secondary'; ?>">
<i class="fas <?php echo $row['is_team_member'] ? 'fa-toggle-on' : 'fa-toggle-off'; ?>"></i>
<?php echo $row['is_team_member'] ? 'Yes' : 'No'; ?>
</button>
</form>
</td>
<td>
<a href="user-edit.php?id=<?php echo $row['id']; ?>" class="btn btn-sm btn-primary">
<i class="fas fa-edit"></i> Edit
</a>
<a href="../instructor-details.php?id=<?php echo $row['id']; ?>" class="btn btn-sm btn-info" target="_blank">
<i class="fas fa-eye"></i> View
</a>
</td>
</tr>
<?php
}
} else {
?>
<tr>
<td colspan="7" class="text-center">No team members found</td>
</tr>
<?php
}
?>
</tbody>
</table>
</div>
</div>
</div>
<!-- Team Management Guide -->
<div class="card shadow mb-4">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold text-primary">Team Management Guide</h6>
</div>
<div class="card-body">
<div class="row">
<div class="col-md-6">
<h5>What are Team Members?</h5>
<p>Team members are users who will be displayed on the public-facing "Our Team" page. Only users with the role of Director, Developer, or Instructor can be team members.</p>
<h5>How to Manage Team Members:</h5>
<ol>
<li>Toggle the "Team Member" switch to add or remove users from the public team page.</li>
<li>Edit a user's profile to update their information, expertise, and biography.</li>
<li>Set a user's status to "Inactive" to temporarily hide them without removing them from the team.</li>
</ol>
</div>
<div class="col-md-6">
<h5>User Roles Explained:</h5>
<ul>
<li><span class="badge badge-warning">Director</span> - Leadership roles, displayed at the top of the team page.</li>
<li><span class="badge badge-info">Developer</span> - Technical team members, displayed after directors.</li>
<li><span class="badge badge-success">Instructor</span> - Teaching staff, displayed after developers.</li>
</ul>
<h5>Best Practices:</h5>
<ul>
<li>Ensure all team members have complete profiles with professional photos.</li>
<li>Include areas of expertise and contact information for each team member.</li>
<li>Keep biographies concise but informative, highlighting key qualifications.</li>
</ul>
</div>
</div>
</div>
</div>
</div>
<!-- /.container-fluid -->
<script>
// Initialize DataTables
$(document).ready(function() {
$('#teamTable').DataTable({
"order": [[ 2, "asc" ], [ 0, "asc" ]],
"pageLength": 25
});
});
</script>
<?php
// Include footer
include 'includes/footer.php';
?>