Fix importing WP users as subscribers
[MAILPOET-3298]
This commit is contained in:
committed by
Veljko V
parent
a751a2a459
commit
d91c383e53
@ -7,14 +7,23 @@ use MailPoet\Config\AccessControl;
|
|||||||
use MailPoet\Cron\Workers\WooCommerceSync;
|
use MailPoet\Cron\Workers\WooCommerceSync;
|
||||||
use MailPoet\Models\ScheduledTask;
|
use MailPoet\Models\ScheduledTask;
|
||||||
use MailPoet\Models\Segment;
|
use MailPoet\Models\Segment;
|
||||||
|
use MailPoet\Segments\WP;
|
||||||
use MailPoet\Subscribers\ImportExport\Import\MailChimp;
|
use MailPoet\Subscribers\ImportExport\Import\MailChimp;
|
||||||
use MailPoetVendor\Carbon\Carbon;
|
use MailPoetVendor\Carbon\Carbon;
|
||||||
|
|
||||||
class ImportExport extends APIEndpoint {
|
class ImportExport extends APIEndpoint {
|
||||||
|
|
||||||
|
/** @var WP */
|
||||||
|
private $wpSegment;
|
||||||
|
|
||||||
public $permissions = [
|
public $permissions = [
|
||||||
'global' => AccessControl::PERMISSION_MANAGE_SUBSCRIBERS,
|
'global' => AccessControl::PERMISSION_MANAGE_SUBSCRIBERS,
|
||||||
];
|
];
|
||||||
|
|
||||||
|
public function __construct(WP $wpSegment) {
|
||||||
|
$this->wpSegment = $wpSegment;
|
||||||
|
}
|
||||||
|
|
||||||
public function getMailChimpLists($data) {
|
public function getMailChimpLists($data) {
|
||||||
try {
|
try {
|
||||||
$mailChimp = new MailChimp($data['api_key']);
|
$mailChimp = new MailChimp($data['api_key']);
|
||||||
@ -55,6 +64,7 @@ class ImportExport extends APIEndpoint {
|
|||||||
public function processImport($data) {
|
public function processImport($data) {
|
||||||
try {
|
try {
|
||||||
$import = new \MailPoet\Subscribers\ImportExport\Import\Import(
|
$import = new \MailPoet\Subscribers\ImportExport\Import\Import(
|
||||||
|
$this->wpSegment,
|
||||||
json_decode($data, true)
|
json_decode($data, true)
|
||||||
);
|
);
|
||||||
$process = $import->process();
|
$process = $import->process();
|
||||||
|
@ -8,6 +8,7 @@ use MailPoet\Models\Newsletter;
|
|||||||
use MailPoet\Models\Subscriber;
|
use MailPoet\Models\Subscriber;
|
||||||
use MailPoet\Models\SubscriberCustomField;
|
use MailPoet\Models\SubscriberCustomField;
|
||||||
use MailPoet\Models\SubscriberSegment;
|
use MailPoet\Models\SubscriberSegment;
|
||||||
|
use MailPoet\Segments\WP;
|
||||||
use MailPoet\Subscribers\ImportExport\ImportExportFactory;
|
use MailPoet\Subscribers\ImportExport\ImportExportFactory;
|
||||||
use MailPoet\Subscribers\Source;
|
use MailPoet\Subscribers\Source;
|
||||||
use MailPoet\Util\DateConverter;
|
use MailPoet\Util\DateConverter;
|
||||||
@ -31,7 +32,11 @@ class Import {
|
|||||||
const DB_QUERY_CHUNK_SIZE = 100;
|
const DB_QUERY_CHUNK_SIZE = 100;
|
||||||
const STATUS_DONT_UPDATE = 'dont_update';
|
const STATUS_DONT_UPDATE = 'dont_update';
|
||||||
|
|
||||||
public function __construct($data) {
|
/** @var WP */
|
||||||
|
private $wpSegment;
|
||||||
|
|
||||||
|
public function __construct(WP $wpSegment, $data) {
|
||||||
|
$this->wpSegment = $wpSegment;
|
||||||
$this->validateImportData($data);
|
$this->validateImportData($data);
|
||||||
$this->subscribersData = $this->transformSubscribersData(
|
$this->subscribersData = $this->transformSubscribersData(
|
||||||
$data['subscribers'],
|
$data['subscribers'],
|
||||||
@ -445,7 +450,7 @@ class Import {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function synchronizeWPUsers($wpUsers) {
|
public function synchronizeWPUsers($wpUsers) {
|
||||||
return array_walk($wpUsers, '\MailPoet\Segments\WP::synchronizeUser');
|
return array_walk($wpUsers, [$this->wpSegment, 'synchronizeUser']);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function addSubscribersToSegments($subscribersIds, $segmentsIds) {
|
public function addSubscribersToSegments($subscribersIds, $segmentsIds) {
|
||||||
|
@ -7,6 +7,7 @@ use MailPoet\Models\Segment;
|
|||||||
use MailPoet\Models\Subscriber;
|
use MailPoet\Models\Subscriber;
|
||||||
use MailPoet\Models\SubscriberCustomField;
|
use MailPoet\Models\SubscriberCustomField;
|
||||||
use MailPoet\Models\SubscriberSegment;
|
use MailPoet\Models\SubscriberSegment;
|
||||||
|
use MailPoet\Segments\WP;
|
||||||
use MailPoet\Subscribers\ImportExport\Import\Import;
|
use MailPoet\Subscribers\ImportExport\Import\Import;
|
||||||
use MailPoetVendor\Idiorm\ORM;
|
use MailPoetVendor\Idiorm\ORM;
|
||||||
|
|
||||||
@ -19,7 +20,11 @@ class ImportTest extends \MailPoetTest {
|
|||||||
public $segment2;
|
public $segment2;
|
||||||
public $segment1;
|
public $segment1;
|
||||||
|
|
||||||
|
/** @var WP */
|
||||||
|
private $wpSegment;
|
||||||
|
|
||||||
public function _before() {
|
public function _before() {
|
||||||
|
$this->wpSegment = $this->diContainer->get(WP::class);
|
||||||
$customField = CustomField::create();
|
$customField = CustomField::create();
|
||||||
$customField->name = 'country';
|
$customField->name = 'country';
|
||||||
$customField->type = 'text';
|
$customField->type = 'text';
|
||||||
@ -61,7 +66,7 @@ class ImportTest extends \MailPoetTest {
|
|||||||
'last_name',
|
'last_name',
|
||||||
'email',
|
'email',
|
||||||
];
|
];
|
||||||
$this->import = new Import($this->testData);
|
$this->import = new Import($this->wpSegment, $this->testData);
|
||||||
$this->subscribersData = $this->import->transformSubscribersData(
|
$this->subscribersData = $this->import->transformSubscribersData(
|
||||||
$this->testData['subscribers'],
|
$this->testData['subscribers'],
|
||||||
$this->testData['columns']
|
$this->testData['columns']
|
||||||
@ -145,7 +150,7 @@ class ImportTest extends \MailPoetTest {
|
|||||||
'existingSubscribersStatus' => Import::STATUS_DONT_UPDATE,
|
'existingSubscribersStatus' => Import::STATUS_DONT_UPDATE,
|
||||||
'updateSubscribers' => true,
|
'updateSubscribers' => true,
|
||||||
];
|
];
|
||||||
$import = new Import($data);
|
$import = new Import($this->wpSegment, $data);
|
||||||
try {
|
try {
|
||||||
$import->process();
|
$import->process();
|
||||||
self::fail('No valid subscribers found exception not thrown.');
|
self::fail('No valid subscribers found exception not thrown.');
|
||||||
@ -219,7 +224,7 @@ class ImportTest extends \MailPoetTest {
|
|||||||
'existingSubscribersStatus' => Import::STATUS_DONT_UPDATE,
|
'existingSubscribersStatus' => Import::STATUS_DONT_UPDATE,
|
||||||
'updateSubscribers' => true,
|
'updateSubscribers' => true,
|
||||||
];
|
];
|
||||||
$import = new Import($data);
|
$import = new Import($this->wpSegment, $data);
|
||||||
$subscribersData = [
|
$subscribersData = [
|
||||||
'data' => $import->subscribersData,
|
'data' => $import->subscribersData,
|
||||||
'fields' => $import->subscribersFields,
|
'fields' => $import->subscribersFields,
|
||||||
@ -437,7 +442,7 @@ class ImportTest extends \MailPoetTest {
|
|||||||
$data['columns']['status'] = ['index' => 4];
|
$data['columns']['status'] = ['index' => 4];
|
||||||
$data['subscribers'][0][] = 'unsubscribed';
|
$data['subscribers'][0][] = 'unsubscribed';
|
||||||
$data['subscribers'][1][] = 'unsubscribed';
|
$data['subscribers'][1][] = 'unsubscribed';
|
||||||
$import = new Import($data);
|
$import = new Import($this->wpSegment, $data);
|
||||||
$result = $import->process();
|
$result = $import->process();
|
||||||
$newSubscribers = Subscriber::whereAnyIs([
|
$newSubscribers = Subscriber::whereAnyIs([
|
||||||
['email' => $data['subscribers'][0][2]],
|
['email' => $data['subscribers'][0][2]],
|
||||||
@ -461,7 +466,7 @@ class ImportTest extends \MailPoetTest {
|
|||||||
$data['columns']['last_subscribed_at'] = ['index' => 4];
|
$data['columns']['last_subscribed_at'] = ['index' => 4];
|
||||||
$data['subscribers'][0][] = '2018-12-12 12:12:00';
|
$data['subscribers'][0][] = '2018-12-12 12:12:00';
|
||||||
$data['subscribers'][1][] = '2018-12-12 12:12:00';
|
$data['subscribers'][1][] = '2018-12-12 12:12:00';
|
||||||
$import = new Import($data);
|
$import = new Import($this->wpSegment, $data);
|
||||||
$existingSubscriber = Subscriber::create();
|
$existingSubscriber = Subscriber::create();
|
||||||
$existingSubscriber->hydrate(
|
$existingSubscriber->hydrate(
|
||||||
[
|
[
|
||||||
@ -476,6 +481,18 @@ class ImportTest extends \MailPoetTest {
|
|||||||
expect($updatedSubscriber->lastSubscribedAt)->equals('2017-12-12 12:12:00');
|
expect($updatedSubscriber->lastSubscribedAt)->equals('2017-12-12 12:12:00');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testItSynchronizesWpUsers() {
|
||||||
|
$this->tester->createWordPressUser('mary@jane.com', 'editor');
|
||||||
|
$beforeImport = Subscriber::where('email', 'mary@jane.com')->findOne();
|
||||||
|
$data = $this->testData;
|
||||||
|
$import = new Import($this->wpSegment, $data);
|
||||||
|
$import->process();
|
||||||
|
$imported = Subscriber::where('email', 'mary@jane.com')->findOne();
|
||||||
|
expect($imported->firstName)->equals($beforeImport->firstName); // Subscriber name was synchronized from WP
|
||||||
|
expect($imported->firstName)->notEquals('Mary');
|
||||||
|
$this->tester->deleteWordPressUser('mary@jane.com');
|
||||||
|
}
|
||||||
|
|
||||||
public function testItDoesUpdateStatusExistingSubscriberWhenExistingSubscribersStatusIsSet() {
|
public function testItDoesUpdateStatusExistingSubscriberWhenExistingSubscribersStatusIsSet() {
|
||||||
$data = $this->testData;
|
$data = $this->testData;
|
||||||
$data['existingSubscribersStatus'] = Subscriber::STATUS_SUBSCRIBED;
|
$data['existingSubscribersStatus'] = Subscriber::STATUS_SUBSCRIBED;
|
||||||
@ -488,7 +505,7 @@ class ImportTest extends \MailPoetTest {
|
|||||||
'status' => Subscriber::STATUS_UNSUBSCRIBED,
|
'status' => Subscriber::STATUS_UNSUBSCRIBED,
|
||||||
'last_subscribed_at' => '2020-08-08 08:08:00',
|
'last_subscribed_at' => '2020-08-08 08:08:00',
|
||||||
]);
|
]);
|
||||||
$import = new Import($data);
|
$import = new Import($this->wpSegment, $data);
|
||||||
$import->process();
|
$import->process();
|
||||||
$updatedSubscriber = Subscriber::where('email', $existingSubscriber->email)->findOne();
|
$updatedSubscriber = Subscriber::where('email', $existingSubscriber->email)->findOne();
|
||||||
expect($updatedSubscriber->status)->equals(Subscriber::STATUS_SUBSCRIBED);
|
expect($updatedSubscriber->status)->equals(Subscriber::STATUS_SUBSCRIBED);
|
||||||
@ -497,7 +514,7 @@ class ImportTest extends \MailPoetTest {
|
|||||||
public function testItDoesStatusNewSubscriberWhenNewSubscribersStatusIsSet() {
|
public function testItDoesStatusNewSubscriberWhenNewSubscribersStatusIsSet() {
|
||||||
$data = $this->testData;
|
$data = $this->testData;
|
||||||
$data['newSubscribersStatus'] = Subscriber::STATUS_UNSUBSCRIBED;
|
$data['newSubscribersStatus'] = Subscriber::STATUS_UNSUBSCRIBED;
|
||||||
$import = new Import($data);
|
$import = new Import($this->wpSegment, $data);
|
||||||
$import->process();
|
$import->process();
|
||||||
$newSubscriber = Subscriber::where('email', 'Adam@Smith.com')->findOne();
|
$newSubscriber = Subscriber::where('email', 'Adam@Smith.com')->findOne();
|
||||||
expect($newSubscriber->status)->equals(Subscriber::STATUS_UNSUBSCRIBED);
|
expect($newSubscriber->status)->equals(Subscriber::STATUS_UNSUBSCRIBED);
|
||||||
|
Reference in New Issue
Block a user