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 / AdminPages / Pages / Newsletters.php
mailpoet / lib / AdminPages / Pages Last commit date
AbstractAutomationEmbed.php 5 months ago Automation.php 2 years ago AutomationAnalytics.php 2 months ago AutomationEditor.php 2 months ago AutomationFlowEmbed.php 6 months ago AutomationPreviewEmbed.php 2 months ago AutomationTemplates.php 2 years ago CustomFields.php 2 months ago DynamicSegments.php 2 months ago ExperimentalFeatures.php 3 years ago FormEditor.php 1 week ago Forms.php 2 months ago Help.php 2 months ago Homepage.php 2 years ago Landingpage.php 2 years ago Logs.php 1 month ago NewsletterEditor.php 2 months ago Newsletters.php 2 months ago Settings.php 5 months ago StaticSegments.php 2 months ago Subscribers.php 1 week ago SubscribersExport.php 3 years ago SubscribersImport.php 2 months ago Tags.php 2 months ago Upgrade.php 1 year ago WelcomeWizard.php 2 months ago WooCommerceSetup.php 2 months ago index.php 3 years ago
Newsletters.php
202 lines
1 <?php // phpcs:ignore SlevomatCodingStandard.TypeHints.DeclareStrictTypes.DeclareStrictTypesMissing
2
3 namespace MailPoet\AdminPages\Pages;
4
5 if (!defined('ABSPATH')) exit;
6
7
8 use Automattic\WooCommerce\EmailEditor\Email_Editor_Container;
9 use Automattic\WooCommerce\EmailEditor\Engine\Dependency_Check;
10 use MailPoet\AdminPages\AssetsController;
11 use MailPoet\AdminPages\PageRenderer;
12 use MailPoet\AutomaticEmails\AutomaticEmails;
13 use MailPoet\Config\Env;
14 use MailPoet\Config\Menu;
15 use MailPoet\EmailEditor\Integrations\MailPoet\DependencyNotice;
16 use MailPoet\Entities\NewsletterEntity;
17 use MailPoet\Entities\SegmentEntity;
18 use MailPoet\Listing\PageLimit;
19 use MailPoet\Newsletter\NewslettersRepository;
20 use MailPoet\NewsletterTemplates\NewsletterTemplatesRepository;
21 use MailPoet\Segments\SegmentsSimpleListRepository;
22 use MailPoet\Segments\WooCommerce;
23 use MailPoet\Services\AuthorizedEmailsController;
24 use MailPoet\Services\AuthorizedSenderDomainController;
25 use MailPoet\Services\Bridge;
26 use MailPoet\Settings\SettingsController;
27 use MailPoet\Settings\UserFlagsController;
28 use MailPoet\Util\License\Features\CapabilitiesManager;
29 use MailPoet\WooCommerce\TransactionalEmails;
30 use MailPoet\WP\AutocompletePostListLoader as WPPostListLoader;
31 use MailPoet\WP\DateTime;
32 use MailPoet\WP\Functions as WPFunctions;
33
34 class Newsletters {
35 private AssetsController $assetsController;
36
37 private PageRenderer $pageRenderer;
38
39 private PageLimit $listingPageLimit;
40
41 private WPFunctions $wp;
42
43 private SettingsController $settings;
44
45 private NewsletterTemplatesRepository $newsletterTemplatesRepository;
46
47 private AutomaticEmails $automaticEmails;
48
49 private WPPostListLoader $wpPostListLoader;
50
51 private SegmentsSimpleListRepository $segmentsListRepository;
52
53 private NewslettersRepository $newslettersRepository;
54
55 private Bridge $bridge;
56
57 private AuthorizedSenderDomainController $senderDomainController;
58
59 private AuthorizedEmailsController $authorizedEmailsController;
60
61 private UserFlagsController $userFlagsController;
62
63 private WooCommerce $wooCommerceSegment;
64
65 private Dependency_Check $dependencyCheck;
66
67 private DependencyNotice $dependencyNotice;
68
69 private CapabilitiesManager $capabilitiesManager;
70
71 public function __construct(
72 AssetsController $assetsController,
73 PageRenderer $pageRenderer,
74 PageLimit $listingPageLimit,
75 WPFunctions $wp,
76 SettingsController $settings,
77 NewsletterTemplatesRepository $newsletterTemplatesRepository,
78 WPPostListLoader $wpPostListLoader,
79 AutomaticEmails $automaticEmails,
80 SegmentsSimpleListRepository $segmentsListRepository,
81 NewslettersRepository $newslettersRepository,
82 Bridge $bridge,
83 AuthorizedSenderDomainController $senderDomainController,
84 AuthorizedEmailsController $authorizedEmailsController,
85 UserFlagsController $userFlagsController,
86 WooCommerce $wooCommerceSegment,
87 DependencyNotice $dependencyNotice,
88 CapabilitiesManager $capabilitiesManager
89 ) {
90 $this->assetsController = $assetsController;
91 $this->pageRenderer = $pageRenderer;
92 $this->listingPageLimit = $listingPageLimit;
93 $this->wp = $wp;
94 $this->settings = $settings;
95 $this->newsletterTemplatesRepository = $newsletterTemplatesRepository;
96 $this->automaticEmails = $automaticEmails;
97 $this->wpPostListLoader = $wpPostListLoader;
98 $this->segmentsListRepository = $segmentsListRepository;
99 $this->newslettersRepository = $newslettersRepository;
100 $this->bridge = $bridge;
101 $this->senderDomainController = $senderDomainController;
102 $this->authorizedEmailsController = $authorizedEmailsController;
103 $this->userFlagsController = $userFlagsController;
104 $this->wooCommerceSegment = $wooCommerceSegment;
105 $this->dependencyCheck = Email_Editor_Container::container()->get(Dependency_Check::class);
106 $this->dependencyNotice = $dependencyNotice;
107 $this->capabilitiesManager = $capabilitiesManager;
108 }
109
110 public function render() {
111 global $wp_roles; // phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
112
113 $this->assetsController->setupDataViewsDependencies();
114
115 $data = [];
116
117 $data['items_per_page'] = $this->listingPageLimit->getLimitPerPage('newsletters');
118 $includedSegmentTypes = $this->wooCommerceSegment->shouldShowWooCommerceSegment() ? [] : SegmentEntity::NON_WOO_RELATED_TYPES;
119 $segments = $this->segmentsListRepository->getListWithSubscribedSubscribersCounts($includedSegmentTypes);
120 $data['segments'] = $segments;
121 $data['settings'] = $this->settings->getAll();
122 $data['current_wp_user'] = $this->wp->wpGetCurrentUser()->to_array();
123 $data['current_wp_user_firstname'] = $this->wp->wpGetCurrentUser()->user_firstname;
124 $data['roles'] = $wp_roles->get_names(); // phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
125 $data['roles']['mailpoet_all'] = __('In any WordPress role', 'mailpoet');
126
127 $dateTime = new DateTime();
128 $data['current_date'] = $dateTime->getCurrentDate(DateTime::DEFAULT_DATE_FORMAT);
129 $data['tomorrow_date'] = $dateTime->getCurrentDateTime()->modify("+1 day")
130 ->format(DateTime::DEFAULT_DATE_FORMAT);
131 $data['current_time'] = $dateTime->getCurrentTime();
132 $data['current_date_time'] = $dateTime->getCurrentDateTime()->format(DateTime::DEFAULT_DATE_TIME_FORMAT);
133 $data['schedule_time_of_day'] = $dateTime->getTimeInterval(
134 '00:00:00',
135 '+15 minutes',
136 96
137 );
138 $data['mailpoet_emails_page'] = $this->wp->adminUrl('admin.php?page=' . Menu::EMAILS_PAGE_SLUG);
139 $data['show_congratulate_after_first_newsletter'] = isset($data['settings']['show_congratulate_after_first_newsletter']) ? $data['settings']['show_congratulate_after_first_newsletter'] : 'false';
140
141 $data['is_mailpoet_update_available'] = array_key_exists(Env::$pluginPath, $this->wp->getPluginUpdates());
142 $data['newsletters_count'] = $this->newslettersRepository->countBy([]);
143
144 $data['automatic_emails'] = $this->automaticEmails->getAutomaticEmails();
145 $data['woocommerce_optin_on_checkout'] = $this->settings->get('woocommerce.optin_on_checkout.enabled', false);
146
147 $data['sent_newsletters_count'] = $this->newslettersRepository->countBy(['status' => NewsletterEntity::STATUS_SENT]);
148 $data['woocommerce_transactional_email_id'] = $this->settings->get(TransactionalEmails::SETTING_EMAIL_ID);
149 $detailedAnalyticsCapability = $this->capabilitiesManager->getCapability('detailedAnalytics');
150 $data['display_detailed_stats'] = isset($detailedAnalyticsCapability) && !$detailedAnalyticsCapability->isRestricted;
151 $data['api'] = [
152 'root' => rtrim($this->wp->escUrlRaw($this->wp->restUrl()), '/'),
153 'nonce' => $this->wp->wpCreateNonce('wp_rest'),
154 ];
155 $data['newsletters_templates_recently_sent_count'] = $this->newsletterTemplatesRepository->getRecentlySentCount();
156
157 $data['product_categories'] = $this->wpPostListLoader->getWooCommerceCategories();
158
159 $data['products'] = $this->wpPostListLoader->getProducts();
160
161 $data['authorized_emails'] = [];
162 $data['verified_sender_domains'] = [];
163 $data['partially_verified_sender_domains'] = [];
164 $data['all_sender_domains'] = [];
165 $data['sender_restrictions'] = [];
166
167 if ($this->bridge->isMailpoetSendingServiceEnabled()) {
168 $data['authorized_emails'] = $this->authorizedEmailsController->getAuthorizedEmailAddresses();
169 $data['verified_sender_domains'] = $this->senderDomainController->getFullyVerifiedSenderDomains(true);
170 $data['partially_verified_sender_domains'] = $this->senderDomainController->getPartiallyVerifiedSenderDomains(true);
171 $data['all_sender_domains'] = $this->senderDomainController->getAllSenderDomains();
172 $data['sender_restrictions'] = [
173 'lowerLimit' => AuthorizedSenderDomainController::LOWER_LIMIT,
174 'isAuthorizedDomainRequiredForNewCampaigns' => $this->senderDomainController->isAuthorizedDomainRequiredForNewCampaigns(),
175 'campaignTypes' => NewsletterEntity::CAMPAIGN_TYPES,
176 'skipAuthorization' => $this->senderDomainController->shouldSkipAuthorization(),
177 ];
178 }
179
180 $data['corrupt_newsletters'] = $this->getCorruptNewsletterSubjects();
181
182 $data['legacy_automatic_emails_count'] = $this->newslettersRepository->countBy([
183 'type' => [NewsletterEntity::TYPE_WELCOME, NewsletterEntity::TYPE_AUTOMATIC],
184 ]);
185
186 $data['legacy_automatic_emails_notice_dismissed'] = (bool)$this->userFlagsController->get('legacy_automatic_emails_notice_dismissed');
187
188 $data['block_email_editor_enabled'] = $this->dependencyCheck->are_dependencies_met(); // phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
189 $this->dependencyNotice->displayMessageIfNeeded();
190 $this->pageRenderer->displayPage('newsletters.html', $data);
191 }
192
193 private function getCorruptNewsletterSubjects(): array {
194 return array_map(function ($newsletter) {
195 return [
196 'id' => $newsletter->getId(),
197 'subject' => $newsletter->getSubject(),
198 ];
199 }, $this->newslettersRepository->getCorruptNewsletters());
200 }
201 }
202