Simplifies subscriber splitting code and adds comments
This commit is contained in:
@@ -135,7 +135,6 @@ class Import {
|
|||||||
($created_subscribers || $updated_subscribers) ?
|
($created_subscribers || $updated_subscribers) ?
|
||||||
Newsletter::getWelcomeNotificationsForSegments($this->segments) :
|
Newsletter::getWelcomeNotificationsForSegments($this->segments) :
|
||||||
false;
|
false;
|
||||||
|
|
||||||
return array(
|
return array(
|
||||||
'created' => count($created_subscribers),
|
'created' => count($created_subscribers),
|
||||||
'updated' => count($updated_subscribers),
|
'updated' => count($updated_subscribers),
|
||||||
@@ -183,8 +182,12 @@ class Import {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function splitSubscribersData($subscribers_data) {
|
function splitSubscribersData($subscribers_data) {
|
||||||
|
// $subscribers_data is an two-dimensional associative array
|
||||||
|
// of all subscribers being imported: [field => [value1, value2], field => [value1, value2], ...]
|
||||||
$temp_existing_subscribers = array();
|
$temp_existing_subscribers = array();
|
||||||
foreach(array_chunk($subscribers_data['email'], self::DB_QUERY_CHUNK_SIZE) as $subscribers_emails) {
|
foreach(array_chunk($subscribers_data['email'], self::DB_QUERY_CHUNK_SIZE) as $subscribers_emails) {
|
||||||
|
// create a two-dimensional indexed array of all existing subscribers
|
||||||
|
// with just wp_user_id and email fields: [[wp_user_id, email], [wp_user_id, email], ...]
|
||||||
$temp_existing_subscribers = array_merge(
|
$temp_existing_subscribers = array_merge(
|
||||||
$temp_existing_subscribers,
|
$temp_existing_subscribers,
|
||||||
Subscriber::select('wp_user_id')
|
Subscriber::select('wp_user_id')
|
||||||
@@ -196,30 +199,30 @@ class Import {
|
|||||||
}
|
}
|
||||||
if(!$temp_existing_subscribers) {
|
if(!$temp_existing_subscribers) {
|
||||||
return array(
|
return array(
|
||||||
$existing_subscribers = false,
|
false, // existing subscribers
|
||||||
$new_subscribers = $subscribers_data,
|
$subscribers_data, // new subscribers
|
||||||
$wp_users = false
|
false // WP users
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
// extract WP users ids into a simple indexed array: [wp_user_id_1, wp_user_id_2, ...]
|
||||||
$wp_users = array_filter(Helpers::arrayColumn($temp_existing_subscribers, 'wp_user_id'));
|
$wp_users = array_filter(Helpers::arrayColumn($temp_existing_subscribers, 'wp_user_id'));
|
||||||
$temp_new_subscribers = array_keys(
|
// create a new two-dimensional associative array with existing subscribers ($existing_subscribers)
|
||||||
array_diff(
|
// and reduce $subscribers_data to only new subscribers by removing existing subscribers
|
||||||
$subscribers_data['email'],
|
$existing_subscribers = array();
|
||||||
Helpers::arrayColumn($temp_existing_subscribers, 'email')
|
foreach($temp_existing_subscribers as $temp_existing_subscriber) {
|
||||||
)
|
$existing_subscriber_key = array_search($temp_existing_subscriber['email'], $subscribers_data['email']);
|
||||||
);
|
foreach($subscribers_data as $field => &$value) {
|
||||||
if(!$temp_new_subscribers) {
|
$existing_subscribers[$field][] = $value[$existing_subscriber_key];
|
||||||
return array(
|
unset($value[$existing_subscriber_key]);
|
||||||
$existing_subscribers = $subscribers_data,
|
}
|
||||||
$new_subscribers = false,
|
|
||||||
$wp_users = $wp_users
|
|
||||||
);
|
|
||||||
}
|
|
||||||
$existing_subscribers = $new_subscribers = array();
|
|
||||||
foreach($subscribers_data as $field => $values) {
|
|
||||||
$existing_subscribers[$field] = array_diff_key($values, array_flip($temp_new_subscribers));
|
|
||||||
$new_subscribers[$field] = array_values(array_intersect_key($values, array_flip($temp_new_subscribers)));
|
|
||||||
}
|
}
|
||||||
|
$new_subscribers = $subscribers_data;
|
||||||
|
// reindex array after unsetting elements
|
||||||
|
array_walk($new_subscribers, function(&$values) {
|
||||||
|
sort($values);
|
||||||
|
});
|
||||||
|
// remove empty values
|
||||||
|
$new_subscribers = array_filter($new_subscribers);
|
||||||
return array(
|
return array(
|
||||||
$existing_subscribers,
|
$existing_subscribers,
|
||||||
$new_subscribers,
|
$new_subscribers,
|
||||||
|
Reference in New Issue
Block a user