diff --git a/src/opnsense/mvc/app/controllers/OPNsense/Firewall/Api/AliasUtilController.php b/src/opnsense/mvc/app/controllers/OPNsense/Firewall/Api/AliasUtilController.php index bb9dccb11..17c5e6b3c 100644 --- a/src/opnsense/mvc/app/controllers/OPNsense/Firewall/Api/AliasUtilController.php +++ b/src/opnsense/mvc/app/controllers/OPNsense/Firewall/Api/AliasUtilController.php @@ -90,14 +90,47 @@ class AliasUtilController extends ApiControllerBase * list alias table * @param string $alias name to list * @return array alias contents + * @throws \Exception */ public function listAction($alias) { $this->sessionClose(); + + $itemsPerPage = intval($this->request->getPost('rowCount', 'int', 9999)); + $currentPage = intval($this->request->getPost('current', 'int', 1)); + $offset = ($currentPage - 1) * $itemsPerPage; + $backend = new Backend(); $entries = json_decode($backend->configdpRun("filter list table", array($alias, "json"))); - sort($entries); - return $entries; + + if ($this->request->hasPost('searchPhrase') && $this->request->getPost('searchPhrase') !== '') { + $searchPhrase = $this->request->getPost('searchPhrase'); + $entries = array_filter($entries, function($value) use ($searchPhrase) { + return strpos($value, $searchPhrase) !== false; + }); + } + + if ( + $this->request->hasPost('sort') && + is_array($this->request->getPost('sort')) && + array_key_exists('ip', $this->request->getPost('sort')) && + $this->request->getPost('sort')['ip'] === 'desc' + ) { + rsort($entries); + } else { + sort($entries); + } + + $formatted = array_map(function($value) { + return ['ip' => $value]; + }, array_slice($entries, $offset, $itemsPerPage)); + + return [ + 'total' => count($entries), + 'rowCount' => $itemsPerPage, + 'current' => $currentPage, + 'rows' => $formatted, + ]; } /** diff --git a/src/opnsense/mvc/app/views/OPNsense/Firewall/alias_util.volt b/src/opnsense/mvc/app/views/OPNsense/Firewall/alias_util.volt index e4f3667a8..771a4c8c3 100644 --- a/src/opnsense/mvc/app/views/OPNsense/Firewall/alias_util.volt +++ b/src/opnsense/mvc/app/views/OPNsense/Firewall/alias_util.volt @@ -2,44 +2,34 @@ 'use strict'; $( document ).ready(function() { // list alias tables on load, link related events when loaded - ajaxGet("/api/firewall/alias_util/aliases/", {}, function(data, status) { - if (status == "success") { + ajaxGet('/api/firewall/alias_util/aliases/', {}, function(data, status) { + if (status === "success") { $.each(data, function(key, value) { $('#tablename').append($("