Sindbad~EG File Manager

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

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

if (!isSuperuser()) {
    die("Access denied. Superuser access required.");
}

echo "<h2>Generate Test Member Codes</h2>";

try {
    $db = Database::getInstance()->getConnection();
    
    // Function to generate barcode
    function generateBarcode($code) {
        // Create PNG image using GD
        $width = 200;
        $height = 50;
        $image = imagecreate($width, $height);
        
        // Colors
        $white = imagecolorallocate($image, 255, 255, 255);
        $black = imagecolorallocate($image, 0, 0, 0);
        
        // Fill background
        imagefill($image, 0, 0, $white);
        
        // Generate barcode pattern based on code
        $codeLength = strlen($code);
        $barWidth = 2;
        $x = 10;
        
        for ($i = 0; $i < $codeLength; $i++) {
            $char = ord($code[$i]);
            $pattern = $char % 4; // Simple pattern based on character
            
            for ($j = 0; $j < 3; $j++) {
                $width = ($pattern & (1 << $j)) ? 3 : 1;
                imagefilledrectangle($image, $x, 5, $x + $width, 35, $black);
                $x += $width + 1;
            }
        }
        
        // Add text
        imagestring($image, 2, 10, 37, substr($code, 0, 20), $black);
        
        // Convert to base64
        ob_start();
        imagepng($image);
        $imageData = ob_get_contents();
        ob_end_clean();
        imagedestroy($image);
        
        return "data:image/png;base64," . base64_encode($imageData);
    }
    
    // Function to generate QR code
    function generateQRCode($code) {
        // Create PNG image using GD
        $size = 100;
        $image = imagecreate($size, $size);
        
        // Colors
        $white = imagecolorallocate($image, 255, 255, 255);
        $black = imagecolorallocate($image, 0, 0, 0);
        
        // Fill background
        imagefill($image, 0, 0, $white);
        
        // Generate QR-like pattern based on code
        $codeHash = md5($code);
        $blockSize = 5;
        
        // Corner markers
        imagefilledrectangle($image, 5, 5, 30, 30, $black);
        imagefilledrectangle($image, 70, 5, 95, 30, $black);
        imagefilledrectangle($image, 5, 70, 30, 95, $black);
        
        // Inner corner markers (white)
        imagefilledrectangle($image, 10, 10, 25, 25, $white);
        imagefilledrectangle($image, 75, 10, 90, 25, $white);
        imagefilledrectangle($image, 10, 75, 25, 90, $white);
        
        // Center dots
        imagefilledrectangle($image, 15, 15, 20, 20, $black);
        imagefilledrectangle($image, 80, 15, 85, 20, $black);
        imagefilledrectangle($image, 15, 80, 20, 85, $black);
        
        // Data pattern based on hash
        for ($i = 0; $i < 32; $i++) {
            $hexChar = hexdec($codeHash[$i]);
            for ($bit = 0; $bit < 4; $bit++) {
                if ($hexChar & (1 << $bit)) {
                    $x = 35 + (($i * 2 + $bit) % 6) * $blockSize;
                    $y = 35 + floor(($i * 2 + $bit) / 6) * $blockSize;
                    if ($x < 95 && $y < 95) {
                        imagefilledrectangle($image, $x, $y, $x + $blockSize - 1, $y + $blockSize - 1, $black);
                    }
                }
            }
        }
        
        // Convert to base64
        ob_start();
        imagepng($image);
        $imageData = ob_get_contents();
        ob_end_clean();
        imagedestroy($image);
        
        return "data:image/png;base64," . base64_encode($imageData);
    }
    
    // Get first 5 members without codes
    $stmt = $db->query("
        SELECT m.id, m.first_name, m.last_name 
        FROM members m 
        LEFT JOIN memberuser_codes mc ON m.id = mc.member_id AND mc.code_type = 'member'
        WHERE m.is_active = 1 AND mc.id IS NULL
        LIMIT 5
    ");
    $members = $stmt->fetchAll();
    
    if (empty($members)) {
        echo "<p style='color: orange;'>No members found without codes, or all members already have codes.</p>";
        echo "<p><a href='modules/membership/cards.php'>← Back to Cards</a></p>";
        exit;
    }
    
    // Get default event
    $eventStmt = $db->prepare("SELECT id FROM events WHERE name = 'Attendance' AND is_active = 1 LIMIT 1");
    $eventStmt->execute();
    $defaultEvent = $eventStmt->fetch();
    $eventId = $defaultEvent ? $defaultEvent['id'] : null;
    
    $generated = 0;
    
    foreach ($members as $member) {
        try {
            // Generate unique tracking code
            do {
                $trackingCode = 'MEM' . date('Y') . str_pad(mt_rand(1, 999999), 6, '0', STR_PAD_LEFT);
                $checkStmt = $db->prepare("SELECT id FROM memberuser_codes WHERE tracking_code = :code");
                $checkStmt->execute(['code' => $trackingCode]);
            } while ($checkStmt->fetch());
            
            $code = 'MC' . date('Ymd') . str_pad($member['id'], 4, '0', STR_PAD_LEFT) . mt_rand(100, 999);
            $barcode = generateBarcode($trackingCode);
            $qrcode = generateQRCode($trackingCode);
            
            // Insert member code
            $codeStmt = $db->prepare("
                INSERT INTO memberuser_codes (
                    code, description, member_id, event_id, code_type, tracking_code,
                    barcode, qrcode, created_by, is_active
                ) VALUES (
                    :code, :description, :member_id, :event_id, 'member', :tracking_code,
                    :barcode, :qrcode, :created_by, 1
                )
            ");
            
            $codeStmt->execute([
                'code' => $code,
                'description' => 'Test member tracking code',
                'member_id' => $member['id'],
                'event_id' => $eventId,
                'tracking_code' => $trackingCode,
                'barcode' => $barcode,
                'qrcode' => $qrcode,
                'created_by' => $_SESSION['user_id']
            ]);
            
            echo "<p style='color: green;'>✅ Generated code for {$member['first_name']} {$member['last_name']}: {$trackingCode}</p>";
            $generated++;
            
        } catch (Exception $e) {
            echo "<p style='color: red;'>❌ Error generating code for {$member['first_name']} {$member['last_name']}: " . $e->getMessage() . "</p>";
        }
    }
    
    echo "<hr>";
    echo "<p style='color: blue;'><strong>Generated {$generated} test codes successfully!</strong></p>";
    echo "<p><a href='modules/membership/cards.php'>← Go to Cards Page</a> | <a href='modules/membership/codes.php'>Codes Management</a></p>";
    
} catch (Exception $e) {
    echo "<p style='color: red;'>Database error: " . $e->getMessage() . "</p>";
}
?>

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