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,',
|
'updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,',
|
||||||
'deleted_at TIMESTAMP NULL,',
|
'deleted_at TIMESTAMP NULL,',
|
||||||
'unconfirmed_data longtext,',
|
'unconfirmed_data longtext,',
|
||||||
|
'source ENUM("form", "imported", "administrator", "api", "wordpress_user", "unknown") DEFAULT "unknown",',
|
||||||
'PRIMARY KEY (id),',
|
'PRIMARY KEY (id),',
|
||||||
'UNIQUE KEY email (email),',
|
'UNIQUE KEY email (email),',
|
||||||
'KEY wp_user_id (wp_user_id),',
|
'KEY wp_user_id (wp_user_id),',
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
namespace MailPoet\Models;
|
namespace MailPoet\Models;
|
||||||
use MailPoet\Mailer\Mailer;
|
use MailPoet\Mailer\Mailer;
|
||||||
use MailPoet\Newsletter\Scheduler\Scheduler;
|
use MailPoet\Newsletter\Scheduler\Scheduler;
|
||||||
|
use MailPoet\Subscribers\Source;
|
||||||
use MailPoet\Util\Helpers;
|
use MailPoet\Util\Helpers;
|
||||||
use MailPoet\Subscription;
|
use MailPoet\Subscription;
|
||||||
|
|
||||||
@ -182,6 +183,8 @@ class Subscriber extends Model {
|
|||||||
// create new subscriber or update if no confirmation is required
|
// create new subscriber or update if no confirmation is required
|
||||||
$subscriber = self::createOrUpdate($subscriber_data);
|
$subscriber = self::createOrUpdate($subscriber_data);
|
||||||
if($subscriber->getErrors() !== false) {
|
if($subscriber->getErrors() !== false) {
|
||||||
|
$subscriber = Source::setSource($subscriber, Source::FORM);
|
||||||
|
$subscriber->save();
|
||||||
return $subscriber;
|
return $subscriber;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -206,6 +209,8 @@ class Subscriber extends Model {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$subscriber = Source::setSource($subscriber, Source::FORM);
|
||||||
|
|
||||||
if($subscriber->save()) {
|
if($subscriber->save()) {
|
||||||
// link subscriber to segments
|
// link subscriber to segments
|
||||||
SubscriberSegment::subscribeToSegments($subscriber, $segment_ids);
|
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