<?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.. $user = $ticket->getOwner(); //Ticket User (EndUser) $team = $ticket->getTeam(); //Assigned team. $sla = $ticket->getSLA(); $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->getNumber(); ?></a></h2> </td> <td width="50%" class="right_align has_bottom_border"> <?php if ($thisstaff->canBanEmails() || $thisstaff->canEditTickets() || ($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 confirm-action" 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 confirm-action" href="#claim"><i class="icon-user"></i> Claim</a> <?php }?> <span class="action-button" data-dropdown="#action-dropdown-print"> <a id="ticket-print" href="tickets.php?id=<?php echo $ticket->getId(); ?>&a=print"><i class="icon-print"></i> Print</a> <i class="icon-caret-down"></i> </span> <div id="action-dropdown-print" class="action-dropdown anchor-right"> <ul> <li><a class="no-pjax" target="_blank" href="tickets.php?id=<?php echo $ticket->getId(); ?>&a=print¬es=0"><i class="icon-file-alt"></i> Ticket Thread</a> <li><a class="no-pjax" target="_blank" href="tickets.php?id=<?php echo $ticket->getId(); ?>&a=print¬es=1"><i class="icon-file-text-alt"></i> Thread + Internal Notes</a> </ul> </div> <div id="action-dropdown-more" class="action-dropdown anchor-right"> <ul> <?php 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 class="confirm-action" id="ticket-release" href="#release"><i class="icon-user"></i> Release (unassign) Ticket</a></li> <?php } if(!$ticket->isOverdue()) { ?> <li><a class="confirm-action" id="ticket-overdue" href="#overdue"><i class="icon-bell"></i> Mark as Overdue</a></li> <?php } if($ticket->isAnswered()) { ?> <li><a class="confirm-action" id="ticket-unanswered" href="#unanswered"><i class="icon-circle-arrow-left"></i> Mark as Unanswered</a></li> <?php } else { ?> <li><a class="confirm-action" id="ticket-answered" href="#answered"><i class="icon-circle-arrow-right"></i> Mark as Answered</a></li> <?php } } ?> <li><a href="#ajax.php/tickets/<?php echo $ticket->getId(); ?>/forms/manage" onclick="javascript: $.dialog($(this).attr('href').substr(1), 201); return false" ><i class="icon-paste"></i> Manage Forms</a></li> <?php if($thisstaff->canBanEmails()) { if(!$emailBanned) {?> <li><a class="confirm-action" id="ticket-banemail" href="#banemail"><i class="icon-ban-circle"></i> Ban Email (<?php echo $ticket->getEmail(); ?>)</a></li> <?php } elseif($unbannable) { ?> <li><a class="confirm-action" 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" onclick="javascript: $.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+'>'); }); return false; "><i class="icon-user"></i> <span id="user-<?php echo $ticket->getOwnerId(); ?>-name" ><?php echo Format::htmlchars($ticket->getName()); ?></span></a> <?php if($user) { echo sprintf(' <a href="tickets.php?a=search&uid=%d" title="Related Tickets" data-dropdown="#action-dropdown-stats">(<b>%d</b>)</a>', urlencode($user->getId()), $user->getNumTickets()); ?> <div id="action-dropdown-stats" class="action-dropdown anchor-right"> <ul> <?php if(($open=$user->getNumOpenTickets())) echo sprintf('<li><a href="tickets.php?a=search&status=open&uid=%s"><i class="icon-folder-open-alt icon-fixed-width"></i> %d Open Tickets</a></li>', $user->getId(), $open); if(($closed=$user->getNumClosedTickets())) echo sprintf('<li><a href="tickets.php?a=search&status=closed&uid=%d"><i class="icon-folder-close-alt icon-fixed-width"></i> %d Closed Tickets</a></li>', $user->getId(), $closed); ?> <li><a href="tickets.php?a=search&uid=<?php echo $ticket->getOwnerId(); ?>"><i class="icon-double-angle-right icon-fixed-width"></i> All Tickets</a></li> <li><a href="users.php?id=<?php echo $user->getId(); ?>"><i class="icon-user icon-fixed-width"></i> Manage Client</a></li> <?php if ($user->getOrgId()) { ?> <li><a href="orgs.php?id=<?php echo $user->getOrgId(); ?>"><i class="icon-building icon-fixed-width"></i> Manage Organization</a></li> <?php } ?> </u> </div> <?php } ?> </td> </tr> <tr> <th>Email:</th> <td> <span id="user-<?php echo $ticket->getOwnerId(); ?>-email"><?php echo $ticket->getEmail(); ?></span> </td> </tr> <tr> <th>Phone:</th> <td> <span id="user-<?php echo $ticket->getOwnerId(); ?>-phone"><?php echo $ticket->getPhoneNumber(); ?></span> </td> </tr> <tr> <th>Source:</th> <td><?php echo Format::htmlchars($ticket->getSource()); if($ticket->getIP()) echo ' <span class="faded">('.$ticket->getIP().')</span>'; ?> </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>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> <th width="100">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> <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"> <?php foreach($answers as $a) { if (!($v = $a->display())) continue; ?> <tr> <th width="100"><?php echo $a->getField()->get('label'); ?>:</th> <td><?php echo $v; ?></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['name'] ?: $entry['poster']); ?></span> </span> </div> </th> </tr> <tr><td colspan="4" class="thread-body" id="thread-id-<?php echo $entry['id']; ?>"><div><?php echo $entry['body']->toHtml(); ?></div></td></tr> <?php if($entry['attachments'] && ($tentry = $ticket->getThreadEntry($entry['id'])) && ($urls = $tentry->getAttachmentUrls()) && ($links = $tentry->getAttachmentsLinks())) {?> <tr> <td class="info" colspan="4"><?php echo $tentry->getAttachmentsLinks(); ?></td> </tr> <?php } if ($urls) { ?> <script type="text/javascript"> $('#thread-id-<?php echo $entry['id']; ?>') .data('urls', <?php echo JsonDataEncoder::encode($urls); ?>) .data('id', <?php echo $entry['id']; ?>); </script> <?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 class="tabs"> <?php if($thisstaff->canPostReply()) { ?> <li><a id="reply_tab" href="#reply">Post Reply</a></li> <?php } ?> <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 width="120"> <label><strong>TO:</strong></label> </td> <td> <?php # 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"> <label><strong>Collaborators:</strong></label> </td> <td> <input type='checkbox' value='1' name="emailcollab" id="emailcollab" <?php echo ((!$info['emailcollab'] && !$errors) || isset($info['emailcollab']))?'checked="checked"':''; ?> style="display:<?php echo $ticket->getNumCollaborators() ? 'inline-block': 'none'; ?>;" > <?php $recipients = 'Add Recipients'; if ($ticket->getNumCollaborators()) $recipients = sprintf('Recipients (%d of %d)', $ticket->getNumActiveCollaborators(), $ticket->getNumCollaborators()); echo sprintf('<span><a class="collaborators preview" href="#tickets/%d/collaborators"><span id="recipients">%s</span></a></span>', $ticket->getId(), $recipients); ?> </td> </tr> </tbody> <?php } ?> <tbody id="resp_sec"> <?php if($errors['response']) {?> <tr><td width="120"> </td><td class="error"><?php echo $errors['response']; ?> </td></tr> <?php }?> <tr> <td width="120" style="vertical-align:top"> <label><strong>Response:</strong></label> </td> <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 } $signature = ''; switch ($thisstaff->getDefaultSignatureType()) { case 'dept': if ($dept && $dept->canAppendSignature()) $signature = $dept->getSignature(); break; case 'mine': $signature = $thisstaff->getSignature(); break; } ?> <input type="hidden" name="draft_id" value=""/> <textarea name="response" id="response" cols="50" data-draft-namespace="ticket.response" data-signature-field="signature" data-dept-id="<?php echo $dept->getId(); ?>" data-signature="<?php echo Format::htmlchars(Format::viewableImages($signature)); ?>" 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> <td width="120"> <label for="signature" class="left">Signature:</label> </td> <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> <td width="120"> <label><strong>Ticket Status:</strong></label> </td> <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 } ?> </tbody> </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> <?php } ?> <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"> <?php if($errors['postnote']) {?> <tr> <td width="120"> </td> <td class="error"><?php echo $errors['postnote']; ?></td> </tr> <?php } ?> <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> </div> <br/> <textarea name="note" id="internal_note" cols="80" placeholder="Note details" 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> <td width="120"> <label for="attachment">Attachments:</label> </td> <td 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 colspan="2"> </td></tr> <tr> <td width="120"> <label>Ticket Status:</label> </td> <td> <div class="faded"></div> <select name="state"> <option value="" selected="selected">— unchanged —</option> <?php $state = $info['state']; if($ticket->isClosed()){ 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"':''); else 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"> <?php if($errors['transfer']) { ?> <tr> <td width="120"> </td> <td class="error"><?php echo $errors['transfer']; ?></td> </tr> <?php } ?> <tr> <td width="120"> <label for="deptId"><strong>Department:</strong></label> </td> <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> <td> <textarea name="transfer_comments" id="transfer_comments" 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"> <?php if($errors['assign']) { ?> <tr> <td width="120"> </td> <td class="error"><?php echo $errors['assign']; ?></td> </tr> <?php } ?> <tr> <td width="120" style="vertical-align:top"> <label for="assignId"><strong>Assignee:</strong></label> </td> <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) continue; $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) continue; $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> <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> <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"> <span id="msg_warning" style="display:block;vertical-align:top"> <b><?php echo Format::htmlchars($ticket->getName()); ?></b> <<?php echo $ticket->getEmail(); ?>> <br> will no longer have access to the ticket. </span> 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"> $(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>