Separate the segments and lists pages on the PHP side
Until now we were using the same render() method and Twig templates for the segments and lists pages. This commit separates them by creating two different render() methods, one for each page, and also separing the Twig templates. Only the translations remain shared as separating them would be more involved and probably not worth it. [MAILPOET-5392]
This commit is contained in:
committed by
Aschepikov
parent
f156629a93
commit
c72fce9aae
187
mailpoet/lib/AdminPages/Pages/DynamicSegments.php
Normal file
187
mailpoet/lib/AdminPages/Pages/DynamicSegments.php
Normal file
@@ -0,0 +1,187 @@
|
||||
<?php // phpcs:ignore SlevomatCodingStandard.TypeHints.DeclareStrictTypes.DeclareStrictTypesMissing
|
||||
|
||||
namespace MailPoet\AdminPages\Pages;
|
||||
|
||||
use MailPoet\AdminPages\PageRenderer;
|
||||
use MailPoet\API\JSON\ResponseBuilders\CustomFieldsResponseBuilder;
|
||||
use MailPoet\Automation\Engine\Data\Automation;
|
||||
use MailPoet\Automation\Engine\Storage\AutomationStorage;
|
||||
use MailPoet\CustomFields\CustomFieldsRepository;
|
||||
use MailPoet\Entities\DynamicSegmentFilterData;
|
||||
use MailPoet\Entities\FormEntity;
|
||||
use MailPoet\Entities\SegmentEntity;
|
||||
use MailPoet\Form\FormsRepository;
|
||||
use MailPoet\Listing\PageLimit;
|
||||
use MailPoet\Newsletter\NewslettersRepository;
|
||||
use MailPoet\Segments\SegmentDependencyValidator;
|
||||
use MailPoet\Segments\SegmentsRepository;
|
||||
use MailPoet\WooCommerce\Helper as WooCommerceHelper;
|
||||
use MailPoet\WP\AutocompletePostListLoader as WPPostListLoader;
|
||||
use MailPoet\WP\Functions as WPFunctions;
|
||||
use MailPoetVendor\Doctrine\Common\Collections\Criteria;
|
||||
|
||||
class DynamicSegments {
|
||||
/** @var PageRenderer */
|
||||
private $pageRenderer;
|
||||
|
||||
/** @var PageLimit */
|
||||
private $listingPageLimit;
|
||||
|
||||
/** @var WPFunctions */
|
||||
private $wp;
|
||||
|
||||
/** @var WooCommerceHelper */
|
||||
private $woocommerceHelper;
|
||||
|
||||
/** @var WPPostListLoader */
|
||||
private $wpPostListLoader;
|
||||
|
||||
/** @var SegmentDependencyValidator */
|
||||
private $segmentDependencyValidator;
|
||||
|
||||
/** @var CustomFieldsRepository */
|
||||
private $customFieldsRepository;
|
||||
|
||||
/** @var CustomFieldsResponseBuilder */
|
||||
private $customFieldsResponseBuilder;
|
||||
|
||||
/** @var SegmentsRepository */
|
||||
private $segmentsRepository;
|
||||
|
||||
/** @var NewslettersRepository */
|
||||
private $newslettersRepository;
|
||||
|
||||
/** @var FormsRepository */
|
||||
private $formsRepository;
|
||||
|
||||
/** @var AutomationStorage */
|
||||
private $automationStorage;
|
||||
|
||||
public function __construct(
|
||||
PageRenderer $pageRenderer,
|
||||
PageLimit $listingPageLimit,
|
||||
WPFunctions $wp,
|
||||
WooCommerceHelper $woocommerceHelper,
|
||||
WPPostListLoader $wpPostListLoader,
|
||||
CustomFieldsRepository $customFieldsRepository,
|
||||
CustomFieldsResponseBuilder $customFieldsResponseBuilder,
|
||||
SegmentDependencyValidator $segmentDependencyValidator,
|
||||
SegmentsRepository $segmentsRepository,
|
||||
NewslettersRepository $newslettersRepository,
|
||||
FormsRepository $formsRepository,
|
||||
AutomationStorage $automationStorage
|
||||
) {
|
||||
$this->pageRenderer = $pageRenderer;
|
||||
$this->listingPageLimit = $listingPageLimit;
|
||||
$this->wp = $wp;
|
||||
$this->woocommerceHelper = $woocommerceHelper;
|
||||
$this->wpPostListLoader = $wpPostListLoader;
|
||||
$this->segmentDependencyValidator = $segmentDependencyValidator;
|
||||
$this->customFieldsRepository = $customFieldsRepository;
|
||||
$this->customFieldsResponseBuilder = $customFieldsResponseBuilder;
|
||||
$this->segmentsRepository = $segmentsRepository;
|
||||
$this->newslettersRepository = $newslettersRepository;
|
||||
$this->formsRepository = $formsRepository;
|
||||
$this->automationStorage = $automationStorage;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
public function render() {
|
||||
$data = [];
|
||||
$data['items_per_page'] = $this->listingPageLimit->getLimitPerPage('segments');
|
||||
|
||||
$customFields = $this->customFieldsRepository->findBy([], ['name' => 'asc']);
|
||||
$data['custom_fields'] = $this->customFieldsResponseBuilder->buildBatch($customFields);
|
||||
|
||||
$wpRoles = $this->wp->getEditableRoles();
|
||||
$data['wordpress_editable_roles_list'] = array_map(function($roleId, $role) {
|
||||
return [
|
||||
'role_id' => $roleId,
|
||||
'role_name' => $role['name'],
|
||||
];
|
||||
}, array_keys($wpRoles), $wpRoles);
|
||||
|
||||
$data['newsletters_list'] = $this->getNewslettersList();
|
||||
|
||||
$data['static_segments_list'] = [];
|
||||
$criteria = new Criteria();
|
||||
$criteria->where(Criteria::expr()->isNull('deletedAt'));
|
||||
$criteria->andWhere(Criteria::expr()->neq('type', SegmentEntity::TYPE_DYNAMIC));
|
||||
$criteria->orderBy(['name' => 'ASC']);
|
||||
$segments = $this->segmentsRepository->matching($criteria);
|
||||
foreach ($segments as $segment) {
|
||||
$data['static_segments_list'][] = [
|
||||
'id' => $segment->getId(),
|
||||
'name' => $segment->getName(),
|
||||
'type' => $segment->getType(),
|
||||
'description' => $segment->getDescription(),
|
||||
];
|
||||
}
|
||||
|
||||
$data['product_categories'] = $this->wpPostListLoader->getWooCommerceCategories();
|
||||
|
||||
$data['products'] = $this->wpPostListLoader->getProducts();
|
||||
$data['membership_plans'] = $this->wpPostListLoader->getMembershipPlans();
|
||||
$data['subscription_products'] = $this->wpPostListLoader->getSubscriptionProducts();
|
||||
$wcCountries = $this->woocommerceHelper->isWooCommerceActive() ? $this->woocommerceHelper->getAllowedCountries() : [];
|
||||
$data['woocommerce_countries'] = array_map(function ($code, $name) {
|
||||
return [
|
||||
'name' => $name,
|
||||
'code' => $code,
|
||||
];
|
||||
}, array_keys($wcCountries), $wcCountries);
|
||||
$data['can_use_woocommerce_memberships'] = $this->segmentDependencyValidator->canUseDynamicFilterType(
|
||||
DynamicSegmentFilterData::TYPE_WOOCOMMERCE_MEMBERSHIP
|
||||
);
|
||||
$data['can_use_woocommerce_subscriptions'] = $this->segmentDependencyValidator->canUseDynamicFilterType(
|
||||
DynamicSegmentFilterData::TYPE_WOOCOMMERCE_SUBSCRIPTION
|
||||
);
|
||||
$wooCurrencySymbol = $this->woocommerceHelper->isWooCommerceActive() ? $this->woocommerceHelper->getWoocommerceCurrencySymbol() : '';
|
||||
$data['woocommerce_currency_symbol'] = html_entity_decode($wooCurrencySymbol);
|
||||
$data['signup_forms'] = array_map(function(FormEntity $form) {
|
||||
return [
|
||||
'id' => $form->getId(),
|
||||
'name' => $form->getName(),
|
||||
];
|
||||
}, $this->formsRepository->findAll());
|
||||
|
||||
$data['woocommerce_payment_methods'] = [];
|
||||
$data['woocommerce_shipping_methods'] = [];
|
||||
|
||||
if ($this->woocommerceHelper->isWooCommerceActive()) {
|
||||
$allGateways = $this->woocommerceHelper->getPaymentGateways()->payment_gateways();
|
||||
$paymentMethods = [];
|
||||
foreach ($allGateways as $gatewayId => $gateway) {
|
||||
$paymentMethods[] = [
|
||||
'id' => $gatewayId,
|
||||
'name' => $gateway->get_method_title(),
|
||||
];
|
||||
}
|
||||
$data['woocommerce_payment_methods'] = $paymentMethods;
|
||||
|
||||
$data['woocommerce_shipping_methods'] = $this->woocommerceHelper->getShippingMethodInstancesData();
|
||||
}
|
||||
$data['automations'] = array_map(function(Automation $automation) {
|
||||
return [
|
||||
'id' => (string)$automation->getId(),
|
||||
'name' => $automation->getName(),
|
||||
];
|
||||
}, $this->automationStorage->getAutomations());
|
||||
|
||||
$this->pageRenderer->displayPage('segments/dynamic.html', $data);
|
||||
}
|
||||
|
||||
private function getNewslettersList(): array {
|
||||
$result = [];
|
||||
foreach ($this->newslettersRepository->getStandardNewsletterList() as $newsletter) {
|
||||
$result[] = [
|
||||
'id' => (string)$newsletter->getId(),
|
||||
'subject' => $newsletter->getSubject(),
|
||||
'sent_at' => ($sentAt = $newsletter->getSentAt()) ? $sentAt->format('Y-m-d H:i:s') : null,
|
||||
];
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user