diff --git a/mailpoet/lib/API/JSON/ResponseBuilders/SubscribersResponseBuilder.php b/mailpoet/lib/API/JSON/ResponseBuilders/SubscribersResponseBuilder.php index 1843c0dba8..4df8e31cd6 100644 --- a/mailpoet/lib/API/JSON/ResponseBuilders/SubscribersResponseBuilder.php +++ b/mailpoet/lib/API/JSON/ResponseBuilders/SubscribersResponseBuilder.php @@ -92,6 +92,7 @@ class SubscribersResponseBuilder { 'count_confirmations' => $subscriberEntity->getConfirmationsCount(), 'unsubscribe_token' => $subscriberEntity->getUnsubscribeToken(), 'link_token' => $subscriberEntity->getLinkToken(), + 'tags' => $this->buildTags($subscriberEntity), ]; return $this->buildCustomFields($subscriberEntity, $data); @@ -153,6 +154,25 @@ class SubscribersResponseBuilder { return $data; } + private function buildTags(SubscriberEntity $subscriber): array { + $result = []; + foreach ($subscriber->getSubscriberTags() as $subscriberTag) { + $tag = $subscriberTag->getTag(); + if (!$tag) { + continue; + } + $result[] = [ + 'id' => $subscriberTag->getId(), + 'subscriber_id' => (string)$subscriber->getId(), + 'tag_id' => (string)$tag->getId(), + 'created_at' => ($createdAt = $subscriberTag->getCreatedAt()) ? $createdAt->format(self::DATE_FORMAT) : null, + 'updated_at' => $subscriberTag->getUpdatedAt()->format(self::DATE_FORMAT), + 'name' => $tag->getName(), + ]; + } + return $result; + } + /** * @param SubscriberEntity[] $subscribers */ diff --git a/mailpoet/lib/AdminPages/Pages/Subscribers.php b/mailpoet/lib/AdminPages/Pages/Subscribers.php index 628e616c2c..653d62e23e 100644 --- a/mailpoet/lib/AdminPages/Pages/Subscribers.php +++ b/mailpoet/lib/AdminPages/Pages/Subscribers.php @@ -6,6 +6,7 @@ use MailPoet\AdminPages\PageRenderer; use MailPoet\Cache\TransientCache; use MailPoet\Config\Installer; use MailPoet\Config\ServicesChecker; +use MailPoet\Entities\TagEntity; use MailPoet\Form\Block; use MailPoet\Listing\PageLimit; use MailPoet\Models\CustomField; @@ -13,6 +14,7 @@ use MailPoet\Segments\SegmentsSimpleListRepository; use MailPoet\Services\Bridge; use MailPoet\Settings\TrackingConfig; use MailPoet\Subscribers\ConfirmationEmailMailer; +use MailPoet\Tags\TagRepository; use MailPoet\Util\License\Features\Subscribers as SubscribersFeature; use MailPoet\Util\License\License; use MailPoet\WP\Functions as WPFunctions; @@ -40,6 +42,9 @@ class Subscribers { /** @var SegmentsSimpleListRepository */ private $segmentsListRepository; + /** @var TagRepository */ + private $tagRepository; + /** @var TransientCache */ private $transientCache; @@ -54,6 +59,7 @@ class Subscribers { ServicesChecker $servicesChecker, Block\Date $dateBlock, SegmentsSimpleListRepository $segmentsListRepository, + TagRepository $tagRepository, TransientCache $transientCache, TrackingConfig $trackingConfig ) { @@ -64,6 +70,7 @@ class Subscribers { $this->dateBlock = $dateBlock; $this->servicesChecker = $servicesChecker; $this->segmentsListRepository = $segmentsListRepository; + $this->tagRepository = $tagRepository; $this->transientCache = $transientCache; $this->trackingConfig = $trackingConfig; } @@ -80,6 +87,13 @@ class Subscribers { $data['items_per_page'] = $this->listingPageLimit->getLimitPerPage('subscribers'); $data['segments'] = $this->segmentsListRepository->getListWithSubscribedSubscribersCounts(); + $data['tags'] = array_map(function (TagEntity $tag): array { + return [ + 'id' => $tag->getId(), + 'name' => $tag->getName(), + ]; + }, $this->tagRepository->findAll()); + $data['custom_fields'] = array_map(function($field) { $field['params'] = unserialize($field['params']); diff --git a/mailpoet/views/subscribers/subscribers.html b/mailpoet/views/subscribers/subscribers.html index 642c17b571..7c41c5eebc 100644 --- a/mailpoet/views/subscribers/subscribers.html +++ b/mailpoet/views/subscribers/subscribers.html @@ -8,6 +8,7 @@ var mailpoet_listing_per_page = <%= items_per_page %>; var mailpoet_segments = <%= json_encode(segments) %>; var mailpoet_custom_fields = <%= json_encode(custom_fields) %>; + var mailpoet_tags = <%= json_encode(tags) %>; var mailpoet_month_names = <%= json_encode(month_names) %>; var mailpoet_date_formats = <%= json_encode(date_formats) %>; var mailpoet_premium_active = <%= json_encode(premium_plugin_active) %>;