Sindbad~EG File Manager
<?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