diff --git a/lib/Segments/WP.php b/lib/Segments/WP.php index 039c90d367..857add0e94 100644 --- a/lib/Segments/WP.php +++ b/lib/Segments/WP.php @@ -235,5 +235,18 @@ class WP { WHERE `wp_user_id` IS NOT NULL AND `status` = "subscribed" AND `confirmed_at` IS NULL AND clicks.id IS NULL AND opens.id IS NULL '; $wpdb->query(sprintf($query, Subscriber::$_table, StatisticsClicks::$_table, StatisticsOpens::$_table, $wpdb->usermeta)); + + + $column_exists = $wpdb->query(sprintf('SHOW COLUMNS FROM `%s` LIKE "user_status"', $wpdb->users)); + if ($column_exists) { + $query = ' + UPDATE %s as subscribers + JOIN %s as users ON users.ID=subscribers.wp_user_id + SET `status` = "unconfirmed" + WHERE `status` = "subscribed" AND users.user_status = 2 + '; + $wpdb->query(sprintf($query, Subscriber::$_table, $wpdb->users)); + } + } } diff --git a/tests/integration/Segments/WPTest.php b/tests/integration/Segments/WPTest.php index 9f9643507e..fd1371ca5c 100644 --- a/tests/integration/Segments/WPTest.php +++ b/tests/integration/Segments/WPTest.php @@ -282,6 +282,23 @@ class WPTest extends \MailPoetTest { expect($db_subscriber->status)->equals(Subscriber::STATUS_UNCONFIRMED); } + function testItMarksSpammySubscribersWithUserStatus2AsUnconfirmed() { + global $wpdb; + $random_number = rand(); + $id = $this->insertUser($random_number); + $subscriber = Subscriber::createOrUpdate([ + 'email' => 'user-sync-test' . $random_number . '@example.com', + 'status' => Subscriber::STATUS_SUBSCRIBED, + 'wp_user_id' => $id, + ]); + wp_update_user(['ID' => $id, 'user_status' => 2]); + $db = \ORM::getDb(); + $db->exec(sprintf('UPDATE %s SET `user_status` = 2 WHERE ID = %s', $wpdb->users, $id)); + WP::synchronizeUsers(); + $db_subscriber = Subscriber::findOne($subscriber->id); + expect($db_subscriber->status)->equals(Subscriber::STATUS_UNCONFIRMED); + } + function _before() { parent::_before(); $this->cleanData();