Newer
Older
<?php
//Note that ticket obj is initiated in tickets.php.
if(!defined('OSTSCPINC') || !$thisstaff || !is_object($ticket) || !$ticket->getId()) die('Invalid path');
//Make sure the staff is allowed to access the page.
if(!@$thisstaff->isStaff() || !$ticket->checkStaffAccess($thisstaff)) die('Access Denied');
//Re-use the post info on error...savekeyboards.org (Why keyboard? -> some people care about objects than users!!)
$info=($_POST && $errors)?Format::input($_POST):array();
//Auto-lock the ticket if locking is enabled.. If already locked by the user then it simply renews.
if($cfg->getLockTime() && !$ticket->acquireLock($thisstaff->getId(),$cfg->getLockTime()))
$warn.='Unable to obtain a lock on the ticket';
//Get the goodies.
$dept = $ticket->getDept(); //Dept
$staff = $ticket->getStaff(); //Assigned or closed by..
$team = $ticket->getTeam(); //Assigned team.
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
$lock = $ticket->getLock(); //Ticket lock obj
$id = $ticket->getId(); //Ticket ID.
//Useful warnings and errors the user might want to know!
if($ticket->isAssigned() && (
($staff && $staff->getId()!=$thisstaff->getId())
|| ($team && !$team->hasMember($thisstaff))
))
$warn.=' <span class="Icon assignedTicket">Ticket is assigned to '.implode('/', $ticket->getAssignees()).'</span>';
if(!$errors['err'] && ($lock && $lock->getStaffId()!=$thisstaff->getId()))
$errors['err']='This ticket is currently locked by '.$lock->getStaffName();
if(!$errors['err'] && ($emailBanned=TicketFilter::isBanned($ticket->getEmail())))
$errors['err']='Email is in banlist! Must be removed before any reply/response';
$unbannable=($emailBanned) ? BanList::includes($ticket->getEmail()) : false;
if($ticket->isOverdue())
$warn.=' <span class="Icon overdueTicket">Marked overdue!</span>';
?>
<table width="940" cellpadding="2" cellspacing="0" border="0">
<tr>
<td width="50%" class="has_bottom_border">
<h2><a href="tickets.php?id=<?php echo $ticket->getId(); ?>" title="Reload"><i class="icon-refresh"></i> Ticket #<?php echo $ticket->getExtId(); ?></a></h2>
</td>
<td width="50%" class="right_align has_bottom_border">
<?php
if($thisstaff->canBanEmails() || ($dept && $dept->isManager($thisstaff))) { ?>
<span class="action-button" data-dropdown="#action-dropdown-more">
<span ><i class="icon-cog"></i> More</span>
<i class="icon-caret-down"></i>
</span>
<?php
} ?>
<?php if($thisstaff->canDeleteTickets()) { ?>
<a id="ticket-delete" class="action-button" href="#delete"><i class="icon-trash"></i> Delete</a>
<?php } ?>
if($thisstaff->canCloseTickets()) {
if($ticket->isOpen()) {?>
<a id="ticket-close" class="action-button" href="#close"><i class="icon-remove-circle"></i> Close</a>
<?php
} else { ?>
<a id="ticket-reopen" class="action-button" href="#reopen"><i class="icon-undo"></i> Reopen</a>
<?php
} ?>
} ?>
if($thisstaff->canEditTickets()) { ?>
<a class="action-button" href="tickets.php?id=<?php echo $ticket->getId(); ?>&a=edit"><i class="icon-edit"></i> Edit</a>
} ?>
<?php
if($ticket->isOpen() && !$ticket->isAssigned() && $thisstaff->canAssignTickets()) {?>
<a id="ticket-claim" class="action-button" href="#claim"><i class="icon-user"></i> Claim</a>
<?php
}?>
<a id="ticket-print" class="action-button" href="tickets.php?id=<?php echo $ticket->getId(); ?>&a=print"><i class="icon-print"></i> Print</a>
<div id="action-dropdown-more" class="action-dropdown anchor-right">
<ul>
if($thisstaff->canEditTickets()) { ?>
<li><a class="change-user" href="#tickets/<?php echo $ticket->getId(); ?>/change-user"><i class="icon-user"></i> Change Ticket Owner</a></li>
<?php
}
if($ticket->isOpen() && ($dept && $dept->isManager($thisstaff))) {
if($ticket->isAssigned()) { ?>
<li><a id="ticket-release" href="#release"><i class="icon-user"></i> Release (unassign) Ticket</a></li>
<?php
}
if(!$ticket->isOverdue()) { ?>
<li><a id="ticket-overdue" href="#overdue"><i class="icon-bell"></i> Mark as Overdue</a></li>
<?php
}
if($ticket->isAnswered()) { ?>
<li><a id="ticket-unanswered" href="#unanswered"><i class="icon-circle-arrow-left"></i> Mark as Unanswered</a></li>
<?php
} else { ?>
<li><a id="ticket-answered" href="#answered"><i class="icon-circle-arrow-right"></i> Mark as Answered</a></li>
<?php
}
}
if(!$emailBanned) {?>
<li><a id="ticket-banemail" href="#banemail"><i class="icon-ban-circle"></i> Ban Email (<?php echo $ticket->getEmail(); ?>)</a></li>
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
} elseif($unbannable) { ?>
<li><a id="ticket-banemail" href="#unbanemail"><i class="icon-undo"></i> Unban Email (<?php echo $ticket->getEmail(); ?>)</a></li>
<?php
}
}?>
</ul>
</div>
</td>
</tr>
</table>
<table class="ticket_info" cellspacing="0" cellpadding="0" width="940" border="0">
<tr>
<td width="50">
<table border="0" cellspacing="" cellpadding="4" width="100%">
<tr>
<th width="100">Status:</th>
<td><?php echo ucfirst($ticket->getStatus()); ?></td>
</tr>
<tr>
<th>Priority:</th>
<td><?php echo $ticket->getPriority(); ?></td>
</tr>
<tr>
<th>Department:</th>
<td><?php echo Format::htmlchars($ticket->getDeptName()); ?></td>
</tr>
<tr>
<th>Create Date:</th>
<td><?php echo Format::db_datetime($ticket->getCreateDate()); ?></td>
</tr>
</table>
</td>
<td width="50%" style="vertical-align:top">
<table border="0" cellspacing="" cellpadding="4" width="100%">
<tr>
<th width="100">Client:</th>
<td><a href="#tickets/<?php echo $ticket->getId(); ?>/user"
$.userLookup('ajax.php/tickets/<?php echo $ticket->getId(); ?>/user',
function (user) {
$('#user-'+user.id+'-name').text(user.name);
$('#user-'+user.id+'-email').text(user.email);
$('#user-'+user.id+'-phone').text(user.phone);
$('select#emailreply option[value=1]').text(user.name+' <'+user.email+'>');
"><i class="icon-user"></i> <span id="user-<?php echo $ticket->getOwnerId(); ?>-name"
><?php echo Format::htmlchars($ticket->getName());
?></span></a>
if(($client=$ticket->getClient())) {
echo sprintf(' <a href="tickets.php?a=search&ownerId=%d" title="Related Tickets" data-dropdown="#action-dropdown-stats">(<b>%d</b>)</a>',
urlencode($ticket->getOwnerId()), $client->getNumTickets());
?>
<div id="action-dropdown-stats" class="action-dropdown anchor-right">
<ul>
<?php
if(($open=$client->getNumOpenTickets()))
echo sprintf('<li><a href="tickets.php?a=search&status=open&ownerId=%s"><i class="icon-folder-open-alt"></i> %d Open Tickets</a></li>',
$ticket->getOwnerId(), $open);
if(($closed=$client->getNumClosedTickets()))
echo sprintf('<li><a href="tickets.php?a=search&status=closed&ownerId=%d"><i class="icon-folder-close-alt"></i> %d Closed Tickets</a></li>',
$ticket->getOwnerId(), $closed);
<li><a href="tickets.php?a=search&ownerId=<?php echo $ticket->getOwnerId(); ?>"><i class="icon-double-angle-right"></i> All Tickets</a></li>
</u>
</div>
<?php
}
?>
</td>
</tr>
<span id="user-<?php echo $ticket->getOwnerId(); ?>-email"><?php echo $ticket->getEmail(); ?></span>
<td>
<span id="user-<?php echo $ticket->getOwnerId(); ?>-phone"><?php echo $ticket->getPhoneNumber(); ?></span>
</td>
<tr>
<th>Source:</th>
echo Format::htmlchars($ticket->getSource());
if($ticket->getIP())
echo ' <span class="faded">('.$ticket->getIP().')</span>';
?>
</td>
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
</tr>
</table>
</td>
</tr>
</table>
<br>
<table class="ticket_info" cellspacing="0" cellpadding="0" width="940" border="0">
<tr>
<td width="50%">
<table cellspacing="0" cellpadding="4" width="100%" border="0">
<?php
if($ticket->isOpen()) { ?>
<tr>
<th width="100">Assigned To:</th>
<td>
<?php
if($ticket->isAssigned())
echo Format::htmlchars(implode('/', $ticket->getAssignees()));
else
echo '<span class="faded">— Unassigned —</span>';
?>
</td>
</tr>
<?php
} else { ?>
<tr>
<th width="100">Closed By:</th>
<td>
<?php
if(($staff = $ticket->getStaff()))
echo Format::htmlchars($staff->getName());
else
echo '<span class="faded">— Unknown —</span>';
?>
</td>
</tr>
<?php
} ?>
<tr>
<th>SLA Plan:</th>
<td><?php echo $sla?Format::htmlchars($sla->getName()):'<span class="faded">— none —</span>'; ?></td>
</tr>
<?php
if($ticket->isOpen()){ ?>
<tr>
<th>Due Date:</th>
<td><?php echo Format::db_datetime($ticket->getEstDueDate()); ?></td>
</tr>
<?php
}else { ?>
<tr>
<th>Close Date:</th>
<td><?php echo Format::db_datetime($ticket->getCloseDate()); ?></td>
</tr>
<?php
}
?>
</table>
</td>
<td width="50%">
<table cellspacing="0" cellpadding="4" width="100%" border="0">
<tr>
<td><?php echo Format::htmlchars($ticket->getHelpTopic()); ?></td>
</tr>
<tr>
<th nowrap>Last Message:</th>
<td><?php echo Format::db_datetime($ticket->getLastMsgDate()); ?></td>
</tr>
<tr>
<th nowrap>Last Response:</th>
<td><?php echo Format::db_datetime($ticket->getLastRespDate()); ?></td>
</tr>
</table>
</td>
</tr>
</table>
<br>
<table class="ticket_info" cellspacing="0" cellpadding="0" width="940" border="0">
<?php
$idx = 0;
foreach (DynamicFormEntry::forTicket($ticket->getId()) as $form) {
// Skip core fields shown earlier in the ticket view
// TODO: Rewrite getAnswers() so that one could write
// ->getAnswers()->filter(not(array('field__name__in'=>
// array('email', ...))));
$answers = array_filter($form->getAnswers(), function ($a) {
return !in_array($a->getField()->get('name'),
array('email','subject','name','priority'));
});
if (count($answers) == 0)
continue;
?>
</tr><tr>
<td colspan="2">
<table cellspacing="0" cellpadding="4" width="100%" border="0">
if (!($v = $a->display())) continue; ?>
<tr>
<th width="100"><?php
echo $a->getField()->get('label');
?>:</th>
<td><?php
?></td>
</tr>
<?php } ?>
</table>
</td>
<?php
$idx++;
} ?>
</tr>
</table>
<div class="clear"></div>
<h2 style="padding:10px 0 5px 0; font-size:11pt;"><?php echo Format::htmlchars($ticket->getSubject()); ?></h2>
<?php
$tcount = $ticket->getThreadCount();
$tcount+= $ticket->getNumNotes();
?>
<ul id="threads">
<li><a class="active" id="toggle_ticket_thread" href="#">Ticket Thread (<?php echo $tcount; ?>)</a></li>
</ul>
<div id="ticket_thread">
<?php
$threadTypes=array('M'=>'message','R'=>'response', 'N'=>'note');
/* -------- Messages & Responses & Notes (if inline)-------------*/
$types = array('M', 'R', 'N');
if(($thread=$ticket->getThreadEntries($types))) {
foreach($thread as $entry) {
?>
<table class="thread-entry <?php echo $threadTypes[$entry['thread_type']]; ?>" cellspacing="0" cellpadding="1" width="940" border="0">
<tr>
<th colspan="4" width="100%">
<div>
<span style="display:inline-block"><?php
echo Format::db_datetime($entry['created']);?></span>
<span style="display:inline-block;padding-left:1em" class="faded title"><?php
echo Format::truncate($entry['title'], 100); ?></span>
<span style="float:right;white-space:no-wrap;display:inline-block">
<span style="vertical-align:middle;" class="textra"></span>
<span style="vertical-align:middle;"
class="tmeta faded title"><?php
echo Format::htmlchars($entry['poster']); ?></span>
</span>
</div>
</th>
</tr>
<tr><td colspan="4" class="thread-body" id="thread-id-<?php
echo $entry['id']; ?>"><div><?php
echo Format::viewableImages(Format::display($entry['body'])); ?></div></td></tr>
<?php
&& ($tentry=$ticket->getThreadEntry($entry['id']))
&& ($urls = $tentry->getAttachmentUrls())
&& ($links=$tentry->getAttachmentsLinks())) {?>
<tr>
<td class="info" colspan="4"><?php echo $links; ?></td>
<script type="text/javascript">
$(function() { showImagesInline(<?php echo
JsonDataEncoder::encode($urls); ?>); });
</script>
</tr>
<?php
}?>
</table>
<?php
if($entry['thread_type']=='M')
$msgId=$entry['id'];
}
} else {
echo '<p>Error fetching ticket thread - get technical help.</p>';
}?>
</div>
<div class="clear" style="padding-bottom:10px;"></div>
<?php if($errors['err']) { ?>
<div id="msg_error"><?php echo $errors['err']; ?></div>
<?php }elseif($msg) { ?>
<div id="msg_notice"><?php echo $msg; ?></div>
<?php }elseif($warn) { ?>
<div id="msg_warning"><?php echo $warn; ?></div>
<?php } ?>
<div id="response_options">
<?php
if($thisstaff->canPostReply()) { ?>
<li><a id="reply_tab" href="#reply">Post Reply</a></li>
<li><a id="note_tab" href="#note">Post Internal Note</a></li>
<?php
if($thisstaff->canTransferTickets()) { ?>
<li><a id="transfer_tab" href="#transfer">Dept. Transfer</a></li>
<?php
}
if($thisstaff->canAssignTickets()) { ?>
<li><a id="assign_tab" href="#assign"><?php echo $ticket->isAssigned()?'Reassign Ticket':'Assign Ticket'; ?></a></li>
<?php
} ?>
</ul>
<?php
if($thisstaff->canPostReply()) { ?>
<form id="reply" action="tickets.php?id=<?php echo $ticket->getId(); ?>#reply" name="reply" method="post" enctype="multipart/form-data">
<?php csrf_token(); ?>
<input type="hidden" name="id" value="<?php echo $ticket->getId(); ?>">
<input type="hidden" name="msgId" value="<?php echo $msgId; ?>">
<input type="hidden" name="a" value="reply">
<span class="error"></span>
<table style="width:100%" border="0" cellspacing="0" cellpadding="3">
<tbody id="to_sec">
<tr>
</td>
# XXX: Add user-to-name and user-to-email HTML ID#s
$to =sprintf('%s <%s>', $ticket->getName(), $ticket->getReplyToEmail());
$emailReply = (!isset($info['emailreply']) || $info['emailreply']);
<select id="emailreply" name="emailreply">
<option value="1" <?php echo $emailReply ? 'selected="selected"' : ''; ?>><?php echo $to; ?></option>
<option value="0" <?php echo !$emailReply ? 'selected="selected"' : ''; ?>
>—Do Not Email Reply—</option>
</select>
</td>
</tr>
</tbody>
<?php
if(1) { //Make CC optional feature? NO, for now.
?>
<tbody id="cc_sec" style="display:<?php echo $emailReply?
'table-row-group':'none'; ?>;">
<tr>
<td width="120">
</td>
<td>
<?php
if($ticket->getNumCollaborators()) { ?>
<input type='checkbox' value='1' name="emailcollab" id="emailcollab"
<?php echo ((!$info['emailcollab'] && !$errors) || isset($info['emailcollab']))?'checked="checked"':''; ?>>
<?php
echo sprintf('<a class="collaborators"
href="#tickets/%d/collaborators/manage">Collaborators (%d)</a>',
$ticket->getId(),
$ticket->getNumCollaborators());
} else {
echo sprintf('<div><a class="collaborators"
href="#tickets/%d/collaborators/manage" >Add Collaborators</a></div>',
$ticket->getId());
}
?>
</td>
</tr>
</tbody>
<?php
} ?>
<tbody id="resp_sec">
<?php
<tr><td width="120"> </td><td class="error"><?php echo $errors['response']; ?> </td></tr>
}?>
<tr>
<td width="120" style="vertical-align:top">
<label><strong>Response:</strong></label>
</td>
<?php
if(($cannedResponses=Canned::responsesByDeptId($ticket->getDeptId()))) {?>
<select id="cannedResp" name="cannedResp">
<option value="0" selected="selected">Select a canned response</option>
<?php
foreach($cannedResponses as $id =>$title) {
echo sprintf('<option value="%d">%s</option>',$id,$title);
}
?>
</select>
<label><input type='checkbox' value='1' name="append" id="append" checked="checked"> Append</label>
<br>
<?php
}?>
<input type="hidden" name="draft_id" value=""/>
<textarea name="response" id="response" cols="50"
data-draft-namespace="ticket.response"
placeholder="Start writing your response here. Use canned responses from the drop-down above"
data-draft-object-id="<?php echo $ticket->getId(); ?>"
rows="9" wrap="soft"
class="richtext ifhtml draft"><?php
echo $info['response']; ?></textarea>
</td>
</tr>
<?php
if($cfg->allowAttachments()) { ?>
<tr>
<td width="120" style="vertical-align:top">
<label for="attachment">Attachments:</label>
</td>
<td id="reply_form_attachments" class="attachments">
<div class="canned_attachments">
</div>
<div class="uploads">
</div>
<div class="file_input">
<input type="file" class="multifile" name="attachments[]" size="30" value="" />
</div>
</td>
</tr>
<?php
}?>
<tr>
<label for="signature" class="left">Signature:</label>
</td>
<?php
$info['signature']=$info['signature']?$info['signature']:$thisstaff->getDefaultSignatureType();
?>
<label><input type="radio" name="signature" value="none" checked="checked"> None</label>
<?php
if($thisstaff->getSignature()) {?>
<label><input type="radio" name="signature" value="mine"
<?php echo ($info['signature']=='mine')?'checked="checked"':''; ?>> My signature</label>
<?php
} ?>
<?php
if($dept && $dept->canAppendSignature()) { ?>
<label><input type="radio" name="signature" value="dept"
<?php echo ($info['signature']=='dept')?'checked="checked"':''; ?>>
Dept. Signature (<?php echo Format::htmlchars($dept->getName()); ?>)</label>
<?php
} ?>
</td>
</tr>
<?php
if($ticket->isClosed() || $thisstaff->canCloseTickets()) { ?>
<tr>
<label><strong>Ticket Status:</strong></label>
</td>
<?php
$statusChecked=isset($info['reply_ticket_status'])?'checked="checked"':'';
if($ticket->isClosed()) { ?>
<label><input type="checkbox" name="reply_ticket_status" id="reply_ticket_status" value="Open"
<?php echo $statusChecked; ?>> Reopen on Reply</label>
<?php
} elseif($thisstaff->canCloseTickets()) { ?>
<label><input type="checkbox" name="reply_ticket_status" id="reply_ticket_status" value="Closed"
<?php echo $statusChecked; ?>> Close on Reply</label>
<?php
} ?>
</td>
</tr>
<?php
} ?>
</table>
<p style="padding-left:165px;">
<input class="btn_sm" type="submit" value="Post Reply">
<input class="btn_sm" type="reset" value="Reset">
</p>
</form>
<form id="note" action="tickets.php?id=<?php echo $ticket->getId(); ?>#note" name="note" method="post" enctype="multipart/form-data">
<?php csrf_token(); ?>
<input type="hidden" name="id" value="<?php echo $ticket->getId(); ?>">
<input type="hidden" name="locktime" value="<?php echo $cfg->getLockTime(); ?>">
<input type="hidden" name="a" value="postnote">
<table width="100%" border="0" cellspacing="0" cellpadding="3">
if($errors['postnote']) {?>
<tr>
</tr>
<tr>
<td width="120" style="vertical-align:top">
<label><strong>Internal Note:</strong><span class='error'> *</span></label>
</td>
<td>
<div>
<div class="faded" style="padding-left:0.15em">
Note title - summary of the note (optional)</div>
<input type="text" name="title" id="title" size="60" value="<?php echo $info['title']; ?>" >
<br/>
<span class="error" <?php echo $errors['title']; ?></span>
<textarea name="note" id="internal_note" cols="80"
rows="9" wrap="soft" data-draft-namespace="ticket.note"
data-draft-object-id="<?php echo $ticket->getId(); ?>"
class="richtext ifhtml draft"><?php echo $info['note'];
?></textarea>
<span class="error"><?php echo $errors['note']; ?></span>
<br>
</td>
</tr>
<?php
if($cfg->allowAttachments()) { ?>
<tr>
<label for="attachment">Attachments:</label>
</td>
<div class="uploads">
</div>
<div class="file_input">
<input type="file" class="multifile" name="attachments[]" size="30" value="" />
</div>
</td>
</tr>
<?php
}
?>
<tr>
<label>Ticket Status:</label>
</td>
<div class="faded"></div>
<select name="state">
<option value="" selected="selected">— unchanged —</option>
<?php
$state = $info['state'];
echo sprintf('<option value="open" %s>Reopen Ticket</option>',
($state=='reopen')?'selected="selelected"':'');
} else {
if($thisstaff->canCloseTickets())
echo sprintf('<option value="closed" %s>Close Ticket</option>',
($state=='closed')?'selected="selelected"':'');
/* Ticket open - states */
echo '<option value="" disabled="disabled">— Ticket States —</option>';
//Answer - state
if($ticket->isAnswered())
echo sprintf('<option value="unanswered" %s>Mark As Unanswered</option>',
($state=='unanswered')?'selected="selelected"':'');
echo sprintf('<option value="answered" %s>Mark As Answered</option>',
($state=='answered')?'selected="selelected"':'');
//overdue - state
// Only department manager can set/clear overdue flag directly.
// Staff with edit perm. can still set overdue date & change SLA.
if($dept && $dept->isManager($thisstaff)) {
if(!$ticket->isOverdue())
echo sprintf('<option value="overdue" %s>Flag As Overdue</option>',
($state=='answered')?'selected="selelected"':'');
else
echo sprintf('<option value="notdue" %s>Clear Overdue Flag</option>',
($state=='notdue')?'selected="selelected"':'');
if($ticket->isAssigned())
echo sprintf('<option value="unassigned" %s>Release (Unassign) Ticket</option>',
($state=='unassigned')?'selected="selelected"':'');
}
}?>
</select>
<span class='error'>* <?php echo $errors['state']; ?></span>
</td>
</tr>
</div>
</table>
<p style="padding-left:165px;">
<input class="btn_sm" type="submit" value="Post Note">
<input class="btn_sm" type="reset" value="Reset">
</p>
</form>
<?php
if($thisstaff->canTransferTickets()) { ?>
<form id="transfer" action="tickets.php?id=<?php echo $ticket->getId(); ?>#transfer" name="transfer" method="post" enctype="multipart/form-data">
<?php csrf_token(); ?>
<input type="hidden" name="ticket_id" value="<?php echo $ticket->getId(); ?>">
<input type="hidden" name="a" value="transfer">
<table width="100%" border="0" cellspacing="0" cellpadding="3">
<tr>
<td class="error"><?php echo $errors['transfer']; ?></td>
</tr>
<tr>
<label for="deptId"><strong>Department:</strong></label>
</td>
<?php
echo sprintf('<span class="faded">Ticket is currently in <b>%s</b> department.</span>', $ticket->getDeptName());
?>
<br>
<select id="deptId" name="deptId">
<option value="0" selected="selected">— Select Target Department —</option>
<?php
if($depts=Dept::getDepartments()) {
foreach($depts as $id =>$name) {
if($id==$ticket->getDeptId()) continue;
echo sprintf('<option value="%d" %s>%s</option>',
$id, ($info['deptId']==$id)?'selected="selected"':'',$name);
}
}
?>
</select> <span class='error'>* <?php echo $errors['deptId']; ?></span>
</td>
</tr>
<tr>
<td width="120" style="vertical-align:top">
<label><strong>Comments:</strong><span class='error'> *</span></label>
</td>
placeholder="Enter reasons for the transfer"
class="richtext ifhtml no-bar" cols="80" rows="7" wrap="soft"><?php
echo $info['transfer_comments']; ?></textarea>
<span class="error"><?php echo $errors['transfer_comments']; ?></span>
</td>
</tr>
</table>
<p style="padding-left:165px;">
<input class="btn_sm" type="submit" value="Transfer">
<input class="btn_sm" type="reset" value="Reset">
</p>
</form>
<?php
} ?>
<?php
if($thisstaff->canAssignTickets()) { ?>
<form id="assign" action="tickets.php?id=<?php echo $ticket->getId(); ?>#assign" name="assign" method="post" enctype="multipart/form-data">
<?php csrf_token(); ?>
<input type="hidden" name="id" value="<?php echo $ticket->getId(); ?>">
<input type="hidden" name="a" value="assign">
<table style="width:100%" border="0" cellspacing="0" cellpadding="3">
<tr>
</tr>
<tr>
<td width="120" style="vertical-align:top">
<label for="assignId"><strong>Assignee:</strong></label>
</td>
<select id="assignId" name="assignId">
<option value="0" selected="selected">— Select Staff Member OR a Team —</option>
<?php
if($ticket->isOpen() && !$ticket->isAssigned())
echo sprintf('<option value="%d">Claim Ticket (comments optional)</option>', $thisstaff->getId());
$sid=$tid=0;
if(($users=Staff::getAvailableStaffMembers())) {
echo '<OPTGROUP label="Staff Members ('.count($users).')">';
$staffId=$ticket->isAssigned()?$ticket->getStaffId():0;
foreach($users as $id => $name) {
if($staffId && $staffId==$id)
$k="s$id";
echo sprintf('<option value="%s" %s>%s</option>',
$k,(($info['assignId']==$k)?'selected="selected"':''),$name);
}
echo '</OPTGROUP>';
}
if(($teams=Team::getActiveTeams())) {
echo '<OPTGROUP label="Teams ('.count($teams).')">';
$teamId=(!$sid && $ticket->isAssigned())?$ticket->getTeamId():0;
foreach($teams as $id => $name) {
if($teamId && $teamId==$id)
$k="t$id";
echo sprintf('<option value="%s" %s>%s</option>',
$k,(($info['assignId']==$k)?'selected="selected"':''),$name);
}
echo '</OPTGROUP>';
}
?>
</select> <span class='error'>* <?php echo $errors['assignId']; ?></span>
<?php
if($ticket->isAssigned() && $ticket->isOpen()) {
echo sprintf('<div class="faded">Ticket is currently assigned to <b>%s</b></div>',
$ticket->getAssignee());
} elseif ($ticket->isClosed()) { ?>
<div class="faded">Assigning a closed ticket will <b>reopen</b> it!</div>
<?php } ?>
</td>
</tr>
<tr>
<td width="120" style="vertical-align:top">
<label><strong>Comments:</strong><span class='error'> *</span></label>
</td>
<td>
<textarea name="assign_comments" id="assign_comments"
cols="80" rows="7" wrap="soft"
placeholder="Enter reasons for the assignment or instructions for assignee"
class="richtext ifhtml no-bar"><?php echo $info['assign_comments']; ?></textarea>
<span class="error"><?php echo $errors['assign_comments']; ?></span><br>
</td>
</tr>
</table>
<p style="padding-left:165px;">
<input class="btn_sm" type="submit" value="<?php echo $ticket->isAssigned()?'Reassign':'Assign'; ?>">
<input class="btn_sm" type="reset" value="Reset">
</p>
</form>
<?php
} ?>
</div>
<div style="display:none;" class="dialog" id="print-options">
<h3>Ticket Print Options</h3>
<a class="close" href=""><i class="icon-remove-circle"></i></a>
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
<hr/>
<form action="tickets.php?id=<?php echo $ticket->getId(); ?>" method="post" id="print-form" name="print-form">
<?php csrf_token(); ?>
<input type="hidden" name="a" value="print">
<input type="hidden" name="id" value="<?php echo $ticket->getId(); ?>">
<fieldset class="notes">
<label for="notes">Print Notes:</label>
<input type="checkbox" id="notes" name="notes" value="1"> Print <b>Internal</b> Notes/Comments
</fieldset>
<fieldset>
<label for="psize">Paper Size:</label>
<select id="psize" name="psize">
<option value="">— Select Print Paper Size —</option>
<?php
$options=array('Letter', 'Legal', 'A4', 'A3');
$psize =$_SESSION['PAPER_SIZE']?$_SESSION['PAPER_SIZE']:$thisstaff->getDefaultPaperSize();
foreach($options as $v) {
echo sprintf('<option value="%s" %s>%s</option>',
$v,($psize==$v)?'selected="selected"':'', $v);
}
?>
</select>
</fieldset>
<hr style="margin-top:3em"/>
<p class="full-width">
<span class="buttons" style="float:left">
<input type="reset" value="Reset">
<input type="button" value="Cancel" class="close">
</span>
<span class="buttons" style="float:right">
<input type="submit" value="Print">
</span>
</p>
</form>
<div class="clear"></div>
</div>
<div style="display:none;" class="dialog" id="ticket-status">
<h3><?php echo sprintf('%s Ticket #%s', ($ticket->isClosed()?'Reopen':'Close'), $ticket->getNumber()); ?></h3>
<a class="close" href=""><i class="icon-remove-circle"></i></a>
<hr/>
<?php echo sprintf('Are you sure you want to <b>%s</b> this ticket?', $ticket->isClosed()?'REOPEN':'CLOSE'); ?>
<form action="tickets.php?id=<?php echo $ticket->getId(); ?>" method="post" id="status-form" name="status-form">
<?php csrf_token(); ?>
<input type="hidden" name="id" value="<?php echo $ticket->getId(); ?>">
<input type="hidden" name="a" value="process">
<input type="hidden" name="do" value="<?php echo $ticket->isClosed()?'reopen':'close'; ?>">
<fieldset>
<div style="margin-bottom:0.5em">
<em>Reasons for status change (internal note). Optional but highly recommended.</em>
</div>
<textarea name="ticket_status_notes" id="ticket_status_notes" cols="50" rows="5" wrap="soft"
style="width:100%"
class="richtext ifhtml no-bar"><?php echo $info['ticket_status_notes']; ?></textarea>
</fieldset>
<hr style="margin-top:1em"/>
<p class="full-width">
<span class="buttons" style="float:left">
<input type="reset" value="Reset">
<input type="button" value="Cancel" class="close">
</span>
<span class="buttons" style="float:right">
<input type="submit" value="<?php echo $ticket->isClosed()?'Reopen':'Close'; ?>">
</span>
</p>
</form>
<div class="clear"></div>
</div>
<div style="display:none;" class="dialog" id="confirm-action">
<h3>Please Confirm</h3>
<a class="close" href=""><i class="icon-remove-circle"></i></a>
<hr/>
<p class="confirm-action" style="display:none;" id="claim-confirm">
Are you sure want to <b>claim</b> (self assign) this ticket?
</p>
<p class="confirm-action" style="display:none;" id="answered-confirm">
Are you sure want to flag the ticket as <b>answered</b>?
<p class="confirm-action" style="display:none;" id="unanswered-confirm">
Are you sure want to flag the ticket as <b>unanswered</b>?
</p>
<p class="confirm-action" style="display:none;" id="overdue-confirm">
Are you sure want to flag the ticket as <font color="red"><b>overdue</b></font>?
</p>
<p class="confirm-action" style="display:none;" id="banemail-confirm">
Are you sure want to <b>ban</b> <?php echo $ticket->getEmail(); ?>? <br><br>
New tickets from the email address will be auto-rejected.
</p>
<p class="confirm-action" style="display:none;" id="unbanemail-confirm">
Are you sure want to <b>remove</b> <?php echo $ticket->getEmail(); ?> from ban list?
</p>
<p class="confirm-action" style="display:none;" id="release-confirm">
Are you sure want to <b>unassign</b> ticket from <b><?php echo $ticket->getAssigned(); ?></b>?
</p>
<p class="confirm-action" style="display:none;" id="changeuser-confirm">
<b><?php echo Format::htmlchars($ticket->getName()); ?></b> <<?php echo $ticket->getEmail(); ?>> will no longer have access to the ticket.
Are you sure want to <b>change</b> ticket owner to <b><span id="newuser">this guy</span></b>?
</p>
<p class="confirm-action" style="display:none;" id="delete-confirm">
<font color="red"><strong>Are you sure you want to DELETE this ticket?</strong></font>
<br><br>Deleted tickets CANNOT be recovered, including any associated attachments.
</p>
<div>Please confirm to continue.</div>
<form action="tickets.php?id=<?php echo $ticket->getId(); ?>" method="post" id="confirm-form" name="confirm-form">
<?php csrf_token(); ?>
<input type="hidden" name="id" value="<?php echo $ticket->getId(); ?>">
<input type="hidden" name="a" value="process">
<input type="hidden" name="do" id="action" value="">
<hr style="margin-top:1em"/>
<p class="full-width">
<span class="buttons" style="float:left">
<input type="button" value="Cancel" class="close">
</span>
<span class="buttons" style="float:right">
<input type="submit" value="OK">
</span>
</p>
</form>
<div class="clear"></div>
</div>
<script type="text/javascript" src="js/ticket.js"></script>
<script type="text/javascript">
$(function() {
$(document).on('click', 'a.change-user', function(e) {
e.preventDefault();
var tid = <?php echo $ticket->getOwnerId(); ?>;
var cid = <?php echo $ticket->getOwnerId(); ?>;
var url = 'ajax.php/'+$(this).attr('href').substr(1);
$.userLookup(url, function(user) {
if(cid!=user.id
&& $('.dialog#confirm-action #changeuser-confirm').length) {
$('#newuser').html(user.name +' <'+user.email+'>');
$('.dialog#confirm-action #action').val('changeuser');
$('#confirm-form').append('<input type=hidden name=user_id value='+user.id+' />');
$('#overlay').show();
$('.dialog#confirm-action .confirm-action').hide();
$('.dialog#confirm-action p#changeuser-confirm')
.show()
.parent('div').show().trigger('click');
}
});
});
});
</script>