- Adds subscriber data validation; specifically for custom fields with

date type
This commit is contained in:
Vlad
2016-08-08 18:12:06 -04:00
parent b07c4d0e6e
commit 46b0fcf37b

View File

@ -1,6 +1,9 @@
<?php
namespace MailPoet\Subscribers\ImportExport\Import;
use Carbon\Carbon;
use MailPoet\Form\Block\Date;
use MailPoet\Models\CustomField;
use MailPoet\Models\Newsletter;
use MailPoet\Models\Subscriber;
use MailPoet\Models\SubscriberCustomField;
@ -41,7 +44,7 @@ class Import {
function process() {
$subscriber_fields = $this->subscriber_fields;
$subscriber_custom_fields = $this->subscriber_custom_fields;
$subscribers_data = $this->subscribers_data;
$subscribers_data = $this->validateSubscribersData($this->subscribers_data);
list ($subscribers_data, $subscriber_fields) =
$this->filterSubscriberStatus($subscribers_data, $subscriber_fields);
$this->deleteExistingTrashedSubscribers($subscribers_data);
@ -98,6 +101,35 @@ class Import {
);
}
function validateSubscribersData($subscribers_data) {
$invalid_records = array();
foreach($subscribers_data as $column => &$data) {
// if this is a custom column
if(in_array($column, $this->subscriber_custom_fields)) {
$custom_field = CustomField::findOne($column);
// validate date type
if($custom_field->type === 'date') {
$custom_field->params = unserialize($custom_field->params);
$date_format = $custom_field->params['date_format'];
$data = array_map(function($index, $date) use($date_format, &$invalid_records) {
$date = Date::validateDate($date, $date_format);
if(!$date) {
$invalid_records[] = $index;
}
return $date;
}, array_keys($data), $data);
}
}
}
if($invalid_records) {
foreach($subscribers_data as $column => &$data) {
$data = array_diff_key($data, array_flip($invalid_records));
$data = array_values($data);
}
}
return $subscribers_data;
}
function transformSubscribersData($subscribers, $columns) {
foreach($columns as $column => $index) {
$transformed_subscribers[$column] = Helpers::arrayColumn($subscribers, $index);