diff --git a/lib/Segments/WooCommerce.php b/lib/Segments/WooCommerce.php index 3c4fb830ea..1119fa52ea 100644 --- a/lib/Segments/WooCommerce.php +++ b/lib/Segments/WooCommerce.php @@ -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; } diff --git a/tests/integration/Segments/WooCommerceTest.php b/tests/integration/Segments/WooCommerceTest.php index 2bbb430250..467c945a90 100644 --- a/tests/integration/Segments/WooCommerceTest.php +++ b/tests/integration/Segments/WooCommerceTest.php @@ -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);