Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- require_once DOC_ROOT . 'classes/tools/Element/Element/Common.php';
- if (!class_exists('Element_Ticket')):
- class Element_Ticket extends Element_Common {
- public $isWYSIWYG = 1;
- public $table_name = 't_ticket';
- public $can_delete = 0;
- public $typePlaceTitle = array(
- 1 => 'Row',
- 2 => 'Box',
- 3 => 'Table'
- );
- public $sTableBarcodeExternal = 't_barcode_external';
- public function init() {
- global $smarty;
- $this->list = array(
- 'bar_code' => array(
- 'type' => 'text',
- ),
- 'event_id' => array(
- 'type' => 'text',
- 'item_name' => 'event_title',
- 'multi' => 1,
- ),
- 'type_id' => array(
- 'type' => 'text',
- 'field_name' => 'title',
- 'item_name' => 'type_id',
- 'table_name' => 't_ticket_type_content',
- 'multi' => 1,
- ),
- 'price' => array(),
- 'deposit_uah' => array(),
- 'date_printed' => array(
- 'order' => 1,
- 'direction' => 'back',
- ),
- 'date_confirmed' => array(
- 'order' => 1,
- 'direction' => 'back',
- ),
- 'date' => array(
- 'order' => 1,
- 'direction' => 'back',
- 'field' => ' IF(date_printed IS NULL, date_confirmed, date_printed) DESC, date_confirmed '
- ),
- 'payment_type' => array(),
- 'type' => array(),
- 'descr' => array(),
- );
- if ($GLOBALS['aPage']['NAME'] == 'list') {
- $this->sql['where'] = ' t_ticket.is_printed = 1 AND t_ticket.is_test = 0 AND LENGTH(t_ticket.bar_code) = 13 ';
- } elseif ($GLOBALS['aPage']['NAME'] == 'offline') {
- $this->sql['where'] = ' (is_offline = 1 ) AND LENGTH(t_ticket.bar_code) = 13 AND t_ticket.is_test = 0 ';
- } elseif ($GLOBALS['aPage']['NAME'] == 'deposit') {
- $this->sql['where'] = ' t_order.is_deposit = 1 AND t_ticket.is_test = 0 AND t_order.paid_status IN (2,9) ';
- } elseif ($GLOBALS['aPage']['NAME'] == 'reserve') {
- $this->sql['where'] = ' (is_printed = 0 AND reservation_id > 0 AND t_ticket.order_id = 0) AND LENGTH(t_ticket.bar_code) = 13 AND t_ticket.is_test = 0 ';
- } elseif ($GLOBALS['aPage']['NAME'] == 'sales') {
- $this->sql['where'] = ' ( t_ticket.is_test = 0 AND (t_order.is_deposit = 1 AND t_order.paid_status IN (2,9) OR t_ticket.is_printed = 1 OR t_order.paid_status IN (2,9) OR t_ticket.is_offline = 1) ) ';
- }
- $this->sql['select'] = ' t_order.date_confirmed, t_ticket_type.deposit_uah, t_order.payment_type, t_event_content.title AS event_title, ' .
- ' CONCAT_WS(" ", t_user.name, t_user.firstname, t_user.lastname) AS user_name, CONCAT_WS(" ", t_user_offline.name, t_user_offline.firstname, t_user_offline.lastname) AS offline_user_name, t_order.city_name, t_order.mobile, t_order.firstname, t_order.lastname, t_order.email, t_reservation.comments, ' .
- ' IF(t_order.id, CONCAT_WS(" ", t_ticket.price, t_order.price_currency), CONCAT_WS(" ", t_ticket_type.price_uah, "UAH")) AS price';
- $this->sql['left'] = ' LEFT JOIN t_order ON (t_order.id = t_ticket.order_id) ' .
- ' LEFT JOIN t_reservation ON (t_reservation.id = t_ticket.reservation_id) ' .
- ' LEFT JOIN t_user ON (t_reservation.user_id = t_user.id) ' .
- ' LEFT JOIN t_user AS t_user_offline ON (t_ticket.user_id = t_user_offline.id) ' .
- ' LEFT JOIN t_ticket_type ON (t_ticket.type_id = t_ticket_type.id) ' .
- ' LEFT JOIN t_event_content ON (t_event_content.id = t_ticket_type.event_id AND t_event_content.language_id = ' . $GLOBALS['lng']['id'] . ' ) ' .
- '';
- $this->fields = array(
- 'bar_code' => array('title' => 'Штрих-код',),
- 'type_id' => array('title' => 'Тип билета',),
- 'price' => array('title' => 'Сумма'),
- 'deposit_uah' => array('title' => 'Сумма депозита'),
- 'type' => array('title' => 'Тип продажи'),
- 'payment_type' => array('title' => 'Способ оплаты'),
- 'descr' => array('title' => 'Описание продажи'),
- 'event_id' => array('title' => 'Событие'),
- 'date' => array('title' => 'Дата'),
- 'date_printed' => array('title' => 'Дата'),
- 'date_confirmed' => array('title' => 'Дата'),
- );
- if ($GLOBALS['aPage']['NAME'] == 'deposit') {
- unset($this->list['bar_code']);
- unset($this->list['date_printed']);
- unset($this->list['price']);
- } else {
- unset($this->list['date_confirmed']);
- unset($this->list['deposit_uah']);
- }
- if ($GLOBALS['aPage']['NAME'] == 'sales') {
- $this->fields['price']['title'] = 'Сумма';
- unset($this->list['date_confirmed']);
- unset($this->list['date_printed']);
- } else {
- unset($this->list['type']);
- unset($this->list['payment_type']);
- unset($this->list['date']);
- }
- if ($GLOBALS['oAdmin']->cur_user['type'] == 'user') {
- unset($this->list['bar_code']);
- if ($GLOBALS['oAdmin']->cur_user['group_id'] == 3) {
- unset($this->list['type']);
- $this->sql['where'] = ' ( ' . $this->sql['where'] . ' ) AND t_order.promo_id = ' . $GLOBALS['oAdmin']->cur_user['id'];
- } else {
- $this->sql['where'] = ' ( ' . $this->sql['where'] . ' ) AND t_ticket.user_id = ' . $GLOBALS['oAdmin']->cur_user['id'];
- }
- }
- }
- public function __construct($options = array()) {
- $options['type'] = 'Ticket';
- parent:: __construct($options);
- }
- public function get($ticket_id, $field_name = 'id') {
- $tmp = $GLOBALS['dbh']->getRow('SELECT * FROM ' . $this->table_name . ' WHERE ' . $field_name . ' = ?', array($ticket_id));
- return $tmp;
- }
- public function getTicketInfo($ticket_id, $field_name = 'id') {
- $tmp = $GLOBALS['dbh']->getAll('
- SELECT t.*,tt.group_id
- FROM t_ticket AS t
- LEFT JOIN t_ticket_type AS tt ON (tt.id = t.type_id)
- WHERE ' . $field_name . ' = ?', array($ticket_id));
- return $tmp;
- }
- public function getBarCode($params = array()) {
- $rand = '';
- for ($i = 0; $i < 12; $i++)
- $rand .= (string) rand(0, 9);
- if (!$params['type'])
- $params['type'] = 'ticket';
- if (!$params['code_type'])
- $params['code_type'] = 'ean13';
- if ($params['type'] == 'reservation') {
- $digits = '1' . sprintf('%05d', $params['id']) . substr($rand, 0, 6);
- } else {
- // Check if we have external list of barcodes for this ticket type
- if ($params['ticket_type_id'] > 0) {
- if ((int) $params['place_id'] > 0) {
- $barcodeExternal = $GLOBALS['dbh']->getRow("SELECT * FROM " . $this->sTableBarcodeExternal . " WHERE type_id = '{$params['ticket_type_id']}' AND place_id = '{$params['place_id']}'");
- }
- if (empty($barcodeExternal['id'])) {
- $query = "SELECT * FROM " . $this->sTableBarcodeExternal . " WHERE type_id = '{$params['ticket_type_id']}' AND is_used = 0";
- $barcodeExternal = $GLOBALS['dbh']->getRow("SELECT * FROM " . $this->sTableBarcodeExternal . " WHERE type_id = '{$params['ticket_type_id']}' AND is_used = 0");
- }
- // We have barcode
- if ($barcodeExternal['id'] && !$params['is_test']) {
- // 1. Marking as used
- $GLOBALS['dbh']->autoExecute($this->sTableBarcodeExternal, array(
- 'is_used' => 1,
- 'date_used' => NOW,
- 'ticket_id' => $params['ticket_id'],
- 'is_bp' => (!empty($params['is_bp']) ? 1 : 0)
- ), DB_AUTOQUERY_UPDATE, ' id = ' . $barcodeExternal['id']);
- // 2. Returning barcode
- return array(
- 'code' => $barcodeExternal['bar_code'],
- 'type' => $barcodeExternal['code_type'] ? $barcodeExternal['code_type'] : $params['code_type'],
- );
- }
- }
- if (strlen($params['ticket_id']) == 6) {
- $digits = '7' . sprintf('%06d', $params['ticket_id']) . substr($rand, 0, 5);
- } else
- $digits = '7' . sprintf('%05d', $params['ticket_id']) . substr($rand, 0, 6);
- }
- return array(
- 'code' => ginst('Barcode')->makeEAN13($digits),
- 'type' => $params['code_type'],
- );
- }
- /**
- * Get barcode for booking place
- *
- * @param array $params - array with offline_user ID and assoc array of places id by ticketType
- * @return array - barCode and code type
- * @access public
- */
- public function getBookingBarCode($params = array()) {
- if ((int) $params['place_id'] > 0) {
- $barcodeExternal = $GLOBALS['dbh']->getRow("SELECT * FROM " . $this->sTableBarcodeExternal . " WHERE type_id = '{$params['type_id']}' AND place_id = '{$params['place_id']}'");
- }
- if (empty($barcodeExternal['id'])) {
- $barcodeExternal = $GLOBALS['dbh']->getRow("SELECT * FROM " . $this->sTableBarcodeExternal . " WHERE type_id = '{$params['type_id']}' AND is_used = 0");
- }
- if ($barcodeExternal['id']) {
- // 1. Marking as used
- $GLOBALS['dbh']->autoExecute($this->sTableBarcodeExternal, array(
- 'is_used' => 1,
- 'date_used' => NOW,
- 'booking_id' => $params['booking_id'],
- ), DB_AUTOQUERY_UPDATE, ' id = ' . $barcodeExternal['id']);
- // 2. Returning barcode
- return array(
- 'code' => $barcodeExternal['bar_code'],
- 'type' => $barcodeExternal['code_type'] ? $barcodeExternal['code_type'] : $params['code_type'],
- );
- } else {
- do {
- $barCode = $this->getBarCode($params);
- $barCodeExists = $GLOBALS['dbh']->getOne("SELECT id FROM t_ticket WHERE bar_code = '" . $barCode['code'] . "'");
- } while (!empty($barCodeExists));
- return $barCode;
- }
- }
- public function checkExternalBarcode($type_id, $bar_code) {
- $tmp = $GLOBALS['dbh']->getRow('SELECT * FROM ' . $this->sTableBarcodeExternal . ' WHERE type_id = ? AND bar_code = ?', array(
- $type_id, $bar_code
- ));
- return $tmp['id'] ? 1 : 0;
- }
- public function addExternalBarcode($params) {
- $GLOBALS['dbh']->autoExecute($this->sTableBarcodeExternal, array(
- 'bar_code' => $params['bar_code'],
- 'code_type' => $params['code_type'],
- 'type_id' => $params['type_id'],
- 'date_added' => NOW,
- 'is_used' => 0,
- 'added_by' => $params['user_id'],
- ));
- }
- public function getExternalBarcodes($ticket_type_id = false) {
- $tmp = $GLOBALS['dbh']->getAll('SELECT * FROM ' . $this->sTableBarcodeExternal . ' WHERE is_used = 0 AND type_id = ?', array(
- $ticket_type_id
- ));
- return $tmp;
- }
- public function generatePDF($params, $output_format = 'html') {
- set_time_limit(0);
- $tmp = (string) $params['ticket']['id'];
- $ticketType = ginst('TicketType')->getById($params['ticket']['type_id']);
- $params['event'] = ginst('Event')->getById($ticketType['event_id'], 'id', true);
- //pr($params);die();
- if (!$params['ticket']['format_id'])
- $params['ticket']['format_id'] = 1;
- $ticketFormat = ginst('TicketFormat')->getById($params['ticket']['format_id']);
- if (!empty($ticketFormat['id']) && in_array($ticketFormat['alias'], array('infopoint', 'termonew')) && $params['ticket']['group_id'] != 1) {
- $params['ticket']['format_id'] = 1;
- $ticketFormat = ginst('TicketFormat')->getById($params['ticket']['format_id']);
- }
- $params['ticket']['rules'] = $ticketType['ticket_text3'];
- $GLOBALS['smarty']->assign(array(
- 'eventInfo' => $params['event'],
- 'ticketType' => $ticketType,
- ));
- // getting dimensions of barcodes
- foreach (array('bar_code_image', 'bar_code_image_vertical', 'bar_code_image_large', 'bar_code_image_custom', 'bar_code_image_custom1', 'bar_code_image_vertical1') as $name)
- if (file_exists(DOC_ROOT . $params['ticket'][$name])) {
- list($params['ticket'][$name . '_width'], $params['ticket'][$name . '_height']) = getimagesize(DOC_ROOT . $params['ticket'][$name]);
- }
- $filename = 'dynamic/tickets/' . ($params['is_test'] ? 'test/' : '') . (int) $tmp{0} . '/' . (int) $tmp{1} . '/' . ($params['is_test'] ? 'TEST_' : '') . substr($params['event']['alias'], 0, 20) . '_' . $params['ticket']['order_id'] . '_' . $params['ticket']['id'] . ($params['format'] ? '_' . $params['format'] : '') . '.' . $output_format;
- $filenameFull = str_replace('//', '/', DOC_ROOT . '/' . $filename);
- if (!file_exists($filenameFull) || $params['force']) {
- $smartyTemplate = $params['ticket']['group_id'] == 1 ? 'ticket' : 'group_' . $params['ticket']['group_id'];
- $smartyTemplate_css = 'ticket';
- if ($params['ticket']['group_id'] == 2 && $params['ticket']['cert_id'] != 0) {
- $params['certificate'] = $GLOBALS['dbh']->getRow("
- SELECT tc.*
- FROM t_ticket_certificate AS tc
- LEFT JOIN t_certificate_code AS cc ON cc.certificate_id = tc.id
- WHERE cc.id = ? ", array($params['ticket']['cert_id']));
- if (!empty($params['certificate']['template']) && file_exists(DOC_ROOT . 'templates/pdf/certificates/' . $params['certificate']['template'] . '.tpl')) {
- $smartyTemplate = 'certificates/' . $params['certificate']['template'];
- $smartyTemplate_css = 'certificates/' .$params['certificate']['template'];
- } else {
- $smartyTemplate = "certificate_temp";
- $smartyTemplate_css = 'ticket';
- }
- }
- $path = pathinfo($filenameFull);
- if (!is_dir($path['dirname'])) {
- mkdir($path['dirname'], 0755, true);
- }
- if ($ticketFormat['id'] && $ticketFormat['alias'] != 'a4' && file_exists(DOC_ROOT . 'templates/pdf/' . $ticketFormat['alias'] . '/' . $smartyTemplate . '.tpl')) {
- $smartyTemplate = $ticketFormat['alias'] . '/' . $smartyTemplate;
- $smartyTemplate_css = $ticketFormat['alias'] . '/' . $smartyTemplate_css;
- }
- if (!empty($ticketFormat['id']) && in_array($ticketFormat['alias'], array('a4', 'infopoint', 'termonew')) && !empty($params['ticket']['user_id'])) {
- $userTicketFormat = ginst('UserTicketFormat')->getOne(array('where' => " user_id = '{$params['ticket']['user_id']}' "));
- if (!empty($userTicketFormat['ticket_sale_logo_ext']) && file_exists(DOC_ROOT . 'dynamic/user/' . sprintf('ticket_sale_logo_%06d_small.', $userTicketFormat['id']) . $userTicketFormat['ticket_sale_logo_ext'])) {
- $params['ticket']['ticket_sale_logo'] = '/dynamic/user/' . sprintf('ticket_sale_logo_%06d_small.', $userTicketFormat['id']) . $userTicketFormat['ticket_sale_logo_ext'];
- }
- }
- if (!empty($params['ticket']['order_id'])) {
- $userPromoId = $GLOBALS['dbh']->getOne("SELECT promo_id FROM t_order WHERE id = '{$params['ticket']['order_id']}'");
- if (!empty($userPromoId)) {
- $userTicketFormat = ginst('UserTicketFormat')->getOne(array('where' => " user_id = '{$userPromoId}' "));
- if (!empty($userTicketFormat['ticket_sale_logo_ext']) && file_exists(DOC_ROOT . 'dynamic/user/' . sprintf('ticket_sale_logo_%06d_small.', $userTicketFormat['id']) . $userTicketFormat['ticket_sale_logo_ext'])) {
- $params['ticket']['ticket_sale_logo'] = '/dynamic/user/' . sprintf('ticket_sale_logo_%06d_small.', $userTicketFormat['id']) . $userTicketFormat['ticket_sale_logo_ext'];
- }
- }
- }
- if (!empty($params['ticket']['user_id'])) {
- $offlineUser = ginst('User')->info(array('id' => $params['ticket']['user_id']));
- $params['ticket']['offline_user'] = $offlineUser['extended_name'];
- } elseif (empty($params['ticket']['user_id']) && $ticketFormat['alias'] == 'a4' && $params['event']['partner_id'] == 1) {
- }
- // fixes for some ticket parameters
- if ($params['ticket']['group_id'] == 2) {
- // if hotel then removing information about tickets from title
- $tmp = explode('+', $params['ticket']['title']);
- $params['ticket']['title'] = trim($tmp[0]);
- }
- $GLOBALS['smarty']->assign($params + array(
- 'host' => 'http://' . $_SERVER['HTTP_HOST'],
- 'is_print' => $is_filename ? 0 : 1,
- 'is_pdf' => $output_format == 'pdf' ? 1 : 0,
- ));
- if ($GLOBALS['bIsAdmin']) {
- $GLOBALS['smarty']->template_dir = DOC_ROOT . 'templates/';
- $GLOBALS['smarty']->compile_dir = DOC_ROOT . 'data/templates_c/';
- $GLOBALS['smarty']->config_dir = DOC_ROOT . 'data/configs/';
- $GLOBALS['smarty']->cache_dir = DOC_ROOT . 'data/cache/';
- $GLOBALS['smarty']->caching = false;
- $GLOBALS['smarty']->config_load($GLOBALS['smarty']->template_dir . 'lang/ru.conf');
- $GLOBALS['smarty']->assign(array(
- 'lng' => 'ru',
- ));
- }
- if ($params['order']['language_id'] != 1) {
- $GLOBALS['smarty']->config_load($GLOBALS['smarty']->template_dir . 'lang/' . $GLOBALS['lng']['ids'][$params['order']['language_id']] . '.conf');
- }
- $html = $GLOBALS['smarty']->fetch('pdf/' . $smartyTemplate . '.tpl');
- if ($output_format == 'pdf') {
- if (in_array($ticketFormat['alias'], array('ibiza'))) {
- include_once DOC_ROOT . "classes/tools/mPDFv5.7/mpdf.php";
- } else {
- include_once DOC_ROOT . "classes/tools/mPDF/mpdf.php";
- }
- if ($ticketFormat['alias'] != 'a4') {
- $mpdf = new mPDF('utf-8', array($ticketFormat['width'], $ticketFormat['height']), '8', '', 0, 0, 0, 0, 0, 0);
- } else {
- $mpdf = new mPDF('utf-8', 'A4', '8', '', 10, 10, 7, 7, 10, 10);
- }
- $mpdf->WriteHTML($GLOBALS['smarty']->fetch('pdf/' . $smartyTemplate_css . '.css.tpl'), 1);
- $mpdf->list_indent_first_level = 0;
- $mpdf->WriteHTML($html, 2);
- // Sometimes mPDF generating PDF with two pages, because ticket not fitting in one page
- // So we have to remove first blank page
- if (count($mpdf->pages) == 2) {
- $mpdf->pages[1] = $mpdf->pages[2];
- unset($mpdf->pages[2]);
- $mpdf->page = 1;
- }
- if ($ticketFormat['alias'] == 'karabas' && !$GLOBALS['isLocal']) {
- // We have to save PDF to temp file
- $filenameFull_temp = str_replace('.pdf', '_original.pdf', $filenameFull);
- $mpdf->Output($filenameFull_temp, 'F');
- exec('/usr/local/bin/pdf90 "' . $filenameFull_temp . '" --outfile "' . $filenameFull . '"');
- } else {
- $mpdf->Output($filenameFull, 'F');
- }
- switch ($ticketFormat['alias']) {
- case 'kobzov-termo':
- $this->rotateTicket($filenameFull, 180);
- break;
- case 'infopoint':
- $this->rotateTicket($filenameFull, 90);
- break;
- }
- } else {
- file_put_contents($filenameFull, $html);
- }
- } else {
- $html = file_get_contents($filenameFull);
- }
- if ($output_format == 'pdf' && !$params['ticket']['is_pdf'] && !$params['is_test']) {
- $GLOBALS['dbh']->autoExecute('t_ticket', array(
- 'is_pdf' => 1,
- ), DB_AUTOQUERY_UPDATE, ' id = ' . $params['ticket']['id']);
- }
- ginst('Order')->addLog(array(
- 'order_id' => $params['ticket']['order_id'],
- 'action' => $params['download'] ? 'download-pdf' : ($params['force'] ? 're-' : '') . 'generate-pdf',
- 'info' => array(
- 'id' => $params['ticket']['id'],
- 'bar_code' => $params['ticket']['bar_code'],
- 'format' => $output_format,
- 'force' => $params['force'],
- 'download' => $params['download'],
- ),
- ));
- if ($params['is_filename']) {
- return $filenameFull;
- } else {
- if ($output_format == 'html') {
- echo $html;
- } elseif ($output_format == 'pdf') {
- $pdf = file_get_contents($filenameFull);
- header("Content-Type: application/pdf");
- if ($params['download']) {
- header('Content-Disposition: attachment; filename="' . basename($filenameFull) . '"');
- echo $pdf;
- } else {
- header('Content-disposition: inline; filename="' . basename($filenameFull) . '"');
- echo $pdf;
- }
- exit;
- }
- }
- }
- public function generatePDFBooking($params, $outputFormat = 'html') {
- global $smarty;
- set_time_limit(0);
- $ticketFormat = ginst('TicketFormat')->getById($params['format'], 'alias');
- // getting dimensions of barcodes
- foreach (array('bar_code_image', 'bar_code_image_vertical', 'bar_code_image_large', 'bar_code_image_custom', 'bar_code_image_custom1', 'bar_code_image_vertical1') as $name) {
- if (file_exists(DOC_ROOT . $params['ticket'][$name])) {
- list($params['ticket'][$name . '_width'], $params['ticket'][$name . '_height']) = getimagesize(DOC_ROOT . $params['ticket'][$name]);
- }
- }
- $typeId = (int) $params['ticket']['type_id'];
- $reserveId = (int) $params['reserve_id'];
- if ($params['ticket']['type_place_id']) {
- $typePlaceId = $params['ticket']['type_place_id'];
- $placeInfo = $params['order']['places'][$typePlaceId];
- $sectorTitle = toAscii($placeInfo['sector_title']);
- $typePlaceTitle = $this->typePlaceTitle[$placeInfo['type_place']];
- $row = $placeInfo['row'];
- $number = $placeInfo['number'];
- $filenameTmp = "dynamic/tickets/booking/{$typeId}/Booking_Sector-{$sectorTitle}_{$typePlaceTitle}-{$row}_Place-{$number}_{$reserveId}.{$outputFormat}";
- $filename = preg_replace('/Sector-sector/i', 'Sector', $filenameTmp);
- $filenameFull = str_replace('//', '/', DOC_ROOT . '/' . $filename);
- } else {
- $titlePrint = toAscii($params['ticketType']['title_print']);
- $filenameTmp = "dynamic/tickets/booking/{$typeId}/Booking_Zone-{$titlePrint}_{$reserveId}.{$outputFormat}";
- $filename = preg_replace('/Zone-zone/i', 'Zone', $filenameTmp);
- $filenameFull = str_replace('//', '/', DOC_ROOT . '/' . $filename);
- }
- if (!file_exists($filenameFull) || $params['force']) {
- $path = pathinfo($filenameFull);
- if (!is_dir($path['dirname']))
- mkdir($path['dirname'], 0777, true);
- if ($ticketFormat['alias'] == 'a4') {
- $smartyTemplate = "ticket";
- $smartyTemplate_css = 'ticket';
- } else {
- $smartyTemplate = 'termonew/ticket';
- $smartyTemplate_css = 'termonew/ticket';
- }
- $smarty->assign($params + array(
- 'host' => 'http://' . $_SERVER['HTTP_HOST'],
- 'is_print' => $params['is_filename'] ? 0 : 1,
- 'is_pdf' => $outputFormat == 'pdf' ? 1 : 0,
- ));
- if ($GLOBALS['bIsAdmin']) {
- $smarty->template_dir = DOC_ROOT . 'templates/';
- $smarty->compile_dir = DOC_ROOT . 'data/templates_c/';
- $smarty->config_dir = DOC_ROOT . 'data/configs/';
- $smarty->cache_dir = DOC_ROOT . 'data/cache/';
- $smarty->caching = false;
- $smarty->config_load($smarty->template_dir . 'lang/ru.conf');
- $smarty->assign(array(
- 'lng' => 'ru',
- ));
- }
- $html = $smarty->fetch(DOC_ROOT . '/templates/pdf/' . $smartyTemplate . '.tpl');
- if ($outputFormat == 'pdf') {
- include_once DOC_ROOT . "classes/tools/mPDF/mpdf.php";
- if ($ticketFormat['alias'] != 'a4') {
- $mpdf = new mPDF('utf-8', array($ticketFormat['width'], $ticketFormat['height']), '8', '', 0, 0, 0, 0, 0, 0);
- } else {
- $mpdf = new mPDF('utf-8', 'A4', '8', '', 10, 10, 7, 7, 10, 10);
- }
- $mpdf->WriteHTML($smarty->fetch('pdf/' . $smartyTemplate_css . '.css.tpl'), 1);
- $mpdf->list_indent_first_level = 0;
- $mpdf->WriteHTML($html, 2);
- // Sometimes mPDF generating PDF with two pages, because ticket not fitting in one page
- // So we have to remove first blank page
- if (count($mpdf->pages) == 2) {
- $mpdf->pages[1] = $mpdf->pages[2];
- unset($mpdf->pages[2]);
- $mpdf->page = 1;
- }
- $mpdf->Output($filenameFull, 'F');
- } else {
- file_put_contents($filenameFull, $html);
- }
- } else {
- $html = file_get_contents($filenameFull);
- }
- if ($params['is_filename']) {
- return $filenameFull;
- } else {
- if ($outputFormat == 'html') {
- echo $html;
- } elseif ($outputFormat == 'pdf') {
- $pdf = file_get_contents($filenameFull);
- header("Content-Type: application/pdf");
- if ($params['download']) {
- header('Content-Disposition: attachment; filename="' . basename($filenameFull) . '"');
- echo $pdf;
- } else {
- header('Content-disposition: inline; filename="' . basename($filenameFull) . '"');
- echo $pdf;
- }
- exit;
- }
- }
- }
- /**
- * This method returns barcodes list by event id
- * @param int $eventId
- * @return array
- */
- public function getBarcodeList($eventId = false) {
- if (!$eventId)
- return;
- $listTmp = $GLOBALS['dbh']->getAll('
- SELECT
- `t`.`type_id`,
- `t`.`bar_code`,
- `t`.`bar_code_temp`
- FROM
- `t_ticket` AS `t`
- INNER JOIN `t_order` AS `o`
- ON (`o`.`id` = `t`.`order_id`
- AND `o`.`paid_status` <> 8
- AND `o`.`is_test` = 0
- AND (`o`.`payment_type` = "free" AND (`o`.`payment_subtype` <> "test" OR `o`.`payment_subtype` IS NULL) OR `o`.`payment_type` <> "free")
- AND `o`.`event_id` = ?)
- INNER JOIN `t_ticket_type` AS `tt`
- ON `tt`.`id` = `t`.`type_id`
- WHERE `t`.`is_printed` = 1
- AND `t`.`is_test` = 0
- AND `t`.`is_canceled` = 0
- UNION
- SELECT
- `pr`.`type_id`,
- `pr`.`bar_code`,
- NULL AS `bar_code_temp`
- FROM
- `t_ticket_type_place_reserved` AS `pr`
- INNER JOIN `t_ticket_type` AS `tt` ON `tt`.`id` = `pr`.`type_id`
- WHERE `tt`.`event_id` = ? AND `pr`.`active` = 1
- ', array($eventId, $eventId));
- return $listTmp;
- }
- public function getEventsSalesTickets($eventsIds = array()) {
- global $dbh;
- if (empty($eventsIds)) {
- return array();
- }
- if (is_array($eventsIds)) {
- $ids = implode(',', $eventsIds);
- } else {
- $ids = $eventsIds;
- }
- return $dbh->getAssoc("
- SELECT
- o.event_id, tt.id AS type_id, tt.group_id,
- IF(tt.group_id = 2, 0, tt.`price_single`) price_single, IF(tt.group_id = 2, t.price, tt.`price_single`) AS price
- FROM {$this->table_name} AS t
- LEFT JOIN t_order AS o ON o.`id` = t.order_id
- LEFT JOIN t_ticket_type AS tt ON tt.`id` = t.type_id
- WHERE
- o.paid_status IN (2,9) AND o.payment_type <> 'free' AND o.is_free = 0
- AND t.`is_printed` = 1 AND t.`is_test` = 0 AND t.`is_hidden` = 0 AND t.`is_canceled` = 0
- AND o.event_id IN (!)
- ORDER BY t.id
- ", 0, array($ids), DB_FETCHMODE_ASSOC, 1);
- }
- /**
- * Rotate PDF ticket file
- * @param string $fileName full name of the file
- * @param int $degree ration degree
- * @return boolean false on failure
- */
- public function rotateTicket($fileName = '', $degree = 180) {
- if (!file_exists($fileName)) {
- return false;
- }
- $fileCopy = str_replace('.pdf', '_copy.pdf', $fileName);
- if (!file_exists($fileCopy)) {
- unlink($fileCopy);
- }
- if ($degree == 180) {
- $command = 'pdftk ' . $fileName . ' cat 1-endsouth output ' . $fileCopy;
- } else {
- $command = 'pdftk ' . $fileName . ' cat 1-endeast output ' . $fileCopy;
- }
- exec($command);
- if (!file_exists($fileCopy)) {
- return false;
- }
- unlink($fileName);
- rename($fileCopy, $fileName);
- }
- public function margePDF($params = array()) {
- if (empty($params)) {
- return false;
- }
- $ticketFormat = ginst('TicketFormat')->getById($params['order']['tickets_format_id']);
- set_include_path(DOC_ROOT . "classes/tools/");
- require_once DOC_ROOT . "classes/tools/mPDF/mpdf.php";
- if ($ticketFormat['alias'] == 'infopoint') {
- $mpdf = new mPDF('utf-8', array($ticketFormat['height'], $ticketFormat['width']), '8', '', 0, 0, 0, 0, 0, 0);
- } elseif ($ticketFormat['alias'] != 'a4') {
- $mpdf = new mPDF('utf-8', array($ticketFormat['width'], $ticketFormat['height']), '8', '', 0, 0, 0, 0, 0, 0);
- } else {
- $mpdf = new mPDF('utf-8', 'A4', '8', '', 10, 10, 7, 7, 10, 10);
- }
- $mpdf->list_indent_first_level = 0;
- $mpdf->defaultfooterfontstyle = 'blank';
- $mpdf->defaultfooterline = 0;
- $mpdf->SetImportUse();
- $path = 'http://' . $GLOBALS['baseDomain'] . '/dynamic/tickets/merged/';
- $catalog = DOC_ROOT . 'dynamic/tickets/';
- $catalogPDF = $catalog . 'merged/';
- if (!is_dir($catalogPDF)) {
- mkdir($catalogPDF, 0777, true);
- }
- $shortName = $params['order']['hash'] . '.pdf';
- $filenameFull = $catalogPDF . $shortName;
- foreach ($params['order']['items'] as $ticket) {
- if ($ticket['group_id'] <> 1) {
- continue;
- }
- $shortFilename = substr($params['event']['alias'], 0, 20) . '_' . $ticket['order_id'] . '_' . $ticket['id'] . '.pdf';
- $filename = $catalog . (int) $ticket['id'][0] . '/' . (int) $ticket['id'][1] . '/' . $shortFilename;
- $sourceFile = $mpdf->SetSourceFile($filename);
- $mpdf->AddPage('', '', '1', 'i', 'on');
- $tplId = $mpdf->ImportPage($sourceFile);
- $mpdf->UseTemplate($tplId, '', '', '', '');
- }
- $mpdf->Output($filenameFull, 'F');
- if ($params['is_filename']) {
- return $path . $shortName;
- } else {
- $pdf = file_get_contents($filenameFull);
- header("Content-Type: application/pdf");
- if ($params['download']) {
- header('Content-Disposition: attachment; filename="' . basename($filenameFull) . '"');
- echo $pdf;
- } else {
- header('Content-disposition: inline; filename="' . basename($filenameFull) . '"');
- echo $pdf;
- }
- }
- exit;
- }
- public function genTax($params) {
- $catalog = 'http://' . $GLOBALS['baseDomain'] . '/dynamic/tickets/';
- foreach ($params['order']['items'] as $ticket) {
- if (in_array($ticket['group_id'], array(6, 7))) {
- $shortFilename = substr($params['event']['alias'], 0, 20) . '_' . $ticket['order_id'] . '_' . $ticket['id'] . '.pdf';
- $filename = $catalog . (int) $ticket['id'][0] . '/' . (int) $ticket['id'][1] . '/' . $shortFilename;
- break;
- }
- }
- return $filename;
- }
- }
- endif;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement