Files
piratepoet/mailpoet/lib/AdminPages/Pages/WelcomeWizard.php
John Oleksowicz e960504c5f Replace useSetting with window reference
There seems to be an issue with useSetting. Simply having
`useSetting('welcome_wizard_current_step')` in App causes re-renders on
any state change. The effect was that you could only type one letter in
the input fields before the app would re-render and the field would lose
 focus.

I tried and failed to figure out what was causing all the re-renders, so
 for now I've settled on this workaround, since we only care about the
 initial state of the setting anyway. That being said, this seems like
 something we should investigate as it could be affecting other
 components and causing lots of unnecessary re-renders.

MAILPOET-5216
2024-03-04 12:22:13 +01:00

92 lines
3.7 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'),
'welcome_wizard_current_step' => $this->settings->get('welcome_wizard_current_step', ''),
];
$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;
}
}