Add subscriber source
[MAILPOET-1377]
This commit is contained in:
@ -171,6 +171,7 @@ class Migrator {
|
||||
'updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,',
|
||||
'deleted_at TIMESTAMP NULL,',
|
||||
'unconfirmed_data longtext,',
|
||||
'source ENUM("form", "imported", "administrator", "api", "wordpress_user", "unknown") DEFAULT "unknown",',
|
||||
'PRIMARY KEY (id),',
|
||||
'UNIQUE KEY email (email),',
|
||||
'KEY wp_user_id (wp_user_id),',
|
||||
|
@ -2,6 +2,7 @@
|
||||
namespace MailPoet\Models;
|
||||
use MailPoet\Mailer\Mailer;
|
||||
use MailPoet\Newsletter\Scheduler\Scheduler;
|
||||
use MailPoet\Subscribers\Source;
|
||||
use MailPoet\Util\Helpers;
|
||||
use MailPoet\Subscription;
|
||||
|
||||
@ -182,6 +183,8 @@ class Subscriber extends Model {
|
||||
// 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;
|
||||
}
|
||||
|
||||
@ -206,6 +209,8 @@ class Subscriber extends Model {
|
||||
}
|
||||
}
|
||||
|
||||
$subscriber = Source::setSource($subscriber, Source::FORM);
|
||||
|
||||
if($subscriber->save()) {
|
||||
// link subscriber to segments
|
||||
SubscriberSegment::subscribeToSegments($subscriber, $segment_ids);
|
||||
|
37
lib/Subscribers/Source.php
Normal file
37
lib/Subscribers/Source.php
Normal file
@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
namespace MailPoet\Subscribers;
|
||||
|
||||
use MailPoet\Models\Subscriber;
|
||||
|
||||
class Source {
|
||||
|
||||
const FORM = 'form';
|
||||
const IMPORTED = 'imported';
|
||||
const ADMINISTRATOR = 'administrator';
|
||||
const API = 'api';
|
||||
const WORDPRESS_USER = 'wordpress_user';
|
||||
const UNKNOWN = 'unknown';
|
||||
|
||||
private static $allowed_sources = array(
|
||||
Source::FORM,
|
||||
Source::IMPORTED,
|
||||
Source::ADMINISTRATOR,
|
||||
Source::API,
|
||||
Source::WORDPRESS_USER,
|
||||
Source::UNKNOWN,
|
||||
);
|
||||
|
||||
static function setSource(Subscriber $subscriber, $source) {
|
||||
if((isset($subscriber->source)) && ($subscriber->source !== Source::UNKNOWN)) {
|
||||
// we don't want to override source
|
||||
return $subscriber;
|
||||
}
|
||||
if(!in_array($source, Source::$allowed_sources)) {
|
||||
throw new \InvalidArgumentException('Invalid source "' . $source . '""');
|
||||
}
|
||||
$subscriber->set('source', $source);
|
||||
return $subscriber;
|
||||
}
|
||||
|
||||
}
|
39
tests/unit/Subscribers/SourceTest.php
Normal file
39
tests/unit/Subscribers/SourceTest.php
Normal file
@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
namespace MailPoet\Subscribers;
|
||||
|
||||
use MailPoet\Models\Subscriber;
|
||||
|
||||
class SourceTest extends \MailPoetTest {
|
||||
|
||||
function testItDoesntOverrideSource() {
|
||||
$subscriber = Subscriber::createOrUpdate(array(
|
||||
'source' => Source::FORM,
|
||||
));
|
||||
$updated_subscriber = Source::setSource($subscriber, Source::API);
|
||||
expect($updated_subscriber->source)->equals(Source::FORM);
|
||||
}
|
||||
|
||||
function testItDoesntAllowInvalidSource() {
|
||||
$subscriber = Subscriber::createOrUpdate(array(
|
||||
'source' => Source::UNKNOWN,
|
||||
));
|
||||
$this->setExpectedException('\InvalidArgumentException');
|
||||
Source::setSource($subscriber, 'invalid source');
|
||||
}
|
||||
|
||||
function testItWorksWhenNoSourceIsSet() {
|
||||
$subscriber = Subscriber::createOrUpdate(array());
|
||||
$updated_subscriber = Source::setSource($subscriber, Source::FORM);
|
||||
expect($updated_subscriber->source)->equals(Source::FORM);
|
||||
}
|
||||
|
||||
function testItWorks() {
|
||||
$subscriber = Subscriber::createOrUpdate(array(
|
||||
'source' => Source::UNKNOWN,
|
||||
));
|
||||
$updated_subscriber = Source::setSource($subscriber, Source::FORM);
|
||||
expect($updated_subscriber->source)->equals(Source::FORM);
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user