diff --git a/lib/Subscribers/ImportExport/Import/Import.php b/lib/Subscribers/ImportExport/Import/Import.php index 3c31f1e6af..5e8766a419 100644 --- a/lib/Subscribers/ImportExport/Import/Import.php +++ b/lib/Subscribers/ImportExport/Import/Import.php @@ -282,11 +282,18 @@ class Import { return $subscribers; } - function setSubscriptionStatusToSubscribed($subscribers_data) { + private function setSubscriptionStatusToSubscribed($subscribers_data) { if (!in_array('status', $subscribers_data['fields'])) return $subscribers_data; $subscribers_data['data']['status'] = array_map(function() { return Subscriber::STATUS_SUBSCRIBED; }, $subscribers_data['data']['status']); + + if (!in_array('last_subscribed_at', $subscribers_data['fields'])) { + $subscribers_data['fields'][] = 'last_subscribed_at'; + } + $subscribers_data['data']['last_subscribed_at'] = array_map(function() { + return $this->created_at; + }, $subscribers_data['data']['status']); return $subscribers_data; } diff --git a/tests/integration/Subscribers/ImportExport/Import/ImportTest.php b/tests/integration/Subscribers/ImportExport/Import/ImportTest.php index e64e47a84f..b856f9bae4 100644 --- a/tests/integration/Subscribers/ImportExport/Import/ImportTest.php +++ b/tests/integration/Subscribers/ImportExport/Import/ImportTest.php @@ -436,7 +436,7 @@ class ImportTest extends \MailPoetTest { expect($updated_subscriber->status)->equals('unsubscribed'); } - function testItImportsNewsSubscribersWithSubscribedStatus() { + function testItImportsNewsSubscribersWithSubscribedStatusAndLastSubscribedAt() { $data = $this->test_data; $data['columns']['status'] = ['index' => 4]; $data['subscribers'][0][] = 'unsubscribed'; @@ -453,6 +453,29 @@ class ImportTest extends \MailPoetTest { expect($new_subscribers[1]->status)->equals('subscribed'); expect($new_subscribers[0]->source)->equals('imported'); expect($new_subscribers[1]->source)->equals('imported'); + $test_time = date('Y-m-d H:i:s', $this->test_data['timestamp']); + expect($new_subscribers[0]->last_subscribed_at)->equals($test_time); + expect($new_subscribers[1]->last_subscribed_at)->equals($test_time); + } + + function testItDoesNotUpdateExistingSubscribersLastSubscribedAtWhenItIsPresent() { + $data = $this->test_data; + $data['columns']['last_subscribed_at'] = ['index' => 4]; + $data['subscribers'][0][] = '2018-12-12 12:12:00'; + $data['subscribers'][1][] = '2018-12-12 12:12:00'; + $import = new Import($data); + $existing_subscriber = Subscriber::create(); + $existing_subscriber->hydrate( + [ + 'first_name' => 'Adam', + 'last_name' => 'Smith', + 'email' => 'Adam@Smith.com', + 'last_subscribed_at' => '2017-12-12 12:12:00', + ]); + $existing_subscriber->save(); + $import->process(); + $updated_subscriber = Subscriber::where('email', $existing_subscriber->email)->findOne(); + expect($updated_subscriber->last_subscribed_at)->equals('2017-12-12 12:12:00'); } function testItRunsImport() {