["verify_peer" => false, "verify_peer_name" => false]];
$img_data = @file_get_contents($url, false, stream_context_create($arrOpts));
if ($img_data !== false) {
if (class_exists('finfo')) {
$finfo = new finfo(FILEINFO_MIME_TYPE);
$mime_type = $finfo->buffer($img_data);
} else {
$ext = strtolower(pathinfo($url, PATHINFO_EXTENSION));
$mime_type = ($ext === 'svg') ? 'image/svg+xml' : (($ext === 'jpg' || $ext === 'jpeg') ? 'image/jpeg' : 'image/png');
}
header("Content-Type: " . $mime_type);
echo $img_data;
exit;
}
}
http_response_code(404);
exit;
}
// 2. KONEKSI DATABASE
$host = 'localhost'; $db = 'hytravel_travellers77'; $user = 'hytravel_travellers77'; $pass = 'Ewl2547@47'; $charset = 'utf8mb4';
try {
$pdo = new PDO("mysql:host=$host;dbname=$db;charset=$charset", $user, $pass, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC]);
} catch (PDOException $e) { die("DB Error: " . $e->getMessage()); }
// FUNGSI LOGO MASKAPAI
function get_airline_logo($carrier_name) {
$carrier_name = strtolower(trim($carrier_name));
if (empty($carrier_name)) return '';
$map = ['garuda'=>'GA','singapore'=>'SQ','batik'=>'ID','lion'=>'JT','airasia'=>'AK','air asia'=>'AK','citilink'=>'QG','wings'=>'IW','sriwijaya'=>'SJ','malaysia'=>'MH','ana'=>'NH','all nippon'=>'NH','japan'=>'JL','emirates'=>'EK','qatar'=>'QR','cathay'=>'CX','saudia'=>'SV','saudi'=>'SV','thai'=>'TG','scoot'=>'TR','pelita'=>'IP','transnusa'=>'8B'];
foreach ($map as $k => $v) { if (strpos($carrier_name, $k) !== false) return "https://images.kiwi.com/airlines/64/{$v}.png"; }
preg_match('/\b[A-Z0-9]{2}\b/', strtoupper($carrier_name), $m);
$code = !empty($m[0]) ? $m[0] : strtoupper(substr($carrier_name, 0, 2));
return "https://images.kiwi.com/airlines/64/{$code}.png";
}
// 3. AMBIL ID DARI URL
$target_id = $_GET['id'] ?? $_GET['booking_id'] ?? null;
if ($target_id === null) {
try {
$s = $pdo->query("SELECT id FROM invoice_settings ORDER BY id DESC LIMIT 1");
$r = $s->fetch();
$target_id = $r ? (int)$r['id'] : 1;
} catch (Exception $e) { $target_id = 1; }
}
// 4. AMBIL DATA
try {
$stmt = $pdo->prepare("SELECT * FROM invoice_settings WHERE id = ?");
$stmt->execute([$target_id]);
$data = $stmt->fetch();
if (!$data) { $stmt->execute([1]); $data = $stmt->fetch(); }
$stmt_m = $pdo->query("SELECT * FROM invoice_master_settings WHERE id = 1");
$master_data = $stmt_m->fetch();
} catch (PDOException $e) { die("Gagal memuat data: " . $e->getMessage()); }
// Ambil pax
$guest_qty = 1;
try {
$g = $pdo->prepare("SELECT guest_qty FROM bookings WHERE id = ?");
$g->execute([$target_id]);
$br = $g->fetch();
if ($br) $guest_qty = (int)$br['guest_qty'];
} catch (Exception $e) {}
// Helper
function pv($v) { return htmlspecialchars($v ?? ''); }
function proxy($url) { return $url ? ('?get_logo_proxy=1&get_logo_url=' . urlencode($url)) : ''; }
?>
Invoice #
Geser pratinjau ke kanan untuk rincian lengkap