0byt3m1n1
Path:
/
data
/
applications
/
aps.bak
/
osticket
/
1.6.r0-1
/
standard
/
htdocs
/
include
/
staff
/
[
Home
]
File: viewticket.inc.php
<?php //Note that ticket is initiated in tickets.php. if(!defined('OSTSCPINC') || !@$thisuser->isStaff() || !is_object($ticket) ) die('Invalid path'); if(!$ticket->getId() or (!$thisuser->canAccessDept($ticket->getDeptId()) and $thisuser->getId()!=$ticket->getStaffId())) die('Access Denied'); $info=($_POST && $errors)?Format::input($_POST):array(); //Re-use the post info on error...savekeyboards.org //Auto-lock the ticket if locking is enabled..if locked already simply renew it. if($cfg->getLockTime() && !$ticket->acquireLock()) $warn.='Unable to obtain a lock on the ticket'; //We are ready baby...lets roll. Akon rocks! $dept = $ticket->getDept(); //Dept $staff = $ticket->getStaff(); //Assiged staff. $lock = $ticket->getLock(); //Ticket lock obj $id=$ticket->getId(); //Ticket ID. if($staff) $warn.=' <span class="Icon assignedTicket">Ticket is assigned to '.$staff->getName().'</span>'; if(!$errors['err'] && ($lock && $lock->getStaffId()!=$thisuser->getId())) $errors['err']='This ticket is currently locked by another staff member!'; if(!$errors['err'] && ($emailBanned=BanList::isbanned($ticket->getEmail()))) $errors['err']='Email is in banlist! Must be removed before any reply/response'; if($ticket->isOverdue()) $warn.=' <span class="Icon overdueTicket">Marked overdue!</span>'; ?> <table width="100%" cellpadding="2" cellspacing="0" border="0"> <tr> <td class="msg" width=50%> Ticket #<?=$ticket->getExtId()?> <a href="tickets.php?id=<?=$id?>" title="Reload"><span class="Icon refresh"> </span></a></td> <td class="msg" width=50%> <? if($thisuser->canEditTickets() || ($thisuser->isManager() && $dept->getId()==$thisuser->getDeptId())) { ?> <a href="tickets.php?id=<?=$id?>&a=edit" title="Edit Ticket" class="Icon editTicket">Edit Ticket</a> <?}?> </td> </tr> <tr> <td width=50%> <table align="center" class="ticketinfo" cellspacing="1" cellpadding="3" width="100%" border=0> <tr> <th>Status:</th> <td><?=$ticket->getStatus()?></td> </tr> <tr> <th>Priority:</th> <td><?=$ticket->getPriority()?></td> </tr> <tr> <th>Department:</th> <td><?=Format::htmlchars($ticket->getDeptName())?></td> </tr> <tr> <th>Create Date:</th> <td><?=Format::db_datetime($ticket->getCreateDate())?></td> </tr> </table> </td> <td width=50% valign="top"> <table align="center" class="ticketinfo" cellspacing="1" cellpadding="3" width="100%" border=0> <tr> <th>Name:</th> <td><?=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><?=Format::phone($ticket->getPhoneNumber())?></td> </tr> <tr> <th>Source:</th> <td><?=$ticket->getSource()?></td> </tr> </table> </td> </tr> <tr><td colspan=2 class="msg">Subject: <?=Format::htmlchars($ticket->getSubject())?></td></tr> <tr> <td valign="top" width=50%> <table align="center" class="ticketinfo" cellspacing="1" cellpadding="3" width="100%" border=0> <tr> <th>Assigned Staff:</th> <td><?=$staff?Format::htmlchars($staff->getName()):'- unassigned -'?></td> </tr> <tr> <th nowrap>Last Response:</th> <td><?=Format::db_datetime($ticket->getLastResponseDate())?></td> </tr> <?php if($ticket->isOpen()){ ?> <tr> <th>Due Date:</th> <td><?=Format::db_datetime($ticket->getDueDate())?></td> </tr> <?php }else { ?> <tr> <th>Close Date:</th> <td><?=Format::db_datetime($ticket->getCloseDate())?></td> </tr> <?php } ?> </table> </td> <td width=50% valign="top"> <table align="center" class="ticketinfo" cellspacing="1" cellpadding="3" width="100%" border=0> <tr><th>Help Topic:</th> <td><? $ht=$ticket->getHelpTopic(); echo Format::htmlchars($ht?$ht:'N/A'); ?> </td> </tr> <tr> <th>IP Address:</th> <td><?=$ticket->getIP()?></td> </tr> <tr><th nowrap>Last Message:</th> <td><?=Format::db_datetime($ticket->getLastMessageDate())?></td> </tr> </table> </td> </tr> </table> <div> <?if($errors['err'] && $_POST['a']=='process') {?> <p align="center" id="errormessage"><?=$errors['err']?></p> <?}elseif($msg && $_POST['a']=='process' || $_POST['a']=='update' ) {?> <p align="center" id="infomessage"><?=$msg?></p> <?}elseif($warn) {?> <p id="warnmessage"><?=$warn?></p> <?}?> </div> <? //Ticket adminstrative options...admin,managers and staff with manage perm allowed. if($thisuser->canManageTickets() || $thisuser->isManager()){ ?> <table cellpadding="0" cellspacing="2" border="0" width="100%" class="ticketoptions"> <tr><td> <form name=action action='tickets.php?id=<?=$id?>' method=post class="inline" > <input type='hidden' name='ticket_id' value="<?=$id?>"/> <input type='hidden' name='a' value="process"/> <span for="do"> <b>Action:</b></span> <select id="do" name="do" onChange="this.form.ticket_priority.disabled=strcmp(this.options[this.selectedIndex].value,'change_priority','reopen','overdue')?false:true;"> <option value="">Select Action</option> <option value="change_priority" <?=$info['do']=='change_priority'?'selected':''?> >Change Priority</option> <?if(!$ticket->isoverdue()){ ?> <option value="overdue" <?=$info['do']=='overdue'?'selected':''?> >Mark Overdue</option> <?}?> <?if($ticket->isAssigned()){ ?> <option value="release" <?=$info['do']=='release'?'selected':''?> >Release (unassign)</option> <?}?> <?if($thisuser->canCloseTickets()){ //if you can close a ticket...reopening it is given. if($ticket->isOpen()){?> <option value="close" <?=$info['do']=='close'?'selected':''?> >Close Ticket</option> <?}else{?> <option value="reopen" <?=$info['do']=='reopen'?'selected':''?> >Reopen Ticket</option> <?} }?> <?php if($thisuser->canManageBanList()) { if(!$emailBanned) {?> <option value="banemail" >Ban Email <?=$ticket->isOpen()?'& Close':''?></option> <?}else{?> <option value="unbanemail">Un-Ban Email</option> <?} }?> <?if($thisuser->canDeleteTickets()){ //oooh...fear the deleters! ?> <option value="delete" >Delete Ticket</option> <?}?> </select> <span for="ticket_priority">Priority:</span> <select id="ticket_priority" name="ticket_priority" <?=!$info['do']?'disabled':''?> > <option value="0" selected="selected">-Unchanged-</option> <? $priorityId=$ticket->getPriorityId(); $resp=db_query('SELECT priority_id,priority_desc FROM '.TICKET_PRIORITY_TABLE); while($row=db_fetch_array($resp)){ ?> <option value="<?=$row['priority_id']?>" <?=$priorityId==$row['priority_id']?'disabled':''?> ><?=$row['priority_desc']?></option> <?}?> </select> <input class="button" type="submit" value="GO"> </form> </tr></td> </table> <?}?> <br> <? //Internal Notes $sql ='SELECT note_id,title,note,source,created FROM '.TICKET_NOTE_TABLE.' WHERE ticket_id='.db_input($id).' ORDER BY created DESC'; if(($resp=db_query($sql)) && ($notes=db_num_rows($resp))){ $display=($notes>5)?'none':'block'; //Collapse internal notes if more than 5. ?> <div align="left"> <a class="Icon note" href="#" onClick="toggleLayer('ticketnotes'); return false;">Internal Notes (<?=$notes?>)</a><br><br> <div id='ticketnotes' style="display:<?=$display?>;text-align:center;"> <? while($row=db_fetch_array($resp)) {?> <table align="center" class="note" cellspacing="0" cellpadding="1" width="100%" border=0> <tr><th><?=Format::db_daydatetime($row['created'])?> - posted by <?=$row['source']?></th></tr> <? if($row['title']) {?> <tr class="header"><td><?=Format::display($row['title'])?></td></tr> <?} ?> <tr><td><?=Format::display($row['note'])?></td></tr> </table> <?} ?> </div> </div> <?} ?> <div align="left"> <a class="Icon thread" href="#" onClick="toggleLayer('ticketthread'); return false;">Ticket Thread</a> <div id="ticketthread"> <? //get messages $sql='SELECT msg.msg_id,msg.created,msg.message,count(attach_id) as attachments FROM '.TICKET_MESSAGE_TABLE.' msg '. ' LEFT JOIN '.TICKET_ATTACHMENT_TABLE." attach ON msg.ticket_id=attach.ticket_id AND msg.msg_id=attach.ref_id AND ref_type='M' ". ' WHERE msg.ticket_id='.db_input($id). ' GROUP BY msg.msg_id ORDER BY created'; $msgres =db_query($sql); while ($msg_row = db_fetch_array($msgres)) { ?> <table align="center" class="message" cellspacing="0" cellpadding="1" width="100%" border=0> <tr><th><?=Format::db_daydatetime($msg_row['created'])?></th></tr> <?if($msg_row['attachments']>0){ ?> <tr class="header"><td><?=$ticket->getAttachmentStr($msg_row['msg_id'],'M')?></td></tr> <?}?> <tr><td><?=Format::display($msg_row['message'])?> </td></tr> </table> <? //get answers for messages $sql='SELECT resp.*,count(attach_id) as attachments FROM '.TICKET_RESPONSE_TABLE.' resp '. ' LEFT JOIN '.TICKET_ATTACHMENT_TABLE." attach ON resp.ticket_id=attach.ticket_id AND resp.response_id=attach.ref_id AND ref_type='R' ". ' WHERE msg_id='.db_input($msg_row['msg_id']).' AND resp.ticket_id='.db_input($id). ' GROUP BY resp.response_id ORDER BY created'; $resp =db_query($sql); while ($resp_row = db_fetch_array($resp)) { $respID=$resp_row['response_id']; ?> <table align="center" class="response" cellspacing="0" cellpadding="1" width="100%" border=0> <tr><th><?=Format::db_daydatetime($resp_row['created'])?> - <?=$resp_row['staff_name']?></th></tr> <?if($resp_row['attachments']>0){ ?> <tr class="header"> <td><?=$ticket->getAttachmentStr($respID,'R')?></td></tr> <?}?> <tr><td> <?=Format::display($resp_row['response'])?></td></tr> </table> <?} $msgid =$msg_row['msg_id']; }?> </div> </div> <table align="center" cellspacing="0" cellpadding="3" width="90%" border=0> <?if($_POST['a']!='process') {?> <tr> <td align="center"> <?if($errors['err']) {?> <p align="center" id="errormessage"><?=$errors['err']?></p> <?}elseif($msg) {?> <p align="center" id="infomessage"><?=$msg?></p> <?}?> </td></tr> <?}?> <tr> <td align="center"> <div class="tabber"> <div id="reply" class="tabbertab" align="left"> <h2>Post Reply</h2> <p> <form action="tickets.php?id=<?=$id?>#reply" name="reply" id="replyform" method="post" enctype="multipart/form-data"> <input type="hidden" name="ticket_id" value="<?=$id?>"> <input type="hidden" name="msg_id" value="<?=$msgid?>"> <input type="hidden" name="a" value="reply"> <div><font class="error"> <?=$errors['response']?></font></div> <div> <? $sql='SELECT premade_id,title FROM '.KB_PREMADE_TABLE.' WHERE isenabled=1 '. ' AND (dept_id=0 OR dept_id='.db_input($ticket->getDeptId()).')'; $canned=db_query($sql); if($canned && db_num_rows($canned)) { ?> Canned Response: <select id="canned" name="canned" onChange="getCannedResponse(this.options[this.selectedIndex].value,this.form,'response');this.selectedIndex='0';" > <option value="0" selected="selected">Select a premade reply</option> <?while(list($cannedId,$title)=db_fetch_row($canned)) { ?> <option value="<?=$cannedId?>" ><?=Format::htmlchars($title)?></option> <?}?> </select> <label><input type='checkbox' value='1' name=append checked="true" />Append</label> <?}?> <textarea name="response" id="response" cols="90" rows="9" wrap="soft" style="width:90%"><?=$info['response']?></textarea> </div> <?php if($cfg->canUploadFiles()){ //TODO: may be allow anyways and simply email out attachment?? ?> <div style="margin-top: 3px;"> <label for="attachment" >Attach File:</label> <input type="file" name="attachment" id="attachment" size=30px value="<?=$info['attachment']?>" /> <font class="error"> <?=$errors['attachment']?></font> </div> <?php }?> <? $appendStaffSig=$thisuser->appendMySignature(); $appendDeptSig=$dept->canAppendSignature(); $info['signature']=!$info['signature']?'none':$info['signature']; //change 'none' to 'mine' to default to staff signature. if($appendStaffSig || $appendDeptSig) { ?> <div style="margin-top: 10px;"> <label for="signature" nowrap>Append Signature:</label> <label><input type="radio" name="signature" value="none" checked > None</label> <?if($appendStaffSig) {?> <label> <input type="radio" name="signature" value="mine" <?=$info['signature']=='mine'?'checked':''?> > My signature</label> <?}?> <?if($appendDeptSig) {?> <label><input type="radio" name="signature" value="dept" <?=$info['signature']=='dept'?'checked':''?> > Dept Signature</label> <?}?> </div> <?}?> <div style="margin-top: 3px;"> <b>Ticket Status:</b> <? $checked=isset($info['ticket_status'])?'checked':''; //Staff must explicitly check the box to change status.. if($ticket->isOpen()){?> <label><input type="checkbox" name="ticket_status" id="l_ticket_status" value="Close" <?=$checked?> > Close on Reply</label> <?}else{ ?> <label><input type="checkbox" name="ticket_status" id="l_ticket_status" value="Reopen" <?=$checked?> > Reopen on Reply</label> <?}?> </div> <p> <div style="margin-left: 50px; margin-top: 30px; margin-bottom: 10px;border: 0px;"> <input class="button" type='submit' value='Post Reply' /> <input class="button" type='reset' value='Reset' /> <input class="button" type='button' value='Cancel' onClick="history.go(-1)" /> </div> </p> </form> </p> </div> <div id="notes" class="tabbertab" align="left"> <h2>Post Internal Note</h2> <p> <form action="tickets.php?id=<?=$id?>#notes" name="notes" class="inline" method="post" enctype="multipart/form-data"> <input type="hidden" name="ticket_id" value="<?=$id?>"> <input type="hidden" name="a" value="postnote"> <div> <label for="title">Note Title:</label> <input type="text" name="title" id="title" value="<?=$info['title']?>" size=30px /> </select><font class="error">* <?=$errors['title']?></font> </div> <div style="margin-top: 3px;"> <label for="note" valign="top">Enter note content. <font class="error">* <?=$errors['note']?></font></label><br/> <textarea name="note" id="note" cols="80" rows="7" wrap="soft" style="width:90%"><?=$info['note']?></textarea> </div> <? //When the ticket is assigned Allow assignee, admin or ANY dept manager to close it if(!$ticket->isAssigned() || $thisuser->isadmin() || $thisuser->isManager() || $thisuser->getId()==$ticket->getStaffId()) { ?> <div style="margin-top: 3px;"> <b>Ticket Status:</b> <? $checked=($info && isset($info['ticket_status']))?'checked':''; //not selected by default. if($ticket->isOpen()){?> <label><input type="checkbox" name="ticket_status" id="ticket_status" value="Close" <?=$checked?> > Close Ticket</label> <?}else{ ?> <label><input type="checkbox" name="ticket_status" id="ticket_status" value="Reopen" <?=$checked?> > Reopen Ticket</label> <?}?> </div> <?}?> <p> <div align="left" style="margin-left: 50px;margin-top: 10px; margin-bottom: 10px;border: 0px;"> <input class="button" type='submit' value='Submit' /> <input class="button" type='reset' value='Reset' /> <input class="button" type='button' value='Cancel' onClick="history.go(-1)" /> </div> </p> </form> </p> </div> <? if($thisuser->canTransferTickets()) { ?> <div id="transfer" class="tabbertab" align="left"> <h2>Dept. Transfer</h2> <p> <form action="tickets.php?id=<?=$id?>#transfer" name="notes" method="post" enctype="multipart/form-data"> <input type="hidden" name="ticket_id" value="<?=$id?>"> <input type="hidden" name="a" value="transfer"> <div> <span for="dept_id">Department:</span> <select id="dept_id" name="dept_id"> <option value="" selected="selected">-Select Target Dept.-</option> <? $depts= db_query('SELECT dept_id,dept_name FROM '.DEPT_TABLE.' WHERE dept_id!='.db_input($ticket->getDeptId())); while (list($deptId,$deptName) = db_fetch_row($depts)){ $selected = ($info['dept_id']==$deptId)?'selected':''; ?> <option value="<?=$deptId?>"<?=$selected?>><?=$deptName?> Department </option> <? }?> </select><font class='error'> *<?=$errors['dept_id']?></font> </div> <div> <span >Comments/Reasons for the transfer. (<i>Internal note</i>) <font class='error'> *<?=$errors['message']?></font></span> <textarea name="message" id="message" cols="80" rows="7" wrap="soft" style="width:90%;"><?=$info['message']?></textarea> </div> <p> <div style="margin-left: 50px; margin-top: 5px; margin-bottom: 10px;border: 0px;" align="left"> <input class="button" type='submit' value='Transfer' /> <input class="button" type='reset' value='Reset' /> <input class="button" type='button' value='Cancel' onClick="history.go(-1)" /> </div> </p> </form> </p> </div> <?}?> <? //When the ticket is assigned Allow assignee, admin or ANY dept manager to reassign the ticket. if(!$ticket->isAssigned() || $thisuser->isadmin() || $thisuser->isManager() || $thisuser->getId()==$ticket->getStaffId()) { ?> <div id="assign" class="tabbertab" align="left"> <h2><?=$staff?'Re Assign Ticket':'Assign to Staff'?></h2> <p> <form action="tickets.php?id=<?=$id?>#assign" name="notes" method="post" enctype="multipart/form-data"> <input type="hidden" name="ticket_id" value="<?=$id?>"> <input type="hidden" name="a" value="assign"> <div> <span for="staffId">Staff Member:</span> <select id="staffId" name="staffId"> <option value="0" selected="selected">-Select Staff Member.-</option> <? //TODO: make sure the user's group is also active....DO a join. $sql=' SELECT staff_id,CONCAT_WS(", ",lastname,firstname) as name FROM '.STAFF_TABLE. ' WHERE isactive=1 AND onvacation=0 '; if($ticket->isAssigned()) $sql.=' AND staff_id!='.db_input($ticket->getStaffId()); $depts= db_query($sql.' ORDER BY lastname,firstname '); while (list($staffId,$staffName) = db_fetch_row($depts)){ $selected = ($info['staffId']==$staffId)?'selected':''; ?> <option value="<?=$staffId?>"<?=$selected?>><?=$staffName?></option> <? }?> </select><font class='error'> *<?=$errors['staffId']?></font> </div> <div> <span >Comments/message for assignee. (<i>Saved as internal note</i>) <font class='error'> *<?=$errors['assign_message']?></font></span> <textarea name="assign_message" id="assign_message" cols="80" rows="7" wrap="soft" style="width:90%;"><?=$info['assign_message']?></textarea> </div> <p> <div style="margin-left: 50px; margin-top: 5px; margin-bottom: 10px;border: 0px;" align="left"> <input class="button" type='submit' value='Assign' /> <input class="button" type='reset' value='Reset' /> <input class="button" type='button' value='Cancel' onClick="history.go(-1)" /> </div> </p> </form> </p> </div> <?}?> </div> </td> </tr> </table>