Нет описания

DynamicSegmentsResponseBuilder.php 3.3KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. <?php
  2. namespace MailPoet\API\JSON\ResponseBuilders;
  3. if (!defined('ABSPATH')) exit;
  4. use MailPoet\Entities\SegmentEntity;
  5. use MailPoet\Entities\SubscriberEntity;
  6. use MailPoet\Segments\SegmentDependencyValidator;
  7. use MailPoet\Segments\SegmentSubscribersRepository;
  8. use MailPoet\Subscribers\SubscribersCountsController;
  9. use MailPoet\WP\Functions;
  10. class DynamicSegmentsResponseBuilder {
  11. const DATE_FORMAT = 'Y-m-d H:i:s';
  12. /** @var SegmentsResponseBuilder */
  13. private $segmentsResponseBuilder;
  14. /** @var Functions */
  15. private $wp;
  16. /** @var SegmentSubscribersRepository */
  17. private $segmentSubscriberRepository;
  18. /** @var SegmentDependencyValidator */
  19. private $segmentDependencyValidator;
  20. /** @var SubscribersCountsController */
  21. private $subscribersCountsController;
  22. public function __construct(
  23. Functions $wp,
  24. SegmentSubscribersRepository $segmentSubscriberRepository,
  25. SegmentsResponseBuilder $segmentsResponseBuilder,
  26. SegmentDependencyValidator $segmentDependencyValidator,
  27. SubscribersCountsController $subscribersCountsController
  28. ) {
  29. $this->segmentsResponseBuilder = $segmentsResponseBuilder;
  30. $this->segmentSubscriberRepository = $segmentSubscriberRepository;
  31. $this->wp = $wp;
  32. $this->segmentDependencyValidator = $segmentDependencyValidator;
  33. $this->subscribersCountsController = $subscribersCountsController;
  34. }
  35. public function build(SegmentEntity $segmentEntity) {
  36. $data = $this->segmentsResponseBuilder->build($segmentEntity);
  37. $data = $this->addMissingPluginProperties($segmentEntity, $data);
  38. $dynamicFilters = $segmentEntity->getDynamicFilters();
  39. $filters = [];
  40. foreach ($dynamicFilters as $dynamicFilter) {
  41. $filter = $dynamicFilter->getFilterData()->getData();
  42. $filter['id'] = $dynamicFilter->getId();
  43. $filters[] = $filter;
  44. }
  45. $data['filters'] = $filters;
  46. return $data;
  47. }
  48. public function buildForListing(array $segments): array {
  49. $data = [];
  50. foreach ($segments as $segment) {
  51. $data[] = $this->buildListingItem($segment);
  52. }
  53. return $data;
  54. }
  55. private function addMissingPluginProperties(SegmentEntity $segment, array $data): array {
  56. $missingPlugins = $this->segmentDependencyValidator->getMissingPluginsBySegment($segment);
  57. if ($missingPlugins) {
  58. $missingPlugin = reset($missingPlugins);
  59. $data['is_plugin_missing'] = true;
  60. $data['missing_plugin_message'] = sprintf(
  61. __('Activate the %s plugin to see the number of subscribers and enable the editing of this segment.', 'mailpoet'),
  62. $missingPlugin
  63. );
  64. } else {
  65. $data['is_plugin_missing'] = false;
  66. $data['missing_plugin_message'] = null;
  67. }
  68. return $data;
  69. }
  70. private function buildListingItem(SegmentEntity $segment): array {
  71. $data = $this->segmentsResponseBuilder->build($segment);
  72. $data = $this->addMissingPluginProperties($segment, $data);
  73. $data['subscribers_url'] = $this->wp->adminUrl(
  74. 'admin.php?page=mailpoet-subscribers#/filter[segment=' . $segment->getId() . ']'
  75. );
  76. $segmentStatisticsCount = $this->subscribersCountsController->getSegmentStatisticsCount($segment);
  77. $data['count_all'] = $segmentStatisticsCount['all'];
  78. $data['count_subscribed'] = $segmentStatisticsCount[SubscriberEntity::STATUS_SUBSCRIBED];
  79. return $data;
  80. }
  81. }