Move subscribe() method to a separate class an make it non-static [MAILPOET-1825]

This commit is contained in:
wxa
2019-02-20 15:16:02 +03:00
committed by M. Shull
parent 56f6441d36
commit 7528f0f52b
5 changed files with 421 additions and 337 deletions

View File

@ -117,73 +117,6 @@ 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
$subscriber_data = self::filterOutReservedColumns($subscriber_data);
$settings = new SettingsController();
$signup_confirmation_enabled = (bool)$settings->get(
'signup_confirmation.enabled'
);
$subscriber_data['subscribed_ip'] = Helpers::getIP();
$subscriber = self::findOne($subscriber_data['email']);
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) {
$subscriber = Source::setSource($subscriber, Source::FORM);
$subscriber->save();
return $subscriber;
}
$subscriber = self::findOne($subscriber->id);
} else {
// store subscriber data to be updated after confirmation
$subscriber->setUnconfirmedData($subscriber_data);
$subscriber->setExpr('updated_at', 'NOW()');
}
// restore trashed subscriber
if ($subscriber->deleted_at !== null) {
$subscriber->setExpr('deleted_at', 'NULL');
}
// set status depending on signup confirmation setting
if ($subscriber->status !== self::STATUS_SUBSCRIBED) {
if ($signup_confirmation_enabled === true) {
$subscriber->set('status', self::STATUS_UNCONFIRMED);
} else {
$subscriber->set('status', self::STATUS_SUBSCRIBED);
}
}
$subscriber = Source::setSource($subscriber, Source::FORM);
if ($subscriber->save()) {
// link subscriber to segments
SubscriberSegment::subscribeToSegments($subscriber, $segment_ids);
$sender = new ConfirmationEmailMailer();
$sender->sendConfirmationEmail($subscriber);
if ($subscriber->status === self::STATUS_SUBSCRIBED) {
$sender = new NewSubscriberNotificationMailer();
$sender->send($subscriber, Segment::whereIn('id', $segment_ids)->findMany());
Scheduler::scheduleSubscriberWelcomeNotification(
$subscriber->id,
$segment_ids
);
}
}
return $subscriber;
}
static function filterOutReservedColumns(array $subscriber_data) {
$reserved_columns = array(
'id',