diff --git a/lib/Config/Populator.php b/lib/Config/Populator.php index 08e7ef7946..e0f3fb1339 100644 --- a/lib/Config/Populator.php +++ b/lib/Config/Populator.php @@ -6,9 +6,12 @@ use MailPoet\Mailer\MailerLog; use MailPoet\Models\Newsletter; use MailPoet\Models\Segment; use MailPoet\Models\SendingQueue; +use MailPoet\Models\StatisticsForms; +use MailPoet\Models\Subscriber; use MailPoet\Segments\WP; use MailPoet\Models\Setting; use MailPoet\Settings\Pages; +use MailPoet\Subscribers\Source; use MailPoet\Util\Helpers; if(!defined('ABSPATH')) exit; @@ -65,6 +68,7 @@ class Populator { $this->createDefaultSegments(); $this->createDefaultSettings(); $this->createMailPoetPage(); + $this->createSourceForSubscribers(); } private function createMailPoetPage() { @@ -333,4 +337,19 @@ class Populator { ) ); } + + private function createSourceForSubscribers() { + Subscriber::rawExecute( + ' UPDATE LOW_PRIORITY `' . Subscriber::$_table . '` subscriber ' . + ' JOIN `' . StatisticsForms::$_table . '` stats ON stats.subscriber_id=subscriber.id ' . + ' SET `source` = "' . Source::FORM . '"' . + ' WHERE `source` = "' . Source::UNKNOWN . '"' + ); + Subscriber::rawExecute( + 'UPDATE LOW_PRIORITY `' . Subscriber::$_table . '`' . + ' SET `source` = "' . Source::WORDPRESS_USER . '"' . + ' WHERE `source` = "' . Source::UNKNOWN . '"' . + ' AND `wp_user_id` IS NOT NULL' + ); + } } diff --git a/lib/Subscribers/ImportExport/PersonalDataExporters/SubscriberExporter.php b/lib/Subscribers/ImportExport/PersonalDataExporters/SubscriberExporter.php index a63212d8a7..4543c67440 100644 --- a/lib/Subscribers/ImportExport/PersonalDataExporters/SubscriberExporter.php +++ b/lib/Subscribers/ImportExport/PersonalDataExporters/SubscriberExporter.php @@ -4,6 +4,7 @@ namespace MailPoet\Subscribers\ImportExport\PersonalDataExporters; use MailPoet\Models\CustomField; use MailPoet\Models\Subscriber; +use MailPoet\Subscribers\Source; class SubscriberExporter { @@ -70,6 +71,12 @@ class SubscriberExporter { ); } } + + $result[] = array( + 'name' => __("Subscriber's subscription source", 'mailpoet'), + 'value' => $this->formatSource($subscriber->source), + ); + return $result; } @@ -82,4 +89,21 @@ class SubscriberExporter { return $result; } + private function formatSource($source) { + switch ($source) { + case Source::WORDPRESS_USER: + return __('Subscriber information synchronized via WP user sync', 'mailpoet'); + case Source::FORM: + return __('Subscription via a MailPoet subscription form', 'mailpoet'); + case Source::API: + return __('Added by a 3rd party via MailPoet 3 API', 'mailpoet'); + case Source::ADMINISTRATOR: + return __('Created by the administrator', 'mailpoet'); + case Source::IMPORTED: + return __('Imported by the administrator', 'mailpoet'); + default: + return __('Unknown', 'mailpoet'); + } + } + } \ No newline at end of file diff --git a/tests/unit/Subscribers/ImportExport/PersonalDataExporters/SubscriberExporterTest.php b/tests/unit/Subscribers/ImportExport/PersonalDataExporters/SubscriberExporterTest.php index d5fbfc40f8..dec36afde9 100644 --- a/tests/unit/Subscribers/ImportExport/PersonalDataExporters/SubscriberExporterTest.php +++ b/tests/unit/Subscribers/ImportExport/PersonalDataExporters/SubscriberExporterTest.php @@ -48,10 +48,27 @@ class SubscriberExporterTest extends \MailPoetTest { array('name' => 'Email', 'value' => 'email.that@has.no.custom.fields'), array('name' => 'Status', 'value' => 'unconfirmed'), array('name' => 'Created at', 'value' => '2018-05-03 10:30:08'), + array('name' => "Subscriber's subscription source", 'value' => 'Unknown'), ); expect($result['data'][0]['data'])->equals($expected); } + function testExportSubscriberWithSource() { + Subscriber::createOrUpdate(array( + 'email' => 'email.with@source.com', + 'first_name' => 'John', + 'last_name' => 'Doe', + 'status' => 'unconfirmed', + 'created_at' => '2018-05-03 10:30:08', + 'source' => 'form', + )); + $result = $this->exporter->export('email.with@source.com'); + expect($result['data'][0]['data'])->contains(array( + 'name' => "Subscriber's subscription source", + 'value' => 'Subscription via a MailPoet subscription form' + )); + } + function testExportSubscriberWithIPs() { Subscriber::createOrUpdate(array( 'email' => 'email.that@has.ip.addresses', @@ -67,6 +84,7 @@ class SubscriberExporterTest extends \MailPoetTest { expect($result['data'][0]['data'])->contains(array('name' => 'Confirmed IP', 'value' => 'IP2')); } + function testExportSubscriberWithCustomField() { $subscriber = Subscriber::createOrUpdate(array( 'email' => 'email.that@has.custom.fields',