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