Newer
Older
<?php
include_once INCLUDE_DIR . 'class.thread_actions.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->checkStaffPerm($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
$role = $thisstaff->getRole($dept);
$staff = $ticket->getStaff(); //Assigned or closed by..
$user = $ticket->getOwner(); //Ticket User (EndUser)
$team = $ticket->getTeam(); //Assigned team.
$lock = $ticket->getLock(); //Ticket lock obj
$mylock = ($lock && $lock->getStaffId() == $thisstaff->getId()) ? $lock : null;
$id = $ticket->getId(); //Ticket ID.
//Useful warnings and errors the user might want to know!
if ($ticket->isClosed() && !$ticket->isReopenable())
$warn = sprintf(
__('Current ticket status (%s) does not allow the end user to reply.'),
$ticket->getStatus());
elseif ($ticket->isAssigned()
&& (($staff && $staff->getId()!=$thisstaff->getId())
|| ($team && !$team->hasMember($thisstaff))
))
$warn.= sprintf(' <span class="Icon assignedTicket">%s</span>',
sprintf(__('Ticket is assigned to %s'),
implode('/', $ticket->getAssignees())
));
if (!$errors['err']) {
if ($lock && $lock->getStaffId()!=$thisstaff->getId())
$errors['err'] = sprintf(__('This ticket is currently locked by %s'),
$lock->getStaffName());
elseif (($emailBanned=Banlist::isBanned($ticket->getEmail())))
$errors['err'] = __('Email is in banlist! Must be removed before any reply/response');
elseif (!Validator::is_valid_email($ticket->getEmail()))
$errors['err'] = __('EndUser email address is not valid! Consider updating it before responding');
$unbannable=($emailBanned) ? BanList::includes($ticket->getEmail()) : false;
if($ticket->isOverdue())
$warn.=' <span class="Icon overdueTicket">'.__('Marked overdue!').'</span>';
?>
<div class="has_bottom_border">
<div class="sticky bar">
<div class="content">
<div class="pull-right flush-right">
<?php
if ($role->hasPerm(EmailModel::PERM_BANLIST)
|| $role->hasPerm(TicketModel::PERM_EDIT)
|| ($dept && $dept->isManager($thisstaff))) { ?>
<span class="action-button pull-right" data-dropdown="#action-dropdown-more">
<i class="icon-caret-down pull-right"></i>
<span ><i class="icon-cog"></i> <?php echo __('More');?></span>
</span>
<?php
// Status change options
echo TicketStatus::status_options();
if ($role->hasPerm(TicketModel::PERM_EDIT)) { ?>
<a class="action-button pull-right" href="tickets.php?id=<?php echo $ticket->getId(); ?>&a=edit"><i class="icon-edit"></i> <?php
<?php
&& $role->hasPerm(TicketModel::PERM_ASSIGN)
<a id="ticket-claim" class="action-button pull-right confirm-action" href="#claim"><i class="icon-user"></i> <?php
<?php
}?>
<span class="action-button pull-right" data-dropdown="#action-dropdown-print">
<i class="icon-caret-down pull-right"></i>
<a id="ticket-print" href="tickets.php?id=<?php echo $ticket->getId(); ?>&a=print"><i class="icon-print"></i> <?php
echo __('Print'); ?></a>
</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> <?php echo __('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> <?php echo __('Thread + Internal Notes'); ?></a>
<div id="action-dropdown-more" class="action-dropdown anchor-right">
<ul>
if ($role->hasPerm(TicketModel::PERM_EDIT)) { ?>
<li><a class="change-user" href="#tickets/<?php
echo $ticket->getId(); ?>/change-user"><i class="icon-user"></i> <?php
echo __('Change Owner'); ?></a></li>
<?php
}
if ($role->hasPerm(TicketModel::PERM_DELETE)) {
echo $ticket->getId(); ?>/status/delete"
data-href="tickets.php"><i class="icon-trash"></i> <?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> <?php
echo __('Release (unassign) Ticket'); ?></a></li>
<?php
}
if(!$ticket->isOverdue()) { ?>
<li><a class="confirm-action" id="ticket-overdue" href="#overdue"><i class="icon-bell"></i> <?php
echo __('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> <?php
echo __('Mark as Unanswered'); ?></a></li>
<?php
} else { ?>
<li><a class="confirm-action" id="ticket-answered" href="#answered"><i class="icon-circle-arrow-right"></i> <?php
echo __('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> <?php echo __('Manage Forms'); ?></a></li>
<?php if ($role->hasPerm(EmailModel::PERM_BANLIST)) {
if(!$emailBanned) {?>
<li><a class="confirm-action" id="ticket-banemail"
href="#banemail"><i class="icon-ban-circle"></i> <?php echo sprintf(
Format::htmlchars(__('Ban Email <%s>')),
$ticket->getEmail()); ?></a></li>
} elseif($unbannable) { ?>
<li><a class="confirm-action" id="ticket-banemail"
href="#unbanemail"><i class="icon-undo"></i> <?php echo sprintf(
Format::htmlchars(__('Unban Email <%s>')),
$ticket->getEmail()); ?></a></li>
<?php
}
}?>
</ul>
</div>
<a class="only sticky scroll-up" href="#" onclick="javascript: $('html, body').animate({scrollTop: 0}, 'fast'); return false;"
><i class="icon-chevron-up icon-large"></i>
</a>
</div>
<div class="flush-left">
<h2><a href="tickets.php?id=<?php echo $ticket->getId(); ?>"
title="<?php echo __('Reload'); ?>"><i class="icon-refresh"></i>
<?php echo sprintf(__('Ticket #%s'), $ticket->getNumber()); ?></a></h2>
</div>
</div>
</div>
</div>
<table class="ticket_info" cellspacing="0" cellpadding="0" width="940" border="0">
<tr>
<table border="0" cellspacing="" cellpadding="4" width="100%">
<tr>
<th width="100"><?php echo __('Status');?>:</th>
<td><?php echo ($S = $ticket->getStatus()) ? $S->getLocalName() : ''; ?></td>
</tr>
<tr>
<th><?php echo __('Priority');?>:</th>
<td><?php echo $ticket->getPriority(); ?></td>
</tr>
<tr>
<th><?php echo __('Department');?>:</th>
<td><?php echo Format::htmlchars($ticket->getDeptName()); ?></td>
</tr>
<tr>
<th><?php echo __('Create Date');?>:</th>
<td><?php echo Format::relativeTime($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"><?php echo __('User'); ?>:</th>
<td><a href="#tickets/<?php echo $ticket->getId(); ?>/user"
$.userLookup('ajax.php/tickets/<?php echo $ticket->getId(); ?>/user',
function (user) {
$('#user-'+user.id+'-name').text(user.name);
$('#user-'+user.id+'-email').text(user.email);
$('#user-'+user.id+'-phone').text(user.phone);
$('select#emailreply option[value=1]').text(user.name+' <'+user.email+'>');
"><i class="icon-user"></i> <span id="user-<?php echo $ticket->getOwnerId(); ?>-name"
><?php echo Format::htmlchars($ticket->getName());
?></span></a>
if ($user) { ?>
<a href="tickets.php?<?php echo Http::build_query(array(
'status'=>'open', 'a'=>'search', 'uid'=> $user->getId()
)); ?>" title="<?php echo __('Related Tickets'); ?>"
data-dropdown="#action-dropdown-stats">
(<b><?php echo $user->getNumTickets(); ?></b>)
</a>
<div id="action-dropdown-stats" class="action-dropdown anchor-right">
<ul>
<?php
echo sprintf('<li><a href="tickets.php?a=search&status=open&uid=%s"><i class="icon-folder-open-alt icon-fixed-width"></i> %s</a></li>',
$user->getId(), sprintf(_N('%d Open Ticket', '%d Open Tickets', $open), $open));
echo sprintf('<li><a href="tickets.php?a=search&status=closed&uid=%d"><i
class="icon-folder-close-alt icon-fixed-width"></i> %s</a></li>',
$user->getId(), sprintf(_N('%d Closed Ticket', '%d Closed Tickets', $closed), $closed));
<li><a href="tickets.php?a=search&uid=<?php echo $ticket->getOwnerId(); ?>"><i class="icon-double-angle-right icon-fixed-width"></i> <?php echo __('All Tickets'); ?></a></li>
<?php if ($thisstaff->getRole()->hasPerm(User::PERM_DIRECTORY)) { ?>
<li><a href="users.php?id=<?php echo
$user->getId(); ?>"><i class="icon-user
icon-fixed-width"></i> <?php echo __('Manage User'); ?></a></li>
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
<?php } ?>
</ul>
</div>
<?php if ($user->getOrgId()) { ?>
<span style="display:inline-block">
<i class="icon-building"></i>
<?php echo Format::htmlchars($user->getOrganization()->getName()); ?>
<a href="tickets.php?<?php echo Http::build_query(array(
'status'=>'open', 'a'=>'search', 'orgid'=> $user->getOrgId()
)); ?>" title="<?php echo __('Related Tickets'); ?>"
data-dropdown="#action-dropdown-org-stats">
(<b><?php echo $user->getNumOrganizationTickets(); ?></b>)
</a>
</span>
<div id="action-dropdown-org-stats" class="action-dropdown anchor-right">
<ul>
<?php if ($open = $user->getNumOpenOrganizationTickets()) { ?>
<li><a href="tickets.php?<?php echo Http::build_query(array(
'a' => 'search', 'status' => 'open', 'orgid' => $user->getOrgId()
)); ?>"><i class="icon-folder-open-alt icon-fixed-width"></i>
<?php echo sprintf(_N('%d Open Ticket', '%d Open Tickets', $open), $open); ?>
</a></li>
<?php }
if ($closed = $user->getNumClosedOrganizationTickets()) { ?>
<li><a href="tickets.php?<?php echo Http::build_query(array(
'a' => 'search', 'status' => 'closed', 'orgid' => $user->getOrgId()
)); ?>"><i class="icon-folder-close-alt icon-fixed-width"></i>
<?php echo sprintf(_N('%d Closed Ticket', '%d Closed Tickets', $closed), $closed); ?>
</a></li>
<li><a href="tickets.php?<?php echo Http::build_query(array(
'a' => 'search', 'orgid' => $user->getOrgId()
)); ?>"><i class="icon-double-angle-right icon-fixed-width"></i> <?php echo __('All Tickets'); ?></a></li>
<?php }
if ($thisstaff->getRole()->hasPerm(User::PERM_DIRECTORY)) { ?>
<li><a href="orgs.php?id=<?php echo $user->getOrgId(); ?>"><i
class="icon-building icon-fixed-width"></i> <?php
echo __('Manage Organization'); ?></a></li>
<?php } # end if (user->org)
} # end if ($user)
?>
</td>
</tr>
<th><?php echo __('Email'); ?>:</th>
<span id="user-<?php echo $ticket->getOwnerId(); ?>-email"><?php echo $ticket->getEmail(); ?></span>
<th><?php echo __('Phone'); ?>:</th>
<td>
<span id="user-<?php echo $ticket->getOwnerId(); ?>-phone"><?php echo $ticket->getPhoneNumber(); ?></span>
</td>
<tr>
<th><?php echo __('Source'); ?>:</th>
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"><?php echo __('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"><?php echo __('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><?php echo __('SLA Plan');?>:</th>
<td><?php echo $sla?Format::htmlchars($sla->getName()):'<span class="faded">— '.__('None').' —</span>'; ?></td>
</tr>
<?php
if($ticket->isOpen()){ ?>
<tr>
<th><?php echo __('Due Date');?>:</th>
<td><?php echo Format::datetime($ticket->getEstDueDate()); ?></td>
</tr>
<?php
}else { ?>
<tr>
<th><?php echo __('Close Date');?>:</th>
<td><?php echo Format::datetime($ticket->getCloseDate()); ?></td>
</tr>
<?php
}
?>
</table>
</td>
<td width="50%">
<table cellspacing="0" cellpadding="4" width="100%" border="0">
<tr>
<th width="100"><?php echo __('Help Topic');?>:</th>
<td><?php echo Format::htmlchars($ticket->getHelpTopic()); ?></td>
</tr>
<tr>
<th nowrap><?php echo __('Last Message');?>:</th>
<td><?php echo Format::datetime($ticket->getLastMsgDate()); ?></td>
</tr>
<th nowrap><?php echo __('Last Response');?>:</th>
<td><?php echo Format::datetime($ticket->getLastRespDate()); ?></td>
</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 = $form->getAnswers()->exclude(Q::any(array(
'field__flags__hasbit' => DynamicFormField::FLAG_EXT_STORED,
'field__name__in' => array('subject', 'priority')
)));
if (count($answers) == 0)
continue;
?>
<td colspan="2">
<table cellspacing="0" cellpadding="4" width="100%" border="0">
if (!($v = $a->display())) continue; ?>
?></td>
</tr>
<?php } ?>
</table>
</td>
<div class="clear"></div>
<h2 style="padding:10px 0 5px 0; font-size:11pt;"><?php echo Format::htmlchars($ticket->getSubject()); ?></h2>
<?php
$tcount = $ticket->getThreadEntries($types)->count();
?>
<ul class="tabs threads" id="ticket_tabs" >
<li class="active"><a href="#ticket_thread"><?php echo sprintf(__('Ticket Thread (%d)'), $tcount); ?></a></li>
<li><a id="ticket_tasks" href="#tasks"
data-url="<?php
echo sprintf('#tickets/%d/tasks', $ticket->getId()); ?>"><?php
echo __('Tasks');
if ($ticket->getNumTasks())
echo sprintf(' (%d)', $ticket->getNumTasks());
?></a></li>
</ul>
<div id="ticket_thread" data-thread-id="<?php echo $ticket->getThread()->getId(); ?>" class="tab_content">
<?php
$ticket->getThread()->render(array('M', 'R', 'N'));
?>
<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 class="sticky bar stop" id="response_options">
if ($role->hasPerm(TicketModel::PERM_REPLY)) { ?>
<li class="active"><a href="#reply"><?php echo __('Post Reply');?></a></li>
<li><a href="#note"><?php echo __('Post Internal Note');?></a></li>
<?php
if ($role->hasPerm(TicketModel::PERM_TRANSFER)) { ?>
<li><a href="#transfer"><?php echo __('Department Transfer');?></a></li>
<?php
}
if ($role->hasPerm(TicketModel::PERM_ASSIGN)) { ?>
<li><a href="#assign"><?php
echo $ticket->isAssigned()?__('Reassign Ticket'):__('Assign Ticket'); ?></a></li>
<?php
} ?>
</ul>
if ($role->hasPerm(TicketModel::PERM_REPLY)) { ?>
<form id="reply" class="tab_content spellcheck" action="tickets.php?id=<?php
echo $ticket->getId(); ?>" 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">
<input type="hidden" name="lockCode" value="<?php echo ($mylock) ? $mylock->getCode() : ''; ?>">
<span class="error"></span>
<table style="width:100%" border="0" cellspacing="0" cellpadding="3">
<tbody id="to_sec">
<tr>
<label><strong><?php echo __('To'); ?>:</strong></label>
</td>
# XXX: Add user-to-name and user-to-email HTML ID#s
$to =sprintf('%s <%s>',
Format::htmlchars($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"' : ''; ?>
>— <?php echo __('Do Not Email Reply'); ?> —</option>
</select>
</td>
</tr>
</tbody>
<?php
<tbody id="cc_sec"
style="display:<?php echo $emailReply? 'table-row-group':'none'; ?>;">
<tr>
<label><strong><?php echo __('Collaborators'); ?>:</strong></label>
Peter Rotich
committed
<input type='checkbox' value='1' name="emailcollab" id="emailcollab"
<?php echo ((!$info['emailcollab'] && !$errors) || isset($info['emailcollab']))?'checked="checked"':''; ?>
style="display:<?php echo $ticket->getThread()->getNumCollaborators() ? 'inline-block': 'none'; ?>;"
Peter Rotich
committed
>
$recipients = __('Add Recipients');
if ($ticket->getThread()->getNumCollaborators())
$recipients = sprintf(__('Recipients (%d of %d)'),
$ticket->getThread()->getNumActiveCollaborators(),
$ticket->getThread()->getNumCollaborators());
echo sprintf('<span><a class="collaborators preview"
href="#thread/%d/collaborators"><span id="t%d-recipients">%s</span></a></span>',
$ticket->getThreadId(),
$ticket->getThreadId(),
</tbody>
<?php
} ?>
<tbody id="resp_sec">
<?php
<tr><td width="120"> </td><td class="error"><?php echo $errors['response']; ?> </td></tr>
}?>
<tr>
<td width="120" style="vertical-align:top">
<label><strong><?php echo __('Response');?>:</strong></label>
</td>
<?php if ($cfg->isCannedResponseEnabled()) { ?>
<select id="cannedResp" name="cannedResp">
<option value="0" selected="selected"><?php echo __('Select a canned response');?></option>
<option value='original'><?php echo __('Original Message'); ?></option>
<option value='lastmessage'><?php echo __('Last Message'); ?></option>
<?php
if(($cannedResponses=Canned::responsesByDeptId($ticket->getDeptId()))) {
echo '<option value="0" disabled="disabled">
------------- '.__('Premade Replies').' ------------- </option>';
foreach($cannedResponses as $id =>$title)
}
?>
</select>
<br>
<?php } # endif (canned-resonse-enabled)
$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-signature-field="signature" data-dept-id="<?php echo $dept->getId(); ?>"
data-signature="<?php
echo Format::htmlchars(Format::viewableImages($signature)); ?>"
placeholder="<?php echo __(
'Start writing your response here. Use canned responses from the drop-down above'
); ?>"
rows="9" wrap="soft"
class="<?php if ($cfg->isHtmlThreadEnabled()) echo 'richtext';
?> draft draft-delete" <?php
list($draft, $attrs) = Draft::getDraftAndDataAttrs('ticket.response', $ticket->getId(), $info['response']);
echo $attrs; ?>><?php echo $draft ?: $info['response'];
?></textarea>
<div id="reply_form_attachments" class="attachments">
<?php
print $response_form->getField('attachments')->render();
?>
<tr>
<label for="signature" class="left"><?php echo __('Signature');?>:</label>
</td>
<?php
$info['signature']=$info['signature']?$info['signature']:$thisstaff->getDefaultSignatureType();
?>
<label><input type="radio" name="signature" value="none" checked="checked"> <?php echo __('None');?></label>
<?php
if($thisstaff->getSignature()) {?>
<label><input type="radio" name="signature" value="mine"
<?php echo ($info['signature']=='mine')?'checked="checked"':''; ?>> <?php echo __('My Signature');?></label>
<?php
} ?>
<?php
if($dept && $dept->canAppendSignature()) { ?>
<label><input type="radio" name="signature" value="dept"
<?php echo ($info['signature']=='dept')?'checked="checked"':''; ?>>
<?php echo sprintf(__('Department Signature (%s)'), Format::htmlchars($dept->getName())); ?></label>
<?php
} ?>
</td>
</tr>
<tr>
<td width="120" style="vertical-align:top">
<label><strong><?php echo __('Ticket Status');?>:</strong></label>
</td>
<?php
if ($outstanding = $ticket->getMissingRequiredFields()) { ?>
<div class="warning-banner"><?php echo sprintf(__(
'This ticket is missing data on %s one or more required fields %s and cannot be closed'),
"<a href=\"tickets.php?id={$ticket->getId()}&a=edit\">",
'</a>'
); ?></div>
<?php } ?>
<?php
$statusId = $info['reply_status_id'] ?: $ticket->getStatusId();
if ($role->hasPerm(TicketModel::PERM_CLOSE) && !$outstanding)
foreach (TicketStatusList::getStatuses(
array('states' => $states)) as $s) {
$selected = ($statusId == $s->getId());
echo sprintf('<option value="%d" %s>%s%s</option>',
$selected
? (' ('.__('current').')') : ''
</td>
</tr>
</table>
<input class="btn_sm" type="submit" value="<?php echo __('Post Reply');?>">
<input class="btn_sm" type="reset" value="<?php echo __('Reset');?>">
</p>
</form>
<form id="note" class="hidden tab_content spellcheck" 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() * 60; ?>">
<input type="hidden" name="a" value="postnote">
<input type="hidden" name="lockCode" value="<?php echo ($mylock) ? $mylock->getCode() : ''; ?>">
<table width="100%" border="0" cellspacing="0" cellpadding="3">
if($errors['postnote']) {?>
<tr>
</tr>
<tr>
<td width="120" style="vertical-align:top">
<label><strong><?php echo __('Internal Note'); ?>:</strong><span class='error'> *</span></label>
</td>
<div class="faded" style="padding-left:0.15em"><?php
echo __('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 class="error"><?php echo $errors['note']; ?></div>
<textarea name="note" id="internal_note" cols="80"
placeholder="<?php echo __('Note details'); ?>"
rows="9" wrap="soft"
class="<?php if ($cfg->isHtmlThreadEnabled()) echo 'richtext';
?> draft draft-delete" <?php
list($draft, $attrs) = Draft::getDraftAndDataAttrs('ticket.note', $ticket->getId(), $info['note']);
echo $attrs; ?>><?php echo $draft ?: $info['note'];
<div class="attachments">
<?php
print $note_form->getField('attachments')->render();
?>
</td>
</tr>
<tr>
<label><?php echo __('Ticket Status');?>:</label>
</td>
$statusId = $info['note_status_id'] ?: $ticket->getStatusId();
if ($role->hasPerm(TicketModel::PERM_CLOSE))
foreach (TicketStatusList::getStatuses(
array('states' => $states)) as $s) {
$selected = $statusId == $s->getId();
echo sprintf('<option value="%d" %s>%s%s</option>',
$selected ? 'selected="selected"' : '',
$selected ? (' ('.__('current').')') : ''
<span class='error'>* <?php echo $errors['note_status_id']; ?></span>
</td>
</tr>
</table>
<p style="padding-left:165px;">
<input class="btn_sm" type="submit" value="<?php echo __('Post Note');?>">
<input class="btn_sm" type="reset" value="<?php echo __('Reset');?>">
</p>
</form>
<?php
if ($role->hasPerm(TicketModel::PERM_TRANSFER)) { ?>
<form id="transfer" class="hidden tab_content spellcheck" action="tickets.php?id=<?php
echo $ticket->getId(); ?>#transfer" name="transfer" method="post" enctype="multipart/form-data">
<?php csrf_token(); ?>
<input type="hidden" name="ticket_id" value="<?php echo $ticket->getId(); ?>">
<input type="hidden" name="a" value="transfer">
<table width="100%" border="0" cellspacing="0" cellpadding="3">
<tr>
<td class="error"><?php echo $errors['transfer']; ?></td>
</tr>
<tr>
<label for="deptId"><strong><?php echo __('Department');?>:</strong></label>
</td>
echo sprintf('<span class="faded">'.__('Ticket is currently in <b>%s</b> department.').'</span>', $ticket->getDeptName());
<select id="deptId" name="deptId">
<option value="0" selected="selected">— <?php echo __('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><?php echo __('Comments'); ?>:</strong><span class='error'> *</span></label>
</td>
placeholder="<?php echo __('Enter reasons for the transfer'); ?>"
class="<?php if ($cfg->isHtmlThreadEnabled()) echo 'richtext';
?> 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="<?php echo __('Transfer');?>">
<input class="btn_sm" type="reset" value="<?php echo __('Reset');?>">
</p>
</form>
<?php
} ?>
<?php
if ($role->hasPerm(TicketModel::PERM_ASSIGN)) { ?>
<form id="assign" class="hidden tab_content spellcheck" action="tickets.php?id=<?php
echo $ticket->getId(); ?>#assign" name="assign" method="post" enctype="multipart/form-data">
<?php csrf_token(); ?>
<input type="hidden" name="id" value="<?php echo $ticket->getId(); ?>">
<input type="hidden" name="a" value="assign">
<table style="width:100%" border="0" cellspacing="0" cellpadding="3">
<tr>
</tr>
<tr>
<td width="120" style="vertical-align:top">
<label for="assignId"><strong><?php echo __('Assignee');?>:</strong></label>
</td>
<select id="assignId" name="assignId">
<option value="0" selected="selected">— <?php echo __('Select an Agent OR a Team');?> —</option>
<?php
if ($ticket->isOpen()
&& !$ticket->isAssigned()
&& $ticket->getDept()->isMember($thisstaff))
echo sprintf('<option value="%d">'.__('Claim Ticket (comments optional)').'</option>', $thisstaff->getId());
$sid=$tid=0;
if ($dept->assignMembersOnly())
$users = $dept->getAvailableMembers();
else
$users = Staff::getAvailableStaffMembers();
if ($users) {
echo '<OPTGROUP label="'.sprintf(__('Agents (%d)'), count($users)).'">';
$staffId=$ticket->isAssigned()?$ticket->getStaffId():0;
foreach($users as $id => $name) {
if($staffId && $staffId==$id)
if (!is_object($name))
$name = new PersonsName($name);
$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="'.sprintf(__('Teams (%d)'), count($teams)).'">';
$teamId=(!$sid && $ticket->isAssigned())?$ticket->getTeamId():0;
foreach($teams as $id => $name) {
if($teamId && $teamId==$id)
$k="t$id";
echo sprintf('<option value="%s" %s>%s</option>',
$k,(($info['assignId']==$k)?'selected="selected"':''),$name);
}
echo '</OPTGROUP>';
}
?>
</select> <span class='error'>* <?php echo $errors['assignId']; ?></span>
if ($ticket->isAssigned() && $ticket->isOpen()) { ?>
<div class="faded"><?php echo sprintf(__('Ticket is currently assigned to %s'),
sprintf('<b>%s</b>', $ticket->getAssignee())); ?></div> <?php
} elseif ($ticket->isClosed()) { ?>
<div class="faded"><?php echo __('Assigning a closed ticket will <b>reopen</b> it!'); ?></div>
</td>
</tr>
<tr>
<td width="120" style="vertical-align:top">
<label><strong><?php echo __('Comments');?>:</strong><span class='error'> </span></label>
</td>
<td>
<textarea name="assign_comments" id="assign_comments"
cols="80" rows="7" wrap="soft"
placeholder="<?php echo __('Enter reasons for the assignment or instructions for assignee'); ?>"
class="<?php if ($cfg->isHtmlThreadEnabled()) echo 'richtext';
?> 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="<?php echo __('Reset');?>">
</p>
</form>
<?php
} ?>
</div>
<div style="display:none;" class="dialog" id="print-options">
<h3><?php echo __('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 class="fixed-size" for="notes"><?php echo __('Print Notes');?>:</label>
<input type="checkbox" id="notes" name="notes" value="1"> <?php echo __('Print <b>Internal</b> Notes/Comments');?>
</fieldset>
<fieldset>
<label class="fixed-size" for="psize"><?php echo __('Paper Size');?>:</label>
<select id="psize" name="psize">
<option value="">— <?php echo __('Select Print Paper Size');?> —</option>
<?php
$psize =$_SESSION['PAPER_SIZE']?$_SESSION['PAPER_SIZE']:$thisstaff->getDefaultPaperSize();
foreach(Export::$paper_sizes 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 pull-left">
<input type="reset" value="<?php echo __('Reset');?>">
<input type="button" value="<?php echo __('Cancel');?>" class="close">
</span>
<span class="buttons pull-right">
<input type="submit" value="<?php echo __('Print');?>">
</span>
</p>
</form>
<div class="clear"></div>
</div>
<div style="display:none;" class="dialog" id="confirm-action">
<h3><?php echo __('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">
<?php echo __('Are you sure you want to <b>claim</b> (self assign) this ticket?');?>
</p>
<p class="confirm-action" style="display:none;" id="answered-confirm">
<?php echo __('Are you sure you want to flag the ticket as <b>answered</b>?');?>
<p class="confirm-action" style="display:none;" id="unanswered-confirm">
<?php echo __('Are you sure you want to flag the ticket as <b>unanswered</b>?');?>
</p>
<p class="confirm-action" style="display:none;" id="overdue-confirm">
<?php echo __('Are you sure you want to flag the ticket as <font color="red"><b>overdue</b></font>?');?>
</p>
<p class="confirm-action" style="display:none;" id="banemail-confirm">
<?php echo sprintf(__('Are you sure you want to <b>ban</b> %s?'), $ticket->getEmail());?> <br><br>
<?php echo __('New tickets from the email address will be automatically rejected.');?>
</p>
<p class="confirm-action" style="display:none;" id="unbanemail-confirm">
<?php echo sprintf(__('Are you sure you want to <b>remove</b> %s from ban list?'), $ticket->getEmail()); ?>
</p>
<p class="confirm-action" style="display:none;" id="release-confirm">
<?php echo sprintf(__('Are you sure you want to <b>unassign</b> ticket from <b>%s</b>?'), $ticket->getAssigned()); ?>
</p>
<p class="confirm-action" style="display:none;" id="changeuser-confirm">
<span id="msg_warning" style="display:block;vertical-align:top">
<?php echo sprintf(Format::htmlchars(__('%s <%s> will longer have access to the ticket')),
'<b>'.Format::htmlchars($ticket->getName()).'</b>', Format::htmlchars($ticket->getEmail())); ?>
<?php echo sprintf(__('Are you sure you want to <b>change</b> ticket owner to %s?'),
'<b><span id="newuser">this guy</span></b>'); ?>
<p class="confirm-action" style="display:none;" id="delete-confirm">
<font color="red"><strong><?php echo __('Are you sure you want to DELETE this ticket?');?></strong></font>
<br><br><?php echo __('Deleted data CANNOT be recovered, including any associated attachments.');?>
</p>
<div><?php echo __('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 pull-left">
<input type="button" value="<?php echo __('Cancel');?>" class="close">
</span>
<span class="buttons pull-right">
<input type="submit" value="<?php echo __('OK');?>">
</span>
</p>
</form>