#25 Dashboard columns can now be added/removed via JavaScript!
This commit is contained in:
parent
8cd7aebaae
commit
8398efa538
1
.gitignore
vendored
1
.gitignore
vendored
@ -186,7 +186,6 @@ inc/mail/smtp.php
|
||||
inc/pipe_functions.inc.php
|
||||
inc/posting_functions.inc.php
|
||||
inc/prepare_ticket_export.inc.php
|
||||
inc/prepare_ticket_search.inc.php
|
||||
inc/print_group.inc.php
|
||||
inc/recaptcha/LICENSE
|
||||
inc/recaptcha/index.htm
|
||||
|
@ -65,8 +65,12 @@ require_once(HESK_PATH . 'inc/show_admin_nav.inc.php');
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
<h3 align="center"><?php echo $hesklang['tickets_found']; ?></h3>
|
||||
<div class="row" style="padding-top: 20px">
|
||||
<div class="col-md-10 col-md-offset-1">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h4><?php echo $hesklang['tickets_found']; ?> <span style="float: right; margin-top: -7px;"><a href="new_ticket.php" class="btn btn-success"><?php echo $hesklang['nti']; ?></a></span></h4>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
|
||||
@ -237,8 +241,6 @@ if ($handle !== FALSE)
|
||||
}
|
||||
?>
|
||||
|
||||
<hr />
|
||||
|
||||
<?php
|
||||
|
||||
/* Clean unneeded session variables */
|
||||
|
177
inc/prepare_ticket_search.inc.php
Normal file
177
inc/prepare_ticket_search.inc.php
Normal file
@ -0,0 +1,177 @@
|
||||
<?php
|
||||
/*******************************************************************************
|
||||
* Title: Help Desk Software HESK
|
||||
* Version: 2.5.5 from 5th August 2014
|
||||
* Author: Klemen Stirn
|
||||
* Website: http://www.hesk.com
|
||||
********************************************************************************
|
||||
* COPYRIGHT AND TRADEMARK NOTICE
|
||||
* Copyright 2005-2014 Klemen Stirn. All Rights Reserved.
|
||||
* HESK is a registered trademark of Klemen Stirn.
|
||||
|
||||
* The HESK may be used and modified free of charge by anyone
|
||||
* AS LONG AS COPYRIGHT NOTICES AND ALL THE COMMENTS REMAIN INTACT.
|
||||
* By using this code you agree to indemnify Klemen Stirn from any
|
||||
* liability that might arise from it's use.
|
||||
|
||||
* Selling the code for this program, in part or full, without prior
|
||||
* written consent is expressly forbidden.
|
||||
|
||||
* Using this code, in part or full, to create derivate work,
|
||||
* new scripts or products is expressly forbidden. Obtain permission
|
||||
* before redistributing this software over the Internet or in
|
||||
* any other medium. In all cases copyright and header must remain intact.
|
||||
* This Copyright is in full effect in any country that has International
|
||||
* Trade Agreements with the United States of America or
|
||||
* with the European Union.
|
||||
|
||||
* Removing any of the copyright notices without purchasing a license
|
||||
* is expressly forbidden. To remove HESK copyright notice you must purchase
|
||||
* a license for this script. For more information on how to obtain
|
||||
* a license please visit the page below:
|
||||
* https://www.hesk.com/buy.php
|
||||
*******************************************************************************/
|
||||
|
||||
/* Check if this is a valid include */
|
||||
if (!defined('IN_SCRIPT')) {die('Invalid attempt');}
|
||||
|
||||
$tmp = intval( hesk_GET('limit') );
|
||||
$maxresults = ($tmp > 0) ? $tmp : $hesk_settings['max_listings'];
|
||||
|
||||
$tmp = intval( hesk_GET('page', 1) );
|
||||
$page = ($tmp > 1) ? $tmp : 1;
|
||||
|
||||
/* Acceptable $sort values and default asc(1)/desc(0) setting */
|
||||
$sort_possible = array(
|
||||
'trackid' => 1,
|
||||
'lastchange' => 0,
|
||||
'name' => 1,
|
||||
'subject' => 1,
|
||||
'status' => 1,
|
||||
'lastreplier' => 1,
|
||||
'priority' => 1,
|
||||
'category' => 1,
|
||||
'dt' => 0,
|
||||
'id' => 1,
|
||||
'owner' => 1,
|
||||
'custom1' => 1,
|
||||
'custom2' => 1,
|
||||
'custom3' => 1,
|
||||
'custom4' => 1,
|
||||
'custom5' => 1,
|
||||
'custom6' => 1,
|
||||
'custom7' => 1,
|
||||
'custom8' => 1,
|
||||
'custom9' => 1,
|
||||
'custom10' => 1,
|
||||
'custom11' => 1,
|
||||
'custom12' => 1,
|
||||
'custom13' => 1,
|
||||
'custom14' => 1,
|
||||
'custom15' => 1,
|
||||
'custom16' => 1,
|
||||
'custom17' => 1,
|
||||
'custom18' => 1,
|
||||
'custom19' => 1,
|
||||
'custom20' => 1
|
||||
);
|
||||
|
||||
/* These values should have collate appended in SQL */
|
||||
$sort_collation = array(
|
||||
'name',
|
||||
'subject',
|
||||
);
|
||||
|
||||
/* Acceptable $group values and default asc(1)/desc(0) setting */
|
||||
$group_possible = array(
|
||||
'owner' => 1,
|
||||
'priority' => 1,
|
||||
'category' => 1,
|
||||
);
|
||||
|
||||
/* Start the order by part of the SQL query */
|
||||
$sql .= " ORDER BY ";
|
||||
|
||||
/* Group tickets? Default: no */
|
||||
if (isset($_GET['g']) && ! is_array($_GET['g']) && isset($group_possible[$_GET['g']]))
|
||||
{
|
||||
$group = hesk_input($_GET['g']);
|
||||
|
||||
if ($group == 'priority' && isset($_GET['sort']) && ! is_array($_GET['sort']) && $_GET['sort'] == 'priority')
|
||||
{
|
||||
// No need to group by priority if we are already sorting by priority
|
||||
}
|
||||
elseif ($group == 'owner')
|
||||
{
|
||||
// If group by owner place own tickets on top
|
||||
$sql .= " CASE WHEN `owner` = '".intval($_SESSION['id'])."' THEN 1 ELSE 0 END DESC, `owner` ASC, ";
|
||||
}
|
||||
else
|
||||
{
|
||||
$sql .= ' `'.hesk_dbEscape($group).'` ';
|
||||
$sql .= $group_possible[$group] ? 'ASC, ' : 'DESC, ';
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$group = '';
|
||||
}
|
||||
|
||||
|
||||
/* Show critical tickets always on top? Default: yes */
|
||||
$cot = (isset($_GET['cot']) && intval($_GET['cot']) == 1) ? 1 : 0;
|
||||
if (!$cot)
|
||||
{
|
||||
$sql .= " CASE WHEN `priority` = '0' THEN 1 ELSE 0 END DESC , ";
|
||||
}
|
||||
|
||||
/* Sort by which field? */
|
||||
if (isset($_GET['sort']) && ! is_array($_GET['sort']) && isset($sort_possible[$_GET['sort']]))
|
||||
{
|
||||
$sort = hesk_input($_GET['sort']);
|
||||
|
||||
$sql .= $sort == 'lastreplier' ? " CASE WHEN `lastreplier` = '0' THEN 0 ELSE 1 END DESC, COALESCE(`replierid`, NULLIF(`lastreplier`, '0'), `name`) " : ' `'.hesk_dbEscape($sort).'` ';
|
||||
|
||||
// Need to set MySQL collation?
|
||||
if ( in_array($_GET['sort'], $sort_collation) )
|
||||
{
|
||||
$sql .= " COLLATE '" . hesk_dbEscape($hesklang['_COLLATE']) . "' ";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Default sorting by ticket status */
|
||||
$sql .= ' `status` ';
|
||||
$sort = 'status';
|
||||
}
|
||||
|
||||
/* Ascending or Descending? */
|
||||
if (isset($_GET['asc']) && intval($_GET['asc'])==0)
|
||||
{
|
||||
$sql .= ' DESC ';
|
||||
$asc = 0;
|
||||
$asc_rev = 1;
|
||||
|
||||
$sort_possible[$sort] = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
$sql .= ' ASC ';
|
||||
$asc = 1;
|
||||
$asc_rev = 0;
|
||||
if (!isset($_GET['asc']))
|
||||
{
|
||||
$is_default = 1;
|
||||
}
|
||||
|
||||
$sort_possible[$sort] = 0;
|
||||
}
|
||||
|
||||
/* In the end same results should always be sorted by priority */
|
||||
if ($sort != 'priority')
|
||||
{
|
||||
$sql .= ' , `priority` ASC ';
|
||||
}
|
||||
|
||||
# Uncomment for debugging purposes
|
||||
# echo "SQL: $sql<br>";
|
@ -314,17 +314,32 @@ if ($total > 0)
|
||||
$ticket['archive'] = !($ticket['archive']) ? $hesklang['no'] : $hesklang['yes'];
|
||||
|
||||
$ticket['message'] = $first_line . substr(strip_tags($ticket['message']),0,200).'...';
|
||||
$ownerColumn = $ticket['owner'] != 0 ? $admins[$ticket['owner']] : '('.$hesklang['unas'].')';
|
||||
|
||||
$customFieldsHtml = '';
|
||||
for ($i = 0; $i <= 20; $i++) {
|
||||
if ($hesk_settings['custom_fields']['custom'.$i]['use']) {
|
||||
$display = 'display: none';
|
||||
if ((isset($_GET['sort']) && $_GET['sort'] == 'custom'.$i) || (isset($_GET['what']) && $_GET['what'] == 'custom'.$i)) {
|
||||
$display = '';
|
||||
}
|
||||
$customFieldsHtml .= '<td style="'.$display.'" class="column_columnCustom'.$i.'">'.$ticket['custom'.$i].'</td>';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
echo <<<EOC
|
||||
<tr class="$color" id="$ticket[id]" title="$ticket[message]">
|
||||
<td><input type="checkbox" id="check$ticket[id]" name="id[]" value="$ticket[id]" /> </td>
|
||||
<td><a href="admin_ticket.php?track=$ticket[trackid]&Refresh=$random">$ticket[trackid]</a></td>
|
||||
<td>$ticket[lastchange]</td>
|
||||
<td>$ticket[name]</td>
|
||||
<td>$tagged$owner<a href="admin_ticket.php?track=$ticket[trackid]&Refresh=$random">$ticket[subject]</a></td>
|
||||
<td>$ticket[status] </td>
|
||||
<td>$ticket[repliername]</td>
|
||||
<td>$ticket[priority] </td>
|
||||
<td class="column_trackID"><a href="admin_ticket.php?track=$ticket[trackid]&Refresh=$random">$ticket[trackid]</a></td>
|
||||
<td class="column_last_update">$ticket[lastchange]</td>
|
||||
<td class="column_name">$ticket[name]</td>
|
||||
<td class="column_subject">$tagged$owner<a href="admin_ticket.php?track=$ticket[trackid]&Refresh=$random">$ticket[subject]</a></td>
|
||||
<td class="column_status">$ticket[status] </td>
|
||||
<td class="column_lastreplier">$ticket[repliername]</td>
|
||||
<td class="column_priority">$ticket[priority]</td>
|
||||
<td class="column_owner" style="display: none">$ownerColumn</td>
|
||||
$customFieldsHtml
|
||||
</tr>
|
||||
|
||||
EOC;
|
||||
@ -334,9 +349,98 @@ EOC;
|
||||
</div>
|
||||
|
||||
<br />
|
||||
|
||||
<?php
|
||||
$columnOneCheckboxes = array();
|
||||
$columnTwoCheckboxes = array();
|
||||
$columnThreeCheckboxes = array();
|
||||
$currentColumn = 3;
|
||||
|
||||
for ($i = 1; $i <= 20; $i++) {
|
||||
if ($hesk_settings['custom_fields']['custom'.$i]['use']) {
|
||||
if ($currentColumn == 1) {
|
||||
array_push($columnOneCheckboxes, $i);
|
||||
$currentColumn = 2;
|
||||
} elseif ($currentColumn == 2) {
|
||||
array_push($columnTwoCheckboxes, $i);
|
||||
$currentColumn = 3;
|
||||
} else {
|
||||
array_push($columnThreeCheckboxes, $i);
|
||||
$currentColumn = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
<table border="0" width="100%">
|
||||
<tr>
|
||||
<td width="50%" style="vertical-align:top">
|
||||
<h6 id="showFiltersText" style="font-weight: bold"><a href="javascript:void(0)" onclick="toggleFilterCheckboxes(true)"><?php echo $hesklang['show_filters']; ?></a></h6>
|
||||
<h6 id="hideFiltersText" style="font-weight: bold; display: none"><a href="javascript:void(0)" onclick="toggleFilterCheckboxes(false)"><?php echo $hesklang['hide_filters']; ?></a></h6>
|
||||
<div id="filterCheckboxes" style="display: none" class="row">
|
||||
<div class="col-md-4 col-sm-12">
|
||||
<div class="checkbox">
|
||||
<input type="checkbox" onclick="toggleColumn('column_trackID')" checked> <?php echo $hesklang['trackID']; ?>
|
||||
</div><br>
|
||||
<div class="checkbox">
|
||||
<input type="checkbox" onclick="toggleColumn('column_subject')" checked> <?php echo $hesklang['subject']; ?>
|
||||
</div><br>
|
||||
<div class="checkbox">
|
||||
<input type="checkbox" onclick="toggleColumn('column_priority')" checked> <?php echo $hesklang['priority']; ?>
|
||||
</div>
|
||||
<?php
|
||||
foreach ($columnOneCheckboxes as $i) {
|
||||
$checked = '';
|
||||
if ((isset($_GET['sort']) && $_GET['sort'] == 'custom'.$i) || (isset($_GET['what']) && $_GET['what'] == 'custom'.$i)) {
|
||||
$checked = 'checked';
|
||||
}
|
||||
echo '<br><div class="checkbox">
|
||||
<input type="checkbox" onclick="toggleColumn(\'column_columnCustom'.$i.'\')" '.$checked.'>
|
||||
'.$hesk_settings['custom_fields']['custom'.$i]['name'].'</div>';
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
<div class="col-md-4 col-sm-12">
|
||||
<div class="checkbox">
|
||||
<input type="checkbox" onclick="toggleColumn('column_last_update')" checked> <?php echo $hesklang['last_update']; ?>
|
||||
</div><br>
|
||||
<div class="checkbox">
|
||||
<input type="checkbox" onclick="toggleColumn('column_status')" checked> <?php echo $hesklang['status']; ?>
|
||||
</div><br>
|
||||
<div class="checkbox">
|
||||
<input type="checkbox" onclick="toggleColumn('column_owner')"> <?php echo $hesklang['owner']; ?>
|
||||
</div>
|
||||
<?php
|
||||
foreach ($columnTwoCheckboxes as $i) {
|
||||
$checked = '';
|
||||
if ((isset($_GET['sort']) && $_GET['sort'] == 'custom'.$i) || (isset($_GET['what']) && $_GET['what'] == 'custom'.$i)) {
|
||||
$checked = 'checked';
|
||||
}
|
||||
echo '<br><div class="checkbox">
|
||||
<input type="checkbox" onclick="toggleColumn(\'column_columnCustom'.$i.'\')" '.$checked.'>
|
||||
'.$hesk_settings['custom_fields']['custom'.$i]['name'].'</div>';
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
<div class="col-md-4 col-sm-12">
|
||||
<div class="checkbox">
|
||||
<input type="checkbox" onclick="toggleColumn('column_name')" checked> <?php echo $hesklang['name']; ?>
|
||||
</div><br>
|
||||
<div class="checkbox">
|
||||
<input type="checkbox" onclick="toggleColumn('column_lastreplier')" checked> <?php echo $hesklang['last_replier']; ?>
|
||||
</div>
|
||||
<?php
|
||||
foreach ($columnThreeCheckboxes as $i) {
|
||||
$checked = '';
|
||||
if ((isset($_GET['sort']) && $_GET['sort'] == 'custom'.$i) || (isset($_GET['what']) && $_GET['what'] == 'custom'.$i)) {
|
||||
$checked = 'checked';
|
||||
}
|
||||
echo '<br><div class="checkbox">
|
||||
<input type="checkbox" onclick="toggleColumn(\'column_columnCustom'.$i.'\')" '.$checked.'>
|
||||
'.$hesk_settings['custom_fields']['custom'.$i]['name'].'</div>';
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td width="50%" style="text-align:right;vertical-align:top">
|
||||
<select class="form-control" name="a">
|
||||
<option value="close" selected="selected"><?php echo $hesklang['close_selected']; ?></option>
|
||||
@ -399,20 +503,33 @@ else
|
||||
|
||||
function hesk_print_list_head()
|
||||
{
|
||||
global $href, $query, $sort_possible, $hesklang;
|
||||
global $href, $query, $sort_possible, $hesklang, $hesk_settings;
|
||||
?>
|
||||
<div align="center">
|
||||
<table id="ticket-table" class="table table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><input type="checkbox" id="checkall" name="checkall" value="2" onclick="hesk_changeAll(this)" /></th>
|
||||
<th><a href="<?php echo $href . '?' . $query . $sort_possible['trackid'] . '&sort='; ?>trackid"><?php echo $hesklang['trackID']; ?></a></th>
|
||||
<th><a href="<?php echo $href . '?' . $query . $sort_possible['lastchange'] . '&sort='; ?>lastchange"><?php echo $hesklang['last_update']; ?></a></th>
|
||||
<th><a href="<?php echo $href . '?' . $query . $sort_possible['name'] . '&sort='; ?>name"><?php echo $hesklang['name']; ?></a></th>
|
||||
<th><a href="<?php echo $href . '?' . $query . $sort_possible['subject'] . '&sort='; ?>subject"><?php echo $hesklang['subject']; ?></a></th>
|
||||
<th><a href="<?php echo $href . '?' . $query . $sort_possible['status'] . '&sort='; ?>status"><?php echo $hesklang['status']; ?></a></th>
|
||||
<th><a href="<?php echo $href . '?' . $query . $sort_possible['lastreplier'] . '&sort='; ?>lastreplier"><?php echo $hesklang['last_replier']; ?></a></th>
|
||||
<th><a href="<?php echo $href . '?' . $query . $sort_possible['priority'] . '&sort='; ?>priority"><i class="fa fa-sort-<?php echo (($sort_possible['priority']) ? 'asc' : 'desc'); ?>"></i></a></th>
|
||||
<th class="column_trackID"><a href="<?php echo $href . '?' . $query . $sort_possible['trackid'] . '&sort='; ?>trackid"><?php echo $hesklang['trackID']; ?></a></th>
|
||||
<th class="column_last_update"><a href="<?php echo $href . '?' . $query . $sort_possible['lastchange'] . '&sort='; ?>lastchange"><?php echo $hesklang['last_update']; ?></a></th>
|
||||
<th class="column_name"><a href="<?php echo $href . '?' . $query . $sort_possible['name'] . '&sort='; ?>name"><?php echo $hesklang['name']; ?></a></th>
|
||||
<th class="column_subject"><a href="<?php echo $href . '?' . $query . $sort_possible['subject'] . '&sort='; ?>subject"><?php echo $hesklang['subject']; ?></a></th>
|
||||
<th class="column_status"><a href="<?php echo $href . '?' . $query . $sort_possible['status'] . '&sort='; ?>status"><?php echo $hesklang['status']; ?></a></th>
|
||||
<th class="column_lastreplier"><a href="<?php echo $href . '?' . $query . $sort_possible['lastreplier'] . '&sort='; ?>lastreplier"><?php echo $hesklang['last_replier']; ?></a></th>
|
||||
<th class="column_priority"><a href="<?php echo $href . '?' . $query . $sort_possible['priority'] . '&sort='; ?>priority"><i class="fa fa-sort-<?php echo (($sort_possible['priority']) ? 'asc' : 'desc'); ?>"></i></a></th>
|
||||
<!-- All other fields, hidden by default. -->
|
||||
<th class="column_owner" style="display: none"><a href="<?php echo $href . '?' . $query . $sort_possible['priority'] . '&sort='; ?>owner"><?php echo $hesklang['owner']; ?></a></th>
|
||||
<?php
|
||||
for ($i = 1; $i <= 20; $i++) {
|
||||
if ($hesk_settings['custom_fields']['custom'.$i]['use']) {
|
||||
$display = 'display: none';
|
||||
if ((isset($_GET['sort']) && $_GET['sort'] == 'custom'.$i) || (isset($_GET['what']) && $_GET['what'] == 'custom'.$i)) {
|
||||
$display = '';
|
||||
}
|
||||
echo '<th style="'.$display.'" class="column_columnCustom'.$i.'"><a href="'.$href . '?' . $query . $sort_possible['priority'] . '&sort=custom'.$i.'">'.$hesk_settings['custom_fields']['custom'.$i]['name'].'</a></th>';
|
||||
}
|
||||
}
|
||||
?>
|
||||
</tr>
|
||||
</thead>
|
||||
<?php
|
||||
|
@ -20,5 +20,24 @@ function toggleRow(id) {
|
||||
}
|
||||
}
|
||||
|
||||
function toggleColumn(className) {
|
||||
if ($('.' + className).css('display') == 'none') {
|
||||
$('.' + className).show();
|
||||
} else {
|
||||
$('.' + className).hide();
|
||||
}
|
||||
}
|
||||
|
||||
function toggleFilterCheckboxes(show) {
|
||||
if (show) {
|
||||
$('#filterCheckboxes').show();
|
||||
$('#showFiltersText').hide();
|
||||
$('#hideFiltersText').show();
|
||||
} else {
|
||||
$('#filterCheckboxes').hide();
|
||||
$('#showFiltersText').show();
|
||||
$('#hideFiltersText').hide();
|
||||
}
|
||||
}
|
||||
|
||||
jQuery(document).ready(loadJquery);
|
||||
|
@ -21,6 +21,10 @@ $hesklang['_COLLATE']='utf8_unicode_ci';
|
||||
// This is the email break line that will be used in email piping
|
||||
$hesklang['EMAIL_HR']='------ Reply above this line ------';
|
||||
|
||||
// ADDED OR MODIFIED IN NuMods 1.2.5
|
||||
$hesklang['show_filters'] = 'Show Column Filters';
|
||||
$hesklang['hide_filters'] = 'Hide Column Filters';
|
||||
|
||||
// ADDED OR MODIFIED IN NuMods 1.2.2
|
||||
$hesklang['changeLanguage'] = 'Change language to';
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user