\S::get_session('basket'), 'settings' => $settings ]); } static public function ticket_add() { global $settings; $selected_date = \S::get( 'date' ) ? \S::get( 'date' ) : null; $diffDays = \S::get('diffdays') ?? 0; if ( $selected_date ) { $selected = new \DateTime($selected_date); $today = new \DateTime(date('Y-m-d') . ' 00:00:00'); $diffDays = $selected->diff($today)->days; } $basket = \S::get_session('basket'); $ticket_id = \S::get('ticket_id'); if ( $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; } $basket[$ticket_id][$diffDays]['ticket_id'] = $ticket_id; $basket[$ticket_id][$diffDays]['ticket_price'] = $settings['tickets'][$ticket_id]['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 ($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'); $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($_POST['email']) . trim($_POST['city']) . trim(date("Y-m-d H:i:s"))); //* Zapisywanie do DB klienta $mdb->insert('orders', [ 'name' => trim($_POST['name']), 'surname' => trim($_POST['surname']), 'email' => trim($_POST['email']), 'zip_code' => trim($_POST['zip_code']), 'city' => trim($_POST['city']), 'street' => trim($_POST['street']), 'order_price' => trim($finalPrice), 'date_added' => $date, 'hash' => $hash, 'vat' => trim($_POST['vat'] == 'on' ? '1' : '0'), 'company_name' => trim($_POST['company_name']), 'nip' => trim($_POST['nip']), 'gift_address' => trim($_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 ( $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 = '
'; $message .= '

'; $message .= '

Potwierdzenie Zamówienia

'; $message .= 'Witamy,
'; $message .= 'potwierdzamy realizację Zamówienia numer: ' . $order['id'] . '

'; $message .= ''; $message .= ''; $message .= ''; $message .= ''; $message .= ''; $message .= ''; $message .= ''; $message .= ''; $message .= ''; $message .= ''; $message .= ''; $message .= ''; $message .= ''; $message .= ''; $message .= ''; $message .= ''; $message .= ''; $message .= ''; $message .= ''; $message .= ''; $message .= ''; $message .= '
Dane zamówieniaDane zamawiającego
Cena: ' . $order['order_price'] . 'zł' . $order['name'] . ' ' . $order['surname'] . '
Data: ' . $order['date_added'] . '' . $order['city'] . ' ' . $order['zip_code'] . '
' . $order['email'] . '
'; $message .= '

'; $message .= '

Lista biletów

'; $message .= ''; $message .= ''; $message .= ''; $message .= ''; $message .= ''; foreach ($order['tickets'] as $value) { $message .= ''; $message .= ''; $message .= ''; $message .= ''; $message .= ''; $message .= ''; $message .= ''; } $message .= ''; $message .= '
Bilet Termin wizyty Cena Ilość Razem
' . $value['name'] . '' . $value['date_visit'] . '' . $value['price'] . '' . $value["quantity"] . '' . $value['price']*$value["quantity"] . 'zł
'; $message .= '

'; if (!empty($order['gift_address'])) { $message .= '

Dane do wysyłki biletu prezentowego

'; $message .= '

' . $order['gift_address'] . '

'; } $message .= '

'; //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 .= '

QR kod

'; $message .= 'QR kod'; $message .= '

'; $message .= 'Link do szczegółów zamówienia'; $message .= '
'; \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']]); //* 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://www.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); if ($result[0] == 1) { $subject = "brzezovka.pl - zamówienie biletów 'paragon'"; $message = '
'; $message .= '

'; $message .= '

Paragon z Potwierdzeniem Zamówienia

'; $message .= 'Link do pobrania:
'; $message .= '' . $result[2] . ''; $message .= '
'; \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://www.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); if ($result[0] == 1) { $subject = "brzezovka.pl - zamówienie biletów 'faktura'"; $message = '
'; $message .= '

'; $message .= '

Faktura z Potwierdzeniem Zamówienia

'; $message .= 'Link do pobrania:
'; $message .= '' . $result[2] . ''; $message .= '
'; \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')); if ( $order['payment_status'] and !$order['informed_user'] ) { if ($order['payment_status']) { $order_successful = true; } 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'); } }