From 8398efa538775c62e43f7eb6f1d2821f7a9cc052 Mon Sep 17 00:00:00 2001 From: Mike Koch Date: Sun, 7 Sep 2014 01:50:56 -0400 Subject: [PATCH] #25 Dashboard columns can now be added/removed via JavaScript! --- .gitignore | 1 - admin/find_tickets.php | 10 +- inc/prepare_ticket_search.inc.php | 177 ++++++++++++++++++++++++++++++ inc/ticket_list.inc.php | 149 ++++++++++++++++++++++--- js/nuMods-javascript.js | 19 ++++ language/en/text.php | 4 + 6 files changed, 339 insertions(+), 21 deletions(-) create mode 100644 inc/prepare_ticket_search.inc.php diff --git a/.gitignore b/.gitignore index cb56f7f4..3c8db864 100644 --- a/.gitignore +++ b/.gitignore @@ -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 diff --git a/admin/find_tickets.php b/admin/find_tickets.php index 4e35e3a7..24974da9 100644 --- a/admin/find_tickets.php +++ b/admin/find_tickets.php @@ -65,8 +65,12 @@ require_once(HESK_PATH . 'inc/show_admin_nav.inc.php'); - -

+
+
+
+
+

+
-
- 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
"; diff --git a/inc/ticket_list.inc.php b/inc/ticket_list.inc.php index 7c83845d..33e2033a 100644 --- a/inc/ticket_list.inc.php +++ b/inc/ticket_list.inc.php @@ -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 .= ''.$ticket['custom'.$i].''; + } + } + echo <<   - $ticket[trackid] - $ticket[lastchange] - $ticket[name] - $tagged$owner$ticket[subject] - $ticket[status]  - $ticket[repliername] - $ticket[priority]  + $ticket[trackid] + $ticket[lastchange] + $ticket[name] + $tagged$owner$ticket[subject] + $ticket[status]  + $ticket[repliername] + $ticket[priority] + $ownerColumn + $customFieldsHtml EOC; @@ -334,9 +349,98 @@ EOC;
 
- + +
+
+ + +
- - - - - - - + + + + + + + + + + '.$hesk_settings['custom_fields']['custom'.$i]['name'].''; + } + } + ?>