PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.36.0
MailPoet – Newsletters, Email Marketing, and Automation v5.36.0
5.36.0 5.35.1 5.35.0 5.34.3 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 / Newsletter / RestApi / Endpoints / NewslettersListingEndpoint.php
mailpoet / lib / Newsletter / RestApi / Endpoints Last commit date
NewsletterDuplicateEndpoint.php 2 months ago NewsletterStatusEndpoint.php 2 months ago NewslettersBulkActionEndpoint.php 2 months ago NewslettersListingEndpoint.php 2 months ago SendingStatusListingEndpoint.php 1 month ago SendingStatusResendEndpoint.php 2 months ago index.php 2 months ago
NewslettersListingEndpoint.php
139 lines
1 <?php declare(strict_types = 1);
2
3 namespace MailPoet\Newsletter\RestApi\Endpoints;
4
5 if (!defined('ABSPATH')) exit;
6
7
8 use MailPoet\API\JSON\ResponseBuilders\NewslettersResponseBuilder;
9 use MailPoet\API\REST\AbstractListingEndpoint;
10 use MailPoet\API\REST\Request;
11 use MailPoet\API\REST\Response;
12 use MailPoet\Config\AccessControl;
13 use MailPoet\Cron\CronHelper;
14 use MailPoet\Entities\NewsletterEntity;
15 use MailPoet\Listing\Handler as ListingHandler;
16 use MailPoet\Listing\ListingDefinition;
17 use MailPoet\Listing\ListingRepository;
18 use MailPoet\Newsletter\Listing\NewsletterListingRepository;
19 use MailPoet\Settings\SettingsController;
20 use MailPoet\Validator\Builder;
21 use MailPoet\WP\Functions as WPFunctions;
22
23 /**
24 * `GET /mailpoet/v1/newsletters`
25 *
26 * Each email "tab" in the admin UI (Standard, Post Notifications, Notification
27 * History, Re-engagement) is the same underlying listing scoped by the `type`
28 * query parameter; the repository inspects the listing definition's `params`
29 * to apply the correct WHERE on `newsletters.type`. The response shape stays
30 * 1:1 with the legacy JSON endpoint at the top level (`items`, `meta`,
31 * `filters`, `groups`) and additionally carries the mailer / cron envelope
32 * fields the listing page used to read from the legacy meta.
33 */
34 class NewslettersListingEndpoint extends AbstractListingEndpoint {
35 public const SUPPORTED_TYPES = [
36 NewsletterEntity::TYPE_STANDARD,
37 NewsletterEntity::TYPE_NOTIFICATION,
38 NewsletterEntity::TYPE_NOTIFICATION_HISTORY,
39 NewsletterEntity::TYPE_RE_ENGAGEMENT,
40 NewsletterEntity::TYPE_WELCOME,
41 NewsletterEntity::TYPE_AUTOMATIC,
42 ];
43
44 /** @var NewsletterListingRepository */
45 private $newsletterListingRepository;
46
47 /** @var NewslettersResponseBuilder */
48 private $newslettersResponseBuilder;
49
50 /** @var SettingsController */
51 private $settings;
52
53 /** @var CronHelper */
54 private $cronHelper;
55
56 /** @var WPFunctions */
57 private $wp;
58
59 public function __construct(
60 ListingHandler $listingHandler,
61 NewsletterListingRepository $newsletterListingRepository,
62 NewslettersResponseBuilder $newslettersResponseBuilder,
63 SettingsController $settings,
64 CronHelper $cronHelper,
65 WPFunctions $wp
66 ) {
67 parent::__construct($listingHandler);
68 $this->newsletterListingRepository = $newsletterListingRepository;
69 $this->newslettersResponseBuilder = $newslettersResponseBuilder;
70 $this->settings = $settings;
71 $this->cronHelper = $cronHelper;
72 $this->wp = $wp;
73 }
74
75 public function checkPermissions(): bool {
76 return $this->wp->currentUserCan(AccessControl::PERMISSION_MANAGE_EMAILS);
77 }
78
79 public function handle(Request $request): Response {
80 /** @var Response $response */
81 $response = parent::handle($request);
82 $payload = $response->get_data();
83 if (is_array($payload) && isset($payload['data']) && is_array($payload['data'])) {
84 $payload['data']['mta_log'] = $this->settings->get('mta_log');
85 $payload['data']['mta_method'] = $this->settings->get('mta.method');
86 $payload['data']['cron_accessible'] = $this->cronHelper->isDaemonAccessible();
87 $payload['data']['current_time'] = $this->wp->currentTime('mysql');
88 $response->set_data($payload);
89 }
90 return $response;
91 }
92
93 public static function getRequestSchema(): array {
94 return array_merge(parent::getRequestSchema(), [
95 'type' => Builder::string(),
96 'parent_id' => Builder::integer(),
97 ]);
98 }
99
100 protected function getListingRepository(): ListingRepository {
101 return $this->newsletterListingRepository;
102 }
103
104 protected function buildItems(array $rows, ListingDefinition $definition): array {
105 $items = $this->newslettersResponseBuilder->buildForListing($rows);
106 $filteredItems = [];
107 foreach ($items as $item) {
108 $filtered = $this->wp->applyFilters('mailpoet_api_newsletters_listing_item', $item);
109 $filteredItems[] = is_array($filtered) ? $filtered : $item;
110 }
111 return $filteredItems;
112 }
113
114 protected function getDefaultSortBy(): string {
115 return 'updated_at';
116 }
117
118 protected function getDefaultSortOrder(): string {
119 return 'desc';
120 }
121
122 protected function getDefaultGroup(): ?string {
123 return 'all';
124 }
125
126 protected function getRequestParameters(Request $request): array {
127 $params = [];
128 $typeParam = $request->getParam('type');
129 if (is_string($typeParam) && in_array($typeParam, self::SUPPORTED_TYPES, true)) {
130 $params['type'] = $typeParam;
131 }
132 $parentIdParam = $request->getParam('parent_id');
133 if (is_numeric($parentIdParam)) {
134 $params['parentId'] = (int)$parentIdParam;
135 }
136 return $params;
137 }
138 }
139