Нема описа

Segments.php 5.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. <?php
  2. namespace MailPoet\AdminPages\Pages;
  3. if (!defined('ABSPATH')) exit;
  4. use MailPoet\AdminPages\PageRenderer;
  5. use MailPoet\API\JSON\ResponseBuilders\CustomFieldsResponseBuilder;
  6. use MailPoet\Cache\TransientCache;
  7. use MailPoet\Config\ServicesChecker;
  8. use MailPoet\CustomFields\CustomFieldsRepository;
  9. use MailPoet\Entities\DynamicSegmentFilterData;
  10. use MailPoet\Listing\PageLimit;
  11. use MailPoet\Models\Newsletter;
  12. use MailPoet\Segments\SegmentDependencyValidator;
  13. use MailPoet\Services\Bridge;
  14. use MailPoet\Settings\SettingsController;
  15. use MailPoet\Util\License\Features\Subscribers as SubscribersFeature;
  16. use MailPoet\WooCommerce\Helper as WooCommerceHelper;
  17. use MailPoet\WP\AutocompletePostListLoader as WPPostListLoader;
  18. use MailPoet\WP\Functions as WPFunctions;
  19. use MailPoetVendor\Carbon\Carbon;
  20. class Segments {
  21. /** @var PageRenderer */
  22. private $pageRenderer;
  23. /** @var PageLimit */
  24. private $listingPageLimit;
  25. /** @var SubscribersFeature */
  26. private $subscribersFeature;
  27. /** @var ServicesChecker */
  28. private $servicesChecker;
  29. /** @var WPFunctions */
  30. private $wp;
  31. /** @var WooCommerceHelper */
  32. private $woocommerceHelper;
  33. /** @var WPPostListLoader */
  34. private $wpPostListLoader;
  35. /** @var SettingsController */
  36. private $settings;
  37. /** @var SegmentDependencyValidator */
  38. private $segmentDependencyValidator;
  39. /** @var CustomFieldsRepository */
  40. private $customFieldsRepository;
  41. /** @var CustomFieldsResponseBuilder */
  42. private $customFieldsResponseBuilder;
  43. /** @var TransientCache */
  44. private $transientCache;
  45. public function __construct(
  46. PageRenderer $pageRenderer,
  47. PageLimit $listingPageLimit,
  48. ServicesChecker $servicesChecker,
  49. WPFunctions $wp,
  50. WooCommerceHelper $woocommerceHelper,
  51. WPPostListLoader $wpPostListLoader,
  52. SubscribersFeature $subscribersFeature,
  53. SettingsController $settings,
  54. CustomFieldsRepository $customFieldsRepository,
  55. CustomFieldsResponseBuilder $customFieldsResponseBuilder,
  56. SegmentDependencyValidator $segmentDependencyValidator,
  57. TransientCache $transientCache
  58. ) {
  59. $this->pageRenderer = $pageRenderer;
  60. $this->listingPageLimit = $listingPageLimit;
  61. $this->subscribersFeature = $subscribersFeature;
  62. $this->servicesChecker = $servicesChecker;
  63. $this->wp = $wp;
  64. $this->woocommerceHelper = $woocommerceHelper;
  65. $this->wpPostListLoader = $wpPostListLoader;
  66. $this->settings = $settings;
  67. $this->segmentDependencyValidator = $segmentDependencyValidator;
  68. $this->customFieldsRepository = $customFieldsRepository;
  69. $this->customFieldsResponseBuilder = $customFieldsResponseBuilder;
  70. $this->transientCache = $transientCache;
  71. }
  72. public function render() {
  73. $data = [];
  74. $data['items_per_page'] = $this->listingPageLimit->getLimitPerPage('segments');
  75. $data['mss_active'] = Bridge::isMPSendingServiceEnabled();
  76. $data['subscribers_limit'] = $this->subscribersFeature->getSubscribersLimit();
  77. $data['subscribers_limit_reached'] = $this->subscribersFeature->check();
  78. $data['has_valid_api_key'] = $this->subscribersFeature->hasValidApiKey();
  79. $data['subscriber_count'] = $this->subscribersFeature->getSubscribersCount();
  80. $data['has_premium_support'] = $this->subscribersFeature->hasPremiumSupport();
  81. $data['mss_key_invalid'] = ($this->servicesChecker->isMailPoetAPIKeyValid() === false);
  82. $customFields = $this->customFieldsRepository->findBy([], ['name' => 'asc']);
  83. $data['custom_fields'] = $this->customFieldsResponseBuilder->buildBatch($customFields);
  84. $wpRoles = $this->wp->getEditableRoles();
  85. $data['wordpress_editable_roles_list'] = array_map(function($roleId, $role) {
  86. return [
  87. 'role_id' => $roleId,
  88. 'role_name' => $role['name'],
  89. ];
  90. }, array_keys($wpRoles), $wpRoles);
  91. $data['newsletters_list'] = Newsletter::select(['id', 'subject', 'sent_at'])
  92. ->whereNull('deleted_at')
  93. ->where('type', Newsletter::TYPE_STANDARD)
  94. ->orderByExpr('ISNULL(sent_at) DESC, sent_at DESC')->findArray();
  95. $data['product_categories'] = $this->wpPostListLoader->getWooCommerceCategories();
  96. $data['products'] = $this->wpPostListLoader->getProducts();
  97. $data['subscription_products'] = $this->wpPostListLoader->getSubscriptionProducts();
  98. $data['is_woocommerce_active'] = $this->woocommerceHelper->isWooCommerceActive();
  99. $wcCountries = $this->woocommerceHelper->isWooCommerceActive() ? $this->woocommerceHelper->getAllowedCountries() : [];
  100. $data['woocommerce_countries'] = array_map(function ($code, $name) {
  101. return [
  102. 'name' => $name,
  103. 'code' => $code,
  104. ];
  105. }, array_keys($wcCountries), $wcCountries);
  106. $data['can_use_woocommerce_subscriptions'] = $this->segmentDependencyValidator->canUseDynamicFilterType(
  107. DynamicSegmentFilterData::TYPE_WOOCOMMERCE_SUBSCRIPTION
  108. );
  109. $wooCurrencySymbol = $this->woocommerceHelper->isWooCommerceActive() ? $this->woocommerceHelper->getWoocommerceCurrencySymbol() : '';
  110. $data['woocommerce_currency_symbol'] = html_entity_decode($wooCurrencySymbol);
  111. $data['tracking_enabled'] = $this->settings->get('tracking.enabled');
  112. $subscribersCacheCreatedAt = $this->transientCache->getOldestCreatedAt(TransientCache::SUBSCRIBERS_STATISTICS_COUNT_KEY);
  113. $subscribersCacheCreatedAt = $subscribersCacheCreatedAt ?: Carbon::now();
  114. $data['subscribers_counts_cache_created_at'] = $subscribersCacheCreatedAt->format('Y-m-d\TH:i:sO');
  115. $this->pageRenderer->displayPage('segments.html', $data);
  116. }
  117. }