Files
piratepoet/tests/integration/Segments/WPTest.php
2021-05-03 10:24:25 +02:00

646 lines
25 KiB
PHP

<?php
namespace MailPoet\Test\Segments;
require_once(ABSPATH . 'wp-admin/includes/user.php');
use Codeception\Stub;
use MailPoet\Entities\SubscriberEntity;
use MailPoet\Models\Segment;
use MailPoet\Models\Subscriber;
use MailPoet\Models\SubscriberSegment;
use MailPoet\Newsletter\Scheduler\WelcomeScheduler;
use MailPoet\Segments\WP;
use MailPoet\Settings\SettingsController;
use MailPoet\Subscription\Registration;
use MailPoet\WP\Functions;
use MailPoetVendor\Carbon\Carbon;
use MailPoetVendor\Idiorm\ORM;
class WPTest extends \MailPoetTest {
private $userIds = [];
/** @var SettingsController */
private $settings;
/** @var WP */
private $wpSegment;
public function _before() {
parent::_before();
$this->settings = $this->diContainer->get(SettingsController::class);
$this->wpSegment = $this->diContainer->get(WP::class);
$currentTime = Carbon::now();
Carbon::setTestNow($currentTime);
$this->cleanData();
}
public function testSynchronizeUserKeepsStatusOfOldUser() {
$randomNumber = rand();
$id = $this->insertUser($randomNumber);
$subscriber = Subscriber::createOrUpdate([
'email' => 'user-sync-test' . $randomNumber . '@example.com',
'status' => Subscriber::STATUS_SUBSCRIBED,
'wp_user_id' => $id,
]);
$this->wpSegment->synchronizeUser($id);
$dbSubscriber = Subscriber::findOne($subscriber->id);
expect($dbSubscriber->status)->equals(Subscriber::STATUS_SUBSCRIBED);
}
public function testSynchronizeUserKeepsStatusOfOldSubscriber() {
$randomNumber = rand();
$subscriber = Subscriber::createOrUpdate([
'email' => 'user-sync-test' . $randomNumber . '@example.com',
'status' => Subscriber::STATUS_SUBSCRIBED,
'wp_user_id' => null,
]);
$id = $this->insertUser($randomNumber);
$this->wpSegment->synchronizeUser($id);
$dbSubscriber = Subscriber::where('wp_user_id', $id)->findOne();
expect($dbSubscriber->status)->equals($subscriber->status);
}
public function testSynchronizeUserStatusIsSubscribedForNewUserWithSignUpConfirmationDisabled() {
$this->settings->set('signup_confirmation', ['enabled' => '0']);
$randomNumber = rand();
$id = $this->insertUser($randomNumber);
$this->wpSegment->synchronizeUser($id);
$wpSubscriber = Segment::getWPSegment()->subscribers()->where('wp_user_id', $id)->findOne();
expect($wpSubscriber->status)->equals(Subscriber::STATUS_SUBSCRIBED);
}
public function testSynchronizeUserStatusIsUnconfirmedForNewUserWithSignUpConfirmationEnabled() {
$this->settings->set('signup_confirmation', ['enabled' => '1']);
$randomNumber = rand();
$id = $this->insertUser($randomNumber);
$this->wpSegment->synchronizeUser($id);
$wpSubscriber = Segment::getWPSegment()->subscribers()->where('wp_user_id', $id)->findOne();
expect($wpSubscriber->status)->equals(Subscriber::STATUS_UNCONFIRMED);
}
public function testSynchronizeUsersStatusIsSubscribedForNewUsersWithSignUpConfirmationDisabled() {
$this->settings->set('signup_confirmation', ['enabled' => '0']);
$this->insertUser();
$this->insertUser();
$this->wpSegment->synchronizeUsers();
$subscribers = Subscriber::whereLike("email", "user-sync-test%")->findMany();
expect(count($subscribers))->equals(2);
expect($subscribers[0]->status)->equals(Subscriber::STATUS_SUBSCRIBED);
expect($subscribers[1]->status)->equals(Subscriber::STATUS_SUBSCRIBED);
}
public function testSynchronizeUsersStatusIsUnconfirmedForNewUsersWithSignUpConfirmationEnabled() {
$this->settings->set('signup_confirmation', ['enabled' => '1']);
$this->insertUser();
$this->insertUser();
$this->wpSegment->synchronizeUsers();
$subscribers = Subscriber::whereLike("email", "user-sync-test%")->findMany();
expect(count($subscribers))->equals(2);
expect($subscribers[0]->status)->equals(Subscriber::STATUS_UNCONFIRMED);
expect($subscribers[1]->status)->equals(Subscriber::STATUS_UNCONFIRMED);
}
public function testItSendsConfirmationEmailWhenSignupConfirmationAndSubscribeOnRegisterEnabled() {
$registration = $this->diContainer->get(Registration::class);
$this->settings->set('sender', [
'address' => 'sender@mailpoet.com',
'name' => 'Sender',
]);
// signup confirmation enabled, subscribe on-register enabled, checkbox in form is checked
$_POST = ['mailpoet' => ['subscribe_on_register_active' => '1', 'subscribe_on_register' => '1']];
$this->settings->set('signup_confirmation.enabled', '1');
$this->settings->set('subscribe.on_register.enabled', '1');
$randomNumber = rand();
$id = $this->insertUser($randomNumber);
$user = $this->getUser((int)$id);
$registration->onRegister([], $user['user_login'], $user['user_email']);
$this->wpSegment->synchronizeUser($id);
$wpSubscriber = Segment::getWPSegment()->subscribers()->where('wp_user_id', $id)->findOne();
expect($wpSubscriber->countConfirmations)->equals(1);
expect($wpSubscriber->status)->equals(SubscriberEntity::STATUS_UNCONFIRMED);
unset($_POST['mailpoet']);
// signup confirmation enabled, subscribe on-register enabled, checkbox in form is unchecked
$_POST = ['mailpoet' => ['subscribe_on_register_active' => '1']];
$this->settings->set('signup_confirmation.enabled', '1');
$this->settings->set('subscribe.on_register.enabled', '1');
$randomNumber = rand();
$id = $this->insertUser($randomNumber);
$user = $this->getUser((int)$id);
$registration->onRegister([], $user['user_login'], $user['user_email']);
$this->wpSegment->synchronizeUser($id);
$wpSubscriber = Segment::getWPSegment()->subscribers()->where('wp_user_id', $id)->findOne();
expect($wpSubscriber->countConfirmations)->equals(0);
expect($wpSubscriber->status)->equals(SubscriberEntity::STATUS_UNSUBSCRIBED);
unset($_POST['mailpoet']);
// signup confirmation disabled, subscribe on-register enabled
$this->settings->set('signup_confirmation.enabled', '0');
$this->settings->set('subscribe.on_register.enabled', '1');
$randomNumber = rand();
$id = $this->insertUser($randomNumber);
$this->wpSegment->synchronizeUser($id);
$user = $this->getUser((int)$id);
$registration->onRegister([], $user['user_login'], $user['user_email']);
$wpSubscriber = Segment::getWPSegment()->subscribers()->where('wp_user_id', $id)->findOne();
expect($wpSubscriber->countConfirmations)->equals(0);
expect($wpSubscriber->status)->equals(Subscriber::STATUS_SUBSCRIBED);
// signup confirmation enabled, subscribe on-register disabled
$this->settings->set('signup_confirmation.enabled', '1');
$this->settings->set('subscribe.on_register.enabled', '0');
$randomNumber = rand();
$id = $this->insertUser($randomNumber);
$this->wpSegment->synchronizeUser($id);
$wpSubscriber = Segment::getWPSegment()->subscribers()->where('wp_user_id', $id)->findOne();
expect($wpSubscriber->countConfirmations)->equals(0);
expect($wpSubscriber->status)->equals(Subscriber::STATUS_UNCONFIRMED);
}
public function testItSynchronizeNewUsers() {
$this->insertUser();
$this->insertUser();
$this->wpSegment->synchronizeUsers();
$this->insertUser();
$this->wpSegment->synchronizeUsers();
$subscribersCount = $this->getSubscribersCount();
expect($subscribersCount)->equals(3);
}
public function testItSynchronizesPresubscribedUsers() {
$randomNumber = 12345;
$subscriber = Subscriber::createOrUpdate([
'email' => 'user-sync-test' . $randomNumber . '@example.com',
'status' => Subscriber::STATUS_SUBSCRIBED,
]);
$id = $this->insertUser($randomNumber);
$this->wpSegment->synchronizeUsers();
$wpSubscriber = Segment::getWPSegment()->subscribers()->where('wp_user_id', $id)->findOne();
expect($wpSubscriber)->notEmpty();
expect($wpSubscriber->id)->equals($subscriber->id);
expect($wpSubscriber->status)->equals(Subscriber::STATUS_SUBSCRIBED);
}
public function testItSynchronizeEmails() {
$id = $this->insertUser();
$this->wpSegment->synchronizeUsers();
$this->updateWPUserEmail($id, 'user-sync-test-xx@email.com');
$this->wpSegment->synchronizeUsers();
$subscriber = Subscriber::where('wp_user_id', $id)->findOne();
expect($subscriber->email)->equals('user-sync-test-xx@email.com');
}
public function testRemovesUsersWithEmptyEmailsFromSunscribersDuringSynchronization() {
$id = $this->insertUser();
$this->wpSegment->synchronizeUsers();
$this->updateWPUserEmail($id, '');
$this->wpSegment->synchronizeUsers();
expect(Subscriber::where('wp_user_id', $id)->count())->equals(0);
$this->deleteWPUser($id);
}
public function testRemovesUsersWithInvalidEmailsFromSunscribersDuringSynchronization() {
$id = $this->insertUser();
$this->wpSegment->synchronizeUsers();
$this->updateWPUserEmail($id, 'ivalid.@email.com');
$this->wpSegment->synchronizeUsers();
expect(Subscriber::where('wp_user_id', $id)->count())->equals(0);
$this->deleteWPUser($id);
}
public function testItDoesNotSynchronizeEmptyEmailsForNewUsers() {
$id = $this->insertUser();
$this->updateWPUserEmail($id, '');
$this->wpSegment->synchronizeUsers();
$subscriber = Subscriber::where('wp_user_id', $id)->findOne();
expect($subscriber)->isEmpty();
$this->deleteWPUser($id);
}
public function testItSynchronizeFirstNames() {
$firstName = 'Very long name over 255 characters lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum';
$trucantedFirstName = substr($firstName, 0, 255);
$id = $this->insertUser();
$this->wpSegment->synchronizeUsers();
update_user_meta((int)$id, 'first_name', $firstName);
$this->wpSegment->synchronizeUsers();
$subscriber = Subscriber::where('wp_user_id', $id)->findOne();
expect($subscriber->firstName)->equals($trucantedFirstName);
}
public function testItSynchronizeLastNames() {
$lastName = 'Very long name over 255 characters lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum';
$trucantedLastName = substr($lastName, 0, 255);
$id = $this->insertUser();
$this->wpSegment->synchronizeUsers();
update_user_meta((int)$id, 'last_name', $lastName);
$this->wpSegment->synchronizeUsers();
$subscriber = Subscriber::where('wp_user_id', $id)->findOne();
expect($subscriber->lastName)->equals($trucantedLastName);
}
public function testItSynchronizeFirstNamesUsingDisplayName() {
$id = $this->insertUser();
$this->wpSegment->synchronizeUsers();
$this->updateWPUserDisplayName($id, 'First name');
$this->wpSegment->synchronizeUsers();
$subscriber = Subscriber::where('wp_user_id', $id)->findOne();
expect($subscriber->firstName)->equals('First name');
}
public function testItSynchronizeFirstNamesFromMetaNotDisplayName() {
$id = $this->insertUser();
update_user_meta((int)$id, 'first_name', 'First name');
$this->updateWPUserDisplayName($id, 'display_name');
$this->wpSegment->synchronizeUsers();
$subscriber = Subscriber::where('wp_user_id', $id)->findOne();
expect($subscriber->firstName)->equals('First name');
}
public function testItSynchronizeSegment() {
$this->insertUser();
$this->insertUser();
$this->insertUser();
$this->wpSegment->synchronizeUsers();
$subscribers = Segment::getWPSegment()->subscribers()->whereIn('wp_user_id', $this->userIds);
expect($subscribers->count())->equals(3);
}
public function testItDoesntRemoveUsersFromTrash() {
$id = $this->insertUser();
$this->wpSegment->synchronizeUsers();
$subscriber = Subscriber::where("wp_user_id", $id)->findOne();
$subscriber->deletedAt = Carbon::now();
$subscriber->save();
$this->wpSegment->synchronizeUsers();
$subscriber = Subscriber::where("wp_user_id", $id)->findOne();
expect($subscriber->deletedAt)->notNull();
}
public function testItSynchronizesDeletedWPUsersUsingHooks() {
$id = $this->insertUser();
$this->insertUser();
$this->wpSegment->synchronizeUsers();
$subscribersCount = $this->getSubscribersCount();
expect($subscribersCount)->equals(2);
wp_delete_user((int)$id);
$subscribersCount = $this->getSubscribersCount();
expect($subscribersCount)->equals(1);
}
public function testItSynchronizesNewUsersToDisabledWPSegmentAsUnconfirmedAndTrashed() {
$this->disableWpSegment();
$this->settings->set('signup_confirmation.enabled', '1');
$id = $this->insertUser();
$id2 = $this->insertUser();
$this->wpSegment->synchronizeUsers();
$subscribersCount = $this->getSubscribersCount();
expect($subscribersCount)->equals(2);
$subscriber1 = Subscriber::where("wp_user_id", $id)->findOne();
$deletedAt1 = Carbon::createFromFormat('Y-m-d H:i:s', $subscriber1->deletedAt);
assert($deletedAt1 instanceof Carbon);
expect($subscriber1->status)->equals(SubscriberEntity::STATUS_UNCONFIRMED);
expect($deletedAt1->timestamp)->equals(Carbon::now()->timestamp, 1);
$subscriber2 = Subscriber::where("wp_user_id", $id2)->findOne();
$deletedAt2 = Carbon::createFromFormat('Y-m-d H:i:s', $subscriber2->deletedAt);
assert($deletedAt2 instanceof Carbon);
expect($subscriber2->status)->equals(SubscriberEntity::STATUS_UNCONFIRMED);
expect($deletedAt2->timestamp)->equals(Carbon::now()->timestamp, 1);
}
public function testItRemovesOrphanedSubscribers() {
$this->insertUser();
$id = $this->insertUser();
$this->wpSegment->synchronizeUsers();
$this->deleteWPUser($id);
$this->wpSegment->synchronizeUsers();
$subscribers = Segment::getWPSegment()->subscribers()->whereIn('wp_user_id', $this->userIds);
expect($subscribers->count())->equals(1);
}
public function testItDoesntDeleteNonWPData() {
$this->insertUser();
// wp_user_id is null
$subscriber = Subscriber::create();
$subscriber->hydrate([
'first_name' => 'John',
'last_name' => 'John',
'email' => 'user-sync-test' . rand() . '@example.com',
]);
$subscriber->status = Subscriber::STATUS_UNCONFIRMED;
$subscriber->save();
// wp_user_id is zero
$subscriber2 = Subscriber::create();
$subscriber2->hydrate([
'first_name' => 'Mike',
'last_name' => 'Mike',
'email' => 'user-sync-test2' . rand() . '@example.com',
'wp_user_id' => 0,
]);
$subscriber2->status = Subscriber::STATUS_SUBSCRIBED;
$subscriber2->save();
// email is empty
$subscriber3 = Subscriber::create();
$subscriber3->hydrate([
'first_name' => 'Dave',
'last_name' => 'Dave',
'email' => 'user-sync-test3' . rand() . '@example.com', // need to pass validation
]);
$subscriber3->status = Subscriber::STATUS_SUBSCRIBED;
$subscriber3->save();
$this->clearEmail($subscriber3);
$this->wpSegment->synchronizeUsers();
$subscribersCount = $this->getSubscribersCount();
expect($subscribersCount)->equals(3);
$dbSubscriber = Subscriber::findOne($subscriber3->id);
expect($dbSubscriber)->notEmpty();
$subscriber3->delete();
}
public function testItRemovesSubscribersInWPSegmentWithoutWPId() {
$subscriber = Subscriber::create();
$subscriber->hydrate([
'first_name' => 'Mike',
'last_name' => 'Mike',
'email' => 'user-sync-test' . rand() . '@example.com',
'wp_user_id' => null,
]);
$subscriber->status = Subscriber::STATUS_SUBSCRIBED;
$subscriber->save();
$wpSegment = Segment::getWPSegment();
$association = SubscriberSegment::create();
$association->subscriberId = $subscriber->id;
$association->segmentId = $wpSegment->id;
$association->save();
$subscribersCount = $this->getSubscribersCount();
expect($subscribersCount)->equals(1);
$this->wpSegment->synchronizeUsers();
$subscribersCount = $this->getSubscribersCount(0);
expect($subscribersCount)->equals(0);
}
public function testItRemovesSubscribersInWPSegmentWithoutEmail() {
$id = $this->insertUser();
$this->updateWPUserEmail($id, '');
$subscriber = Subscriber::create();
$subscriber->hydrate([
'first_name' => 'Mike',
'last_name' => 'Mike',
'email' => 'user-sync-test' . rand() . '@example.com', // need to pass validation
'wp_user_id' => $id,
]);
$subscriber->status = Subscriber::STATUS_SUBSCRIBED;
$subscriber->save();
$this->clearEmail($subscriber);
$wpSegment = Segment::getWPSegment();
$association = SubscriberSegment::create();
$association->subscriberId = $subscriber->id;
$association->segmentId = $wpSegment->id;
$association->save();
$dbSubscriber = Subscriber::findOne($subscriber->id);
expect($dbSubscriber)->notEmpty();
$this->wpSegment->synchronizeUsers();
$dbSubscriber = Subscriber::findOne($subscriber->id);
expect($dbSubscriber)->isEmpty();
}
public function testItMarksSpammySubscribersAsUnconfirmed() {
$randomNumber = rand();
$id = $this->insertUser($randomNumber);
$subscriber = Subscriber::createOrUpdate([
'email' => 'user-sync-test' . $randomNumber . '@example.com',
'status' => Subscriber::STATUS_SUBSCRIBED,
'wp_user_id' => $id,
]);
update_user_meta((int)$id, 'default_password_nag', '1');
$this->wpSegment->synchronizeUsers();
$dbSubscriber = Subscriber::findOne($subscriber->id);
expect($dbSubscriber->status)->equals(Subscriber::STATUS_UNCONFIRMED);
}
public function testItMarksSpammySubscribersWithUserStatus2AsUnconfirmed() {
global $wpdb;
$columnExists = $wpdb->query(sprintf('SHOW COLUMNS FROM `%s` LIKE "user_status"', $wpdb->users));
if (!$columnExists) {
// This column is deprecated in WP, is no longer used by the core
// and either may not be present, or may be removed in the future.
return false;
}
$randomNumber = rand();
$id = $this->insertUser($randomNumber);
$subscriber = Subscriber::createOrUpdate([
'email' => 'user-sync-test' . $randomNumber . '@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));
$this->wpSegment->synchronizeUsers();
$dbSubscriber = Subscriber::findOne($subscriber->id);
expect($dbSubscriber->status)->equals(Subscriber::STATUS_UNCONFIRMED);
}
public function testItAddsNewUserToDisabledWpSegmentAsUnconfirmedAndTrashed() {
$this->disableWpSegment();
$id = $this->insertUser();
$wp = Stub::make(
$this->diContainer->get(Functions::class),
[
'currentFilter' => 'user_register',
],
$this
);
$wpSegment = new WP($wp, $this->diContainer->get(WelcomeScheduler::class));
$wpSegment->synchronizeUser($id);
$subscriber = Subscriber::where("wp_user_id", $id)->findOne();
$deletedAt = Carbon::createFromFormat('Y-m-d H:i:s', $subscriber->deletedAt);
assert($deletedAt instanceof Carbon);
expect($subscriber->status)->equals(SubscriberEntity::STATUS_UNCONFIRMED);
expect($deletedAt->timestamp)->equals(Carbon::now()->timestamp, 1);
}
public function testItDoesNotSendConfirmationEmailForNewUserWhenWPSegmentIsDisabledOnRegisterEnabled() {
$this->disableWpSegment();
$this->settings->set('sender', [
'address' => 'sender@mailpoet.com',
'name' => 'Sender',
]);
// signup confirmation enabled, subscribe on-register enabled
$this->settings->set('signup_confirmation.enabled', '1');
$this->settings->set('subscribe.on_register.enabled', '1');
$id = $this->insertUser();
$wp = $worker = Stub::make(
$this->diContainer->get(Functions::class),
[
'currentFilter' => 'user_register',
],
$this
);
$wpSegment = new WP($wp, $this->diContainer->get(WelcomeScheduler::class));
$wpSegment->synchronizeUser($id);
$wpSubscriber = Segment::getWPSegment()->subscribers()->where('wp_user_id', $id)->findOne();
expect($wpSubscriber->countConfirmations)->equals(0);
}
public function testItDoesNotTrashNewUsersWhoHaveSomeSegmentsToDisabledWPSegment() {
$this->disableWpSegment();
$randomNumber = rand();
$id = $this->insertUser($randomNumber);
$subscriber = Subscriber::createOrUpdate([
'email' => 'user-sync-test' . $randomNumber . '@example.com',
'status' => Subscriber::STATUS_SUBSCRIBED,
'wp_user_id' => null,
]);
$segment = Segment::createOrUpdate(['name' => 'Test Segment', 'description' => '']);
$subscriberSegment = SubscriberSegment::create();
$subscriberSegment->subscriberId = $subscriber->id;
$subscriberSegment->segmentId = $segment->id;
$subscriberSegment->save();
$wp = $worker = Stub::make(
$this->diContainer->get(Functions::class),
[
'currentFilter' => 'user_register',
],
$this
);
$wpSegment = new WP($wp, $this->diContainer->get(WelcomeScheduler::class));
$wpSegment->synchronizeUser($id);
$subscriber1 = Subscriber::where("wp_user_id", $id)->findOne();
expect($subscriber1->status)->equals(SubscriberEntity::STATUS_SUBSCRIBED);
expect($subscriber1->deletedAt)->null();
}
public function _after() {
$this->cleanData();
Carbon::setTestNow();
}
private function cleanData() {
ORM::raw_execute('TRUNCATE ' . Segment::$_table);
ORM::raw_execute('TRUNCATE ' . SubscriberSegment::$_table);
global $wpdb;
$db = ORM::getDb();
$db->exec(sprintf('
DELETE FROM
%s
WHERE
subscriber_id IN (select id from %s WHERE email LIKE "user-sync-test%%")
', SubscriberSegment::$_table, Subscriber::$_table));
$db->exec(sprintf('
DELETE FROM
%s
WHERE
user_id IN (select id from %s WHERE user_email LIKE "user-sync-test%%")
', $wpdb->usermeta, $wpdb->users));
$db->exec(sprintf('
DELETE FROM
%s
WHERE
user_email LIKE "user-sync-test%%"
OR user_login LIKE "user-sync-test%%"
', $wpdb->users));
$db->exec(sprintf('
DELETE FROM
%s
WHERE
email LIKE "user-sync-test%%"
', Subscriber::$_table));
}
private function getSubscribersCount($a = null) {
return Subscriber::whereLike("email", "user-sync-test%")->count();
}
/**
* Insert a user without invoking wp hooks.
* Those tests are testing user synchronisation, so we need data in wp_users table which has not been synchronised to
* mailpoet database yet. We cannot use wp_insert_user functions because they would do the sync on insert.
*
* @return string
*/
private function insertUser($number = null) {
global $wpdb;
$db = ORM::getDb();
$numberSql = !is_null($number) ? (int)$number : 'rand()';
$db->exec(sprintf('
INSERT INTO
%s (user_login, user_email, user_registered)
VALUES
(
CONCAT("user-sync-test", ' . $numberSql . '),
CONCAT("user-sync-test", ' . $numberSql . ', "@example.com"),
"2017-01-02 12:31:12"
)', $wpdb->users));
$id = $db->lastInsertId();
if (!is_string($id)) {
throw new \RuntimeException('Unexpected error when creating WP user.');
}
$this->userIds[] = $id;
return $id;
}
private function getUser(int $id): array {
global $wpdb;
return $this->entityManager->getConnection()->executeQuery('
SELECT user_login, user_email, user_registered
FROM ' . $wpdb->users . '
WHERE id = :id
', ['id' => $id])->fetch();
}
private function updateWPUserEmail($id, $email) {
global $wpdb;
$db = ORM::getDb();
$db->exec(sprintf('
UPDATE
%s
SET user_email = "%s"
WHERE
id = %s
', $wpdb->users, $email, $id));
}
private function updateWPUserDisplayName($id, $name) {
global $wpdb;
$db = ORM::getDb();
$db->exec(sprintf('
UPDATE
%s
SET display_name = "%s"
WHERE
id = %s
', $wpdb->users, $name, $id));
}
private function deleteWPUser($id) {
global $wpdb;
$db = ORM::getDb();
$db->exec(sprintf('
DELETE FROM
%s
WHERE
id = %s
', $wpdb->users, $id));
}
private function clearEmail($subscriber) {
ORM::raw_execute('
UPDATE ' . MP_SUBSCRIBERS_TABLE . '
SET `email` = "" WHERE `id` = ' . $subscriber->id
);
}
private function disableWpSegment() {
$segment = Segment::getWPSegment();
$segment->deletedAt = Carbon::now();
$segment->save();
}
}