Refactor homepage data fetching to a new service

[MAILPOET-4827]
This commit is contained in:
Rostislav Wolny
2023-01-05 16:19:49 +01:00
committed by Aschepikov
parent f31086f790
commit 5fe02fcc3e
3 changed files with 67 additions and 39 deletions

View File

@@ -3,11 +3,8 @@
namespace MailPoet\AdminPages\Pages;
use MailPoet\AdminPages\PageRenderer;
use MailPoet\Form\FormsRepository;
use MailPoet\Services\Bridge;
use MailPoet\Homepage\HomepageDataController;
use MailPoet\Settings\SettingsController;
use MailPoet\Subscribers\SubscribersRepository;
use MailPoet\WooCommerce\Helper as WooCommerceHelper;
class Homepage {
/** @var PageRenderer */
@@ -16,54 +13,24 @@ class Homepage {
/** @var SettingsController */
private $settingsController;
/** @var SubscribersRepository */
private $subscribersRepository;
/** @var FormsRepository */
private $formsRepository;
/** @var WooCommerceHelper */
private $wooCommerceHelper;
/** @var HomepageDataController */
private $homepageDataController;
public function __construct(
PageRenderer $pageRenderer,
SettingsController $settingsController,
SubscribersRepository $subscribersRepository,
FormsRepository $formsRepository,
WooCommerceHelper $wooCommerceHelper
HomepageDataController $homepageDataController
) {
$this->pageRenderer = $pageRenderer;
$this->settingsController = $settingsController;
$this->subscribersRepository = $subscribersRepository;
$this->formsRepository = $formsRepository;
$this->wooCommerceHelper = $wooCommerceHelper;
$this->homepageDataController = $homepageDataController;
}
public function render() {
$data = [
'mta_log' => $this->settingsController->get('mta_log'),
'homepage' => [
'task_list_dismissed' => (bool)$this->settingsController->get('homepage.task_list_dismissed', false),
'product_discovery_dismissed' => (bool)$this->settingsController->get('homepage.product_discovery_dismissed', false),
'task_list_status' => $this->getTaskListStatus(),
'woo_customers_count' => $this->wooCommerceHelper->getCustomersCount(),
'subscribers_count' => $this->subscribersRepository->getTotalSubscribers(),
],
'homepage' => $this->homepageDataController->getPageData(),
];
$this->pageRenderer->displayPage('homepage.html', $data);
}
/**
* @return array{senderSet:bool, mssConnected:bool, wooSubscribersImported:bool, subscribersAdded:bool}
*/
private function getTaskListStatus(): array {
$subscribersCount = $this->subscribersRepository->getTotalSubscribers();
$formsCount = $this->formsRepository->count();
return [
'senderSet' => (bool)$this->settingsController->get('sender.address', false),
'mssConnected' => Bridge::isMSSKeySpecified(),
'wooSubscribersImported' => (bool)$this->settingsController->get('woocommerce_import_screen_displayed', false),
'subscribersAdded' => $formsCount || ($subscribersCount > 10),
];
}
}

View File

@@ -302,6 +302,8 @@ class ContainerConfigurator implements IContainerConfigurator {
$container->autowire(\MailPoet\Form\Util\CustomFonts::class)->setPublic(true);
// Helpscout
$container->autowire(\MailPoet\Helpscout\Beacon::class)->setPublic(true);
// Homepage
$container->autowire(\MailPoet\Homepage\HomepageDataController::class)->setPublic(true);
// Listing
$container->autowire(\MailPoet\Listing\Handler::class)->setPublic(true);
$container->autowire(\MailPoet\Listing\PageLimit::class)->setPublic(true);

View File

@@ -0,0 +1,59 @@
<?php declare(strict_types = 1);
namespace MailPoet\Homepage;
use MailPoet\Form\FormsRepository;
use MailPoet\Services\Bridge;
use MailPoet\Settings\SettingsController;
use MailPoet\Subscribers\SubscribersRepository;
use MailPoet\WooCommerce\Helper as WooCommerceHelper;
class HomepageDataController {
/** @var SettingsController */
private $settingsController;
/** @var SubscribersRepository */
private $subscribersRepository;
/** @var FormsRepository */
private $formsRepository;
/** @var WooCommerceHelper */
private $wooCommerceHelper;
public function __construct(
SettingsController $settingsController,
SubscribersRepository $subscribersRepository,
FormsRepository $formsRepository,
WooCommerceHelper $wooCommerceHelper
) {
$this->settingsController = $settingsController;
$this->subscribersRepository = $subscribersRepository;
$this->formsRepository = $formsRepository;
$this->wooCommerceHelper = $wooCommerceHelper;
}
public function getPageData(): array {
$subscribersCount = $this->subscribersRepository->getTotalSubscribers();
$formsCount = $this->formsRepository->count();
return [
'task_list_dismissed' => (bool)$this->settingsController->get('homepage.task_list_dismissed', false),
'product_discovery_dismissed' => (bool)$this->settingsController->get('homepage.product_discovery_dismissed', false),
'task_list_status' => $this->getTaskListStatus($subscribersCount, $formsCount),
'woo_customers_count' => $this->wooCommerceHelper->getCustomersCount(),
'subscribers_count' => $subscribersCount,
];
}
/**
* @return array{senderSet:bool, mssConnected:bool, wooSubscribersImported:bool, subscribersAdded:bool}
*/
private function getTaskListStatus(int $subscribersCount, int $formsCount): array {
return [
'senderSet' => (bool)$this->settingsController->get('sender.address', false),
'mssConnected' => Bridge::isMSSKeySpecified(),
'wooSubscribersImported' => (bool)$this->settingsController->get('woocommerce_import_screen_displayed', false),
'subscribersAdded' => $formsCount || ($subscribersCount > 10),
];
}
}