Ensure visits lists where the page is lower than 1, fall back to page 1 to avoid errors

This commit is contained in:
Alejandro Celaya 2021-08-02 20:22:07 +02:00
parent ca6c6a1b6e
commit e4d4686717
3 changed files with 26 additions and 3 deletions

View File

@ -4,6 +4,24 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com), and this project adheres to [Semantic Versioning](https://semver.org). The format is based on [Keep a Changelog](https://keepachangelog.com), and this project adheres to [Semantic Versioning](https://semver.org).
## [2.7.3] - 2021-08-02
### Added
* *Nothing*
### Changed
* *Nothing*
### Deprecated
* *Nothing*
### Removed
* *Nothing*
### Fixed
* [#1135](https://github.com/shlinkio/shlink/issues/1135) Fixed error when importing short URLs with no visits from another Shlink instance.
* [#1136](https://github.com/shlinkio/shlink/issues/1136) Fixed error when fetching tag/short-url/orphan visits for a page lower than 1.
## [2.7.2] - 2021-07-30 ## [2.7.2] - 2021-07-30
### Added ### Added
* *Nothing* * *Nothing*

View File

@ -15,11 +15,11 @@ final class ShortUrlsParams
public const DEFAULT_ITEMS_PER_PAGE = 10; public const DEFAULT_ITEMS_PER_PAGE = 10;
private int $page; private int $page;
private ?int $itemsPerPage = null;
private ?string $searchTerm; private ?string $searchTerm;
private array $tags; private array $tags;
private ShortUrlsOrdering $orderBy; private ShortUrlsOrdering $orderBy;
private ?DateRange $dateRange; private ?DateRange $dateRange;
private ?int $itemsPerPage = null;
private function __construct() private function __construct()
{ {

View File

@ -25,11 +25,16 @@ final class VisitsParams
bool $excludeBots = false bool $excludeBots = false
) { ) {
$this->dateRange = $dateRange ?? new DateRange(); $this->dateRange = $dateRange ?? new DateRange();
$this->page = $page; $this->page = $this->determinePage($page);
$this->itemsPerPage = $this->determineItemsPerPage($itemsPerPage); $this->itemsPerPage = $this->determineItemsPerPage($itemsPerPage);
$this->excludeBots = $excludeBots; $this->excludeBots = $excludeBots;
} }
private function determinePage(int $page): int
{
return $page > 0 ? $page : self::FIRST_PAGE;
}
private function determineItemsPerPage(?int $itemsPerPage): int private function determineItemsPerPage(?int $itemsPerPage): int
{ {
if ($itemsPerPage !== null && $itemsPerPage < 0) { if ($itemsPerPage !== null && $itemsPerPage < 0) {
@ -43,7 +48,7 @@ final class VisitsParams
{ {
return new self( return new self(
parseDateRangeFromQuery($query, 'startDate', 'endDate'), parseDateRangeFromQuery($query, 'startDate', 'endDate'),
(int) ($query['page'] ?? 1), (int) ($query['page'] ?? self::FIRST_PAGE),
isset($query['itemsPerPage']) ? (int) $query['itemsPerPage'] : null, isset($query['itemsPerPage']) ? (int) $query['itemsPerPage'] : null,
isset($query['excludeBots']), isset($query['excludeBots']),
); );