/var/www/html_us/wp-content/plugins/woocommerce/src/Blocks/Domain/Services/CreateAccount.php


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 __constructPackage $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);

                
// 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 );
    }
}