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 / CustomFields / RestApi / Endpoints / CustomFieldsGetEndpoint.php
mailpoet / lib / CustomFields / RestApi / Endpoints Last commit date
CustomFieldsBulkActionEndpoint.php 2 months ago CustomFieldsDuplicateEndpoint.php 2 months ago CustomFieldsEndpoint.php 1 month ago CustomFieldsGetEndpoint.php 1 month ago CustomFieldsPostEndpoint.php 2 months ago CustomFieldsPutEndpoint.php 2 months ago index.php 2 months ago
CustomFieldsGetEndpoint.php
136 lines
1 <?php declare(strict_types = 1);
2
3 namespace MailPoet\CustomFields\RestApi\Endpoints;
4
5 if (!defined('ABSPATH')) exit;
6
7
8 use MailPoet\API\REST\Request;
9 use MailPoet\API\REST\Response;
10 use MailPoet\CustomFields\CustomFieldsRepository;
11 use MailPoet\CustomFields\RestApi\CustomFieldApiException;
12 use MailPoet\Entities\CustomFieldEntity;
13 use MailPoet\Validator\Builder;
14
15 class CustomFieldsGetEndpoint extends CustomFieldsEndpoint {
16 private const ALLOWED_TYPES = [
17 CustomFieldEntity::TYPE_TEXT,
18 CustomFieldEntity::TYPE_TEXTAREA,
19 CustomFieldEntity::TYPE_RADIO,
20 CustomFieldEntity::TYPE_CHECKBOX,
21 CustomFieldEntity::TYPE_SELECT,
22 CustomFieldEntity::TYPE_DATE,
23 ];
24
25 /** @var CustomFieldsRepository */
26 private $customFieldsRepository;
27
28 public function __construct(
29 CustomFieldsRepository $customFieldsRepository
30 ) {
31 $this->customFieldsRepository = $customFieldsRepository;
32 }
33
34 public function handle(Request $request): Response {
35 $search = is_string($request->getParam('search')) ? (string)$request->getParam('search') : '';
36 $orderby = is_string($request->getParam('orderby')) ? (string)$request->getParam('orderby') : 'name';
37 $order = is_string($request->getParam('order')) ? (string)$request->getParam('order') : 'asc';
38 $page = is_numeric($request->getParam('page')) ? max(1, (int)$request->getParam('page')) : 1;
39 $perPage = is_numeric($request->getParam('per_page')) ? max(1, min(100, (int)$request->getParam('per_page'))) : 25;
40 $group = is_string($request->getParam('group')) ? (string)$request->getParam('group') : 'all';
41 $filter = $this->parseFilter($request->getParam('filter'));
42
43 $result = $this->customFieldsRepository->listWithCounts([
44 'search' => $search,
45 'orderby' => $orderby,
46 'order' => $order,
47 'page' => $page,
48 'per_page' => $perPage,
49 'group' => $group,
50 'filter' => $filter,
51 ]);
52
53 $items = array_map([$this, 'buildItemFromRow'], $result['items']);
54 $pages = $result['total'] === 0 ? 0 : (int)ceil($result['total'] / max(1, $perPage));
55
56 return new Response([
57 'items' => $items,
58 'meta' => [
59 'count' => $result['total'],
60 'pages' => $pages,
61 ],
62 'groups' => $result['groups'],
63 ]);
64 }
65
66 /**
67 * @param mixed $rawFilter
68 * @return array{type?: string[]}
69 */
70 private function parseFilter($rawFilter): array {
71 if ($rawFilter === null || $rawFilter === '' || $rawFilter === []) {
72 return [];
73 }
74 if (!is_array($rawFilter)) {
75 throw new CustomFieldApiException(
76 __('Filters must be an object.', 'mailpoet'),
77 400,
78 'mailpoet_custom_fields_invalid_filter'
79 );
80 }
81
82 $allowed = ['type'];
83 foreach (array_keys($rawFilter) as $key) {
84 if (!in_array($key, $allowed, true)) {
85 throw new CustomFieldApiException(
86 __('Unsupported custom fields filter.', 'mailpoet'),
87 400,
88 'mailpoet_custom_fields_invalid_filter'
89 );
90 }
91 }
92
93 $filter = [];
94 if (array_key_exists('type', $rawFilter)) {
95 $filter['type'] = $this->parseTypeFilter($rawFilter['type']);
96 }
97
98 return $filter;
99 }
100
101 /**
102 * @param mixed $rawType
103 * @return string[]
104 */
105 private function parseTypeFilter($rawType): array {
106 if ($rawType === '' || $rawType === null) {
107 return [];
108 }
109 $values = is_array($rawType) ? $rawType : [$rawType];
110 $types = [];
111 foreach ($values as $value) {
112 if (!is_string($value) || !in_array($value, self::ALLOWED_TYPES, true)) {
113 throw new CustomFieldApiException(
114 __('Unsupported custom field type filter.', 'mailpoet'),
115 400,
116 'mailpoet_custom_fields_invalid_type'
117 );
118 }
119 $types[] = $value;
120 }
121 return array_values(array_unique($types));
122 }
123
124 public static function getRequestSchema(): array {
125 return [
126 'search' => Builder::string(),
127 'orderby' => Builder::string(),
128 'order' => Builder::string(),
129 'page' => Builder::integer(),
130 'per_page' => Builder::integer(),
131 'group' => Builder::string(),
132 'filter' => Builder::object(),
133 ];
134 }
135 }
136