Total Complexity | 9 |
Total Lines | 47 |
Duplicated Lines | 0 % |
Coverage | 95% |
Changes | 0 |
1 | <?php |
||
11 | final class VisitsParams |
||
12 | { |
||
13 | private const FIRST_PAGE = 1; |
||
14 | private const ALL_ITEMS = -1; |
||
15 | |||
16 | private ?DateRange $dateRange; |
||
17 | private int $page; |
||
18 | private int $itemsPerPage; |
||
19 | |||
20 | 16 | public function __construct(?DateRange $dateRange = null, int $page = self::FIRST_PAGE, ?int $itemsPerPage = null) |
|
21 | { |
||
22 | 16 | $this->dateRange = $dateRange ?? new DateRange(); |
|
23 | 16 | $this->page = $page; |
|
24 | 16 | $this->itemsPerPage = $this->determineItemsPerPage($itemsPerPage); |
|
25 | 16 | } |
|
26 | |||
27 | 16 | private function determineItemsPerPage(?int $itemsPerPage): int |
|
28 | { |
||
29 | 16 | if ($itemsPerPage !== null && $itemsPerPage < 0) { |
|
30 | return self::ALL_ITEMS; |
||
31 | } |
||
32 | |||
33 | 16 | return $itemsPerPage ?? self::ALL_ITEMS; |
|
34 | } |
||
35 | |||
36 | 8 | public static function fromRawData(array $query): self |
|
37 | { |
||
38 | 8 | return new self( |
|
39 | 8 | new DateRange(parseDateFromQuery($query, 'startDate'), parseDateFromQuery($query, 'endDate')), |
|
40 | 8 | (int) ($query['page'] ?? 1), |
|
41 | 8 | isset($query['itemsPerPage']) ? (int) $query['itemsPerPage'] : null, |
|
42 | ); |
||
43 | } |
||
44 | |||
45 | 7 | public function getDateRange(): DateRange |
|
48 | } |
||
49 | |||
50 | 3 | public function getPage(): int |
|
53 | } |
||
54 | |||
55 | 3 | public function getItemsPerPage(): int |
|
56 | { |
||
60 |