// System Info configuration types and constants export interface SystemRequirement { name: string required: string current: string status: 'pass' | 'warning' | 'fail' description?: string } export interface SystemCategory { title: string icon: string items: SystemRequirement[] } export interface SystemInfo { wordpress: { version: string multisite: boolean memoryLimit: string debugMode: boolean cron: boolean language: string timezone: string permalinkStructure: string } php: { version: string memoryLimit: string maxExecutionTime: string maxInputVars: string postMaxSize: string uploadMaxFilesize: string safeMode: boolean openBasedir: boolean extensions: string[] disabledFunctions: string[] } mysql: { version: string maxConnections: string maxPacketSize: string storageEngine: string } server: { software: string serverProtocol: string documentRoot: string serverAddress: string } woocommerce: { version: string databaseVersion: string currency: string currencyPosition: string thousandSeparator: string decimalSeparator: string productsCount: number ordersCount: number } swiftCommerce: { version: string proVersion: string featuresEnabled: string[] } } // Minimum requirements for the plugin export const minimumRequirements = { php: { version: '7.4', memoryLimit: '128M', maxExecutionTime: '30', maxInputVars: '1000', postMaxSize: '32M', uploadMaxFilesize: '32M', }, wordpress: { version: '5.8', memoryLimit: '64M', }, mysql: { version: '5.6', }, woocommerce: { version: '5.0', }, } // Required PHP extensions export const requiredExtensions = [ 'curl', 'json', 'mbstring', 'openssl', 'xml', 'zip', ] // Recommended PHP extensions export const recommendedExtensions = [ 'gd', 'imagick', 'intl', 'soap', 'sodium', ] // Helper function to compare versions export function compareVersions(current: string, required: string): 'pass' | 'warning' | 'fail' { const currentParts = current.replace(/[^0-9.]/g, '').split('.').map(Number) const requiredParts = required.replace(/[^0-9.]/g, '').split('.').map(Number) for (let i = 0; i < Math.max(currentParts.length, requiredParts.length); i++) { const curr = currentParts[i] || 0 const req = requiredParts[i] || 0 if (curr > req) return 'pass' if (curr < req) return 'fail' } return 'pass' } // Helper function to compare memory values export function compareMemory(current: string, required: string): 'pass' | 'warning' | 'fail' { const parseMemory = (value: string): number => { const num = parseInt(value) const unit = value.replace(/[0-9]/g, '').toUpperCase() switch (unit) { case 'G': case 'GB': return num * 1024 case 'M': case 'MB': return num case 'K': case 'KB': return num / 1024 default: return num } } const currentVal = parseMemory(current) const requiredVal = parseMemory(required) if (currentVal >= requiredVal) return 'pass' if (currentVal >= requiredVal * 0.75) return 'warning' return 'fail' }