Fix bulk trashing/deletion of subscribers with wp_user_id = 0 [MAILPOET-2489]

This commit is contained in:
wxa
2019-11-06 14:56:20 +03:00
committed by Jack Kitterhing
parent 2654a5e8d8
commit 70c73295d7
2 changed files with 37 additions and 3 deletions

View File

@ -631,7 +631,7 @@ class Subscriber extends Model {
'WHERE `id` IN (' . 'WHERE `id` IN (' .
rtrim(str_repeat('?,', count($subscriber_ids)), ',') rtrim(str_repeat('?,', count($subscriber_ids)), ',')
. ')', . ')',
'AND `wp_user_id` IS NULL', 'AND `wp_user_id` IS NULL OR `wp_user_id` = 0',
'AND `is_woocommerce_user` = 0', 'AND `is_woocommerce_user` = 0',
]), ]),
$subscriber_ids $subscriber_ids
@ -649,7 +649,7 @@ class Subscriber extends Model {
SubscriberCustomField::deleteManySubscriberRelations($subscriber_ids); SubscriberCustomField::deleteManySubscriberRelations($subscriber_ids);
// delete subscribers (except WP Users) // delete subscribers (except WP Users)
Subscriber::whereIn('id', $subscriber_ids) Subscriber::whereIn('id', $subscriber_ids)
->whereNull('wp_user_id') ->whereRaw('`wp_user_id` IS NULL OR `wp_user_id` = 0')
->whereEqual('is_woocommerce_user', 0) ->whereEqual('is_woocommerce_user', 0)
->deleteMany(); ->deleteMany();
}); });

View File

@ -673,6 +673,25 @@ class SubscriberTest extends \MailPoetTest {
expect($total)->equals(1); expect($total)->equals(1);
} }
function testItBulkTrashesSubscribers() {
$subscriber_with_wp_user_id_zero = Subscriber::createOrUpdate([
'email' => 'some.wp.user0@mailpoet.com',
'first_name' => 'Some',
'last_name' => 'WP User',
'wp_user_id' => 0,
]);
$subscriber_with_wp_user_id = Subscriber::createOrUpdate([
'email' => 'some.wp.user@mailpoet.com',
'first_name' => 'Some',
'last_name' => 'WP User',
'wp_user_id' => 1,
]);
Subscriber::filter('bulkTrash');
$not_trashed_subscribers = Subscriber::whereNull('deleted_at')->findArray();
expect(count($not_trashed_subscribers))->equals(1);
expect($not_trashed_subscribers[0]['wp_user_id'])->equals(1);
}
function testItBulkDeletesSubscribers() { function testItBulkDeletesSubscribers() {
$segment = Segment::createOrUpdate( $segment = Segment::createOrUpdate(
[ [
@ -704,11 +723,26 @@ class SubscriberTest extends \MailPoetTest {
); );
expect(SubscriberSegment::findMany())->count(1); expect(SubscriberSegment::findMany())->count(1);
$subscriber_with_wp_user_id_zero = Subscriber::createOrUpdate([
'email' => 'some.wp.user0@mailpoet.com',
'first_name' => 'Some',
'last_name' => 'WP User',
'wp_user_id' => 0,
]);
$subscriber_with_wp_user_id = Subscriber::createOrUpdate([
'email' => 'some.wp.user@mailpoet.com',
'first_name' => 'Some',
'last_name' => 'WP User',
'wp_user_id' => 1,
]);
// associated segments and custom fields should be deleted // associated segments and custom fields should be deleted
Subscriber::filter('bulkDelete'); Subscriber::filter('bulkDelete');
expect(SubscriberCustomField::findArray())->isEmpty(); expect(SubscriberCustomField::findArray())->isEmpty();
expect(SubscriberSegment::findArray())->isEmpty(); expect(SubscriberSegment::findArray())->isEmpty();
expect(Subscriber::findArray())->isEmpty(); $not_deleted_subscribers = Subscriber::findArray();
expect(count($not_deleted_subscribers))->equals(1);
expect($not_deleted_subscribers[0]['wp_user_id'])->equals(1);
} }
function testItCanFindSubscribersInSegments() { function testItCanFindSubscribersInSegments() {