From cb50a7072bd9e0ad6eb8a0f8f017355d285e0fb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaros=C5=82aw=20K=C5=82opotek=20-=20INTERDUO?= Date: Sat, 1 Feb 2025 14:53:34 +0100 Subject: [PATCH 1/2] enhancement: added node tickets panel - showing history of node by tickets --- lib/LMSManagers/LMSHelpdeskManager.php | 12 ++- lib/locale/pl_PL/strings.php | 1 + modules/nodeinfo.php | 20 ++++ templates/default/node/nodeinfo.html | 3 + templates/default/node/nodetickets.html | 134 ++++++++++++++++++++++++ 5 files changed, 169 insertions(+), 1 deletion(-) create mode 100644 templates/default/node/nodetickets.html diff --git a/lib/LMSManagers/LMSHelpdeskManager.php b/lib/LMSManagers/LMSHelpdeskManager.php index 9dff834e31..338063498f 100644 --- a/lib/LMSManagers/LMSHelpdeskManager.php +++ b/lib/LMSManagers/LMSHelpdeskManager.php @@ -138,7 +138,7 @@ public function GetQueueContents(array $params) { $userid = Auth::GetCurrentUser(); extract($params); - foreach (array('ids', 'state', 'priority', 'source', 'owner', 'catids', 'removed', 'netdevids', 'netnodeids', 'deadline', + foreach (array('ids', 'state', 'priority', 'source', 'owner', 'catids', 'removed', 'nodeids', 'netdevids', 'netnodeids', 'deadline', 'serviceids', 'typeids', 'unread', 'parentids', 'verifierids', 'rights', 'projectids', 'cid', 'subject', 'fromdate', 'todate', 'short', 'watching') as $var) { if (!isset(${$var})) { ${$var} = null; @@ -229,6 +229,14 @@ public function GetQueueContents(array $params) $sourcefilter = ' AND t.source = ' . $source; } + if (empty($nodeids)) { + $nodeidsfilter = ''; + } elseif (is_array($nodeids)) { + $nodeidsfilter = ' AND t.nodeid IN (' . implode(',', $nodeids) . ')'; + } else { + $nodeidsfilter = ' AND t.nodeid = ' . $nodeids; + } + if (empty($netdevids)) { $netdevidsfilter = ''; } elseif (is_array($netdevids)) { @@ -488,6 +496,7 @@ public function GetQueueContents(array $params) . $sourcefilter . $ownerfilter . $removedfilter + . $nodeidsfilter . $netdevidsfilter . $netnodeidsfilter . $deadlinefilter @@ -597,6 +606,7 @@ public function GetQueueContents(array $params) . $sourcefilter . $ownerfilter . $removedfilter + . $nodeidsfilter . $netdevidsfilter . $netnodeidsfilter . $deadlinefilter diff --git a/lib/locale/pl_PL/strings.php b/lib/locale/pl_PL/strings.php index 0d8712050d..2c04800d0b 100644 --- a/lib/locale/pl_PL/strings.php +++ b/lib/locale/pl_PL/strings.php @@ -5125,6 +5125,7 @@ $_LANG['Today\'s events assigned to You'] = 'Dzisiejsze zdarzenia przypisane do Ciebie'; $_LANG['Critical tickets'] = 'Zgłoszenia krytyczne'; $_LANG['Customer tickets'] = 'Zgłoszenia klienta'; +$_LANG['Node tickets'] = 'Zgłoszenia komputera'; $_LANG['Urgent tickets'] = 'Zgłoszenia pilne'; $_LANG['Unread tickets'] = 'Nieprzeczytane zgłoszenia'; diff --git a/modules/nodeinfo.php b/modules/nodeinfo.php index 5410e3c216..1f6980d939 100644 --- a/modules/nodeinfo.php +++ b/modules/nodeinfo.php @@ -57,6 +57,22 @@ $nodeinfo = $LMS->GetNode($nodeid); +$params = [ + 'nodeids' => $nodeid, + 'short' => true, +]; + +$alltickets = !empty($_GET['alltickets']) ?: ConfigHelper::checkConfig( + 'rt.default_show_closed_tickets', + ConfigHelper::checkConfig('phpui.default_show_closed_tickets') +); + +if (!$alltickets) { + $params['state'] = -1; +} + +$nodeticketlist = $LMS->GetQueueContents($params); + $node_empty_mac = ConfigHelper::getConfig('nodes.empty_mac', ConfigHelper::getConfig('phpui.node_empty_mac', '', true)); if (strlen($node_empty_mac)) { $node_empty_mac = Utils::normalizeMac($node_empty_mac); @@ -181,6 +197,10 @@ $SMARTY->assign('nodeid', $nodeinfo['id']); } +if (!isset($resource_tabs['nodetickets']) || $resource_tabs['nodetickets']) { + $SMARTY->assign(['nodeticketlist' => $nodeticketlist, 'alltickets' => $alltickets]); +} + $SMARTY->assign('nodeinfo', $nodeinfo); $SMARTY->assign('objectid', $nodeinfo['id']); $SMARTY->assign('nodeinfo_sortable_order', $SESSION->get_persistent_setting('nodeinfo-sortable-order')); diff --git a/templates/default/node/nodeinfo.html b/templates/default/node/nodeinfo.html index c9121df8ab..5afd1a444e 100644 --- a/templates/default/node/nodeinfo.html +++ b/templates/default/node/nodeinfo.html @@ -23,6 +23,9 @@

{$layout.pagetitle}

{block name="nodelocks"} {include file="node/nodelocks.html"} {/block} +{block name="nodetickets"} + {include file="node/nodetickets.html"} +{/block} {block name="customerinfobox"} {include file="customer/customerinfobox.html" customerpanel=1} {/block} diff --git a/templates/default/node/nodetickets.html b/templates/default/node/nodetickets.html new file mode 100644 index 0000000000..a619b4ca1e --- /dev/null +++ b/templates/default/node/nodetickets.html @@ -0,0 +1,134 @@ + + +{css} +{js} + +{tab_container id="nodetickets" label="Node tickets"} + + {tab_header content_id="nodeticketspanel"} + {tab_header_cell icon="lms-ui-icon-helpdesk"} + {trans("Node tickets")} + {/tab_header_cell} + {tab_header_cell} + {button type="link" label="{if $alltickets}Hide resolved{else}Show resolved{/if}" icon="close" href="?m={$layout.module}&id={$customerinfo.id}{if !$alltickets}&alltickets=1{/if}"} + {/tab_header_cell} + {/tab_header} + + {tab_contents id="nodeticketspanel"} + {tab_table} +
+
+
+
+
{trans("Create time")}
+
{trans("Queue")}
+
+
+
{trans("Status")}
+
{trans("Priority")}
+
+
+
+
+
{trans("Title")}
+ {if ConfigHelper::checkConfig('rt.show_ticket_categories')} +
{trans("Categories")}
+ {else} +
 
+ {/if} +
+
+
+
+
{trans("Service type")}
+
{trans("Ticket type")}
+
+
+
{trans("Deadline")}
+
{trans("Owner")}
+
+
+
+
+ {foreach $nodeticketlist as $ticket} +
+
+
+
+
+ {$ticket.createtime|date_format:"Y-m-d H:i"} +
+
+ {$ticket.name} +
+
+
+
+ {$_RT_STATES[{$ticket.state}].label} +
+
+ {$_RT_PRIORITIES[$ticket.priority]} +
+
+
+
+
+ {$ticket.subject|escape} +
+ {if ConfigHelper::checkConfig('rt.show_ticket_categories')} +
+ {foreach $ticket.categories as $tc} + + {$tc.name} + + {/foreach} +
+ {else} +
 
+ {/if} +
+
+
+
+ {$_SERVICETYPES[$ticket.service]} +
+
+ {trans("{$_RT_TYPES[$ticket.type].label}")} +
+
+
+
+ {if $ticket.deadline} + {if $ticket.deadline_diff < 0 && $ticket.state != $smarty.const.RT_RESOLVED} +
+ {icon + name="expired" + label="Expired" + tip="{$ticket.deadline_days} {trans("days")} {$ticket.deadline_hours} {trans("hours")}" + } +
+ {else} + {$ticket.deadline_days} {trans("days")} {$ticket.deadline_hours} {trans("hours")} + {/if} + {else} + - + {/if} +
+
+ {if $ticket.ownername} + {$ticket.ownername|escape} + {else}- + {/if} +
+
+
+
+
+ {foreachelse} +
+ {trans("No tickets.")} +
+ {/foreach} + {/tab_table} + {/tab_contents} +{/tab_container} From 96b009ebb626c145958f60185128b6f33f803cb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaros=C5=82aw=20K=C5=82opotek=20-=20INTERDUO?= Date: Sun, 2 Feb 2025 10:13:17 +0100 Subject: [PATCH 2/2] fix button link after testing --- templates/default/node/nodetickets.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/default/node/nodetickets.html b/templates/default/node/nodetickets.html index a619b4ca1e..81c04c2674 100644 --- a/templates/default/node/nodetickets.html +++ b/templates/default/node/nodetickets.html @@ -10,7 +10,7 @@ {trans("Node tickets")} {/tab_header_cell} {tab_header_cell} - {button type="link" label="{if $alltickets}Hide resolved{else}Show resolved{/if}" icon="close" href="?m={$layout.module}&id={$customerinfo.id}{if !$alltickets}&alltickets=1{/if}"} + {button type="link" label="{if $alltickets}Hide resolved{else}Show resolved{/if}" icon="close" href="?m={$layout.module}&id={$nodeinfo.id}{if !$alltickets}&alltickets=1{/if}"} {/tab_header_cell} {/tab_header}