Refactor Menu::getLimitPerPage to a service

[MAILPOET-2200]
This commit is contained in:
Rostislav Wolny
2019-07-15 14:13:26 +02:00
committed by M. Shull
parent 06fd592514
commit ed9f0aa294
5 changed files with 49 additions and 24 deletions

View File

@ -65,6 +65,9 @@ class Menu {
/** @var PageRenderer */
private $page_renderer;
/** @var Listing\PageLimit */
private $listing_page_limit;
private $subscribers_over_limit;
function __construct(
@ -75,7 +78,8 @@ class Menu {
WooCommerceHelper $woocommerce_helper,
ServicesChecker $servicesChecker,
UserFlagsController $user_flags,
PageRenderer $page_renderer
PageRenderer $page_renderer,
Listing\PageLimit $listing_page_limit
) {
$this->access_control = $access_control;
$this->wp = $wp;
@ -85,6 +89,7 @@ class Menu {
$this->servicesChecker = $servicesChecker;
$this->user_flags = $user_flags;
$this->page_renderer = $page_renderer;
$this->listing_page_limit = $listing_page_limit;
}
function init() {
@ -612,7 +617,7 @@ class Menu {
function subscribers() {
$data = [];
$data['items_per_page'] = $this->getLimitPerPage('subscribers');
$data['items_per_page'] = $this->listing_page_limit->getLimitPerPage('subscribers');
$segments = Segment::getSegmentsWithSubscriberCount($type = false);
$segments = $this->wp->applyFilters('mailpoet_segments_with_subscriber_count', $segments);
usort($segments, function ($a, $b) {
@ -645,7 +650,7 @@ class Menu {
function segments() {
$data = [];
$data['items_per_page'] = $this->getLimitPerPage('segments');
$data['items_per_page'] = $this->listing_page_limit->getLimitPerPage('segments');
$this->page_renderer->displayPage('segments.html', $data);
}
@ -654,7 +659,7 @@ class Menu {
$data = [];
$data['items_per_page'] = $this->getLimitPerPage('forms');
$data['items_per_page'] = $this->listing_page_limit->getLimitPerPage('forms');
$data['segments'] = Segment::findArray();
$data['is_new_user'] = $this->isNewUser();
@ -672,7 +677,7 @@ class Menu {
$data = [];
$data['items_per_page'] = $this->getLimitPerPage('newsletters');
$data['items_per_page'] = $this->listing_page_limit->getLimitPerPage('newsletters');
$segments = Segment::getSegmentsWithSubscriberCount($type = false);
$segments = $this->wp->applyFilters('mailpoet_segments_with_subscriber_count', $segments);
usort($segments, function ($a, $b) {
@ -918,19 +923,6 @@ class Menu {
$this->premium_key_valid = $checker->isPremiumKeyValid($show_notices);
}
function getLimitPerPage($model = null) {
if ($model === null) {
return Listing\Handler::DEFAULT_LIMIT_PER_PAGE;
}
$listing_per_page = $this->wp->getUserMeta(
$this->wp->getCurrentUserId(), 'mailpoet_' . $model . '_per_page', true
);
return (!empty($listing_per_page))
? (int)$listing_per_page
: Listing\Handler::DEFAULT_LIMIT_PER_PAGE;
}
function isNewUser() {
$installed_at = $this->settings->get('installed_at');
if (is_null($installed_at)) {

View File

@ -89,6 +89,7 @@ class ContainerConfigurator implements IContainerConfigurator {
$container->autowire(\MailPoet\Listing\BulkActionController::class)->setPublic(true);
$container->autowire(\MailPoet\Listing\BulkActionFactory::class)->setPublic(true);
$container->autowire(\MailPoet\Listing\Handler::class)->setPublic(true);
$container->autowire(\MailPoet\Listing\PageLimit::class);
// Notices
$container->autowire(\MailPoet\Util\Notices\PermanentNotices::class);
// Router

View File

@ -141,7 +141,7 @@ class Handler {
'offset' => (isset($data['offset']) ? (int)$data['offset'] : 0),
'limit' => (isset($data['limit'])
? (int)$data['limit']
: self::DEFAULT_LIMIT_PER_PAGE
: PageLimit::DEFAULT_LIMIT_PER_PAGE
),
// searching
'search' => (isset($data['search']) ? $data['search'] : null),

30
lib/Listing/PageLimit.php Normal file
View File

@ -0,0 +1,30 @@
<?php
namespace MailPoet\Listing;
if (!defined('ABSPATH')) exit;
use MailPoet\WP\Functions as WPFunctions;
class PageLimit {
const DEFAULT_LIMIT_PER_PAGE = 20;
/** @var WPFunctions */
private $wp;
function __construct(WPFunctions $wp) {
$this->wp = $wp;
}
function getLimitPerPage($model = null) {
if ($model === null) {
return self::DEFAULT_LIMIT_PER_PAGE;
}
$listing_per_page = $this->wp->getUserMeta(
$this->wp->getCurrentUserId(), 'mailpoet_' . $model . '_per_page', true
);
return (!empty($listing_per_page))
? (int)$listing_per_page
: self::DEFAULT_LIMIT_PER_PAGE;
}
}

View File

@ -6,13 +6,13 @@ use Codeception\Util\Stub;
use MailPoet\AdminPages\PageRenderer;
use MailPoet\Config\AccessControl;
use MailPoet\Config\Menu;
use MailPoet\Config\Renderer;
use MailPoet\Config\ServicesChecker;
use MailPoet\Features\FeaturesController;
use MailPoet\Listing\PageLimit;
use MailPoet\Settings\SettingsController;
use MailPoet\Settings\UserFlagsController;
use MailPoet\WooCommerce\Helper as WooCommerceHelper;
use MailPoet\WP\Functions;
use MailPoet\WP\Functions as WPFunctions;
class MenuTest extends \MailPoetTest {
function testItReturnsTrueIfCurrentPageBelongsToMailpoet() {
@ -89,15 +89,17 @@ class MenuTest extends \MailPoetTest {
}
private function getMenu(PageRenderer $renderer) {
$wp = new WPFunctions;
return new Menu(
new AccessControl(),
new SettingsController(),
new FeaturesController(),
new Functions(),
new WooCommerceHelper(new Functions()),
$wp,
new WooCommerceHelper($wp),
new ServicesChecker,
new UserFlagsController,
$renderer
$renderer,
new PageLimit($wp)
);
}
}