Allow import subscribers with empty IP address

Allow import subscribers with empty confirmed_ip or subscribed_ip when one of the columns is selected in the last step of the import.
Don't allow importing invalid IP addresses - still import the subscriber but remove the invalid IP address.

[MAILPOET-3665]
This commit is contained in:
Brezo Cordero
2021-08-02 17:46:21 -05:00
committed by Veljko V
parent 5e1f523c96
commit 44932d27c9
2 changed files with 21 additions and 8 deletions

View File

@@ -205,9 +205,10 @@ class Import {
}
if (in_array($column, ['confirmed_ip', 'subscribed_ip'], true)) {
$data = array_map(
function($index, $ip) use(&$invalidRecords, $validator) {
function($index, $ip) use($validator) {
if (!$validator->validateIPAddress($ip)) {
$invalidRecords[] = $index;
// if invalid or empty, we allow the import but remove the IP
return null;
}
return $ip;
}, array_keys($data), $data

View File

@@ -215,23 +215,35 @@ class ImportTest extends \MailPoetTest {
'adam@smith.com',
'jane@doe.com',
];
// invalid confirmed_ip is removed from data object
// invalid confirmed_ip is empty in data object
$data['confirmed_ip'] = [
'2019-05-31 18:42:35',
'192.68.69.32',
];
$result = $this->import->validateSubscribersData($data);
expect($result['confirmed_ip'])->count(1);
expect($result['confirmed_ip'][0])->equals('192.68.69.32');
expect($result['confirmed_ip'])->count(2);
expect($result['confirmed_ip'][0])->isEmpty();
expect($result['confirmed_ip'][1])->equals('192.68.69.32');
// invalid IPv4 confirmed_ip is removed from data object
// invalid IPv4 confirmed_ip is empty in the data object
$data['confirmed_ip'] = [
'392.68.69.32',
'192.68.69.32',
];
$result = $this->import->validateSubscribersData($data);
expect($result['confirmed_ip'])->count(1);
expect($result['confirmed_ip'][0])->equals('192.68.69.32');
expect($result['confirmed_ip'])->count(2);
expect($result['confirmed_ip'][0])->isEmpty();
expect($result['confirmed_ip'][1])->equals('192.68.69.32');
// Empty confirmed_ip is empty in the data object
$data['confirmed_ip'] = [
'',
'192.68.69.32',
];
$result = $this->import->validateSubscribersData($data);
expect($result['confirmed_ip'])->count(2);
expect($result['confirmed_ip'][0])->isEmpty();
expect($result['confirmed_ip'][1])->equals('192.68.69.32');
// normalize confirmed_at
$data['confirmed_ip'] = [