I found that we already have a logic for determining whether to show Woo segment. It also covers case when there are Woo customers in the DB but Woo plugin is not active. This logic is used in segments listing API. I reused it also for fetching lists on the newsletters page. [MAILPOET-5224]
170 lines
7.4 KiB
PHP
170 lines
7.4 KiB
PHP
<?php // phpcs:ignore SlevomatCodingStandard.TypeHints.DeclareStrictTypes.DeclareStrictTypesMissing
|
|
|
|
namespace MailPoet\AdminPages\Pages;
|
|
|
|
use MailPoet\AdminPages\PageRenderer;
|
|
use MailPoet\AutomaticEmails\AutomaticEmails;
|
|
use MailPoet\Config\Env;
|
|
use MailPoet\Config\Menu;
|
|
use MailPoet\Entities\NewsletterEntity;
|
|
use MailPoet\Entities\SegmentEntity;
|
|
use MailPoet\Listing\PageLimit;
|
|
use MailPoet\Newsletter\NewslettersRepository;
|
|
use MailPoet\NewsletterTemplates\NewsletterTemplatesRepository;
|
|
use MailPoet\Segments\SegmentsSimpleListRepository;
|
|
use MailPoet\Segments\WooCommerce;
|
|
use MailPoet\Services\AuthorizedSenderDomainController;
|
|
use MailPoet\Services\Bridge;
|
|
use MailPoet\Settings\SettingsController;
|
|
use MailPoet\Settings\UserFlagsController;
|
|
use MailPoet\Util\License\Features\CapabilitiesManager;
|
|
use MailPoet\WooCommerce\TransactionalEmails;
|
|
use MailPoet\WP\AutocompletePostListLoader as WPPostListLoader;
|
|
use MailPoet\WP\DateTime;
|
|
use MailPoet\WP\Functions as WPFunctions;
|
|
|
|
class Newsletters {
|
|
private PageRenderer $pageRenderer;
|
|
|
|
private PageLimit $listingPageLimit;
|
|
|
|
private WPFunctions $wp;
|
|
|
|
private SettingsController $settings;
|
|
|
|
private NewsletterTemplatesRepository $newsletterTemplatesRepository;
|
|
|
|
private AutomaticEmails $automaticEmails;
|
|
|
|
private WPPostListLoader $wpPostListLoader;
|
|
|
|
private SegmentsSimpleListRepository $segmentsListRepository;
|
|
|
|
private NewslettersRepository $newslettersRepository;
|
|
|
|
private Bridge $bridge;
|
|
|
|
private AuthorizedSenderDomainController $senderDomainController;
|
|
|
|
private UserFlagsController $userFlagsController;
|
|
|
|
private WooCommerce $wooCommerceSegment;
|
|
|
|
private CapabilitiesManager $capabilitiesManager;
|
|
|
|
public function __construct(
|
|
PageRenderer $pageRenderer,
|
|
PageLimit $listingPageLimit,
|
|
WPFunctions $wp,
|
|
SettingsController $settings,
|
|
NewsletterTemplatesRepository $newsletterTemplatesRepository,
|
|
WPPostListLoader $wpPostListLoader,
|
|
AutomaticEmails $automaticEmails,
|
|
SegmentsSimpleListRepository $segmentsListRepository,
|
|
NewslettersRepository $newslettersRepository,
|
|
Bridge $bridge,
|
|
AuthorizedSenderDomainController $senderDomainController,
|
|
UserFlagsController $userFlagsController,
|
|
WooCommerce $wooCommerceSegment,
|
|
CapabilitiesManager $capabilitiesManager
|
|
) {
|
|
$this->pageRenderer = $pageRenderer;
|
|
$this->listingPageLimit = $listingPageLimit;
|
|
$this->wp = $wp;
|
|
$this->settings = $settings;
|
|
$this->newsletterTemplatesRepository = $newsletterTemplatesRepository;
|
|
$this->automaticEmails = $automaticEmails;
|
|
$this->wpPostListLoader = $wpPostListLoader;
|
|
$this->segmentsListRepository = $segmentsListRepository;
|
|
$this->newslettersRepository = $newslettersRepository;
|
|
$this->bridge = $bridge;
|
|
$this->senderDomainController = $senderDomainController;
|
|
$this->userFlagsController = $userFlagsController;
|
|
$this->wooCommerceSegment = $wooCommerceSegment;
|
|
$this->capabilitiesManager = $capabilitiesManager;
|
|
}
|
|
|
|
public function render() {
|
|
global $wp_roles; // phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
|
|
|
|
$data = [];
|
|
|
|
$data['items_per_page'] = $this->listingPageLimit->getLimitPerPage('newsletters');
|
|
$includedSegmentTypes = $this->wooCommerceSegment->shouldShowWooCommerceSegment() ? [] : SegmentEntity::NON_WOO_RELATED_TYPES;
|
|
$segments = $this->segmentsListRepository->getListWithSubscribedSubscribersCounts($includedSegmentTypes);
|
|
$data['segments'] = $segments;
|
|
$data['settings'] = $this->settings->getAll();
|
|
$data['current_wp_user'] = $this->wp->wpGetCurrentUser()->to_array();
|
|
$data['current_wp_user_firstname'] = $this->wp->wpGetCurrentUser()->user_firstname;
|
|
$data['roles'] = $wp_roles->get_names(); // phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
|
|
$data['roles']['mailpoet_all'] = __('In any WordPress role', 'mailpoet');
|
|
|
|
$dateTime = new DateTime();
|
|
$data['current_date'] = $dateTime->getCurrentDate(DateTime::DEFAULT_DATE_FORMAT);
|
|
$data['tomorrow_date'] = $dateTime->getCurrentDateTime()->modify("+1 day")
|
|
->format(DateTime::DEFAULT_DATE_FORMAT);
|
|
$data['current_time'] = $dateTime->getCurrentTime();
|
|
$data['current_date_time'] = $dateTime->getCurrentDateTime()->format(DateTime::DEFAULT_DATE_TIME_FORMAT);
|
|
$data['schedule_time_of_day'] = $dateTime->getTimeInterval(
|
|
'00:00:00',
|
|
'+15 minutes',
|
|
96
|
|
);
|
|
$data['mailpoet_emails_page'] = $this->wp->adminUrl('admin.php?page=' . Menu::EMAILS_PAGE_SLUG);
|
|
$data['show_congratulate_after_first_newsletter'] = isset($data['settings']['show_congratulate_after_first_newsletter']) ? $data['settings']['show_congratulate_after_first_newsletter'] : 'false';
|
|
|
|
$data['is_mailpoet_update_available'] = array_key_exists(Env::$pluginPath, $this->wp->getPluginUpdates());
|
|
$data['newsletters_count'] = $this->newslettersRepository->countBy([]);
|
|
|
|
$data['automatic_emails'] = $this->automaticEmails->getAutomaticEmails();
|
|
$data['woocommerce_optin_on_checkout'] = $this->settings->get('woocommerce.optin_on_checkout.enabled', false);
|
|
|
|
$data['sent_newsletters_count'] = $this->newslettersRepository->countBy(['status' => NewsletterEntity::STATUS_SENT]);
|
|
$data['woocommerce_transactional_email_id'] = $this->settings->get(TransactionalEmails::SETTING_EMAIL_ID);
|
|
$detailedAnalyticsCapability = $this->capabilitiesManager->getCapability('detailedAnalytics');
|
|
$data['display_detailed_stats'] = isset($detailedAnalyticsCapability) && !$detailedAnalyticsCapability->isRestricted;
|
|
$data['newsletters_templates_recently_sent_count'] = $this->newsletterTemplatesRepository->getRecentlySentCount();
|
|
|
|
$data['product_categories'] = $this->wpPostListLoader->getWooCommerceCategories();
|
|
|
|
$data['products'] = $this->wpPostListLoader->getProducts();
|
|
|
|
$data['authorized_emails'] = [];
|
|
$data['verified_sender_domains'] = [];
|
|
$data['partially_verified_sender_domains'] = [];
|
|
$data['all_sender_domains'] = [];
|
|
$data['sender_restrictions'] = [];
|
|
|
|
if ($this->bridge->isMailpoetSendingServiceEnabled()) {
|
|
$data['authorized_emails'] = $this->bridge->getAuthorizedEmailAddresses();
|
|
$data['verified_sender_domains'] = $this->senderDomainController->getFullyVerifiedSenderDomains(true);
|
|
$data['partially_verified_sender_domains'] = $this->senderDomainController->getPartiallyVerifiedSenderDomains(true);
|
|
$data['all_sender_domains'] = $this->senderDomainController->getAllSenderDomains();
|
|
$data['sender_restrictions'] = [
|
|
'lowerLimit' => AuthorizedSenderDomainController::LOWER_LIMIT,
|
|
'isAuthorizedDomainRequiredForNewCampaigns' => $this->senderDomainController->isAuthorizedDomainRequiredForNewCampaigns(),
|
|
'campaignTypes' => NewsletterEntity::CAMPAIGN_TYPES,
|
|
];
|
|
}
|
|
|
|
$data['corrupt_newsletters'] = $this->getCorruptNewsletterSubjects();
|
|
|
|
$data['legacy_automatic_emails_count'] = $this->newslettersRepository->countBy([
|
|
'type' => [NewsletterEntity::TYPE_WELCOME, NewsletterEntity::TYPE_AUTOMATIC],
|
|
]);
|
|
|
|
$data['legacy_automatic_emails_notice_dismissed'] = (bool)$this->userFlagsController->get('legacy_automatic_emails_notice_dismissed');
|
|
|
|
$this->pageRenderer->displayPage('newsletters.html', $data);
|
|
}
|
|
|
|
private function getCorruptNewsletterSubjects(): array {
|
|
return array_map(function ($newsletter) {
|
|
return [
|
|
'id' => $newsletter->getId(),
|
|
'subject' => $newsletter->getSubject(),
|
|
];
|
|
}, $this->newslettersRepository->getCorruptNewsletters());
|
|
}
|
|
}
|