You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
224 lines
8.4 KiB
224 lines
8.4 KiB
<?php
|
|
$args = array();
|
|
parse_str($_SERVER['QUERY_STRING'], $args);
|
|
$args['t'] = 'tickets';
|
|
unset($args['p'], $args['_pjax']);
|
|
|
|
$tickets = Ticket::objects();
|
|
|
|
if ($user) {
|
|
$filter = $tickets->copy()
|
|
->values_flat('ticket_id')
|
|
->filter(array('user_id' => $user->getId()))
|
|
->union($tickets->copy()
|
|
->values_flat('ticket_id')
|
|
->filter(array('thread__collaborators__user_id' => $user->getId()))
|
|
, false);
|
|
} elseif ($org) {
|
|
$filter = $tickets->copy()
|
|
->values_flat('ticket_id')
|
|
->filter(array('user__org' => $org));
|
|
}
|
|
|
|
// Apply filter
|
|
$tickets->filter(array('ticket_id__in' => $filter));
|
|
|
|
// Apply staff visibility
|
|
if (!$thisstaff->hasPerm(SearchBackend::PERM_EVERYTHING))
|
|
$tickets->filter($thisstaff->getTicketsVisibility());
|
|
|
|
$tickets->constrain(array('lock' => array(
|
|
'lock__expire__gt' => SqlFunction::NOW())));
|
|
|
|
// Group by ticket_id.
|
|
$tickets->distinct('ticket_id');
|
|
|
|
// Save the query to the session for exporting
|
|
$queue = sprintf(':%s:tickets', $user ? 'U' : 'O');
|
|
$_SESSION[$queue] = $tickets;
|
|
|
|
// Apply pagination
|
|
$total = $tickets->count();
|
|
$page = ($_GET['p'] && is_numeric($_GET['p'])) ? $_GET['p'] : 1;
|
|
$pageNav = new Pagenate($total, $page, PAGE_LIMIT);
|
|
$pageNav->setURL(($user ? 'users.php' : 'orgs.php'), $args);
|
|
$tickets = $pageNav->paginate($tickets);
|
|
|
|
$tickets->annotate(array(
|
|
'collab_count' => SqlAggregate::COUNT('thread__collaborators', true),
|
|
'attachment_count' => SqlAggregate::COUNT(SqlCase::N()
|
|
->when(new SqlField('thread__entries__attachments__inline'), null)
|
|
->otherwise(new SqlField('thread__entries__attachments')),
|
|
true
|
|
),
|
|
'thread_count' => SqlAggregate::COUNT(SqlCase::N()
|
|
->when(
|
|
new Q(array('thread__entries__flags__hasbit'=>ThreadEntry::FLAG_HIDDEN)),
|
|
null)
|
|
->otherwise(new SqlField('thread__entries__id')),
|
|
true
|
|
),
|
|
));
|
|
|
|
$tickets->values('staff_id', 'staff__firstname', 'staff__lastname', 'team__name', 'team_id', 'lock__lock_id', 'lock__staff_id', 'isoverdue', 'status_id', 'status__name', 'status__state', 'number', 'cdata__subject', 'ticket_id', 'source', 'dept_id', 'dept__name', 'user_id', 'user__default_email__address', 'user__name', 'lastupdate');
|
|
|
|
$tickets->order_by('-created');
|
|
|
|
TicketForm::ensureDynamicDataView();
|
|
// Fetch the results
|
|
?>
|
|
<div class="pull-left" style="margin-top:5px;">
|
|
<?php
|
|
if ($total) {
|
|
echo '<strong>'.$pageNav->showing().'</strong>';
|
|
} else {
|
|
echo sprintf(__('%s does not have any tickets'), $user? __('User') : __('Organization'));
|
|
}
|
|
?>
|
|
</div>
|
|
<div style="margin-bottom:10px;">
|
|
<div class="pull-right flush-right">
|
|
<?php
|
|
if ($user) { ?>
|
|
<a class="green button action-button" href="tickets.php?a=open&uid=<?php echo $user->getId(); ?>">
|
|
<i class="icon-plus"></i> <?php print __('Create New Ticket'); ?></a>
|
|
<?php
|
|
} ?>
|
|
</div>
|
|
</div>
|
|
<br/>
|
|
<div>
|
|
<?php
|
|
if ($total) { ?>
|
|
<form action="users.php" method="POST" name='tickets' style="padding-top:10px;">
|
|
<?php csrf_token(); ?>
|
|
<input type="hidden" name="a" value="mass_process" >
|
|
<input type="hidden" name="do" id="action" value="" >
|
|
<table class="list" border="0" cellspacing="1" cellpadding="2" width="940">
|
|
<thead>
|
|
<tr>
|
|
<?php
|
|
if (0) {?>
|
|
<th width="4%"> </th>
|
|
<?php
|
|
} ?>
|
|
<th width="10%"><?php echo __('Ticket'); ?></th>
|
|
<th width="18%"><?php echo __('Last Updated'); ?></th>
|
|
<th width="8%"><?php echo __('Status'); ?></th>
|
|
<th width="30%"><?php echo __('Subject'); ?></th>
|
|
<?php
|
|
if ($user) { ?>
|
|
<th width="15%"><?php echo __('Department'); ?></th>
|
|
<th width="15%"><?php echo __('Assignee'); ?></th>
|
|
<?php
|
|
} else { ?>
|
|
<th width="30%"><?php echo __('User'); ?></th>
|
|
<?php
|
|
} ?>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<?php
|
|
$subject_field = TicketForm::objects()->one()->getField('subject');
|
|
$user_id = $user ? $user->getId() : 0;
|
|
foreach($tickets as $T) {
|
|
$flag=null;
|
|
if ($T['lock__lock_id'] && $T['lock__staff_id'] != $thisstaff->getId())
|
|
$flag='locked';
|
|
elseif ($T['isoverdue'])
|
|
$flag='overdue';
|
|
|
|
$assigned='';
|
|
if ($T['staff_id'])
|
|
$assigned = new AgentsName(array(
|
|
'first' => $T['staff__firstname'],
|
|
'last' => $T['staff__lastname']
|
|
));
|
|
elseif ($T['team_id'])
|
|
$assigned = Team::getLocalById($T['team_id'], 'name', $T['team__name']);
|
|
else
|
|
$assigned=' ';
|
|
|
|
$status = TicketStatus::getLocalById($T['status_id'], 'value', $T['status__name']);
|
|
$tid = $T['number'];
|
|
$subject = $subject_field->display($subject_field->to_php($T['cdata__subject']));
|
|
$threadcount = $T['thread_count'];
|
|
?>
|
|
<tr id="<?php echo $T['ticket_id']; ?>">
|
|
<?php
|
|
//Implement mass action....if need be.
|
|
if (0) { ?>
|
|
<td align="center" class="nohover">
|
|
<input class="ckb" type="checkbox" name="tids[]" value="<?php echo $T['ticket_id']; ?>" <?php echo $sel?'checked="checked"':''; ?>>
|
|
</td>
|
|
<?php
|
|
} ?>
|
|
<td nowrap>
|
|
<a class="Icon <?php
|
|
echo strtolower($T['source']); ?>Ticket preview"
|
|
title="<?php echo __('Preview Ticket'); ?>"
|
|
href="tickets.php?id=<?php echo $T['ticket_id']; ?>"
|
|
data-preview="#tickets/<?php echo $T['ticket_id']; ?>/preview"><?php
|
|
echo $tid; ?></a>
|
|
<?php
|
|
if ($user_id && $user_id != $T['user_id'])
|
|
echo '<span class="pull-right faded-more" data-toggle="tooltip" title="'
|
|
.__('Collaborator').'"><i class="icon-eye-open"></i></span>';
|
|
?></td>
|
|
<td nowrap><?php echo Format::datetime($T['lastupdate']); ?></td>
|
|
<td><?php echo $status; ?></td>
|
|
<td><a class="truncate <?php if ($flag) { ?> Icon <?php echo $flag; ?>Ticket" title="<?php echo ucfirst($flag); ?> Ticket<?php } ?>"
|
|
style="max-width: 230px;"
|
|
href="tickets.php?id=<?php echo $T['ticket_id']; ?>"><?php echo $subject; ?></a>
|
|
<?php
|
|
if ($T['attachment_count'])
|
|
echo '<i class="small icon-paperclip icon-flip-horizontal" data-toggle="tooltip" title="'
|
|
.$T['attachment_count'].'"></i>';
|
|
if ($threadcount > 1) { ?>
|
|
<span class="pull-right faded-more"><i class="icon-comments-alt"></i>
|
|
<small><?php echo $threadcount; ?></small></span>
|
|
<?php }
|
|
if ($T['attachments'])
|
|
echo '<i class="small icon-paperclip icon-flip-horizontal"></i>';
|
|
if ($T['collab_count'])
|
|
echo '<span class="faded-more" data-toggle="tooltip" title="'
|
|
.$T['collab_count'].'"><i class="icon-group"></i></span>';
|
|
?>
|
|
</td>
|
|
<?php
|
|
if ($user) {
|
|
$dept = Dept::getLocalById($T['dept_id'], 'name', $T['dept__name']); ?>
|
|
<td><span class="truncate" style="max-wdith:125px"><?php
|
|
echo Format::htmlchars($dept); ?></span></td>
|
|
<td><span class="truncate" style="max-width:125px"><?php
|
|
echo Format::htmlchars($assigned); ?></span></td>
|
|
<?php
|
|
} else { ?>
|
|
<td><a class="truncate" style="max-width:250px" href="users.php?id="<?php
|
|
echo $T['user_id']; ?>><?php echo Format::htmlchars($T['user__name']);
|
|
?> <em><<?php echo Format::htmlchars($T['user__default_email__address']);
|
|
?>></em></a>
|
|
</td>
|
|
<?php
|
|
} ?>
|
|
</tr>
|
|
<?php
|
|
}
|
|
?>
|
|
</tbody>
|
|
</table>
|
|
<?php
|
|
if ($total>0) {
|
|
echo '<div>';
|
|
echo __('Page').':'.$pageNav->getPageLinks('tickets', '#tickets').' ';
|
|
echo sprintf('<a href="#%s/%d/tickets/export" id="%s" class="no-pjax export">%s</a>',
|
|
$user ? 'users' : 'orgs',
|
|
$user ? $user->getId() : $org->getId(),
|
|
'queue-export',
|
|
__('Export'));
|
|
echo '</div>';
|
|
} ?>
|
|
</form>
|
|
<?php
|
|
} ?>
|
|
</div>
|