Newer
Older
if(!defined('OSTCLIENTINC') || !is_object($thisclient) || !$thisclient->isValid()) die('Access Denied');
$tickets = TicketModel::objects();
$qstr='&'; //Query string collector
$status=null;
if(isset($_REQUEST['status'])) { //Query string status has nothing to do with the real status used below.
$qstr.='status='.urlencode($_REQUEST['status']);
//Status we are actually going to use on the query...making sure it is clean!
$status=strtolower($_REQUEST['status']);
switch(strtolower($_REQUEST['status'])) {
case 'open':
$results_type=__('Open Tickets');
$tickets->filter(array('status__state'=>'open'));
break;
$results_type=__('Closed Tickets');
$tickets->filter(array('status__state'=>'closed'));
default:
$status=''; //ignore
}
} elseif($thisclient->getNumOpenTickets()) {
$status='open'; //Defaulting to open
$results_type=__('Open Tickets');
$sortOptions=array('id'=>'number', 'subject'=>'cdata__subject',
'status'=>'status__name', 'dept'=>'dept__name','date'=>'created');
$orderWays=array('DESC'=>'-','ASC'=>'');
//Sorting options...
$order_by=$order=null;
$sort=($_REQUEST['sort'] && $sortOptions[strtolower($_REQUEST['sort'])])?strtolower($_REQUEST['sort']):'date';
if($sort && $sortOptions[$sort])
$order_by =$sortOptions[$sort];
$order_by=$order_by ?: $sortOptions['date'];
if($_REQUEST['order'] && $orderWays[strtoupper($_REQUEST['order'])])
$order=$orderWays[strtoupper($_REQUEST['order'])];
$x=$sort.'_sort';
$$x=' class="'.strtolower($_REQUEST['order'] ?: 'desc').'" ';
// Add visibility constraints
$tickets->filter(Q::any(array(
'user_id' => $thisclient->getId(),
'collaborators__user_id' => $thisclient->getId(),
)));
$search=($_REQUEST['a']=='search' && $_REQUEST['q']);
if($search) {
$qstr.='&a='.urlencode($_REQUEST['a']).'&q='.urlencode($_REQUEST['q']);
if (is_numeric($_REQUEST['q'])) {
$tickets->filter(array('number__startswith'=>$_REQUEST['q']));
} else { //Deep search!
// Use the search engine to perform the search
$tickets = $ost->searcher->find($_REQUEST['q'], $tickets);
TicketForm::ensureDynamicDataView();
$page=($_GET['p'] && is_numeric($_GET['p']))?$_GET['p']:1;
$pageNav=new Pagenate($total, $page, PAGE_LIMIT);
$pageNav->setURL('tickets.php',$qstr.'&sort='.urlencode($_REQUEST['sort']).'&order='.urlencode($_REQUEST['order']));
$showing =$total ? $pageNav->showing() : "";
$results_type=ucfirst($status).' '.__('Tickets');
}
$showing.=($status)?(' '.$results_type):' '.__('All Tickets');
$showing=__('Search Results').": $showing";
$negorder=$order=='-'?'ASC':'DESC'; //Negate the sorting
$tickets->order_by($order.$order_by);
$tickets->values(
'ticket_id', 'number', 'created', 'isanswered', 'source', 'status_id',
'status__state', 'status__name', 'cdata__subject', 'dept_id',
'dept__name', 'dept__ispublic', 'user__default_email__address'
);
<h1><?php echo __('Tickets');?></h1>
<br>
<form action="tickets.php" method="get" id="ticketSearchForm">
<input type="hidden" name="a" value="search">
<input type="text" name="q" size="20" value="<?php echo Format::htmlchars($_REQUEST['q']); ?>">
<select name="status">
<option value="">— <?php echo __('Any Status');?> —</option>
<option value="open"
<?php echo ($status=='open') ? 'selected="selected"' : '';?>>
<?php echo _P('ticket-status', 'Open');?> (<?php echo $thisclient->getNumOpenTickets(); ?>)</option>
<?php
if($thisclient->getNumClosedTickets()) {
?>
<option value="closed"
<?php echo ($status=='closed') ? 'selected="selected"' : '';?>>
<?php echo __('Closed');?> (<?php echo $thisclient->getNumClosedTickets(); ?>)</option>
<input type="submit" value="<?php echo __('Go');?>">
<a class="refresh" href="<?php echo Format::htmlchars($_SERVER['REQUEST_URI']); ?>"><?php echo __('Refresh'); ?></a>
<table id="ticketTable" width="800" border="0" cellspacing="0" cellpadding="0">
<caption><?php echo $showing; ?></caption>
<thead>
<tr>
<a href="tickets.php?sort=ID&order=<?php echo $negorder; ?><?php echo $qstr; ?>" title="Sort By Ticket ID"><?php echo __('Ticket #');?></a>
<a href="tickets.php?sort=date&order=<?php echo $negorder; ?><?php echo $qstr; ?>" title="Sort By Date"><?php echo __('Create Date');?></a>
<a href="tickets.php?sort=status&order=<?php echo $negorder; ?><?php echo $qstr; ?>" title="Sort By Status"><?php echo __('Status');?></a>
<a href="tickets.php?sort=subj&order=<?php echo $negorder; ?><?php echo $qstr; ?>" title="Sort By Subject"><?php echo __('Subject');?></a>
<a href="tickets.php?sort=dept&order=<?php echo $negorder; ?><?php echo $qstr; ?>" title="Sort By Department"><?php echo __('Department');?></a>
</th>
</tr>
</thead>
<tbody>
<?php
$subject_field = TicketForm::objects()->one()->getField('subject');
$defaultDept=Dept::getDefaultDeptName(); //Default public dept.
if ($tickets->exists(true)) {
foreach ($tickets as $T) {
$dept = $T['dept__ispublic']
? Dept::getLocalById($T['dept_id'], 'name', $T['dept__name'])
: $defaultDept;
$subject = Format::truncate($subject_field->display(
$subject_field->to_php($T['cdata__subject']) ?: $T['cdata__subject']
$status = TicketStatus::getLocalById($T['status_id'], 'value', $T['status__name']);
if (false) // XXX: Reimplement attachment count support
$subject.=' <span class="Icon file"></span>';
$ticketNumber=$T['number'];
if($T['isanswered'] && !strcasecmp($T['status__state'], 'open')) {
<tr id="<?php echo $T['ticket_id']; ?>">
<a class="Icon <?php echo strtolower($T['source']); ?>Ticket" title="<?php echo $T['user__default_email__address']; ?>"
href="tickets.php?id=<?php echo $T['ticket_id']; ?>"><?php echo $ticketNumber; ?></a>
<td> <?php echo Format::date($T['created']); ?></td>
<td> <?php echo $status; ?></td>
<a href="tickets.php?id=<?php echo $T['ticket_id']; ?>"><?php echo $subject; ?></a>
<td> <?php echo Format::truncate($dept,30); ?></td>
</tr>
<?php
}
} else {
echo '<tr><td colspan="6">'.__('Your query did not match any records').'</td></tr>';
}
?>
</tbody>
</table>
<?php
echo '<div> '.__('Page').':'.$pageNav->getPageLinks().' </div>';