diff --git a/lib/Models/Subscriber.php b/lib/Models/Subscriber.php index dbdb190432..a490f7082a 100644 --- a/lib/Models/Subscriber.php +++ b/lib/Models/Subscriber.php @@ -631,7 +631,7 @@ class Subscriber extends Model { 'WHERE `id` IN (' . 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', ]), $subscriber_ids @@ -649,7 +649,7 @@ class Subscriber extends Model { SubscriberCustomField::deleteManySubscriberRelations($subscriber_ids); // delete subscribers (except WP Users) 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) ->deleteMany(); }); diff --git a/tests/integration/Models/SubscriberTest.php b/tests/integration/Models/SubscriberTest.php index c2b21e9f40..e9cf4ccaf0 100644 --- a/tests/integration/Models/SubscriberTest.php +++ b/tests/integration/Models/SubscriberTest.php @@ -673,6 +673,25 @@ class SubscriberTest extends \MailPoetTest { 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() { $segment = Segment::createOrUpdate( [ @@ -704,11 +723,26 @@ class SubscriberTest extends \MailPoetTest { ); 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 Subscriber::filter('bulkDelete'); expect(SubscriberCustomField::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() {