Sindbad~EG File Manager

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

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

$pageTitle = "Attendance - " . APP_NAME;

// Get settings for theme colors
$db = Database::getInstance()->getConnection();
$stmt = $db->query("SELECT * FROM general_settings ORDER BY id DESC LIMIT 1");
$settings = $stmt->fetch();

$settings = array_merge([
    'site_title' => 'Church Membership System',
    'theme_primary_color' => '#1E40AF',
    'theme_secondary_color' => '#F97316',
], $settings ?: []);

$error = '';
$success = '';
$userType = $_POST['user_type'] ?? $_GET['type'] ?? '';
$userCode = $_POST['user_code'] ?? '';
$step = 'select_type'; // select_type, enter_code, select_program, checkin_success, admin_dashboard

$memberData = null;
$userData = null;
$availablePrograms = [];
$assemblyId = null;

// Handle member/user code verification
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['verify_code'])) {
    $userCode = strtoupper(trim($_POST['user_code']));
    $userType = $_POST['user_type'];
    
    if (empty($userCode)) {
        $error = "Please enter your code";
        $step = 'enter_code';
    } else {
        try {
            if ($userType === 'member') {
                // Look up member by tracking code, code, or membershipcard_id
                $stmt = $db->prepare("
                    SELECT m.*, mc.tracking_code, mc.code as member_code, a.assembly_name, d.district_name, ar.area_name
                    FROM members m
                    LEFT JOIN memberuser_codes mc ON mc.member_id = m.id AND mc.code_type = 'member' AND mc.is_active = 1
                    LEFT JOIN assemblies a ON m.assembly_id = a.id
                    LEFT JOIN districts d ON m.district_id = d.id
                    LEFT JOIN areas ar ON m.area_id = ar.id
                    WHERE (mc.tracking_code = :code1 OR mc.code = :code2 OR m.membershipcard_id = :code3)
                    AND m.is_active = 1
                    LIMIT 1
                ");
                $stmt->execute(['code1' => $userCode, 'code2' => $userCode, 'code3' => $userCode]);
                $memberData = $stmt->fetch();
                
                if ($memberData) {
                    $assemblyId = $memberData['assembly_id'];
                    $step = 'select_program';
                    
                    // Get available programs for this assembly
                    $progStmt = $db->prepare("
                        SELECT p.*, 
                            (SELECT COUNT(*) FROM program_attendance pa WHERE pa.program_id = p.id AND DATE(pa.check_in_time) = CURDATE()) as today_checkins
                        FROM programs p
                        WHERE p.is_active = 1 
                        AND (p.assembly_id = :assembly_id OR p.assembly_id IS NULL)
                        AND (p.end_date IS NULL OR p.end_date >= CURDATE())
                        ORDER BY p.program_name
                    ");
                    $progStmt->execute(['assembly_id' => $assemblyId]);
                    $availablePrograms = $progStmt->fetchAll();
                } else {
                    $error = "Invalid member code. Please check and try again.";
                    $step = 'enter_code';
                }
            } else {
                // Admin/User code lookup - check tracking_code and code columns
                $stmt = $db->prepare("
                    SELECT u.*, mc.tracking_code, mc.code as user_code, a.assembly_name, d.district_name, ar.area_name
                    FROM users u
                    LEFT JOIN memberuser_codes mc ON mc.user_id = u.id AND mc.code_type = 'user' AND mc.is_active = 1
                    LEFT JOIN assemblies a ON u.assembly_id = a.id
                    LEFT JOIN districts d ON u.district_id = d.id
                    LEFT JOIN areas ar ON u.area_id = ar.id
                    WHERE (mc.tracking_code = :code1 OR mc.code = :code2)
                    AND u.is_active = 1
                    LIMIT 1
                ");
                $stmt->execute(['code1' => $userCode, 'code2' => $userCode]);
                $userData = $stmt->fetch();
                
                if ($userData) {
                    $assemblyId = $userData['assembly_id'];
                    $step = 'admin_dashboard';
                    
                    // Store in session for admin actions
                    $_SESSION['temp_admin_id'] = $userData['id'];
                    $_SESSION['temp_admin_assembly'] = $assemblyId;
                    $_SESSION['temp_admin_code'] = $userCode;
                } else {
                    $error = "Invalid admin code. Please check and try again.";
                    $step = 'enter_code';
                }
            }
        } catch (Exception $e) {
            $error = "Error: " . $e->getMessage();
            $step = 'enter_code';
        }
    }
}

// Handle member check-in
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['member_checkin'])) {
    try {
        $memberId = $_POST['member_id'];
        $programId = $_POST['program_id'];
        
        // Check if already checked in today
        $checkStmt = $db->prepare("
            SELECT id FROM program_attendance 
            WHERE member_id = :member_id AND program_id = :program_id 
            AND DATE(check_in_time) = CURDATE()
        ");
        $checkStmt->execute(['member_id' => $memberId, 'program_id' => $programId]);
        
        if ($checkStmt->fetch()) {
            $error = "You have already checked in to this program today.";
            $step = 'select_program';
        } else {
            // Get program end time for auto checkout
            $progStmt = $db->prepare("SELECT * FROM programs WHERE id = :id");
            $progStmt->execute(['id' => $programId]);
            $program = $progStmt->fetch();
            
            // Insert check-in
            $insertStmt = $db->prepare("
                INSERT INTO program_attendance (program_id, member_id, check_in_time, attendance_type)
                VALUES (:program_id, :member_id, NOW(), 'self')
            ");
            $insertStmt->execute(['program_id' => $programId, 'member_id' => $memberId]);
            
            $success = "Check-in successful! You are now marked as present.";
            $step = 'checkin_success';
            
            // Get member and program info for success message
            $memberStmt = $db->prepare("SELECT * FROM members WHERE id = :id");
            $memberStmt->execute(['id' => $memberId]);
            $memberData = $memberStmt->fetch();
        }
    } catch (Exception $e) {
        $error = "Check-in failed: " . $e->getMessage();
        $step = 'select_program';
    }
}

// Determine step based on GET parameters (only if not already set by POST)
if ($_SERVER['REQUEST_METHOD'] !== 'POST' && isset($_GET['type']) && in_array($_GET['type'], ['member', 'admin'])) {
    $userType = $_GET['type'];
    $step = 'enter_code';
}

// Check for returning admin session
if (isset($_SESSION['temp_admin_id']) && isset($_GET['admin']) && $_GET['admin'] === 'dashboard') {
    $step = 'admin_dashboard';
    $userData = ['id' => $_SESSION['temp_admin_id']];
    $assemblyId = $_SESSION['temp_admin_assembly'];
}
?>
<!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>
        .hero-gradient {
            background: linear-gradient(135deg, #1E40AF 0%, #9333EA 50%, #F97316 100%);
        }
        .text-gradient {
            background: linear-gradient(135deg, #1E40AF 0%, #F97316 100%);
            -webkit-background-clip: text;
            -webkit-text-fill-color: transparent;
        }
        .btn-gradient {
            background: linear-gradient(135deg, #1E40AF 0%, #9333EA 100%);
        }
        .btn-gradient-orange {
            background: linear-gradient(135deg, #F97316 0%, #FBBF24 100%);
        }
        .card-hover:hover {
            transform: translateY(-5px);
            box-shadow: 0 20px 40px rgba(0,0,0,0.15);
        }
        .card-hover {
            transition: all 0.3s ease;
        }
        @keyframes fadeInUp {
            from { opacity: 0; transform: translateY(30px); }
            to { opacity: 1; transform: translateY(0); }
        }
        .animate-fadeIn { animation: fadeInUp 0.5s ease-out; }
        @keyframes pulse-ring {
            0% { transform: scale(0.8); opacity: 1; }
            100% { transform: scale(1.3); opacity: 0; }
        }
        .pulse-ring::before {
            content: '';
            position: absolute;
            inset: -10px;
            border-radius: 50%;
            border: 3px solid currentColor;
            animation: pulse-ring 1.5s ease-out infinite;
        }
    </style>
</head>
<body class="bg-gray-50 min-h-screen">
    <!-- 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-12 h-12 rounded-xl flex items-center justify-center hero-gradient">
                        <i class="fas fa-church text-white text-xl"></i>
                    </div>
                    <div>
                        <h1 class="text-xl font-bold text-gradient"><?php echo htmlspecialchars($settings['site_title']); ?></h1>
                        <p class="text-xs text-gray-500">Program Attendance</p>
                    </div>
                </div>
                
                <nav class="flex items-center space-x-4">
                    <a href="index.php" class="text-gray-700 hover:text-blue-700 font-medium transition">
                        <i class="fas fa-home mr-1"></i><span class="hidden sm:inline">Home</span>
                    </a>
                    <?php if (isLoggedIn()): ?>
                        <a href="dashboard.php" class="text-gray-700 hover:text-purple-600 font-medium transition">
                            <i class="fas fa-tachometer-alt mr-1"></i><span class="hidden sm:inline">Dashboard</span>
                        </a>
                    <?php else: ?>
                        <a href="login.php" class="px-4 py-2 rounded-full text-white font-semibold btn-gradient">
                            <i class="fas fa-sign-in-alt mr-1"></i>Login
                        </a>
                    <?php endif; ?>
                </nav>
            </div>
        </div>
    </header>

    <!-- Hero Section -->
    <section class="hero-gradient text-white py-8">
        <div class="container mx-auto px-4 text-center">
            <i class="fas fa-clipboard-check text-5xl mb-3 opacity-90"></i>
            <h1 class="text-3xl font-bold mb-2">Program Attendance</h1>
            <p class="text-white/90">Check in to church programs quickly and easily</p>
        </div>
    </section>

    <!-- Main Content -->
    <main class="container mx-auto px-4 py-8">
        <div class="max-w-2xl mx-auto">
            
            <?php if ($error): ?>
            <div class="bg-red-100 border-l-4 border-red-500 text-red-700 p-4 rounded mb-6 animate-fadeIn">
                <p class="font-bold"><i class="fas fa-exclamation-circle mr-2"></i>Error</p>
                <p><?php echo htmlspecialchars($error); ?></p>
            </div>
            <?php endif; ?>
            
            <?php if ($success): ?>
            <div class="bg-green-100 border-l-4 border-green-500 text-green-700 p-4 rounded mb-6 animate-fadeIn">
                <p class="font-bold"><i class="fas fa-check-circle mr-2"></i>Success</p>
                <p><?php echo htmlspecialchars($success); ?></p>
            </div>
            <?php endif; ?>
            
            <?php if ($step === 'select_type'): ?>
            <!-- Step 1: Select User Type -->
            <div class="bg-white rounded-xl shadow-lg p-8 animate-fadeIn">
                <h2 class="text-2xl font-bold text-gray-800 text-center mb-6">
                    <i class="fas fa-user-check mr-2 text-blue-500"></i>Welcome!
                </h2>
                <p class="text-gray-600 text-center mb-8">Please select how you would like to check in:</p>
                
                <div class="grid grid-cols-1 md:grid-cols-3 gap-6">
                    <!-- Member Option -->
                    <a href="?type=member" class="card-hover block bg-gradient-to-br from-blue-50 to-blue-100 rounded-xl p-6 border-2 border-blue-200 hover:border-blue-400 text-center">
                        <div class="w-20 h-20 mx-auto mb-4 rounded-full bg-blue-500 flex items-center justify-center">
                            <i class="fas fa-user text-3xl text-white"></i>
                        </div>
                        <h3 class="text-xl font-bold text-blue-800 mb-2">I'm a Member</h3>
                        <p class="text-blue-600 text-sm">Check in to programs using your member code</p>
                    </a>
                    
                    <!-- Guest/Visitor Option -->
                    <a href="guest-checkin.php" class="card-hover block bg-gradient-to-br from-orange-50 to-yellow-100 rounded-xl p-6 border-2 border-orange-200 hover:border-orange-400 text-center">
                        <div class="w-20 h-20 mx-auto mb-4 rounded-full bg-gradient-to-br from-orange-500 to-yellow-500 flex items-center justify-center">
                            <i class="fas fa-user-plus text-3xl text-white"></i>
                        </div>
                        <h3 class="text-xl font-bold text-orange-800 mb-2">Guest / Visitor</h3>
                        <p class="text-orange-600 text-sm">First time here? Register as a guest or visitor</p>
                    </a>
                    
                    <!-- Admin Option -->
                    <a href="?type=admin" class="card-hover block bg-gradient-to-br from-purple-50 to-purple-100 rounded-xl p-6 border-2 border-purple-200 hover:border-purple-400 text-center">
                        <div class="w-20 h-20 mx-auto mb-4 rounded-full bg-purple-500 flex items-center justify-center">
                            <i class="fas fa-user-shield text-3xl text-white"></i>
                        </div>
                        <h3 class="text-xl font-bold text-purple-800 mb-2">I'm an Admin</h3>
                        <p class="text-purple-600 text-sm">Manage attendance using your admin code</p>
                    </a>
                </div>
                
                <!-- Already have a visitor code? -->
                <div class="mt-8 p-4 bg-gray-50 rounded-lg text-center">
                    <p class="text-gray-600 mb-2">Already registered as a guest?</p>
                    <a href="guest-lookup.php" class="text-orange-600 hover:text-orange-800 font-medium">
                        <i class="fas fa-search mr-1"></i>Look up your details with your visitor code
                    </a>
                </div>
                
                <div class="mt-6 text-center">
                    <a href="index.php" class="text-gray-500 hover:text-gray-700">
                        <i class="fas fa-arrow-left mr-1"></i>Back to Home
                    </a>
                </div>
            </div>
            
            <?php elseif ($step === 'enter_code'): ?>
            <!-- Step 2: Enter Code -->
            <div class="bg-white rounded-xl shadow-lg p-8 animate-fadeIn">
                <div class="text-center mb-6">
                    <?php if ($userType === 'member'): ?>
                        <div class="w-16 h-16 mx-auto mb-4 rounded-full bg-blue-500 flex items-center justify-center">
                            <i class="fas fa-user text-2xl text-white"></i>
                        </div>
                        <h2 class="text-2xl font-bold text-gray-800">Member Check-In</h2>
                        <p class="text-gray-600">Enter your member code or membership card ID</p>
                    <?php else: ?>
                        <div class="w-16 h-16 mx-auto mb-4 rounded-full bg-purple-500 flex items-center justify-center">
                            <i class="fas fa-user-shield text-2xl text-white"></i>
                        </div>
                        <h2 class="text-2xl font-bold text-gray-800">Admin Access</h2>
                        <p class="text-gray-600">Enter your admin tracking code</p>
                    <?php endif; ?>
                </div>
                
                <form method="POST" class="space-y-6">
                    <input type="hidden" name="user_type" value="<?php echo htmlspecialchars($userType); ?>">
                    
                    <div>
                        <label class="block text-sm font-medium text-gray-700 mb-2">
                            <?php echo $userType === 'member' ? 'Member Code / Card ID' : 'Admin Code'; ?>
                        </label>
                        <input type="text" name="user_code" required autofocus
                               placeholder="<?php echo $userType === 'member' ? 'e.g., MEM2026123456' : 'e.g., USR2026123456'; ?>"
                               class="w-full px-4 py-3 text-lg border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent text-center uppercase"
                               style="letter-spacing: 2px;">
                    </div>
                    
                    <button type="submit" name="verify_code" 
                            class="w-full py-3 rounded-lg text-white font-semibold <?php echo $userType === 'member' ? 'btn-gradient' : 'bg-purple-600 hover:bg-purple-700'; ?> transition">
                        <i class="fas fa-arrow-right mr-2"></i>Continue
                    </button>
                </form>
                
                <div class="mt-6 text-center">
                    <a href="attendance.php" class="text-gray-500 hover:text-gray-700">
                        <i class="fas fa-arrow-left mr-1"></i>Back
                    </a>
                </div>
            </div>
            
            <?php elseif ($step === 'select_program' && $memberData): ?>
            <!-- Step 3: Select Program (Member) -->
            <div class="bg-white rounded-xl shadow-lg overflow-hidden animate-fadeIn">
                <!-- Member Info Header -->
                <div class="bg-gradient-to-r from-blue-500 to-blue-600 text-white p-6">
                    <div class="flex items-center space-x-4">
                        <div class="w-16 h-16 rounded-full bg-white/20 flex items-center justify-center">
                            <i class="fas fa-user text-2xl"></i>
                        </div>
                        <div>
                            <h3 class="text-xl font-bold">
                                <?php echo htmlspecialchars($memberData['first_name'] . ' ' . $memberData['last_name']); ?>
                            </h3>
                            <p class="text-white/80 text-sm">
                                <i class="fas fa-church mr-1"></i><?php echo htmlspecialchars($memberData['assembly_name'] ?? 'N/A'); ?>
                            </p>
                            <p class="text-white/80 text-sm">
                                <i class="fas fa-id-card mr-1"></i><?php echo htmlspecialchars($memberData['membershipcard_id'] ?? 'N/A'); ?>
                            </p>
                        </div>
                    </div>
                </div>
                
                <div class="p-6">
                    <h4 class="text-lg font-bold text-gray-800 mb-4">
                        <i class="fas fa-calendar-check mr-2 text-green-500"></i>Select Program to Check In
                    </h4>
                    
                    <?php if (empty($availablePrograms)): ?>
                        <div class="text-center py-8">
                            <i class="fas fa-calendar-times text-5xl text-gray-300 mb-4"></i>
                            <p class="text-gray-600">No active programs available for your assembly today.</p>
                        </div>
                    <?php else: ?>
                        <div class="space-y-3">
                            <?php foreach ($availablePrograms as $program): ?>
                            <form method="POST" class="block">
                                <input type="hidden" name="member_id" value="<?php echo $memberData['id']; ?>">
                                <input type="hidden" name="program_id" value="<?php echo $program['id']; ?>">
                                
                                <button type="submit" name="member_checkin" 
                                        class="w-full text-left p-4 border border-gray-200 rounded-lg hover:border-blue-400 hover:bg-blue-50 transition">
                                    <div class="flex justify-between items-center">
                                        <div>
                                            <h5 class="font-semibold text-gray-800"><?php echo htmlspecialchars($program['program_name']); ?></h5>
                                            <p class="text-sm text-gray-500">
                                                <i class="fas fa-clock mr-1"></i>
                                                <?php echo $program['start_time'] ? date('g:i A', strtotime($program['start_time'])) : 'Flexible'; ?>
                                                <?php if ($program['end_time']): ?>
                                                    - <?php echo date('g:i A', strtotime($program['end_time'])); ?>
                                                <?php endif; ?>
                                            </p>
                                        </div>
                                        <div class="text-right">
                                            <span class="text-xs bg-green-100 text-green-800 px-2 py-1 rounded-full">
                                                <?php echo $program['today_checkins']; ?> checked in
                                            </span>
                                            <i class="fas fa-chevron-right text-gray-400 ml-2"></i>
                                        </div>
                                    </div>
                                </button>
                            </form>
                            <?php endforeach; ?>
                        </div>
                    <?php endif; ?>
                    
                    <div class="mt-6 text-center">
                        <a href="attendance.php" class="text-gray-500 hover:text-gray-700">
                            <i class="fas fa-arrow-left mr-1"></i>Start Over
                        </a>
                    </div>
                </div>
            </div>
            
            <?php elseif ($step === 'checkin_success'): ?>
            <!-- Check-in Success -->
            <div class="bg-white rounded-xl shadow-lg p-8 text-center animate-fadeIn">
                <div class="w-24 h-24 mx-auto mb-6 rounded-full bg-green-100 flex items-center justify-center relative pulse-ring text-green-500">
                    <i class="fas fa-check text-4xl text-green-500"></i>
                </div>
                
                <h2 class="text-2xl font-bold text-gray-800 mb-2">Check-In Complete!</h2>
                <p class="text-gray-600 mb-6">
                    Welcome, <strong><?php echo htmlspecialchars($memberData['first_name'] ?? ''); ?></strong>! 
                    You have been marked as present.
                </p>
                
                <div class="bg-green-50 border border-green-200 rounded-lg p-4 mb-6">
                    <p class="text-green-800">
                        <i class="fas fa-info-circle mr-2"></i>
                        You will be automatically checked out when the program ends.
                    </p>
                </div>
                
                <div class="flex flex-col sm:flex-row gap-3 justify-center">
                    <a href="attendance.php" class="px-6 py-3 btn-gradient text-white rounded-lg font-semibold">
                        <i class="fas fa-redo mr-2"></i>New Check-In
                    </a>
                    <a href="index.php" class="px-6 py-3 bg-gray-200 text-gray-700 rounded-lg font-semibold hover:bg-gray-300">
                        <i class="fas fa-home mr-2"></i>Go Home
                    </a>
                </div>
            </div>
            
            <?php elseif ($step === 'admin_dashboard'): ?>
            <!-- Admin Dashboard - Redirect to full admin page -->
            <?php 
            header('Location: attendance-admin.php?code=' . urlencode($_SESSION['temp_admin_code'] ?? ''));
            exit();
            ?>
            
            <?php endif; ?>
            
        </div>
    </main>

    <!-- Footer -->
    <footer class="bg-gray-800 text-white py-6 mt-auto">
        <div class="container mx-auto px-4 text-center">
            <p class="text-gray-400 text-sm">
                © <?php echo date('Y'); ?> <?php echo htmlspecialchars($settings['site_title']); ?>
            </p>
        </div>
    </footer>

    <?php 
    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