diff --git a/dns_editor.php b/dns_editor.php index f6665d51..9d2e41bb 100644 --- a/dns_editor.php +++ b/dns_editor.php @@ -104,7 +104,7 @@ if ($action == 'add_record' && !empty($_POST)) { try { $dns_list_data = include_once dirname(__FILE__) . '/lib/tablelisting/tablelisting.dns.php'; $collection = (new Collection(DomainZones::class, $userinfo, ['id' => $domain_id])) - ->withPagination($dns_list_data['dns_list']['columns'], $dns_list_data['dns_list']['default_sorting']); + ->withPagination($dns_list_data['dns_list']['columns'], $dns_list_data['dns_list']['default_sorting'], ['domain_id='.$domain_id]); } catch (Exception $e) { Response::dynamicError($e->getMessage()); } diff --git a/lib/Froxlor/UI/Collection.php b/lib/Froxlor/UI/Collection.php index 4a43ca09..3c9a9674 100644 --- a/lib/Froxlor/UI/Collection.php +++ b/lib/Froxlor/UI/Collection.php @@ -110,7 +110,7 @@ class Collection return $this; } - public function withPagination(array $columns, array $default_sorting = []): Collection + public function withPagination(array $columns, array $default_sorting = [], array $pagination_additional_params = []): Collection { // Get only searchable columns $sortableColumns = []; @@ -121,7 +121,7 @@ class Collection } // Prepare pagination - $this->pagination = new Pagination($sortableColumns, $this->count(), (int)Settings::Get('panel.paging'), $default_sorting); + $this->pagination = new Pagination($sortableColumns, $this->count(), (int)Settings::Get('panel.paging'), $default_sorting, $pagination_additional_params); $this->params = array_merge($this->params, $this->pagination->getApiCommandParams()); return $this; diff --git a/lib/Froxlor/UI/Pagination.php b/lib/Froxlor/UI/Pagination.php index 62e0677e..05d944f9 100644 --- a/lib/Froxlor/UI/Pagination.php +++ b/lib/Froxlor/UI/Pagination.php @@ -48,6 +48,8 @@ class Pagination private int $perPage; + private string $paginationAdditional = ""; + /** * Create new pagination object to search/filter, limit and sort Api-listing() calls * @@ -55,9 +57,15 @@ class Pagination * @param int $total_entries * @param int $perPage * @param array $default_sorting array of key=sortfield,value=sortorder for default sorting + * @param array $pagination_additional_params */ - public function __construct(array $fields = [], int $total_entries = 0, int $perPage = 20, array $default_sorting = []) - { + public function __construct( + array $fields = [], + int $total_entries = 0, + int $perPage = 20, + array $default_sorting = [], + array $pagination_additional_params = [] + ) { $this->fields = $fields; $this->entries = $total_entries; $this->perPage = $perPage; @@ -72,7 +80,8 @@ class Pagination $orderfields = array_keys($fields); $this->searchfield = $orderfields[0]; } - if (isset($_REQUEST['searchtext']) && (preg_match('/[-_@\p{L}\p{N}*.]+$/u', $_REQUEST['searchtext']) || $_REQUEST['searchtext'] === '')) { + if (isset($_REQUEST['searchtext']) && (preg_match('/[-_@\p{L}\p{N}*.]+$/u', + $_REQUEST['searchtext']) || $_REQUEST['searchtext'] === '')) { $this->searchtext = trim($_REQUEST['searchtext']); } if (isset($_REQUEST['searchfield']) && isset($fields[$_REQUEST['searchfield']])) { @@ -114,6 +123,13 @@ class Pagination $this->pageno = 1; } $this->addOffset(($this->pageno - 1) * Settings::Get('panel.paging')); + + // pagination additional parameters for url + if (!empty($pagination_additional_params)) { + foreach ($pagination_additional_params as $pap) { + $this->paginationAdditional .= "&" . $pap; + } + } } /** @@ -210,7 +226,8 @@ class Pagination "last_page" => (Settings::Get('panel.paging') > 0) ? ceil($this->entries / $this->perPage) : -1, "from" => $this->data['sql_offset'] ?? null, "to" => min($this->data['sql_offset'] + $this->perPage, $this->entries), - 'sortfields' => array_keys($this->fields), + "sortfields" => array_keys($this->fields), + "link_additions" => $this->paginationAdditional, ] ]; } diff --git a/templates/Froxlor/table/pagination.html.twig b/templates/Froxlor/table/pagination.html.twig index 176d48b6..3ea68787 100644 --- a/templates/Froxlor/table/pagination.html.twig +++ b/templates/Froxlor/table/pagination.html.twig @@ -16,24 +16,24 @@ {% elseif pagination.current_page > 1 %}