bridge = $bridge; $this->renderer = $renderer; $this->servicesChecker = $servicesChecker; $this->featuresController = $featuresController; $this->installation = $installation; $this->settings = $settings; $this->userFlags = $userFlags; $this->segmentRepository = $segmentRepository; $this->tagRepository = $tagRepository; $this->subscribersCountCacheRecalculation = $subscribersCountCacheRecalculation; $this->subscribersFeature = $subscribersFeature; $this->trackingConfig = $trackingConfig; $this->transientCache = $transientCache; $this->wp = $wp; $this->assetsController = $assetsController; $this->wooCommerceHelper = $wooCommerceHelper; $this->wooCommerceSubscriptionsHelper = $wooCommerceSubscriptionsHelper; } /** * Set common data for template and display template * @param string $template * @param array $data */ public function displayPage($template, array $data = []) { $installer = new Installer(Installer::PREMIUM_PLUGIN_SLUG); $premiumDownloadUrl = $this->subscribersFeature->hasValidPremiumKey() ? $installer->generatePluginDownloadUrl() : null; $lastAnnouncementDate = $this->settings->get('last_announcement_date'); $lastAnnouncementSeen = $this->userFlags->get('last_announcement_seen'); $wpSegment = $this->segmentRepository->getWPUsersSegment(); $wpSegmentState = ($wpSegment instanceof SegmentEntity) && $wpSegment->getDeletedAt() === null ? SegmentEntity::SEGMENT_ENABLED : SegmentEntity::SEGMENT_DISABLED; $installedAtDiff = (new \DateTime($this->settings->get('installed_at')))->diff(new \DateTime()); $subscriberCount = $this->subscribersFeature->getSubscribersCount(); $subscribersCacheCreatedAt = Carbon::now(); if ($this->subscribersFeature->isSubscribersCountEnoughForCache($subscriberCount)) { $subscribersCacheCreatedAt = $this->transientCache->getOldestCreatedAt(TransientCache::SUBSCRIBERS_STATISTICS_COUNT_KEY) ?: Carbon::now(); } // Automations are hidden when the subscription is part of a bundle and AutomateWoo is active $showAutomations = !($this->wp->isPluginActive('automatewoo/automatewoo.php') && $this->servicesChecker->isBundledSubscription()); $hideAutomations = !$this->wp->applyFilters('mailpoet_show_automations', $showAutomations); $defaults = [ 'current_page' => sanitize_text_field(wp_unslash($_GET['page'] ?? '')), 'site_name' => $this->wp->wpSpecialcharsDecode($this->wp->getOption('blogname'), ENT_QUOTES), 'main_page' => Menu::MAIN_PAGE_SLUG, 'site_url' => $this->wp->siteUrl(), 'site_address' => $this->wp->wpParseUrl($this->wp->homeUrl(), PHP_URL_HOST), 'feature_flags' => $this->featuresController->getAllFlags(), 'referral_id' => $this->settings->get(ReferralDetector::REFERRAL_SETTING_NAME), 'mailpoet_api_key_state' => $this->settings->get('mta.mailpoet_api_key_state'), 'mta_method' => $this->settings->get('mta.method'), 'premium_key_state' => $this->settings->get('premium.premium_key_state'), 'last_announcement_seen' => $lastAnnouncementSeen, 'feature_announcement_has_news' => (empty($lastAnnouncementSeen) || $lastAnnouncementSeen < $lastAnnouncementDate), 'wp_segment_state' => $wpSegmentState, 'tracking_config' => $this->trackingConfig->getConfig(), 'is_new_user' => $this->installation->isNewInstallation(), 'installed_days_ago' => (int)$installedAtDiff->format('%a'), 'deactivate_subscriber_after_inactive_days' => $this->settings->get('deactivate_subscriber_after_inactive_days'), 'send_transactional_emails' => (bool)$this->settings->get('send_transactional_emails'), 'transactional_emails_opt_in_notice_dismissed' => (bool)$this->userFlags->get('transactional_emails_opt_in_notice_dismissed'), 'track_wizard_loaded_via_woocommerce' => (bool)$this->settings->get(WelcomeWizard::TRACK_LOADDED_VIA_WOOCOMMERCE_SETTING_NAME), 'track_wizard_loaded_via_woocommerce_marketing_dashboard' => (bool)$this->settings->get(WelcomeWizard::TRACK_LOADDED_VIA_WOOCOMMERCE_MARKETING_DASHBOARD_SETTING_NAME), 'mail_function_enabled' => function_exists('mail') && is_callable('mail'), 'admin_plugins_url' => WPFunctions::get()->adminUrl('plugins.php'), // Premium & plan upgrade info 'current_wp_user_email' => $this->wp->wpGetCurrentUser()->user_email, 'link_premium' => $this->wp->getSiteUrl(null, '/wp-admin/admin.php?page=mailpoet-upgrade'), 'premium_plugin_installed' => Installer::isPluginInstalled(Installer::PREMIUM_PLUGIN_SLUG), 'premium_plugin_active' => $this->servicesChecker->isPremiumPluginActive(), 'premium_plugin_download_url' => $premiumDownloadUrl, 'premium_plugin_activation_url' => $installer->generatePluginActivationUrl(Installer::PREMIUM_PLUGIN_PATH), 'has_valid_api_key' => $this->subscribersFeature->hasValidApiKey(), 'has_valid_premium_key' => $this->subscribersFeature->hasValidPremiumKey(), 'has_premium_support' => $this->subscribersFeature->hasPremiumSupport(), 'has_mss_key_specified' => Bridge::isMSSKeySpecified(), 'mss_key_invalid' => $this->servicesChecker->isMailPoetAPIKeyValid() === false, 'mss_key_valid' => $this->subscribersFeature->hasValidMssKey(), 'mss_key_pending_approval' => $this->servicesChecker->isMailPoetAPIKeyPendingApproval(), 'mss_active' => $this->bridge->isMailpoetSendingServiceEnabled(), 'plugin_partial_key' => $this->servicesChecker->generatePartialApiKey(), 'mailpoet_hide_automations' => $hideAutomations, 'subscriber_count' => $subscriberCount, 'subscribers_counts_cache_created_at' => $subscribersCacheCreatedAt->format('Y-m-d\TH:i:sO'), 'subscribers_limit' => $this->subscribersFeature->getSubscribersLimit(), 'subscribers_limit_reached' => $this->subscribersFeature->check(), 'email_volume_limit' => $this->subscribersFeature->getEmailVolumeLimit(), 'email_volume_limit_reached' => $this->subscribersFeature->checkEmailVolumeLimitIsReached(), 'urls' => [ 'automationListing' => admin_url('admin.php?page=mailpoet-automation'), 'automationEditor' => admin_url('admin.php?page=mailpoet-automation-editor'), 'automationTemplates' => admin_url('admin.php?page=mailpoet-automation-templates'), 'automationAnalytics' => admin_url('admin.php?page=mailpoet-automation-analytics'), ], 'woocommerce_store_config' => $this->wooCommerceHelper->isWooCommerceActive() ? $this->getWoocommerceStoreConfig() : null, 'tags' => array_map(function (TagEntity $tag): array { return [ 'id' => $tag->getId(), 'name' => $tag->getName(), ]; }, $this->tagRepository->findAll()), 'display_docsbot_widget' => $this->displayDocsBotWidget(), 'is_woocommerce_subscriptions_active' => $this->wooCommerceSubscriptionsHelper->isWooCommerceSubscriptionsActive(), ]; if (!$defaults['premium_plugin_active']) { $defaults['free_premium_subscribers_limit'] = License::FREE_PREMIUM_SUBSCRIBERS_LIMIT; } try { if ( class_exists(Debugger::class) && class_exists(DIPanel::class) ) { DIPanel::init(); } if (is_admin() && $this->subscribersCountCacheRecalculation->shouldBeScheduled()) { $this->subscribersCountCacheRecalculation->schedule(); } // If the page didn't enqueue any assets, this will act as a fallback. // If some assets were enqueued, this won't change the queue ordering. $this->assetsController->setupAdminPagesDependencies(); $this->wp->doAction('mailpoet_styles_admin_after'); // We are in control of the template and the data can be considered safe at this point // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped, WordPressDotOrg.sniffs.OutputEscaping.UnescapedOutputParameter echo $this->renderer->render($template, $data + $defaults); } catch (\Exception $e) { $notice = new WPNotice(WPNotice::TYPE_ERROR, $e->getMessage()); $notice->displayWPNotice(); } } private function getWoocommerceStoreConfig() { return [ 'precision' => $this->wooCommerceHelper->wcGetPriceDecimals(), 'decimalSeparator' => $this->wooCommerceHelper->wcGetPriceDecimalSeperator(), 'thousandSeparator' => $this->wooCommerceHelper->wcGetPriceThousandSeparator(), 'code' => $this->wooCommerceHelper->getWoocommerceCurrency(), 'symbol' => html_entity_decode($this->wooCommerceHelper->getWoocommerceCurrencySymbol()), 'symbolPosition' => $this->wp->getOption('woocommerce_currency_pos'), 'priceFormat' => $this->wooCommerceHelper->getWoocommercePriceFormat(), ]; } public function displayDocsBotWidget(): bool { $display = $this->wp->applyFilters('mailpoet_display_docsbot_widget', $this->settings->get('3rd_party_libs.enabled') === '1'); return (bool)$display; } }