Sindbad~EG File Manager

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

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

header('Content-Type: application/json');

$db = Database::getInstance()->getConnection();

try {
    $eventId = $_POST['event_id'] ?? null;
    $trackingCode = $_POST['tracking_code'] ?? null;
    $memberId = $_POST['member_id'] ?? null;
    
    if (!$eventId) {
        throw new Exception('Event ID is required');
    }
    
    // Check if event exists and is active
    $eventStmt = $db->prepare("SELECT id, name, start_date FROM events WHERE id = :id AND is_active = 1");
    $eventStmt->execute(['id' => $eventId]);
    $event = $eventStmt->fetch();
    
    if (!$event) {
        throw new Exception('Event not found or inactive');
    }
    
    $attendeeInfo = [];
    
    // Check-in using tracking code (from memberuser_codes table)
    if ($trackingCode) {
        $codeStmt = $db->prepare("
            SELECT mc.*, 
                   m.first_name as member_first_name, m.last_name as member_last_name, 
                   m.id as member_id, m.membershipcard_id,
                   u.full_name as user_full_name, u.id as user_id
            FROM memberuser_codes mc
            LEFT JOIN members m ON mc.member_id = m.id
            LEFT JOIN users u ON mc.user_id = u.id
            WHERE mc.tracking_code = :code AND mc.is_active = 1
        ");
        $codeStmt->execute(['code' => $trackingCode]);
        $codeData = $codeStmt->fetch();
        
        if (!$codeData) {
            throw new Exception('Invalid or inactive tracking code');
        }
        
        if ($codeData['member_id']) {
            $attendeeInfo = [
                'member_id' => $codeData['member_id'],
                'first_name' => $codeData['member_first_name'],
                'last_name' => $codeData['member_last_name'],
                'membership_card' => $codeData['membershipcard_id'],
                'type' => 'member'
            ];
        } elseif ($codeData['user_id']) {
            $names = explode(' ', $codeData['user_full_name'], 2);
            $attendeeInfo = [
                'user_id' => $codeData['user_id'],
                'first_name' => $names[0] ?? '',
                'last_name' => $names[1] ?? '',
                'type' => 'user'
            ];
        }
        
        // Increment usage count
        $updateStmt = $db->prepare("UPDATE memberuser_codes SET usage_count = usage_count + 1 WHERE id = :id");
        $updateStmt->execute(['id' => $codeData['id']]);
    }
    // Check-in using member_id (logged in member)
    elseif ($memberId) {
        $memberStmt = $db->prepare("SELECT id, first_name, last_name, membershipcard_id FROM members WHERE id = :id");
        $memberStmt->execute(['id' => $memberId]);
        $member = $memberStmt->fetch();
        
        if (!$member) {
            throw new Exception('Member not found');
        }
        
        $attendeeInfo = [
            'member_id' => $member['id'],
            'first_name' => $member['first_name'],
            'last_name' => $member['last_name'],
            'membership_card' => $member['membershipcard_id'],
            'type' => 'member'
        ];
    } else {
        throw new Exception('Tracking code or member ID is required');
    }
    
    // Check if already checked in
    $checkStmt = $db->prepare("
        SELECT id FROM event_attendance 
        WHERE event_id = :event_id 
        AND " . ($attendeeInfo['member_id'] ?? null ? "member_id = :member_id" : "user_id = :user_id") . "
    ");
    
    $checkParams = ['event_id' => $eventId];
    if (isset($attendeeInfo['member_id'])) {
        $checkParams['member_id'] = $attendeeInfo['member_id'];
    } else {
        $checkParams['user_id'] = $attendeeInfo['user_id'];
    }
    
    $checkStmt->execute($checkParams);
    
    if ($checkStmt->fetch()) {
        echo json_encode([
            'success' => true,
            'already_checked_in' => true,
            'message' => 'Already checked in to this event',
            'attendee' => $attendeeInfo
        ]);
        exit;
    }
    
    // Record attendance
    $attendStmt = $db->prepare("
        INSERT INTO event_attendance (
            event_id, member_id, user_id, first_name, last_name, 
            attendance_type, check_in_time
        ) VALUES (
            :event_id, :member_id, :user_id, :first_name, :last_name,
            :attendance_type, NOW()
        )
    ");
    
    $attendStmt->execute([
        'event_id' => $eventId,
        'member_id' => $attendeeInfo['member_id'] ?? null,
        'user_id' => $attendeeInfo['user_id'] ?? null,
        'first_name' => $attendeeInfo['first_name'],
        'last_name' => $attendeeInfo['last_name'],
        'attendance_type' => 'walk_in'
    ]);
    
    echo json_encode([
        'success' => true,
        'message' => 'Successfully checked in to ' . $event['name'],
        'attendee' => $attendeeInfo,
        'event' => [
            'id' => $event['id'],
            'name' => $event['name'],
            'date' => $event['start_date']
        ]
    ]);
    
} catch (Exception $e) {
    echo json_encode([
        'success' => false,
        'message' => $e->getMessage()
    ]);
}
?>

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