Update subscriber data on repeated subscriptions [MAILPOET-760]
This commit is contained in:
@@ -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);
|
||||
|
Reference in New Issue
Block a user