zauberfloete-ticket-pdf-exp.../index.php

183 lines
No EOL
6 KiB
PHP

<?php
//Database & secrets
use chillerlan\QRCode\QRCode;
use Mpdf\Mpdf;
use Mpdf\MpdfException;
include "config.php";
if(empty($_GET["code"])){
die('Fehler! Bitte überprüfen Sie den Link!');
}
//PHP Composer dependency management
require("vendor/autoload.php");
//access var from config.php
global $CONFIG;
//Establish Database Connection using PHP Data Objects
try {
$pdo = new PDO('mysql:host=' . $CONFIG["database"]["server"] . ';dbname=' . $CONFIG["database"]["dbname"], $CONFIG["database"]["user"], $CONFIG["database"]["password"]);
} catch (PDOException $ex) {
echo 'Exception abgefangen: ', $ex->getMessage(), "\n<br/>";
}
//Primary SQL Statement
$statement = $pdo->prepare("SELECT zf_bap_orders.*,zbs.name as zbs_name,zbc.code as zbc_code, zbc.discount_price as zbc_discount
FROM zf_bap_orders
JOIN zf_bap_events zbs on zf_bap_orders.event_id = zbs.event_id
LEFT JOIN zf_bap_coupons zbc on zf_bap_orders.coupon_id = zbc.coupon_id
WHERE zf_bap_orders.code = :code AND zf_bap_orders.status_id = :status_id");
//Bind parameters
$statement->bindParam("code", $_GET["code"]); // "Auth" 2
$expected_status = 2; // 2 equals "is paid"
$statement->bindParam("status_id", $expected_status); //Only show, if ticket is paid
//Execute Statement and fetch Data
$statement->execute();
$row2 = $statement->fetch();
if(!($row2["order_id"]>0)){
die('Fehler! Ticket ist ungültig.');
}
//PDF Library
$mpdf = new Mpdf();
$mpdf->allow_charset_conversion = true;
//Get Payment methode using ternary operator
$zahlung = $row2["paypal_token"] != "" ? "Paypal" : "Barzahlung";
//Looks like shit, but works :D (PHP Serialized Class -> JSON -> PHP stdClass -> PHP Object)
$seats = json_decode(json_encode(unserialize($row2["places"], ['allowed_classes' => false])), true);
//Convert object to HTML List
$seat_html = "";
$is_vip = false;
$vip_price = 0;
foreach ($seats as $seat) {
if($seat["place_name"]!="VIP"){
$seat_html .= $seat["place_name"] . " (" . $seat["place_price"] . "€), "; // results in e.g. 'Reihe 1, Platz 2 (5€)'
}else{
$is_vip=true;
$vip_price=$seat["place_price"];
}
}
//Generate Coupon Badge
$rabatt = ($row2["coupon_id"]!=0) ? $row2["zbc_code"] . ' (-' . $row2["zbc_discount"].'€)' : "-";
//Build HTML Site, which will be converted into a PDF
$data = '<!doctype html>
<html lang="de-AT">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Zauberflöte - Ticketbuchung</title>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.4.1/dist/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
<!-- Optional theme -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.4.1/dist/css/bootstrap-theme.min.css" integrity="sha384-6pzBo3FDv/PJ8r2KRkGHifhEocL+1X2rVCTTkUfGk7/0pbek5mMa1upzvWbrUbOZ" crossorigin="anonymous">
<!-- Latest compiled and minified JavaScript -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@3.4.1/dist/js/bootstrap.min.js" integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd" crossorigin="anonymous"></script>
<style>
body{
margin: 50px;
}
.td_desc{
padding-right: 10px;
width: 30vw;
font-weight: bold;
}
</style>
</head>
<body class="container">
<img src="https://www.borg-kindberg.at/zauberfloete/wp-content/uploads/2022/05/cropped-MicrosoftTeams-image.png" height="150px" style="float: right;" alt="Logo"/>
<br/>
<h1>Ihre Zauberflöte - Tickets</h1>
<table>
<tr>
<td class="td_desc">Ticket-Nummer</td>
<td>' . $row2["order_id"] . "_" . $row2["code"] . '</td>
</tr>
<tr>
<td class="td_desc">Zusätze</td>
<td>' . ($is_vip ? "VIP (".$vip_price."€)" : "-") . '</td>
</tr>
<tr>
<td class="td_desc">Name</td>
<td>' . sonderzeichen($row2["first_name"]) . "&nbsp;" . sonderzeichen($row2["last_name"]) . '</td>
</tr>
<tr>
<td class="td_desc">Bestelldatum</td>
<td>' . $row2["date"] . '</td>
</tr>
<tr>
<td class="td_desc">Rabattcode</td>
<td>' . $rabatt . '</td>
</tr>
<tr>
<td class="td_desc">Kontakt</td>
<td>' . $row2["email"] . "&nbsp;/ &nbsp;" . $row2["phone"] . '</td>
</tr>
<tr>
<td class="td_desc">Vorstellung</td>
<td>' . $row2["zbs_name"] . '</td>
</tr>
<tr>
<td class="td_desc">Platz</td>
<td>' . $seat_html . '</td>
</tr>
<tr>
<td class="td_desc">Zahlung</td>
<td>' . $zahlung . '</td>
</tr>
<tr>
<td class="td_desc">Finaler Preis</td>
<td>' . $row2["total_price"] . '€</td>
</tr>
</table>
<div style="padding: 15px; "></div>
<img src="' . (new QRCode)->render('https://borg-kindberg.at/zf-print/ticket-check.php?order_id='.$row2["order_id"]."&code=".$row2["code"]) . '" alt="QR Code" style="height:200px;" />
</body>
</html>';
//Convert from HTML
try {
$mpdf->WriteHTML(mb_convert_encoding($data, 'UTF-8', 'UTF-8'));
} catch (MpdfException $ex) {
echo 'Exception abgefangen: ', $ex->getMessage(), "\n<br/>";
die();
}
//Print to Webpage
try {
$mpdf->Output();
} catch (MpdfException $ex) {
echo 'Exception abgefangen: ', $ex->getMessage(), "\n<br/>";
}
function sonderzeichen($string): string
{
$res = $string;
$res = str_replace("ä", "ae", $res);
$res = str_replace("ü", "ue", $res);
$res = str_replace("ö", "oe", $res);
$res = str_replace("Ä", "Ae", $res);
$res = str_replace("Ü", "Ue", $res);
$res = str_replace("Ö", "Oe", $res);
return str_replace("ß", "ss", $res);
}