diff --git a/lib/Subscribers/ImportExport/Import/Import.php b/lib/Subscribers/ImportExport/Import/Import.php index ba77aa0749..54e24e161e 100644 --- a/lib/Subscribers/ImportExport/Import/Import.php +++ b/lib/Subscribers/ImportExport/Import/Import.php @@ -1,6 +1,9 @@ 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);