/var/www/html_us/wp-content/plugins/woocommerce/src/StoreApi/Schemas/V1/BillingAddressSchema.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
<?php
namespace Automattic\WooCommerce\StoreApi\Schemas\V1;

use 
Automattic\WooCommerce\StoreApi\Exceptions\RouteException;
use 
Automattic\WooCommerce\StoreApi\Utilities\ValidationUtils;

/**
 * BillingAddressSchema class.
 *
 * Provides a generic billing address schema for composition in other schemas.
 */
class BillingAddressSchema extends AbstractAddressSchema {
    
/**
     * The schema item name.
     *
     * @var string
     */
    
protected $title 'billing_address';

    
/**
     * The schema item identifier.
     *
     * @var string
     */
    
const IDENTIFIER 'billing-address';

    
/**
     * Term properties.
     *
     * @return array
     */
    
public function get_properties() {
        
$properties parent::get_properties();
        return 
array_merge(
            
$properties,
            [
                
'email' => [
                    
'description' => __'Email''woocommerce' ),
                    
'type'        => 'string',
                    
'context'     => [ 'view''edit' ],
                    
'required'    => true,
                ],
            ]
        );
    }

    
/**
     * Sanitize and format the given address object.
     *
     * @param array            $address Value being sanitized.
     * @param \WP_REST_Request $request The Request.
     * @param string           $param The param being sanitized.
     * @return array
     */
    
public function sanitize_callback$address$request$param ) {
        
$address parent::sanitize_callback$address$request$param );
        if ( isset( 
$address['email'] ) ) {
            
$address['email'] = sanitize_emailwp_unslash$address['email'] ) );
        }
        return 
$address;
    }

    
/**
     * Validate the given address object.
     *
     * @param array            $address Value being validated.
     * @param \WP_REST_Request $request The Request.
     * @param string           $param The param being validated.
     * @return true|\WP_Error
     */
    
public function validate_callback$address$request$param ) {
        
$errors  parent::validate_callback$address$request$param );
        
$address = (array) $address;
        
$errors  is_wp_error$errors ) ? $errors : new \WP_Error();

        if ( ! empty( 
$address['email'] ) && ! is_email$address['email'] ) ) {
            
$errors->add(
                
'invalid_email',
                
__'The provided email address is not valid''woocommerce' )
            );
        }

        return 
$errors->has_errors$errors ) ? $errors true;
    }

    
/**
     * Convert a term object into an object suitable for the response.
     *
     * @param \WC_Order|\WC_Customer $address An object with billing address.
     *
     * @throws RouteException When the invalid object types are provided.
     * @return array
     */
    
public function get_item_response$address ) {
        
$validation_util = new ValidationUtils();
        if ( ( 
$address instanceof \WC_Customer || $address instanceof \WC_Order ) ) {
            
$billing_country $address->get_billing_country();
            
$billing_state   $address->get_billing_state();

            if ( ! 
$validation_util->validate_state$billing_state$billing_country ) ) {
                
$billing_state '';
            }

            
$additional_address_fields $this->additional_fields_controller->get_all_fields_from_object$address'billing' );

            
$address_object \array_merge(
                [
                    
'first_name' => $address->get_billing_first_name(),
                    
'last_name'  => $address->get_billing_last_name(),
                    
'company'    => $address->get_billing_company(),
                    
'address_1'  => $address->get_billing_address_1(),
                    
'address_2'  => $address->get_billing_address_2(),
                    
'city'       => $address->get_billing_city(),
                    
'state'      => $billing_state,
                    
'postcode'   => $address->get_billing_postcode(),
                    
'country'    => $billing_country,
                    
'email'      => $address->get_billing_email(),
                    
'phone'      => $address->get_billing_phone(),
                ],
                
$additional_address_fields
            
);

            
// Add any missing keys from additional_fields_controller to the address response.
            
foreach ( $this->additional_fields_controller->get_address_fields_keys() as $field ) {
                if ( isset( 
$address_object$field ] ) ) {
                    continue;
                }
                
$address_object$field ] = '';
            }

            foreach ( 
$address_object as $key => $value ) {
                if ( isset( 
$this->get_properties()[ $key ]['type'] ) && 'boolean' === $this->get_properties()[ $key ]['type'] ) {
                    
$address_object$key ] = (bool) $value;
                } else {
                    
$address_object$key ] = $this->prepare_html_response$value );
                }
            }
            return 
$address_object;

        }
        throw new 
RouteException(
            
'invalid_object_type',
            
sprintf(
                
/* translators: Placeholders are class and method names */
                
__'%1$s requires an instance of %2$s or %3$s for the address''woocommerce' ),
                
'BillingAddressSchema::get_item_response',
                
'WC_Customer',
                
'WC_Order'
            
),
            
500
        
);
    }
}