diff --git a/assets/js/src/subscribers/importExport/import.js b/assets/js/src/subscribers/importExport/import.js index d623ed545a..dce5f819d9 100644 --- a/assets/js/src/subscribers/importExport/import.js +++ b/assets/js/src/subscribers/importExport/import.js @@ -1112,6 +1112,7 @@ define( }); importData.step2 = importResults; enableSegmentSelection(mailpoetSegments); + toggleNextStepButton('off'); router.navigate('step3', {trigger: true}); } }); diff --git a/lib/Subscribers/ImportExport/Import/Import.php b/lib/Subscribers/ImportExport/Import/Import.php index cdba68ad91..59d9e90ec3 100644 --- a/lib/Subscribers/ImportExport/Import/Import.php +++ b/lib/Subscribers/ImportExport/Import/Import.php @@ -47,7 +47,7 @@ class Import { list($subscribers_data, $subscriber_fields) = $this->extendSubscribersAndFields( $subscribers_data, $subscriber_fields ); - list($existing_subscribers, $new_subscribers) = + list($existing_subscribers, $wp_users, $new_subscribers) = $this->filterExistingAndNewSubscribers($subscribers_data); $created_subscribers = $updated_subscribers = array(); try { @@ -68,6 +68,9 @@ class Import { $subscriber_fields, $subscriber_custom_fields ); + if ($wp_users) { + $this->synchronizeWPUsers($wp_users); + } } } catch(\PDOException $e) { return array( @@ -98,7 +101,7 @@ class Import { $chunk_size = 200; $existing_records = array_filter( array_map(function($subscriber_emails) { - return Subscriber::selectMany(array('email')) + return Subscriber::selectMany(array('email', 'wp_user_id')) ->whereIn('email', $subscriber_emails) ->whereNull('deleted_at') ->findArray(); @@ -106,10 +109,15 @@ class Import { ); if(!$existing_records) { return array( - false, + $existing_records = false, + $wp_users = false, $subscribers_data ); } + $wp_users = array_map(function($subscriber) { + return Helpers::arrayColumn($subscriber, 'wp_user_id'); + }, $existing_records); + $wp_users = array_filter($wp_users[0]); $existing_records = Helpers::flattenArray($existing_records); $new_records = array_keys( array_diff( @@ -120,6 +128,7 @@ class Import { if(!$new_records) { return array( $subscribers_data, + $wp_users, false ); } @@ -144,6 +153,7 @@ class Import { }, $subscribers_data); return array( $existing_subscribers, + $wp_users, $new_subscribers ); } @@ -339,6 +349,10 @@ class Import { } } + function synchronizeWPUsers($wp_users) { + return array_walk($wp_users, '\MailPoet\Segments\WP::synchronizeUser'); + } + function addSubscribersToSegments($subscribers, $segments) { foreach(array_chunk($subscribers, 200) as $data) { SubscriberSegment::createMultiple($segments, $data); diff --git a/tests/unit/Subscribers/ImportExport/Import/ImportTest.php b/tests/unit/Subscribers/ImportExport/Import/ImportTest.php index bd0c61fae6..1bf1de95b0 100644 --- a/tests/unit/Subscribers/ImportExport/Import/ImportTest.php +++ b/tests/unit/Subscribers/ImportExport/Import/ImportTest.php @@ -77,13 +77,15 @@ class ImportTest extends MailPoetTest { array( 'first_name' => 'Adam', 'last_name' => 'Smith', - 'email' => 'adam@smith.com' + 'email' => 'adam@smith.com', + 'wp_user_id' => 1 )); $subscriber->save(); - list($existing, $new) = $this->import->filterExistingAndNewSubscribers( + list($existing, $wp_users, $new) = $this->import->filterExistingAndNewSubscribers( $subscribers_data ); expect($existing['email'][0])->equals($subscribers_data['email'][0]); + expect($wp_users[0])->equals($subscriber->wp_user_id); expect($new['email'][0])->equals($subscribers_data['email'][1]); }