Add support for import subscription consent evidence

[MAILPOET-3389]
This commit is contained in:
Jan Lysý
2021-03-04 18:32:56 +01:00
committed by Veljko V
parent fb68f1a7d8
commit be29262319
3 changed files with 36 additions and 15 deletions

View File

@ -87,4 +87,8 @@ class ModelValidator extends \MailPoetVendor\Sudzy\Engine {
} }
return (is_null($newsletterBody) || (is_array($newsletterBody) && !empty($newsletterBody['html']) && !empty($newsletterBody['text']))); return (is_null($newsletterBody) || (is_array($newsletterBody) && !empty($newsletterBody['html']) && !empty($newsletterBody['text'])));
} }
public function validateIPAddress(string $ip): bool {
return (bool)filter_var($ip, FILTER_VALIDATE_IP);
}
} }

View File

@ -200,6 +200,19 @@ class Import {
}, array_keys($data), $data }, array_keys($data), $data
); );
} }
if (in_array($column, ['created_at', 'confirmed_at'], true)) {
$data = $this->validateDateTime($data, $invalidRecords);
}
if (in_array($column, ['confirmed_ip', 'subscribed_ip'], true)) {
$data = array_map(
function($index, $ip) use(&$invalidRecords, $validator) {
if (!$validator->validateIPAddress($ip)) {
$invalidRecords[] = $index;
}
return $ip;
}, array_keys($data), $data
);
}
// if this is a custom column // if this is a custom column
if (in_array($column, $this->subscribersCustomFields)) { if (in_array($column, $this->subscribersCustomFields)) {
$customField = $this->customFieldsRepository->findOneById($column); $customField = $this->customFieldsRepository->findOneById($column);
@ -208,17 +221,7 @@ class Import {
} }
// validate date type // validate date type
if ($customField->getType() === CustomFieldEntity::TYPE_DATE) { if ($customField->getType() === CustomFieldEntity::TYPE_DATE) {
$validationRule = 'datetime'; $data = $this->validateDateTime($data, $invalidRecords);
$data = array_map(
function($index, $date) use($validationRule, &$invalidRecords) {
if (empty($date)) return $date;
$date = (new DateConverter())->convertDateToDatetime($date, $validationRule);
if (!$date) {
$invalidRecords[] = $index;
}
return $date;
}, array_keys($data), $data
);
} }
} }
} }
@ -232,6 +235,20 @@ class Import {
return $subscribersData; return $subscribersData;
} }
private function validateDateTime(array $data, array &$invalidRecords): array {
$validationRule = 'datetime';
return array_map(
function($index, $date) use($validationRule, &$invalidRecords) {
if (empty($date)) return $date;
$date = (new DateConverter())->convertDateToDatetime($date, $validationRule);
if (!$date) {
$invalidRecords[] = $index;
}
return $date;
}, array_keys($data), $data
);
}
public function transformSubscribersData($subscribers, $columns) { public function transformSubscribersData($subscribers, $columns) {
$transformedSubscribers = []; $transformedSubscribers = [];
foreach ($columns as $column => $data) { foreach ($columns as $column => $data) {

View File

@ -48,6 +48,10 @@ class ImportExportFactory {
'email' => __('Email', 'mailpoet'), 'email' => __('Email', 'mailpoet'),
'first_name' => __('First name', 'mailpoet'), 'first_name' => __('First name', 'mailpoet'),
'last_name' => __('Last name', 'mailpoet'), 'last_name' => __('Last name', 'mailpoet'),
'subscribed_ip' => __('Subscription IP', 'mailpoet'),
'created_at' => __('Subscription time', 'mailpoet'),
'confirmed_at' => __('Confirmation time', 'mailpoet'),
'confirmed_ip' => __('Confirmation IP', 'mailpoet'),
]; ];
if ($this->action === 'export') { if ($this->action === 'export') {
$fields = array_merge( $fields = array_merge(
@ -55,10 +59,6 @@ class ImportExportFactory {
[ [
'list_status' => _x('List status', 'Subscription status', 'mailpoet'), 'list_status' => _x('List status', 'Subscription status', 'mailpoet'),
'global_status' => _x('Global status', 'Subscription status', 'mailpoet'), 'global_status' => _x('Global status', 'Subscription status', 'mailpoet'),
'subscribed_ip' => __('Subscription IP', 'mailpoet'),
'created_at' => __('Subscription time', 'mailpoet'),
'confirmed_at' => __('Confirmation time', 'mailpoet'),
'confirmed_ip' => __('Confirmation IP', 'mailpoet'),
] ]
); );
} }