Sindbad~EG File Manager
<?php
require_once '../config/config.php';
require_once '../classes/EventManager.php';
// Check member authentication
if (!isset($_SESSION['member_id'])) {
redirect('../login.php');
}
$pageTitle = "Event Check-in - " . APP_NAME;
$db = Database::getInstance()->getConnection();
$eventManager = new EventManager();
$success = '';
$error = '';
$memberId = $_SESSION['member_id'];
$selectedEventId = $_GET['event_id'] ?? null;
$autoCheckin = $_GET['auto_checkin'] ?? 0;
// Get member info
$memberStmt = $db->prepare("SELECT * FROM members WHERE id = :id");
$memberStmt->execute(['id' => $memberId]);
$member = $memberStmt->fetch();
// Handle check-in
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['checkin'])) {
try {
$eventId = $_POST['event_id'];
// Check if already checked in
$checkStmt = $db->prepare("SELECT id FROM event_attendance WHERE event_id = :event_id AND member_id = :member_id");
$checkStmt->execute(['event_id' => $eventId, 'member_id' => $memberId]);
if ($checkStmt->fetch()) {
$error = "You are already checked in to this event";
} else {
// Record attendance
$attendStmt = $db->prepare("
INSERT INTO event_attendance (
event_id, member_id, first_name, last_name, attendance_type, check_in_time
) VALUES (
:event_id, :member_id, :first_name, :last_name, 'walk_in', NOW()
)
");
$attendStmt->execute([
'event_id' => $eventId,
'member_id' => $memberId,
'first_name' => $member['first_name'],
'last_name' => $member['last_name']
]);
$success = "Successfully checked in!";
$selectedEventId = $eventId;
}
} catch (Exception $e) {
$error = "Error: " . $e->getMessage();
}
}
// Handle check-out
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['checkout'])) {
try {
$eventId = $_POST['event_id'];
// Update attendance record with check-out time
$checkoutStmt = $db->prepare("
UPDATE event_attendance
SET check_out_time = NOW()
WHERE event_id = :event_id
AND member_id = :member_id
AND check_out_time IS NULL
");
$checkoutStmt->execute([
'event_id' => $eventId,
'member_id' => $memberId
]);
if ($checkoutStmt->rowCount() > 0) {
$success = "Successfully checked out!";
$selectedEventId = $eventId;
} else {
$error = "Unable to check out. You may not be checked in or already checked out.";
}
} catch (Exception $e) {
$error = "Error: " . $e->getMessage();
}
}
// Get active events
$events = $eventManager->getEvents(['active' => true]);
$selectedEvent = null;
$isCheckedIn = false;
$isCheckedOut = false;
$checkinRecord = null;
if ($selectedEventId) {
$selectedEvent = $eventManager->getEventById($selectedEventId);
// Check if member is already checked in
$checkStmt = $db->prepare("SELECT * FROM event_attendance WHERE event_id = :event_id AND member_id = :member_id");
$checkStmt->execute(['event_id' => $selectedEventId, 'member_id' => $memberId]);
$checkinRecord = $checkStmt->fetch();
if ($checkinRecord) {
$isCheckedIn = true;
$isCheckedOut = !empty($checkinRecord['check_out_time']);
}
// Handle automatic check-in from public page
if ($autoCheckin == 1 && !$isCheckedIn && $selectedEvent) {
try {
// Automatically record attendance
$autoAttendStmt = $db->prepare("
INSERT INTO event_attendance (
event_id, member_id, first_name, last_name, attendance_type, check_in_time
) VALUES (
:event_id, :member_id, :first_name, :last_name, 'walk_in', NOW()
)
");
$autoAttendStmt->execute([
'event_id' => $selectedEventId,
'member_id' => $memberId,
'first_name' => $member['first_name'],
'last_name' => $member['last_name']
]);
$success = "Welcome! You have been automatically checked in to " . htmlspecialchars($selectedEvent['name']);
// Refresh check-in status
$checkStmt->execute(['event_id' => $selectedEventId, 'member_id' => $memberId]);
$checkinRecord = $checkStmt->fetch();
$isCheckedIn = true;
$isCheckedOut = false;
// Redirect to remove auto_checkin parameter
header("Location: event-checkin.php?event_id=" . $selectedEventId);
exit;
} catch (Exception $e) {
$error = "Auto check-in failed: " . $e->getMessage();
}
}
}
// 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>
.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 12px 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="profile.php" class="text-gray-700 hover:text-blue-600 transition">
<i class="fas fa-user mr-1"></i>Profile
</a>
<a href="messages.php" class="text-gray-700 hover:text-blue-600 transition">
<i class="fas fa-comments mr-1"></i>Messages
</a>
<a href="event-checkin.php" class="text-green-600 font-medium border-b-2 border-green-600 pb-1">
<i class="fas fa-qrcode mr-1"></i>Event Check-in
</a>
<a href="transfer_request.php" class="text-gray-700 hover:text-blue-600 transition">
<i class="fas fa-exchange-alt mr-1"></i>Transfer
</a>
</nav>
<div class="flex items-center space-x-3">
<span class="text-sm text-gray-600 hidden md:block">Welcome, <?php echo htmlspecialchars($member['first_name'] ?? 'Member'); ?></span>
<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>
<!-- Main Content -->
<div class="container mx-auto px-4 py-8">
<div class="max-w-4xl mx-auto">
<!-- Header -->
<div class="mb-6">
<h1 class="text-3xl font-bold" style="background: linear-gradient(135deg, #1E40AF 0%, #9333EA 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent;">
<i class="fas fa-qrcode mr-2"></i>Event Check-in
</h1>
<p class="text-gray-600 mt-2">Check in to events and view your QR code</p>
</div>
<?php if ($success): ?>
<div class="bg-green-100 border border-green-400 text-green-700 px-4 py-3 rounded-lg mb-6 flex items-center">
<i class="fas fa-check-circle mr-2"></i><?php echo $success; ?>
</div>
<?php endif; ?>
<?php if ($error): ?>
<div class="bg-red-100 border border-red-400 text-red-700 px-4 py-3 rounded-lg mb-6 flex items-center">
<i class="fas fa-exclamation-circle mr-2"></i><?php echo $error; ?>
</div>
<?php endif; ?>
<!-- Event Selection -->
<div class="bg-white rounded-xl shadow-lg p-6 mb-6">
<h3 class="text-lg font-semibold mb-4">Select Event</h3>
<form method="GET" class="space-y-4">
<select name="event_id" class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500" onchange="this.form.submit()">
<option value="">Choose an event...</option>
<?php foreach ($events as $event): ?>
<option value="<?php echo $event['id']; ?>" <?php echo $selectedEventId == $event['id'] ? 'selected' : ''; ?>>
<?php echo htmlspecialchars($event['name']) . ' - ' . date('M j, Y', strtotime($event['start_date'])); ?>
</option>
<?php endforeach; ?>
</select>
</form>
</div>
<?php if ($selectedEvent): ?>
<!-- Event Details -->
<div class="bg-white rounded-xl shadow-lg p-6 mb-6">
<div class="flex items-start justify-between mb-4">
<div>
<h3 class="text-xl font-bold text-gray-800"><?php echo htmlspecialchars($selectedEvent['name']); ?></h3>
<p class="text-gray-600 mt-2"><?php echo htmlspecialchars($selectedEvent['description']); ?></p>
</div>
<?php if ($isCheckedIn): ?>
<?php if ($isCheckedOut): ?>
<span class="px-4 py-2 bg-blue-100 text-blue-800 rounded-full text-sm font-medium">
<i class="fas fa-sign-out-alt mr-1"></i>Checked Out
</span>
<?php else: ?>
<span class="px-4 py-2 bg-green-100 text-green-800 rounded-full text-sm font-medium">
<i class="fas fa-check-circle mr-1"></i>Checked In
</span>
<?php endif; ?>
<?php endif; ?>
</div>
<div class="flex flex-wrap gap-4 text-sm text-gray-600">
<span><i class="fas fa-calendar mr-1"></i><?php echo date('F j, Y', strtotime($selectedEvent['start_date'])); ?></span>
<span><i class="fas fa-clock mr-1"></i><?php echo date('g:i A', strtotime($selectedEvent['start_date'])); ?></span>
<span><i class="fas fa-map-marker-alt mr-1"></i><?php echo ucfirst($selectedEvent['location_type']); ?></span>
</div>
</div>
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
<!-- QR Code Section -->
<div class="bg-white rounded-xl shadow-lg p-6">
<h4 class="text-lg font-semibold mb-4 text-center">Your Check-in QR Code</h4>
<div class="flex flex-col items-center space-y-4">
<div id="memberQRCode" class="bg-gray-50 p-6 rounded-lg">
<!-- QR Code will be generated here -->
</div>
<div class="text-center">
<p class="text-sm text-gray-600">Scan this QR code at the event</p>
<p class="text-xs text-gray-500 mt-1">Or use code: <span class="font-mono font-bold"><?php echo $member['membershipcard_id']; ?></span></p>
</div>
</div>
</div>
<!-- Check-in/Check-out Action -->
<div class="bg-white rounded-xl shadow-lg p-6">
<h4 class="text-lg font-semibold mb-4">Event Status</h4>
<?php if ($isCheckedIn): ?>
<?php if ($isCheckedOut): ?>
<!-- Already Checked Out -->
<div class="bg-blue-50 border border-blue-200 rounded-lg p-6 text-center">
<i class="fas fa-sign-out-alt text-5xl text-blue-500 mb-4"></i>
<h5 class="text-lg font-semibold text-gray-800 mb-2">Checked Out</h5>
<div class="space-y-1 text-sm text-gray-600">
<p>
<i class="fas fa-sign-in-alt mr-1"></i>
Check-in: <?php echo date('M j, Y g:i A', strtotime($checkinRecord['check_in_time'])); ?>
</p>
<p>
<i class="fas fa-sign-out-alt mr-1"></i>
Check-out: <?php echo date('M j, Y g:i A', strtotime($checkinRecord['check_out_time'])); ?>
</p>
</div>
</div>
<?php else: ?>
<!-- Checked In - Can Check Out -->
<div class="bg-green-50 border border-green-200 rounded-lg p-6 text-center">
<i class="fas fa-check-circle text-5xl text-green-500 mb-4"></i>
<h5 class="text-lg font-semibold text-gray-800 mb-2">Checked In</h5>
<p class="text-sm text-gray-600 mb-4">
<i class="fas fa-clock mr-1"></i>
Checked in at: <?php echo date('M j, Y g:i A', strtotime($checkinRecord['check_in_time'])); ?>
</p>
<form method="POST" onsubmit="return confirm('Are you sure you want to check out?');">
<input type="hidden" name="event_id" value="<?php echo $selectedEventId; ?>">
<button type="submit" name="checkout" class="w-full px-6 py-4 rounded-lg text-white font-semibold text-lg shadow-lg hover:shadow-xl transition" style="background: linear-gradient(135deg, #DC2626 0%, #F97316 100%);">
<i class="fas fa-sign-out-alt mr-2"></i>Check Out Now
</button>
</form>
</div>
<?php endif; ?>
<?php else: ?>
<!-- Not Checked In -->
<div class="space-y-4">
<p class="text-gray-600">Click the button below to check in to this event now.</p>
<form method="POST">
<input type="hidden" name="event_id" value="<?php echo $selectedEventId; ?>">
<button type="submit" name="checkin" class="w-full px-6 py-4 rounded-lg text-white font-semibold text-lg shadow-lg hover:shadow-xl transition" style="background: linear-gradient(135deg, #1E40AF 0%, #F97316 100%);">
<i class="fas fa-check-circle mr-2"></i>Check In Now
</button>
</form>
<div class="text-center text-sm text-gray-500">
<p>Member: <?php echo htmlspecialchars($member['first_name'] . ' ' . $member['last_name']); ?></p>
<p>Card ID: <?php echo htmlspecialchars($member['membershipcard_id']); ?></p>
</div>
</div>
<?php endif; ?>
</div>
</div>
<?php endif; ?>
</div>
</div>
<!-- Footer -->
<footer class="bg-gray-800 text-white py-6 mt-12">
<div class="container mx-auto px-4 text-center">
<p class="text-sm text-gray-400">
© <?php echo date('Y'); ?> <?php echo htmlspecialchars($settings['site_title']); ?>. All rights reserved.
</p>
</div>
</footer>
<script>
function generateMemberQRCode() {
const memberId = '<?php echo $member['membershipcard_id']; ?>';
const eventId = <?php echo $selectedEventId ?? 'null'; ?>;
if (!eventId) return;
// Generate QR code with member tracking code for scanning
const qrData = `CHECKIN:${eventId}:MEMBER:${memberId}`;
const qrUrl = `https://api.qrserver.com/v1/create-qr-code/?size=200x200&data=${encodeURIComponent(qrData)}`;
document.getElementById('memberQRCode').innerHTML = `<img src="${qrUrl}" alt="Member QR Code" class="w-48 h-48">`;
}
// Generate QR code on page load if event is selected
<?php if ($selectedEventId): ?>
generateMemberQRCode();
<?php endif; ?>
</script>
<?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