fix pagination for entity-listings with extra parameters
Signed-off-by: Michael Kaufmann <d00p@froxlor.org>
This commit is contained in:
@@ -104,7 +104,7 @@ if ($action == 'add_record' && !empty($_POST)) {
|
|||||||
try {
|
try {
|
||||||
$dns_list_data = include_once dirname(__FILE__) . '/lib/tablelisting/tablelisting.dns.php';
|
$dns_list_data = include_once dirname(__FILE__) . '/lib/tablelisting/tablelisting.dns.php';
|
||||||
$collection = (new Collection(DomainZones::class, $userinfo, ['id' => $domain_id]))
|
$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) {
|
} catch (Exception $e) {
|
||||||
Response::dynamicError($e->getMessage());
|
Response::dynamicError($e->getMessage());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ class Collection
|
|||||||
return $this;
|
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
|
// Get only searchable columns
|
||||||
$sortableColumns = [];
|
$sortableColumns = [];
|
||||||
@@ -121,7 +121,7 @@ class Collection
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Prepare pagination
|
// 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());
|
$this->params = array_merge($this->params, $this->pagination->getApiCommandParams());
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
|
|||||||
@@ -48,6 +48,8 @@ class Pagination
|
|||||||
|
|
||||||
private int $perPage;
|
private int $perPage;
|
||||||
|
|
||||||
|
private string $paginationAdditional = "";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create new pagination object to search/filter, limit and sort Api-listing() calls
|
* 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 $total_entries
|
||||||
* @param int $perPage
|
* @param int $perPage
|
||||||
* @param array $default_sorting array of key=sortfield,value=sortorder for default sorting
|
* @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->fields = $fields;
|
||||||
$this->entries = $total_entries;
|
$this->entries = $total_entries;
|
||||||
$this->perPage = $perPage;
|
$this->perPage = $perPage;
|
||||||
@@ -72,7 +80,8 @@ class Pagination
|
|||||||
$orderfields = array_keys($fields);
|
$orderfields = array_keys($fields);
|
||||||
$this->searchfield = $orderfields[0];
|
$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']);
|
$this->searchtext = trim($_REQUEST['searchtext']);
|
||||||
}
|
}
|
||||||
if (isset($_REQUEST['searchfield']) && isset($fields[$_REQUEST['searchfield']])) {
|
if (isset($_REQUEST['searchfield']) && isset($fields[$_REQUEST['searchfield']])) {
|
||||||
@@ -114,6 +123,13 @@ class Pagination
|
|||||||
$this->pageno = 1;
|
$this->pageno = 1;
|
||||||
}
|
}
|
||||||
$this->addOffset(($this->pageno - 1) * Settings::Get('panel.paging'));
|
$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,
|
"last_page" => (Settings::Get('panel.paging') > 0) ? ceil($this->entries / $this->perPage) : -1,
|
||||||
"from" => $this->data['sql_offset'] ?? null,
|
"from" => $this->data['sql_offset'] ?? null,
|
||||||
"to" => min($this->data['sql_offset'] + $this->perPage, $this->entries),
|
"to" => min($this->data['sql_offset'] + $this->perPage, $this->entries),
|
||||||
'sortfields' => array_keys($this->fields),
|
"sortfields" => array_keys($this->fields),
|
||||||
|
"link_additions" => $this->paginationAdditional,
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,24 +16,24 @@
|
|||||||
</li>
|
</li>
|
||||||
{% elseif pagination.current_page > 1 %}
|
{% elseif pagination.current_page > 1 %}
|
||||||
<li class="page-item">
|
<li class="page-item">
|
||||||
<a class="page-link" href="?page={{ page }}&action={{ action }}&pageno=1" tabindex="-1">
|
<a class="page-link" href="?page={{ page }}&action={{ action }}{{ pagination.link_additions }}&pageno=1" tabindex="-1">
|
||||||
<i class="fa-solid fa-angles-left"></i>
|
<i class="fa-solid fa-angles-left"></i>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="page-item">
|
<li class="page-item">
|
||||||
<a class="page-link" href="?page={{ page }}&action={{ action }}&pageno={{ pagination.current_page - 1 }}" tabindex="-1">
|
<a class="page-link" href="?page={{ page }}&action={{ action }}{{ pagination.link_additions }}&pageno={{ pagination.current_page - 1 }}" tabindex="-1">
|
||||||
<i class="fa-solid fa-chevron-left"></i>
|
<i class="fa-solid fa-chevron-left"></i>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if pagination.current_page < pagination.last_page %}
|
{% if pagination.current_page < pagination.last_page %}
|
||||||
<li class="page-item">
|
<li class="page-item">
|
||||||
<a class="page-link" href="?page={{ page }}&action={{ action }}&pageno={{ pagination.current_page + 1 }}" tabindex="-1">
|
<a class="page-link" href="?page={{ page }}&action={{ action }}{{ pagination.link_additions }}&pageno={{ pagination.current_page + 1 }}" tabindex="-1">
|
||||||
<i class="fa-solid fa-chevron-right"></i>
|
<i class="fa-solid fa-chevron-right"></i>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="page-item">
|
<li class="page-item">
|
||||||
<a class="page-link" href="?page={{ page }}&action={{ action }}&pageno={{ pagination.last_page }}" tabindex="-1">
|
<a class="page-link" href="?page={{ page }}&action={{ action }}{{ pagination.link_additions }}&pageno={{ pagination.last_page }}" tabindex="-1">
|
||||||
<i class="fa-solid fa-angles-right"></i>
|
<i class="fa-solid fa-angles-right"></i>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|||||||
Reference in New Issue
Block a user