<?php
namespace Automattic\WooCommerce\Blocks\Domain\Services;
use Automattic\WooCommerce\Blocks\Domain\Package;
use Automattic\WooCommerce\Blocks\Domain\Services\Email\CustomerNewAccount;
/**
* Service class implementing new create account emails used for order processing via the Block Based Checkout.
*/
class CreateAccount {
/**
* Reference to the Package instance
*
* @var Package
*/
private $package;
/**
* Constructor.
*
* @param Package $package An instance of (Woo Blocks) Package.
*/
public function __construct( Package $package ) {
$this->package = $package;
}
/**
* Init - register handlers for WooCommerce core email hooks.
*/
public function init() {
// Override core email handlers to add our new improved "new account" email.
add_action(
'woocommerce_email',
function ( $wc_emails_instance ) {
// Remove core "new account" handler; we are going to replace it.
remove_action( 'woocommerce_created_customer_notification', array( $wc_emails_instance, 'customer_new_account' ), 10, 3 );
// Add custom "new account" handler.
add_action(
'woocommerce_created_customer_notification',
function( $customer_id, $new_customer_data = array(), $password_generated = false ) use ( $wc_emails_instance ) {
// If this is a block-based signup, send a new email with password reset link (no password in email).
if ( isset( $new_customer_data['source'] ) && 'store-api' === $new_customer_data['source'] ) {
$this->customer_new_account( $customer_id, $new_customer_data );
return;
}
// Otherwise, trigger the existing legacy email (with new password inline).
$wc_emails_instance->customer_new_account( $customer_id, $new_customer_data, $password_generated );
},
10,
3
);
}
);
}
/**
* Trigger new account email.
* This is intended as a replacement to WC_Emails::customer_new_account(),
* with a set password link instead of emailing the new password in email
* content.
*
* @param int $customer_id The ID of the new customer account.
* @param array $new_customer_data Assoc array of data for the new account.
*/
public function customer_new_account( $customer_id = 0, array $new_customer_data = array() ) {
$new_account_email = new CustomerNewAccount( $this->package );
$new_account_email->trigger( $customer_id, $new_customer_data );
}
}