diff --git a/assets/js/src/import/import.js b/assets/js/src/import/import.js index 9877247057..bdba8a5396 100644 --- a/assets/js/src/import/import.js +++ b/assets/js/src/import/import.js @@ -646,7 +646,7 @@ define( columnId = 'ignore'; // set default column type // if the column is not undefined and has a valid e-mail, set type as email if (columnData % 1 !== 0 && emailRegex.test(columnData)) { - columnId = 's_email'; + columnId = 'email'; } else if (subscribers.header) { var headerName = subscribers.header[i], header_name_match = mailpoetColumns.map(function (el) { @@ -658,15 +658,15 @@ define( }// set column type using header name else if (headerName) { if (/first|first name|given name/i.test(headerName)) { - columnId = 's_first_name'; + columnId = 'first_name'; } else if (/last|last name/i.test(headerName)) { - columnId = 's_last_name'; + columnId = 'last_name'; } else if (/status/i.test(headerName)) { - columnId = 's_status'; + columnId = 'status'; } /*else if (/subscribed|subscription/i.test(headerName)) { - columnId = 's_confirmed_at'; + columnId = 'confirmed_at'; } else if (/ip/i.test(headerName)) { - columnId = 's_confirmed_ip'; + columnId = 'confirmed_ip'; }*/ } } @@ -891,7 +891,7 @@ define( // EMAIL filter: if the last value in the column doesn't have a valid // email, hide the next button - if (column.id === "s_email") { + if (column.id === "email") { if (!emailRegex.test(subscribersClone.subscribers[0][matchedColumn])) { preventNextStep = true; if (!jQuery('[data-id="notice_invalidEmail"]').length) { @@ -1083,9 +1083,9 @@ define( .html()), exportMenuElement = jQuery('span.mailpoet_export'), importResults = { - added: (importData.step2.added) - ? MailPoetI18n.subscribersAdded - .replace('%1$s', '' + importData.step2.added + '') + created: (importData.step2.created) + ? MailPoetI18n.subscribersCreated + .replace('%1$s', '' + importData.step2.created + '') .replace('%2$s', '"' + importData.step2.segments.join('", "') + '"') : false, updated: (importData.step2.updated) @@ -1093,7 +1093,7 @@ define( .replace('%1$s', '' + importData.step2.updated + '') .replace('%2$s', '"' + importData.step2.segments.join('", "') + '"') : false, - noaction: (!importData.step2.updated && !importData.step2.added) + noaction: (!importData.step2.updated && !importData.step2.created) ? true : false }; @@ -1111,9 +1111,9 @@ define( window.location.href = 'admin.php?page=mailpoet-subscribers'; }); - // if new subscribers were added and the export menu item is hidden + // if new subscribers were created and the export menu item is hidden // (it's shown only when there are subscribers), display it - if (importResults.added && exportMenuElement.not(':visible')) { + if (importResults.created && exportMenuElement.not(':visible')) { exportMenuElement.show(); } diff --git a/lib/Import/BootstrapMenu.php b/lib/Import/BootstrapMenu.php index 0b349f58a3..0de7732f3d 100644 --- a/lib/Import/BootstrapMenu.php +++ b/lib/Import/BootstrapMenu.php @@ -15,12 +15,12 @@ class BootstrapMenu { function getSubscriberFields() { return array( - 's_email' => __('Email'), - 's_first_name' => __('First name'), - 's_last_name' => __('Last name'), - 's_status' => __('Status') - /* 's_confirmed_ip' => __('IP address') - 's_confirmed_at' => __('Subscription date')*/ + 'email' => __('Email'), + 'first_name' => __('First name'), + 'last_name' => __('Last name'), + 'status' => __('Status') + /* 'confirmed_ip' => __('IP address') + 'confirmed_at' => __('Subscription date')*/ ); } @@ -44,7 +44,7 @@ class BootstrapMenu { return array( 'id' => $fieldId, 'name' => $fieldName, - 'type' => ($fieldId === 's_confirmed_at') ? 'date' : null, + 'type' => ($fieldId === 'confirmed_at') ? 'date' : null, 'custom' => false ); }, array_keys($subscriberFields), $subscriberFields); diff --git a/lib/Import/Import.php b/lib/Import/Import.php index e06f55af63..c276f21f01 100644 --- a/lib/Import/Import.php +++ b/lib/Import/Import.php @@ -1,7 +1,6 @@ subscribersData = $data['subscribers']; $this->segments = $data['segments']; $this->updateSubscribers = $data['updateSubscribers']; - $this->subscriberFields = $this->getSubscriberFields(); - $this->subscriberCustomFields = $this->getCustomSubscriberFields(); + $this->subscriberFields = $this->getSubscriberFields( + array_keys($this->subscribersData) + ); + $this->subscriberCustomFields = $this->getCustomSubscriberFields( + array_keys($this->subscribersData) + ); $this->subscribersCount = count(reset($this->subscribersData)); $this->currentTime = date('Y-m-d H:i:s'); $this->profilerStart = microtime(true); @@ -21,35 +24,39 @@ class Import { function process() { $subscriberFields = $this->subscriberFields; + $subscriberCustomFields = $this->subscriberCustomFields; $subscribersData = $this->subscribersData; - $subscribersData = $this->filterSubscriberState($subscribersData); + $subscribersData = $this->filterSubscriberStatus($subscribersData); list($subscribersData, $subscriberFields) = $this->extendSubscribersAndFields( $subscribersData, $subscriberFields ); list($existingSubscribers, $newSubscribers) = $this->filterExistingAndNewSubscribers($subscribersData); - $addedSubscribers = $updatedSubscribers = array(); + $createdSubscribers = $updatedSubscribers = array(); try { if($newSubscribers) { - $addedSubscribers = $this->addOrUpdateSubscribers( - 'create', - $newSubscribers, - $subscriberFields - ); - $this->addSubscribersToSegments(array_keys($addedSubscribers)); + $createdSubscribers = + $this->createOrUpdateSubscribers( + 'create', + $newSubscribers, + $subscriberFields, + $subscriberCustomFields + ); } if($existingSubscribers && $this->updateSubscribers) { - $updatedSubscribers = $this->addOrUpdateSubscribers( - 'update', - $existingSubscribers, - $subscriberFields - ); - $this->addSubscribersToSegments(array_keys($updatedSubscribers)); - if($addedSubscribers) { + $updatedSubscribers = + $this->createOrUpdateSubscribers( + 'update', + $existingSubscribers, + $subscriberFields, + $subscriberCustomFields + ); + if($createdSubscribers) { // subtract added from updated subscribers when DB operation takes <1s $updatedSubscribers = array_diff_key( $updatedSubscribers, - $addedSubscribers + $createdSubscribers, + $subscriberCustomFields ); } } @@ -63,7 +70,7 @@ class Import { return array( 'result' => true, 'data' => array( - 'added' => count($addedSubscribers), + 'created' => count($createdSubscribers), 'updated' => count($updatedSubscribers), 'segments' => $segments->getSegments() ), @@ -77,7 +84,7 @@ class Import { return Subscriber::selectMany(array('email')) ->whereIn('email', $subscriberEmails) ->findArray(); - }, array_chunk($subscribersData['s_email'], 200)) + }, array_chunk($subscribersData['email'], 200)) ); if(!$existingRecords) { return array( @@ -88,7 +95,7 @@ class Import { $existingRecords = Helpers::flattenArray($existingRecords); $newRecords = array_keys( array_diff( - $subscribersData['s_email'], + $subscribersData['email'], $existingRecords ) ); @@ -132,19 +139,23 @@ class Import { ); } - function getSubscriberFields() { - return array_filter( - array_map(function ($field) { - if(!is_int($field)) return $field; - }, array_keys($this->subscribersData)) + function getSubscriberFields($subscriberFields) { + return array_values( + array_filter( + array_map(function ($field) { + if(!is_int($field)) return $field; + }, $subscriberFields) + ) ); } - function getCustomSubscriberFields() { - return array_filter( - array_map(function ($field) { - if(is_int($field)) return $field; - }, array_keys($this->subscribersData)) + function getCustomSubscriberFields($subscriberFields) { + return array_values( + array_filter( + array_map(function ($field) { + if(is_int($field)) return $field; + }, $subscriberFields) + ) ); } @@ -152,9 +163,9 @@ class Import { return array_fill(0, $this->subscribersCount, $this->currentTime); } - function filterSubscriberState($subscribersData) { - if(!in_array('s_status', $this->subscriberFields)) return; - $states = array( + function filterSubscriberStatus($subscribersData) { + if(!in_array('status', $this->subscriberFields)) return; + $statuses = array( 'subscribed' => array( 'subscribed', 'confirmed', @@ -169,26 +180,30 @@ class Import { 'false' ) ); - $subscribersData['s_status'] = array_map(function ($state) use ($states) { - if(in_array(strtolower($state), $states['subscribed'])) { + $subscribersData['status'] = array_map(function ($state) use ($statuses) { + if(in_array(strtolower($state), $statuses['subscribed'])) { return 1; } - if(in_array(strtolower($state), $states['unsubscribed'])) { + if(in_array(strtolower($state), $statuses['unsubscribed'])) { return -1; } - return 1; // make "subscribed" a default state - }, $subscribersData['s_status']); + return 1; // make "subscribed" a default status + }, $subscribersData['status']); return $subscribersData; } - function addOrUpdateSubscribers($action, $subscribersData, $subscriberFields) { + function createOrUpdateSubscribers( + $action, + $subscribersData, + $subscriberFields, + $subscriberCustomFields + ) { $subscribersCount = count(reset($subscribersData)) - 1; $subscribers = array_map(function ($index) use ($subscribersData, $subscriberFields) { return array_map(function ($field) use ($index, $subscribersData) { return $subscribersData[$field][$index]; }, $subscriberFields); }, range(0, $subscribersCount)); - $subscriberFields = str_replace('s_', '', $subscriberFields); $currentTime = ($action === 'update') ? date('Y-m-d H:i:s') : $this->currentTime; foreach (array_chunk($subscribers, 200) as $data) { if($action == 'create') { @@ -215,17 +230,27 @@ class Import { ->findArray(), 'email', 'id' ); - if($this->subscriberCustomFields) { - $this->addOrUpdateCustomFields( + if($subscriberCustomFields) { + $this->createOrUpdateCustomFields( ($action === 'create') ? 'create' : 'update', $result, - $subscribersData + $subscribersData, + $subscriberCustomFields ); } + $this->addSubscribersToSegments( + array_keys($result), + $this->segments + ); return $result; } - function addOrUpdateCustomFields($action, $dbSubscribers, $subscribersData) { + function createOrUpdateCustomFields( + $action, + $dbSubscribers, + $subscribersData, + $subscriberCustomFields + ) { $subscribers = array_map( function ($column) use ($dbSubscribers, $subscribersData) { $count = range(0, count($subscribersData[$column]) - 1); @@ -233,7 +258,7 @@ class Import { function ($index, $value) use ($dbSubscribers, $subscribersData, $column) { $subscriberId = array_search( - $subscribersData['s_email'][$index], + $subscribersData['email'][$index], $dbSubscribers ); return array( @@ -242,7 +267,7 @@ class Import { $value ); }, $count, $subscribersData[$column]); - }, $this->subscriberCustomFields)[0]; + }, $subscriberCustomFields)[0]; foreach (array_chunk($subscribers, 200) as $data) { if($action === 'create') { SubscriberCustomField::createMultiple( @@ -257,9 +282,9 @@ class Import { } } - function addSubscribersToSegments($subscribers) { + function addSubscribersToSegments($subscribers, $segments) { foreach (array_chunk($subscribers, 200) as $data) { - SubscriberSegment::createMultiple($this->segments, $data); + SubscriberSegment::createMultiple($segments, $data); } } diff --git a/tests/unit/Config/EnvCest.php b/tests/unit/Config/EnvCest.php index 72653ea15e..1bb256c0c1 100644 --- a/tests/unit/Config/EnvCest.php +++ b/tests/unit/Config/EnvCest.php @@ -1,48 +1,62 @@ equals('mailpoet_'); } - function itCanReturnTheDbPrefix() { + function itCanReturnDbPrefix() { global $wpdb; $db_prefix = $wpdb->prefix . 'mailpoet_'; expect(Env::$db_prefix)->equals($db_prefix); } - function itCanReturnTheDbHost() { - expect(Env::$db_host)->equals(DB_HOST); + function itCanReturnDbHost() { + if(preg_match('/(?=:\d+$)/', DB_HOST)) { + expect(Env::$db_host)->equals(explode(':', DB_HOST)[0]); + } else expect(Env::$db_host)->equals(DB_HOST); } - function itCanReturnTheDbName() { + function itCanReturnDbPort() { + if(preg_match('/(?=:\d+$)/', DB_HOST)) { + expect(Env::$db_port)->equals(explode(':', DB_HOST)[1]); + } else expect(Env::$db_port)->equals(3306); + } + + function itCanReturnSocket() { + if(!preg_match('/(?=:\d+$)/', DB_HOST) + && preg_match('/:/', DB_HOST) + ) { + expect(Env::$db_socket)->true(); + } else expect(Env::$db_socket)->false(); + } + + function itCanReturnDbName() { expect(Env::$db_name)->equals(DB_NAME); } - function itCanReturnTheDbUser() { + function itCanReturnDbUser() { expect(Env::$db_username)->equals(DB_USER); } - function itCanReturnTheDbPassword() { + function itCanReturnDbPassword() { expect(Env::$db_password)->equals(DB_PASSWORD); } - function itCanReturnTheDbCharset() { + function itCanReturnDbCharset() { global $wpdb; $charset = $wpdb->get_charset_collate(); expect(Env::$db_charset)->equals($charset); } - function itCanGenerateTheDbSourceName() { - $source_name = 'mysql:host=' . DB_HOST . ';dbname=' . DB_NAME; + function itCanGenerateDbSourceName() { + $source_name = ((!ENV::$db_socket) ? 'mysql:host=' : 'mysql:unix_socket=') . + ENV::$db_host . ';port=' . ENV::$db_port . ';dbname=' . DB_NAME; expect(Env::$db_source_name)->equals($source_name); } - - function _after() { - } } diff --git a/tests/unit/Import/BootStrapMenuCest.php b/tests/unit/Import/BootStrapMenuCest.php index 9c56b55eb9..f448adabc3 100644 --- a/tests/unit/Import/BootStrapMenuCest.php +++ b/tests/unit/Import/BootStrapMenuCest.php @@ -34,6 +34,9 @@ class BootStrapMenuCest { 'name' => 'DOB', 'type' => 'date', ); + $customField = CustomField::create(); + $customField->hydrate($this->customFieldsData); + $customField->save(); $this->bootStrapMenu = new BootstrapMenu(); } @@ -49,10 +52,10 @@ class BootStrapMenuCest { function itCanGetSubscriberFields() { $subsriberFields = $this->bootStrapMenu->getSubscriberFields(); $fields = array( - 's_email', - 's_first_name', - 's_last_name', - 's_status' + 'email', + 'first_name', + 'last_name', + 'status' ); foreach ($fields as $field) { expect(in_array($field, array_keys($subsriberFields)))->true(); @@ -78,9 +81,6 @@ class BootStrapMenuCest { } function itCanGetSubsciberCustomFields() { - $customField = CustomField::create(); - $customField->hydrate($this->customFieldsData); - $customField->save(); $subscriberCustomFields = $this->bootStrapMenu ->getSubscriberCustomFields(); @@ -89,9 +89,6 @@ class BootStrapMenuCest { } function itCanFormatSubsciberCustomFields() { - $customField = CustomField::create(); - $customField->hydrate($this->customFieldsData); - $customField->save(); $formattedSubscriberCustomFields = $this->bootStrapMenu->formatSubscriberCustomFields( $this->bootStrapMenu->getSubscriberCustomFields() @@ -111,7 +108,7 @@ class BootStrapMenuCest { function itCanFormatFieldsForSelect2() { $bootStrapMenu = clone($this->bootStrapMenu); - $select2FieldsWithouCustomFields = array( + $select2FieldsWithoutCustomFields = array( array( 'name' => 'Actions', 'children' => array( @@ -133,7 +130,7 @@ class BootStrapMenuCest { ) ); $select2FieldsWithCustomFields = array_merge( - $select2FieldsWithouCustomFields, + $select2FieldsWithoutCustomFields, array( array( 'name' => __('User columns'), @@ -152,10 +149,13 @@ class BootStrapMenuCest { $bootStrapMenu->subscriberFields, $bootStrapMenu->subscriberCustomFields ); - expect($formattedFieldsForSelect2)->equals($select2FieldsWithouCustomFields); + expect($formattedFieldsForSelect2)->equals($select2FieldsWithoutCustomFields); } function itCanBootstrap() { + $customField = CustomField::create(); + $customField->hydrate($this->customFieldsData); + $customField->save(); $bootstrap = clone($this->bootStrapMenu); $this->_createSegmentsAndSubscribers(); $bootstrap->segments = $bootstrap->getSegments(); @@ -191,6 +191,8 @@ class BootStrapMenuCest { function _after() { ORM::forTable(Subscriber::$_table) ->deleteMany(); + ORM::forTable(CustomField::$_table) + ->deleteMany(); ORM::forTable(Segment::$_table) ->deleteMany(); ORM::forTable(SubscriberSegment::$_table) diff --git a/tests/unit/Import/ImportCest.php b/tests/unit/Import/ImportCest.php index 2a594022cb..5f4d0a35a7 100644 --- a/tests/unit/Import/ImportCest.php +++ b/tests/unit/Import/ImportCest.php @@ -1,6 +1,262 @@ JSONdata = json_decode(file_get_contents(dirname(__FILE__) . '/ImportTestData.json'), true); + $this->subscribersData = array( + 'first_name' => array( + 'Adam', + 'Mary' + ), + 'last_name' => array( + 'Smith', + 'Jane' + ), + 'email' => array( + 'adam@smith.com', + 'mary@jane.com' + ), + 777 => array( + 'France', + 'Brazil' + ) + ); + $this->subscriberFields = array( + 'first_name', + 'last_name', + 'email' + ); + $this->segments = range(0, 1); + $this->subscriberCustomFields = array(777); + $this->import = new Import($this->JSONdata); + } + + function itCanConstruct() { + expect($this->import->subscribersData)->equals($this->JSONdata['subscribers']); + expect($this->import->segments)->equals($this->JSONdata['segments']); + expect(is_array($this->import->subscriberFields))->true(); + expect(is_array($this->import->subscriberCustomFields))->true(); + expect($this->import->subscribersCount)->equals( + count($this->JSONdata['subscribers']['email']) + ); + expect( + preg_match( + '/\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}/', + $this->import->currentTime) + )->equals(1); + } + + function itCanFilterExistingAndNewSubscribers() { + $subscriber = Subscriber::create(); + $subscriber->hydrate( + array( + 'first_name' => 'Adam', + 'last_name' => 'Smith', + 'email' => 'adam@smith.com' + )); + $subscriber->save(); + list($existing, $new) = $this->import->filterExistingAndNewSubscribers( + $this->subscribersData + ); + expect($existing['email'][0])->equals($this->subscribersData['email'][0]); + expect($new['email'][0])->equals($this->subscribersData['email'][1]); + } + + function itCanExtendSubscribersAndFields() { + expect(in_array('created_at', $this->import->subscriberFields))->false(); + expect(isset($this->import->subscriberFields['created_at']))->false(); + list($subscribers, $fields) = $this->import->extendSubscribersAndFields( + $this->import->subscribersData, + $this->import->subscriberFields + ); + expect(in_array('created_at', $fields))->true(); + expect(isset($this->import->subscriberFields['created_at']))->false(); + expect(count($subscribers['created_at'])) + ->equals($this->import->subscribersCount); + } + + function itCanGetSubscriberFields() { + $data = array( + 'one', + 'two', + 39 + ); + $fields = $this->import->getSubscriberFields($data); + expect($fields)->equals( + array( + 'one', + 'two' + )); + } + + function itCanGetCustomSubscriberFields() { + $data = array( + 'one', + 'two', + 39 + ); + $fields = $this->import->getCustomSubscriberFields($data); + expect($fields)->equals(array(39)); + } + + function itCanFilterSubscriberState() { + $data = array( + 'status' => array( + 'confirmed', + 'subscribed', + 'subscribed', + 'confirmed', + 1, + '1', + 'true', + 'unsubscribed', + -1, + '-1', + 'false', + 'something', + 'else' + ), + ); + $statuses = $this->import->filterSubscriberStatus($data); + expect($statuses)->equals( + array( + 'status' => array( + 1, + 1, + 1, + 1, + 1, + 1, + 1, + -1, + -1, + -1, + -1, + 1, + 1 + ) + ) + ); + } + + function itCanAddOrUpdateSubscribers() { + $subscribersData = $this->subscribersData; + $this->import->createOrUpdateSubscribers( + 'create', + $subscribersData, + $this->subscriberFields, + false + ); + $subscribers = Subscriber::findArray(); + expect(count($subscribers))->equals(2); + expect($subscribers[0]['email']) + ->equals($subscribersData['email'][0]); + $data['first_name'][1] = 'MaryJane'; + $this->import->createOrUpdateSubscribers( + 'update', + $subscribersData, + $this->subscriberFields, + false + ); + $subscribers = Subscriber::findArray(); + expect($subscribers[1]['first_name']) + ->equals($subscribersData['first_name'][1]); + } + + function itCanCreateOrUpdateCustomFields() { + $subscribersData = $this->subscribersData; + $this->import->createOrUpdateSubscribers( + 'create', + $subscribersData, + $this->subscriberFields, + false + ); + $dbSubscribers = Helpers::arrayColumn( + Subscriber::selectMany( + array( + 'id', + 'email' + )) + ->findArray(), + 'email', 'id' + ); + $this->import->createOrUpdateCustomFields( + 'create', + $dbSubscribers, + $subscribersData, + $this->subscriberCustomFields + ); + $subscriberCustomFields = SubscriberCustomField::findArray(); + expect(count($subscriberCustomFields))->equals(2); + expect($subscriberCustomFields[0]['value']) + ->equals($subscribersData[777][0]); + $subscribersData[777][1] = 'Rio'; + $this->import->createOrUpdateCustomFields( + 'update', + $dbSubscribers, + $subscribersData, + $this->subscriberCustomFields + ); + $subscriberCustomFields = SubscriberCustomField::findArray(); + expect($subscriberCustomFields[1]['value']) + ->equals($subscribersData[777][1]); + } + + function itCanaddSubscribersToSegments() { + $subscribersData = $this->subscribersData; + $this->import->createOrUpdateSubscribers( + 'create', + $subscribersData, + $this->subscriberFields, + false + ); + $dbSubscribers = Helpers::arrayColumn( + Subscriber::select('id') + ->findArray(), + 'id' + ); + $this->import->addSubscribersToSegments( + $dbSubscribers, + $this->segments + ); + $subscribersSegments = SubscriberSegment::findArray(); + // 2 subscribers * 2 segments + expect(count($subscribersSegments))->equals(4); + } + + function itCanProcess() { + $import = clone($this->import); + $result = $import->process(); + expect($result['data']['created'])->equals(997); + expect($result['data']['updated'])->equals(0); + $result = $import->process(); + expect($result['data']['created'])->equals(0); + expect($result['data']['updated'])->equals(997); + Subscriber::where('email', 'mbanks4@blinklist.com') + ->findOne() + ->delete(); + $import->currentTime = date('Y-m-d 12:i:s'); + $result = $import->process(); + expect($result['data']['created'])->equals(1); + expect($result['data']['updated'])->equals(996); + $import->updateSubscribers = false; + $result = $import->process(); + expect($result['data']['created'])->equals(0); + expect($result['data']['updated'])->equals(0); + } + + function _after() { + ORM::forTable(Subscriber::$_table) + ->deleteMany(); + ORM::forTable(SubscriberCustomField::$_table) + ->deleteMany(); + ORM::forTable(SubscriberSegment::$_table) + ->deleteMany(); } } \ No newline at end of file diff --git a/tests/unit/Import/ImportTestData.json b/tests/unit/Import/ImportTestData.json index 747d22a19d..e906adacd3 100644 --- a/tests/unit/Import/ImportTestData.json +++ b/tests/unit/Import/ImportTestData.json @@ -999,7 +999,7 @@ "China", "China" ], - "s_first_name":[ + "first_name":[ "Rose", "Samuel", "Louis", @@ -1998,7 +1998,7 @@ "Lillian", "Ryan" ], - "s_last_name":[ + "last_name":[ "Hansen", "Hall", "Freeman", @@ -2997,7 +2997,7 @@ "Clark", "Russell" ], - "s_email":[ + "email":[ "rhansen0@stanford.edu", "shall1@zdnet.com", "lfreeman2@gmpg.org", @@ -3996,7 +3996,7 @@ "lclarkrq@xinhuanet.com", "rrussellrr@bloomberg.com" ], - "s_status":[ + "status":[ "unsubscribed", "confirmed", "subscribed", diff --git a/views/import.html b/views/import.html index 7cc10d5344..94d76196f4 100644 --- a/views/import.html +++ b/views/import.html @@ -54,7 +54,7 @@ 'listCreateError': __('Error adding a new segment:'), 'columnContainsInvalidElement': __('One of the columns contains an invalid email. Please fix before continuing.'), 'customFieldCreateError': __('Custom field could not be created.'), -'subscribersAdded': __('%1$s subscribers added to %2$s.'), +'subscribersCreated': __('%1$s subscribers added to %2$s.'), 'subscribersUpdated': __('%1$s existing subscribers were updated and added to %2$s.') }) %> diff --git a/views/import/step3.html b/views/import/step3.html index 05b72eb420..2d7bb0e73b 100644 --- a/views/import/step3.html +++ b/views/import/step3.html @@ -19,8 +19,8 @@