1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
<?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 ); } }
|