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 / WooCommerce / MultichannelMarketing / MPMarketingChannel.php
mailpoet / lib / WooCommerce / MultichannelMarketing Last commit date
MPMarketingChannel.php 2 years ago MPMarketingChannelController.php 2 years ago MPMarketingChannelDataController.php 2 years ago index.php 2 years ago
MPMarketingChannel.php
213 lines
1 <?php declare(strict_types = 1);
2
3 namespace MailPoet\WooCommerce\MultichannelMarketing;
4
5 if (!defined('ABSPATH')) exit;
6
7
8 use Automattic\WooCommerce\Admin\Marketing\MarketingCampaign;
9 use Automattic\WooCommerce\Admin\Marketing\MarketingCampaignType;
10 use Automattic\WooCommerce\Admin\Marketing\MarketingChannelInterface;
11 use Automattic\WooCommerce\Admin\Marketing\Price;
12 use MailPoet\Config\Menu;
13
14 class MPMarketingChannel implements MarketingChannelInterface {
15
16 /**
17 * @var MarketingCampaignType[]
18 */
19 private $campaignTypes;
20
21 /**
22 * @var MPMarketingChannelDataController
23 */
24 private $channelDataController;
25
26 const CAMPAIGN_TYPE_NEWSLETTERS = 'mailpoet-newsletters';
27 const CAMPAIGN_TYPE_POST_NOTIFICATIONS = 'mailpoet-post-notifications';
28 const CAMPAIGN_TYPE_AUTOMATIONS = 'mailpoet-automations';
29
30 public function __construct(
31 MPMarketingChannelDataController $channelDataController
32 ) {
33 $this->channelDataController = $channelDataController;
34 $this->campaignTypes = $this->generateCampaignTypes();
35 }
36
37 /**
38 * Returns the unique identifier string for the marketing channel extension, also known as the plugin slug.
39 *
40 * @return string
41 */
42 public function get_slug(): string { // phpcs:ignore PSR1.Methods.CamelCapsMethodName.NotCamelCaps
43 return 'mailpoet';
44 }
45
46 /**
47 * Returns the name of the marketing channel.
48 *
49 * @return string
50 */
51 public function get_name(): string { // phpcs:ignore PSR1.Methods.CamelCapsMethodName.NotCamelCaps
52 return __('MailPoet', 'mailpoet');
53 }
54
55 /**
56 * Returns the description of the marketing channel.
57 *
58 * @return string
59 */
60 public function get_description(): string { // phpcs:ignore PSR1.Methods.CamelCapsMethodName.NotCamelCaps
61 return __('Create and send newsletters, post notifications and welcome emails from your WordPress.', 'mailpoet');
62 }
63
64 /**
65 * Returns the path to the channel icon.
66 *
67 * @return string
68 */
69 public function get_icon_url(): string { // phpcs:ignore PSR1.Methods.CamelCapsMethodName.NotCamelCaps
70 return $this->channelDataController->getIconUrl();
71 }
72
73 /**
74 * Returns the setup status of the marketing channel.
75 *
76 * @return bool
77 */
78 public function is_setup_completed(): bool { // phpcs:ignore PSR1.Methods.CamelCapsMethodName.NotCamelCaps
79 return $this->channelDataController->isMPSetupComplete();
80 }
81
82 /**
83 * Returns the URL to the settings page, or the link to complete the setup/onboarding if the channel has not been set up yet.
84 *
85 * @return string
86 */
87 public function get_setup_url(): string { // phpcs:ignore PSR1.Methods.CamelCapsMethodName.NotCamelCaps
88 if ($this->channelDataController->isMPSetupComplete()) {
89 return admin_url('admin.php?page=' . Menu::MAIN_PAGE_SLUG);
90 }
91
92 return admin_url('admin.php?page=' . Menu::WELCOME_WIZARD_PAGE_SLUG . '&mailpoet_wizard_loaded_via_woocommerce_marketing_dashboard');
93 }
94
95 /**
96 * Returns the status of the marketing channel's product listings.
97 *
98 * @return string
99 */
100 public function get_product_listings_status(): string { // phpcs:ignore PSR1.Methods.CamelCapsMethodName.NotCamelCaps
101 if (!$this->channelDataController->isMailPoetSendingServiceEnabled()) {
102 return self::PRODUCT_LISTINGS_NOT_APPLICABLE;
103 }
104
105 // Check for error status. It's null by default when there isn't an error
106 $sendingStatus = $this->channelDataController->getMailPoetSendingStatus();
107
108 if ($sendingStatus) {
109 return self::PRODUCT_LISTINGS_SYNC_FAILED;
110 }
111
112 return self::PRODUCT_LISTINGS_SYNCED;
113 }
114
115 /**
116 * Returns the number of channel issues/errors (e.g. account-related errors, product synchronization issues, etc.).
117 *
118 * @return int The number of issues to resolve, or 0 if there are no issues with the channel.
119 */
120 public function get_errors_count(): int { // phpcs:ignore PSR1.Methods.CamelCapsMethodName.NotCamelCaps
121 return $this->channelDataController->getErrorCount();
122 }
123
124 /**
125 * Returns an array of marketing campaign types that the channel supports.
126 *
127 * @return MarketingCampaignType[] Array of marketing campaign type objects.
128 */
129 public function get_supported_campaign_types(): array { // phpcs:ignore PSR1.Methods.CamelCapsMethodName.NotCamelCaps
130 return $this->campaignTypes;
131 }
132
133 /**
134 * Returns an array of the channel's marketing campaigns.
135 *
136 * @return MarketingCampaign[]
137 */
138 public function get_campaigns(): array { // phpcs:ignore PSR1.Methods.CamelCapsMethodName.NotCamelCaps
139 $allCampaigns = $this->generateCampaigns();
140
141 if (empty($allCampaigns)) {
142 return [];
143 }
144
145 return $allCampaigns;
146 }
147
148 /**
149 * Generate the marketing channel campaign types
150 *
151 * @return MarketingCampaignType[]
152 */
153 protected function generateCampaignTypes(): array {
154 return [
155 self::CAMPAIGN_TYPE_NEWSLETTERS => new MarketingCampaignType(
156 'mailpoet-newsletters',
157 $this,
158 __('MailPoet Newsletters', 'mailpoet'),
159 __(
160 'Send a newsletter with images, buttons, dividers, and social bookmarks. Or, just send a basic text email.',
161 'mailpoet',
162 ),
163 admin_url('admin.php?page=' . Menu::EMAILS_PAGE_SLUG . '&loadedvia=woo_multichannel_dashboard#/new/standard'),
164 $this->get_icon_url()
165 ),
166 self::CAMPAIGN_TYPE_POST_NOTIFICATIONS => new MarketingCampaignType(
167 'mailpoet-post-notifications',
168 $this,
169 __('MailPoet Post Notifications', 'mailpoet'),
170 __(
171 'Let MailPoet email your subscribers with your latest content. You can send daily, weekly, monthly, or even immediately after publication.',
172 'mailpoet',
173 ),
174 admin_url('admin.php?page=' . Menu::EMAILS_PAGE_SLUG . '&loadedvia=woo_multichannel_dashboard#/new/notification'),
175 $this->get_icon_url()
176 ),
177 self::CAMPAIGN_TYPE_AUTOMATIONS => new MarketingCampaignType(
178 'mailpoet-automations',
179 $this,
180 __('MailPoet Automations', 'mailpoet'),
181 __('Set up automations to send abandoned cart reminders, welcome new subscribers, celebrate first-time buyers, and much more.', 'mailpoet'),
182 admin_url('admin.php?page=' . Menu::AUTOMATION_TEMPLATES_PAGE_SLUG . '&loadedvia=woo_multichannel_dashboard'),
183 $this->get_icon_url()
184 ),
185 ];
186 }
187
188 protected function generateCampaigns(): array {
189 return array_map(
190 function (array $data) {
191 $cost = null;
192
193 if (isset($data['price'])) {
194 $cost = new Price((string)$data['price']['amount'], $data['price']['currency']);
195 }
196
197 return new MarketingCampaign(
198 $data['id'],
199 $data['campaignType'],
200 $data['name'],
201 $data['url'],
202 $cost,
203 );
204 },
205 array_merge(
206 $this->channelDataController->getAutomations($this->campaignTypes[self::CAMPAIGN_TYPE_AUTOMATIONS]),
207 $this->channelDataController->getPostNotificationNewsletters($this->campaignTypes[self::CAMPAIGN_TYPE_POST_NOTIFICATIONS]),
208 $this->channelDataController->getStandardNewsletterList($this->campaignTypes[self::CAMPAIGN_TYPE_NEWSLETTERS])
209 )
210 );
211 }
212 }
213