Mark previously added spammy WP users as unconfirmed

[MAILPOET-2134]
This commit is contained in:
Pavel Dohnal
2019-06-24 11:10:19 +02:00
committed by M. Shull
parent 951abd7645
commit 3c63b3e84d
2 changed files with 30 additions and 0 deletions

View File

@@ -2,6 +2,8 @@
namespace MailPoet\Segments;
use MailPoet\Models\ModelValidator;
use MailPoet\Models\StatisticsClicks;
use MailPoet\Models\StatisticsOpens;
use MailPoet\Models\Subscriber;
use MailPoet\Models\Segment;
use MailPoet\Models\SubscriberSegment;
@@ -91,6 +93,7 @@ class WP {
self::updateFirstNameIfMissing();
self::insertUsersToSegment();
self::removeOrphanedSubscribers();
self::markSpammyWordpressUsersAsUnconfirmed();
return true;
}
@@ -220,4 +223,17 @@ class WP {
->set('wp_user_id', null)
->delete();
}
private static function markSpammyWordpressUsersAsUnconfirmed() {
global $wpdb;
$query = '
UPDATE %s as subscribers
LEFT JOIN %s as clicks ON subscribers.id=clicks.subscriber_id
LEFT JOIN %s as opens ON subscribers.id=opens.subscriber_id
JOIN %s as usermeta ON usermeta.user_id=subscribers.wp_user_id AND usermeta.meta_key = "default_password_nag" AND usermeta.meta_value = "1"
SET `status` = "unconfirmed"
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));
}
}

View File

@@ -244,6 +244,20 @@ class WPTest extends \MailPoetTest {
expect($db_subscriber)->isEmpty();
}
function testItMarksSpammySubscribersAsUnconfirmed() {
$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,
]);
update_user_meta($id, 'default_password_nag', '1');
WP::synchronizeUsers();
$db_subscriber = Subscriber::findOne($subscriber->id);
expect($db_subscriber->status)->equals(Subscriber::STATUS_UNCONFIRMED);
}
function _before() {
parent::_before();
$this->cleanData();