connect_error) { die("Connection failed: " . $conn->connect_error); } // Set timezone date_default_timezone_set('Asia/Kolkata'); // Base URL - Live site ke liye pbsos.org use karein define('BASE_URL', 'https://pbsos.org/'); // Upload paths define('UPLOAD_PATH', 'uploads/'); define('PHOTO_PATH', 'uploads/photos/'); define('CERTIFICATE_PATH', 'uploads/certificates/'); define('BACKGROUND_PATH', 'uploads/backgrounds/'); // Create directories if not exist $dirs = [UPLOAD_PATH, PHOTO_PATH, CERTIFICATE_PATH, BACKGROUND_PATH]; foreach ($dirs as $dir) { if (!file_exists($dir)) { mkdir($dir, 0777, true); } } // Start session if (session_status() === PHP_SESSION_NONE) { session_start(); } // Function to check if user is logged in function isLoggedIn() { return isset($_SESSION['user_id']); } // Function to redirect if not logged in function requireLogin() { if (!isLoggedIn()) { header('Location: login.php'); exit; } } // Function to log activity function logActivity($action, $details = '') { global $conn; $user_id = $_SESSION['user_id'] ?? null; $stmt = $conn->prepare("INSERT INTO activity_log (user_id, action, details) VALUES (?, ?, ?)"); $stmt->bind_param("iss", $user_id, $action, $details); $stmt->execute(); $stmt->close(); } // Function to get counts function getCount($table, $condition = '') { global $conn; $sql = "SELECT COUNT(*) as count FROM $table"; if ($condition) { $sql .= " WHERE $condition"; } $result = $conn->query($sql); $row = $result->fetch_assoc(); return $row['count']; } // FIX: Optimized registration number generator (Duplicate Entry Error Fix) function generateRegNo($conn) { $year = date('Y'); // Increment existing or insert new using ON DUPLICATE KEY $stmt = $conn->prepare("INSERT INTO counters (counter_type, last_number, year) VALUES ('registration', 1, ?) ON DUPLICATE KEY UPDATE last_number = last_number + 1"); $stmt->bind_param("i", $year); $stmt->execute(); $stmt->close(); // Get the updated number $result = $conn->query("SELECT last_number FROM counters WHERE counter_type='registration'"); $row = $result->fetch_assoc(); $last_number = $row['last_number']; // Format: PB550 + year + 4-digit sequence $sequence = str_pad($last_number, 4, '0', STR_PAD_LEFT); return "PB550" . substr($year, -2) . $sequence; } // FIX: Optimized roll number generator (Duplicate Entry Error Fix) function generateRollNo($conn, $admission_date, $class) { $year = date('Y', strtotime($admission_date)); $counter_type = 'roll_' . $class; // Increment existing or insert new using ON DUPLICATE KEY $stmt = $conn->prepare("INSERT INTO counters (counter_type, last_number, year) VALUES (?, 1, ?) ON DUPLICATE KEY UPDATE last_number = last_number + 1"); $stmt->bind_param("si", $counter_type, $year); $stmt->execute(); $stmt->close(); // Get the updated number $result = $conn->query("SELECT last_number FROM counters WHERE counter_type='$counter_type'"); $row = $result->fetch_assoc(); $last_number = $row['last_number']; // Format: Class + Year + 55 + 3-digit sequence $sequence = str_pad($last_number, 3, '0', STR_PAD_LEFT); return $class . substr($year, -2) . "55" . $sequence; } // Get current user info function getCurrentUser() { global $conn; if (isset($_SESSION['user_id'])) { $user_id = intval($_SESSION['user_id']); $result = $conn->query("SELECT * FROM users WHERE id = $user_id"); return $result->fetch_assoc(); } return null; } ?>