Sindbad~EG File Manager

Current Path : /home/copmadinaarea/thecopmadinaarea.org/portal/modules/membership/
Upload File :
Current File : /home/copmadinaarea/thecopmadinaarea.org/portal/modules/membership/cards.php

<?php
require_once '../../config/config.php';
checkLogin();

$pageTitle = "Membership Cards - " . APP_NAME;
$db = Database::getInstance()->getConnection();
$membershipCard = new MembershipCard();

$success = '';
$error = '';
$selectedCard = null;

// Handle card generation
if (isset($_POST['generate_card'])) {
    $memberId = $_POST['member_id'];
    $result = $membershipCard->createCard($memberId);
    
    if ($result['success']) {
        $success = $result['message'];
        $selectedCard = $membershipCard->getCardByMember($memberId);
    } else {
        $error = $result['message'];
    }
}

// Handle card view
if (isset($_GET['member_id'])) {
    $selectedCard = $membershipCard->getCardByMember($_GET['member_id']);
}

// Handle card print
if (isset($_POST['mark_printed'])) {
    $membershipCard->markAsPrinted($_POST['card_id']);
    $success = "Card marked as printed!";
}

// Get all members for selection
$accessLevel = $_SESSION['access_level'] ?? 'assembly';
$areaId = $_SESSION['area_id'] ?? null;
$districtId = $_SESSION['district_id'] ?? null;
$assemblyId = $_SESSION['assembly_id'] ?? null;

// Check if membershipcard_id column exists
$columnExists = false;
try {
    $checkStmt = $db->query("SHOW COLUMNS FROM members LIKE 'membershipcard_id'");
    $columnExists = $checkStmt->fetch() !== false;
} catch (PDOException $e) {
    // Column doesn't exist
}

$memberIdField = $columnExists ? 'm.membershipcard_id' : 'CONCAT("MC", YEAR(CURDATE()), LPAD(m.id, 6, "0")) as membershipcard_id';
$memberQuery = "SELECT m.id, {$memberIdField}, m.first_name, m.last_name, m.profile_photo,
                       a.area_name, d.district_name, asm.assembly_name,
                       (SELECT COUNT(*) FROM membership_cards WHERE member_id = m.id AND is_active = 1) as has_card
                FROM members m
                JOIN areas a ON m.area_id = a.id
                JOIN districts d ON m.district_id = d.id
                JOIN assemblies asm ON m.assembly_id = asm.id
                WHERE 1=1";
$params = [];

if ($accessLevel === 'assembly') {
    $memberQuery .= " AND m.assembly_id = :assembly_id";
    $params['assembly_id'] = $assemblyId;
} elseif ($accessLevel === 'district') {
    $memberQuery .= " AND m.district_id = :district_id";
    $params['district_id'] = $districtId;
} elseif ($accessLevel === 'area') {
    $memberQuery .= " AND m.area_id = :area_id";
    $params['area_id'] = $areaId;
}

$memberQuery .= " ORDER BY m.first_name, m.last_name";

// Check if tables exist
try {
    $stmt = $db->prepare($memberQuery);
    $stmt->execute($params);
    $members = $stmt->fetchAll();
} catch (PDOException $e) {
    $members = [];
    $error = "Database not set up properly. Please run the installer first.";
}

include '../../includes/header.php';
?>

<?php include '../../includes/sidebar.php'; ?>

<!-- Main Content -->
<main class="flex-1 md:ml-64 mt-16">
<div class="container mx-auto px-4 py-8">
    <div class="mb-6">
        <h1 class="text-3xl font-bold text-gray-800">
            <i class="fas fa-id-card mr-2 text-blue-500"></i>Membership Cards
        </h1>
        <p class="text-gray-600 mt-2">Generate and manage member ID cards and codes</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">
            <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">
            <i class="fas fa-exclamation-circle mr-2"></i><?php echo $error; ?>
        </div>
    <?php endif; ?>
    
    <!-- Membership Cards Content -->
        <div class="grid grid-cols-1 lg:grid-cols-3 gap-6">
        <!-- Member Selection -->
        <div class="lg:col-span-1">
            <div class="bg-white rounded-xl shadow-lg p-6">
                <h3 class="text-xl font-bold text-gray-800 mb-4">
                    <i class="fas fa-users mr-2 text-blue-500"></i>Select Member
                </h3>
                
                <div class="mb-4">
                    <input type="text" id="searchMember" placeholder="Search members..." 
                           class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500">
                </div>
                
                <div class="space-y-2 max-h-96 overflow-y-auto" id="memberList">
                    <?php foreach ($members as $member): ?>
                        <div class="member-item p-3 border rounded-lg hover:bg-blue-50 cursor-pointer transition <?php echo $member['has_card'] ? 'bg-green-50' : ''; ?>"
                             onclick="viewCard(<?php echo $member['id']; ?>)">
                            <div class="flex items-center justify-between">
                                <div class="flex items-center space-x-3">
                                    <img src="<?php echo !empty($member['profile_photo']) ? BASE_URL . 'uploads/members/' . $member['profile_photo'] : BASE_URL . 'assets/images/default-avatar.png'; ?>" 
                                         class="w-10 h-10 rounded-full object-cover">
                                    <div>
                                        <div class="font-semibold text-sm">
                                            <?php echo htmlspecialchars($member['first_name'] . ' ' . $member['last_name']); ?>
                                        </div>
                                        <div class="text-xs text-gray-500"><?php echo htmlspecialchars($member['membershipcard_id']); ?></div>
                                    </div>
                                </div>
                                <?php if ($member['has_card']): ?>
                                    <span class="text-green-600"><i class="fas fa-check-circle"></i></span>
                                <?php else: ?>
                                    <span class="text-gray-400"><i class="fas fa-id-card"></i></span>
                                <?php endif; ?>
                            </div>
                        </div>
                    <?php endforeach; ?>
                </div>
            </div>
        </div>
        
        <!-- Card Display -->
        <div class="lg:col-span-2">
            <?php if ($selectedCard): ?>
                <!-- Membership Card -->
                <div class="bg-white rounded-xl shadow-lg p-6 mb-6">
                    <div class="flex justify-between items-center mb-4">
                        <h3 class="text-xl font-bold text-gray-800">Membership Card</h3>
                        <div class="space-x-2">
                            <button onclick="printCard()" class="bg-blue-500 text-white px-4 py-2 rounded-lg hover:bg-blue-600 transition">
                                <i class="fas fa-print mr-2"></i>Print
                            </button>
                            <form method="POST" class="inline">
                                <input type="hidden" name="card_id" value="<?php echo $selectedCard['id']; ?>">
                                <button type="submit" name="mark_printed" class="bg-green-500 text-white px-4 py-2 rounded-lg hover:bg-green-600 transition">
                                    <i class="fas fa-check mr-2"></i>Mark Printed
                                </button>
                            </form>
                        </div>
                    </div>
                    
                    <!-- Card Preview -->
                    <div id="membershipCard" class="mx-auto" style="width: 3.375in; height: 2.125in;">
                        <!-- Front of Card -->
                        <div class="relative bg-gradient-to-br from-blue-600 via-blue-500 to-yellow-400 rounded-xl shadow-2xl p-6 text-white" style="height: 2.125in;">
                            <!-- Church Logo/Header -->
                            <div class="absolute top-0 left-0 right-0 bg-white bg-opacity-20 p-3 rounded-t-xl">
                                <div class="flex items-center justify-between">
                                    <div>
                                        <i class="fas fa-church text-2xl"></i>
                                    </div>
                                    <div class="text-right">
                                        <div class="text-xs font-bold"><?php echo APP_NAME; ?></div>
                                        <div class="text-xs"><?php echo htmlspecialchars($selectedCard['area_name']); ?></div>
                                    </div>
                                </div>
                            </div>
                            
                            <!-- Member Photo and Info -->
                            <div class="flex items-center space-x-4 mt-16">
                                <img src="<?php echo !empty($selectedCard['profile_photo']) ? BASE_URL . 'uploads/members/' . $selectedCard['profile_photo'] : BASE_URL . 'assets/images/default-avatar.png'; ?>" 
                                     class="w-20 h-20 rounded-full border-4 border-white object-cover">
                                <div class="flex-1">
                                    <div class="text-xl font-bold">
                                        <?php echo htmlspecialchars($selectedCard['first_name'] . ' ' . $selectedCard['last_name']); ?>
                                    </div>
                                    <div class="text-sm opacity-90">Member ID: <?php echo htmlspecialchars($selectedCard['member_number']); ?></div>
                                    <div class="text-sm opacity-90"><?php echo htmlspecialchars($selectedCard['assembly_name']); ?></div>
                                </div>
                            </div>
                            
                            <!-- Card Number -->
                            <div class="absolute bottom-3 left-0 right-0 px-6">
                                <div class="flex justify-between items-center text-xs">
                                    <div>
                                        <div class="opacity-75">Card No:</div>
                                        <div class="font-mono font-bold"><?php echo htmlspecialchars($selectedCard['card_number']); ?></div>
                                    </div>
                                    <div class="text-right">
                                        <div class="opacity-75">Valid Until:</div>
                                        <div class="font-bold"><?php echo date('m/Y', strtotime($selectedCard['expiry_date'])); ?></div>
                                    </div>
                                </div>
                            </div>
                        </div>
                        
                        <!-- Card Details Below -->
                        <div class="mt-4 bg-gray-50 rounded-lg p-4 text-sm">
                            <div class="grid grid-cols-2 gap-3">
                                <div>
                                    <span class="text-gray-600">Issue Date:</span>
                                    <span class="font-semibold ml-2"><?php echo date('d/m/Y', strtotime($selectedCard['issue_date'])); ?></span>
                                </div>
                                <div>
                                    <span class="text-gray-600">Status:</span>
                                    <span class="ml-2">
                                        <?php if ($selectedCard['is_active']): ?>
                                            <span class="text-green-600 font-semibold"><i class="fas fa-check-circle"></i> Active</span>
                                        <?php else: ?>
                                            <span class="text-red-600 font-semibold"><i class="fas fa-times-circle"></i> Inactive</span>
                                        <?php endif; ?>
                                    </span>
                                </div>
                                <div>
                                    <span class="text-gray-600">Printed:</span>
                                    <span class="font-semibold ml-2"><?php echo $selectedCard['print_count']; ?> time(s)</span>
                                </div>
                                <?php if ($selectedCard['last_printed']): ?>
                                <div>
                                    <span class="text-gray-600">Last Printed:</span>
                                    <span class="font-semibold ml-2"><?php echo date('d/m/Y', strtotime($selectedCard['last_printed'])); ?></span>
                                </div>
                                <?php endif; ?>
                            </div>
                        </div>
                    </div>
                </div>
            <?php else: ?>
                <!-- No Card Selected -->
                <div class="bg-white rounded-xl shadow-lg p-12 text-center">
                    <i class="fas fa-id-card text-6xl text-gray-300 mb-4"></i>
                    <h3 class="text-xl font-bold text-gray-800 mb-2">No Card Selected</h3>
                    <p class="text-gray-600 mb-6">Select a member from the list to view or generate their membership card</p>
                    
                    <?php if (isset($_GET['member_id'])): ?>
                        <form method="POST">
                            <input type="hidden" name="member_id" value="<?php echo $_GET['member_id']; ?>">
                            <button type="submit" name="generate_card" class="bg-gradient-to-r from-blue-500 to-blue-600 text-white px-6 py-3 rounded-lg hover:from-blue-600 hover:to-blue-700 transition">
                                <i class="fas fa-plus-circle mr-2"></i>Generate Card for This Member
                            </button>
                        </form>
                    <?php endif; ?>
                </div>
            <?php endif; ?>
        </div>
    </div>

</div>
</main>

<script>
    function viewCard(memberId) {
        window.location.href = 'cards.php?member_id=' + memberId;
    }
    
    function printCard() {
        window.print();
    }
    
    
    // Search functionality
    document.getElementById('searchMember').addEventListener('input', function(e) {
        const searchTerm = e.target.value.toLowerCase();
        const members = document.querySelectorAll('.member-item');
        
        members.forEach(member => {
            const text = member.textContent.toLowerCase();
            if (text.includes(searchTerm)) {
                member.style.display = '';
            } else {
                member.style.display = 'none';
            }
        });
    });
</script>

<style>
    @media print {
        body * {
            visibility: hidden;
        }
        #membershipCard, #membershipCard * {
            visibility: visible;
        }
        #membershipCard {
            position: absolute;
            left: 0;
            top: 0;
        }
    }
    
</style>

<?php include '../../includes/footer.php'; ?>

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