Files
piratepoet/mailpoet/lib/AdminPages/Pages/WelcomeWizard.php
Oluwaseun Olorunsola 2a714511c2 Add tracking for users arriving to the wizard from WooCommerce Marketing Dashboard
Users can click on the Finish setup button on the WooCommerce Multichannel Marketing Dashboard which would redirect them to the MailPoet welcome wizard.

 We want to track users that arrive to the MP wizard from
WooCommerce but at this point tracking is not enabled. So we store the
information in a setting, and send the tracking event to Mixpanel, if it
is enabled, after the user completes the wizard.

MAILPOET-5695
2023-11-27 10:25:09 +01:00

91 lines
3.6 KiB
PHP

<?php // phpcs:ignore SlevomatCodingStandard.TypeHints.DeclareStrictTypes.DeclareStrictTypesMissing
namespace MailPoet\AdminPages\Pages;
use MailPoet\AdminPages\PageRenderer;
use MailPoet\Config\Menu;
use MailPoet\Config\ServicesChecker;
use MailPoet\Settings\SettingsController;
use MailPoet\WooCommerce\Helper as WooCommerceHelper;
use MailPoet\WP\Functions as WPFunctions;
class WelcomeWizard {
const TRACK_LOADDED_VIA_WOOCOMMERCE_SETTING_NAME = 'send_event_that_wizard_was_loaded_via_woocommerce';
const TRACK_LOADDED_VIA_WOOCOMMERCE_MARKETING_DASHBOARD_SETTING_NAME = 'wizard_loaded_via_woocommerce_marketing_dashboard';
/** @var PageRenderer */
private $pageRenderer;
/** @var SettingsController */
private $settings;
/** @var WPFunctions */
private $wp;
/** @var WooCommerceHelper */
private $wooCommerceHelper;
/** @var ServicesChecker */
private $servicesChecker;
public function __construct(
PageRenderer $pageRenderer,
SettingsController $settings,
WooCommerceHelper $wooCommerceHelper,
WPFunctions $wp,
ServicesChecker $servicesChecker
) {
$this->pageRenderer = $pageRenderer;
$this->settings = $settings;
$this->wooCommerceHelper = $wooCommerceHelper;
$this->wp = $wp;
$this->servicesChecker = $servicesChecker;
}
public function render() {
if ((bool)(defined('DOING_AJAX') && DOING_AJAX)) return;
$loadedViaWooCommerce = $this->settings->get(WelcomeWizard::TRACK_LOADDED_VIA_WOOCOMMERCE_SETTING_NAME, false);
if (!$loadedViaWooCommerce && isset($_GET['mailpoet_wizard_loaded_via_woocommerce'])) {
// This setting is used to send an event to Mixpanel in another request as, before completing the wizard, Mixpanel is not enabled.
$this->settings->set(WelcomeWizard::TRACK_LOADDED_VIA_WOOCOMMERCE_SETTING_NAME, 1);
}
$loadedViaWooCommerceMarketingDashboard = $this->settings->get(WelcomeWizard::TRACK_LOADDED_VIA_WOOCOMMERCE_MARKETING_DASHBOARD_SETTING_NAME, false);
if (!$loadedViaWooCommerceMarketingDashboard && isset($_GET['mailpoet_wizard_loaded_via_woocommerce_marketing_dashboard'])) {
// This setting is used to send an event to Mixpanel in another request as, before completing the wizard, Mixpanel is not enabled.
$this->settings->set(WelcomeWizard::TRACK_LOADDED_VIA_WOOCOMMERCE_MARKETING_DASHBOARD_SETTING_NAME, 1);
}
$premiumKeyValid = $this->servicesChecker->isPremiumKeyValid(false);
// force MSS key check even if the method isn't active
$mpApiKeyValid = $this->servicesChecker->isMailPoetAPIKeyValid(false, true);
$data = [
'finish_wizard_url' => $this->wp->adminUrl('admin.php?page=' . Menu::MAIN_PAGE_SLUG),
'admin_email' => $this->wp->getOption('admin_email'),
'current_wp_user' => $this->wp->wpGetCurrentUser()->to_array(),
'show_customers_import' => $this->wooCommerceHelper->getCustomersCount() > 0,
'settings' => $this->getSettings(),
'premium_key_valid' => !empty($premiumKeyValid),
'mss_key_valid' => !empty($mpApiKeyValid),
'has_tracking_settings' => $this->settings->hasSavedValue('analytics') && $this->settings->hasSavedValue('3rd_party_libs'),
];
$this->pageRenderer->displayPage('welcome_wizard.html', $data);
}
private function getSettings(): array {
$settings = $this->settings->getAll();
$user = $this->wp->wpGetCurrentUser();
$settings['sender'] = [
'name' => $user->display_name, // phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
'address' => $user->user_email, // phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
];
return $settings;
}
}