Update subscriber data on repeated subscriptions [MAILPOET-760]

This commit is contained in:
Alexey Stoletniy
2016-12-29 15:23:24 +03:00
parent d2b41a5b90
commit 95f8f130ea
4 changed files with 166 additions and 22 deletions

View File

@@ -170,21 +170,7 @@ class Subscriber extends Model {
static function subscribe($subscriber_data = array(), $segment_ids = array()) {
// filter out keys from the subscriber_data array
// that should not be editable when subscribing
$reserved_columns = array(
'id',
'wp_user_id',
'status',
'subscribed_ip',
'confirmed_ip',
'confirmed_at',
'created_at',
'updated_at',
'deleted_at'
);
$subscriber_data = array_diff_key(
$subscriber_data,
array_flip($reserved_columns)
);
$subscriber_data = self::filterOutReservedColumns($subscriber_data);
$signup_confirmation_enabled = (bool)Setting::getValue(
'signup_confirmation.enabled'
@@ -209,14 +195,17 @@ class Subscriber extends Model {
$subscriber = self::findOne($subscriber_data['email']);
if($subscriber === false) {
// create new subscriber
if($subscriber === false || !$signup_confirmation_enabled) {
// create new subscriber or update if no confirmation is required
$subscriber = self::createOrUpdate($subscriber_data);
if($subscriber->getErrors() !== false) {
return $subscriber;
}
$subscriber = self::findOne($subscriber->id);
} else {
// store subscriber data to be updated after confirmation
$subscriber->setUnconfirmedData($subscriber_data);
}
// restore trashed subscriber
@@ -250,6 +239,26 @@ class Subscriber extends Model {
return $subscriber;
}
static function filterOutReservedColumns(array $subscriber_data) {
$reserved_columns = array(
'id',
'wp_user_id',
'status',
'subscribed_ip',
'confirmed_ip',
'confirmed_at',
'created_at',
'updated_at',
'deleted_at',
'unconfirmed_data'
);
$subscriber_data = array_diff_key(
$subscriber_data,
array_flip($reserved_columns)
);
return $subscriber_data;
}
static function search($orm, $search = '') {
if(strlen(trim($search) === 0)) {
return $orm;
@@ -485,6 +494,9 @@ class Subscriber extends Model {
}
}
// wipe any unconfirmed data at this point
$data['unconfirmed_data'] = null;
$old_status = false;
$new_status = false;
@@ -587,6 +599,20 @@ class Subscriber extends Model {
));
}
function setUnconfirmedData(array $subscriber_data) {
$subscriber_data = self::filterOutReservedColumns($subscriber_data);
$this->unconfirmed_data = json_encode($subscriber_data);
}
function getUnconfirmedData() {
if(!empty($this->unconfirmed_data)) {
$subscriber_data = json_decode($this->unconfirmed_data, true);
$subscriber_data = self::filterOutReservedColumns((array)$subscriber_data);
return $subscriber_data;
}
return null;
}
static function bulkAddToList($orm, $data = array()) {
$segment_id = (isset($data['segment_id']) ? (int)$data['segment_id'] : 0);
$segment = Segment::findOne($segment_id);