.voucher { width: 250px; background: #fff; padding: 10px; border: 1px solid #ccc; font-family: "Courier New", Courier, monospace; color: #000; } .header { text-align: center; font-weight: bold; margin-bottom: 5px; font-size: 14px; } .row { display: flex; justify-content: space-between; margin-bottom: 2px; font-size: 12px; } .code { font-size: 16px; font-weight: bold; text-align: center; margin: 10px 0; border: 1px dashed #000; padding: 5px; } .qr { text-align: center; margin-top: 5px; }
{{server_name}}
Profile: {{profile}}
Valid: {{validity}}
Price: {{price}}
User: {{username}}
Pass: {{password}}
{{qrcode}}
Login: http://{{dns_name}}/login
'; } public static function getMockContent($content) { if (empty($content)) return ''; // Dummy Data $dummyData = [ '{{server_name}}' => 'Hotspot', '{{dns_name}}' => 'hotspot.lan', '{{username}}' => 'u-5829', '{{password}}' => '5912', '{{price}}' => '5.000', '{{validity}}' => '12 Hours', '{{profile}}' => 'Small-Packet', '{{time_limit}}' => '12h', '{{data_limit}}' => '1 GB', '{{ip_address}}' => '192.168.88.254', '{{mac_address}}' => 'AA:BB:CC:DD:EE:FF', '{{comment}}' => 'Thank You', '{{copyright}}' => 'Mivo', ]; $content = str_replace(array_keys($dummyData), array_values($dummyData), $content); // QR Code replacement - Using canvas for client-side rendering with QRious $content = preg_replace('/\{\{\s*qrcode\s*(.*?)\s*\}\}/i', '', $content); return $content; } public static function getPreviewPage($content) { $mockContent = self::getMockContent($content); return '
' . $mockContent . '
'; } }