Allows limiting listings query of automatic emails to specific group
This commit is contained in:
@@ -644,7 +644,8 @@ class Newsletter extends Model {
|
|||||||
// filter by type
|
// filter by type
|
||||||
$type = isset($data['params']['type']) ? $data['params']['type'] : null;
|
$type = isset($data['params']['type']) ? $data['params']['type'] : null;
|
||||||
if($type !== null) {
|
if($type !== null) {
|
||||||
$orm->filter('filterType', $type);
|
$group = (isset($data['params']['group'])) ? $data['params']['group'] : null;
|
||||||
|
$orm->filter('filterType', $type, $group);
|
||||||
}
|
}
|
||||||
|
|
||||||
// filter by parent id
|
// filter by parent id
|
||||||
@@ -818,7 +819,7 @@ class Newsletter extends Model {
|
|||||||
return $orm;
|
return $orm;
|
||||||
}
|
}
|
||||||
|
|
||||||
static function filterType($orm, $type = false) {
|
static function filterType($orm, $type = false, $group = false) {
|
||||||
if(in_array($type, array(
|
if(in_array($type, array(
|
||||||
self::TYPE_STANDARD,
|
self::TYPE_STANDARD,
|
||||||
self::TYPE_WELCOME,
|
self::TYPE_WELCOME,
|
||||||
@@ -826,7 +827,26 @@ class Newsletter extends Model {
|
|||||||
self::TYPE_NOTIFICATION,
|
self::TYPE_NOTIFICATION,
|
||||||
self::TYPE_NOTIFICATION_HISTORY
|
self::TYPE_NOTIFICATION_HISTORY
|
||||||
))) {
|
))) {
|
||||||
$orm->where('type', $type);
|
if($type === self::TYPE_AUTOMATIC && $group) {
|
||||||
|
$orm = $orm->join(
|
||||||
|
NewsletterOptionField::$_table,
|
||||||
|
array(
|
||||||
|
'option_fields.newsletter_type', '=', self::$_table . '.type',
|
||||||
|
'option_fields.name', '=', 'group'
|
||||||
|
),
|
||||||
|
'option_fields'
|
||||||
|
)
|
||||||
|
->join(
|
||||||
|
NewsletterOption::$_table,
|
||||||
|
array(
|
||||||
|
'options.newsletter_id', '=', self::$_table . '.id'
|
||||||
|
),
|
||||||
|
'options'
|
||||||
|
)
|
||||||
|
->whereRaw('`options`.`option_field_id` = `option_fields`.`id`')
|
||||||
|
->where('options.value', $group);
|
||||||
|
}
|
||||||
|
$orm = $orm->where(self::$_table . '.type', $type);
|
||||||
}
|
}
|
||||||
return $orm;
|
return $orm;
|
||||||
}
|
}
|
||||||
@@ -834,14 +854,14 @@ class Newsletter extends Model {
|
|||||||
static function listingQuery($data = array()) {
|
static function listingQuery($data = array()) {
|
||||||
$query = self::select(
|
$query = self::select(
|
||||||
array(
|
array(
|
||||||
'id',
|
self::$_table . '.id',
|
||||||
'subject',
|
self::$_table . '.subject',
|
||||||
'hash',
|
self::$_table . '.hash',
|
||||||
'type',
|
self::$_table . '.type',
|
||||||
'status',
|
self::$_table . '.status',
|
||||||
'sent_at',
|
self::$_table . '.sent_at',
|
||||||
'updated_at',
|
self::$_table . '.updated_at',
|
||||||
'deleted_at'
|
self::$_table . '.deleted_at'
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
if($data['sort_by'] === 'sent_at') {
|
if($data['sort_by'] === 'sent_at') {
|
||||||
|
@@ -742,7 +742,7 @@ class NewsletterTest extends \MailPoetTest {
|
|||||||
expect(NewsletterSegment::findArray())->count(0);
|
expect(NewsletterSegment::findArray())->count(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
function testDuplicatesNewsletter() {
|
function testItDuplicatesNewsletter() {
|
||||||
$original_newsletter = $this->newsletter;
|
$original_newsletter = $this->newsletter;
|
||||||
$original_newsletter->status = Newsletter::STATUS_SENT;
|
$original_newsletter->status = Newsletter::STATUS_SENT;
|
||||||
$original_newsletter->sent_at = $original_newsletter->deleted_at = $original_newsletter->created_at = $original_newsletter->updated_at = date( '2000-m-d H:i:s');
|
$original_newsletter->sent_at = $original_newsletter->deleted_at = $original_newsletter->created_at = $original_newsletter->updated_at = date( '2000-m-d H:i:s');
|
||||||
@@ -766,6 +766,79 @@ class NewsletterTest extends \MailPoetTest {
|
|||||||
expect($duplicate_newsletter->subject)->equals($data['subject']);
|
expect($duplicate_newsletter->subject)->equals($data['subject']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function testItCanQueryAutomaticEmailsByGroup() {
|
||||||
|
$newsletter_1 = Newsletter::createOrUpdate(
|
||||||
|
array(
|
||||||
|
'subject' => 'WooCommerce',
|
||||||
|
'preheader' => 'Pre Header',
|
||||||
|
'type' => Newsletter::TYPE_AUTOMATIC
|
||||||
|
)
|
||||||
|
);
|
||||||
|
$newsletter_2 = Newsletter::createOrUpdate(
|
||||||
|
array(
|
||||||
|
'subject' => 'Unicrons',
|
||||||
|
'preheader' => 'Pre Header',
|
||||||
|
'type' => Newsletter::TYPE_AUTOMATIC
|
||||||
|
)
|
||||||
|
);
|
||||||
|
$newsletter_option_field = NewsletterOptionField::create();
|
||||||
|
$newsletter_option_field->hydrate(
|
||||||
|
array(
|
||||||
|
'newsletter_type' => Newsletter::TYPE_AUTOMATIC,
|
||||||
|
'name' => 'group'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
$newsletter_option_field->save();
|
||||||
|
$newsletter_option_1 = NewsletterOption::create();
|
||||||
|
$newsletter_option_1->hydrate(
|
||||||
|
array(
|
||||||
|
'newsletter_id' => $newsletter_1->id,
|
||||||
|
'option_field_id' => $newsletter_option_field->id,
|
||||||
|
'value' => 'woocommerce'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
$newsletter_option_1->save();
|
||||||
|
$newsletter_option_2 = NewsletterOption::create();
|
||||||
|
$newsletter_option_2->hydrate(
|
||||||
|
array(
|
||||||
|
'newsletter_id' => $newsletter_2->id,
|
||||||
|
'option_field_id' => $newsletter_option_field->id,
|
||||||
|
'value' => 'unicorns'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
$newsletter_option_2->save();
|
||||||
|
$listings_data = array(
|
||||||
|
'params' => array(
|
||||||
|
'type' => Newsletter::TYPE_AUTOMATIC
|
||||||
|
),
|
||||||
|
'sort_by' => 'updated_at',
|
||||||
|
'sort_order' => 'desc',
|
||||||
|
'offset' => 0,
|
||||||
|
'limit' => 20,
|
||||||
|
'group' => 'all',
|
||||||
|
'search' => ''
|
||||||
|
);
|
||||||
|
|
||||||
|
// get "woocommerce" emails
|
||||||
|
$listings_data['params']['group'] = 'woocommerce';
|
||||||
|
$result = Newsletter::listingQuery($listings_data)->findMany();
|
||||||
|
expect($result)->count(1);
|
||||||
|
expect($result[0]->id)->equals($newsletter_1->id);
|
||||||
|
|
||||||
|
// get "unicorn" emails
|
||||||
|
$listings_data['params']['group'] = 'unicorns';
|
||||||
|
$result = Newsletter::listingQuery($listings_data)->findMany();
|
||||||
|
expect($result)->count(1);
|
||||||
|
expect($result[0]->id)->equals($newsletter_2->id);
|
||||||
|
|
||||||
|
// get all automatic emails
|
||||||
|
unset($listings_data['params']['group']);
|
||||||
|
$result = Newsletter::listingQuery($listings_data)->findMany();
|
||||||
|
expect($result)->count(2);
|
||||||
|
expect($result[0]->id)->equals($newsletter_1->id);
|
||||||
|
expect($result[1]->id)->equals($newsletter_2->id);
|
||||||
|
}
|
||||||
|
|
||||||
function _after() {
|
function _after() {
|
||||||
\ORM::raw_execute('TRUNCATE ' . NewsletterOption::$_table);
|
\ORM::raw_execute('TRUNCATE ' . NewsletterOption::$_table);
|
||||||
\ORM::raw_execute('TRUNCATE ' . Newsletter::$_table);
|
\ORM::raw_execute('TRUNCATE ' . Newsletter::$_table);
|
||||||
|
Reference in New Issue
Block a user