Use importExportRepository in import
[MAILPOET-3378]
This commit is contained in:
@ -12,8 +12,7 @@ use MailPoet\Newsletter\Options\NewsletterOptionsRepository;
|
||||
use MailPoet\Segments\WP;
|
||||
use MailPoet\Subscribers\ImportExport\Import\Import;
|
||||
use MailPoet\Subscribers\ImportExport\Import\MailChimp;
|
||||
use MailPoet\Subscribers\SubscriberCustomFieldRepository;
|
||||
use MailPoet\Subscribers\SubscriberSegmentRepository;
|
||||
use MailPoet\Subscribers\ImportExport\ImportExportRepository;
|
||||
use MailPoet\Subscribers\SubscribersRepository;
|
||||
use MailPoetVendor\Carbon\Carbon;
|
||||
|
||||
@ -25,18 +24,15 @@ class ImportExport extends APIEndpoint {
|
||||
/** @var CustomFieldsRepository */
|
||||
private $customFieldsRepository;
|
||||
|
||||
/** @var ImportExportRepository */
|
||||
private $importExportRepository;
|
||||
|
||||
/** @var NewsletterOptionsRepository */
|
||||
private $newsletterOptionsRepository;
|
||||
|
||||
/** @var SubscriberCustomFieldRepository */
|
||||
private $subscriberCustomFieldRepository;
|
||||
|
||||
/** @var SubscribersRepository */
|
||||
private $subscriberRepository;
|
||||
|
||||
/** @var SubscriberSegmentRepository */
|
||||
private $subscriberSegmentRepository;
|
||||
|
||||
public $permissions = [
|
||||
'global' => AccessControl::PERMISSION_MANAGE_SUBSCRIBERS,
|
||||
];
|
||||
@ -44,17 +40,15 @@ class ImportExport extends APIEndpoint {
|
||||
public function __construct(
|
||||
WP $wpSegment,
|
||||
CustomFieldsRepository $customFieldsRepository,
|
||||
ImportExportRepository $importExportRepository,
|
||||
NewsletterOptionsRepository $newsletterOptionsRepository,
|
||||
SubscriberCustomFieldRepository $subscriberCustomFieldRepository,
|
||||
SubscribersRepository $subscribersRepository,
|
||||
SubscriberSegmentRepository $subscriberSegmentRepository
|
||||
SubscribersRepository $subscribersRepository
|
||||
) {
|
||||
$this->wpSegment = $wpSegment;
|
||||
$this->customFieldsRepository = $customFieldsRepository;
|
||||
$this->importExportRepository = $importExportRepository;
|
||||
$this->newsletterOptionsRepository = $newsletterOptionsRepository;
|
||||
$this->subscriberCustomFieldRepository = $subscriberCustomFieldRepository;
|
||||
$this->subscriberRepository = $subscribersRepository;
|
||||
$this->subscriberSegmentRepository = $subscriberSegmentRepository;
|
||||
}
|
||||
|
||||
public function getMailChimpLists($data) {
|
||||
@ -99,10 +93,9 @@ class ImportExport extends APIEndpoint {
|
||||
$import = new Import(
|
||||
$this->wpSegment,
|
||||
$this->customFieldsRepository,
|
||||
$this->importExportRepository,
|
||||
$this->newsletterOptionsRepository,
|
||||
$this->subscriberCustomFieldRepository,
|
||||
$this->subscriberRepository,
|
||||
$this->subscriberSegmentRepository,
|
||||
json_decode($data, true)
|
||||
);
|
||||
$process = $import->process();
|
||||
|
@ -4,14 +4,15 @@ namespace MailPoet\Subscribers\ImportExport\Import;
|
||||
|
||||
use MailPoet\CustomFields\CustomFieldsRepository;
|
||||
use MailPoet\Entities\CustomFieldEntity;
|
||||
use MailPoet\Entities\SubscriberCustomFieldEntity;
|
||||
use MailPoet\Entities\SubscriberEntity;
|
||||
use MailPoet\Entities\SubscriberSegmentEntity;
|
||||
use MailPoet\Models\ModelValidator;
|
||||
use MailPoet\Newsletter\Options\NewsletterOptionsRepository;
|
||||
use MailPoet\Segments\WP;
|
||||
use MailPoet\Subscribers\ImportExport\ImportExportFactory;
|
||||
use MailPoet\Subscribers\ImportExport\ImportExportRepository;
|
||||
use MailPoet\Subscribers\Source;
|
||||
use MailPoet\Subscribers\SubscriberCustomFieldRepository;
|
||||
use MailPoet\Subscribers\SubscriberSegmentRepository;
|
||||
use MailPoet\Subscribers\SubscribersRepository;
|
||||
use MailPoet\Util\DateConverter;
|
||||
use MailPoet\Util\Helpers;
|
||||
@ -34,39 +35,37 @@ class Import {
|
||||
const DB_QUERY_CHUNK_SIZE = 100;
|
||||
const STATUS_DONT_UPDATE = 'dont_update';
|
||||
|
||||
public const ACTION_CREATE = 'create';
|
||||
public const ACTION_UPDATE = 'update';
|
||||
|
||||
/** @var WP */
|
||||
private $wpSegment;
|
||||
|
||||
/** @var CustomFieldsRepository */
|
||||
private $customFieldsRepository;
|
||||
|
||||
/** @var ImportExportRepository */
|
||||
private $importExportRepository;
|
||||
|
||||
/** @var NewsletterOptionsRepository */
|
||||
private $newsletterOptionsRepository;
|
||||
|
||||
/** @var SubscriberCustomFieldRepository */
|
||||
private $subscriberCustomFieldRepository;
|
||||
|
||||
/** @var SubscribersRepository */
|
||||
private $subscriberRepository;
|
||||
|
||||
/** @var SubscriberSegmentRepository */
|
||||
private $subscriberSegmentRepository;
|
||||
|
||||
public function __construct(
|
||||
WP $wpSegment,
|
||||
CustomFieldsRepository $customFieldsRepository,
|
||||
ImportExportRepository $importExportRepository,
|
||||
NewsletterOptionsRepository $newsletterOptionsRepository,
|
||||
SubscriberCustomFieldRepository $subscriberCustomFieldRepository,
|
||||
SubscribersRepository $subscriberRepository,
|
||||
SubscriberSegmentRepository $subscriberSegmentRepository,
|
||||
array $data
|
||||
) {
|
||||
$this->wpSegment = $wpSegment;
|
||||
$this->customFieldsRepository = $customFieldsRepository;
|
||||
$this->importExportRepository = $importExportRepository;
|
||||
$this->newsletterOptionsRepository = $newsletterOptionsRepository;
|
||||
$this->subscriberCustomFieldRepository = $subscriberCustomFieldRepository;
|
||||
$this->subscriberRepository = $subscriberRepository;
|
||||
$this->subscriberSegmentRepository = $subscriberSegmentRepository;
|
||||
$this->validateImportData($data);
|
||||
$this->subscribersData = $this->transformSubscribersData(
|
||||
$data['subscribers'],
|
||||
@ -141,6 +140,7 @@ class Import {
|
||||
$newSubscribers = $this->setLinkToken($newSubscribers);
|
||||
$createdSubscribers =
|
||||
$this->createOrUpdateSubscribers(
|
||||
self::ACTION_CREATE,
|
||||
$newSubscribers,
|
||||
$this->subscribersCustomFields
|
||||
);
|
||||
@ -157,6 +157,7 @@ class Import {
|
||||
}
|
||||
$updatedSubscribers =
|
||||
$this->createOrUpdateSubscribers(
|
||||
self::ACTION_UPDATE,
|
||||
$existingSubscribers,
|
||||
$this->subscribersCustomFields
|
||||
);
|
||||
@ -380,6 +381,7 @@ class Import {
|
||||
}
|
||||
|
||||
public function createOrUpdateSubscribers(
|
||||
string $action,
|
||||
array $subscribersData,
|
||||
array $subscribersCustomFields = []
|
||||
) {
|
||||
@ -390,12 +392,21 @@ class Import {
|
||||
}, $subscribersData['fields']);
|
||||
}, range(0, $subscribersCount - 1));
|
||||
foreach (array_chunk($subscribers, self::DB_QUERY_CHUNK_SIZE) as $data) {
|
||||
$this->subscriberRepository->insertOrUpdateMultiple(
|
||||
if ($action === self::ACTION_CREATE) {
|
||||
$this->importExportRepository->insertMultiple(
|
||||
SubscriberEntity::class,
|
||||
$subscribersData['fields'],
|
||||
$data
|
||||
);
|
||||
} elseif ($action === self::ACTION_UPDATE) {
|
||||
$this->importExportRepository->updateMultiple(
|
||||
SubscriberEntity::class,
|
||||
$subscribersData['fields'],
|
||||
$data,
|
||||
$this->updatedAt
|
||||
);
|
||||
}
|
||||
}
|
||||
$createdOrUpdatedSubscribers = [];
|
||||
foreach (array_chunk($subscribersData['data']['email'], self::DB_QUERY_CHUNK_SIZE) as $emails) {
|
||||
foreach ($this->subscriberRepository->findIdAndEmailByEmails($emails) as $createdOrUpdatedSubscriber) {
|
||||
@ -408,6 +419,7 @@ class Import {
|
||||
$createdOrUpdatedSubscribersIds = array_column($createdOrUpdatedSubscribers, 'id');
|
||||
if ($subscribersCustomFields) {
|
||||
$this->createOrUpdateCustomFields(
|
||||
$action,
|
||||
$createdOrUpdatedSubscribers,
|
||||
$subscribersData,
|
||||
$subscribersCustomFields
|
||||
@ -421,6 +433,7 @@ class Import {
|
||||
}
|
||||
|
||||
public function createOrUpdateCustomFields(
|
||||
string $acion,
|
||||
array $createdOrUpdatedSubscribers,
|
||||
array $subscribersData,
|
||||
array $subscribersCustomFieldsIds
|
||||
@ -455,13 +468,21 @@ class Import {
|
||||
'created_at',
|
||||
];
|
||||
foreach (array_chunk($subscribersCustomFieldsData, self::DB_QUERY_CHUNK_SIZE) as $subscribersCustomFieldsDataChunk) {
|
||||
$this->subscriberCustomFieldRepository->insertOrUpdateMultiple(
|
||||
$this->importExportRepository->insertMultiple(
|
||||
SubscriberCustomFieldEntity::class,
|
||||
$columns,
|
||||
$subscribersCustomFieldsDataChunk
|
||||
);
|
||||
if ($acion === self::ACTION_UPDATE) {
|
||||
$this->importExportRepository->updateMultiple(
|
||||
SubscriberCustomFieldEntity::class,
|
||||
$columns,
|
||||
$subscribersCustomFieldsDataChunk,
|
||||
$this->updatedAt
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function synchronizeWPUsers($wpUsers) {
|
||||
return array_walk($wpUsers, [$this->wpSegment, 'synchronizeUser']);
|
||||
@ -484,7 +505,11 @@ class Import {
|
||||
];
|
||||
}, $subscriberIdsChunk));
|
||||
}
|
||||
$this->subscriberSegmentRepository->insertOrUpdateMultiple($columns, $data, $this->updatedAt);
|
||||
$this->importExportRepository->insertMultiple(
|
||||
SubscriberSegmentEntity::class,
|
||||
$columns,
|
||||
$data
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -12,6 +12,7 @@ use MailPoet\Entities\SubscriberSegmentEntity;
|
||||
use MailPoet\Newsletter\Options\NewsletterOptionsRepository;
|
||||
use MailPoet\Segments\SegmentsRepository;
|
||||
use MailPoet\Segments\WP;
|
||||
use MailPoet\Subscribers\ImportExport\ImportExportRepository;
|
||||
use MailPoet\Subscribers\SubscriberCustomFieldRepository;
|
||||
use MailPoet\Subscribers\SubscriberSegmentRepository;
|
||||
use MailPoet\Subscribers\SubscribersRepository;
|
||||
@ -36,6 +37,9 @@ class ImportTest extends \MailPoetTest {
|
||||
/** @var CustomFieldsRepository */
|
||||
private $customFieldsRepository;
|
||||
|
||||
/** @var ImportExportRepository */
|
||||
private $importExportRepository;
|
||||
|
||||
/** @var NewsletterOptionsRepository */
|
||||
private $newsletterOptionsRepository;
|
||||
|
||||
@ -54,6 +58,7 @@ class ImportTest extends \MailPoetTest {
|
||||
public function _before() {
|
||||
$this->wpSegment = $this->diContainer->get(WP::class);
|
||||
$this->customFieldsRepository = $this->diContainer->get(CustomFieldsRepository::class);
|
||||
$this->importExportRepository = $this->diContainer->get(ImportExportRepository::class);
|
||||
$this->newsletterOptionsRepository = $this->diContainer->get(NewsletterOptionsRepository::class);
|
||||
$this->segmentsRepository = $this->diContainer->get(SegmentsRepository::class);
|
||||
$this->subscriberCustomFieldRepository = $this->diContainer->get(SubscriberCustomFieldRepository::class);
|
||||
@ -315,6 +320,7 @@ class ImportTest extends \MailPoetTest {
|
||||
'fields' => $this->subscribersFields,
|
||||
];
|
||||
$this->import->createOrUpdateSubscribers(
|
||||
Import::ACTION_CREATE,
|
||||
$subscribersData
|
||||
);
|
||||
$subscribers = $this->subscriberRepository->findAll();
|
||||
@ -323,6 +329,7 @@ class ImportTest extends \MailPoetTest {
|
||||
->equals($subscribersData['data']['email'][0]);
|
||||
$subscribersData['data']['first_name'][1] = 'MaryJane';
|
||||
$this->import->createOrUpdateSubscribers(
|
||||
Import::ACTION_UPDATE,
|
||||
$subscribersData
|
||||
);
|
||||
$this->entityManager->clear();
|
||||
@ -342,6 +349,7 @@ class ImportTest extends \MailPoetTest {
|
||||
];
|
||||
$subscribersData['fields'][] = 'deleted_at';
|
||||
$this->import->createOrUpdateSubscribers(
|
||||
Import::ACTION_CREATE,
|
||||
$subscribersData
|
||||
);
|
||||
$dbSubscribers = array_map(function (SubscriberEntity $subscriber): int {
|
||||
@ -370,6 +378,7 @@ class ImportTest extends \MailPoetTest {
|
||||
];
|
||||
$customField = $this->subscribersCustomFields[0];
|
||||
$this->import->createOrUpdateSubscribers(
|
||||
Import::ACTION_CREATE,
|
||||
$subscribersData,
|
||||
$this->subscribersFields
|
||||
);
|
||||
@ -380,6 +389,7 @@ class ImportTest extends \MailPoetTest {
|
||||
];
|
||||
}, $this->subscriberRepository->findAll());
|
||||
$this->import->createOrUpdateCustomFields(
|
||||
Import::ACTION_CREATE,
|
||||
$dbSubscribers,
|
||||
$subscribersData,
|
||||
$this->subscribersCustomFields
|
||||
@ -390,6 +400,7 @@ class ImportTest extends \MailPoetTest {
|
||||
->equals($subscribersData['data'][$customField][0]);
|
||||
$subscribersData[$customField][1] = 'Rio';
|
||||
$this->import->createOrUpdateCustomFields(
|
||||
Import::ACTION_UPDATE,
|
||||
$dbSubscribers,
|
||||
$subscribersData,
|
||||
$this->subscribersCustomFields
|
||||
@ -405,6 +416,7 @@ class ImportTest extends \MailPoetTest {
|
||||
'fields' => $this->subscribersFields,
|
||||
];
|
||||
$this->import->createOrUpdateSubscribers(
|
||||
Import::ACTION_CREATE,
|
||||
$subscribersData,
|
||||
$this->subscribersFields
|
||||
);
|
||||
@ -441,6 +453,7 @@ class ImportTest extends \MailPoetTest {
|
||||
date('Y-m-d H:i:s'),
|
||||
];
|
||||
$this->import->createOrUpdateSubscribers(
|
||||
Import::ACTION_CREATE,
|
||||
$subscribersData
|
||||
);
|
||||
}
|
||||
@ -594,10 +607,9 @@ class ImportTest extends \MailPoetTest {
|
||||
return new Import(
|
||||
$this->wpSegment,
|
||||
$this->customFieldsRepository,
|
||||
$this->importExportRepository,
|
||||
$this->newsletterOptionsRepository,
|
||||
$this->subscriberCustomFieldRepository,
|
||||
$this->subscriberRepository,
|
||||
$this->subscriberSegmentRepository,
|
||||
$data
|
||||
);
|
||||
}
|
||||
|
Reference in New Issue
Block a user