diff --git a/assets/js/src/subscribers/list.jsx b/assets/js/src/subscribers/list.jsx
index 0eecf39e85..220f938c07 100644
--- a/assets/js/src/subscribers/list.jsx
+++ b/assets/js/src/subscribers/list.jsx
@@ -15,6 +15,9 @@ import SubscribersLimitNotice from 'notices/subscribers_limit_notice.jsx';
import InvalidMssKeyNotice from 'notices/invalid_mss_key_notice';
import SubscribersInPlan from '../common/subscribers_in_plan';
import SubscribersHeading from './heading';
+import { ListingsEngagementScore } from './listings_engagement_score';
+
+const mailpoetTrackingEnabled = (!!(window.mailpoet_tracking_enabled));
const columns = [
{
@@ -31,7 +34,11 @@ const columns = [
name: 'segments',
label: MailPoet.I18n.t('lists'),
},
-
+ {
+ name: 'statistics',
+ label: MailPoet.I18n.t('statisticsColumn'),
+ display: mailpoetTrackingEnabled,
+ },
{
name: 'created_at',
label: MailPoet.I18n.t('subscribedOn'),
@@ -412,6 +419,11 @@ const SubscriberList = ({ match }) => {
|
+ { (mailpoetTrackingEnabled === true) ? (
+
+
+ |
+ ) : null }
{ MailPoet.Date.short(subscriber.created_at) }
diff --git a/assets/js/src/subscribers/listings_engagement_score.tsx b/assets/js/src/subscribers/listings_engagement_score.tsx
new file mode 100644
index 0000000000..8b9b9b4888
--- /dev/null
+++ b/assets/js/src/subscribers/listings_engagement_score.tsx
@@ -0,0 +1,18 @@
+import React from 'react';
+
+interface Props {
+ subscriber: {
+ engagement_score?: number;
+ };
+}
+
+export const ListingsEngagementScore: React.FunctionComponent = ({ subscriber }) => (
+
+ {subscriber.engagement_score != null && (
+
+ {subscriber.engagement_score}
+ %
+
+ )}
+
+);
diff --git a/lib/API/JSON/ResponseBuilders/SubscribersResponseBuilder.php b/lib/API/JSON/ResponseBuilders/SubscribersResponseBuilder.php
index 7624f8e92f..e16130d344 100644
--- a/lib/API/JSON/ResponseBuilders/SubscribersResponseBuilder.php
+++ b/lib/API/JSON/ResponseBuilders/SubscribersResponseBuilder.php
@@ -65,6 +65,7 @@ class SubscribersResponseBuilder {
'wp_user_id' => $subscriber->getWpUserId(),
'is_woocommerce_user' => $subscriber->getIsWoocommerceUser(),
'created_at' => $subscriber->getCreatedAt()->format(self::DATE_FORMAT),
+ 'engagement_score' => $subscriber->getEngagementScore(),
];
}
diff --git a/lib/AdminPages/Pages/Subscribers.php b/lib/AdminPages/Pages/Subscribers.php
index d6012ee478..ebb6734bc3 100644
--- a/lib/AdminPages/Pages/Subscribers.php
+++ b/lib/AdminPages/Pages/Subscribers.php
@@ -9,6 +9,7 @@ use MailPoet\Listing\PageLimit;
use MailPoet\Models\CustomField;
use MailPoet\Segments\SegmentsSimpleListRepository;
use MailPoet\Services\Bridge;
+use MailPoet\Settings\SettingsController;
use MailPoet\Subscribers\ConfirmationEmailMailer;
use MailPoet\Util\License\Features\Subscribers as SubscribersFeature;
use MailPoet\Util\License\License;
@@ -36,6 +37,9 @@ class Subscribers {
/** @var SegmentsSimpleListRepository */
private $segmentsListRepository;
+ /** @var SettingsController */
+ private $settings;
+
public function __construct(
PageRenderer $pageRenderer,
PageLimit $listingPageLimit,
@@ -43,6 +47,7 @@ class Subscribers {
WPFunctions $wp,
ServicesChecker $servicesChecker,
Block\Date $dateBlock,
+ SettingsController $settings,
SegmentsSimpleListRepository $segmentsListRepository
) {
$this->pageRenderer = $pageRenderer;
@@ -52,6 +57,7 @@ class Subscribers {
$this->dateBlock = $dateBlock;
$this->servicesChecker = $servicesChecker;
$this->segmentsListRepository = $segmentsListRepository;
+ $this->settings = $settings;
}
public function render() {
@@ -90,6 +96,7 @@ class Subscribers {
$data['subscriber_count'] = $this->subscribersFeature->getSubscribersCount();
$data['has_premium_support'] = $this->subscribersFeature->hasPremiumSupport();
$data['link_premium'] = $this->wp->getSiteUrl(null, '/wp-admin/admin.php?page=mailpoet-premium');
+ $data['tracking_enabled'] = $this->settings->get('tracking.enabled');
$this->pageRenderer->displayPage('subscribers/subscribers.html', $data);
}
diff --git a/lib/Subscribers/SubscriberListingRepository.php b/lib/Subscribers/SubscriberListingRepository.php
index b34491fd5d..5a6d3a981c 100644
--- a/lib/Subscribers/SubscriberListingRepository.php
+++ b/lib/Subscribers/SubscriberListingRepository.php
@@ -94,7 +94,7 @@ class SubscriberListingRepository extends ListingRepository {
}
protected function applySelectClause(QueryBuilder $queryBuilder) {
- $queryBuilder->select("PARTIAL s.{id,email,firstName,lastName,status,createdAt,countConfirmations,wpUserId,isWoocommerceUser}");
+ $queryBuilder->select("PARTIAL s.{id,email,firstName,lastName,status,createdAt,countConfirmations,wpUserId,isWoocommerceUser,engagementScore}");
}
protected function applyFromClause(QueryBuilder $queryBuilder) {
diff --git a/views/subscribers/subscribers.html b/views/subscribers/subscribers.html
index 5e63b0a546..ba0b5ccc08 100644
--- a/views/subscribers/subscribers.html
+++ b/views/subscribers/subscribers.html
@@ -11,6 +11,7 @@
var mailpoet_date_formats = <%= json_encode(date_formats) %>;
var mailpoet_premium_active = <%= json_encode(premium_plugin_active) %>;
var mailpoet_max_confirmation_emails = <%= max_confirmation_emails %>;
+ var mailpoet_tracking_enabled = <%= json_encode(tracking_enabled) %>;
var mailpoet_beacon_articles = [
'57ce07ffc6979108399a044b',
'57ce079f903360649f6e56fc',
@@ -91,6 +92,7 @@
'subscriber': __('Subscriber'),
'status': __('Status'),
'lists': __('Lists'),
+ 'statisticsColumn': __('Subscriber score'),
'subscribedOn': __('Subscribed on'),
'lastModifiedOn': __('Last modified on'),
'oneSubscriberTrashed': __('1 subscriber was moved to the trash.'),
|