/var/www/html_uk/wp-content/plugins/automatewoo/includes/Customers.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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
<?php
// phpcs:ignoreFile

namespace AutomateWoo;

/**
 * Customer (including guests) management class
 *
 * @class Customers
 * @since 3.0.0
 */
class Customers {


    static function 
init() {
        
$self 'AutomateWoo\Customers'/** @var $self Customers */

        
add_action'automatewoo/object/delete', [ $self'delete_customer_on_guest_delete' ] );
        
add_action'delete_user', [ $self'delete_customer_on_user_delete' ] );
        
add_action'user_register', [ $self'maybe_update_guest_customer_when_user_registers' ], );

        
add_action'clean_comment_cache', [ $self'clean_review_count_cache_on_clean_comment_cache' ] );
    }


    
/**
     * @param Model|Guest $object
     */
    
static function delete_customer_on_guest_delete$object ) {
        if ( 
$object->object_type !== 'guest' ) {
            return;
        }

        if ( 
$customer Customer_Factory::get_by_guest_id$object->get_id(), false ) ) {
            
$customer->delete();
        }
    }


    
/**
     * @param int $user_id
     */
    
static function delete_customer_on_user_delete$user_id ) {
        if ( ! 
$user_id ) {
            return;
        }

        if ( 
$customer Customer_Factory::get_by_user_id$user_idfalse ) ) {
            
$customer->delete();
        }
    }


    
/**
     * Returns true if a guest was converted.
     *
     * @param int $user_id
     * @return bool
     */
    
static function maybe_update_guest_customer_when_user_registers$user_id ) {
        
$user get_userdata$user_id );

        if ( ! 
$user || ! $user->user_email ) {
            return 
false;
        }

        
// if the guest and user have the same email address convert and delete them
        // we won't delete the guest record if the emails don't match, e.g. with a cookie matched guest
        
if ( ! $guest Guest_Factory::get_by_emailClean::email$user->user_email ) ) ) {
            return 
false;
        }

        
self::convert_guest_to_registered_customer$guest$user );
        
$guest->delete(); // clear all guest data (including cart)
        
return true;
    }


    
/**
     * Convert guest customer to registered user customer.
     *
     * @param Guest $guest
     * @param \WP_User $user
     */
    
static function convert_guest_to_registered_customer$guest$user ) {
        
$guest_customer Customer_Factory::get_by_guest_id$guest->get_id(), false );

        if ( ! 
$guest_customer ) {
            return; 
// nothing to convert
        
}

        
$user_customer Customer_Factory::get_by_user_id$user->IDfalse );

        if ( 
$user_customer ) {
            return; 
// user already exists, guest will just be deleted
        
}

        
// we have a guest customer that needs to be converted to a registered customer
        
$guest_customer->set_guest_id);
        
$guest_customer->set_user_id$user->ID );
        
$guest_customer->save();

        
$guest_customer->clear_review_count_cache();

        
do_action'automatewoo/customer/converted_guest_to_registered_customer'$guest_customer );
    }

    
/**
     * Clears persistent review count cache.
     *
     * @since 4.5
     *
     * @param int $comment_id
     */
    
static function clean_review_count_cache_on_clean_comment_cache$comment_id ) {
        
$review Review_Factory::get$comment_id );

        if ( ! 
$review ) {
            return;
        }

        
$customer $review->get_customer();

        if ( 
$customer ) {
            
$customer->clear_review_count_cache();
        }
    }


}