Sindbad~EG File Manager

Current Path : /home/copmadinaarea/thecopmadinaarea.org/portal/members/
Upload File :
Current File : /home/copmadinaarea/thecopmadinaarea.org/portal/members/directory.php

<?php
require_once '../config/config.php';
require_once '../classes/MemberAuth.php';

// Check if member is logged in
if (!MemberAuth::isMemberLoggedIn()) {
    redirect('../login.php');
}

$pageTitle = "Member Directory - " . APP_NAME;
$db = Database::getInstance()->getConnection();

// Get current member data
$currentMember = MemberAuth::getCurrentMember();
if (!$currentMember) {
    redirect('../login.php');
}

// Get member's location details
$stmt = $db->prepare("
    SELECT m.area_id, m.district_id, m.assembly_id,
           a.area_name, d.district_name, ass.assembly_name
    FROM members m
    LEFT JOIN areas a ON m.area_id = a.id
    LEFT JOIN districts d ON m.district_id = d.id
    LEFT JOIN assemblies ass ON m.assembly_id = ass.id
    WHERE m.id = :member_id
");
$stmt->execute(['member_id' => $currentMember['member_id']]);
$memberLocation = $stmt->fetch(PDO::FETCH_ASSOC);

// Handle search
$search = $_GET['search'] ?? '';
$members = [];

if (!empty($search)) {
    // Build query based on member's location
    $query = "
        SELECT m.id, m.membershipcard_id, m.title, m.first_name, m.middle_name, m.last_name,
               m.phone, m.email, m.member_type, m.gender,
               a.area_name, d.district_name, ass.assembly_name
        FROM members m
        LEFT JOIN areas a ON m.area_id = a.id
        LEFT JOIN districts d ON m.district_id = d.id
        LEFT JOIN assemblies ass ON m.assembly_id = ass.id
        WHERE m.is_active = 1
    ";
    
    $params = [];
    
    // Apply location-based filter
    if ($memberLocation['assembly_id']) {
        // Assembly level: Only show members from same assembly
        $query .= " AND m.assembly_id = :assembly_id";
        $params['assembly_id'] = $memberLocation['assembly_id'];
    } elseif ($memberLocation['district_id']) {
        // District level: Show members from same district
        $query .= " AND m.district_id = :district_id";
        $params['district_id'] = $memberLocation['district_id'];
    } elseif ($memberLocation['area_id']) {
        // Area level: Show members from same area
        $query .= " AND m.area_id = :area_id";
        $params['area_id'] = $memberLocation['area_id'];
    }
    
    // Add search conditions
    $query .= " AND (
        m.first_name LIKE :search1 OR 
        m.middle_name LIKE :search2 OR 
        m.last_name LIKE :search3 OR
        m.membershipcard_id LIKE :search4 OR
        m.phone LIKE :search5 OR
        m.email LIKE :search6 OR
        CONCAT(m.first_name, ' ', m.middle_name, ' ', m.last_name) LIKE :search7 OR
        CONCAT(m.first_name, ' ', m.last_name) LIKE :search8
    )";
    
    $searchTerm = "%{$search}%";
    for ($i = 1; $i <= 8; $i++) {
        $params["search{$i}"] = $searchTerm;
    }
    
    $query .= " ORDER BY m.last_name, m.first_name LIMIT 50";
    
    $stmt = $db->prepare($query);
    $stmt->execute($params);
    $members = $stmt->fetchAll(PDO::FETCH_ASSOC);
}

// Get settings for theme colors
$stmt = $db->query("SELECT * FROM general_settings ORDER BY id DESC LIMIT 1");
$settings = $stmt->fetch();
$settings = array_merge([
    'site_title' => APP_NAME,
    'theme_primary_color' => '#3B82F6',
    'theme_secondary_color' => '#10B981'
], $settings ?: []);
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title><?php echo $pageTitle; ?></title>
    <script src="https://cdn.tailwindcss.com"></script>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css">
    <style>
        :root {
            --primary-color: <?php echo $settings['theme_primary_color']; ?>;
            --secondary-color: <?php echo $settings['theme_secondary_color']; ?>;
        }
        .bg-primary { background-color: var(--primary-color); }
        .bg-secondary { background-color: var(--secondary-color); }
        .text-primary { color: var(--primary-color); }
        .border-primary { border-color: var(--primary-color); }
        .gradient-bg { background: linear-gradient(135deg, #1E40AF 0%, #9333EA 50%, #F97316 100%); }
        .card-hover { transition: all 0.3s ease; }
        .card-hover:hover { transform: translateY(-2px); box-shadow: 0 10px 20px -5px rgba(0,0,0,0.1); }
    </style>
</head>
<body class="bg-gray-50">
    <!-- Member Portal Header -->
    <header class="bg-white shadow-lg sticky top-0 z-50">
        <div class="container mx-auto px-4">
            <div class="flex items-center justify-between h-16">
                <div class="flex items-center space-x-3">
                    <div class="w-10 h-10 rounded-xl flex items-center justify-center gradient-bg">
                        <i class="fas fa-church text-white"></i>
                    </div>
                    <div>
                        <h1 class="text-lg font-bold text-gray-800"><?php echo htmlspecialchars($settings['site_title']); ?></h1>
                        <p class="text-xs text-gray-500">Member Portal</p>
                    </div>
                </div>
                
                <nav class="hidden md:flex items-center space-x-6">
                    <a href="dashboard.php" class="text-gray-700 hover:text-blue-600 transition">
                        <i class="fas fa-home mr-1"></i>Dashboard
                    </a>
                    <a href="directory.php" class="text-blue-600 font-medium border-b-2 border-blue-600 pb-1">
                        <i class="fas fa-address-book mr-1"></i>Directory
                    </a>
                    <a href="profile.php" class="text-gray-700 hover:text-blue-600 transition">
                        <i class="fas fa-user mr-1"></i>Profile
                    </a>
                </nav>
                
                <div class="flex items-center space-x-3">
                    <a href="../logout.php?member=1" class="text-gray-600 hover:text-red-600 transition">
                        <i class="fas fa-sign-out-alt mr-1"></i>Logout
                    </a>
                </div>
            </div>
        </div>
    </header>

    <div class="container mx-auto px-4 py-8">
        <div class="max-w-6xl mx-auto">
            <!-- Header Section -->
            <div class="mb-8">
                <div class="gradient-bg rounded-xl shadow-lg p-8 text-white">
                    <div class="flex flex-col md:flex-row md:items-center md:justify-between">
                        <div>
                            <h1 class="text-3xl font-bold mb-2">Member Directory</h1>
                            <p class="text-blue-100">
                                Search members in your <?php 
                                    if ($memberLocation['assembly_id']) {
                                        echo 'assembly: ' . htmlspecialchars($memberLocation['assembly_name']);
                                    } elseif ($memberLocation['district_id']) {
                                        echo 'district: ' . htmlspecialchars($memberLocation['district_name']);
                                    } elseif ($memberLocation['area_id']) {
                                        echo 'area: ' . htmlspecialchars($memberLocation['area_name']);
                                    }
                                ?>
                            </p>
                        </div>
                        <div class="mt-4 md:mt-0">
                            <a href="dashboard.php" class="bg-white text-primary px-6 py-3 rounded-lg font-semibold hover:bg-blue-50 transition-all duration-300 shadow-md inline-flex items-center">
                                <i class="fas fa-arrow-left mr-2"></i>
                                Back to Dashboard
                            </a>
                        </div>
                    </div>
                </div>
            </div>

            <!-- Search Box -->
            <div class="bg-white rounded-xl shadow-lg p-6 mb-8">
                <form method="GET" action="" class="flex flex-col md:flex-row gap-4">
                    <div class="flex-1">
                        <input type="text" 
                               name="search" 
                               value="<?= htmlspecialchars($search) ?>"
                               placeholder="Search by name, membership ID, phone, or email..." 
                               class="w-full px-6 py-4 border-2 border-gray-200 rounded-lg focus:ring-2 focus:ring-primary focus:border-primary text-lg">
                    </div>
                    <button type="submit" class="gradient-bg text-white px-8 py-4 rounded-lg font-semibold hover:shadow-lg transition-all duration-300 inline-flex items-center justify-center">
                        <i class="fas fa-search mr-2"></i>
                        Search
                    </button>
                </form>
            </div>

            <!-- Search Results -->
            <?php if (!empty($search)): ?>
                <?php if (count($members) > 0): ?>
                    <div class="bg-white rounded-xl shadow-lg p-6">
                        <div class="flex items-center justify-between mb-6">
                            <h2 class="text-xl font-bold text-gray-800">
                                <i class="fas fa-users mr-2 text-blue-500"></i>
                                Search Results (<?= count($members) ?>)
                            </h2>
                        </div>

                        <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
                            <?php foreach ($members as $member): ?>
                                <div class="border border-gray-200 rounded-lg p-6 card-hover">
                                    <div class="flex items-start space-x-4">
                                        <div class="w-16 h-16 rounded-full bg-gradient-to-br from-blue-500 to-purple-600 flex items-center justify-center text-white text-xl font-bold flex-shrink-0">
                                            <?= strtoupper(substr($member['first_name'], 0, 1) . substr($member['last_name'], 0, 1)) ?>
                                        </div>
                                        <div class="flex-1 min-w-0">
                                            <h3 class="font-bold text-gray-800 text-lg mb-1 truncate">
                                                <?= htmlspecialchars(trim(($member['title'] ?? '') . ' ' . $member['first_name'] . ' ' . ($member['middle_name'] ?? '') . ' ' . $member['last_name'])) ?>
                                            </h3>
                                            <p class="text-sm text-gray-600 mb-2">
                                                <i class="fas fa-id-card mr-1 text-blue-500"></i>
                                                <?= htmlspecialchars($member['membershipcard_id'] ?? 'N/A') ?>
                                            </p>
                                            <div class="space-y-1 text-sm">
                                                <?php if (!empty($member['phone'])): ?>
                                                    <p class="text-gray-700">
                                                        <i class="fas fa-phone mr-1 text-green-500"></i>
                                                        <a href="tel:<?= htmlspecialchars($member['phone']) ?>" class="hover:text-blue-600">
                                                            <?= htmlspecialchars($member['phone']) ?>
                                                        </a>
                                                    </p>
                                                <?php endif; ?>
                                                <?php if (!empty($member['email'])): ?>
                                                    <p class="text-gray-700 truncate">
                                                        <i class="fas fa-envelope mr-1 text-orange-500"></i>
                                                        <a href="mailto:<?= htmlspecialchars($member['email']) ?>" class="hover:text-blue-600">
                                                            <?= htmlspecialchars($member['email']) ?>
                                                        </a>
                                                    </p>
                                                <?php endif; ?>
                                                <p class="text-gray-600">
                                                    <i class="fas fa-map-marker-alt mr-1 text-red-500"></i>
                                                    <?= htmlspecialchars($member['assembly_name'] ?? $member['district_name'] ?? $member['area_name'] ?? 'N/A') ?>
                                                </p>
                                                <p class="text-xs text-gray-500 mt-2">
                                                    <span class="inline-flex items-center px-2 py-1 rounded-full bg-blue-100 text-blue-800">
                                                        <?= htmlspecialchars($member['member_type'] ?? 'Member') ?>
                                                    </span>
                                                </p>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                            <?php endforeach; ?>
                        </div>
                    </div>
                <?php else: ?>
                    <div class="bg-white rounded-xl shadow-lg p-12 text-center">
                        <div class="text-gray-400 mb-4">
                            <i class="fas fa-search text-6xl"></i>
                        </div>
                        <h3 class="text-2xl font-bold text-gray-800 mb-3">No Members Found</h3>
                        <p class="text-gray-600">
                            No members found matching "<?= htmlspecialchars($search) ?>" in your location.
                        </p>
                    </div>
                <?php endif; ?>
            <?php else: ?>
                <div class="bg-white rounded-xl shadow-lg p-12 text-center">
                    <div class="text-gray-400 mb-4">
                        <i class="fas fa-address-book text-6xl"></i>
                    </div>
                    <h3 class="text-2xl font-bold text-gray-800 mb-3">Search for Members</h3>
                    <p class="text-gray-600 mb-6">
                        Use the search bar above to find members by name, membership ID, phone, or email.<br>
                        You can only see members from your 
                        <?php 
                            if ($memberLocation['assembly_id']) {
                                echo 'assembly';
                            } elseif ($memberLocation['district_id']) {
                                echo 'district';
                            } elseif ($memberLocation['area_id']) {
                                echo 'area';
                            }
                        ?>.
                    </p>
                </div>
            <?php endif; ?>
        </div>
    </div>

    <footer class="bg-white border-t border-gray-200 mt-12">
        <div class="container mx-auto px-4 py-6">
            <p class="text-center text-gray-600 text-sm">
                &copy; <?php echo date('Y'); ?> <?php echo htmlspecialchars($settings['site_title']); ?>. All rights reserved.
            </p>
        </div>
    </footer>

    <?php 
    // Include Chat Hub Widget (Admin Chat + AI Chatbot)
    if (file_exists(__DIR__ . '/../includes/chat-hub-widget.php')) {
        include '../includes/chat-hub-widget.php';
    }
    ?>
</body>
</html>

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists