838 lines
26 KiB
PHP
838 lines
26 KiB
PHP
<?php
|
|
|
|
namespace controls;
|
|
|
|
class Tickets
|
|
{
|
|
private static function sendPaidOrderSummaryEmail(array $order)
|
|
{
|
|
$hash = trim((string) ($order['hash'] ?? ''));
|
|
$email = trim((string) ($order['email'] ?? ''));
|
|
|
|
if ($hash === '' || $email === '') {
|
|
return false;
|
|
}
|
|
|
|
$dir = 'orders/' . $hash[0] . '/' . $hash[1] . '/';
|
|
$qrFilePath = $dir . $hash . '.png';
|
|
|
|
if (!file_exists($qrFilePath)) {
|
|
if (!is_dir($dir)) {
|
|
mkdir($dir, 0755, true);
|
|
}
|
|
\QRcode::png($hash, $qrFilePath, QR_ECLEVEL_H, 4);
|
|
}
|
|
|
|
$orderId = (int) ($order['id'] ?? 0);
|
|
$orderPrice = $order['order_price'] ?? '0';
|
|
$invoiceUrl = trim((string) ($order['invoice_url'] ?? ''));
|
|
$orderLink = 'https://bilety.brzezovka.pl/tickets/order_confirm/order=' . $hash;
|
|
|
|
$subject = 'brzezovka.pl - potwierdzenie platnosci zamowienia #' . $orderId;
|
|
$message = '<div style="width:100%; max-width: 600px; margin: 0 auto;">';
|
|
$message .= '<h2>Platnosc zostala potwierdzona</h2>';
|
|
$message .= '<p>Numer zamowienia: <strong>' . $orderId . '</strong></p>';
|
|
$message .= '<p>Kwota: <strong>' . $orderPrice . ' zl</strong></p>';
|
|
$message .= '<p>Szczegoly zamowienia: <a href="' . $orderLink . '">' . $orderLink . '</a></p>';
|
|
if ($invoiceUrl !== '') {
|
|
$message .= '<p>Dokument sprzedazy: <a href="' . $invoiceUrl . '">' . $invoiceUrl . '</a></p>';
|
|
}
|
|
$message .= '<p>W zalaczniku dodany jest kod QR biletu (PNG).</p>';
|
|
$message .= '</div>';
|
|
|
|
return \S::send_email($email, $subject, $message, $qrFilePath);
|
|
}
|
|
|
|
private static function isValidTestPriceSecret($secret)
|
|
{
|
|
global $settings;
|
|
|
|
$expectedSecret = trim((string) ($settings['test_price_mode_secret'] ?? ''));
|
|
$providedSecret = trim((string) $secret);
|
|
|
|
if ($expectedSecret === '' || $providedSecret === '') {
|
|
return false;
|
|
}
|
|
|
|
return hash_equals($expectedSecret, $providedSecret);
|
|
}
|
|
|
|
private static function applyTestPriceToBasket()
|
|
{
|
|
$basket = \S::get_session('basket');
|
|
|
|
if (!is_array($basket) || empty($basket)) {
|
|
return;
|
|
}
|
|
|
|
foreach ($basket as $ticketId => &$variants) {
|
|
if (!is_array($variants)) {
|
|
continue;
|
|
}
|
|
|
|
foreach ($variants as &$variant) {
|
|
if (!is_array($variant)) {
|
|
continue;
|
|
}
|
|
|
|
$variant['ticket_price'] = 1.0;
|
|
}
|
|
unset($variant);
|
|
}
|
|
unset($variants);
|
|
|
|
\S::set_session('basket', $basket);
|
|
}
|
|
|
|
static public function test_price_mode_on()
|
|
{
|
|
$secret = \S::get('secret');
|
|
|
|
if (!self::isValidTestPriceSecret($secret)) {
|
|
header('Location: /tickets/main_view/');
|
|
exit;
|
|
}
|
|
|
|
\S::set_session('lower_price_ticket', true);
|
|
self::applyTestPriceToBasket();
|
|
\S::alert('Test mode: all ticket prices are set to 1 zl.');
|
|
|
|
header('Location: /tickets/main_view/');
|
|
exit;
|
|
}
|
|
|
|
static public function test_price_mode_off()
|
|
{
|
|
$secret = \S::get('secret');
|
|
|
|
if (!self::isValidTestPriceSecret($secret)) {
|
|
header('Location: /tickets/main_view/');
|
|
exit;
|
|
}
|
|
|
|
\S::del_session('lower_price_ticket');
|
|
\S::del_session('basket');
|
|
\S::alert('Test mode disabled. Basket has been cleared.');
|
|
|
|
header('Location: /tickets/main_view/');
|
|
exit;
|
|
}
|
|
|
|
static public function resend_order_email()
|
|
{
|
|
$secret = \S::get('secret');
|
|
$hash = trim((string) \S::get('order'));
|
|
|
|
if (!self::isValidTestPriceSecret($secret) || $hash === '') {
|
|
header('Location: /tickets/main_view/');
|
|
exit;
|
|
}
|
|
|
|
$order = \factory\Tickets::get_order_details_by_hash($hash);
|
|
if (!$order) {
|
|
\S::alert('Order not found.');
|
|
header('Location: /tickets/main_view/');
|
|
exit;
|
|
}
|
|
|
|
$isSent = self::sendPaidOrderSummaryEmail($order);
|
|
\S::alert($isSent ? 'Order e-mail has been resent.' : 'Could not resend e-mail. Check SMTP logs.');
|
|
|
|
header('Location: /tickets/order_confirm/order=' . $hash);
|
|
exit;
|
|
}
|
|
|
|
static public function main_view()
|
|
{
|
|
global $settings;
|
|
|
|
$enable_sell = \factory\Apanel::getSetting('enable_sell', '1');
|
|
$selectedDate = \S::get('selected_date');
|
|
$normalizedSelectedDate = \factory\Tickets::normalizeDateFromPicker($selectedDate);
|
|
$ticketAvailability = [];
|
|
|
|
if ($normalizedSelectedDate) {
|
|
$ticketAvailability = \factory\Tickets::getTicketAvailabilityForDate(
|
|
array_keys($settings['tickets']),
|
|
$normalizedSelectedDate
|
|
);
|
|
}
|
|
|
|
if ( !$enable_sell || $enable_sell === '0' )
|
|
return \Tpl::view( 'tickets/disabled-sell' );
|
|
|
|
return \Tpl::view('tickets/main-view', [
|
|
'cart' => \S::get_session('basket'),
|
|
'settings' => $settings,
|
|
'ticket_availability' => $ticketAvailability
|
|
]);
|
|
}
|
|
|
|
static public function ticket_add()
|
|
{
|
|
global $settings;
|
|
|
|
$selected_date = \S::get( 'date' ) ? \S::get( 'date' ) : null;
|
|
$diffDays = \S::get('diffdays') ?? 0;
|
|
$ticket_id = \S::get('ticket_id');
|
|
$basket = \S::get_session('basket');
|
|
|
|
if (!$selected_date && isset($basket[$ticket_id][$diffDays]['date'])) {
|
|
$selected_date = $basket[$ticket_id][$diffDays]['date'];
|
|
}
|
|
|
|
if (!$selected_date && \factory\Tickets::getCalendarGroupForTicket($ticket_id)) {
|
|
echo json_encode([
|
|
'status' => 'error',
|
|
'message' => 'Wybierz datę wizyty dla tego biletu.'
|
|
]);
|
|
exit;
|
|
}
|
|
|
|
if ( $selected_date )
|
|
{
|
|
$selected = \DateTime::createFromFormat('d-m-Y', $selected_date);
|
|
if (!$selected) {
|
|
echo json_encode([
|
|
'status' => 'error',
|
|
'message' => 'Niepoprawna data wizyty.'
|
|
]);
|
|
exit;
|
|
}
|
|
|
|
$today = new \DateTime(date('Y-m-d') . ' 00:00:00');
|
|
$diffDays = $selected->diff($today)->days;
|
|
|
|
if (!\factory\Tickets::canBuyTicketOnDate($ticket_id, $selected_date)) {
|
|
echo json_encode([
|
|
'status' => 'error',
|
|
'message' => 'Ten rodzaj biletu jest niedostępny w wybranym dniu.'
|
|
]);
|
|
exit;
|
|
}
|
|
}
|
|
|
|
if ( !empty($basket[$ticket_id][$diffDays]) )
|
|
{
|
|
$basket[$ticket_id][$diffDays]['quantity']++;
|
|
}
|
|
else
|
|
{
|
|
if ($diffDays == 0) {
|
|
$addon = $settings['tickets'][$ticket_id]['dynamic_prices']['day0'] ?? 0;
|
|
} elseif ($diffDays <= 2) {
|
|
$addon = $settings['tickets'][$ticket_id]['dynamic_prices']['day1_2'] ?? 0;
|
|
} elseif ($diffDays <= 7) {
|
|
$addon = $settings['tickets'][$ticket_id]['dynamic_prices']['day3_7'] ?? 0;
|
|
} else {
|
|
$addon = 0;
|
|
}
|
|
|
|
$selectedDateObject = $selected_date ? \DateTime::createFromFormat('d-m-Y', $selected_date) : null;
|
|
$is_weekend = $selectedDateObject && in_array($selectedDateObject->format('N'), ['6', '7']);
|
|
$base_price = $is_weekend
|
|
? ($settings['tickets'][$ticket_id]['price_weekend'] ?? $settings['tickets'][$ticket_id]['price'])
|
|
: $settings['tickets'][$ticket_id]['price'];
|
|
|
|
$basket[$ticket_id][$diffDays]['ticket_id'] = $ticket_id;
|
|
$basket[$ticket_id][$diffDays]['ticket_price'] = $base_price + $addon;
|
|
$basket[$ticket_id][$diffDays]['product_id'] = $settings['tickets'][$ticket_id]['product_id'];
|
|
$basket[$ticket_id][$diffDays]['quantity'] = 1;
|
|
$basket[$ticket_id][$diffDays]['date'] = $selected_date;
|
|
}
|
|
|
|
if ( strpos( $ticket_id, "gift" ) !== false )
|
|
{
|
|
$basket['gift-price'][0]['quantity'] = 1;
|
|
$basket['gift-price'][0]['ticket_price'] = $settings['tickets']['gift-price']['price'];
|
|
$basket['gift-price'][0]['product_id'] = $settings['tickets']['gift-price']['product_id'];
|
|
$basket['gift-price'][0]['ticket_id'] = 'gift-price';
|
|
}
|
|
|
|
$basket = \factory\Tickets::recalculate_ticket_protection( $basket );
|
|
|
|
\S::set_session( 'basket', $basket );
|
|
|
|
if (\S::get('basket_step_1'))
|
|
echo json_encode([
|
|
'basket_form' => \Tpl::view('tickets/basket-form', [
|
|
'cart' => $basket,
|
|
'settings' => $settings
|
|
]),
|
|
'basket_summary' => \Tpl::view('tickets/basket-summary', [
|
|
'cart' => $basket,
|
|
'settings' => $settings
|
|
])
|
|
]);
|
|
else
|
|
echo json_encode(['shopping_cart' => \Tpl::view('tickets/shopping-cart', [
|
|
'cart' => $basket,
|
|
'settings' => $settings
|
|
])]);
|
|
exit;
|
|
}
|
|
|
|
static public function ticket_subtract()
|
|
{
|
|
global $settings;
|
|
|
|
$basket = \S::get_session('basket');
|
|
$ticket_id = \S::get('ticket_id');
|
|
$diffdays = \S::get('diffdays');
|
|
|
|
if (isset($basket[$ticket_id][$diffdays]) && $basket[$ticket_id][$diffdays]['quantity'] > 0)
|
|
{
|
|
$basket[$ticket_id][$diffdays]['quantity']--;
|
|
|
|
if ($basket[$ticket_id][$diffdays]['quantity'] == 0)
|
|
{
|
|
unset($basket[$ticket_id][$diffdays]);
|
|
if (empty($basket[$ticket_id])) {
|
|
unset($basket[$ticket_id]);
|
|
}
|
|
|
|
$giftKeys = array_filter(array_keys($basket), function ($key) {
|
|
return strpos($key, "gift") !== false && $key != "gift-price";
|
|
});
|
|
if (empty($giftKeys)) {
|
|
unset($basket['gift-price']);
|
|
}
|
|
}
|
|
}
|
|
|
|
$basket = \factory\Tickets::recalculate_ticket_protection( $basket );
|
|
|
|
\S::set_session( 'basket', $basket );
|
|
|
|
if (\S::get('basket_step_1'))
|
|
echo json_encode([
|
|
'basket_form' => \Tpl::view('tickets/basket-form', [
|
|
'cart' => $basket,
|
|
'settings' => $settings
|
|
]),
|
|
'basket_summary' => \Tpl::view('tickets/basket-summary', [
|
|
'cart' => $basket,
|
|
'settings' => $settings
|
|
]),
|
|
'cart_count' => count($basket)
|
|
]);
|
|
|
|
else
|
|
echo json_encode([
|
|
'shopping_cart' => \Tpl::view('tickets/shopping-cart', [
|
|
'cart' => $basket,
|
|
'settings' => $settings
|
|
]),
|
|
'cart_count' => count($basket)
|
|
]);
|
|
exit;
|
|
}
|
|
|
|
static public function ticket_remove()
|
|
{
|
|
global $settings;
|
|
|
|
$basket = \S::get_session('basket');
|
|
$ticket_id = \S::get('ticket_id');
|
|
$diffdays = \S::get('diffdays');
|
|
|
|
unset($basket[$ticket_id]);
|
|
|
|
$giftKeys = array_filter(array_keys($basket), function ($key) {
|
|
return strpos($key, "gift") !== false && $key != "gift-price";
|
|
});
|
|
|
|
if (empty($giftKeys)) {
|
|
unset($basket['gift-price']);
|
|
}
|
|
|
|
$basket = \factory\Tickets::recalculate_ticket_protection( $basket );
|
|
|
|
\S::set_session('basket', $basket);
|
|
|
|
if (\S::get('basket_step_1'))
|
|
echo json_encode([
|
|
'basket_form' => \Tpl::view('tickets/basket-form', [
|
|
'cart' => $basket,
|
|
'settings' => $settings
|
|
]),
|
|
'basket_summary' => \Tpl::view('tickets/basket-summary', [
|
|
'cart' => $basket,
|
|
'settings' => $settings
|
|
]),
|
|
'cart_count' => count($basket)
|
|
]);
|
|
else
|
|
echo json_encode([
|
|
'shopping_cart' => \Tpl::view('tickets/shopping-cart', [
|
|
'cart' => $basket,
|
|
'settings' => $settings
|
|
]),
|
|
'cart_count' => count($basket)
|
|
]);
|
|
exit;
|
|
}
|
|
|
|
// Strona koszyka
|
|
static public function basket_view()
|
|
{
|
|
global $settings;
|
|
|
|
if ( \S::get( 'ticket_protection' ) == 'true' ) {
|
|
\S::set_session( 'ticket_protection', true );
|
|
\factory\Tickets::add_ticket_protection();
|
|
header( 'Location: /tickets/basket_view/' );
|
|
exit;
|
|
}
|
|
|
|
if ( \S::get( 'ticket_protection' ) == 'false' ) {
|
|
\S::set_session( 'ticket_protection', false );
|
|
\factory\Tickets::remove_ticket_protection();
|
|
header( 'Location: /tickets/basket_view/' );
|
|
exit;
|
|
}
|
|
|
|
return \Tpl::view('tickets/basket-view', [
|
|
'cart' => \S::get_session('basket'),
|
|
'settings' => $settings
|
|
]);
|
|
}
|
|
|
|
// Przetwarzanie formularza
|
|
static public function basketFormHandler()
|
|
{
|
|
global $settings, $mdb;
|
|
|
|
$basket = \S::get_session('basket');
|
|
if (empty($basket) || !is_array($basket)) {
|
|
header('Location: /tickets/main_view/');
|
|
exit;
|
|
}
|
|
|
|
foreach ($basket as $ticketId => $variants) {
|
|
foreach ($variants as $variant) {
|
|
if (empty($variant['date'])) {
|
|
continue;
|
|
}
|
|
|
|
if (!\factory\Tickets::canBuyTicketOnDate($ticketId, $variant['date'])) {
|
|
header('Location: /tickets/basket_view/?calendar_error=1');
|
|
exit;
|
|
}
|
|
}
|
|
}
|
|
|
|
$date = date('Y-m-d H:i:s');
|
|
|
|
$finalPrice = 0;
|
|
foreach ( ( $basket ) as $data => $value )
|
|
{
|
|
foreach ( $value as $key => $val )
|
|
{
|
|
$price = $val['ticket_price'];
|
|
$quantity = $val['quantity'];
|
|
|
|
$finalPrice += $price * $quantity;
|
|
}
|
|
}
|
|
|
|
$hash = md5(trim((string)($_POST['email'] ?? '')) . trim((string)($_POST['city'] ?? '')) . trim(date("Y-m-d H:i:s")));
|
|
|
|
//* Zapisywanie do DB klienta
|
|
$mdb->insert('orders', [
|
|
'name' => trim((string)($_POST['name'] ?? '')),
|
|
'surname' => trim((string)($_POST['surname'] ?? '')),
|
|
'email' => trim((string)($_POST['email'] ?? '')),
|
|
'zip_code' => trim((string)($_POST['zip_code'] ?? '')),
|
|
'city' => trim((string)($_POST['city'] ?? '')),
|
|
'street' => trim((string)($_POST['street'] ?? '')),
|
|
'order_price' => $finalPrice,
|
|
'date_added' => $date,
|
|
'hash' => $hash,
|
|
'vat' => (($_POST['vat'] ?? '') == 'on' ? '1' : '0'),
|
|
'company_name' => trim((string)($_POST['company_name'] ?? '')),
|
|
'nip' => trim((string)($_POST['nip'] ?? '')),
|
|
'gift_address' => trim((string)($_POST['gift_address'] ?? ''))
|
|
] );
|
|
|
|
//* Id klienta
|
|
$last_id = $mdb->id();
|
|
|
|
if ( $last_id )
|
|
{
|
|
foreach ( ( $basket ) as $data => $value )
|
|
{
|
|
foreach ( $value as $key => $val )
|
|
{
|
|
$price = $val['ticket_price'];
|
|
$quantity = $val['quantity'];
|
|
|
|
$finalPrice += $price * $quantity;
|
|
}
|
|
}
|
|
foreach ( ( $basket ) as $data => $value )
|
|
{
|
|
foreach ( $value as $key => $val )
|
|
{
|
|
if ( !empty($val['date']) ) {
|
|
$dateFormatted = new \DateTime( $val['date'] );
|
|
$dateFormatted = $dateFormatted->format('Y-m-d');
|
|
} else
|
|
$dateFormatted = null;
|
|
|
|
// Zapisywanie do DB bilety
|
|
$mdb -> insert( 'order_tickets', [
|
|
'order_id' => $last_id,
|
|
'product_id' => $val['product_id'],
|
|
'name' => trim( $settings['tickets'][$val['ticket_id']]['name'] ),
|
|
'quantity' => trim( $val["quantity"]),
|
|
'price' => trim( $val['ticket_price']),
|
|
'date_visit' => $dateFormatted,
|
|
'date_added' => $date
|
|
] );
|
|
}
|
|
}
|
|
|
|
//QR CODE
|
|
$dir = 'orders/' . $hash[0] . '/' . $hash[1] . '/';
|
|
|
|
if (!file_exists($dir . $hash . '.png'))
|
|
{
|
|
if (!is_dir($dir))
|
|
mkdir($dir, 0755, true);
|
|
|
|
\QRcode::png($hash, $dir . $hash . '.png', QR_ECLEVEL_H, 4);
|
|
}
|
|
|
|
\S::del_session('basket');
|
|
header('Location: /tickets/przelewy24/order=' . $hash);
|
|
}
|
|
else
|
|
{
|
|
header('Location: /tickets/main_view/');
|
|
}
|
|
exit;
|
|
}
|
|
|
|
//* Strona końcowego zamówienia
|
|
static public function przelewy24()
|
|
{
|
|
global $settings, $mdb;
|
|
|
|
$hash = \S::get('order');
|
|
$order = \factory\Tickets::get_order_details_by_hash(\S::get('order'));
|
|
|
|
$subject = "brzezovka.pl - zamówienie biletów";
|
|
$message = '<div style="width:100%; max-width: 600px; margin: 0 auto;">';
|
|
$message .= '<div style="text-align: center;"><img src="https://bilety.brzezovka.pl/layout/images/logo.png" alt="" style="width: 300px;"></div><hr>';
|
|
$message .= '<h2>Potwierdzenie Zamówienia</h2>';
|
|
$message .= '<span>Witamy,</span><br/>';
|
|
$message .= '<span>potwierdzamy realizację Zamówienia numer: ' . $order['id'] . '</span><br/><br/>';
|
|
$message .= '<table style="width:100%;">';
|
|
$message .= '<thead style="text-align: left;">';
|
|
$message .= '<tr>';
|
|
$message .= '<th>Dane zamówienia</th>';
|
|
$message .= '<th>Dane zamawiającego</th>';
|
|
$message .= '</tr>';
|
|
$message .= '</thead>';
|
|
$message .= '<tbody>';
|
|
$message .= '<tr>';
|
|
$message .= '<td>Cena: ' . $order['order_price'] . 'zł</td>';
|
|
$message .= '<td>' . $order['name'] . ' ' . $order['surname'] . '</td>';
|
|
$message .= '</tr>';
|
|
$message .= '<tr>';
|
|
$message .= '<td>Data: ' . $order['date_added'] . '</td>';
|
|
$message .= '<td>' . $order['city'] . ' ' . $order['zip_code'] . '</td>';
|
|
$message .= '</tr>';
|
|
$message .= '<tr>';
|
|
$message .= '<td></td>';
|
|
$message .= '<td>' . $order['email'] . '</td>';
|
|
$message .= '</tr>';
|
|
$message .= '</tbody>';
|
|
$message .= '</table>';
|
|
$message .= '<br/><hr>';
|
|
$message .= '<h3>Lista biletów</h3>';
|
|
$message .= '<table style="width:100%;">';
|
|
$message .= '<thead style="text-align: left;">';
|
|
$message .= '<tr> <th>Bilet</th> <th>Termin wizyty</th> <th>Cena</th> <th>Ilość</th> <th>Razem</th> </tr>';
|
|
$message .= '</thead>';
|
|
$message .= '<tbody>';
|
|
foreach ($order['tickets'] as $value)
|
|
{
|
|
$message .= '<tr>';
|
|
$message .= '<td>' . $value['name'] . '</td>';
|
|
$message .= '<td>' . $value['date_visit'] . '</td>';
|
|
$message .= '<td>' . $value['price'] . '</td>';
|
|
$message .= '<td>' . $value["quantity"] . '</td>';
|
|
$message .= '<td>' . $value['price']*$value["quantity"] . 'zł</td>';
|
|
$message .= '</tr>';
|
|
}
|
|
$message .= '</tbody>';
|
|
$message .= '</table>';
|
|
$message .= '<br/><hr>';
|
|
|
|
if (!empty($order['gift_address'])) {
|
|
$message .= '<h3>Dane do wysyłki biletu prezentowego</h3>';
|
|
$message .= '<p>' . $order['gift_address'] . '</p>';
|
|
}
|
|
|
|
$message .= '<br/><hr>';
|
|
|
|
//QR CODE
|
|
$dir = 'orders/' . $hash[0] . '/' . $hash[1] . '/';
|
|
|
|
if ( !file_exists($dir . $hash . '.png' ) )
|
|
{
|
|
if (!is_dir($dir))
|
|
mkdir($dir, 0755, true);
|
|
|
|
\QRcode::png( $hash, $dir . $hash . '.png', QR_ECLEVEL_H, 4 );
|
|
}
|
|
|
|
$qr_path = 'https://bilety.brzezovka.pl/' . $dir . $hash . '.png';
|
|
$message .= '<h3>QR kod</h3>';
|
|
$message .= '<img src="' . $qr_path . '" alt="QR kod" style="width: 200px; height: 200px;"/>';
|
|
$message .= '<br/><hr>';
|
|
|
|
$message .= '<a style="display: inline-block; color: #000; border: none; text-decoration: none; margin-top:20px; background-color: #a4e653; font-weight: 800; border-radius: 10px; padding: 10px 30px;" href="https://bilety.brzezovka.pl/tickets/order_confirm/order=' . $order['hash'] . '">Link do szczegółów zamówienia</a>';
|
|
$message .= '</div>';
|
|
|
|
\S::send_email( $order['email'], $subject, $message );
|
|
|
|
$przelewy24_hash = md5(time());
|
|
$mdb->update('orders', ['payment_hash' => $przelewy24_hash], ['id' => $order['id']]);
|
|
|
|
return \Tpl::view('tickets/przelewy24', [
|
|
'settings' => $settings,
|
|
'hash' => \S::get('order'),
|
|
'order' => $order,
|
|
'przelewy24_hash' => $przelewy24_hash
|
|
]);
|
|
}
|
|
|
|
//* Akceptowanie zmian w DB. Jeżeli płatność jest ok
|
|
static public function przelewy24_response()
|
|
{
|
|
global $settings, $mdb;
|
|
|
|
$crc_key = '';
|
|
|
|
if($settings['p24']['sandbox']) {
|
|
$crc_key = $settings['p24']['sandbox_crc_key'];
|
|
} else {
|
|
$crc_key = $settings['p24']['crc_key'];
|
|
}
|
|
|
|
$post = [
|
|
'p24_merchant_id' => \S::get('p24_merchant_id'),
|
|
'p24_pos_id' => \S::get('p24_pos_id'),
|
|
'p24_session_id' => \S::get('p24_session_id'),
|
|
'p24_amount' => \S::get('p24_amount'),
|
|
'p24_currency' => \S::get('p24_currency'),
|
|
'p24_order_id' => \S::get('p24_order_id'),
|
|
'p24_sign' => md5(\S::get('p24_session_id') . '|' . \S::get('p24_order_id') . '|' . \S::get('p24_amount') . '|' . \S::get('p24_currency') . '|' . $crc_key)
|
|
];
|
|
|
|
$ch = curl_init();
|
|
if ($settings['p24']['sandbox'])
|
|
{
|
|
curl_setopt($ch, CURLOPT_URL, 'https://sandbox.przelewy24.pl/trnVerify');
|
|
}
|
|
else
|
|
{
|
|
curl_setopt($ch, CURLOPT_URL, 'https://secure.przelewy24.pl/trnVerify');
|
|
}
|
|
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
|
|
curl_exec($ch);
|
|
|
|
$order = \factory\Tickets::get_order_details_by_przelewy24_hash(\S::get('p24_session_id'));
|
|
if ( !$order )
|
|
return false;
|
|
|
|
$mdb->update('orders', ['payment_status' => 1], ['id' => $order['id']]);
|
|
$mdb->update('orders', ['payment_date' => date('Y-m-d H:i:s')], ['id' => $order['id']]);
|
|
|
|
// file_put_contents( 'sandbox_przelewy24_response.txt', print_r( $_POST, true ) );
|
|
// file_put_contents( 'sandbox_przelewy24_response.txt', print_r( $order, true ), FILE_APPEND );
|
|
|
|
//* Wystawienie faktury
|
|
if ( $order['invoice_status'] == 0 )
|
|
{
|
|
if ( $order['vat'] == 0 )
|
|
{
|
|
$api = array();
|
|
$api["api_id"] = "9fa7772af97ab35b6d8a1cd05ac9e1b5";
|
|
$api["api_zadanie"] = "1";
|
|
$api["dokument_rodzaj"] = "20";
|
|
$api["dokument_dostep"] = "1";
|
|
$api["dokument_miejsce"] = "Brzezovka sklep internetowy";
|
|
$api["produkt_stawka_vat"] = "8";
|
|
|
|
$api["nabywca_imie"] = $order['name'];
|
|
$api["nabywca_nazwisko"] = $order['surname'];
|
|
$api["nabywca_email"] = $order['email'];
|
|
|
|
if($order['city']){
|
|
$api["nabywca_miasto"] = $order['city'];
|
|
}
|
|
if($order['zip_code']){
|
|
$api["nabywca_kod"] = $order['zip_code'];
|
|
}
|
|
if($order['street']){
|
|
$api["nabywca_ulica"] = $order['street'];
|
|
}
|
|
|
|
foreach ($order['tickets'] as $key => $value)
|
|
{
|
|
$key += 1;
|
|
$api["produkt_nazwa_$key"] = $value['name'];
|
|
$api["produkt_ilosc_$key"] = $value['quantity'];
|
|
$api["produkt_jm_$key"] = "2";
|
|
$api["produkt_stawka_vat_$key"] = "23";
|
|
$api["produkt_wartosc_brutto_$key"] = $value['price'] * $value['quantity'];
|
|
}
|
|
|
|
$curl = curl_init();
|
|
curl_setopt($curl, CURLOPT_URL, "https://konto.fakturowo.pl/api");
|
|
curl_setopt($curl, CURLOPT_POST, 1);
|
|
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 300);
|
|
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
|
|
curl_setopt($curl, CURLOPT_POSTFIELDS, $api);
|
|
$result = curl_exec($curl);
|
|
curl_close($curl);
|
|
|
|
$result = explode("\n", $result);
|
|
// file_put_contents( 'sandbox_przelewy24_response.txt', print_r( $result, true ), FILE_APPEND );
|
|
if ($result[0] == 1)
|
|
{
|
|
$subject = "brzezovka.pl - zamówienie biletów 'paragon'";
|
|
$message = '<div style="width:100%; max-width: 600px; margin: 0 auto;">';
|
|
$message .= '<div style="text-align: center;"><img src="https://bilety.brzezovka.pl/layout/images/logo.png" alt="" style="width:100%; max-width: 100px;"></div><hr>';
|
|
$message .= '<h2>Paragon z Potwierdzeniem Zamówienia</h2>';
|
|
$message .= '<span>Link do pobrania:</span><br/>';
|
|
$message .= '<a href="' . $result[2] . '">' . $result[2] . '</a>';
|
|
$message .= '</div>';
|
|
|
|
\S::send_email( $order['email'], $subject, $message );
|
|
|
|
$mdb->update('orders', ['invoice_status' => 1], ['id' => $order['id']]);
|
|
$mdb->update('orders', ['invoice_url' => $result[2]], ['id' => $order['id']]);
|
|
}
|
|
else
|
|
{
|
|
echo "ERROR: " . $result[1];
|
|
}
|
|
}
|
|
elseif ( $order['vat'] == 1 )
|
|
{
|
|
$api = array();
|
|
$api["api_id"] = "9fa7772af97ab35b6d8a1cd05ac9e1b5";
|
|
$api["api_zadanie"] = "1";
|
|
$api["dokument_rodzaj"] = "0";
|
|
$api["dokument_dostep"] = "1";
|
|
$api["dokument_miejsce"] = "Brzezovka sklep internetowy";
|
|
$api["produkt_stawka_vat"] = "8";
|
|
|
|
$api["nabywca_imie"] = $order['name'];
|
|
$api["nabywca_nazwisko"] = $order['surname'];
|
|
$api["nabywca_email"] = $order['email'];
|
|
|
|
$api["nabywca_miasto"] = $order['city'];
|
|
$api["nabywca_kod"] = $order['zip_code'];
|
|
$api["nabywca_ulica"] = $order['street'];
|
|
|
|
$api["nabywca_nazwa"] = $order['company_name'];
|
|
$api["nabywca_nip"] = $order['nip'];
|
|
|
|
foreach ($order['tickets'] as $key => $value)
|
|
{
|
|
$key += 1;
|
|
$api["produkt_nazwa_$key"] = $value['name'];
|
|
$api["produkt_ilosc_$key"] = $value['quantity'];
|
|
$api["produkt_jm_$key"] = "2";
|
|
$api["produkt_stawka_vat_$key"] = "23";
|
|
$api["produkt_wartosc_brutto_$key"] = $value['price'] * $value['quantity'];
|
|
}
|
|
|
|
$curl = curl_init();
|
|
curl_setopt($curl, CURLOPT_URL, "https://konto.fakturowo.pl/api");
|
|
curl_setopt($curl, CURLOPT_POST, 1);
|
|
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 300);
|
|
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
|
|
curl_setopt($curl, CURLOPT_POSTFIELDS, $api);
|
|
$result = curl_exec($curl);
|
|
curl_close($curl);
|
|
|
|
$result = explode("\n", $result);
|
|
// file_put_contents( 'sandbox_przelewy24_response.txt', print_r( $result, true ), FILE_APPEND );
|
|
if ($result[0] == 1)
|
|
{
|
|
$subject = "brzezovka.pl - zamówienie biletów 'faktura'";
|
|
$message = '<div style="width:100%; max-width: 600px; margin: 0 auto;">';
|
|
$message .= '<div style="text-align: center;"><img src="https://bilety.brzezovka.pl/layout/images/logo.png" alt="" style="width:100%; max-width: 100px;"></div><hr>';
|
|
$message .= '<h2>Faktura z Potwierdzeniem Zamówienia</h2>';
|
|
$message .= '<span>Link do pobrania:</span><br/>';
|
|
$message .= '<a href="' . $result[2] . '">' . $result[2] . '</a>';
|
|
$message .= '</div>';
|
|
|
|
\S::send_email( $order['email'], $subject, $message );
|
|
|
|
$mdb->update('orders', ['invoice_status' => 1], ['id' => $order['id']]);
|
|
$mdb->update('orders', ['invoice_url' => $result[2]], ['id' => $order['id']]);
|
|
}
|
|
else
|
|
{
|
|
echo "ERROR: " . $result[1];
|
|
}
|
|
}
|
|
}
|
|
|
|
exit;
|
|
}
|
|
|
|
//* Końcowa strona z informacją o zamówieniu
|
|
static public function order_confirm()
|
|
{
|
|
global $mdb;
|
|
$order = \factory\Tickets::get_order_details_by_hash(\S::get('order'));
|
|
$order_successful = false;
|
|
$order_fail = false;
|
|
|
|
if ( $order && !empty($order['payment_status']) && empty($order['informed_user']) )
|
|
{
|
|
if ($order['payment_status'])
|
|
{
|
|
$order_successful = true;
|
|
$mailSent = self::sendPaidOrderSummaryEmail($order);
|
|
if ($mailSent) {
|
|
$mdb->update('orders', ['informed_user' => 1], ['id' => $order['id']]);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$order_fail = true;
|
|
$mdb->update('orders', ['informed_user' => 1], ['id' => $order['id']]);
|
|
}
|
|
}
|
|
|
|
return \Tpl::view( 'tickets/order-confirm', [
|
|
'order' => $order,
|
|
'order_successful' => $order_successful,
|
|
'order_fail' => $order_fail
|
|
]);
|
|
}
|
|
|
|
//* Regulamin
|
|
static public function regulamin()
|
|
{
|
|
return \Tpl::view('site/regulamin');
|
|
}
|
|
|
|
static public function regulamin_biletow_prezentowych()
|
|
{
|
|
return \Tpl::view('site/regulamin-for-gifts');
|
|
}
|
|
}
|