PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.34.2
MailPoet – Newsletters, Email Marketing, and Automation v5.34.2
5.34.2 5.34.1 5.34.0 5.33.1 5.33.0 5.32.0 5.31.0 5.30.0 5.29.0 5.28.1 5.28.0 5.27.0 5.26.0 5.26.1 5.25.0 5.24.0 4.43.0 4.43.1 4.44.0 4.44.1 4.45.0 4.46.0 4.47.0 4.48.0 4.48.1 4.48.2 4.49.0 4.49.1 4.5.0 4.5.1 4.5.2 4.50.0 4.50.1 4.51.0 4.51.1 4.51.2 4.52.0 4.53.0 4.54.0 4.55.0 4.56.0 4.57.0 4.58.0 4.58.1 4.58.2 4.6.0 4.6.1 4.6.2 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 5.0.0 5.0.1 5.0.2 5.1.0 5.1.1 5.10.0 5.10.1 5.11.0 5.12.0 5.12.1 5.12.10 5.12.11 5.12.12 5.12.13 5.12.2 5.12.3 5.12.4 5.12.5 5.12.6 5.12.7 5.12.8 5.12.9 5.13.0 5.13.1 5.13.2 5.14.0 5.14.1 5.14.2 5.14.3 5.15.0 5.15.1 5.16.0 5.16.1 5.16.2 5.16.3 5.16.4 5.17.0 5.17.1 5.17.2 5.17.3 5.17.4 5.17.5 5.17.6 5.18.0 5.19.0 5.2.0 5.2.1 5.2.2 5.2.3 5.20.0 5.21.0 5.21.1 5.21.2 5.21.3 5.22.0 5.22.1 5.22.2 5.22.3 5.22.4 5.23.0 5.23.1 5.23.2 5.3.0 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7 5.4.0 5.4.1 5.4.2 5.5.0 5.5.1 5.5.2 5.6.0 5.6.1 5.6.2 5.6.3 5.6.4 5.7.0 5.7.1 5.8.0 5.8.1 5.9.0 3.0.0-beta.15 3.7.1 3.0.0-beta.16 3.7.2 3.0.0-beta.17 3.7.3 3.0.0-beta.18 3.7.4 3.0.0-beta.19 3.7.5 3.0.0-beta.2 3.7.6 3.0.0-beta.20 3.7.8 3.0.0-beta.21 3.70.0 3.0.0-beta.22 3.71.0 3.0.0-beta.23 3.71.1 3.0.0-beta.23.1 3.71.2 3.0.0-beta.23.2 3.71.3 3.0.0-beta.24 3.72.0 3.0.0-beta.25 3.73.0 3.0.0-beta.26 3.73.1 3.0.0-beta.27 3.73.2 3.0.0-beta.28 3.74.0 3.0.0-beta.29 3.74.1 3.0.0-beta.3 3.74.2 3.0.0-beta.30 3.74.3 3.0.0-beta.31 3.75.0 3.0.0-beta.32 3.75.1 3.0.0-beta.33 3.76.0 3.0.0-beta.33.1 3.77.0 3.0.0-beta.34.0.0 3.77.1 3.0.0-beta.36.0.0 3.78.0 3.0.0-beta.36.0.1 3.79.0 3.0.0-beta.36.2.0 3.8 3.0.0-beta.36.3.0 3.8.1 3.0.0-beta.36.3.1 3.8.2 3.0.0-beta.37.0.0 3.8.3 3.0.0-beta.4 3.8.4 3.0.0-beta.5 3.8.5 3.0.0-beta.6 3.8.6 3.0.0-beta.7 3.80.0 3.0.0-beta.7.1 3.81.0 3.0.0-beta.8 3.82.0 3.0.0-beta.9 3.83.0 3.0.0-rc.1.0.0 3.84.0 3.0.0-rc.1.0.1 3.84.1 3.0.0-rc.1.0.2 3.85.0 3.0.0-rc.1.0.3 3.85.1 3.0.0-rc.1.0.4 3.86.0 3.0.0-rc.2.0.0 3.87.0 3.0.0-rc.2.0.1 3.87.1 3.0.0-rc.2.0.2 3.87.2 3.0.0-rc.2.0.3 3.88.0 3.0.1 3.88.1 3.0.2 3.88.2 3.0.3 3.89.0 3.0.4 3.89.1 3.0.5 3.89.2 3.0.6 3.89.3 3.0.7 3.89.4 3.0.8 3.9.0 3.0.9 3.9.1 3.1.0 3.90.0 3.10 3.90.1 3.10.1 3.90.2 3.100.0 3.91.0 3.100.1 3.91.1 3.100.2 3.92.0 3.101.0 3.92.1 3.101.1 3.93.0 3.102.0 3.93.1 3.102.1 3.94.0 3.103.0 3.95.0 3.103.1 3.95.1 3.11.0 3.96.0 3.11.1 3.96.1 3.11.2 3.97.0 3.11.3 3.98.0 3.11.4 3.98.1 3.11.5 3.99.0 3.12.0 3.99.1 3.12.1 4.0.0 3.13.0 4.0.1 3.14.0 4.1.0 3.14.1 4.1.1 3.15.0 4.10.0 3.16.0 4.11.0 3.16.1 4.11.1 3.16.2 4.12.0 3.16.3 4.12.1 3.17.0 4.12.2 3.17.1 4.13.0 3.17.2 4.14.0 3.18.0 4.15.0 3.18.1 4.16.0 3.18.2 4.17.0 3.19.0 4.17.1 3.19.1 4.18.0 3.19.2 4.18.1 3.19.3 4.19.0 3.2.0 4.2.0 3.2.1 4.20.0 3.2.2 4.20.1 3.2.3 4.20.2 3.2.4 4.21.0 3.2.5 4.22.0 3.20.0 4.22.1 3.21.0 4.22.2 3.21.1 4.23.0 3.22.0 4.24.0 3.23.0 4.25.0 3.23.1 4.26.0 3.23.2 4.26.1 3.24.0 4.27.0 3.25.0 4.28.0 3.25.1 4.29.0 3.26.0 4.3.0 3.26.1 4.3.1 3.27.0 4.30.0 3.28.0 4.31.0 3.29.0 4.31.1 3.3.0 4.32.0 3.3.1 4.33.0 3.3.2 4.34.0 3.3.3 4.35.0 3.3.4 4.35.1 3.3.5 4.36.0 3.3.6 4.37.0 3.30.0 4.38.0 3.31.0 4.39.0 3.31.1 4.4.0 3.32.0 4.40.0 3.32.1 4.41.0 3.32.2 4.41.1 3.33.0 4.41.2 3.34.0 4.41.3 3.34.1 4.42.0 3.34.2 4.42.1 3.34.3 3.34.4 3.35.0 3.35.1 3.35.3 3.35.4 3.36.0 3.37.0 3.37.1 3.37.2 3.37.3 3.38.0 3.38.1 3.39.0 3.39.1 3.39.2 3.4.0 3.4.1 3.4.2 3.4.3 3.4.4 3.40.0 3.40.1 3.41.0 3.41.1 3.41.2 3.42.0 3.42.1 3.42.2 3.42.3 3.43.0 3.43.1 3.44.0 3.45.0 3.45.1 3.46.0 3.46.1 3.46.10 3.46.11 3.46.12 3.46.13 3.46.14 3.46.2 3.46.3 3.46.4 3.46.5 3.46.6 3.46.7 3.46.8 3.46.9 3.47.0 3.47.1 3.47.10 3.47.11 3.47.2 3.47.3 3.47.5 3.47.6 3.47.7 3.47.9 3.48.0 3.48.1 3.49.0 3.49.1 3.5.0 3.5.1 3.50.0 3.51.0 3.51.1 3.51.2 3.52.0 3.53.0 3.54.0 3.54.1 3.54.2 3.54.3 3.55.0 3.55.1 3.56.0 3.56.1 3.56.2 3.57.0 3.57.1 3.58.0 3.59.0 3.59.1 3.59.2 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.60.0 3.60.1 3.60.10 3.60.11 3.60.12 3.60.2 3.60.3 3.60.4 3.60.6 3.60.7 3.60.8 3.60.9 3.61.0 3.62.0 3.62.1 3.63.0 3.64.0 3.64.1 3.64.2 3.64.3 3.65.0 trunk 3.65.1 3.0.0 3.66.0 3.0.0-beta.1 3.67.0 3.0.0-beta.10 3.67.1 3.0.0-beta.11 3.68.0 3.0.0-beta.12 3.69.0 3.0.0-beta.13 3.69.1 3.0.0-beta.14 3.7.0
mailpoet / lib / Automation / Integrations / MailPoet / Analytics / Entities / Query.php
mailpoet / lib / Automation / Integrations / MailPoet / Analytics / Entities Last commit date
Query.php 1 month ago QueryWithCompare.php 1 month ago index.php 3 years ago
Query.php
165 lines
1 <?php declare(strict_types = 1);
2
3 namespace MailPoet\Automation\Integrations\MailPoet\Analytics\Entities;
4
5 if (!defined('ABSPATH')) exit;
6
7
8 use MailPoet\API\REST\Request;
9 use MailPoet\Automation\Engine\Exceptions\UnexpectedValueException;
10 use MailPoet\Validator\Builder;
11 use MailPoet\Validator\Schema;
12
13 class Query {
14
15 /** @var \DateTimeImmutable */
16 private $primaryAfter;
17
18 /** @var \DateTimeImmutable */
19 private $primaryBefore;
20
21 /** @var int */
22 private $limit;
23
24 /** @var string */
25 private $orderBy;
26
27 /** @var string */
28 private $orderDirection;
29
30 /** @var int */
31 private $page;
32
33 /** @var array */
34 private $filter;
35
36 /** @var string | null */
37 private $search;
38
39 /** @var int | null */
40 private $versionId;
41
42 public function __construct(
43 \DateTimeImmutable $primaryAfter,
44 \DateTimeImmutable $primaryBefore,
45 int $limit = 25,
46 string $orderBy = '',
47 string $orderDirection = 'asc',
48 int $page = 1,
49 array $filter = [],
50 ?string $search = null,
51 ?int $versionId = null
52 ) {
53 $this->primaryAfter = $primaryAfter;
54 $this->primaryBefore = $primaryBefore;
55 $this->limit = $limit;
56 $this->orderBy = $orderBy;
57 $this->orderDirection = $orderDirection;
58 $this->page = $page;
59 $this->filter = $filter;
60 $this->search = $search;
61 $this->versionId = $versionId;
62 }
63
64 public function getAfter(): \DateTimeImmutable {
65 return $this->primaryAfter;
66 }
67
68 public function getBefore(): \DateTimeImmutable {
69 return $this->primaryBefore;
70 }
71
72 public function getLimit(): int {
73 return $this->limit;
74 }
75
76 public function getOrderBy(): string {
77 return $this->orderBy;
78 }
79
80 public function getOrderDirection(): string {
81 return $this->orderDirection;
82 }
83
84 public function getPage(): int {
85 return $this->page;
86 }
87
88 public function getFilter(): array {
89 return $this->filter;
90 }
91
92 public function getSearch(): ?string {
93 return $this->search;
94 }
95
96 public function getVersionId(): ?int {
97 return $this->versionId;
98 }
99
100 /**
101 * @param Request $request
102 * @return Query
103 * @throws UnexpectedValueException
104 */
105 public static function fromRequest(Request $request) {
106 $query = $request->getParam('query');
107 if (!is_array($query)) {
108 throw new UnexpectedValueException('Invalid query parameters');
109 }
110 $primary = $query['primary'] ?? null;
111 if (!is_array($primary)) {
112 throw new UnexpectedValueException('Invalid query parameters');
113 }
114 $primaryAfter = $primary['after'] ?? null;
115 $primaryBefore = $primary['before'] ?? null;
116 if (
117 !is_string($primaryAfter) ||
118 !is_string($primaryBefore)
119 ) {
120 throw new UnexpectedValueException('Invalid query parameters');
121 }
122
123 $limit = is_int($query['limit'] ?? null) ? $query['limit'] : 25;
124 $orderBy = is_string($query['order_by'] ?? null) ? $query['order_by'] : '';
125 $order = $query['order'] ?? null;
126 $orderDirection = is_string($order) && strtolower($order) === 'asc' ? 'asc' : 'desc';
127 $page = is_int($query['page'] ?? null) ? $query['page'] : 1;
128 $filter = is_array($query['filter'] ?? null) ? $query['filter'] : [];
129 $search = isset($query['search']) && is_string($query['search']) ? $query['search'] : null;
130 $versionId = is_int($query['version_id'] ?? null) ? $query['version_id'] : null;
131
132 return new self(
133 new \DateTimeImmutable($primaryAfter),
134 new \DateTimeImmutable($primaryBefore),
135 $limit,
136 $orderBy,
137 $orderDirection,
138 $page,
139 $filter,
140 $search,
141 $versionId
142 );
143 }
144
145 public static function getRequestSchema(): Schema {
146 return Builder::object(
147 [
148 'primary' => Builder::object(
149 [
150 'after' => Builder::string()->formatDateTime()->required(),
151 'before' => Builder::string()->formatDateTime()->required(),
152 ]
153 ),
154 'limit' => Builder::integer()->minimum(1)->maximum(100),
155 'order_by' => Builder::string(),
156 'order' => Builder::string(),
157 'page' => Builder::integer()->minimum(1),
158 'filter' => Builder::object([]),
159 'search' => Builder::string()->nullable(),
160 'version_id' => Builder::integer()->minimum(1)->nullable(),
161 ]
162 );
163 }
164 }
165