Refactor displayPage method to PageRenderer service

[MAILPOET-2200]
This commit is contained in:
Rostislav Wolny
2019-07-15 12:51:16 +02:00
committed by M. Shull
parent dfec5dd6c0
commit 06fd592514
4 changed files with 73 additions and 40 deletions

View File

@@ -0,0 +1,39 @@
<?php
namespace MailPoet\AdminPages;
use MailPoet\Config\Renderer;
use MailPoet\Features\FeaturesController;
use MailPoet\WP\Notice as WPNotice;
if (!defined('ABSPATH')) exit;
class PageRenderer {
/** @var Renderer */
private $renderer;
/** @var FeaturesController */
private $features_controller;
function __construct(Renderer $renderer, FeaturesController $features_controller) {
$this->renderer = $renderer;
$this->features_controller = $features_controller;
}
/**
* Set common data for template and display template
* @param string $template
* @param array $data
*/
function displayPage($template, array $data = []) {
$defaults = [
'feature_flags' => $this->features_controller->getAllFlags(),
];
try {
echo $this->renderer->render($template, $data + $defaults);
} catch (\Exception $e) {
$notice = new WPNotice(WPNotice::TYPE_ERROR, $e->getMessage());
$notice->displayWPNotice();
}
}
}

View File

@@ -3,6 +3,7 @@
namespace MailPoet\Config; namespace MailPoet\Config;
use Carbon\Carbon; use Carbon\Carbon;
use MailPoet\AdminPages\PageRenderer;
use MailPoet\Cron\CronHelper; use MailPoet\Cron\CronHelper;
use MailPoet\Cron\CronTrigger; use MailPoet\Cron\CronTrigger;
use MailPoet\Features\FeaturesController; use MailPoet\Features\FeaturesController;
@@ -30,7 +31,6 @@ use MailPoet\Util\License\Features\Subscribers as SubscribersFeature;
use MailPoet\Util\License\License; use MailPoet\Util\License\License;
use MailPoet\WooCommerce\Helper as WooCommerceHelper; use MailPoet\WooCommerce\Helper as WooCommerceHelper;
use MailPoet\WP\DateTime; use MailPoet\WP\DateTime;
use MailPoet\WP\Notice as WPNotice;
use MailPoet\WP\Readme; use MailPoet\WP\Readme;
use MailPoet\WP\Functions as WPFunctions; use MailPoet\WP\Functions as WPFunctions;
@@ -62,19 +62,21 @@ class Menu {
/** @var ServicesChecker */ /** @var ServicesChecker */
private $servicesChecker; private $servicesChecker;
/** @var PageRenderer */
private $page_renderer;
private $subscribers_over_limit; private $subscribers_over_limit;
function __construct( function __construct(
Renderer $renderer,
AccessControl $access_control, AccessControl $access_control,
SettingsController $settings, SettingsController $settings,
FeaturesController $featuresController, FeaturesController $featuresController,
WPFunctions $wp, WPFunctions $wp,
WooCommerceHelper $woocommerce_helper, WooCommerceHelper $woocommerce_helper,
ServicesChecker $servicesChecker, ServicesChecker $servicesChecker,
UserFlagsController $user_flags UserFlagsController $user_flags,
PageRenderer $page_renderer
) { ) {
$this->renderer = $renderer;
$this->access_control = $access_control; $this->access_control = $access_control;
$this->wp = $wp; $this->wp = $wp;
$this->settings = $settings; $this->settings = $settings;
@@ -82,6 +84,7 @@ class Menu {
$this->woocommerce_helper = $woocommerce_helper; $this->woocommerce_helper = $woocommerce_helper;
$this->servicesChecker = $servicesChecker; $this->servicesChecker = $servicesChecker;
$this->user_flags = $user_flags; $this->user_flags = $user_flags;
$this->page_renderer = $page_renderer;
} }
function init() { function init() {
@@ -421,7 +424,7 @@ class Menu {
'log_file_url' => $mp2_migrator->log_file_url, 'log_file_url' => $mp2_migrator->log_file_url,
'progress_url' => $mp2_migrator->progressbar->url, 'progress_url' => $mp2_migrator->progressbar->url,
]; ];
$this->displayPage('mp2migration.html', $data); $this->page_renderer->displayPage('mp2migration.html', $data);
} }
function welcomeWizard() { function welcomeWizard() {
@@ -433,7 +436,7 @@ class Menu {
'sender' => $this->settings->get('sender'), 'sender' => $this->settings->get('sender'),
'admin_email' => get_option('admin_email'), 'admin_email' => get_option('admin_email'),
]; ];
$this->displayPage('welcome_wizard.html', $data); $this->page_renderer->displayPage('welcome_wizard.html', $data);
} }
function wooCommerceListImport() { function wooCommerceListImport() {
@@ -441,7 +444,7 @@ class Menu {
$data = [ $data = [
'finish_wizard_url' => $this->wp->adminUrl('admin.php?page=' . self::MAIN_PAGE_SLUG), 'finish_wizard_url' => $this->wp->adminUrl('admin.php?page=' . self::MAIN_PAGE_SLUG),
]; ];
$this->displayPage('woocommerce_list_import.html', $data); $this->page_renderer->displayPage('woocommerce_list_import.html', $data);
} }
function revenueTrackingPermission() { function revenueTrackingPermission() {
@@ -452,7 +455,7 @@ class Menu {
$data = [ $data = [
'finish_wizard_url' => $this->wp->adminUrl('admin.php?page=' . self::MAIN_PAGE_SLUG), 'finish_wizard_url' => $this->wp->adminUrl('admin.php?page=' . self::MAIN_PAGE_SLUG),
]; ];
$this->displayPage('revenue_tracking_permission.html', $data); $this->page_renderer->displayPage('revenue_tracking_permission.html', $data);
} }
function update() { function update() {
@@ -496,7 +499,7 @@ class Menu {
} }
} }
$this->displayPage('update.html', $data); $this->page_renderer->displayPage('update.html', $data);
} }
function premium() { function premium() {
@@ -506,7 +509,7 @@ class Menu {
'display_discount' => time() <= strtotime('2018-11-30 23:59:59'), 'display_discount' => time() <= strtotime('2018-11-30 23:59:59'),
]; ];
$this->displayPage('premium.html', $data); $this->page_renderer->displayPage('premium.html', $data);
} }
@@ -544,7 +547,7 @@ class Menu {
$data = array_merge($data, Installer::getPremiumStatus()); $data = array_merge($data, Installer::getPremiumStatus());
$this->displayPage('settings.html', $data); $this->page_renderer->displayPage('settings.html', $data);
} }
@@ -567,7 +570,7 @@ class Menu {
$system_status_data['cronStatus']['accessible'] = CronHelper::isDaemonAccessible(); $system_status_data['cronStatus']['accessible'] = CronHelper::isDaemonAccessible();
$system_status_data['queueStatus']['tasksStatusCounts'] = $tasks_state->getCountsPerStatus(); $system_status_data['queueStatus']['tasksStatusCounts'] = $tasks_state->getCountsPerStatus();
$system_status_data['queueStatus']['latestTasks'] = $tasks_state->getLatestTasks(Sending::TASK_TYPE); $system_status_data['queueStatus']['latestTasks'] = $tasks_state->getLatestTasks(Sending::TASK_TYPE);
$this->displayPage( $this->page_renderer->displayPage(
'help.html', 'help.html',
[ [
'systemInfoData' => $system_info_data, 'systemInfoData' => $system_info_data,
@@ -577,7 +580,7 @@ class Menu {
} }
function experimentalFeatures() { function experimentalFeatures() {
$this->displayPage('experimental-features.html', []); $this->page_renderer->displayPage('experimental-features.html', []);
} }
private function _getFlags() { private function _getFlags() {
@@ -637,13 +640,13 @@ class Menu {
$data['premium_plugin_active'] = License::getLicense(); $data['premium_plugin_active'] = License::getLicense();
$data['mss_active'] = Bridge::isMPSendingServiceEnabled(); $data['mss_active'] = Bridge::isMPSendingServiceEnabled();
$this->displayPage('subscribers/subscribers.html', $data); $this->page_renderer->displayPage('subscribers/subscribers.html', $data);
} }
function segments() { function segments() {
$data = []; $data = [];
$data['items_per_page'] = $this->getLimitPerPage('segments'); $data['items_per_page'] = $this->getLimitPerPage('segments');
$this->displayPage('segments.html', $data); $this->page_renderer->displayPage('segments.html', $data);
} }
function forms() { function forms() {
@@ -656,7 +659,7 @@ class Menu {
$data['is_new_user'] = $this->isNewUser(); $data['is_new_user'] = $this->isNewUser();
$this->displayPage('forms.html', $data); $this->page_renderer->displayPage('forms.html', $data);
} }
function newsletters() { function newsletters() {
@@ -764,7 +767,7 @@ class Menu {
$this->wp->wpEnqueueScript('jquery-ui'); $this->wp->wpEnqueueScript('jquery-ui');
$this->wp->wpEnqueueScript('jquery-ui-datepicker'); $this->wp->wpEnqueueScript('jquery-ui-datepicker');
$this->displayPage('newsletters.html', $data); $this->page_renderer->displayPage('newsletters.html', $data);
} }
function newletterEditor() { function newletterEditor() {
@@ -782,7 +785,7 @@ class Menu {
$this->wp->wpEnqueueScript('tinymce-wplink', $this->wp->includesUrl('js/tinymce/plugins/wplink/plugin.js')); $this->wp->wpEnqueueScript('tinymce-wplink', $this->wp->includesUrl('js/tinymce/plugins/wplink/plugin.js'));
$this->wp->wpEnqueueStyle('editor', $this->wp->includesUrl('css/editor.css')); $this->wp->wpEnqueueStyle('editor', $this->wp->includesUrl('css/editor.css'));
$this->displayPage('newsletter/editor.html', $data); $this->page_renderer->displayPage('newsletter/editor.html', $data);
} }
function import() { function import() {
@@ -798,14 +801,14 @@ class Menu {
$data['is_new_user'] = $this->isNewUser(); $data['is_new_user'] = $this->isNewUser();
$this->displayPage('subscribers/importExport/import.html', $data); $this->page_renderer->displayPage('subscribers/importExport/import.html', $data);
} }
function export() { function export() {
$export = new ImportExportFactory(ImportExportFactory::EXPORT_ACTION); $export = new ImportExportFactory(ImportExportFactory::EXPORT_ACTION);
$data = $export->bootstrap(); $data = $export->bootstrap();
$data['sub_menu'] = 'mailpoet-subscribers'; $data['sub_menu'] = 'mailpoet-subscribers';
$this->displayPage('subscribers/importExport/export.html', $data); $this->page_renderer->displayPage('subscribers/importExport/export.html', $data);
} }
function formEditor() { function formEditor() {
@@ -826,7 +829,7 @@ class Menu {
'sub_menu' => 'mailpoet-forms', 'sub_menu' => 'mailpoet-forms',
]; ];
$this->displayPage('form/editor.html', $data); $this->page_renderer->displayPage('form/editor.html', $data);
} }
function setPageTitle($title) { function setPageTitle($title) {
@@ -838,14 +841,14 @@ class Menu {
} }
function displaySubscriberLimitExceededTemplate() { function displaySubscriberLimitExceededTemplate() {
$this->displayPage('limit.html', [ $this->page_renderer->displayPage('limit.html', [
'limit' => SubscribersFeature::SUBSCRIBERS_LIMIT, 'limit' => SubscribersFeature::SUBSCRIBERS_LIMIT,
]); ]);
exit; exit;
} }
function displayMailPoetAPIKeyInvalidTemplate() { function displayMailPoetAPIKeyInvalidTemplate() {
$this->displayPage('invalidkey.html', [ $this->page_renderer->displayPage('invalidkey.html', [
'subscriber_count' => Subscriber::getTotalSubscribers(), 'subscriber_count' => Subscriber::getTotalSubscribers(),
]); ]);
exit; exit;
@@ -928,18 +931,6 @@ class Menu {
: Listing\Handler::DEFAULT_LIMIT_PER_PAGE; : Listing\Handler::DEFAULT_LIMIT_PER_PAGE;
} }
function displayPage($template, $data) {
$defaults = [
'feature_flags' => $this->features_controller->getAllFlags(),
];
try {
echo $this->renderer->render($template, $data + $defaults);
} catch (\Exception $e) {
$notice = new WPNotice(WPNotice::TYPE_ERROR, $e->getMessage());
$notice->displayWPNotice();
}
}
function isNewUser() { function isNewUser() {
$installed_at = $this->settings->get('installed_at'); $installed_at = $this->settings->get('installed_at');
if (is_null($installed_at)) { if (is_null($installed_at)) {

View File

@@ -28,6 +28,8 @@ class ContainerConfigurator implements IContainerConfigurator {
ContainerWrapper::class, ContainerWrapper::class,
'getInstance', 'getInstance',
]); ]);
// AdminPages
$container->autowire(\MailPoet\AdminPages\PageRenderer::class);
// Analytics // Analytics
$container->autowire(\MailPoet\Analytics\Reporter::class)->setPublic(true); $container->autowire(\MailPoet\Analytics\Reporter::class)->setPublic(true);
// API // API

View File

@@ -3,6 +3,7 @@
namespace MailPoet\Test\Config; namespace MailPoet\Test\Config;
use Codeception\Util\Stub; use Codeception\Util\Stub;
use MailPoet\AdminPages\PageRenderer;
use MailPoet\Config\AccessControl; use MailPoet\Config\AccessControl;
use MailPoet\Config\Menu; use MailPoet\Config\Menu;
use MailPoet\Config\Renderer; use MailPoet\Config\Renderer;
@@ -44,7 +45,7 @@ class MenuTest extends \MailPoetTest {
} }
function testItChecksMailpoetAPIKey() { function testItChecksMailpoetAPIKey() {
$renderer = Stub::make(new Renderer()); $renderer = Stub::make(PageRenderer::class);
$menu = $this->getMenu($renderer); $menu = $this->getMenu($renderer);
$_REQUEST['page'] = 'mailpoet-newsletters'; $_REQUEST['page'] = 'mailpoet-newsletters';
@@ -66,7 +67,7 @@ class MenuTest extends \MailPoetTest {
} }
function testItChecksPremiumKey() { function testItChecksPremiumKey() {
$renderer = Stub::make(new Renderer()); $renderer = Stub::make(PageRenderer::class);
$menu = $this->getMenu($renderer); $menu = $this->getMenu($renderer);
$_REQUEST['page'] = 'mailpoet-newsletters'; $_REQUEST['page'] = 'mailpoet-newsletters';
@@ -87,16 +88,16 @@ class MenuTest extends \MailPoetTest {
expect($menu->premium_key_valid)->false(); expect($menu->premium_key_valid)->false();
} }
private function getMenu(Renderer $renderer) { private function getMenu(PageRenderer $renderer) {
return new Menu( return new Menu(
$renderer,
new AccessControl(), new AccessControl(),
new SettingsController(), new SettingsController(),
new FeaturesController(), new FeaturesController(),
new Functions(), new Functions(),
new WooCommerceHelper(new Functions()), new WooCommerceHelper(new Functions()),
new ServicesChecker, new ServicesChecker,
new UserFlagsController new UserFlagsController,
$renderer
); );
} }
} }