From 2db47b6af51ce9e561e387f7ff9b7822c6bba27b Mon Sep 17 00:00:00 2001 From: Peter Rotich <peter@osticket.com> Date: Wed, 10 Oct 2012 23:05:23 -0400 Subject: [PATCH] Add express actions - print | claim | close/reopen | delete | more (...) Use the new dialog popup to confirm express actions above. Convert the fileformat to unix --- include/staff/ticket-view.inc.php | 1474 ++++++++++++++++------------- 1 file changed, 791 insertions(+), 683 deletions(-) diff --git a/include/staff/ticket-view.inc.php b/include/staff/ticket-view.inc.php index 6b3ca648e..4d171fd8f 100644 --- a/include/staff/ticket-view.inc.php +++ b/include/staff/ticket-view.inc.php @@ -1,683 +1,791 @@ -<?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. -$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->canCloseTickets() || $thisstaff->canBanEmails()) { ?> - <span class="action-button" data-dropdown="#action-dropdown-2"> - <span ><i class="icon-cog"></i> More</span> - <i class="icon-caret-down"></i> - </span> - <?php } ?> - <?php if($thisstaff->canDeleteTickets()) { ?> - <span class="action-button"> - <a href="tickets.php?id=<?php echo $ticket->getId(); ?>&a=delete"><i class="icon-trash"></i> Delete</a> - <?php if($thisstaff->canBanEmails()) { ?> - <i data-dropdown="#action-dropdown-1" class="icon-caret-down"></i> - <?php } ?> - </span> - <?php } ?> - <?php if($thisstaff->canEditTickets()) { ?> - <a class="action-button" href="tickets.php?id=<?php echo $ticket->getId(); ?>&a=edit"><i class="icon-pencil"></i> Edit</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-1" class="action-dropdown anchor-right"> - <ul> - <?php if($thisstaff->canDeleteTickets()) { ?> - <li><a href="tickets.php?id=<?php echo $ticket->getId(); ?>&a=delete">Delete Ticket</a></li> - <?php } ?> - <?php if($thisstaff->canBanEmails()) { ?> - <li><a href="tickets.php?id=<?php echo $ticket->getId(); ?>&a=ban">Delete as Spam</a></li> - <?php } ?> - </ul> - </div> - <div id="action-dropdown-2" class="action-dropdown anchor-right"> - <ul> - <?php if($thisstaff->canCloseTickets()) { ?> - <li><a href="tickets.php?id=<?php echo $ticket->getId(); ?>&a=close">Close Ticket</a></li> - <?php } ?> - <?php if($thisstaff->canBanEmails()) { ?> - <li><a href="tickets.php?id=<?php echo $ticket->getId(); ?>&a=ban">Close & Ban</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%"> - <table border="0" cellspacing="" cellpadding="4" width="100%"> - <tr> - <th width="100">Name:</th> - <td><?php echo Format::htmlchars($ticket->getName()); ?></td> - </tr> - <tr> - <th>Email:</th> - <td> - <?php - echo $ticket->getEmail(); - if(($related=$ticket->getRelatedTicketsCount())) { - echo sprintf(' <a href="tickets.php?a=search&query=%s" title="Related Tickets">(<b>%d</b>)</a>', - urlencode($ticket->getEmail()),$related); - - } - ?> - </td> - </tr> - <tr> - <th>Phone:</th> - <td><?php echo $ticket->getPhoneNumber(); ?></td> - </tr> - <tr> - <th>Source:</th> - <td><?php echo Format::htmlchars($ticket->getSource()); ?></td> - </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 nowrap>Last Response:</th> - <td><?php echo Format::db_datetime($ticket->getLastRespDate()); ?></td> - </tr> - <?php - if($ticket->isOpen()){ ?> - <tr> - <th>Due Date:</th> - <td><?php echo Format::db_datetime($ticket->getDueDate()); ?></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> - <th width="100">Subject:</th> - <td><?php echo Format::htmlchars(Format::truncate($ticket->getSubject(),200)); ?></td> - </tr> - <tr> - <th>Help Topic:</th> - <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> - </table> - </td> - </tr> -</table> -<div class="clear" style="padding-bottom:10px;"></div> -<?php -$tcount = $ticket->getThreadCount(); -if($cfg->showNotesInline()) - $tcount+= $ticket->getNumNotes(); -?> -<ul id="threads"> - <li><a class="active" id="toggle_ticket_thread" href="#">Ticket Thread (<?php echo $tcount; ?>)</a></li> - <?php - if(!$cfg->showNotesInline()) {?> - <li><a id="toggle_notes" href="#">Internal Notes (<?php echo $ticket->getNumNotes(); ?>)</a></li> - <?php - }?> -</ul> -<?php -if(!$cfg->showNotesInline()) { ?> -<div id="ticket_notes"> - <?php - /* Internal Notes */ - if($ticket->getNumNotes() && ($notes=$ticket->getNotes())) { - foreach($notes as $note) { - - ?> - <table class="note" cellspacing="0" cellpadding="1" width="940" border="0"> - <tr> - <th width="640"> - <?php - echo sprintf('%s <em>posted by <b>%s</b></em>', - Format::htmlchars($note['title']), - Format::htmlchars($note['poster'])); - ?> - </th> - <th class="date" width="300"><?php echo Format::db_datetime($note['created']); ?></th> - </tr> - <tr> - <td colspan="2"> - <?php echo Format::display($note['body']); ?> - </td> - </tr> - <?php - if($note['attachments'] && ($links=$ticket->getAttachmentsLinks($note['id'],'N'))) {?> - <tr> - <td class="info" colspan="2"><?php echo $links; ?></td> - </tr> - <?php - }?> - </table> - <?php - } - } else { - echo "<p>No internal notes found.</p>"; - }?> -</div> -<?php -} ?> -<div id="ticket_thread"> - <?php - $threadTypes=array('M'=>'message','R'=>'response', 'N'=>'note'); - /* -------- Messages & Responses & Notes (if inline)-------------*/ - if(($thread=$ticket->getThread($cfg->showNotesInline()))) { - foreach($thread as $entry) { - ?> - <table class="<?php echo $threadTypes[$entry['thread_type']]; ?>" cellspacing="0" cellpadding="1" width="940" border="0"> - <tr> - <th width="200"><?php echo Format::db_datetime($entry['created']);?></th> - <th width="440"><span><?php echo Format::htmlchars($entry['title']); ?></span></th> - <th width="300" class="tmeta"><?php echo Format::htmlchars($entry['poster']); ?></th> - </tr> - <tr><td colspan=3><?php echo Format::display($entry['body']); ?></td></tr> - <?php - if($entry['attachments'] && ($links=$ticket->getAttachmentsLinks($entry['id'], $entry['thread_type']))) {?> - <tr> - <td class="info" colspan=3><?php echo $links; ?></td> - </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"> - <ul> - <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> - - <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 border="0" cellspacing="0" cellpadding="3"> - <tr> - <td width="160"> </td> - <td class="error"><?php echo $errors['response']; ?></td> - </tr> - <?php - if(($cannedResponses=Canned::responsesByDeptId($ticket->getDeptId()))) {?> - <tr> - <td width="160"> - <label> </label> - </td> - <td width="765"> - <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> - </td> - </tr> - <?php - }?> - <tr> - <td width="160"> - <label><strong>Response:</strong></label> - </td> - <td width="765"> - <textarea name="response" id="response" cols="50" rows="9" wrap="soft"><?php echo $info['response']; ?></textarea> - </td> - </tr> - <?php - if($cfg->allowAttachments()) { ?> - <tr> - <td width="160"> - <label for="attachment">Attachments:</label> - </td> - <td width="765" 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> - <td width="160"> - <label for="signature" class="left">Signature:</label> - </td> - <td width="765"> - <?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> - <td width="160"> - <label><strong>Ticket Status:</strong></label> - </td> - <td width="765"> - <?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 - } ?> - </div> - </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="a" value="postnote"> - <table border="0" cellspacing="0" cellpadding="3"> - <tr> - <td width="160"> </td> - <td class="error"><?php echo $errors['note']; ?></td> - </tr> - <tr> - <td width="160"> - <label><strong>Title:</strong></label> - </td> - <td width="765"> - <input type="text" name="title" id="title" size="45" value="<?php echo $info['title']; ?>" > - <span class="error">* <?php echo $errors['title']; ?></span> - </td> - </tr> - <tr> - <td width="160"> - <label><strong>Note:</strong></label> - </td> - <td width="765"> - <div><span class="faded">Internal note details</span> - <span class="error">* <?php echo $errors['internal_note']; ?></span></div> - <textarea name="internal_note" id="internal_note" cols="50" rows="9" wrap="soft" - style="width:600px"><?php echo $info['internal_note']; ?></textarea> - </td> - </tr> - - <?php - if($cfg->allowAttachments()) { ?> - <tr> - <td width="160"> - <label for="attachment">Attachments:</label> - </td> - <td width="765" class="attachments"> - <div class="uploads"> - </div> - <div class="file_input"> - <input type="file" class="multifile" name="attachments[]" size="30" value="" /> - </div> - </td> - </tr> - <?php - } - ?> - <tr> - <td width="160"> - <label>Ticket Status:</label> - </td> - <td width="765"> - <?php - $statusChecked=isset($info['note_ticket_state'])?'checked="checked"':''; - if($ticket->isClosed()){ ?> - <label><input type="checkbox" name="note_ticket_state" id="note_ticket_state" value="open" - <?php echo $statusChecked; ?>> Reopen Ticket</label> - <?php - } elseif(0 && $thisstaff->canCloseTickets()) { ?> - <label><input type="checkbox" name="note_ticket_state" id="note_ticket_state" value="Closed" - <?php echo $statusChecked; ?>> Close Ticket</label> - <?php - } elseif($ticket->isAnswered()) { ?> - <label> - <input type="checkbox" name="note_ticket_state" id="note_ticket_state" value="Unanswered" - <?php echo $statusChecked; ?>> - Mark Unanswered - </label> - <?php - } else { ?> - <label> - <input type="checkbox" name="note_ticket_state" id="note_ticket_state" value="Answered" - <?php echo $statusChecked; ?>> - Mark Answered - </label> - <?php - } ?> - </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 border="0" cellspacing="0" cellpadding="3"> - <tr> - <td width="160"> </td> - <td class="error"><?php echo $errors['transfer']; ?></td> - </tr> - <tr> - <td width="160"> - <label for="deptId"><strong>Department:</strong></label> - </td> - <td width="765"> - <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="160"> - <label><strong>Comments:</strong></label> - </td> - <td width="765"> - <span class="faded">Enter reasons for the transfer.</span> - <span class="error">* <?php echo $errors['transfer_message']; ?></span><br> - <textarea name="transfer_message" id="transfer_message" - cols="80" rows="7" wrap="soft"><?php echo $info['transfer_message']; ?></textarea> - </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 border="0" cellspacing="0" cellpadding="3"> - <tr> - <td width="160"> </td> - <td> - <?php - if($ticket->isAssigned()) - echo sprintf('<em>Ticket is currently assigned to <b>%s</b></em>',$ticket->getAssignee()); - ?> - </td> - </tr> - <tr> - <td width="160"> - <label for="assignId"><strong>Assignee:</strong></label> - </td> - <td width="765"> - <select id="assignId" name="assignId"> - <option value="0" selected="selected">— Select Staff Member OR a Team —</option> - <?php - $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) - $name.=' (Assigned)'; - - $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) - $name.=' (Assigned)'; - - $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> - </td> - </tr> - <tr> - <td width="160"> - <label><strong>Comments:</strong><span class='error'> </span></label> - </td> - <td width="765"> - <span class="faded">Enter reasons for the assignment or instructions.</span> - <span class="error">* <?php echo $errors['assign_message']; ?></span><br> - <textarea name="assign_message" id="assign_message" cols="80" rows="7" wrap="soft"><?php echo $info['assign_message']; ?></textarea> - </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="">×</a> - <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> -<script type="text/javascript" src="js/ticket.js"></script> +<?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. +$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 } ?> + <?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 + } ?> + <?php + } ?> + <?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 + } ?> + + <?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> + <?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($thisstaff->canBanEmails()) { + if(!$emailBanned) {?> + <li><a id="ticket-banemail" href="#banemail"><i class="icon-ban-circle"></i> Ban Email (<?php echo $ticket->getEmail(); ?>)</a></li> + <?php + } 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%"> + <table border="0" cellspacing="" cellpadding="4" width="100%"> + <tr> + <th width="100">Name:</th> + <td><?php echo Format::htmlchars($ticket->getName()); ?></td> + </tr> + <tr> + <th>Email:</th> + <td> + <?php + echo $ticket->getEmail(); + if(($related=$ticket->getRelatedTicketsCount())) { + echo sprintf(' <a href="tickets.php?a=search&query=%s" title="Related Tickets">(<b>%d</b>)</a>', + urlencode($ticket->getEmail()),$related); + + } + ?> + </td> + </tr> + <tr> + <th>Phone:</th> + <td><?php echo $ticket->getPhoneNumber(); ?></td> + </tr> + <tr> + <th>Source:</th> + <td><?php echo Format::htmlchars($ticket->getSource()); ?></td> + </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 nowrap>Last Response:</th> + <td><?php echo Format::db_datetime($ticket->getLastRespDate()); ?></td> + </tr> + <?php + if($ticket->isOpen()){ ?> + <tr> + <th>Due Date:</th> + <td><?php echo Format::db_datetime($ticket->getDueDate()); ?></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> + <th width="100">Subject:</th> + <td><?php echo Format::htmlchars(Format::truncate($ticket->getSubject(),200)); ?></td> + </tr> + <tr> + <th>Help Topic:</th> + <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> + </table> + </td> + </tr> +</table> +<div class="clear" style="padding-bottom:10px;"></div> +<?php +$tcount = $ticket->getThreadCount(); +if($cfg->showNotesInline()) + $tcount+= $ticket->getNumNotes(); +?> +<ul id="threads"> + <li><a class="active" id="toggle_ticket_thread" href="#">Ticket Thread (<?php echo $tcount; ?>)</a></li> + <?php + if(!$cfg->showNotesInline()) {?> + <li><a id="toggle_notes" href="#">Internal Notes (<?php echo $ticket->getNumNotes(); ?>)</a></li> + <?php + }?> +</ul> +<?php +if(!$cfg->showNotesInline()) { ?> +<div id="ticket_notes"> + <?php + /* Internal Notes */ + if($ticket->getNumNotes() && ($notes=$ticket->getNotes())) { + foreach($notes as $note) { + + ?> + <table class="note" cellspacing="0" cellpadding="1" width="940" border="0"> + <tr> + <th width="640"> + <?php + echo sprintf('%s <em>posted by <b>%s</b></em>', + Format::htmlchars($note['title']), + Format::htmlchars($note['poster'])); + ?> + </th> + <th class="date" width="300"><?php echo Format::db_datetime($note['created']); ?></th> + </tr> + <tr> + <td colspan="2"> + <?php echo Format::display($note['body']); ?> + </td> + </tr> + <?php + if($note['attachments'] && ($links=$ticket->getAttachmentsLinks($note['id'],'N'))) {?> + <tr> + <td class="info" colspan="2"><?php echo $links; ?></td> + </tr> + <?php + }?> + </table> + <?php + } + } else { + echo "<p>No internal notes found.</p>"; + }?> +</div> +<?php +} ?> +<div id="ticket_thread"> + <?php + $threadTypes=array('M'=>'message','R'=>'response', 'N'=>'note'); + /* -------- Messages & Responses & Notes (if inline)-------------*/ + if(($thread=$ticket->getThread($cfg->showNotesInline()))) { + foreach($thread as $entry) { + ?> + <table class="<?php echo $threadTypes[$entry['thread_type']]; ?>" cellspacing="0" cellpadding="1" width="940" border="0"> + <tr> + <th width="200"><?php echo Format::db_datetime($entry['created']);?></th> + <th width="440"><span><?php echo Format::htmlchars($entry['title']); ?></span></th> + <th width="300" class="tmeta"><?php echo Format::htmlchars($entry['poster']); ?></th> + </tr> + <tr><td colspan=3><?php echo Format::display($entry['body']); ?></td></tr> + <?php + if($entry['attachments'] && ($links=$ticket->getAttachmentsLinks($entry['id'], $entry['thread_type']))) {?> + <tr> + <td class="info" colspan=3><?php echo $links; ?></td> + </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"> + <ul> + <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> + + <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 border="0" cellspacing="0" cellpadding="3"> + <tr> + <td width="160"> </td> + <td class="error"><?php echo $errors['response']; ?></td> + </tr> + <?php + if(($cannedResponses=Canned::responsesByDeptId($ticket->getDeptId()))) {?> + <tr> + <td width="160"> + <label> </label> + </td> + <td width="765"> + <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> + </td> + </tr> + <?php + }?> + <tr> + <td width="160"> + <label><strong>Response:</strong></label> + </td> + <td width="765"> + <textarea name="response" id="response" cols="50" rows="9" wrap="soft"><?php echo $info['response']; ?></textarea> + </td> + </tr> + <?php + if($cfg->allowAttachments()) { ?> + <tr> + <td width="160"> + <label for="attachment">Attachments:</label> + </td> + <td width="765" 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> + <td width="160"> + <label for="signature" class="left">Signature:</label> + </td> + <td width="765"> + <?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> + <td width="160"> + <label><strong>Ticket Status:</strong></label> + </td> + <td width="765"> + <?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 + } ?> + </div> + </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="a" value="postnote"> + <table border="0" cellspacing="0" cellpadding="3"> + <tr> + <td width="160"> </td> + <td class="error"><?php echo $errors['note']; ?></td> + </tr> + <tr> + <td width="160"> + <label><strong>Title:</strong></label> + </td> + <td width="765"> + <input type="text" name="title" id="title" size="45" value="<?php echo $info['title']; ?>" > + <span class="error">* <?php echo $errors['title']; ?></span> + </td> + </tr> + <tr> + <td width="160"> + <label><strong>Note:</strong></label> + </td> + <td width="765"> + <div><span class="faded">Internal note details</span> + <span class="error">* <?php echo $errors['internal_note']; ?></span></div> + <textarea name="internal_note" id="internal_note" cols="50" rows="9" wrap="soft" + style="width:600px"><?php echo $info['internal_note']; ?></textarea> + </td> + </tr> + + <?php + if($cfg->allowAttachments()) { ?> + <tr> + <td width="160"> + <label for="attachment">Attachments:</label> + </td> + <td width="765" class="attachments"> + <div class="uploads"> + </div> + <div class="file_input"> + <input type="file" class="multifile" name="attachments[]" size="30" value="" /> + </div> + </td> + </tr> + <?php + } + ?> + <tr> + <td width="160"> + <label>Ticket Status:</label> + </td> + <td width="765"> + <?php + $statusChecked=isset($info['note_ticket_state'])?'checked="checked"':''; + if($ticket->isClosed()){ ?> + <label><input type="checkbox" name="note_ticket_state" id="note_ticket_state" value="open" + <?php echo $statusChecked; ?>> Reopen Ticket</label> + <?php + } elseif(0 && $thisstaff->canCloseTickets()) { ?> + <label><input type="checkbox" name="note_ticket_state" id="note_ticket_state" value="Closed" + <?php echo $statusChecked; ?>> Close Ticket</label> + <?php + } elseif($ticket->isAnswered()) { ?> + <label> + <input type="checkbox" name="note_ticket_state" id="note_ticket_state" value="Unanswered" + <?php echo $statusChecked; ?>> + Mark Unanswered + </label> + <?php + } else { ?> + <label> + <input type="checkbox" name="note_ticket_state" id="note_ticket_state" value="Answered" + <?php echo $statusChecked; ?>> + Mark Answered + </label> + <?php + } ?> + </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 border="0" cellspacing="0" cellpadding="3"> + <tr> + <td width="160"> </td> + <td class="error"><?php echo $errors['transfer']; ?></td> + </tr> + <tr> + <td width="160"> + <label for="deptId"><strong>Department:</strong></label> + </td> + <td width="765"> + <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="160"> + <label><strong>Comments:</strong></label> + </td> + <td width="765"> + <span class="faded">Enter reasons for the transfer.</span> + <span class="error">* <?php echo $errors['transfer_message']; ?></span><br> + <textarea name="transfer_message" id="transfer_message" + cols="80" rows="7" wrap="soft"><?php echo $info['transfer_message']; ?></textarea> + </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 border="0" cellspacing="0" cellpadding="3"> + <tr> + <td width="160"> </td> + <td> + <?php + if($ticket->isAssigned()) + echo sprintf('<em>Ticket is currently assigned to <b>%s</b></em>',$ticket->getAssignee()); + ?> + </td> + </tr> + <tr> + <td width="160"> + <label for="assignId"><strong>Assignee:</strong></label> + </td> + <td width="765"> + <select id="assignId" name="assignId"> + <option value="0" selected="selected">— Select Staff Member OR a Team —</option> + <?php + $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) + $name.=' (Assigned)'; + + $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) + $name.=' (Assigned)'; + + $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> + </td> + </tr> + <tr> + <td width="160"> + <label><strong>Comments:</strong><span class='error'> </span></label> + </td> + <td width="765"> + <span class="faded">Enter reasons for the assignment or instructions.</span> + <span class="error">* <?php echo $errors['assign_message']; ?></span><br> + <textarea name="assign_message" id="assign_message" cols="80" rows="7" wrap="soft"><?php echo $info['assign_message']; ?></textarea> + </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="">×</a> + <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="">×</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> + <em>Reasons for status change (internal note). Optional but highly recommended.</em><br> + <textarea name="ticket_status_notes" id="ticket_status_notes" cols="50" rows="5" wrap="soft"><?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="">×</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> + <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="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> -- GitLab