You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
235 lines
6.3 KiB
235 lines
6.3 KiB
<html>
|
|
|
|
<head>
|
|
<style type="text/css">
|
|
@page {
|
|
header: html_def;
|
|
footer: html_def;
|
|
margin: 15mm;
|
|
margin-top: 30mm;
|
|
margin-bottom: 22mm;
|
|
}
|
|
.logo {
|
|
max-width: 220px;
|
|
max-height: 71px;
|
|
width: auto;
|
|
height: auto;
|
|
margin: 0;
|
|
}
|
|
#ticket_thread .message,
|
|
#ticket_thread .response,
|
|
#ticket_thread .note {
|
|
margin-top:10px;
|
|
border:1px solid #aaa;
|
|
border-bottom:2px solid #aaa;
|
|
}
|
|
#ticket_thread .header {
|
|
text-align:left;
|
|
border-bottom:1px solid #aaa;
|
|
padding:3px;
|
|
width: 100%;
|
|
table-layout: fixed;
|
|
}
|
|
#ticket_thread .message .header {
|
|
background:#C3D9FF;
|
|
}
|
|
#ticket_thread .response .header {
|
|
background:#DDD;
|
|
}
|
|
#ticket_thread .note .header {
|
|
background:#FFE;
|
|
}
|
|
#ticket_thread .info {
|
|
padding:5px;
|
|
background: snow;
|
|
border-top: 0.3mm solid #ccc;
|
|
}
|
|
|
|
table.meta-data {
|
|
width: 100%;
|
|
}
|
|
table.custom-data {
|
|
margin-top: 10px;
|
|
}
|
|
table.custom-data th {
|
|
width: 25%;
|
|
}
|
|
table.custom-data th,
|
|
table.meta-data th {
|
|
text-align: right;
|
|
background-color: #ddd;
|
|
padding: 3px 8px;
|
|
}
|
|
table.meta-data td {
|
|
padding: 3px 8px;
|
|
}
|
|
.faded {
|
|
color:#666;
|
|
}
|
|
.pull-left {
|
|
float: left;
|
|
}
|
|
.pull-right {
|
|
float: right;
|
|
}
|
|
.flush-right {
|
|
text-align: right;
|
|
}
|
|
.flush-left {
|
|
text-align: left;
|
|
}
|
|
.ltr {
|
|
direction: ltr;
|
|
unicode-bidi: embed;
|
|
}
|
|
.headline {
|
|
border-bottom: 2px solid black;
|
|
font-weight: bold;
|
|
}
|
|
div.hr {
|
|
border-top: 0.2mm solid #bbb;
|
|
margin: 0.5mm 0;
|
|
font-size: 0.0001em;
|
|
}
|
|
.thread-entry, .thread-body {
|
|
page-break-inside: avoid;
|
|
}
|
|
<?php include ROOT_DIR . 'css/thread.css'; ?>
|
|
</style>
|
|
</head>
|
|
<body>
|
|
|
|
<htmlpageheader name="def" style="display:none">
|
|
<?php if ($logo = $cfg->getClientLogo()) { ?>
|
|
<img src="cid:<?php echo $logo->getKey(); ?>" class="logo"/>
|
|
<?php } else { ?>
|
|
<img src="<?php echo INCLUDE_DIR . 'fpdf/print-logo.png'; ?>" class="logo"/>
|
|
<?php } ?>
|
|
<div class="hr"> </div>
|
|
<table><tr>
|
|
<td class="flush-left"><?php echo (string) $ost->company; ?></td>
|
|
<td class="flush-right"><?php echo Format::daydatetime(Misc::gmtime()); ?></td>
|
|
</tr></table>
|
|
</htmlpageheader>
|
|
|
|
<htmlpagefooter name="def" style="display:none">
|
|
<div class="hr"> </div>
|
|
<table width="100%"><tr><td class="flush-left">
|
|
Ticket #<?php echo $ticket->getNumber(); ?> printed by
|
|
<?php echo $thisclient->getName()->getFirst(); ?> on
|
|
<?php echo Format::daydatetime(Misc::gmtime()); ?>
|
|
</td>
|
|
<td class="flush-right">
|
|
Page {PAGENO}
|
|
</td>
|
|
</tr></table>
|
|
</htmlpagefooter>
|
|
|
|
<!-- Ticket metadata -->
|
|
<h1>Ticket #<?php echo $ticket->getNumber(); ?></h1>
|
|
<table class="meta-data" cellpadding="0" cellspacing="0">
|
|
<tbody>
|
|
<tr>
|
|
<th><?php echo __('Status'); ?></th>
|
|
<td><?php echo $ticket->getStatus(); ?></td>
|
|
<th><?php echo __('Name'); ?></th>
|
|
<td><?php echo $ticket->getOwner()->getName(); ?></td>
|
|
</tr>
|
|
<tr>
|
|
<th><?php echo __('Priority'); ?></th>
|
|
<td><?php echo $ticket->getPriority(); ?></td>
|
|
<th><?php echo __('Email'); ?></th>
|
|
<td><?php echo $ticket->getEmail(); ?></td>
|
|
</tr>
|
|
<tr>
|
|
<th><?php echo __('Department'); ?></th>
|
|
<td><?php echo $ticket->getDept(); ?></td>
|
|
<th><?php echo __('Phone'); ?></th>
|
|
<td><?php echo $ticket->getPhoneNumber(); ?></td>
|
|
</tr>
|
|
<tr>
|
|
<th><?php echo __('Create Date'); ?></th>
|
|
<td><?php echo Format::datetime($ticket->getCreateDate()); ?></td>
|
|
<th><?php echo __('Source'); ?></th>
|
|
<td><?php echo $ticket->getSource(); ?></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<!-- Custom Data -->
|
|
<?php
|
|
foreach (DynamicFormEntry::forTicket($ticket->getId()) as $form) {
|
|
// Skip core fields shown earlier in the ticket view
|
|
$answers = $form->getAnswers()->exclude(Q::any(array(
|
|
'field__flags__hasbit' => DynamicFormField::FLAG_EXT_STORED,
|
|
Q::not(array('field__flags__hasbit' => DynamicFormField::FLAG_CLIENT_VIEW)),
|
|
'field__name__in' => array('subject', 'priority'),
|
|
)));
|
|
if (count($answers) == 0)
|
|
continue;
|
|
?>
|
|
<table class="custom-data" cellspacing="0" cellpadding="4" width="100%" border="0">
|
|
<tr><td colspan="2" class="headline flush-left"><?php echo $form->getTitle(); ?></th></tr>
|
|
<?php foreach($answers as $a) {
|
|
if (!($v = $a->display())) continue; ?>
|
|
<tr>
|
|
<th><?php
|
|
echo $a->getField()->get('label');
|
|
?>:</th>
|
|
<td><?php
|
|
echo $v;
|
|
?></td>
|
|
</tr>
|
|
<?php } ?>
|
|
</table>
|
|
<?php
|
|
$idx++;
|
|
} ?>
|
|
|
|
<!-- Ticket Thread -->
|
|
<h2><?php echo $ticket->getSubject(); ?></h2>
|
|
<div id="ticket_thread">
|
|
<?php
|
|
$types = array('M', 'R');
|
|
|
|
if ($thread = $ticket->getThreadEntries($types)) {
|
|
$thread = ThreadEntry::sortEntries($thread, $ticket);
|
|
$threadTypes=array('M'=>'message','R'=>'response', 'N'=>'note');
|
|
// Check for Agent Identity Masking
|
|
$agentmasking = $cfg->hideStaffName();
|
|
foreach ($thread as $entry) { ?>
|
|
<div class="thread-entry <?php echo $threadTypes[$entry->type]; ?>">
|
|
<table class="header"><tr><td>
|
|
<span><?php
|
|
echo Format::datetime($entry->created);?></span>
|
|
<span style="padding:0 1em" class="faded title"><?php
|
|
echo Format::truncate($entry->title, 100); ?></span>
|
|
</td>
|
|
<td class="flush-right faded title" style="white-space:no-wrap">
|
|
<?php
|
|
// If Identity Masking is Enabled hide Agent's name
|
|
echo ($entry->staff_id && $agentmasking)
|
|
? __('Staff') : Format::htmlchars($entry->getName()); ?></span>
|
|
</td>
|
|
</tr></table>
|
|
<div class="thread-body">
|
|
<div><?php echo $entry->getBody()->display('pdf'); ?></div>
|
|
</div>
|
|
<?php
|
|
if ($entry->has_attachments
|
|
&& ($files = $entry->attachments)) { ?>
|
|
<div class="info">
|
|
<?php foreach ($files as $A) { ?>
|
|
<div>
|
|
<span><?php echo Format::htmlchars($A->file->name); ?></span>
|
|
<span class="faded">(<?php echo Format::file_size($A->file->size); ?>)</span>
|
|
</div>
|
|
<?php } ?>
|
|
</div>
|
|
<?php } ?>
|
|
</div>
|
|
<?php }
|
|
} ?>
|
|
</div>
|
|
</body>
|
|
</html>
|