diff --git a/include/class.pdf.php b/include/class.pdf.php new file mode 100644 index 0000000000000000000000000000000000000000..4d5fe5f76bc899816d13e519ac8e34a34b713bc6 --- /dev/null +++ b/include/class.pdf.php @@ -0,0 +1,213 @@ +<?php +/********************************************************************* + class.pdf.php + + Ticket PDF Export + + Peter Rotich <peter@osticket.com> + Copyright (c) 2006-2012 osTicket + http://www.osticket.com + + Released under the GNU General Public License WITHOUT ANY WARRANTY. + See LICENSE.TXT for details. + + vim: expandtab sw=4 ts=4 sts=4: +**********************************************************************/ + +define('THIS_DIR', str_replace('\\\\', '/', realpath(dirname(__FILE__))) . '/'); //Include path.. +define('FPDF_DIR', THIS_DIR . 'fpdf/'); +define('FPDF_FONTPATH', FPDF_DIR . 'font/'); //fonts directory. +session_cache_limiter('private'); +require (FPDF_DIR . 'fpdf.php'); + +class Ticket2PDF extends FPDF +{ + + var $includenotes = false; + + var $pageOffset = 0; + + var $ticket = null; + + function Ticket2PDF($ticket, $notes=false) { + + parent::FPDF(); + + $this->ticket = $ticket; + + $this->includenotes = $notes; + $this->setMargins(5, 2, 2); + $this->AliasNbPages(); + $this->AddPage(); + $this->cMargin = 3; + $this->_print(); + } + + function getTicket() { + return $this->ticket; + } + + //report header...most stuff are hard coded for now... + function Header() { + global $cfg; + + //Common header + $this->Ln(2); + $this->SetFont('Times', 'B', 16); + $this->Image(FPDF_DIR . 'print-logo.png', null, 5, 0, 20); + $this->SetX(200, 10); + $this->Cell(0, 10, "Support Ticket System", 0, 1, 'R', 0); + //$this->SetY(40); + $this->SetXY(60, 20); + $this->SetFont('Arial', 'B', 16); + $this->Cell(0, 3, 'Ticket #'.$this->getTicket()->getExtId(), 0, 2, 'L'); + $this->SetX($this->lMargin); + $this->Cell(0, 3, '', "B", 2, 'L'); + $this->SetFont('Arial', 'I',10); + $this->Cell(0, 5, 'Generated on '.Format::date($cfg->getDateTimeFormat(), Misc::gmtime(), $_SESSION['TZ_OFFSET'], $_SESSION['TZ_DST']), 0, 0, 'L'); + $this->Cell(0, 5, 'Date & Time based on GMT '.$_SESSION['TZ_OFFSET'], 0, 1, 'R'); + $this->Ln(10); + } + + //Page footer baby + function Footer() { + global $thisstaff; + + $this->SetY(-10); + $this->Cell(0, 2, '', "T", 2, 'L'); + $this->SetFont('Arial', 'I', 9); + $this->Cell(0, 7, 'Ticket printed by '.$thisstaff->getUsername().' on '.date('r'), 0, 0, 'L'); + //$this->Cell(0,10,'Page '.($this->PageNo()-$this->pageOffset).' of {nb} '.$this->pageOffset.' '.$this->PageNo(),0,0,'R'); + $this->Cell(0, 7, 'Page ' . ($this->PageNo() - $this->pageOffset), 0, 0, 'R'); + } + + function WriteText($w, $text, $border) { + + $this->SetFont('Times','',11); + $this->MultiCell($w, 5, $text, $border, 'L'); + + } + + function _print() { + + if(!($ticket=$this->getTicket())) + return; + + $w =(($this->w/2)-$this->lMargin); + $l = 40; + $c = $w-$l; + $this->setDrawColor(220, 220, 220); + $this->setFillColor(244, 250, 255); + $this->setX($this->lMargin); + $this->SetFont('Arial', 'B', 11); + $this->Cell($l, 7, 'Status', 1, 0, 'L', true); + $this->SetFont(''); + $this->Cell($c, 7, $ticket->getStatus(), 1, 0, 'L', true); + $this->SetFont('Arial', 'B', 11); + $this->Cell($l, 7, 'Name', 1, 0, 'L', true); + $this->SetFont(''); + $this->Cell($c, 7, $ticket->getName(), 1, 1, 'L', true); + $this->SetFont('Arial', 'B', 11); + $this->Cell($l, 7, 'Priority', 1, 0, 'L', true); + $this->SetFont(''); + $this->Cell($c, 7, $ticket->getPriority(), 1, 0, 'L', true); + $this->SetFont('Arial', 'B', 11); + $this->Cell($l, 7, 'Email', 1, 0, 'L', true); + $this->SetFont(''); + $this->Cell($c, 7, $ticket->getEmail(), 1, 1, 'L', true); + $this->SetFont('Arial', 'B', 11); + $this->Cell($l, 7, 'Department', 1, 0, 'L', true); + $this->SetFont(''); + $this->Cell($c, 7, $ticket->getDeptName(), 1, 0, 'L', true); + $this->SetFont('Arial', 'B', 11); + $this->Cell($l, 7, 'Phone', 1, 0, 'L', true); + $this->SetFont(''); + $this->Cell($c, 7, $ticket->getPhoneNumber(), 1, 1, 'L', true); + $this->SetFont('Arial', 'B', 11); + $this->Cell($l, 7, 'Create Date', 1, 0, 'L', true); + $this->SetFont(''); + $this->Cell($c, 7, Format::db_datetime($ticket->getCreateDate()), 1, 0, 'L', true); + $this->SetFont('Arial', 'B', 11); + $this->Cell($l, 7, 'Source', 1, 0, 'L', true); + $this->SetFont(''); + $this->Cell($c, 7, ucfirst($ticket->getSource()), 1, 0, 'L', true); + $this->Ln(15); + + $this->SetFont('Arial', 'B', 11); + if($ticket->isOpen()) { + $this->Cell($l, 7, 'Assigned To', 1, 0, 'L', true); + $this->SetFont(''); + $this->Cell($c, 7, $ticket->isAssigned()?implode('/', $ticket->getAssignees()):' -- ', 1, 0, 'L', true); + } else { + + $closedby = 'unknown'; + if(($staff = $ticket->getStaff())) + $closedby = $staff->getName(); + + $this->Cell($l, 7, 'Closed By', 1, 0, 'L', true); + $this->SetFont(''); + $this->Cell($c, 7, $closedby, 1, 0, 'L', true); + } + + $this->SetFont('Arial', 'B', 11); + $this->Cell($l, 7, 'Subject', 1, 0, 'L', true); + $this->SetFont(''); + $this->Cell($c, 7, $ticket->getSubject(), 1, 1, 'L', true); + $this->SetFont('Arial', 'B', 11); + $this->Cell($l, 7, 'Last Response', 1, 0, 'L', true); + $this->SetFont(''); + $this->Cell($c, 7, Format::db_datetime($ticket->getLastRespDate()), 1, 0, 'L', true); + $this->SetFont('Arial', 'B', 11); + $this->Cell($l, 7, 'Help Topic', 1, 0, 'L', true); + $this->SetFont(''); + $this->Cell($c, 7, $ticket->getHelpTopic(), 1, 1, 'L', true); + $this->SetFont('Arial', 'B', 11); + if($ticket->isOpen()) { + $this->Cell($l, 7, 'Due Date', 1, 0, 'L', true); + $this->SetFont(''); + $this->Cell($c, 7, Format::db_datetime($ticket->getDueDate()), 1, 0, 'L', true); + } else { + $this->Cell($l, 7, 'Close Date', 1, 0, 'L', true); + $this->SetFont(''); + $this->Cell($c, 7, Format::db_datetime($ticket->getCloseDate()), 1, 0, 'L', true); + } + + $this->SetFont('Arial', 'B', 11); + $this->Cell($l, 7, 'Last Message', 1, 0, 'L', true); + $this->SetFont(''); + $this->Cell($c, 7, Format::db_datetime($ticket->getLastMsgDate()), 1, 1, 'L', true); + $this->Ln(10); + + //Table header colors (RGB) + $colors = array('M'=>array(195, 217, 255), + 'R'=>array(255, 224, 179), + 'N'=>array(250, 250, 210)); + //Get ticket thread + if(($entries = $ticket->getThreadWithNotes())) { + foreach($entries as $entry) { + + $color = $colors[$entry['thread_type']]; + + $this->setFillColor($color[0], $color[1], $color[2]); + $this->SetFont('Arial', 'B', 11); + $this->Cell($w/2, 7, Format::db_datetime($entry['created']), 'LTB', 0, 'L', true); + $this->SetFont('Arial', '', 10); + $this->Cell($w, 7, $entry['title'], 'TB', 0, 'L', true); + $this->Cell($w/2, 7, $entry['poster'], 'TBR', 1, 'L', true); + $this->SetFont(''); + $text= $entry['body']; + if($entry['attachments'] + && ($attachments = $ticket->getAttachments($entry['id'], $entry['thread_type']))) { + foreach($attachments as $attachment) + $files[]= $attachment['name']; + + $text="\n\n[".implode(', ',$files)."]\n"; + } + $this->WriteText($w*2, $text, 1); + $this->Ln(5); + } + } + + } +} +?> diff --git a/include/fpdf/print-logo.png b/include/fpdf/print-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..6526ebe0a15f393382e0339b38cef8422d7ff471 Binary files /dev/null and b/include/fpdf/print-logo.png differ