Synchronise guest woocommerce users as unconfirmed

[MAILPOET-2799]
This commit is contained in:
Pavel Dohnal
2020-03-30 16:41:40 +02:00
committed by Veljko V
parent 317257bfc4
commit d166e4b51f
2 changed files with 28 additions and 3 deletions

View File

@ -80,8 +80,14 @@ class WooCommerce {
$wcSegment = Segment::getWooCommerceSegment();
if ($wcOrder === false or $wcSegment === false) return;
$signupConfirmation = $this->settings->get('signup_confirmation');
$status = Subscriber::STATUS_UNCONFIRMED;
if ((bool)$signupConfirmation['enabled'] === false) {
$status = Subscriber::STATUS_SUBSCRIBED;
}
$insertedEmails = $this->insertSubscribersFromOrders($orderId, $status);
$insertedEmails = $this->insertSubscribersFromOrders($orderId);
if (empty($insertedEmails[0]['email'])) {
return false;
}
@ -151,7 +157,7 @@ class WooCommerce {
', $subscribersTable, $wpdb->users, $wpdb->usermeta, Source::WOOCOMMERCE_USER));
}
private function insertSubscribersFromOrders($orderId = null) {
private function insertSubscribersFromOrders($orderId = null, $status = Subscriber::STATUS_SUBSCRIBED) {
global $wpdb;
$subscribersTable = Subscriber::$_table;
$orderId = !is_null($orderId) ? (int)$orderId : null;
@ -170,7 +176,7 @@ class WooCommerce {
WHERE wppm.meta_key = "_billing_email" AND wppm.meta_value != ""
' . ($orderId ? ' AND p.ID = "' . $orderId . '"' : '') . '
ON DUPLICATE KEY UPDATE is_woocommerce_user = 1
', $subscribersTable, Subscriber::STATUS_SUBSCRIBED, Source::WOOCOMMERCE_USER));
', $subscribersTable, $status, Source::WOOCOMMERCE_USER));
return $insertedUsersEmails;
}

View File

@ -108,6 +108,7 @@ class WooCommerceTest extends \MailPoetTest {
}
public function testItSynchronizesNewGuestCustomer() {
$this->settings->set('signup_confirmation', ['enabled' => true]);
$guest = $this->insertGuestCustomer();
$hook = 'woocommerce_checkout_update_order_meta';
$this->woocommerceSegment->synchronizeGuestCustomer($guest['order_id'], $hook);
@ -117,15 +118,33 @@ class WooCommerceTest extends \MailPoetTest {
expect($subscriber)->notEmpty();
expect($subscriber->isWoocommerceUser)->equals(1);
expect($subscriber->source)->equals(Source::WOOCOMMERCE_USER);
expect($subscriber->status)->equals(Subscriber::STATUS_UNCONFIRMED);
}
public function testItSynchronizesNewGuestCustomerWithDoubleOptinDisabled() {
$this->settings->set('signup_confirmation', ['enabled' => false]);
$this->settings->resetCache();
$guest = $this->insertGuestCustomer();
$hook = 'woocommerce_checkout_update_order_meta';
$this->woocommerceSegment->synchronizeGuestCustomer($guest['order_id'], $hook);
$subscriber = Segment::getWooCommerceSegment()->subscribers()
->where('email', $guest['email'])
->findOne();
expect($subscriber)->notEmpty();
expect($subscriber->isWoocommerceUser)->equals(1);
expect($subscriber->source)->equals(Source::WOOCOMMERCE_USER);
expect($subscriber->status)->equals(Subscriber::STATUS_SUBSCRIBED);
}
public function testItSynchronizesCustomers() {
$this->settings->set('signup_confirmation', ['enabled' => true]);
$this->settings->set('mailpoet_subscribe_old_woocommerce_customers', ['dummy' => '1', 'enabled' => '1']);
$user = $this->insertRegisteredCustomer();
$guest = $this->insertGuestCustomer();
$this->woocommerceSegment->synchronizeCustomers();
$subscribersCount = $this->getSubscribersCount();
expect($subscribersCount)->equals(2);
$subscriber = Subscriber::where('email', $user->user_email)->findOne(); // phpcs:ignore Squiz.NamingConventions.ValidVariableName.NotCamelCaps
expect($subscriber->status)->equals(Subscriber::STATUS_UNCONFIRMED);
expect($subscriber->source)->equals(Source::WOOCOMMERCE_USER);