diff --git a/lib/AdminPages/PageRenderer.php b/lib/AdminPages/PageRenderer.php new file mode 100644 index 0000000000..5f9386d29d --- /dev/null +++ b/lib/AdminPages/PageRenderer.php @@ -0,0 +1,39 @@ +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(); + } + } +} diff --git a/lib/Config/Menu.php b/lib/Config/Menu.php index 5dae4320ec..1407d7065d 100644 --- a/lib/Config/Menu.php +++ b/lib/Config/Menu.php @@ -3,6 +3,7 @@ namespace MailPoet\Config; use Carbon\Carbon; +use MailPoet\AdminPages\PageRenderer; use MailPoet\Cron\CronHelper; use MailPoet\Cron\CronTrigger; use MailPoet\Features\FeaturesController; @@ -30,7 +31,6 @@ use MailPoet\Util\License\Features\Subscribers as SubscribersFeature; use MailPoet\Util\License\License; use MailPoet\WooCommerce\Helper as WooCommerceHelper; use MailPoet\WP\DateTime; -use MailPoet\WP\Notice as WPNotice; use MailPoet\WP\Readme; use MailPoet\WP\Functions as WPFunctions; @@ -62,19 +62,21 @@ class Menu { /** @var ServicesChecker */ private $servicesChecker; + /** @var PageRenderer */ + private $page_renderer; + private $subscribers_over_limit; function __construct( - Renderer $renderer, AccessControl $access_control, SettingsController $settings, FeaturesController $featuresController, WPFunctions $wp, WooCommerceHelper $woocommerce_helper, ServicesChecker $servicesChecker, - UserFlagsController $user_flags + UserFlagsController $user_flags, + PageRenderer $page_renderer ) { - $this->renderer = $renderer; $this->access_control = $access_control; $this->wp = $wp; $this->settings = $settings; @@ -82,6 +84,7 @@ class Menu { $this->woocommerce_helper = $woocommerce_helper; $this->servicesChecker = $servicesChecker; $this->user_flags = $user_flags; + $this->page_renderer = $page_renderer; } function init() { @@ -421,7 +424,7 @@ class Menu { 'log_file_url' => $mp2_migrator->log_file_url, 'progress_url' => $mp2_migrator->progressbar->url, ]; - $this->displayPage('mp2migration.html', $data); + $this->page_renderer->displayPage('mp2migration.html', $data); } function welcomeWizard() { @@ -433,7 +436,7 @@ class Menu { 'sender' => $this->settings->get('sender'), 'admin_email' => get_option('admin_email'), ]; - $this->displayPage('welcome_wizard.html', $data); + $this->page_renderer->displayPage('welcome_wizard.html', $data); } function wooCommerceListImport() { @@ -441,7 +444,7 @@ class Menu { $data = [ '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() { @@ -452,7 +455,7 @@ class Menu { $data = [ '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() { @@ -496,7 +499,7 @@ class Menu { } } - $this->displayPage('update.html', $data); + $this->page_renderer->displayPage('update.html', $data); } function premium() { @@ -506,7 +509,7 @@ class Menu { '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()); - $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['queueStatus']['tasksStatusCounts'] = $tasks_state->getCountsPerStatus(); $system_status_data['queueStatus']['latestTasks'] = $tasks_state->getLatestTasks(Sending::TASK_TYPE); - $this->displayPage( + $this->page_renderer->displayPage( 'help.html', [ 'systemInfoData' => $system_info_data, @@ -577,7 +580,7 @@ class Menu { } function experimentalFeatures() { - $this->displayPage('experimental-features.html', []); + $this->page_renderer->displayPage('experimental-features.html', []); } private function _getFlags() { @@ -637,13 +640,13 @@ class Menu { $data['premium_plugin_active'] = License::getLicense(); $data['mss_active'] = Bridge::isMPSendingServiceEnabled(); - $this->displayPage('subscribers/subscribers.html', $data); + $this->page_renderer->displayPage('subscribers/subscribers.html', $data); } function segments() { $data = []; $data['items_per_page'] = $this->getLimitPerPage('segments'); - $this->displayPage('segments.html', $data); + $this->page_renderer->displayPage('segments.html', $data); } function forms() { @@ -656,7 +659,7 @@ class Menu { $data['is_new_user'] = $this->isNewUser(); - $this->displayPage('forms.html', $data); + $this->page_renderer->displayPage('forms.html', $data); } function newsletters() { @@ -764,7 +767,7 @@ class Menu { $this->wp->wpEnqueueScript('jquery-ui'); $this->wp->wpEnqueueScript('jquery-ui-datepicker'); - $this->displayPage('newsletters.html', $data); + $this->page_renderer->displayPage('newsletters.html', $data); } function newletterEditor() { @@ -782,7 +785,7 @@ class Menu { $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->displayPage('newsletter/editor.html', $data); + $this->page_renderer->displayPage('newsletter/editor.html', $data); } function import() { @@ -798,14 +801,14 @@ class Menu { $data['is_new_user'] = $this->isNewUser(); - $this->displayPage('subscribers/importExport/import.html', $data); + $this->page_renderer->displayPage('subscribers/importExport/import.html', $data); } function export() { $export = new ImportExportFactory(ImportExportFactory::EXPORT_ACTION); $data = $export->bootstrap(); $data['sub_menu'] = 'mailpoet-subscribers'; - $this->displayPage('subscribers/importExport/export.html', $data); + $this->page_renderer->displayPage('subscribers/importExport/export.html', $data); } function formEditor() { @@ -826,7 +829,7 @@ class Menu { 'sub_menu' => 'mailpoet-forms', ]; - $this->displayPage('form/editor.html', $data); + $this->page_renderer->displayPage('form/editor.html', $data); } function setPageTitle($title) { @@ -838,14 +841,14 @@ class Menu { } function displaySubscriberLimitExceededTemplate() { - $this->displayPage('limit.html', [ + $this->page_renderer->displayPage('limit.html', [ 'limit' => SubscribersFeature::SUBSCRIBERS_LIMIT, ]); exit; } function displayMailPoetAPIKeyInvalidTemplate() { - $this->displayPage('invalidkey.html', [ + $this->page_renderer->displayPage('invalidkey.html', [ 'subscriber_count' => Subscriber::getTotalSubscribers(), ]); exit; @@ -928,18 +931,6 @@ class Menu { : 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() { $installed_at = $this->settings->get('installed_at'); if (is_null($installed_at)) { diff --git a/lib/DI/ContainerConfigurator.php b/lib/DI/ContainerConfigurator.php index 3f043db8a7..54fe7ae4cb 100644 --- a/lib/DI/ContainerConfigurator.php +++ b/lib/DI/ContainerConfigurator.php @@ -28,6 +28,8 @@ class ContainerConfigurator implements IContainerConfigurator { ContainerWrapper::class, 'getInstance', ]); + // AdminPages + $container->autowire(\MailPoet\AdminPages\PageRenderer::class); // Analytics $container->autowire(\MailPoet\Analytics\Reporter::class)->setPublic(true); // API diff --git a/tests/integration/Config/MenuTest.php b/tests/integration/Config/MenuTest.php index c399249d56..36a57d93a7 100644 --- a/tests/integration/Config/MenuTest.php +++ b/tests/integration/Config/MenuTest.php @@ -3,6 +3,7 @@ namespace MailPoet\Test\Config; use Codeception\Util\Stub; +use MailPoet\AdminPages\PageRenderer; use MailPoet\Config\AccessControl; use MailPoet\Config\Menu; use MailPoet\Config\Renderer; @@ -44,7 +45,7 @@ class MenuTest extends \MailPoetTest { } function testItChecksMailpoetAPIKey() { - $renderer = Stub::make(new Renderer()); + $renderer = Stub::make(PageRenderer::class); $menu = $this->getMenu($renderer); $_REQUEST['page'] = 'mailpoet-newsletters'; @@ -66,7 +67,7 @@ class MenuTest extends \MailPoetTest { } function testItChecksPremiumKey() { - $renderer = Stub::make(new Renderer()); + $renderer = Stub::make(PageRenderer::class); $menu = $this->getMenu($renderer); $_REQUEST['page'] = 'mailpoet-newsletters'; @@ -87,16 +88,16 @@ class MenuTest extends \MailPoetTest { expect($menu->premium_key_valid)->false(); } - private function getMenu(Renderer $renderer) { + private function getMenu(PageRenderer $renderer) { return new Menu( - $renderer, new AccessControl(), new SettingsController(), new FeaturesController(), new Functions(), new WooCommerceHelper(new Functions()), new ServicesChecker, - new UserFlagsController + new UserFlagsController, + $renderer ); } }