/var/www/html_us/wp-content/plugins/woocommerce/src/Internal/Admin/WCAdminUser.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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
<?php

namespace Automattic\WooCommerce\Internal\Admin;

/**
 * WCAdminUser Class.
 */
class WCAdminUser {

    
/**
     * Class instance.
     *
     * @var WCAdminUser instance
     */
    
protected static $instance null;

    
/**
     * Constructor.
     */
    
public function __construct() {
        
add_action'rest_api_init', array( $this'register_user_data' ) );
    }

    
/**
     * Get class instance.
     *
     * @return object Instance.
     */
    
public static function get_instance() {
        if ( 
null === self::$instance ) {
            
self::$instance = new self();
        }
        return 
self::$instance;
    }

    
/**
     * Registers WooCommerce specific user data to the WordPress user API.
     */
    
public function register_user_data() {
        
register_rest_field(
            
'user',
            
'is_super_admin',
            array(
                
'get_callback' => function( $user ) {
                    if ( ! isset( 
$user['id'] ) || === $user['id'] ) {
                        return 
false;
                    }

                    return 
is_super_admin$user['id'] );
                },
                
'schema'       => null,
            )
        );
        
register_rest_field(
            
'user',
            
'woocommerce_meta',
            array(
                
'get_callback'    => array( $this'get_user_data_values' ),
                
'update_callback' => array( $this'update_user_data_values' ),
                
'schema'          => null,
            )
        );
    }

    
/**
     * For all the registered user data fields (  Loader::get_user_data_fields ), fetch the data
     * for returning via the REST API.
     *
     * @param WP_User $user Current user.
     */
    
public function get_user_data_values$user ) {
        
$values = array();
        foreach ( 
$this->get_user_data_fields() as $field ) {
            
$values$field ] = self::get_user_data_field$user['id'], $field );
        }
        return 
$values;
    }

    
/**
     * For all the registered user data fields ( Loader::get_user_data_fields ), update the data
     * for the REST API.
     *
     * @param array   $values   The new values for the meta.
     * @param WP_User $user     The current user.
     * @param string  $field_id The field id for the user meta.
     */
    
public function update_user_data_values$values$user$field_id ) {
        if ( empty( 
$values ) || ! is_array$values ) || 'woocommerce_meta' !== $field_id ) {
            return;
        }
        
$fields  $this->get_user_data_fields();
        
$updates = array();
        foreach ( 
$values as $field => $value ) {
            if ( 
in_array$field$fieldstrue ) ) {
                
$updates$field ] = $value;
                
self::update_user_data_field$user->ID$field$value );
            }
        }
        return 
$updates;
    }

    
/**
     * We store some WooCommerce specific user meta attached to users endpoint,
     * so that we can track certain preferences or values such as the inbox activity panel last open time.
     * Additional fields can be added in the function below, and then used via wc-admin's currentUser data.
     *
     * @return array Fields to expose over the WP user endpoint.
     */
    
public function get_user_data_fields() {
        
/**
         * Filter user data fields exposed over the WordPress user endpoint.
         *
         * @since 4.0.0
         * @param array $fields Array of fields to expose over the WP user endpoint.
         */
        
return apply_filters'woocommerce_admin_get_user_data_fields', array( 'variable_product_tour_shown' ) );
    }

    
/**
     * Helper to update user data fields.
     *
     * @param int    $user_id  User ID.
     * @param string $field Field name.
     * @param mixed  $value  Field value.
     */
    
public static function update_user_data_field$user_id$field$value ) {
        
update_user_meta$user_id'woocommerce_admin_' $field$value );
    }

    
/**
     * Helper to retrieve user data fields.
     *
     * Migrates old key prefixes as well.
     *
     * @param int    $user_id  User ID.
     * @param string $field Field name.
     * @return mixed The user field value.
     */
    
public static function get_user_data_field$user_id$field ) {
        
$meta_value get_user_meta$user_id'woocommerce_admin_' $fieldtrue );

        
// Migrate old meta values (prefix changed from `wc_admin_` to `woocommerce_admin_`).
        
if ( '' === $meta_value ) {
            
$old_meta_value get_user_meta$user_id'wc_admin_' $fieldtrue );

            if ( 
'' !== $old_meta_value ) {
                
self::update_user_data_field$user_id$field$old_meta_value );
                
delete_user_meta$user_id'wc_admin_' $field );

                
$meta_value $old_meta_value;
            }
        }

        return 
$meta_value;
    }
}