Passed
Push — master ( 31f474...7d7341 )
by Kiran
10:27 queued 05:04
created
includes/gateways/class-getpaid-paypal-api.php 1 patch
Indentation   +214 added lines, -214 removed lines patch added patch discarded remove patch
@@ -10,227 +10,227 @@
 block discarded – undo
10 10
  */
11 11
 class GetPaid_PayPal_API {
12 12
 
13
-	/**
14
-	 * Retrieves the bearer token.
15
-	 *
13
+    /**
14
+     * Retrieves the bearer token.
15
+     *
16 16
      * @return string|\WP_Error
17
-	 */
18
-	public static function get_token( $mode = 'live' ) {
17
+     */
18
+    public static function get_token( $mode = 'live' ) {
19 19
 
20
-		$token = get_transient( 'getpaid_paypal_' . $mode . '_token' );
20
+        $token = get_transient( 'getpaid_paypal_' . $mode . '_token' );
21 21
 
22
-		if ( $token ) {
23
-			return $token;
24
-		}
22
+        if ( $token ) {
23
+            return $token;
24
+        }
25 25
 
26
-		$client_id  = 'live' === $mode ? wpinv_get_option( 'paypal_client_id' ) : wpinv_get_option( 'paypal_sandbox_client_id' );
27
-		$secret_key = 'live' === $mode ? wpinv_get_option( 'paypal_secret' ) : wpinv_get_option( 'paypal_sandbox_secret' );
28
-		$url        = self::get_api_url( 'v1/oauth2/token?grant_type=client_credentials', $mode );
26
+        $client_id  = 'live' === $mode ? wpinv_get_option( 'paypal_client_id' ) : wpinv_get_option( 'paypal_sandbox_client_id' );
27
+        $secret_key = 'live' === $mode ? wpinv_get_option( 'paypal_secret' ) : wpinv_get_option( 'paypal_sandbox_secret' );
28
+        $url        = self::get_api_url( 'v1/oauth2/token?grant_type=client_credentials', $mode );
29 29
 
30 30
         if ( empty( $client_id ) || empty( $secret_key ) ) {
31 31
             return new \WP_Error( 'invalid_request', 'Missing client id or secret key.', array( 'status' => 400 ) );
32 32
         }
33 33
 
34
-		$args   = array(
35
-			'method'  => 'POST',
36
-			'timeout' => 30,
37
-			'headers' => array(
38
-				'Authorization' => 'Basic ' . base64_encode( $client_id . ':' . $secret_key ), // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_encode
39
-				'Accept'        => 'application/json',
40
-				'Content-Type'  => 'application/x-www-form-urlencoded',
41
-			),
42
-		);
43
-
44
-		$response = self::response_or_error( wp_remote_post( $url, $args ) );
45
-
46
-		if ( is_wp_error( $response ) ) {
47
-			return $response;
48
-		}
49
-
50
-		if ( ! isset( $response->access_token ) ) {
51
-			return new \WP_Error( 'invalid_request', 'Could not create token.', array( 'status' => 400 ) );
52
-		}
53
-
54
-		set_transient( 'getpaid_paypal_' . $mode . '_token', $response->access_token, $response->expires_in - 600 );
55
-		return $response->access_token;
56
-	}
57
-
58
-	/**
59
-	 * Retrieves the PayPal API URL.
60
-	 *
61
-	 * @param string $endpoint
62
-	 * @return string
63
-	 */
64
-	public static function get_api_url( $endpoint = '', $mode = 'live'  ) {
65
-		$endpoint = ltrim( $endpoint, '/' );
66
-		return 'live' === $mode ? 'https://api-m.paypal.com/' . $endpoint : 'https://api-m.sandbox.paypal.com/' . $endpoint;
67
-	}
68
-
69
-	/**
70
-	 * Handles a post request.
71
-	 *
72
-	 * @param string $path The path to the endpoint.
73
-	 * @param mixed $data The data to send.
74
-	 * @param string $method The method to use.
75
-	 *
76
-	 * @return true|\WP_Error
77
-	 */
78
-	public static function post( $path, $data, $mode = 'live', $method = 'POST' ) {
79
-
80
-		$access_token = self::get_token( $mode );
81
-
82
-		if ( is_wp_error( $access_token ) ) {
83
-			return $access_token;
84
-		}
85
-
86
-		$url  = self::get_api_url( $path, $mode );
87
-		$args = array(
88
-			'method'  => $method,
89
-			'headers' => array(
90
-				'Authorization' => 'Bearer ' . $access_token,
91
-				'Content-Type'  => 'application/json',
92
-			),
93
-		);
94
-
95
-		if( ! empty( $data )) {
96
-			$args['body'] = wp_json_encode( $data );
97
-		}
98
-
99
-		return self::response_or_error( wp_remote_post( $url, $args ) );
100
-	}
101
-
102
-	/**
103
-	 * Handles a get request.
104
-	 *
105
-	 * @param string $path The path to the endpoint.
106
-	 * @param string $method
107
-	 * @return object|\WP_Error
108
-	 */
109
-	public static function get( $path, $mode = 'live', $method = 'GET' ) {
110
-
111
-		$access_token = self::get_token( $mode );
112
-
113
-		if ( is_wp_error( $access_token ) ) {
114
-			return $access_token;
115
-		}
116
-
117
-		$url  = self::get_api_url( $path, $mode );
118
-		$args = array(
119
-			'method'  => $method,
120
-			'headers' => array(
121
-				'Authorization' => 'Bearer ' . $access_token,
122
-			),
123
-		);
124
-
125
-		return self::response_or_error( wp_remote_get( $url, $args ) );
126
-	}
127
-
128
-	/**
129
-	 * Returns the response body
130
-	 *
131
-	 * @since 1.0.0
132
-	 * @version 1.0.0
133
-	 * @param \WP_Error|array $response
134
-	 * @return \WP_Error|object
135
-	 */
136
-	public static function response_or_error( $response ) {
137
-
138
-		if ( is_wp_error( $response ) ) {
139
-			return new \WP_Error( 'paypal_error', __( 'There was a problem connecting to the PayPal API endpoint.', 'invoicing' ) );
140
-		}
141
-
142
-		if ( empty( $response['body'] ) ) {
143
-			return true;
144
-		}
145
-
146
-		$response_body = json_decode( wp_remote_retrieve_body( $response ) );
147
-
148
-		if ( wp_remote_retrieve_response_code( $response ) > 299 ) {
149
-
150
-			// Normal errors.
151
-			if ( $response_body && isset( $response_body->message ) ) {
152
-				$error_message = $response_body->message;
153
-
154
-			// Identity errors.
155
-			} elseif ( $response_body && isset( $response_body->error_description ) ) {
156
-				$error_message = $response_body->error_description;
157
-				return new \WP_Error( 'paypal_error', wp_kses_post( $response_body->error_description ) );
158
-			} else {
159
-				$error_message = __( 'There was an error connecting to the PayPal API endpoint.', 'invoicing' );
160
-			}
161
-
162
-			return new \WP_Error( 'paypal_error', $error_message );
163
-		}
164
-
165
-		return $response_body;
166
-	}
167
-
168
-	/**
169
-	 * Fetches an order.
170
-	 *
171
-	 * @since 1.0.0
172
-	 * @version 1.0.0
173
-	 * @param string $order_id
174
-	 * @link https://developer.paypal.com/docs/api/orders/v2/#orders_get
175
-	 * @return \WP_Error|object
176
-	 */
177
-	public static function get_order( $order_id, $mode = 'live' ) {
178
-		return self::get( '/v2/checkout/orders/' . $order_id, $mode );
179
-	}
180
-
181
-	/**
182
-	 * Fetches a subscription.
183
-	 *
184
-	 * @since 1.0.0
185
-	 * @version 1.0.0
186
-	 * @param string $subscription_id
187
-	 * @link https://developer.paypal.com/docs/api/subscriptions/v1/#subscriptions_get
188
-	 * @return \WP_Error|object
189
-	 */
190
-	public static function get_subscription( $subscription_id, $mode = 'live' ) {
191
-		return self::get( '/v1/billing/subscriptions/' . $subscription_id, $mode );
192
-	}
193
-
194
-	/**
195
-	 * Fetches a subscription's latest transactions (limits search to last one day).
196
-	 *
197
-	 * @since 1.0.0
198
-	 * @version 1.0.0
199
-	 * @param string $subscription_id
200
-	 * @link https://developer.paypal.com/docs/api/subscriptions/v1/#subscriptions_transactions
201
-	 * @return \WP_Error|object
202
-	 */
203
-	public static function get_subscription_transaction( $subscription_id, $mode = 'live' ) {
204
-		$start_time = gmdate( 'Y-m-d\TH:i:s\Z', strtotime( '-1 day' ) );
205
-		$end_time   = gmdate( 'Y-m-d\TH:i:s\Z' );
206
-		return self::get( "/v1/billing/subscriptions/$subscription_id/transactions?start_time=$start_time&end_time=$end_time", $mode );
207
-	}
208
-
209
-	/**
210
-	 * Refunds a capture.
211
-	 *
212
-	 * @since 1.0.0
213
-	 * @version 1.0.0
214
-	 * @param string $capture_id
215
-	 * @param array  $args
216
-	 * @link https://developer.paypal.com/docs/api/payments/v2/#captures_refund
217
-	 * @return \WP_Error|object
218
-	 */
219
-	public static function refund_capture( $capture_id, $args = array(), $mode = 'live' ) {
220
-		return self::post( '/v2/payments/captures/' . $capture_id . '/refund', $args, $mode );
221
-	}
222
-
223
-	/**
224
-	 * Cancels a subscription.
225
-	 *
226
-	 * @since 2.8.24
227
-	 * @version 2.8.24
228
-	 * @param string $subscription_id
229
-	 * @param array  $args
230
-	 * @link https://developer.paypal.com/docs/api/subscriptions/v1/#subscriptions_cancel
231
-	 * @return \WP_Error|object
232
-	 */
233
-	public static function cancel_subscription( $subscription_id, $args = array(), $mode = 'live' ) {
234
-		return self::post( '/v1/billing/subscriptions/' . $subscription_id . '/cancel', $args, $mode );
235
-	}
34
+        $args   = array(
35
+            'method'  => 'POST',
36
+            'timeout' => 30,
37
+            'headers' => array(
38
+                'Authorization' => 'Basic ' . base64_encode( $client_id . ':' . $secret_key ), // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_encode
39
+                'Accept'        => 'application/json',
40
+                'Content-Type'  => 'application/x-www-form-urlencoded',
41
+            ),
42
+        );
43
+
44
+        $response = self::response_or_error( wp_remote_post( $url, $args ) );
45
+
46
+        if ( is_wp_error( $response ) ) {
47
+            return $response;
48
+        }
49
+
50
+        if ( ! isset( $response->access_token ) ) {
51
+            return new \WP_Error( 'invalid_request', 'Could not create token.', array( 'status' => 400 ) );
52
+        }
53
+
54
+        set_transient( 'getpaid_paypal_' . $mode . '_token', $response->access_token, $response->expires_in - 600 );
55
+        return $response->access_token;
56
+    }
57
+
58
+    /**
59
+     * Retrieves the PayPal API URL.
60
+     *
61
+     * @param string $endpoint
62
+     * @return string
63
+     */
64
+    public static function get_api_url( $endpoint = '', $mode = 'live'  ) {
65
+        $endpoint = ltrim( $endpoint, '/' );
66
+        return 'live' === $mode ? 'https://api-m.paypal.com/' . $endpoint : 'https://api-m.sandbox.paypal.com/' . $endpoint;
67
+    }
68
+
69
+    /**
70
+     * Handles a post request.
71
+     *
72
+     * @param string $path The path to the endpoint.
73
+     * @param mixed $data The data to send.
74
+     * @param string $method The method to use.
75
+     *
76
+     * @return true|\WP_Error
77
+     */
78
+    public static function post( $path, $data, $mode = 'live', $method = 'POST' ) {
79
+
80
+        $access_token = self::get_token( $mode );
81
+
82
+        if ( is_wp_error( $access_token ) ) {
83
+            return $access_token;
84
+        }
85
+
86
+        $url  = self::get_api_url( $path, $mode );
87
+        $args = array(
88
+            'method'  => $method,
89
+            'headers' => array(
90
+                'Authorization' => 'Bearer ' . $access_token,
91
+                'Content-Type'  => 'application/json',
92
+            ),
93
+        );
94
+
95
+        if( ! empty( $data )) {
96
+            $args['body'] = wp_json_encode( $data );
97
+        }
98
+
99
+        return self::response_or_error( wp_remote_post( $url, $args ) );
100
+    }
101
+
102
+    /**
103
+     * Handles a get request.
104
+     *
105
+     * @param string $path The path to the endpoint.
106
+     * @param string $method
107
+     * @return object|\WP_Error
108
+     */
109
+    public static function get( $path, $mode = 'live', $method = 'GET' ) {
110
+
111
+        $access_token = self::get_token( $mode );
112
+
113
+        if ( is_wp_error( $access_token ) ) {
114
+            return $access_token;
115
+        }
116
+
117
+        $url  = self::get_api_url( $path, $mode );
118
+        $args = array(
119
+            'method'  => $method,
120
+            'headers' => array(
121
+                'Authorization' => 'Bearer ' . $access_token,
122
+            ),
123
+        );
124
+
125
+        return self::response_or_error( wp_remote_get( $url, $args ) );
126
+    }
127
+
128
+    /**
129
+     * Returns the response body
130
+     *
131
+     * @since 1.0.0
132
+     * @version 1.0.0
133
+     * @param \WP_Error|array $response
134
+     * @return \WP_Error|object
135
+     */
136
+    public static function response_or_error( $response ) {
137
+
138
+        if ( is_wp_error( $response ) ) {
139
+            return new \WP_Error( 'paypal_error', __( 'There was a problem connecting to the PayPal API endpoint.', 'invoicing' ) );
140
+        }
141
+
142
+        if ( empty( $response['body'] ) ) {
143
+            return true;
144
+        }
145
+
146
+        $response_body = json_decode( wp_remote_retrieve_body( $response ) );
147
+
148
+        if ( wp_remote_retrieve_response_code( $response ) > 299 ) {
149
+
150
+            // Normal errors.
151
+            if ( $response_body && isset( $response_body->message ) ) {
152
+                $error_message = $response_body->message;
153
+
154
+            // Identity errors.
155
+            } elseif ( $response_body && isset( $response_body->error_description ) ) {
156
+                $error_message = $response_body->error_description;
157
+                return new \WP_Error( 'paypal_error', wp_kses_post( $response_body->error_description ) );
158
+            } else {
159
+                $error_message = __( 'There was an error connecting to the PayPal API endpoint.', 'invoicing' );
160
+            }
161
+
162
+            return new \WP_Error( 'paypal_error', $error_message );
163
+        }
164
+
165
+        return $response_body;
166
+    }
167
+
168
+    /**
169
+     * Fetches an order.
170
+     *
171
+     * @since 1.0.0
172
+     * @version 1.0.0
173
+     * @param string $order_id
174
+     * @link https://developer.paypal.com/docs/api/orders/v2/#orders_get
175
+     * @return \WP_Error|object
176
+     */
177
+    public static function get_order( $order_id, $mode = 'live' ) {
178
+        return self::get( '/v2/checkout/orders/' . $order_id, $mode );
179
+    }
180
+
181
+    /**
182
+     * Fetches a subscription.
183
+     *
184
+     * @since 1.0.0
185
+     * @version 1.0.0
186
+     * @param string $subscription_id
187
+     * @link https://developer.paypal.com/docs/api/subscriptions/v1/#subscriptions_get
188
+     * @return \WP_Error|object
189
+     */
190
+    public static function get_subscription( $subscription_id, $mode = 'live' ) {
191
+        return self::get( '/v1/billing/subscriptions/' . $subscription_id, $mode );
192
+    }
193
+
194
+    /**
195
+     * Fetches a subscription's latest transactions (limits search to last one day).
196
+     *
197
+     * @since 1.0.0
198
+     * @version 1.0.0
199
+     * @param string $subscription_id
200
+     * @link https://developer.paypal.com/docs/api/subscriptions/v1/#subscriptions_transactions
201
+     * @return \WP_Error|object
202
+     */
203
+    public static function get_subscription_transaction( $subscription_id, $mode = 'live' ) {
204
+        $start_time = gmdate( 'Y-m-d\TH:i:s\Z', strtotime( '-1 day' ) );
205
+        $end_time   = gmdate( 'Y-m-d\TH:i:s\Z' );
206
+        return self::get( "/v1/billing/subscriptions/$subscription_id/transactions?start_time=$start_time&end_time=$end_time", $mode );
207
+    }
208
+
209
+    /**
210
+     * Refunds a capture.
211
+     *
212
+     * @since 1.0.0
213
+     * @version 1.0.0
214
+     * @param string $capture_id
215
+     * @param array  $args
216
+     * @link https://developer.paypal.com/docs/api/payments/v2/#captures_refund
217
+     * @return \WP_Error|object
218
+     */
219
+    public static function refund_capture( $capture_id, $args = array(), $mode = 'live' ) {
220
+        return self::post( '/v2/payments/captures/' . $capture_id . '/refund', $args, $mode );
221
+    }
222
+
223
+    /**
224
+     * Cancels a subscription.
225
+     *
226
+     * @since 2.8.24
227
+     * @version 2.8.24
228
+     * @param string $subscription_id
229
+     * @param array  $args
230
+     * @link https://developer.paypal.com/docs/api/subscriptions/v1/#subscriptions_cancel
231
+     * @return \WP_Error|object
232
+     */
233
+    public static function cancel_subscription( $subscription_id, $args = array(), $mode = 'live' ) {
234
+        return self::post( '/v1/billing/subscriptions/' . $subscription_id . '/cancel', $args, $mode );
235
+    }
236 236
 }
Please login to merge, or discard this patch.
includes/gateways/class-getpaid-paypal-gateway.php 1 patch
Indentation   +508 added lines, -508 removed lines patch added patch discarded remove patch
@@ -13,103 +13,103 @@  discard block
 block discarded – undo
13 13
 class GetPaid_Paypal_Gateway extends GetPaid_Payment_Gateway {
14 14
 
15 15
     /**
16
-	 * Payment method id.
17
-	 *
18
-	 * @var string
19
-	 */
16
+     * Payment method id.
17
+     *
18
+     * @var string
19
+     */
20 20
     public $id = 'paypal';
21 21
 
22 22
     /**
23
-	 * An array of features that this gateway supports.
24
-	 *
25
-	 * @var array
26
-	 */
23
+     * An array of features that this gateway supports.
24
+     *
25
+     * @var array
26
+     */
27 27
     protected $supports = array( 'subscription', 'sandbox', 'single_subscription_group', 'refunds' );
28 28
 
29 29
     /**
30
-	 * Payment method order.
31
-	 *
32
-	 * @var int
33
-	 */
30
+     * Payment method order.
31
+     *
32
+     * @var int
33
+     */
34 34
     public $order = 1;
35 35
 
36 36
     /**
37
-	 * Stores line items to send to PayPal.
38
-	 *
39
-	 * @var array
40
-	 */
37
+     * Stores line items to send to PayPal.
38
+     *
39
+     * @var array
40
+     */
41 41
     protected $line_items = array();
42 42
 
43 43
     /**
44
-	 * Endpoint for requests from PayPal.
45
-	 *
46
-	 * @var string
47
-	 */
48
-	protected $notify_url;
44
+     * Endpoint for requests from PayPal.
45
+     *
46
+     * @var string
47
+     */
48
+    protected $notify_url;
49 49
 
50
-	/**
51
-	 * Endpoint for requests to PayPal.
52
-	 *
53
-	 * @var string
54
-	 */
50
+    /**
51
+     * Endpoint for requests to PayPal.
52
+     *
53
+     * @var string
54
+     */
55 55
     protected $endpoint;
56 56
 
57 57
     /**
58
-	 * Currencies this gateway is allowed for.
59
-	 *
60
-	 * @var array
61
-	 */
62
-	public $currencies = array( 'AUD', 'BRL', 'CAD', 'MXN', 'NZD', 'HKD', 'SGD', 'USD', 'EUR', 'JPY', 'TRY', 'NOK', 'CZK', 'DKK', 'HUF', 'ILS', 'MYR', 'PHP', 'PLN', 'SEK', 'CHF', 'TWD', 'THB', 'GBP', 'RMB', 'RUB', 'INR' );
58
+     * Currencies this gateway is allowed for.
59
+     *
60
+     * @var array
61
+     */
62
+    public $currencies = array( 'AUD', 'BRL', 'CAD', 'MXN', 'NZD', 'HKD', 'SGD', 'USD', 'EUR', 'JPY', 'TRY', 'NOK', 'CZK', 'DKK', 'HUF', 'ILS', 'MYR', 'PHP', 'PLN', 'SEK', 'CHF', 'TWD', 'THB', 'GBP', 'RMB', 'RUB', 'INR' );
63 63
 
64 64
     /**
65
-	 * URL to view a transaction.
66
-	 *
67
-	 * @var string
68
-	 */
65
+     * URL to view a transaction.
66
+     *
67
+     * @var string
68
+     */
69 69
     public $view_transaction_url = 'https://www.{sandbox}paypal.com/activity/payment/%s';
70 70
 
71 71
     /**
72
-	 * URL to view a subscription.
73
-	 *
74
-	 * @var string
75
-	 */
76
-	public $view_subscription_url = 'https://www.{sandbox}paypal.com/cgi-bin/webscr?cmd=_profile-recurring-payments&encrypted_profile_id=%s';
72
+     * URL to view a subscription.
73
+     *
74
+     * @var string
75
+     */
76
+    public $view_subscription_url = 'https://www.{sandbox}paypal.com/cgi-bin/webscr?cmd=_profile-recurring-payments&encrypted_profile_id=%s';
77 77
 
78 78
     /**
79
-	 * Class constructor.
80
-	 */
81
-	public function __construct() {
82
-		parent::__construct();
79
+     * Class constructor.
80
+     */
81
+    public function __construct() {
82
+        parent::__construct();
83 83
 
84 84
         $this->title                = __( 'PayPal Standard', 'invoicing' );
85 85
         $this->method_title         = __( 'PayPal Standard', 'invoicing' );
86 86
         $this->checkout_button_text = __( 'Proceed to PayPal', 'invoicing' );
87 87
         $this->notify_url           = wpinv_get_ipn_url( $this->id );
88 88
 
89
-		add_filter( 'wpinv_subscription_cancel_url', array( $this, 'filter_cancel_subscription_url' ), 10, 2 );
90
-		add_filter( 'getpaid_paypal_args', array( $this, 'process_subscription' ), 10, 2 );
91
-		add_filter( 'getpaid_get_paypal_connect_url', array( $this, 'maybe_get_connect_url' ), 10, 2 );
92
-		add_action( 'getpaid_authenticated_admin_action_connect_paypal', array( $this, 'connect_paypal' ) );
93
-		add_action( 'wpinv_paypal_connect', array( $this, 'display_connect_buttons' ) );
94
-
95
-		if ( $this->enabled ) {
96
-			add_filter( 'getpaid_paypal_sandbox_notice', array( $this, 'sandbox_notice' ) );
97
-			add_action( 'getpaid_paypal_subscription_cancelled', array( $this, 'subscription_cancelled' ) );
98
-			add_action( 'getpaid_delete_subscription', array( $this, 'subscription_cancelled' ) );
99
-			add_action( 'getpaid_refund_invoice_remotely', array( $this, 'refund_invoice' ) );
100
-		}
89
+        add_filter( 'wpinv_subscription_cancel_url', array( $this, 'filter_cancel_subscription_url' ), 10, 2 );
90
+        add_filter( 'getpaid_paypal_args', array( $this, 'process_subscription' ), 10, 2 );
91
+        add_filter( 'getpaid_get_paypal_connect_url', array( $this, 'maybe_get_connect_url' ), 10, 2 );
92
+        add_action( 'getpaid_authenticated_admin_action_connect_paypal', array( $this, 'connect_paypal' ) );
93
+        add_action( 'wpinv_paypal_connect', array( $this, 'display_connect_buttons' ) );
94
+
95
+        if ( $this->enabled ) {
96
+            add_filter( 'getpaid_paypal_sandbox_notice', array( $this, 'sandbox_notice' ) );
97
+            add_action( 'getpaid_paypal_subscription_cancelled', array( $this, 'subscription_cancelled' ) );
98
+            add_action( 'getpaid_delete_subscription', array( $this, 'subscription_cancelled' ) );
99
+            add_action( 'getpaid_refund_invoice_remotely', array( $this, 'refund_invoice' ) );
100
+        }
101 101
     }
102 102
 
103 103
     /**
104
-	 * Process Payment.
105
-	 *
106
-	 *
107
-	 * @param WPInv_Invoice $invoice Invoice.
108
-	 * @param array $submission_data Posted checkout fields.
109
-	 * @param GetPaid_Payment_Form_Submission $submission Checkout submission.
110
-	 * @return array
111
-	 */
112
-	public function process_payment( $invoice, $submission_data, $submission ) {
104
+     * Process Payment.
105
+     *
106
+     *
107
+     * @param WPInv_Invoice $invoice Invoice.
108
+     * @param array $submission_data Posted checkout fields.
109
+     * @param GetPaid_Payment_Form_Submission $submission Checkout submission.
110
+     * @return array
111
+     */
112
+    public function process_payment( $invoice, $submission_data, $submission ) {
113 113
 
114 114
         // Get redirect url.
115 115
         $paypal_redirect = $this->get_request_url( $invoice );
@@ -132,15 +132,15 @@  discard block
 block discarded – undo
132 132
     }
133 133
 
134 134
     /**
135
-	 * Get the PayPal request URL for an invoice.
136
-	 *
137
-	 * @param  WPInv_Invoice $invoice Invoice object.
138
-	 * @return string
139
-	 */
140
-	public function get_request_url( $invoice ) {
135
+     * Get the PayPal request URL for an invoice.
136
+     *
137
+     * @param  WPInv_Invoice $invoice Invoice object.
138
+     * @return string
139
+     */
140
+    public function get_request_url( $invoice ) {
141 141
 
142 142
         // Endpoint for this request
143
-		$this->endpoint    = $this->is_sandbox( $invoice ) ? 'https://www.sandbox.paypal.com/cgi-bin/webscr?test_ipn=1&' : 'https://www.paypal.com/cgi-bin/webscr?';
143
+        $this->endpoint    = $this->is_sandbox( $invoice ) ? 'https://www.sandbox.paypal.com/cgi-bin/webscr?test_ipn=1&' : 'https://www.paypal.com/cgi-bin/webscr?';
144 144
 
145 145
         // Retrieve paypal args.
146 146
         $paypal_args       = map_deep( $this->get_paypal_args( $invoice ), 'urlencode' );
@@ -153,45 +153,45 @@  discard block
 block discarded – undo
153 153
 
154 154
         return add_query_arg( $paypal_args, $this->endpoint );
155 155
 
156
-	}
156
+    }
157 157
 
158 158
     /**
159
-	 * Get PayPal Args for passing to PP.
160
-	 *
161
-	 * @param  WPInv_Invoice $invoice Invoice object.
162
-	 * @return array
163
-	 */
164
-	protected function get_paypal_args( $invoice ) {
159
+     * Get PayPal Args for passing to PP.
160
+     *
161
+     * @param  WPInv_Invoice $invoice Invoice object.
162
+     * @return array
163
+     */
164
+    protected function get_paypal_args( $invoice ) {
165 165
 
166 166
         // Whether or not to send the line items as one item.
167
-		$force_one_line_item = apply_filters( 'getpaid_paypal_force_one_line_item', true, $invoice );
168
-
169
-		if ( $invoice->is_recurring() || ( wpinv_use_taxes() && wpinv_prices_include_tax() ) ) {
170
-			$force_one_line_item = true;
171
-		}
172
-
173
-		$paypal_args = apply_filters(
174
-			'getpaid_paypal_args',
175
-			array_merge(
176
-				$this->get_transaction_args( $invoice ),
177
-				$this->get_line_item_args( $invoice, $force_one_line_item )
178
-			),
179
-			$invoice
180
-		);
181
-
182
-		return $this->fix_request_length( $invoice, $paypal_args );
167
+        $force_one_line_item = apply_filters( 'getpaid_paypal_force_one_line_item', true, $invoice );
168
+
169
+        if ( $invoice->is_recurring() || ( wpinv_use_taxes() && wpinv_prices_include_tax() ) ) {
170
+            $force_one_line_item = true;
171
+        }
172
+
173
+        $paypal_args = apply_filters(
174
+            'getpaid_paypal_args',
175
+            array_merge(
176
+                $this->get_transaction_args( $invoice ),
177
+                $this->get_line_item_args( $invoice, $force_one_line_item )
178
+            ),
179
+            $invoice
180
+        );
181
+
182
+        return $this->fix_request_length( $invoice, $paypal_args );
183 183
     }
184 184
 
185 185
     /**
186
-	 * Get transaction args for paypal request.
187
-	 *
188
-	 * @param WPInv_Invoice $invoice Invoice object.
189
-	 * @return array
190
-	 */
191
-	protected function get_transaction_args( $invoice ) {
186
+     * Get transaction args for paypal request.
187
+     *
188
+     * @param WPInv_Invoice $invoice Invoice object.
189
+     * @return array
190
+     */
191
+    protected function get_transaction_args( $invoice ) {
192 192
 
193
-		$email = $this->is_sandbox( $invoice ) ? wpinv_get_option( 'paypal_sandbox_email', wpinv_get_option( 'paypal_email', '' ) ) : wpinv_get_option( 'paypal_email', '' );
194
-		return array(
193
+        $email = $this->is_sandbox( $invoice ) ? wpinv_get_option( 'paypal_sandbox_email', wpinv_get_option( 'paypal_email', '' ) ) : wpinv_get_option( 'paypal_email', '' );
194
+        return array(
195 195
             'cmd'           => '_cart',
196 196
             'business'      => $email,
197 197
             'no_shipping'   => '1',
@@ -216,16 +216,16 @@  discard block
 block discarded – undo
216 216
     }
217 217
 
218 218
     /**
219
-	 * Get line item args for paypal request.
220
-	 *
221
-	 * @param  WPInv_Invoice $invoice Invoice object.
222
-	 * @param  bool     $force_one_line_item Create only one item for this invoice.
223
-	 * @return array
224
-	 */
225
-	protected function get_line_item_args( $invoice, $force_one_line_item = false ) {
219
+     * Get line item args for paypal request.
220
+     *
221
+     * @param  WPInv_Invoice $invoice Invoice object.
222
+     * @param  bool     $force_one_line_item Create only one item for this invoice.
223
+     * @return array
224
+     */
225
+    protected function get_line_item_args( $invoice, $force_one_line_item = false ) {
226 226
 
227 227
         // Maybe send invoice as a single item.
228
-		if ( $force_one_line_item ) {
228
+        if ( $force_one_line_item ) {
229 229
             return $this->get_line_item_args_single_item( $invoice );
230 230
         }
231 231
 
@@ -245,134 +245,134 @@  discard block
 block discarded – undo
245 245
             $line_item_args['discount_amount_cart'] = wpinv_sanitize_amount( (float) $invoice->get_total_discount(), 2 );
246 246
         }
247 247
 
248
-		return array_merge( $line_item_args, $this->get_line_items() );
248
+        return array_merge( $line_item_args, $this->get_line_items() );
249 249
 
250 250
     }
251 251
 
252 252
     /**
253
-	 * Get line item args for paypal request as a single line item.
254
-	 *
255
-	 * @param  WPInv_Invoice $invoice Invoice object.
256
-	 * @return array
257
-	 */
258
-	protected function get_line_item_args_single_item( $invoice ) {
259
-		$this->delete_line_items();
253
+     * Get line item args for paypal request as a single line item.
254
+     *
255
+     * @param  WPInv_Invoice $invoice Invoice object.
256
+     * @return array
257
+     */
258
+    protected function get_line_item_args_single_item( $invoice ) {
259
+        $this->delete_line_items();
260 260
 
261 261
         $item_name = wp_sprintf( __( 'Invoice %s', 'invoicing' ), $invoice->get_number() );
262
-		$this->add_line_item( $item_name, 1, wpinv_round_amount( (float) $invoice->get_total(), 2, true ), $invoice->get_id() );
262
+        $this->add_line_item( $item_name, 1, wpinv_round_amount( (float) $invoice->get_total(), 2, true ), $invoice->get_id() );
263 263
 
264
-		return $this->get_line_items();
264
+        return $this->get_line_items();
265 265
     }
266 266
 
267 267
     /**
268
-	 * Return all line items.
269
-	 */
270
-	protected function get_line_items() {
271
-		return $this->line_items;
272
-	}
268
+     * Return all line items.
269
+     */
270
+    protected function get_line_items() {
271
+        return $this->line_items;
272
+    }
273 273
 
274 274
     /**
275
-	 * Remove all line items.
276
-	 */
277
-	protected function delete_line_items() {
278
-		$this->line_items = array();
275
+     * Remove all line items.
276
+     */
277
+    protected function delete_line_items() {
278
+        $this->line_items = array();
279 279
     }
280 280
 
281 281
     /**
282
-	 * Prepare line items to send to paypal.
283
-	 *
284
-	 * @param  WPInv_Invoice $invoice Invoice object.
285
-	 */
286
-	protected function prepare_line_items( $invoice ) {
287
-		$this->delete_line_items();
288
-
289
-		// Items.
290
-		foreach ( $invoice->get_items() as $item ) {
291
-			$amount   = $item->get_price();
292
-			$quantity = $invoice->get_template() == 'amount' ? 1 : $item->get_quantity();
293
-			$this->add_line_item( $item->get_raw_name(), $quantity, $amount, $item->get_id() );
282
+     * Prepare line items to send to paypal.
283
+     *
284
+     * @param  WPInv_Invoice $invoice Invoice object.
285
+     */
286
+    protected function prepare_line_items( $invoice ) {
287
+        $this->delete_line_items();
288
+
289
+        // Items.
290
+        foreach ( $invoice->get_items() as $item ) {
291
+            $amount   = $item->get_price();
292
+            $quantity = $invoice->get_template() == 'amount' ? 1 : $item->get_quantity();
293
+            $this->add_line_item( $item->get_raw_name(), $quantity, $amount, $item->get_id() );
294 294
         }
295 295
 
296 296
         // Fees.
297
-		foreach ( $invoice->get_fees() as $fee => $data ) {
297
+        foreach ( $invoice->get_fees() as $fee => $data ) {
298 298
             $this->add_line_item( $fee, 1, wpinv_sanitize_amount( $data['initial_fee'] ) );
299 299
         }
300 300
 
301 301
     }
302 302
 
303 303
     /**
304
-	 * Add PayPal Line Item.
305
-	 *
306
-	 * @param  string $item_name Item name.
307
-	 * @param  float    $quantity Item quantity.
308
-	 * @param  float  $amount Amount.
309
-	 * @param  string $item_number Item number.
310
-	 */
311
-	protected function add_line_item( $item_name, $quantity = 1, $amount = 0.0, $item_number = '' ) {
312
-		$index = ( count( $this->line_items ) / 4 ) + 1;
313
-
314
-		/**
315
-		 * Prevent error "Things don't appear to be working at the moment. (https://www.sandbox.paypal.com/webapps/hermes/error)"
316
-		 */
317
-		$item_name = str_replace( "#", "", $item_name );
318
-
319
-		$item = apply_filters(
320
-			'getpaid_paypal_line_item',
321
-			array(
322
-				'item_name'   => html_entity_decode( getpaid_limit_length( $item_name ? wp_strip_all_tags( $item_name ) : __( 'Item', 'invoicing' ), 127 ), ENT_NOQUOTES, 'UTF-8' ),
323
-				'quantity'    => (float) $quantity,
324
-				'amount'      => wpinv_sanitize_amount( (float) $amount, 2 ),
325
-				'item_number' => $item_number,
326
-			),
327
-			$item_name,
328
-			$quantity,
329
-			$amount,
330
-			$item_number
331
-		);
332
-
333
-		$this->line_items[ 'item_name_' . $index ]   = getpaid_limit_length( $item['item_name'], 127 );
304
+     * Add PayPal Line Item.
305
+     *
306
+     * @param  string $item_name Item name.
307
+     * @param  float    $quantity Item quantity.
308
+     * @param  float  $amount Amount.
309
+     * @param  string $item_number Item number.
310
+     */
311
+    protected function add_line_item( $item_name, $quantity = 1, $amount = 0.0, $item_number = '' ) {
312
+        $index = ( count( $this->line_items ) / 4 ) + 1;
313
+
314
+        /**
315
+         * Prevent error "Things don't appear to be working at the moment. (https://www.sandbox.paypal.com/webapps/hermes/error)"
316
+         */
317
+        $item_name = str_replace( "#", "", $item_name );
318
+
319
+        $item = apply_filters(
320
+            'getpaid_paypal_line_item',
321
+            array(
322
+                'item_name'   => html_entity_decode( getpaid_limit_length( $item_name ? wp_strip_all_tags( $item_name ) : __( 'Item', 'invoicing' ), 127 ), ENT_NOQUOTES, 'UTF-8' ),
323
+                'quantity'    => (float) $quantity,
324
+                'amount'      => wpinv_sanitize_amount( (float) $amount, 2 ),
325
+                'item_number' => $item_number,
326
+            ),
327
+            $item_name,
328
+            $quantity,
329
+            $amount,
330
+            $item_number
331
+        );
332
+
333
+        $this->line_items[ 'item_name_' . $index ]   = getpaid_limit_length( $item['item_name'], 127 );
334 334
         $this->line_items[ 'quantity_' . $index ]    = $item['quantity'];
335 335
 
336 336
         // The price or amount of the product, service, or contribution, not including shipping, handling, or tax.
337
-		$this->line_items[ 'amount_' . $index ]      = $item['amount'] * $item['quantity'];
338
-		$this->line_items[ 'item_number_' . $index ] = getpaid_limit_length( $item['item_number'], 127 );
337
+        $this->line_items[ 'amount_' . $index ]      = $item['amount'] * $item['quantity'];
338
+        $this->line_items[ 'item_number_' . $index ] = getpaid_limit_length( $item['item_number'], 127 );
339 339
     }
340 340
 
341 341
     /**
342
-	 * If the default request with line items is too long, generate a new one with only one line item.
343
-	 *
344
-	 * https://support.microsoft.com/en-us/help/208427/maximum-url-length-is-2-083-characters-in-internet-explorer.
345
-	 *
346
-	 * @param WPInv_Invoice $invoice Invoice to be sent to Paypal.
347
-	 * @param array    $paypal_args Arguments sent to Paypal in the request.
348
-	 * @return array
349
-	 */
350
-	protected function fix_request_length( $invoice, $paypal_args ) {
351
-		$max_paypal_length = 2083;
352
-		$query_candidate   = http_build_query( $paypal_args, '', '&' );
353
-
354
-		if ( strlen( $this->endpoint . $query_candidate ) <= $max_paypal_length ) {
355
-			return $paypal_args;
356
-		}
357
-
358
-		return apply_filters(
359
-			'getpaid_paypal_args',
360
-			array_merge(
361
-				$this->get_transaction_args( $invoice ),
362
-				$this->get_line_item_args( $invoice, true )
363
-			),
364
-			$invoice
365
-		);
342
+     * If the default request with line items is too long, generate a new one with only one line item.
343
+     *
344
+     * https://support.microsoft.com/en-us/help/208427/maximum-url-length-is-2-083-characters-in-internet-explorer.
345
+     *
346
+     * @param WPInv_Invoice $invoice Invoice to be sent to Paypal.
347
+     * @param array    $paypal_args Arguments sent to Paypal in the request.
348
+     * @return array
349
+     */
350
+    protected function fix_request_length( $invoice, $paypal_args ) {
351
+        $max_paypal_length = 2083;
352
+        $query_candidate   = http_build_query( $paypal_args, '', '&' );
353
+
354
+        if ( strlen( $this->endpoint . $query_candidate ) <= $max_paypal_length ) {
355
+            return $paypal_args;
356
+        }
357
+
358
+        return apply_filters(
359
+            'getpaid_paypal_args',
360
+            array_merge(
361
+                $this->get_transaction_args( $invoice ),
362
+                $this->get_line_item_args( $invoice, true )
363
+            ),
364
+            $invoice
365
+        );
366 366
 
367 367
     }
368 368
 
369 369
     /**
370
-	 * Processes recurring invoices.
371
-	 *
372
-	 * @param  array $paypal_args PayPal args.
373
-	 * @param  WPInv_Invoice    $invoice Invoice object.
374
-	 */
375
-	public function process_subscription( $paypal_args, $invoice ) {
370
+     * Processes recurring invoices.
371
+     *
372
+     * @param  array $paypal_args PayPal args.
373
+     * @param  WPInv_Invoice    $invoice Invoice object.
374
+     */
375
+    public function process_subscription( $paypal_args, $invoice ) {
376 376
 
377 377
         // Make sure this is a subscription.
378 378
         if ( ! $invoice->is_recurring() || ! $subscription = getpaid_get_invoice_subscription( $invoice ) ) {
@@ -393,21 +393,21 @@  discard block
 block discarded – undo
393 393
         $recurring_amount       = (float) wpinv_sanitize_amount( $invoice->get_recurring_total(), 2 );
394 394
         $subscription_item      = $invoice->get_recurring( true );
395 395
 
396
-		// Convert 365 days to 1 year.
397
-		if ( 'D' == $period && 365 == $interval ) {
398
-			$period = 'Y';
399
-			$interval = 1;
400
-		}
396
+        // Convert 365 days to 1 year.
397
+        if ( 'D' == $period && 365 == $interval ) {
398
+            $period = 'Y';
399
+            $interval = 1;
400
+        }
401 401
 
402 402
         if ( $subscription_item->has_free_trial() ) {
403 403
 
404 404
             $paypal_args['a1'] = 0 == $initial_amount ? 0 : $initial_amount;
405 405
 
406
-			// Trial period length.
407
-			$paypal_args['p1'] = $subscription_item->get_trial_interval();
406
+            // Trial period length.
407
+            $paypal_args['p1'] = $subscription_item->get_trial_interval();
408 408
 
409
-			// Trial period.
410
-			$paypal_args['t1'] = $subscription_item->get_trial_period();
409
+            // Trial period.
410
+            $paypal_args['t1'] = $subscription_item->get_trial_period();
411 411
 
412 412
         } elseif ( $initial_amount != $recurring_amount ) {
413 413
 
@@ -430,40 +430,40 @@  discard block
 block discarded – undo
430 430
         }
431 431
 
432 432
         // We have a recurring payment
433
-		if ( ! isset( $param_number ) || 1 == $param_number ) {
433
+        if ( ! isset( $param_number ) || 1 == $param_number ) {
434 434
 
435
-			// Subscription price
436
-			$paypal_args['a3'] = $recurring_amount;
435
+            // Subscription price
436
+            $paypal_args['a3'] = $recurring_amount;
437 437
 
438
-			// Subscription duration
439
-			$paypal_args['p3'] = $interval;
438
+            // Subscription duration
439
+            $paypal_args['p3'] = $interval;
440 440
 
441
-			// Subscription period
442
-			$paypal_args['t3'] = $period;
441
+            // Subscription period
442
+            $paypal_args['t3'] = $period;
443 443
 
444 444
         }
445 445
 
446 446
         // Recurring payments
447
-		if ( 1 == $bill_times || ( $initial_amount != $recurring_amount && ! $subscription_item->has_free_trial() && 2 == $bill_times ) ) {
447
+        if ( 1 == $bill_times || ( $initial_amount != $recurring_amount && ! $subscription_item->has_free_trial() && 2 == $bill_times ) ) {
448 448
 
449
-			// Non-recurring payments
450
-			$paypal_args['src'] = 0;
449
+            // Non-recurring payments
450
+            $paypal_args['src'] = 0;
451 451
 
452
-		} else {
452
+        } else {
453 453
 
454
-			$paypal_args['src'] = 1;
454
+            $paypal_args['src'] = 1;
455 455
 
456
-			if ( $bill_times > 0 ) {
456
+            if ( $bill_times > 0 ) {
457 457
 
458
-				// An initial period is being used to charge a sign-up fee
459
-				if ( $initial_amount != $recurring_amount && ! $subscription_item->has_free_trial() ) {
460
-					$bill_times--;
461
-				}
458
+                // An initial period is being used to charge a sign-up fee
459
+                if ( $initial_amount != $recurring_amount && ! $subscription_item->has_free_trial() ) {
460
+                    $bill_times--;
461
+                }
462 462
 
463 463
                 // Make sure it's not over the max of 52
464 464
                 $paypal_args['srt'] = ( $bill_times <= 52 ? absint( $bill_times ) : 52 );
465 465
 
466
-			}
466
+            }
467 467
         }
468 468
 
469 469
         // Force return URL so that order description & instructions display
@@ -475,115 +475,115 @@  discard block
 block discarded – undo
475 475
             if ( isset( $paypal_args[ $arg ] ) ) {
476 476
                 unset( $paypal_args[ $arg ] );
477 477
             }
478
-		}
478
+        }
479 479
 
480 480
         return apply_filters(
481
-			'getpaid_paypal_subscription_args',
482
-			$paypal_args,
483
-			$invoice
481
+            'getpaid_paypal_subscription_args',
482
+            $paypal_args,
483
+            $invoice
484
+        );
485
+
486
+    }
487
+
488
+    /**
489
+     * Refunds an invoice remotely.
490
+     * 
491
+     * @since 2.8.24
492
+     * @param WPInv_Invoice $invoice Invoice object.
493
+     */
494
+    public function refund_invoice( $invoice ) {
495
+
496
+        if ( $invoice->get_gateway() !== $this->id ) {
497
+            return;
498
+        }
499
+
500
+        $mode	= $this->is_sandbox( $invoice ) ? 'sandbox' : 'live';
501
+        $result = GetPaid_PayPal_API::refund_capture( $invoice->get_transaction_id(), array(), $mode );
502
+
503
+        if ( is_wp_error( $result ) ) {
504
+            $invoice->add_system_note(
505
+                sprintf(
506
+                    // translators: %s is the error message.
507
+                    __( 'An error occured while trying to refund invoice #%1$s in PayPal: %2$s', 'invoicing' ),
508
+                    $invoice->get_id(),
509
+                    $result->get_error_message()
510
+                )
511
+            );
512
+        } else {
513
+            $invoice->add_system_note(
514
+                sprintf(
515
+                    // translators: %s is the refund ID.
516
+                    __( 'Successfully refunded invoice #%1$s in PayPal. Refund ID: %2$s', 'invoicing' ),
517
+                    $invoice->get_id(),
518
+                    $result->id
519
+                )
520
+            );
521
+        }
522
+    }
523
+
524
+    /**
525
+     * Cancels a subscription remotely.
526
+     * 
527
+     * @since 2.8.24
528
+     * @param WPInv_Subscription $subscription Subscription object.
529
+     */
530
+    public function subscription_cancelled( $subscription ) {
531
+
532
+        if ( $subscription->get_gateway() != $this->id ) {
533
+            return;
534
+        }
535
+
536
+        $invoice = $subscription->get_parent_invoice();
537
+
538
+        // Abort if the parent invoice does not exist.
539
+        if ( ! $invoice->exists() ) {
540
+            return;
541
+        }
542
+
543
+        $mode	= $this->is_sandbox( $invoice ) ? 'sandbox' : 'live';
544
+        $result = GetPaid_PayPal_API::cancel_subscription( 
545
+            $invoice->get_remote_subscription_id(), 
546
+            array(
547
+                'reason' => __(' Customer requested cancellation', 'invoicing' ),
548
+            ), 
549
+            $mode 
484 550
         );
485 551
 
552
+        if ( is_wp_error( $result ) ) {
553
+
554
+            $error = sprintf(
555
+                // translators: %s is the subscription ID.
556
+                __( 'An error occured while trying to cancel subscription #%s in PayPal.', 'invoicing' ),
557
+                $subscription->get_id()
558
+            );
559
+
560
+            getpaid_admin()->show_error( $error . ' ' . $result->get_error_message() );
561
+
562
+            if ( ! is_admin() ) {
563
+                wpinv_set_error( $result->get_error_code(), $error );
564
+            }
565
+
566
+            return;
567
+        }
568
+
569
+        if ( is_admin() ) {
570
+            getpaid_admin()->show_success(
571
+                sprintf(
572
+                    // translators: %s is the subscription ID.
573
+                    __( 'Successfully cancelled subscription #%s in PayPal.', 'invoicing' ),
574
+                    $subscription->get_id()
575
+                )
576
+            );
577
+        }
578
+
486 579
     }
487 580
 
488
-	/**
489
-	 * Refunds an invoice remotely.
490
-	 * 
491
-	 * @since 2.8.24
492
-	 * @param WPInv_Invoice $invoice Invoice object.
493
-	 */
494
-	public function refund_invoice( $invoice ) {
495
-
496
-		if ( $invoice->get_gateway() !== $this->id ) {
497
-			return;
498
-		}
499
-
500
-		$mode	= $this->is_sandbox( $invoice ) ? 'sandbox' : 'live';
501
-		$result = GetPaid_PayPal_API::refund_capture( $invoice->get_transaction_id(), array(), $mode );
502
-
503
-		if ( is_wp_error( $result ) ) {
504
-			$invoice->add_system_note(
505
-				sprintf(
506
-					// translators: %s is the error message.
507
-					__( 'An error occured while trying to refund invoice #%1$s in PayPal: %2$s', 'invoicing' ),
508
-					$invoice->get_id(),
509
-					$result->get_error_message()
510
-				)
511
-			);
512
-		} else {
513
-			$invoice->add_system_note(
514
-				sprintf(
515
-					// translators: %s is the refund ID.
516
-					__( 'Successfully refunded invoice #%1$s in PayPal. Refund ID: %2$s', 'invoicing' ),
517
-					$invoice->get_id(),
518
-					$result->id
519
-				)
520
-			);
521
-		}
522
-	}
523
-
524
-	/**
525
-	 * Cancels a subscription remotely.
526
-	 * 
527
-	 * @since 2.8.24
528
-	 * @param WPInv_Subscription $subscription Subscription object.
529
-	 */
530
-	public function subscription_cancelled( $subscription ) {
531
-
532
-		if ( $subscription->get_gateway() != $this->id ) {
533
-			return;
534
-		}
535
-
536
-		$invoice = $subscription->get_parent_invoice();
537
-
538
-		// Abort if the parent invoice does not exist.
539
-		if ( ! $invoice->exists() ) {
540
-			return;
541
-		}
542
-
543
-		$mode	= $this->is_sandbox( $invoice ) ? 'sandbox' : 'live';
544
-		$result = GetPaid_PayPal_API::cancel_subscription( 
545
-			$invoice->get_remote_subscription_id(), 
546
-			array(
547
-				'reason' => __(' Customer requested cancellation', 'invoicing' ),
548
-			), 
549
-			$mode 
550
-		);
551
-
552
-		if ( is_wp_error( $result ) ) {
553
-
554
-			$error = sprintf(
555
-				// translators: %s is the subscription ID.
556
-				__( 'An error occured while trying to cancel subscription #%s in PayPal.', 'invoicing' ),
557
-				$subscription->get_id()
558
-			);
559
-
560
-			getpaid_admin()->show_error( $error . ' ' . $result->get_error_message() );
561
-
562
-			if ( ! is_admin() ) {
563
-				wpinv_set_error( $result->get_error_code(), $error );
564
-			}
565
-
566
-			return;
567
-		}
568
-
569
-		if ( is_admin() ) {
570
-			getpaid_admin()->show_success(
571
-				sprintf(
572
-					// translators: %s is the subscription ID.
573
-					__( 'Successfully cancelled subscription #%s in PayPal.', 'invoicing' ),
574
-					$subscription->get_id()
575
-				)
576
-			);
577
-		}
578
-
579
-	}
580
-
581
-    /**
582
-	 * Processes ipns and marks payments as complete.
583
-	 *
584
-	 * @return void
585
-	 */
586
-	public function verify_ipn() {
581
+    /**
582
+     * Processes ipns and marks payments as complete.
583
+     *
584
+     * @return void
585
+     */
586
+    public function verify_ipn() {
587 587
         new GetPaid_Paypal_Gateway_IPN_Handler( $this );
588 588
     }
589 589
 
@@ -593,19 +593,19 @@  discard block
 block discarded – undo
593 593
     public function sandbox_notice() {
594 594
 
595 595
         return sprintf(
596
-			__( 'SANDBOX ENABLED. You can use sandbox testing accounts only. See the %1$sPayPal Sandbox Testing Guide%2$s for more details.', 'invoicing' ),
597
-			'<a href="https://developer.paypal.com/docs/classic/lifecycle/ug_sandbox/">',
598
-			'</a>'
599
-		);
596
+            __( 'SANDBOX ENABLED. You can use sandbox testing accounts only. See the %1$sPayPal Sandbox Testing Guide%2$s for more details.', 'invoicing' ),
597
+            '<a href="https://developer.paypal.com/docs/classic/lifecycle/ug_sandbox/">',
598
+            '</a>'
599
+        );
600 600
 
601 601
     }
602 602
 
603
-	/**
604
-	 * Filters the gateway settings.
605
-	 *
606
-	 * @param array $admin_settings
607
-	 */
608
-	public function admin_settings( $admin_settings ) {
603
+    /**
604
+     * Filters the gateway settings.
605
+     *
606
+     * @param array $admin_settings
607
+     */
608
+    public function admin_settings( $admin_settings ) {
609 609
 
610 610
         $currencies = sprintf(
611 611
             __( 'Supported Currencies: %s', 'invoicing' ),
@@ -615,66 +615,66 @@  discard block
 block discarded – undo
615 615
         $admin_settings['paypal_active']['desc'] .= " ($currencies)";
616 616
         $admin_settings['paypal_desc']['std']     = __( 'Pay via PayPal: you can pay with your credit card if you don\'t have a PayPal account.', 'invoicing' );
617 617
 
618
-		// Access tokens.
619
-		$live_email      = wpinv_get_option( 'paypal_email' );
620
-		$sandbox_email   = wpinv_get_option( 'paypal_sandbox_email' );
618
+        // Access tokens.
619
+        $live_email      = wpinv_get_option( 'paypal_email' );
620
+        $sandbox_email   = wpinv_get_option( 'paypal_sandbox_email' );
621 621
 
622
-		$admin_settings['paypal_connect'] = array(
623
-			'type' => 'hook',
624
-			'id'   => 'paypal_connect',
625
-			'name' => __( 'Connect to PayPal', 'invoicing' ),
626
-		);
622
+        $admin_settings['paypal_connect'] = array(
623
+            'type' => 'hook',
624
+            'id'   => 'paypal_connect',
625
+            'name' => __( 'Connect to PayPal', 'invoicing' ),
626
+        );
627 627
 
628 628
         $admin_settings['paypal_email'] = array(
629 629
             'type'  => 'text',
630
-			'class' => 'live-auth-data',
630
+            'class' => 'live-auth-data',
631 631
             'id'    => 'paypal_email',
632 632
             'name'  => __( 'Live Email Address', 'invoicing' ),
633 633
             'desc'  => __( 'The email address of your PayPal account.', 'invoicing' ),
634 634
         );
635 635
 
636
-		$admin_settings['paypal_sandbox_email'] = array(
636
+        $admin_settings['paypal_sandbox_email'] = array(
637 637
             'type'  => 'text',
638
-			'class' => 'sandbox-auth-data',
638
+            'class' => 'sandbox-auth-data',
639 639
             'id'    => 'paypal_sandbox_email',
640 640
             'name'  => __( 'Sandbox Email Address', 'invoicing' ),
641 641
             'desc'  => __( 'The email address of your sandbox PayPal account.', 'invoicing' ),
642
-			'std'   => wpinv_get_option( 'paypal_email', '' ),
642
+            'std'   => wpinv_get_option( 'paypal_email', '' ),
643
+        );
644
+
645
+        // Client ID and secret.
646
+        $admin_settings['paypal_client_id'] = array(
647
+            'type'  => 'text',
648
+            'class' => 'live-auth-data',
649
+            'id'    => 'paypal_client_id',
650
+            'name'  => __( 'Live Client ID', 'invoicing' ),
651
+            'desc'  => __( 'The client ID of your PayPal account. You can retrieve this from your PayPal developer account.', 'invoicing' ),
652
+        );
653
+
654
+        $admin_settings['paypal_sandbox_client_id'] = array(
655
+            'type'  => 'text',
656
+            'class' => 'sandbox-auth-data',
657
+            'id'    => 'paypal_sandbox_client_id',
658
+            'name'  => __( 'Sandbox Client ID', 'invoicing' ),
659
+            'desc'  => __( 'The client ID of your sandbox PayPal account. You can retrieve this from your PayPal developer account.', 'invoicing' ),
660
+            'std'   => wpinv_get_option( 'paypal_client_id', '' ),
643 661
         );
644 662
 
645
-		// Client ID and secret.
646
-		$admin_settings['paypal_client_id'] = array(
647
-			'type'  => 'text',
648
-			'class' => 'live-auth-data',
649
-			'id'    => 'paypal_client_id',
650
-			'name'  => __( 'Live Client ID', 'invoicing' ),
651
-			'desc'  => __( 'The client ID of your PayPal account. You can retrieve this from your PayPal developer account.', 'invoicing' ),
652
-		);
653
-
654
-		$admin_settings['paypal_sandbox_client_id'] = array(
655
-			'type'  => 'text',
656
-			'class' => 'sandbox-auth-data',
657
-			'id'    => 'paypal_sandbox_client_id',
658
-			'name'  => __( 'Sandbox Client ID', 'invoicing' ),
659
-			'desc'  => __( 'The client ID of your sandbox PayPal account. You can retrieve this from your PayPal developer account.', 'invoicing' ),
660
-			'std'   => wpinv_get_option( 'paypal_client_id', '' ),
661
-		);
662
-
663
-		$admin_settings['paypal_secret'] = array(
664
-			'type'  => 'text',
665
-			'class' => 'live-auth-data',
666
-			'id'    => 'paypal_secret',
667
-			'name'  => __( 'Live Secret', 'invoicing' ),
668
-			'desc'  => __( 'The secret of your PayPal account. You can retrieve this from your PayPal developer account.', 'invoicing' ),
669
-		);
670
-
671
-		$admin_settings['paypal_sandbox_secret'] = array(
672
-			'type'  => 'text',
673
-			'class' => 'sandbox-auth-data',
674
-			'id'    => 'paypal_sandbox_secret',
675
-			'name'  => __( 'Sandbox Secret', 'invoicing' ),
676
-			'desc'  => __( 'The secret of your sandbox PayPal account. You can retrieve this from your PayPal developer account.', 'invoicing' ),
677
-		);
663
+        $admin_settings['paypal_secret'] = array(
664
+            'type'  => 'text',
665
+            'class' => 'live-auth-data',
666
+            'id'    => 'paypal_secret',
667
+            'name'  => __( 'Live Secret', 'invoicing' ),
668
+            'desc'  => __( 'The secret of your PayPal account. You can retrieve this from your PayPal developer account.', 'invoicing' ),
669
+        );
670
+
671
+        $admin_settings['paypal_sandbox_secret'] = array(
672
+            'type'  => 'text',
673
+            'class' => 'sandbox-auth-data',
674
+            'id'    => 'paypal_sandbox_secret',
675
+            'name'  => __( 'Sandbox Secret', 'invoicing' ),
676
+            'desc'  => __( 'The secret of your sandbox PayPal account. You can retrieve this from your PayPal developer account.', 'invoicing' ),
677
+        );
678 678
 
679 679
         $admin_settings['paypal_ipn_url'] = array(
680 680
             'type'     => 'ipn_url',
@@ -685,57 +685,57 @@  discard block
 block discarded – undo
685 685
             'readonly' => true,
686 686
         );
687 687
 
688
-		return $admin_settings;
689
-	}
690
-
691
-	/**
692
-	 * Retrieves the URL to cancel a subscription.
693
-	 *
694
-	 * @param string $url
695
-	 * @param WPInv_Subscription $subscription
696
-	 */
697
-	public function filter_cancel_subscription_url( $url, $subscription ) {
698
-
699
-		if ( $this->id !== $subscription->get_gateway() ) {
700
-			return $url;
701
-		}
702
-
703
-		// Get the PayPal profile ID.
704
-		$profile_id = $subscription->get_profile_id();
705
-
706
-		// Bail if no profile ID.
707
-		if ( empty( $profile_id ) ) {
708
-			return $url;
709
-		}
710
-
711
-		$cancel_url = 'https://www.paypal.com/myaccount/autopay/connect/%s/cancel';
712
-		if ( $this->is_sandbox( $subscription->get_parent_payment() ) ) {
713
-			$cancel_url = 'https://www.sandbox.paypal.com/myaccount/autopay/connect/%s/cancel';
714
-		}
715
-
716
-		return sprintf( $cancel_url, $profile_id );
717
-	}
718
-
719
-	/**
720
-	 * Retrieves the PayPal connect URL when using the setup wizzard.
721
-	 *
722
-	 *
688
+        return $admin_settings;
689
+    }
690
+
691
+    /**
692
+     * Retrieves the URL to cancel a subscription.
693
+     *
694
+     * @param string $url
695
+     * @param WPInv_Subscription $subscription
696
+     */
697
+    public function filter_cancel_subscription_url( $url, $subscription ) {
698
+
699
+        if ( $this->id !== $subscription->get_gateway() ) {
700
+            return $url;
701
+        }
702
+
703
+        // Get the PayPal profile ID.
704
+        $profile_id = $subscription->get_profile_id();
705
+
706
+        // Bail if no profile ID.
707
+        if ( empty( $profile_id ) ) {
708
+            return $url;
709
+        }
710
+
711
+        $cancel_url = 'https://www.paypal.com/myaccount/autopay/connect/%s/cancel';
712
+        if ( $this->is_sandbox( $subscription->get_parent_payment() ) ) {
713
+            $cancel_url = 'https://www.sandbox.paypal.com/myaccount/autopay/connect/%s/cancel';
714
+        }
715
+
716
+        return sprintf( $cancel_url, $profile_id );
717
+    }
718
+
719
+    /**
720
+     * Retrieves the PayPal connect URL when using the setup wizzard.
721
+     *
722
+     *
723 723
      * @param array $data
724 724
      * @return string
725
-	 */
726
-	public static function maybe_get_connect_url( $url = '', $data = array() ) {
727
-		return self::get_connect_url( false, urldecode( $data['redirect'] ) );
728
-	}
729
-
730
-	/**
731
-	 * Retrieves the PayPal connect URL.
732
-	 *
733
-	 *
725
+     */
726
+    public static function maybe_get_connect_url( $url = '', $data = array() ) {
727
+        return self::get_connect_url( false, urldecode( $data['redirect'] ) );
728
+    }
729
+
730
+    /**
731
+     * Retrieves the PayPal connect URL.
732
+     *
733
+     *
734 734
      * @param bool $is_sandbox
735
-	 * @param string $redirect
735
+     * @param string $redirect
736 736
      * @return string
737
-	 */
738
-	public static function get_connect_url( $is_sandbox, $redirect = '' ) {
737
+     */
738
+    public static function get_connect_url( $is_sandbox, $redirect = '' ) {
739 739
 
740 740
         $redirect_url = add_query_arg(
741 741
             array(
@@ -745,7 +745,7 @@  discard block
 block discarded – undo
745 745
                 'tab'                  => 'gateways',
746 746
                 'section'              => 'paypal',
747 747
                 'getpaid-nonce'        => wp_create_nonce( 'getpaid-nonce' ),
748
-				'redirect'             => urlencode( $redirect ),
748
+                'redirect'             => urlencode( $redirect ),
749 749
             ),
750 750
             admin_url( 'admin.php' )
751 751
         );
@@ -760,12 +760,12 @@  discard block
 block discarded – undo
760 760
 
761 761
     }
762 762
 
763
-	/**
764
-	 * Generates settings page js.
765
-	 *
763
+    /**
764
+     * Generates settings page js.
765
+     *
766 766
      * @return void
767
-	 */
768
-	public static function display_connect_buttons() {
767
+     */
768
+    public static function display_connect_buttons() {
769 769
 
770 770
         ?>
771 771
 			<div class="wpinv-paypal-connect-live">
@@ -807,70 +807,70 @@  discard block
 block discarded – undo
807 807
         <?php
808 808
     }
809 809
 
810
-	/**
811
-	 * Connects to PayPal.
812
-	 *
813
-	 * @param array $data Connection data.
814
-	 * @return void
815
-	 */
816
-	public function connect_paypal( $data ) {
817
-
818
-		$sandbox      = $this->is_sandbox();
819
-		$data         = wp_unslash( $data );
820
-		$access_token = empty( $data['access_token'] ) ? '' : sanitize_text_field( $data['access_token'] );
821
-
822
-		if ( isset( $data['live_mode'] ) ) {
823
-			$sandbox = empty( $data['live_mode'] );
824
-		}
825
-
826
-		wpinv_update_option( 'paypal_sandbox', (int) $sandbox );
827
-		wpinv_update_option( 'paypal_active', 1 );
828
-
829
-		if ( ! empty( $data['error_description'] ) ) {
830
-			getpaid_admin()->show_error( wp_kses_post( urldecode( $data['error_description'] ) ) );
831
-		} else {
832
-
833
-			// Retrieve the user info.
834
-			$user_info = wp_remote_get(
835
-				! $sandbox ? 'https://api-m.paypal.com/v1/identity/oauth2/userinfo?schema=paypalv1.1' : 'https://api-m.sandbox.paypal.com/v1/identity/oauth2/userinfo?schema=paypalv1.1',
836
-				array(
837
-
838
-					'headers' => array(
839
-						'Authorization' => 'Bearer ' . $access_token,
840
-						'Content-type'  => 'application/json',
841
-					),
842
-
843
-				)
844
-			);
845
-
846
-			if ( is_wp_error( $user_info ) ) {
847
-				getpaid_admin()->show_error( wp_kses_post( $user_info->get_error_message() ) );
848
-			} else {
849
-
850
-				// Create application.
851
-				$user_info = json_decode( wp_remote_retrieve_body( $user_info ) );
852
-
853
-				if ( $sandbox ) {
854
-					wpinv_update_option( 'paypal_sandbox_email', sanitize_email( $user_info->emails[0]->value ) );
855
-					wpinv_update_option( 'paypal_sandbox_refresh_token', sanitize_text_field( urldecode( $data['refresh_token'] ) ) );
856
-					set_transient( 'getpaid_paypal_sandbox_access_token', sanitize_text_field( urldecode( $data['access_token'] ) ), (int) $data['expires_in'] );
857
-					getpaid_admin()->show_success( __( 'Successfully connected your PayPal sandbox account', 'invoicing' ) );
858
-				} else {
859
-					wpinv_update_option( 'paypal_email', sanitize_email( $user_info->emails[0]->value ) );
860
-					wpinv_update_option( 'paypal_refresh_token', sanitize_text_field( urldecode( $data['refresh_token'] ) ) );
861
-					set_transient( 'getpaid_paypal_access_token', sanitize_text_field( urldecode( $data['access_token'] ) ), (int) $data['expires_in'] );
862
-					getpaid_admin()->show_success( __( 'Successfully connected your PayPal account', 'invoicing' ) );
863
-				}
864
-			}
865
-		}
866
-
867
-		$redirect = empty( $data['redirect'] ) ? admin_url( 'admin.php?page=wpinv-settings&tab=gateways&section=paypal' ) : urldecode( $data['redirect'] );
868
-
869
-		if ( isset( $data['step'] ) ) {
870
-			$redirect = add_query_arg( 'step', $data['step'], $redirect );
871
-		}
872
-		wp_redirect( $redirect );
873
-		exit;
874
-	}
810
+    /**
811
+     * Connects to PayPal.
812
+     *
813
+     * @param array $data Connection data.
814
+     * @return void
815
+     */
816
+    public function connect_paypal( $data ) {
817
+
818
+        $sandbox      = $this->is_sandbox();
819
+        $data         = wp_unslash( $data );
820
+        $access_token = empty( $data['access_token'] ) ? '' : sanitize_text_field( $data['access_token'] );
821
+
822
+        if ( isset( $data['live_mode'] ) ) {
823
+            $sandbox = empty( $data['live_mode'] );
824
+        }
825
+
826
+        wpinv_update_option( 'paypal_sandbox', (int) $sandbox );
827
+        wpinv_update_option( 'paypal_active', 1 );
828
+
829
+        if ( ! empty( $data['error_description'] ) ) {
830
+            getpaid_admin()->show_error( wp_kses_post( urldecode( $data['error_description'] ) ) );
831
+        } else {
832
+
833
+            // Retrieve the user info.
834
+            $user_info = wp_remote_get(
835
+                ! $sandbox ? 'https://api-m.paypal.com/v1/identity/oauth2/userinfo?schema=paypalv1.1' : 'https://api-m.sandbox.paypal.com/v1/identity/oauth2/userinfo?schema=paypalv1.1',
836
+                array(
837
+
838
+                    'headers' => array(
839
+                        'Authorization' => 'Bearer ' . $access_token,
840
+                        'Content-type'  => 'application/json',
841
+                    ),
842
+
843
+                )
844
+            );
845
+
846
+            if ( is_wp_error( $user_info ) ) {
847
+                getpaid_admin()->show_error( wp_kses_post( $user_info->get_error_message() ) );
848
+            } else {
849
+
850
+                // Create application.
851
+                $user_info = json_decode( wp_remote_retrieve_body( $user_info ) );
852
+
853
+                if ( $sandbox ) {
854
+                    wpinv_update_option( 'paypal_sandbox_email', sanitize_email( $user_info->emails[0]->value ) );
855
+                    wpinv_update_option( 'paypal_sandbox_refresh_token', sanitize_text_field( urldecode( $data['refresh_token'] ) ) );
856
+                    set_transient( 'getpaid_paypal_sandbox_access_token', sanitize_text_field( urldecode( $data['access_token'] ) ), (int) $data['expires_in'] );
857
+                    getpaid_admin()->show_success( __( 'Successfully connected your PayPal sandbox account', 'invoicing' ) );
858
+                } else {
859
+                    wpinv_update_option( 'paypal_email', sanitize_email( $user_info->emails[0]->value ) );
860
+                    wpinv_update_option( 'paypal_refresh_token', sanitize_text_field( urldecode( $data['refresh_token'] ) ) );
861
+                    set_transient( 'getpaid_paypal_access_token', sanitize_text_field( urldecode( $data['access_token'] ) ), (int) $data['expires_in'] );
862
+                    getpaid_admin()->show_success( __( 'Successfully connected your PayPal account', 'invoicing' ) );
863
+                }
864
+            }
865
+        }
866
+
867
+        $redirect = empty( $data['redirect'] ) ? admin_url( 'admin.php?page=wpinv-settings&tab=gateways&section=paypal' ) : urldecode( $data['redirect'] );
868
+
869
+        if ( isset( $data['step'] ) ) {
870
+            $redirect = add_query_arg( 'step', $data['step'], $redirect );
871
+        }
872
+        wp_redirect( $redirect );
873
+        exit;
874
+    }
875 875
 
876 876
 }
Please login to merge, or discard this patch.
templates/payment-forms/elements/checkbox.php 1 patch
Indentation   +12 added lines, -12 removed lines patch added patch discarded remove patch
@@ -13,19 +13,19 @@
 block discarded – undo
13 13
 $label_class = sanitize_key( preg_replace( '/[^A-Za-z0-9_-]/', '-', $label ) );
14 14
 
15 15
 if ( ! empty( $required ) ) {
16
-	$label .= "<span class='text-danger'> *</span>";
16
+    $label .= "<span class='text-danger'> *</span>";
17 17
 }
18 18
 
19 19
 aui()->input(
20
-	array(
21
-		'type'      => 'checkbox',
22
-		'name'      => esc_attr( $id ),
23
-		'id'        => esc_attr( $element_id ),
24
-		'required'  => ! empty( $required ),
25
-		'label'     => $label,
26
-		'value'     => esc_attr__( 'Yes', 'invoicing' ),
27
-		'help_text' => empty( $description ) ? '' : wp_kses_post( $description ),
28
-		'class'     => $label_class
29
-	),
30
-	true
20
+    array(
21
+        'type'      => 'checkbox',
22
+        'name'      => esc_attr( $id ),
23
+        'id'        => esc_attr( $element_id ),
24
+        'required'  => ! empty( $required ),
25
+        'label'     => $label,
26
+        'value'     => esc_attr__( 'Yes', 'invoicing' ),
27
+        'help_text' => empty( $description ) ? '' : wp_kses_post( $description ),
28
+        'class'     => $label_class
29
+    ),
30
+    true
31 31
 );
Please login to merge, or discard this patch.
templates/payment-forms/elements/address.php 1 patch
Indentation   +26 added lines, -26 removed lines patch added patch discarded remove patch
@@ -10,7 +10,7 @@  discard block
 block discarded – undo
10 10
 defined( 'ABSPATH' ) || exit;
11 11
 
12 12
 if ( empty( $fields ) ) {
13
-	return;
13
+    return;
14 14
 }
15 15
 
16 16
 // A prefix for all ids (so that a form can be included in the same page multiple times).
@@ -18,12 +18,12 @@  discard block
 block discarded – undo
18 18
 
19 19
 // Prepare the user's country.
20 20
 if ( ! empty( $form->invoice ) ) {
21
-	$country = $form->invoice->get_country();
21
+    $country = $form->invoice->get_country();
22 22
 }
23 23
 
24 24
 if ( empty( $country ) ) {
25
-	$country = empty( $country ) ? getpaid_get_ip_country() : $country;
26
-	$country = empty( $country ) ? wpinv_get_default_country() : $country;
25
+    $country = empty( $country ) ? getpaid_get_ip_country() : $country;
26
+    $country = empty( $country ) ? wpinv_get_default_country() : $country;
27 27
 }
28 28
 
29 29
 // A prefix for all ids (so that a form can be included in the same page multiple times).
@@ -50,32 +50,32 @@  discard block
 block discarded – undo
50 50
 	<!-- Start Billing Address -->
51 51
 	<div class="getpaid-billing-address-wrapper">
52 52
 		<?php
53
-			$field_type = 'billing';
53
+            $field_type = 'billing';
54 54
 
55
-			wpinv_get_template( 'payment-forms/elements/address-fields.php', array( 'form' => $form, 'fields' => $fields, 'address_type' => $address_type, 'field_type' => $field_type, 'uniqid' => $uniqid, 'country' => $country ) );
55
+            wpinv_get_template( 'payment-forms/elements/address-fields.php', array( 'form' => $form, 'fields' => $fields, 'address_type' => $address_type, 'field_type' => $field_type, 'uniqid' => $uniqid, 'country' => $country ) );
56 56
 
57
-			do_action( 'getpaid_after_payment_form_billing_fields', $form );
58
-		?>
57
+            do_action( 'getpaid_after_payment_form_billing_fields', $form );
58
+        ?>
59 59
 	</div>
60 60
 	<!-- End Billing Address -->
61 61
 <?php endif; ?>
62 62
 
63 63
 <?php if ( 'both' === $address_type ) : ?>
64 64
 	<?php
65
-		aui()->input(
66
-			array(
67
-				'type'     => 'checkbox',
68
-				'name'     => 'same-shipping-address',
69
-				'id'       => "shipping-toggle$uniqid",
70
-				'required' => false,
71
-				'label'    => empty( $shipping_address_toggle ) ? esc_html__( 'Same billing & shipping address.', 'invoicing' ) : wp_kses_post( $shipping_address_toggle ),
72
-				'value'    => 1,
73
-				'checked'  => true,
74
-				'class'    => 'chkbox-same-shipping-address'
75
-			),
76
-			true
77
-		);
78
-	?>
65
+        aui()->input(
66
+            array(
67
+                'type'     => 'checkbox',
68
+                'name'     => 'same-shipping-address',
69
+                'id'       => "shipping-toggle$uniqid",
70
+                'required' => false,
71
+                'label'    => empty( $shipping_address_toggle ) ? esc_html__( 'Same billing & shipping address.', 'invoicing' ) : wp_kses_post( $shipping_address_toggle ),
72
+                'value'    => 1,
73
+                'checked'  => true,
74
+                'class'    => 'chkbox-same-shipping-address'
75
+            ),
76
+            true
77
+        );
78
+    ?>
79 79
 	<!-- Start Shipping Address Title -->
80 80
 	<h4 class="mb-3 getpaid-shipping-address-title">
81 81
 		<?php esc_html_e( 'Shipping Address', 'invoicing' ); ?>
@@ -87,12 +87,12 @@  discard block
 block discarded – undo
87 87
 	<!-- Start Shipping Address -->
88 88
 	<div class="getpaid-shipping-address-wrapper">
89 89
 		<?php
90
-			$field_type = 'shipping';
90
+            $field_type = 'shipping';
91 91
 
92
-			wpinv_get_template( 'payment-forms/elements/address-fields.php', array( 'form' => $form, 'fields' => $fields, 'address_type' => $address_type, 'field_type' => $field_type, 'uniqid' => $uniqid, 'country' => $country ) );
92
+            wpinv_get_template( 'payment-forms/elements/address-fields.php', array( 'form' => $form, 'fields' => $fields, 'address_type' => $address_type, 'field_type' => $field_type, 'uniqid' => $uniqid, 'country' => $country ) );
93 93
 
94
-			do_action( 'getpaid_after_payment_form_shipping_fields', $form );
95
-		?>
94
+            do_action( 'getpaid_after_payment_form_shipping_fields', $form );
95
+        ?>
96 96
 	</div>
97 97
 	<!-- End Shipping Address -->
98 98
 <?php endif; ?>
Please login to merge, or discard this patch.
includes/admin/class-getpaid-post-types-admin.php 1 patch
Indentation   +812 added lines, -812 removed lines patch added patch discarded remove patch
@@ -13,755 +13,755 @@  discard block
 block discarded – undo
13 13
 class GetPaid_Post_Types_Admin {
14 14
 
15 15
     /**
16
-	 * Hook in methods.
17
-	 */
18
-	public static function init() {
19
-
20
-		// Init metaboxes.
21
-		GetPaid_Metaboxes::init();
22
-
23
-		// Filter the post updated messages.
24
-		add_filter( 'post_updated_messages', 'GetPaid_Post_Types_Admin::post_updated_messages' );
25
-
26
-		// Filter post actions.
27
-		add_filter( 'post_row_actions', 'GetPaid_Post_Types_Admin::post_row_actions', 10, 2 );
28
-		add_filter( 'post_row_actions', 'GetPaid_Post_Types_Admin::filter_invoice_row_actions', 90, 2 );
29
-
30
-		// Invoice table columns.
31
-		add_filter( 'manage_wpi_invoice_posts_columns', array( __CLASS__, 'invoice_columns' ), 100 );
32
-		add_action( 'manage_wpi_invoice_posts_custom_column', array( __CLASS__, 'display_invoice_columns' ), 10, 2 );
33
-		add_filter( 'bulk_actions-edit-wpi_invoice', array( __CLASS__, 'invoice_bulk_actions' ) );
34
-		add_filter( 'handle_bulk_actions-edit-wpi_invoice', array( __CLASS__, 'handle_invoice_bulk_actions' ), 10, 3 );
35
-
36
-		// Items table columns.
37
-		add_filter( 'manage_wpi_item_posts_columns', array( __CLASS__, 'item_columns' ), 100 );
38
-		add_filter( 'manage_edit-wpi_item_sortable_columns', array( __CLASS__, 'sortable_item_columns' ), 20 );
39
-		add_action( 'manage_wpi_item_posts_custom_column', array( __CLASS__, 'display_item_columns' ), 10, 2 );
40
-		add_action( 'restrict_manage_posts', array( __CLASS__, 'add_item_filters' ), 100 );
41
-		add_action( 'parse_query', array( __CLASS__, 'filter_item_query' ), 100 );
42
-		add_action( 'request', array( __CLASS__, 'reorder_items' ), 100 );
43
-
44
-		// Payment forms columns.
45
-		add_filter( 'manage_wpi_payment_form_posts_columns', array( __CLASS__, 'payment_form_columns' ), 100 );
46
-		add_action( 'manage_wpi_payment_form_posts_custom_column', array( __CLASS__, 'display_payment_form_columns' ), 10, 2 );
47
-		add_filter( 'display_post_states', array( __CLASS__, 'filter_payment_form_state' ), 10, 2 );
48
-
49
-		// Discount table columns.
50
-		add_filter( 'manage_wpi_discount_posts_columns', array( __CLASS__, 'discount_columns' ), 100 );
51
-		add_filter( 'bulk_actions-edit-wpi_discount', '__return_empty_array', 100 );
52
-
53
-		// Deleting posts.
54
-		add_action( 'delete_post', array( __CLASS__, 'delete_post' ) );
55
-		add_filter( 'display_post_states', array( __CLASS__, 'filter_discount_state' ), 10, 2 );
56
-
57
-		add_filter( 'display_post_states', array( __CLASS__, 'add_display_post_states' ), 10, 2 );
58
-	}
59
-
60
-	/**
61
-	 * Post updated messages.
62
-	 */
63
-	public static function post_updated_messages( $messages ) {
64
-		global $post;
65
-
66
-		$messages['wpi_discount'] = array(
67
-			0  => '',
68
-			1  => __( 'Discount updated.', 'invoicing' ),
69
-			2  => __( 'Custom field updated.', 'invoicing' ),
70
-			3  => __( 'Custom field deleted.', 'invoicing' ),
71
-			4  => __( 'Discount updated.', 'invoicing' ),
72
-			5  => isset( $_GET['revision'] ) ? wp_sprintf( __( 'Discount restored to revision from %s', 'invoicing' ), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
73
-			6  => __( 'Discount updated.', 'invoicing' ),
74
-			7  => __( 'Discount saved.', 'invoicing' ),
75
-			8  => __( 'Discount submitted.', 'invoicing' ),
76
-			9  => wp_sprintf( __( 'Discount scheduled for: <strong>%1$s</strong>.', 'invoicing' ), date_i18n( __( 'M j, Y @ G:i', 'invoicing' ), strtotime( $post->post_date ) ) ),
77
-			10 => __( 'Discount draft updated.', 'invoicing' ),
78
-		);
79
-
80
-		$messages['wpi_payment_form'] = array(
81
-			0  => '',
82
-			1  => __( 'Payment Form updated.', 'invoicing' ),
83
-			2  => __( 'Custom field updated.', 'invoicing' ),
84
-			3  => __( 'Custom field deleted.', 'invoicing' ),
85
-			4  => __( 'Payment Form updated.', 'invoicing' ),
86
-			5  => isset( $_GET['revision'] ) ? wp_sprintf( __( 'Payment Form restored to revision from %s', 'invoicing' ), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
87
-			6  => __( 'Payment Form updated.', 'invoicing' ),
88
-			7  => __( 'Payment Form saved.', 'invoicing' ),
89
-			8  => __( 'Payment Form submitted.', 'invoicing' ),
90
-			9  => wp_sprintf( __( 'Payment Form scheduled for: <strong>%1$s</strong>.', 'invoicing' ), date_i18n( __( 'M j, Y @ G:i', 'invoicing' ), strtotime( $post->post_date ) ) ),
91
-			10 => __( 'Payment Form draft updated.', 'invoicing' ),
92
-		);
93
-
94
-		return $messages;
95
-
96
-	}
97
-
98
-	/**
99
-	 * Post row actions.
100
-	 */
101
-	public static function post_row_actions( $actions, $post ) {
102
-
103
-		$post = get_post( $post );
104
-
105
-		// We do not want to edit the default payment form.
106
-		if ( 'wpi_payment_form' == $post->post_type ) {
107
-
108
-			if ( wpinv_get_default_payment_form() === $post->ID ) {
109
-				unset( $actions['trash'] );
110
-				unset( $actions['inline hide-if-no-js'] );
111
-			}
112
-
113
-			$actions['duplicate'] = sprintf(
114
-				'<a href="%1$s">%2$s</a>',
115
-				esc_url(
116
-					wp_nonce_url(
117
-						add_query_arg(
118
-							array(
119
-								'getpaid-admin-action' => 'duplicate_form',
120
-								'form_id'              => $post->ID,
121
-							)
122
-						),
123
-						'getpaid-nonce',
124
-						'getpaid-nonce'
125
-					)
126
-				),
127
-				esc_html( __( 'Duplicate', 'invoicing' ) )
128
-			);
129
-
130
-			$actions['reset'] = sprintf(
131
-				'<a href="%1$s" style="color: #800">%2$s</a>',
132
-				esc_url(
133
-					wp_nonce_url(
134
-						add_query_arg(
135
-							array(
136
-								'getpaid-admin-action' => 'reset_form_stats',
137
-								'form_id'              => $post->ID,
138
-							)
139
-						),
140
-						'getpaid-nonce',
141
-						'getpaid-nonce'
142
-					)
143
-				),
144
-				esc_html( __( 'Reset Stats', 'invoicing' ) )
145
-			);
146
-		}
147
-
148
-		// Link to item payment form.
149
-		if ( 'wpi_item' == $post->post_type ) {
150
-			if ( getpaid_item_type_supports( get_post_meta( $post->ID, '_wpinv_type', true ), 'buy_now' ) ) {
151
-				$actions['buy'] = sprintf(
152
-					'<a href="%1$s">%2$s</a>',
153
-					esc_url( getpaid_embed_url( false, $post->ID . '|0' ) ),
154
-					esc_html( __( 'Buy', 'invoicing' ) )
155
-				);
156
-			}
157
-		}
158
-
159
-		return $actions;
160
-	}
161
-
162
-	/**
16
+     * Hook in methods.
17
+     */
18
+    public static function init() {
19
+
20
+        // Init metaboxes.
21
+        GetPaid_Metaboxes::init();
22
+
23
+        // Filter the post updated messages.
24
+        add_filter( 'post_updated_messages', 'GetPaid_Post_Types_Admin::post_updated_messages' );
25
+
26
+        // Filter post actions.
27
+        add_filter( 'post_row_actions', 'GetPaid_Post_Types_Admin::post_row_actions', 10, 2 );
28
+        add_filter( 'post_row_actions', 'GetPaid_Post_Types_Admin::filter_invoice_row_actions', 90, 2 );
29
+
30
+        // Invoice table columns.
31
+        add_filter( 'manage_wpi_invoice_posts_columns', array( __CLASS__, 'invoice_columns' ), 100 );
32
+        add_action( 'manage_wpi_invoice_posts_custom_column', array( __CLASS__, 'display_invoice_columns' ), 10, 2 );
33
+        add_filter( 'bulk_actions-edit-wpi_invoice', array( __CLASS__, 'invoice_bulk_actions' ) );
34
+        add_filter( 'handle_bulk_actions-edit-wpi_invoice', array( __CLASS__, 'handle_invoice_bulk_actions' ), 10, 3 );
35
+
36
+        // Items table columns.
37
+        add_filter( 'manage_wpi_item_posts_columns', array( __CLASS__, 'item_columns' ), 100 );
38
+        add_filter( 'manage_edit-wpi_item_sortable_columns', array( __CLASS__, 'sortable_item_columns' ), 20 );
39
+        add_action( 'manage_wpi_item_posts_custom_column', array( __CLASS__, 'display_item_columns' ), 10, 2 );
40
+        add_action( 'restrict_manage_posts', array( __CLASS__, 'add_item_filters' ), 100 );
41
+        add_action( 'parse_query', array( __CLASS__, 'filter_item_query' ), 100 );
42
+        add_action( 'request', array( __CLASS__, 'reorder_items' ), 100 );
43
+
44
+        // Payment forms columns.
45
+        add_filter( 'manage_wpi_payment_form_posts_columns', array( __CLASS__, 'payment_form_columns' ), 100 );
46
+        add_action( 'manage_wpi_payment_form_posts_custom_column', array( __CLASS__, 'display_payment_form_columns' ), 10, 2 );
47
+        add_filter( 'display_post_states', array( __CLASS__, 'filter_payment_form_state' ), 10, 2 );
48
+
49
+        // Discount table columns.
50
+        add_filter( 'manage_wpi_discount_posts_columns', array( __CLASS__, 'discount_columns' ), 100 );
51
+        add_filter( 'bulk_actions-edit-wpi_discount', '__return_empty_array', 100 );
52
+
53
+        // Deleting posts.
54
+        add_action( 'delete_post', array( __CLASS__, 'delete_post' ) );
55
+        add_filter( 'display_post_states', array( __CLASS__, 'filter_discount_state' ), 10, 2 );
56
+
57
+        add_filter( 'display_post_states', array( __CLASS__, 'add_display_post_states' ), 10, 2 );
58
+    }
59
+
60
+    /**
61
+     * Post updated messages.
62
+     */
63
+    public static function post_updated_messages( $messages ) {
64
+        global $post;
65
+
66
+        $messages['wpi_discount'] = array(
67
+            0  => '',
68
+            1  => __( 'Discount updated.', 'invoicing' ),
69
+            2  => __( 'Custom field updated.', 'invoicing' ),
70
+            3  => __( 'Custom field deleted.', 'invoicing' ),
71
+            4  => __( 'Discount updated.', 'invoicing' ),
72
+            5  => isset( $_GET['revision'] ) ? wp_sprintf( __( 'Discount restored to revision from %s', 'invoicing' ), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
73
+            6  => __( 'Discount updated.', 'invoicing' ),
74
+            7  => __( 'Discount saved.', 'invoicing' ),
75
+            8  => __( 'Discount submitted.', 'invoicing' ),
76
+            9  => wp_sprintf( __( 'Discount scheduled for: <strong>%1$s</strong>.', 'invoicing' ), date_i18n( __( 'M j, Y @ G:i', 'invoicing' ), strtotime( $post->post_date ) ) ),
77
+            10 => __( 'Discount draft updated.', 'invoicing' ),
78
+        );
79
+
80
+        $messages['wpi_payment_form'] = array(
81
+            0  => '',
82
+            1  => __( 'Payment Form updated.', 'invoicing' ),
83
+            2  => __( 'Custom field updated.', 'invoicing' ),
84
+            3  => __( 'Custom field deleted.', 'invoicing' ),
85
+            4  => __( 'Payment Form updated.', 'invoicing' ),
86
+            5  => isset( $_GET['revision'] ) ? wp_sprintf( __( 'Payment Form restored to revision from %s', 'invoicing' ), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
87
+            6  => __( 'Payment Form updated.', 'invoicing' ),
88
+            7  => __( 'Payment Form saved.', 'invoicing' ),
89
+            8  => __( 'Payment Form submitted.', 'invoicing' ),
90
+            9  => wp_sprintf( __( 'Payment Form scheduled for: <strong>%1$s</strong>.', 'invoicing' ), date_i18n( __( 'M j, Y @ G:i', 'invoicing' ), strtotime( $post->post_date ) ) ),
91
+            10 => __( 'Payment Form draft updated.', 'invoicing' ),
92
+        );
93
+
94
+        return $messages;
95
+
96
+    }
97
+
98
+    /**
99
+     * Post row actions.
100
+     */
101
+    public static function post_row_actions( $actions, $post ) {
102
+
103
+        $post = get_post( $post );
104
+
105
+        // We do not want to edit the default payment form.
106
+        if ( 'wpi_payment_form' == $post->post_type ) {
107
+
108
+            if ( wpinv_get_default_payment_form() === $post->ID ) {
109
+                unset( $actions['trash'] );
110
+                unset( $actions['inline hide-if-no-js'] );
111
+            }
112
+
113
+            $actions['duplicate'] = sprintf(
114
+                '<a href="%1$s">%2$s</a>',
115
+                esc_url(
116
+                    wp_nonce_url(
117
+                        add_query_arg(
118
+                            array(
119
+                                'getpaid-admin-action' => 'duplicate_form',
120
+                                'form_id'              => $post->ID,
121
+                            )
122
+                        ),
123
+                        'getpaid-nonce',
124
+                        'getpaid-nonce'
125
+                    )
126
+                ),
127
+                esc_html( __( 'Duplicate', 'invoicing' ) )
128
+            );
129
+
130
+            $actions['reset'] = sprintf(
131
+                '<a href="%1$s" style="color: #800">%2$s</a>',
132
+                esc_url(
133
+                    wp_nonce_url(
134
+                        add_query_arg(
135
+                            array(
136
+                                'getpaid-admin-action' => 'reset_form_stats',
137
+                                'form_id'              => $post->ID,
138
+                            )
139
+                        ),
140
+                        'getpaid-nonce',
141
+                        'getpaid-nonce'
142
+                    )
143
+                ),
144
+                esc_html( __( 'Reset Stats', 'invoicing' ) )
145
+            );
146
+        }
147
+
148
+        // Link to item payment form.
149
+        if ( 'wpi_item' == $post->post_type ) {
150
+            if ( getpaid_item_type_supports( get_post_meta( $post->ID, '_wpinv_type', true ), 'buy_now' ) ) {
151
+                $actions['buy'] = sprintf(
152
+                    '<a href="%1$s">%2$s</a>',
153
+                    esc_url( getpaid_embed_url( false, $post->ID . '|0' ) ),
154
+                    esc_html( __( 'Buy', 'invoicing' ) )
155
+                );
156
+            }
157
+        }
158
+
159
+        return $actions;
160
+    }
161
+
162
+    /**
163 163
      * Remove bulk edit option from admin side quote listing
164 164
      *
165 165
      * @since    1.0.0
166 166
      * @param array $actions post actions
167
-	 * @param WP_Post $post
167
+     * @param WP_Post $post
168 168
      * @return array $actions actions without edit option
169 169
      */
170 170
     public static function filter_invoice_row_actions( $actions, $post ) {
171 171
 
172 172
         if ( getpaid_is_invoice_post_type( $post->post_type ) ) {
173 173
 
174
-			$actions = array();
175
-			$invoice = new WPInv_Invoice( $post );
176
-
177
-			$actions['edit'] = sprintf(
178
-				'<a href="%1$s">%2$s</a>',
179
-				esc_url( get_edit_post_link( $invoice->get_id() ) ),
180
-				esc_html( __( 'Edit', 'invoicing' ) )
181
-			);
182
-
183
-			if ( ! $invoice->is_draft() ) {
184
-
185
-				$actions['view'] = sprintf(
186
-					'<a href="%1$s">%2$s</a>',
187
-					esc_url( $invoice->get_view_url() ),
188
-					sprintf(
189
-						// translators: %s is the invoice type
190
-						esc_html__( 'View %s', 'invoicing' ),
191
-						getpaid_get_post_type_label( $invoice->get_post_type(), false )
192
-					)
193
-				);
194
-
195
-				$actions['send'] = sprintf(
196
-					'<a href="%1$s">%2$s</a>',
197
-					esc_url(
198
-						wp_nonce_url(
199
-							add_query_arg(
200
-								array(
201
-									'getpaid-admin-action' => 'send_invoice',
202
-									'invoice_id'           => $invoice->get_id(),
203
-								)
204
-							),
205
-							'getpaid-nonce',
206
-							'getpaid-nonce'
207
-						)
208
-					),
209
-					esc_html( __( 'Send to Customer', 'invoicing' ) )
210
-				);
211
-
212
-			}
213
-
214
-			$actions['duplicate'] = sprintf(
215
-				'<a href="%1$s">%2$s</a>',
216
-				esc_url(
217
-					wp_nonce_url(
218
-						add_query_arg(
219
-							array(
220
-								'getpaid-admin-action' => 'duplicate_invoice',
221
-								'invoice_id'           => $post->ID,
222
-							)
223
-						),
224
-						'getpaid-nonce',
225
-						'getpaid-nonce'
226
-					)
227
-				),
228
-				esc_html( __( 'Duplicate', 'invoicing' ) )
229
-			);
174
+            $actions = array();
175
+            $invoice = new WPInv_Invoice( $post );
176
+
177
+            $actions['edit'] = sprintf(
178
+                '<a href="%1$s">%2$s</a>',
179
+                esc_url( get_edit_post_link( $invoice->get_id() ) ),
180
+                esc_html( __( 'Edit', 'invoicing' ) )
181
+            );
182
+
183
+            if ( ! $invoice->is_draft() ) {
184
+
185
+                $actions['view'] = sprintf(
186
+                    '<a href="%1$s">%2$s</a>',
187
+                    esc_url( $invoice->get_view_url() ),
188
+                    sprintf(
189
+                        // translators: %s is the invoice type
190
+                        esc_html__( 'View %s', 'invoicing' ),
191
+                        getpaid_get_post_type_label( $invoice->get_post_type(), false )
192
+                    )
193
+                );
194
+
195
+                $actions['send'] = sprintf(
196
+                    '<a href="%1$s">%2$s</a>',
197
+                    esc_url(
198
+                        wp_nonce_url(
199
+                            add_query_arg(
200
+                                array(
201
+                                    'getpaid-admin-action' => 'send_invoice',
202
+                                    'invoice_id'           => $invoice->get_id(),
203
+                                )
204
+                            ),
205
+                            'getpaid-nonce',
206
+                            'getpaid-nonce'
207
+                        )
208
+                    ),
209
+                    esc_html( __( 'Send to Customer', 'invoicing' ) )
210
+                );
211
+
212
+            }
213
+
214
+            $actions['duplicate'] = sprintf(
215
+                '<a href="%1$s">%2$s</a>',
216
+                esc_url(
217
+                    wp_nonce_url(
218
+                        add_query_arg(
219
+                            array(
220
+                                'getpaid-admin-action' => 'duplicate_invoice',
221
+                                'invoice_id'           => $post->ID,
222
+                            )
223
+                        ),
224
+                        'getpaid-nonce',
225
+                        'getpaid-nonce'
226
+                    )
227
+                ),
228
+                esc_html( __( 'Duplicate', 'invoicing' ) )
229
+            );
230 230
 
231 231
         }
232 232
 
233 233
         return $actions;
234
-	}
235
-
236
-	/**
237
-	 * Returns an array of invoice table columns.
238
-	 */
239
-	public static function invoice_columns( $columns ) {
240
-
241
-		$columns = array(
242
-			'cb'           => $columns['cb'],
243
-			'number'       => __( 'Invoice', 'invoicing' ),
244
-			'customer'     => __( 'Customer', 'invoicing' ),
245
-			'invoice_date' => __( 'Created', 'invoicing' ),
246
-			'payment_date' => __( 'Completed', 'invoicing' ),
247
-			'amount'       => __( 'Amount', 'invoicing' ),
248
-			'recurring'    => __( 'Recurring', 'invoicing' ),
249
-			'status'       => __( 'Status', 'invoicing' ),
250
-		);
251
-
252
-		return apply_filters( 'wpi_invoice_table_columns', $columns );
253
-	}
254
-
255
-	/**
256
-	 * Displays invoice table columns.
257
-	 */
258
-	public static function display_invoice_columns( $column_name, $post_id ) {
259
-
260
-		$invoice = new WPInv_Invoice( $post_id );
261
-
262
-		switch ( $column_name ) {
263
-
264
-			case 'invoice_date':
265
-				$date_time = esc_attr( $invoice->get_created_date() );
266
-				$date      = esc_html( getpaid_format_date_value( $date_time, '&mdash;', true ) );
267
-				echo wp_kses_post( "<span title='$date_time'>$date</span>" );
268
-				break;
269
-
270
-			case 'payment_date':
271
-				if ( $invoice->is_paid() || $invoice->is_refunded() ) {
272
-					$date_time = esc_attr( $invoice->get_completed_date() );
273
-					$date      = esc_html( getpaid_format_date_value( $date_time, '&mdash;', true ) );
274
-					echo wp_kses_post( "<span title='$date_time'>$date</span>" );
275
-
276
-					if ( $_gateway = $invoice->get_gateway() ) {
277
-						$gateway_label = wpinv_get_gateway_admin_label( $_gateway );
278
-
279
-						if ( $transaction_url = $invoice->get_transaction_url() ) {
280
-							$gateway_label = '<a href="' . esc_url( $transaction_url ) . '" target="_blank" title="' . esc_attr__( 'Open transaction link', 'invoicing' ) . '">' . $gateway_label . '</a>';
281
-						}
282
-
283
-						$gateway = '<small class="meta bsui"><span class="fs-xs text-muted fst-normal">' . wp_sprintf( _x( 'Via %s', 'Paid via gateway', 'invoicing' ), $gateway_label ) . '</span></small>';
284
-					} else {
285
-						$gateway = '';
286
-					}
287
-
288
-					$gateway = apply_filters( 'getpaid_admin_invoices_list_table_gateway', $gateway, $invoice );
289
-
290
-					if ( $gateway ) {
291
-						echo wp_kses_post( $gateway ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
292
-					}
293
-				} else {
294
-					echo '&mdash;';
295
-				}
296
-
297
-				break;
298
-
299
-			case 'amount':
300
-				$amount = $invoice->get_total();
301
-				$formated_amount = wp_kses_post( wpinv_price( $amount, $invoice->get_currency() ) );
302
-
303
-				if ( $invoice->is_refunded() ) {
304
-					$refunded_amount = wpinv_price( 0, $invoice->get_currency() );
305
-					echo wp_kses_post( "<del>$formated_amount</del>&nbsp;<ins>$refunded_amount</ins>" );
306
-				} else {
307
-
308
-					$discount = $invoice->get_total_discount();
309
-
310
-					if ( ! empty( $discount ) ) {
311
-						$new_amount = wpinv_price( $amount + $discount, $invoice->get_currency() );
312
-						echo wp_kses_post( "<del>$new_amount</del>&nbsp;<ins>$formated_amount</ins>" );
313
-					} else {
314
-						echo wp_kses_post( $formated_amount );
315
-					}
316
-				}
317
-
318
-				break;
319
-
320
-			case 'status':
321
-				$status = esc_html( $invoice->get_status() );
322
-
323
-				// If it is paid, show the gateway title.
324
-				if ( $invoice->is_paid() ) {
325
-					$gateway = esc_html( $invoice->get_gateway_title() );
326
-					$gateway = wp_sprintf( esc_attr__( 'Paid via %s', 'invoicing' ), esc_html( $gateway ) );
327
-
328
-					echo wp_kses_post( "<span class='bsui wpi-help-tip getpaid-invoice-statuss $status' title='$gateway'><span class='fs-base'>" . $invoice->get_status_label_html() . "</span></span>" );
329
-				} else {
330
-					echo wp_kses_post( "<span class='bsui getpaid-invoice-statuss $status'><span class='fs-base'>" . $invoice->get_status_label_html() . "</span></span>" );
331
-				}
332
-
333
-				// If it is not paid, display the overdue and view status.
334
-				if ( ! $invoice->is_paid() && ! $invoice->is_refunded() ) {
335
-
336
-					// Invoice view status.
337
-					if ( wpinv_is_invoice_viewed( $invoice->get_id() ) ) {
338
-						echo '&nbsp;&nbsp;<i class="fa fa-eye wpi-help-tip" title="' . esc_attr__( 'Viewed by Customer', 'invoicing' ) . '"></i>';
339
-					} else {
340
-						echo '&nbsp;&nbsp;<i class="fa fa-eye-slash wpi-help-tip" title="' . esc_attr__( 'Not Viewed by Customer', 'invoicing' ) . '"></i>';
341
-					}
342
-
343
-					// Display the overview status.
344
-					if ( wpinv_get_option( 'overdue_active' ) ) {
345
-						$due_date = $invoice->get_due_date();
346
-						$fomatted = getpaid_format_date( $due_date );
347
-
348
-						if ( ! empty( $fomatted ) ) {
349
-							$date = wp_sprintf(
350
-								// translators: %s is the due date.
351
-								__( 'Due %s', 'invoicing' ),
352
-								$fomatted
353
-							);
354
-							echo wp_kses_post( "<p class='description' style='color: #888;' title='$due_date'>$fomatted</p>" );
355
-						}
356
-					}
357
-				}
358
-
359
-				break;
360
-
361
-			case 'recurring':
362
-				if ( $invoice->is_recurring() ) {
363
-					echo '<i class="fa fa-check" style="color:#43850a;"></i>';
364
-				} else {
365
-					echo '<i class="fa fa-times" style="color:#616161;"></i>';
366
-				}
367
-				break;
368
-
369
-			case 'number':
370
-				$edit_link       = esc_url( get_edit_post_link( $invoice->get_id() ) );
371
-				$invoice_number  = esc_html( $invoice->get_number() );
372
-				$invoice_details = esc_attr__( 'View Invoice Details', 'invoicing' );
373
-
374
-				echo wp_kses_post( "<a href='$edit_link' title='$invoice_details'><strong>$invoice_number</strong></a>" );
375
-
376
-				do_action( 'getpaid_admin_table_invoice_number_column', $invoice );
377
-				break;
378
-
379
-			case 'customer':
380
-				$customer_name = $invoice->get_user_full_name();
381
-
382
-				if ( empty( $customer_name ) ) {
383
-					$customer_name = $invoice->get_email();
384
-				}
385
-
386
-				if ( ! empty( $customer_name ) ) {
387
-					$customer_details = esc_attr__( 'View Customer Details', 'invoicing' );
388
-					$view_link        = esc_url( add_query_arg( 'user_id', $invoice->get_user_id(), admin_url( 'user-edit.php' ) ) );
389
-					echo wp_kses_post( "<a href='$view_link' title='$customer_details'><span>$customer_name</span></a>" );
390
-				} else {
391
-					echo '<div>&mdash;</div>';
392
-				}
393
-
394
-				break;
395
-
396
-		}
397
-
398
-	}
399
-
400
-	/**
401
-	 * Displays invoice bulk actions.
402
-	 */
403
-	public static function invoice_bulk_actions( $actions ) {
404
-		$actions['resend-invoice'] = __( 'Send to Customer', 'invoicing' );
405
-		return $actions;
406
-	}
407
-
408
-	/**
409
-	 * Processes invoice bulk actions.
410
-	 */
411
-	public static function handle_invoice_bulk_actions( $redirect_url, $action, $post_ids ) {
412
-
413
-		if ( 'resend-invoice' === $action ) {
414
-			foreach ( $post_ids as $post_id ) {
415
-				getpaid()->get( 'invoice_emails' )->user_invoice( new WPInv_Invoice( $post_id ), true );
416
-			}
417
-		}
418
-
419
-		return $redirect_url;
420
-
421
-	}
422
-
423
-	/**
424
-	 * Returns an array of payment forms table columns.
425
-	 */
426
-	public static function payment_form_columns( $columns ) {
427
-
428
-		$columns = array(
429
-			'cb'        => $columns['cb'],
430
-			'title'     => __( 'Name', 'invoicing' ),
431
-			'shortcode' => __( 'Shortcode', 'invoicing' ),
432
-			'earnings'  => __( 'Revenue', 'invoicing' ),
433
-			'refunds'   => __( 'Refunded', 'invoicing' ),
434
-			'items'     => __( 'Items', 'invoicing' ),
435
-			'date'      => __( 'Date', 'invoicing' ),
436
-		);
437
-
438
-		return apply_filters( 'wpi_payment_form_table_columns', $columns );
439
-
440
-	}
441
-
442
-	/**
443
-	 * Displays payment form table columns.
444
-	 */
445
-	public static function display_payment_form_columns( $column_name, $post_id ) {
446
-
447
-		// Retrieve the payment form.
448
-		$form = new GetPaid_Payment_Form( $post_id );
449
-
450
-		switch ( $column_name ) {
451
-
452
-			case 'earnings':
453
-				echo wp_kses_post( wpinv_price( $form->get_earned() ) );
454
-				break;
455
-
456
-			case 'refunds':
457
-				echo wp_kses_post( wpinv_price( $form->get_refunded() ) );
458
-				break;
459
-
460
-			case 'refunds':
461
-				echo wp_kses_post( wpinv_price( $form->get_refunded() ) );
462
-				break;
463
-
464
-			case 'shortcode':
465
-				if ( $form->is_default() ) {
466
-					echo '&mdash;';
467
-				} else {
468
-					echo '<input onClick="this.select()" type="text" value="[getpaid form=' . esc_attr( $form->get_id() ) . ']" style="width: 100%;" readonly/>';
469
-				}
470
-
471
-				break;
234
+    }
235
+
236
+    /**
237
+     * Returns an array of invoice table columns.
238
+     */
239
+    public static function invoice_columns( $columns ) {
240
+
241
+        $columns = array(
242
+            'cb'           => $columns['cb'],
243
+            'number'       => __( 'Invoice', 'invoicing' ),
244
+            'customer'     => __( 'Customer', 'invoicing' ),
245
+            'invoice_date' => __( 'Created', 'invoicing' ),
246
+            'payment_date' => __( 'Completed', 'invoicing' ),
247
+            'amount'       => __( 'Amount', 'invoicing' ),
248
+            'recurring'    => __( 'Recurring', 'invoicing' ),
249
+            'status'       => __( 'Status', 'invoicing' ),
250
+        );
251
+
252
+        return apply_filters( 'wpi_invoice_table_columns', $columns );
253
+    }
254
+
255
+    /**
256
+     * Displays invoice table columns.
257
+     */
258
+    public static function display_invoice_columns( $column_name, $post_id ) {
259
+
260
+        $invoice = new WPInv_Invoice( $post_id );
261
+
262
+        switch ( $column_name ) {
263
+
264
+            case 'invoice_date':
265
+                $date_time = esc_attr( $invoice->get_created_date() );
266
+                $date      = esc_html( getpaid_format_date_value( $date_time, '&mdash;', true ) );
267
+                echo wp_kses_post( "<span title='$date_time'>$date</span>" );
268
+                break;
269
+
270
+            case 'payment_date':
271
+                if ( $invoice->is_paid() || $invoice->is_refunded() ) {
272
+                    $date_time = esc_attr( $invoice->get_completed_date() );
273
+                    $date      = esc_html( getpaid_format_date_value( $date_time, '&mdash;', true ) );
274
+                    echo wp_kses_post( "<span title='$date_time'>$date</span>" );
275
+
276
+                    if ( $_gateway = $invoice->get_gateway() ) {
277
+                        $gateway_label = wpinv_get_gateway_admin_label( $_gateway );
278
+
279
+                        if ( $transaction_url = $invoice->get_transaction_url() ) {
280
+                            $gateway_label = '<a href="' . esc_url( $transaction_url ) . '" target="_blank" title="' . esc_attr__( 'Open transaction link', 'invoicing' ) . '">' . $gateway_label . '</a>';
281
+                        }
282
+
283
+                        $gateway = '<small class="meta bsui"><span class="fs-xs text-muted fst-normal">' . wp_sprintf( _x( 'Via %s', 'Paid via gateway', 'invoicing' ), $gateway_label ) . '</span></small>';
284
+                    } else {
285
+                        $gateway = '';
286
+                    }
287
+
288
+                    $gateway = apply_filters( 'getpaid_admin_invoices_list_table_gateway', $gateway, $invoice );
289
+
290
+                    if ( $gateway ) {
291
+                        echo wp_kses_post( $gateway ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
292
+                    }
293
+                } else {
294
+                    echo '&mdash;';
295
+                }
296
+
297
+                break;
298
+
299
+            case 'amount':
300
+                $amount = $invoice->get_total();
301
+                $formated_amount = wp_kses_post( wpinv_price( $amount, $invoice->get_currency() ) );
302
+
303
+                if ( $invoice->is_refunded() ) {
304
+                    $refunded_amount = wpinv_price( 0, $invoice->get_currency() );
305
+                    echo wp_kses_post( "<del>$formated_amount</del>&nbsp;<ins>$refunded_amount</ins>" );
306
+                } else {
307
+
308
+                    $discount = $invoice->get_total_discount();
309
+
310
+                    if ( ! empty( $discount ) ) {
311
+                        $new_amount = wpinv_price( $amount + $discount, $invoice->get_currency() );
312
+                        echo wp_kses_post( "<del>$new_amount</del>&nbsp;<ins>$formated_amount</ins>" );
313
+                    } else {
314
+                        echo wp_kses_post( $formated_amount );
315
+                    }
316
+                }
317
+
318
+                break;
319
+
320
+            case 'status':
321
+                $status = esc_html( $invoice->get_status() );
322
+
323
+                // If it is paid, show the gateway title.
324
+                if ( $invoice->is_paid() ) {
325
+                    $gateway = esc_html( $invoice->get_gateway_title() );
326
+                    $gateway = wp_sprintf( esc_attr__( 'Paid via %s', 'invoicing' ), esc_html( $gateway ) );
327
+
328
+                    echo wp_kses_post( "<span class='bsui wpi-help-tip getpaid-invoice-statuss $status' title='$gateway'><span class='fs-base'>" . $invoice->get_status_label_html() . "</span></span>" );
329
+                } else {
330
+                    echo wp_kses_post( "<span class='bsui getpaid-invoice-statuss $status'><span class='fs-base'>" . $invoice->get_status_label_html() . "</span></span>" );
331
+                }
332
+
333
+                // If it is not paid, display the overdue and view status.
334
+                if ( ! $invoice->is_paid() && ! $invoice->is_refunded() ) {
335
+
336
+                    // Invoice view status.
337
+                    if ( wpinv_is_invoice_viewed( $invoice->get_id() ) ) {
338
+                        echo '&nbsp;&nbsp;<i class="fa fa-eye wpi-help-tip" title="' . esc_attr__( 'Viewed by Customer', 'invoicing' ) . '"></i>';
339
+                    } else {
340
+                        echo '&nbsp;&nbsp;<i class="fa fa-eye-slash wpi-help-tip" title="' . esc_attr__( 'Not Viewed by Customer', 'invoicing' ) . '"></i>';
341
+                    }
342
+
343
+                    // Display the overview status.
344
+                    if ( wpinv_get_option( 'overdue_active' ) ) {
345
+                        $due_date = $invoice->get_due_date();
346
+                        $fomatted = getpaid_format_date( $due_date );
347
+
348
+                        if ( ! empty( $fomatted ) ) {
349
+                            $date = wp_sprintf(
350
+                                // translators: %s is the due date.
351
+                                __( 'Due %s', 'invoicing' ),
352
+                                $fomatted
353
+                            );
354
+                            echo wp_kses_post( "<p class='description' style='color: #888;' title='$due_date'>$fomatted</p>" );
355
+                        }
356
+                    }
357
+                }
358
+
359
+                break;
360
+
361
+            case 'recurring':
362
+                if ( $invoice->is_recurring() ) {
363
+                    echo '<i class="fa fa-check" style="color:#43850a;"></i>';
364
+                } else {
365
+                    echo '<i class="fa fa-times" style="color:#616161;"></i>';
366
+                }
367
+                break;
368
+
369
+            case 'number':
370
+                $edit_link       = esc_url( get_edit_post_link( $invoice->get_id() ) );
371
+                $invoice_number  = esc_html( $invoice->get_number() );
372
+                $invoice_details = esc_attr__( 'View Invoice Details', 'invoicing' );
373
+
374
+                echo wp_kses_post( "<a href='$edit_link' title='$invoice_details'><strong>$invoice_number</strong></a>" );
375
+
376
+                do_action( 'getpaid_admin_table_invoice_number_column', $invoice );
377
+                break;
378
+
379
+            case 'customer':
380
+                $customer_name = $invoice->get_user_full_name();
381
+
382
+                if ( empty( $customer_name ) ) {
383
+                    $customer_name = $invoice->get_email();
384
+                }
385
+
386
+                if ( ! empty( $customer_name ) ) {
387
+                    $customer_details = esc_attr__( 'View Customer Details', 'invoicing' );
388
+                    $view_link        = esc_url( add_query_arg( 'user_id', $invoice->get_user_id(), admin_url( 'user-edit.php' ) ) );
389
+                    echo wp_kses_post( "<a href='$view_link' title='$customer_details'><span>$customer_name</span></a>" );
390
+                } else {
391
+                    echo '<div>&mdash;</div>';
392
+                }
393
+
394
+                break;
472 395
 
473
-			case 'items':
474
-				$items = $form->get_items();
475
-
476
-				if ( $form->is_default() || empty( $items ) ) {
477
-					echo '&mdash;';
478
-					return;
479
-				}
480
-
481
-				$_items = array();
482
-
483
-				foreach ( $items as $item ) {
484
-					$url = $item->get_edit_url();
485
-
486
-					if ( empty( $url ) ) {
487
-						$_items[] = esc_html( $item->get_name() );
488
-					} else {
489
-						$_items[] = sprintf(
490
-							'<a href="%s">%s</a>',
491
-							esc_url( $url ),
492
-							esc_html( $item->get_name() )
493
-						);
494
-					}
396
+        }
397
+
398
+    }
399
+
400
+    /**
401
+     * Displays invoice bulk actions.
402
+     */
403
+    public static function invoice_bulk_actions( $actions ) {
404
+        $actions['resend-invoice'] = __( 'Send to Customer', 'invoicing' );
405
+        return $actions;
406
+    }
407
+
408
+    /**
409
+     * Processes invoice bulk actions.
410
+     */
411
+    public static function handle_invoice_bulk_actions( $redirect_url, $action, $post_ids ) {
412
+
413
+        if ( 'resend-invoice' === $action ) {
414
+            foreach ( $post_ids as $post_id ) {
415
+                getpaid()->get( 'invoice_emails' )->user_invoice( new WPInv_Invoice( $post_id ), true );
416
+            }
417
+        }
418
+
419
+        return $redirect_url;
420
+
421
+    }
422
+
423
+    /**
424
+     * Returns an array of payment forms table columns.
425
+     */
426
+    public static function payment_form_columns( $columns ) {
427
+
428
+        $columns = array(
429
+            'cb'        => $columns['cb'],
430
+            'title'     => __( 'Name', 'invoicing' ),
431
+            'shortcode' => __( 'Shortcode', 'invoicing' ),
432
+            'earnings'  => __( 'Revenue', 'invoicing' ),
433
+            'refunds'   => __( 'Refunded', 'invoicing' ),
434
+            'items'     => __( 'Items', 'invoicing' ),
435
+            'date'      => __( 'Date', 'invoicing' ),
436
+        );
437
+
438
+        return apply_filters( 'wpi_payment_form_table_columns', $columns );
439
+
440
+    }
441
+
442
+    /**
443
+     * Displays payment form table columns.
444
+     */
445
+    public static function display_payment_form_columns( $column_name, $post_id ) {
446
+
447
+        // Retrieve the payment form.
448
+        $form = new GetPaid_Payment_Form( $post_id );
449
+
450
+        switch ( $column_name ) {
451
+
452
+            case 'earnings':
453
+                echo wp_kses_post( wpinv_price( $form->get_earned() ) );
454
+                break;
455
+
456
+            case 'refunds':
457
+                echo wp_kses_post( wpinv_price( $form->get_refunded() ) );
458
+                break;
459
+
460
+            case 'refunds':
461
+                echo wp_kses_post( wpinv_price( $form->get_refunded() ) );
462
+                break;
463
+
464
+            case 'shortcode':
465
+                if ( $form->is_default() ) {
466
+                    echo '&mdash;';
467
+                } else {
468
+                    echo '<input onClick="this.select()" type="text" value="[getpaid form=' . esc_attr( $form->get_id() ) . ']" style="width: 100%;" readonly/>';
469
+                }
470
+
471
+                break;
472
+
473
+            case 'items':
474
+                $items = $form->get_items();
475
+
476
+                if ( $form->is_default() || empty( $items ) ) {
477
+                    echo '&mdash;';
478
+                    return;
479
+                }
480
+
481
+                $_items = array();
482
+
483
+                foreach ( $items as $item ) {
484
+                    $url = $item->get_edit_url();
485
+
486
+                    if ( empty( $url ) ) {
487
+                        $_items[] = esc_html( $item->get_name() );
488
+                    } else {
489
+                        $_items[] = sprintf(
490
+                            '<a href="%s">%s</a>',
491
+                            esc_url( $url ),
492
+                            esc_html( $item->get_name() )
493
+                        );
494
+                    }
495 495
 }
496 496
 
497
-				echo wp_kses_post( implode( '<br>', $_items ) );
497
+                echo wp_kses_post( implode( '<br>', $_items ) );
498
+
499
+                break;
500
+
501
+        }
502
+
503
+    }
504
+
505
+    /**
506
+     * Filters post states.
507
+     */
508
+    public static function filter_payment_form_state( $post_states, $post ) {
509
+
510
+        if ( 'wpi_payment_form' === $post->post_type && wpinv_get_default_payment_form() === $post->ID ) {
511
+            $post_states['default_form'] = __( 'Default Payment Form', 'invoicing' );
512
+        }
513
+
514
+        return $post_states;
515
+
516
+    }
517
+
518
+    /**
519
+     * Returns an array of coupon table columns.
520
+     */
521
+    public static function discount_columns( $columns ) {
522
+
523
+        $columns = array(
524
+            'cb'          => $columns['cb'],
525
+            'title'       => __( 'Name', 'invoicing' ),
526
+            'code'        => __( 'Code', 'invoicing' ),
527
+            'amount'      => __( 'Amount', 'invoicing' ),
528
+            'usage'       => __( 'Usage / Limit', 'invoicing' ),
529
+            'start_date'  => __( 'Start Date', 'invoicing' ),
530
+            'expiry_date' => __( 'Expiry Date', 'invoicing' ),
531
+        );
532
+
533
+        return apply_filters( 'wpi_discount_table_columns', $columns );
534
+    }
498 535
 
499
-				break;
536
+    /**
537
+     * Filters post states.
538
+     */
539
+    public static function filter_discount_state( $post_states, $post ) {
500 540
 
501
-		}
541
+        if ( 'wpi_discount' === $post->post_type ) {
502 542
 
503
-	}
543
+            $discount = new WPInv_Discount( $post );
504 544
 
505
-	/**
506
-	 * Filters post states.
507
-	 */
508
-	public static function filter_payment_form_state( $post_states, $post ) {
545
+            $status = $discount->is_expired() ? 'expired' : $discount->get_status();
509 546
 
510
-		if ( 'wpi_payment_form' === $post->post_type && wpinv_get_default_payment_form() === $post->ID ) {
511
-			$post_states['default_form'] = __( 'Default Payment Form', 'invoicing' );
512
-		}
547
+            if ( 'publish' !== $status ) {
548
+                return array(
549
+                    'discount_status' => wpinv_discount_status( $status ),
550
+                );
551
+            }
552
+
553
+            return array();
554
+
555
+        }
556
+
557
+        return $post_states;
513 558
 
514
-		return $post_states;
559
+    }
515 560
 
516
-	}
561
+    /**
562
+     * Returns an array of items table columns.
563
+     */
564
+    public static function item_columns( $columns ) {
565
+
566
+        $columns = array(
567
+            'cb'        => $columns['cb'],
568
+            'title'     => __( 'Name', 'invoicing' ),
569
+            'price'     => __( 'Price', 'invoicing' ),
570
+            'vat_rule'  => __( 'Tax Rule', 'invoicing' ),
571
+            'vat_class' => __( 'Tax Class', 'invoicing' ),
572
+            'type'      => __( 'Type', 'invoicing' ),
573
+            'shortcode' => __( 'Shortcode', 'invoicing' ),
574
+        );
575
+
576
+        if ( ! wpinv_use_taxes() ) {
577
+            unset( $columns['vat_rule'] );
578
+            unset( $columns['vat_class'] );
579
+        }
517 580
 
518
-	/**
519
-	 * Returns an array of coupon table columns.
520
-	 */
521
-	public static function discount_columns( $columns ) {
581
+        return apply_filters( 'wpi_item_table_columns', $columns );
582
+    }
522 583
 
523
-		$columns = array(
524
-			'cb'          => $columns['cb'],
525
-			'title'       => __( 'Name', 'invoicing' ),
526
-			'code'        => __( 'Code', 'invoicing' ),
527
-			'amount'      => __( 'Amount', 'invoicing' ),
528
-			'usage'       => __( 'Usage / Limit', 'invoicing' ),
529
-			'start_date'  => __( 'Start Date', 'invoicing' ),
530
-			'expiry_date' => __( 'Expiry Date', 'invoicing' ),
531
-		);
584
+    /**
585
+     * Returns an array of sortable items table columns.
586
+     */
587
+    public static function sortable_item_columns( $columns ) {
588
+
589
+        return array_merge(
590
+            $columns,
591
+            array(
592
+                'price'     => 'price',
593
+                'vat_rule'  => 'vat_rule',
594
+                'vat_class' => 'vat_class',
595
+                'type'      => 'type',
596
+            )
597
+        );
532 598
 
533
-		return apply_filters( 'wpi_discount_table_columns', $columns );
534
-	}
599
+    }
535 600
 
536
-	/**
537
-	 * Filters post states.
538
-	 */
539
-	public static function filter_discount_state( $post_states, $post ) {
601
+    /**
602
+     * Displays items table columns.
603
+     */
604
+    public static function display_item_columns( $column_name, $post_id ) {
540 605
 
541
-		if ( 'wpi_discount' === $post->post_type ) {
606
+        $item = new WPInv_Item( $post_id );
542 607
 
543
-			$discount = new WPInv_Discount( $post );
608
+        switch ( $column_name ) {
544 609
 
545
-			$status = $discount->is_expired() ? 'expired' : $discount->get_status();
610
+            case 'price':
611
+                if ( ! $item->is_recurring() ) {
612
+                    echo wp_kses_post( $item->get_the_price() );
613
+                    break;
614
+                }
546 615
 
547
-			if ( 'publish' !== $status ) {
548
-				return array(
549
-					'discount_status' => wpinv_discount_status( $status ),
550
-				);
551
-			}
616
+                $price = wp_sprintf(
617
+                    __( '%1$s / %2$s', 'invoicing' ),
618
+                    $item->get_the_price(),
619
+                    getpaid_get_subscription_period_label( $item->get_recurring_period(), $item->get_recurring_interval(), '' )
620
+                );
552 621
 
553
-			return array();
622
+                if ( $item->get_the_price() == $item->get_the_initial_price() ) {
623
+                    echo wp_kses_post( $price );
624
+                    break;
625
+                }
554 626
 
555
-		}
627
+                echo wp_kses_post( $item->get_the_initial_price() );
556 628
 
557
-		return $post_states;
629
+                echo '<span class="meta">' . wp_sprintf( esc_html__( 'then %s', 'invoicing' ), wp_kses_post( $price ) ) . '</span>';
630
+                break;
558 631
 
559
-	}
632
+            case 'vat_rule':
633
+                echo wp_kses_post( getpaid_get_tax_rule_label( $item->get_vat_rule() ) );
634
+                break;
560 635
 
561
-	/**
562
-	 * Returns an array of items table columns.
563
-	 */
564
-	public static function item_columns( $columns ) {
636
+            case 'vat_class':
637
+                echo wp_kses_post( getpaid_get_tax_class_label( $item->get_vat_class() ) );
638
+                break;
565 639
 
566
-		$columns = array(
567
-			'cb'        => $columns['cb'],
568
-			'title'     => __( 'Name', 'invoicing' ),
569
-			'price'     => __( 'Price', 'invoicing' ),
570
-			'vat_rule'  => __( 'Tax Rule', 'invoicing' ),
571
-			'vat_class' => __( 'Tax Class', 'invoicing' ),
572
-			'type'      => __( 'Type', 'invoicing' ),
573
-			'shortcode' => __( 'Shortcode', 'invoicing' ),
574
-		);
640
+            case 'shortcode':
641
+                if ( $item->is_type( array( '', 'fee', 'custom' ) ) ) {
642
+                    echo '<input onClick="this.select()" type="text" value="[getpaid item=' . esc_attr( $item->get_id() ) . ' button=\'Buy Now\']" style="width: 100%;" readonly/>';
643
+                } else {
644
+                    echo '&mdash;';
645
+                }
575 646
 
576
-		if ( ! wpinv_use_taxes() ) {
577
-			unset( $columns['vat_rule'] );
578
-			unset( $columns['vat_class'] );
579
-		}
647
+                break;
580 648
 
581
-		return apply_filters( 'wpi_item_table_columns', $columns );
582
-	}
649
+            case 'type':
650
+                echo wp_kses_post( wpinv_item_type( $item->get_id() ) . '<span class="meta">' . $item->get_custom_singular_name() . '</span>' );
651
+                break;
583 652
 
584
-	/**
585
-	 * Returns an array of sortable items table columns.
586
-	 */
587
-	public static function sortable_item_columns( $columns ) {
588
-
589
-		return array_merge(
590
-			$columns,
591
-			array(
592
-				'price'     => 'price',
593
-				'vat_rule'  => 'vat_rule',
594
-				'vat_class' => 'vat_class',
595
-				'type'      => 'type',
596
-			)
597
-		);
598
-
599
-	}
600
-
601
-	/**
602
-	 * Displays items table columns.
603
-	 */
604
-	public static function display_item_columns( $column_name, $post_id ) {
605
-
606
-		$item = new WPInv_Item( $post_id );
607
-
608
-		switch ( $column_name ) {
609
-
610
-			case 'price':
611
-				if ( ! $item->is_recurring() ) {
612
-					echo wp_kses_post( $item->get_the_price() );
613
-					break;
614
-				}
615
-
616
-				$price = wp_sprintf(
617
-					__( '%1$s / %2$s', 'invoicing' ),
618
-					$item->get_the_price(),
619
-					getpaid_get_subscription_period_label( $item->get_recurring_period(), $item->get_recurring_interval(), '' )
620
-				);
621
-
622
-				if ( $item->get_the_price() == $item->get_the_initial_price() ) {
623
-					echo wp_kses_post( $price );
624
-					break;
625
-				}
626
-
627
-				echo wp_kses_post( $item->get_the_initial_price() );
628
-
629
-				echo '<span class="meta">' . wp_sprintf( esc_html__( 'then %s', 'invoicing' ), wp_kses_post( $price ) ) . '</span>';
630
-				break;
631
-
632
-			case 'vat_rule':
633
-				echo wp_kses_post( getpaid_get_tax_rule_label( $item->get_vat_rule() ) );
634
-				break;
635
-
636
-			case 'vat_class':
637
-				echo wp_kses_post( getpaid_get_tax_class_label( $item->get_vat_class() ) );
638
-				break;
639
-
640
-			case 'shortcode':
641
-				if ( $item->is_type( array( '', 'fee', 'custom' ) ) ) {
642
-					echo '<input onClick="this.select()" type="text" value="[getpaid item=' . esc_attr( $item->get_id() ) . ' button=\'Buy Now\']" style="width: 100%;" readonly/>';
643
-				} else {
644
-					echo '&mdash;';
645
-				}
646
-
647
-				break;
648
-
649
-			case 'type':
650
-				echo wp_kses_post( wpinv_item_type( $item->get_id() ) . '<span class="meta">' . $item->get_custom_singular_name() . '</span>' );
651
-				break;
652
-
653
-		}
654
-
655
-	}
656
-
657
-	/**
658
-	 * Lets users filter items using taxes.
659
-	 */
660
-	public static function add_item_filters( $post_type ) {
661
-
662
-		// Abort if we're not dealing with items.
663
-		if ( 'wpi_item' !== $post_type ) {
664
-			return;
665
-		}
666
-
667
-		// Filter by vat rules.
668
-		if ( wpinv_use_taxes() ) {
669
-
670
-			// Sanitize selected vat rule.
671
-			$vat_rule   = '';
672
-			$vat_rules  = getpaid_get_tax_rules();
673
-			if ( isset( $_GET['vat_rule'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
674
-				$vat_rule   = sanitize_text_field( $_GET['vat_rule'] ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended
675
-			}
676
-
677
-			// Filter by VAT rule.
678
-			wpinv_html_select(
679
-				array(
680
-					'options'          => array_merge(
681
-						array(
682
-							'' => __( 'All Tax Rules', 'invoicing' ),
683
-						),
684
-						$vat_rules
685
-					),
686
-					'name'             => 'vat_rule',
687
-					'id'               => 'vat_rule',
688
-					'selected'         => in_array( $vat_rule, array_keys( $vat_rules ), true ) ? $vat_rule : '',
689
-					'show_option_all'  => false,
690
-					'show_option_none' => false,
691
-				)
692
-			);
693
-
694
-			// Filter by VAT class.
695
-
696
-			// Sanitize selected vat rule.
697
-			$vat_class   = '';
698
-			$vat_classes = getpaid_get_tax_classes();
699
-			if ( isset( $_GET['vat_class'] ) ) {  // phpcs:ignore WordPress.Security.NonceVerification.Recommended
700
-				$vat_class   = sanitize_text_field( $_GET['vat_class'] );  // phpcs:ignore WordPress.Security.NonceVerification.Recommended
701
-			}
702
-
703
-			wpinv_html_select(
704
-				array(
705
-					'options'          => array_merge(
706
-						array(
707
-							'' => __( 'All Tax Classes', 'invoicing' ),
708
-						),
709
-						$vat_classes
710
-					),
711
-					'name'             => 'vat_class',
712
-					'id'               => 'vat_class',
713
-					'selected'         => in_array( $vat_class, array_keys( $vat_classes ), true ) ? $vat_class : '',
714
-					'show_option_all'  => false,
715
-					'show_option_none' => false,
716
-				)
717
-			);
718
-
719
-		}
720
-
721
-		// Filter by item type.
722
-		$type   = '';
723
-		if ( isset( $_GET['type'] ) ) {  // phpcs:ignore WordPress.Security.NonceVerification.Recommended
724
-			$type   = sanitize_text_field( $_GET['type'] );  // phpcs:ignore WordPress.Security.NonceVerification.Recommended
725
-		}
726
-
727
-		wpinv_html_select(
728
-			array(
729
-				'options'          => array_merge(
730
-					array(
731
-						'' => __( 'All item types', 'invoicing' ),
732
-					),
733
-					wpinv_get_item_types()
734
-				),
735
-				'name'             => 'type',
736
-				'id'               => 'type',
737
-				'selected'         => in_array( $type, wpinv_item_types(), true ) ? $type : '',
738
-				'show_option_all'  => false,
739
-				'show_option_none' => false,
740
-			)
741
-		);
742
-
743
-	}
744
-
745
-	/**
746
-	 * Filters the item query.
747
-	 */
748
-	public static function filter_item_query( $query ) {
749
-
750
-		// modify the query only if it admin and main query.
751
-		if ( ! ( is_admin() && $query->is_main_query() ) ) {
752
-			return $query;
753
-		}
754
-
755
-		// we want to modify the query for our items.
756
-		if ( empty( $query->query['post_type'] ) || 'wpi_item' !== $query->query['post_type'] ) {
757
-			return $query;
758
-		}
759
-
760
-		if ( empty( $query->query_vars['meta_query'] ) ) {
761
-			$query->query_vars['meta_query'] = array();
762
-		}
763
-
764
-		// Filter vat rule type
653
+        }
654
+
655
+    }
656
+
657
+    /**
658
+     * Lets users filter items using taxes.
659
+     */
660
+    public static function add_item_filters( $post_type ) {
661
+
662
+        // Abort if we're not dealing with items.
663
+        if ( 'wpi_item' !== $post_type ) {
664
+            return;
665
+        }
666
+
667
+        // Filter by vat rules.
668
+        if ( wpinv_use_taxes() ) {
669
+
670
+            // Sanitize selected vat rule.
671
+            $vat_rule   = '';
672
+            $vat_rules  = getpaid_get_tax_rules();
673
+            if ( isset( $_GET['vat_rule'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
674
+                $vat_rule   = sanitize_text_field( $_GET['vat_rule'] ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended
675
+            }
676
+
677
+            // Filter by VAT rule.
678
+            wpinv_html_select(
679
+                array(
680
+                    'options'          => array_merge(
681
+                        array(
682
+                            '' => __( 'All Tax Rules', 'invoicing' ),
683
+                        ),
684
+                        $vat_rules
685
+                    ),
686
+                    'name'             => 'vat_rule',
687
+                    'id'               => 'vat_rule',
688
+                    'selected'         => in_array( $vat_rule, array_keys( $vat_rules ), true ) ? $vat_rule : '',
689
+                    'show_option_all'  => false,
690
+                    'show_option_none' => false,
691
+                )
692
+            );
693
+
694
+            // Filter by VAT class.
695
+
696
+            // Sanitize selected vat rule.
697
+            $vat_class   = '';
698
+            $vat_classes = getpaid_get_tax_classes();
699
+            if ( isset( $_GET['vat_class'] ) ) {  // phpcs:ignore WordPress.Security.NonceVerification.Recommended
700
+                $vat_class   = sanitize_text_field( $_GET['vat_class'] );  // phpcs:ignore WordPress.Security.NonceVerification.Recommended
701
+            }
702
+
703
+            wpinv_html_select(
704
+                array(
705
+                    'options'          => array_merge(
706
+                        array(
707
+                            '' => __( 'All Tax Classes', 'invoicing' ),
708
+                        ),
709
+                        $vat_classes
710
+                    ),
711
+                    'name'             => 'vat_class',
712
+                    'id'               => 'vat_class',
713
+                    'selected'         => in_array( $vat_class, array_keys( $vat_classes ), true ) ? $vat_class : '',
714
+                    'show_option_all'  => false,
715
+                    'show_option_none' => false,
716
+                )
717
+            );
718
+
719
+        }
720
+
721
+        // Filter by item type.
722
+        $type   = '';
723
+        if ( isset( $_GET['type'] ) ) {  // phpcs:ignore WordPress.Security.NonceVerification.Recommended
724
+            $type   = sanitize_text_field( $_GET['type'] );  // phpcs:ignore WordPress.Security.NonceVerification.Recommended
725
+        }
726
+
727
+        wpinv_html_select(
728
+            array(
729
+                'options'          => array_merge(
730
+                    array(
731
+                        '' => __( 'All item types', 'invoicing' ),
732
+                    ),
733
+                    wpinv_get_item_types()
734
+                ),
735
+                'name'             => 'type',
736
+                'id'               => 'type',
737
+                'selected'         => in_array( $type, wpinv_item_types(), true ) ? $type : '',
738
+                'show_option_all'  => false,
739
+                'show_option_none' => false,
740
+            )
741
+        );
742
+
743
+    }
744
+
745
+    /**
746
+     * Filters the item query.
747
+     */
748
+    public static function filter_item_query( $query ) {
749
+
750
+        // modify the query only if it admin and main query.
751
+        if ( ! ( is_admin() && $query->is_main_query() ) ) {
752
+            return $query;
753
+        }
754
+
755
+        // we want to modify the query for our items.
756
+        if ( empty( $query->query['post_type'] ) || 'wpi_item' !== $query->query['post_type'] ) {
757
+            return $query;
758
+        }
759
+
760
+        if ( empty( $query->query_vars['meta_query'] ) ) {
761
+            $query->query_vars['meta_query'] = array();
762
+        }
763
+
764
+        // Filter vat rule type
765 765
         if ( ! empty( $_GET['vat_rule'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
766 766
             $query->query_vars['meta_query'][] = array(
767 767
                 'key'     => '_wpinv_vat_rule',
@@ -786,101 +786,101 @@  discard block
 block discarded – undo
786 786
                 'value'   => sanitize_text_field( $_GET['type'] ), // phpcs:ignore WordPress.Security.NonceVerification.Recommended
787 787
                 'compare' => '=',
788 788
             );
789
-		}
790
-
791
-		$query->query_vars['meta_query'][] = array(
792
-			'key'     => '_wpinv_one_time',
793
-			'compare' => 'NOT EXISTS',
794
-		);
795
-	}
796
-
797
-	/**
798
-	 * Reorders items.
799
-	 */
800
-	public static function reorder_items( $vars ) {
801
-		global $typenow;
802
-
803
-		if ( 'wpi_item' !== $typenow || empty( $vars['orderby'] ) ) {
804
-			return $vars;
805
-		}
806
-
807
-		// By item type.
808
-		if ( 'type' === $vars['orderby'] ) {
809
-			return array_merge(
810
-				$vars,
811
-				array(
812
-					'meta_key' => '_wpinv_type',
813
-					'orderby'  => 'meta_value',
814
-				)
815
-			);
816
-		}
817
-
818
-		// By vat class.
819
-		if ( 'vat_class' === $vars['orderby'] ) {
820
-			return array_merge(
821
-				$vars,
822
-				array(
823
-					'meta_key' => '_wpinv_vat_class',
824
-					'orderby'  => 'meta_value',
825
-				)
826
-			);
827
-		}
828
-
829
-		// By vat rule.
830
-		if ( 'vat_rule' === $vars['orderby'] ) {
831
-			return array_merge(
832
-				$vars,
833
-				array(
834
-					'meta_key' => '_wpinv_vat_rule',
835
-					'orderby'  => 'meta_value',
836
-				)
837
-			);
838
-		}
839
-
840
-		// By price.
841
-		if ( 'price' === $vars['orderby'] ) {
842
-			return array_merge(
843
-				$vars,
844
-				array(
845
-					'meta_key' => '_wpinv_price',
846
-					'orderby'  => 'meta_value_num',
847
-				)
848
-			);
849
-		}
850
-
851
-		return $vars;
852
-
853
-	}
854
-
855
-	/**
856
-	 * Fired when deleting a post.
857
-	 */
858
-	public static function delete_post( $post_id ) {
859
-
860
-		switch ( get_post_type( $post_id ) ) {
861
-
862
-			case 'wpi_item':
863
-				do_action( 'getpaid_before_delete_item', new WPInv_Item( $post_id ) );
864
-				break;
865
-
866
-			case 'wpi_payment_form':
867
-				do_action( 'getpaid_before_delete_payment_form', new GetPaid_Payment_Form( $post_id ) );
868
-				break;
869
-
870
-			case 'wpi_discount':
871
-				do_action( 'getpaid_before_delete_discount', new WPInv_Discount( $post_id ) );
872
-				break;
873
-
874
-			case 'wpi_invoice':
875
-				$invoice = new WPInv_Invoice( $post_id );
876
-				do_action( 'getpaid_before_delete_invoice', $invoice );
877
-				$invoice->get_data_store()->delete_items( $invoice );
878
-				$invoice->get_data_store()->delete_special_fields( $invoice );
879
-				break;
880
-		}
881
-	}
882
-
883
-	/**
789
+        }
790
+
791
+        $query->query_vars['meta_query'][] = array(
792
+            'key'     => '_wpinv_one_time',
793
+            'compare' => 'NOT EXISTS',
794
+        );
795
+    }
796
+
797
+    /**
798
+     * Reorders items.
799
+     */
800
+    public static function reorder_items( $vars ) {
801
+        global $typenow;
802
+
803
+        if ( 'wpi_item' !== $typenow || empty( $vars['orderby'] ) ) {
804
+            return $vars;
805
+        }
806
+
807
+        // By item type.
808
+        if ( 'type' === $vars['orderby'] ) {
809
+            return array_merge(
810
+                $vars,
811
+                array(
812
+                    'meta_key' => '_wpinv_type',
813
+                    'orderby'  => 'meta_value',
814
+                )
815
+            );
816
+        }
817
+
818
+        // By vat class.
819
+        if ( 'vat_class' === $vars['orderby'] ) {
820
+            return array_merge(
821
+                $vars,
822
+                array(
823
+                    'meta_key' => '_wpinv_vat_class',
824
+                    'orderby'  => 'meta_value',
825
+                )
826
+            );
827
+        }
828
+
829
+        // By vat rule.
830
+        if ( 'vat_rule' === $vars['orderby'] ) {
831
+            return array_merge(
832
+                $vars,
833
+                array(
834
+                    'meta_key' => '_wpinv_vat_rule',
835
+                    'orderby'  => 'meta_value',
836
+                )
837
+            );
838
+        }
839
+
840
+        // By price.
841
+        if ( 'price' === $vars['orderby'] ) {
842
+            return array_merge(
843
+                $vars,
844
+                array(
845
+                    'meta_key' => '_wpinv_price',
846
+                    'orderby'  => 'meta_value_num',
847
+                )
848
+            );
849
+        }
850
+
851
+        return $vars;
852
+
853
+    }
854
+
855
+    /**
856
+     * Fired when deleting a post.
857
+     */
858
+    public static function delete_post( $post_id ) {
859
+
860
+        switch ( get_post_type( $post_id ) ) {
861
+
862
+            case 'wpi_item':
863
+                do_action( 'getpaid_before_delete_item', new WPInv_Item( $post_id ) );
864
+                break;
865
+
866
+            case 'wpi_payment_form':
867
+                do_action( 'getpaid_before_delete_payment_form', new GetPaid_Payment_Form( $post_id ) );
868
+                break;
869
+
870
+            case 'wpi_discount':
871
+                do_action( 'getpaid_before_delete_discount', new WPInv_Discount( $post_id ) );
872
+                break;
873
+
874
+            case 'wpi_invoice':
875
+                $invoice = new WPInv_Invoice( $post_id );
876
+                do_action( 'getpaid_before_delete_invoice', $invoice );
877
+                $invoice->get_data_store()->delete_items( $invoice );
878
+                $invoice->get_data_store()->delete_special_fields( $invoice );
879
+                break;
880
+        }
881
+    }
882
+
883
+    /**
884 884
      * Add a post display state for special GetPaid pages in the page list table.
885 885
      *
886 886
      * @param array   $post_states An array of post display states.
@@ -894,21 +894,21 @@  discard block
 block discarded – undo
894 894
             $post_states['getpaid_success_page'] = __( 'GetPaid Receipt Page', 'invoicing' );
895 895
         }
896 896
 
897
-		foreach ( getpaid_get_invoice_post_types() as $post_type => $label ) {
897
+        foreach ( getpaid_get_invoice_post_types() as $post_type => $label ) {
898 898
 
899
-			if ( wpinv_get_option( "{$post_type}_history_page", 0 ) == $post->ID ) {
900
-				$post_states[ "getpaid_{$post_type}_history_page" ] = sprintf(
901
-					__( 'GetPaid %s History Page', 'invoicing' ),
902
-					$label
903
-				);
904
-			}
899
+            if ( wpinv_get_option( "{$post_type}_history_page", 0 ) == $post->ID ) {
900
+                $post_states[ "getpaid_{$post_type}_history_page" ] = sprintf(
901
+                    __( 'GetPaid %s History Page', 'invoicing' ),
902
+                    $label
903
+                );
904
+            }
905 905
 }
906 906
 
907
-		if ( wpinv_get_option( 'invoice_subscription_page', 0 ) == $post->ID ) {
907
+        if ( wpinv_get_option( 'invoice_subscription_page', 0 ) == $post->ID ) {
908 908
             $post_states['getpaid_invoice_subscription_page'] = __( 'GetPaid Subscription Page', 'invoicing' );
909 909
         }
910 910
 
911
-		if ( wpinv_get_option( 'checkout_page', 0 ) == $post->ID ) {
911
+        if ( wpinv_get_option( 'checkout_page', 0 ) == $post->ID ) {
912 912
             $post_states['getpaid_checkout_page'] = __( 'GetPaid Checkout Page', 'invoicing' );
913 913
         }
914 914
 
Please login to merge, or discard this patch.
includes/class-wpinv.php 1 patch
Indentation   +616 added lines, -616 removed lines patch added patch discarded remove patch
@@ -14,620 +14,620 @@
 block discarded – undo
14 14
  */
15 15
 class WPInv_Plugin {
16 16
 
17
-	/**
18
-	 * GetPaid version.
19
-	 *
20
-	 * @var string
21
-	 */
22
-	public $version;
23
-
24
-	/**
25
-	 * Data container.
26
-	 *
27
-	 * @var array
28
-	 */
29
-	protected $data = array();
30
-
31
-	/**
32
-	 * Form elements instance.
33
-	 *
34
-	 * @var WPInv_Payment_Form_Elements
35
-	 */
36
-	public $form_elements;
37
-
38
-	/**
39
-	 * @var array An array of payment gateways.
40
-	 */
41
-	public $gateways;
42
-
43
-	/**
44
-	 * Class constructor.
45
-	 */
46
-	public function __construct() {
47
-		$this->define_constants();
48
-		$this->includes();
49
-		$this->init_hooks();
50
-		$this->set_properties();
51
-	}
52
-
53
-	/**
54
-	 * Sets a custom data property.
55
-	 *
56
-	 * @param string $prop The prop to set.
57
-	 * @param mixed $value The value to retrieve.
58
-	 */
59
-	public function set( $prop, $value ) {
60
-		$this->data[ $prop ] = $value;
61
-	}
62
-
63
-	/**
64
-	 * Gets a custom data property.
65
-	 *
66
-	 * @param string $prop The prop to set.
67
-	 * @return mixed The value.
68
-	 */
69
-	public function get( $prop ) {
70
-		if ( isset( $this->data[ $prop ] ) ) {
71
-			return $this->data[ $prop ];
72
-		}
73
-
74
-		return null;
75
-	}
76
-
77
-	/**
78
-	 * Define class properties.
79
-	 */
80
-	public function set_properties() {
81
-		// Sessions.
82
-		$this->set( 'session', new WPInv_Session_Handler() );
83
-		$GLOBALS['wpi_session'] = $this->get( 'session' ); // Backwards compatibility.
84
-		$GLOBALS['wpinv_euvat'] = new WPInv_EUVat(); // Backwards compatibility.
85
-
86
-		// Init other objects.
87
-		$this->set( 'notes', new WPInv_Notes() );
88
-		$this->set( 'api', new WPInv_API() );
89
-		$this->set( 'post_types', new GetPaid_Post_Types() );
90
-		$this->set( 'template', new GetPaid_Template() );
91
-		$this->set( 'admin', new GetPaid_Admin() );
92
-		$this->set( 'subscriptions', new WPInv_Subscriptions() );
93
-		$this->set( 'invoice_emails', new GetPaid_Invoice_Notification_Emails() );
94
-		$this->set( 'subscription_emails', new GetPaid_Subscription_Notification_Emails() );
95
-		$this->set( 'daily_maintenace', new GetPaid_Daily_Maintenance() );
96
-		$this->set( 'payment_forms', new GetPaid_Payment_Forms() );
97
-		$this->set( 'maxmind', new GetPaid_MaxMind_Geolocation() );
98
-		$this->set( 'data_retention', new WPInv_Data_Retention() );
99
-	}
100
-
101
-	 /**
102
-	 * Define plugin constants.
103
-	 */
104
-	public function define_constants() {
105
-		define( 'WPINV_PLUGIN_DIR', plugin_dir_path( WPINV_PLUGIN_FILE ) );
106
-		define( 'WPINV_PLUGIN_URL', plugin_dir_url( WPINV_PLUGIN_FILE ) );
107
-		$this->version = WPINV_VERSION;
108
-	}
109
-
110
-	/**
111
-	 * Hook into actions and filters.
112
-	 *
113
-	 * @since 1.0.19
114
-	 */
115
-	protected function init_hooks() {
116
-		/* Internationalize the text strings used. */
117
-		add_action( 'plugins_loaded', array( &$this, 'plugins_loaded' ) );
118
-
119
-		// Init the plugin after WordPress inits.
120
-		add_action( 'init', array( $this, 'init' ), 1 );
121
-		add_action( 'init', array( $this, 'maybe_process_ipn' ), 100 );
122
-		add_action( 'init', array( $this, 'wpinv_actions' ) );
123
-		add_action( 'init', array( $this, 'maybe_do_authenticated_action' ), 100 );
124
-		add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ), 11 );
125
-		add_action( 'wp_footer', array( $this, 'wp_footer' ) );
126
-		add_action( 'wp_head', array( $this, 'wp_head' ) );
127
-		add_action( 'widgets_init', array( $this, 'register_widgets' ) );
128
-		add_filter( 'wpseo_exclude_from_sitemap_by_post_ids', array( $this, 'wpseo_exclude_from_sitemap_by_post_ids' ) );
129
-		add_filter( 'the_seo_framework_sitemap_supported_post_types', array( $this, 'exclude_invoicing_post_types' ) );
130
-		add_filter( 'pre_get_posts', array( &$this, 'pre_get_posts' ) );
131
-
132
-		add_filter( 'query_vars', array( $this, 'custom_query_vars' ) );
133
-		add_action( 'init', array( $this, 'add_rewrite_rule' ), 10, 0 );
134
-		add_action( 'pre_get_posts', array( $this, 'maybe_process_new_ipn' ), 1 );
135
-
136
-		// Fires after registering actions.
137
-		do_action( 'wpinv_actions', $this );
138
-		do_action( 'getpaid_actions', $this );
139
-	}
140
-
141
-	public function plugins_loaded() {
142
-		/* Internationalize the text strings used. */
143
-		$this->load_textdomain();
144
-
145
-		do_action( 'wpinv_loaded' );
146
-
147
-		// Fix oxygen page builder conflict
148
-		if ( function_exists( 'ct_css_output' ) ) {
149
-			wpinv_oxygen_fix_conflict();
150
-		}
151
-	}
152
-
153
-	/**
154
-	 * Load Localisation files.
155
-	 *
156
-	 * Note: the first-loaded translation file overrides any following ones if the same translation is present.
157
-	 *
158
-	 * Locales found in:
159
-	 *      - WP_LANG_DIR/plugins/invoicing-LOCALE.mo
160
-	 *      - WP_PLUGIN_DIR/invoicing/languages/invoicing-LOCALE.mo
161
-	 *
162
-	 * @since 1.0.0
163
-	 */
164
-	public function load_textdomain() {
165
-		// Determines the current locale.
166
-		if ( function_exists( 'determine_locale' ) ) {
167
-			$locale = determine_locale();
168
-		} else if ( function_exists( 'get_user_locale' ) ) {
169
-			$locale = get_user_locale();
170
-		} else {
171
-			$locale = get_locale();
172
-		}
173
-
174
-		/**
175
-		 * Filter the locale to use for translations.
176
-		 */
177
-		$locale = apply_filters( 'plugin_locale', $locale, 'invoicing' );
178
-
179
-		unload_textdomain( 'invoicing', true );
180
-		load_textdomain( 'invoicing', WP_LANG_DIR . '/invoicing/invoicing-' . $locale . '.mo' );
181
-		load_plugin_textdomain( 'invoicing', false, plugin_basename( dirname( WPINV_PLUGIN_FILE ) ) . '/languages/' );
182
-	}
183
-
184
-	/**
185
-	 * Include required core files used in admin and on the frontend.
186
-	 */
187
-	public function includes() {
188
-		// Start with the settings.
189
-		require_once WPINV_PLUGIN_DIR . 'includes/admin/register-settings.php';
190
-
191
-		// Packages/libraries.
192
-		require_once WPINV_PLUGIN_DIR . 'vendor/autoload.php';
193
-		require_once WPINV_PLUGIN_DIR . 'vendor/ayecode/wp-ayecode-ui/ayecode-ui-loader.php';
194
-
195
-		// Load functions.
196
-		require_once WPINV_PLUGIN_DIR . 'includes/deprecated-functions.php';
197
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-email-functions.php';
198
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-general-functions.php';
199
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-helper-functions.php';
200
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-tax-functions.php';
201
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-template-functions.php';
202
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-address-functions.php';
203
-		require_once WPINV_PLUGIN_DIR . 'includes/invoice-functions.php';
204
-		require_once WPINV_PLUGIN_DIR . 'includes/subscription-functions.php';
205
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-item-functions.php';
206
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-discount-functions.php';
207
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-gateway-functions.php';
208
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-payment-functions.php';
209
-		require_once WPINV_PLUGIN_DIR . 'includes/user-functions.php';
210
-		require_once WPINV_PLUGIN_DIR . 'includes/error-functions.php';
211
-
212
-		// Register autoloader.
213
-		try {
214
-			spl_autoload_register( array( $this, 'autoload' ), true );
215
-		} catch ( Exception $e ) {
216
-			wpinv_error_log( $e->getMessage(), '', __FILE__, 149, true );
217
-		}
218
-
219
-		require_once WPINV_PLUGIN_DIR . 'includes/abstracts/abstract-wpinv-session.php';
220
-		require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-session-handler.php';
221
-		require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-ajax.php';
222
-		require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-api.php';
223
-		require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-cache-helper.php';
224
-		require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-db.php';
225
-		require_once WPINV_PLUGIN_DIR . 'includes/admin/subscriptions.php';
226
-		require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-subscriptions-db.php';
227
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-subscription.php';
228
-		require_once WPINV_PLUGIN_DIR . 'includes/abstracts/abstract-wpinv-privacy.php';
229
-		require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-privacy.php';
230
-		require_once WPINV_PLUGIN_DIR . 'includes/libraries/class-ayecode-addons.php';
231
-		require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-addons.php';
232
-		require_once WPINV_PLUGIN_DIR . 'widgets/checkout.php';
233
-		require_once WPINV_PLUGIN_DIR . 'widgets/invoice-history.php';
234
-		require_once WPINV_PLUGIN_DIR . 'widgets/invoice-receipt.php';
235
-		require_once WPINV_PLUGIN_DIR . 'widgets/invoice-messages.php';
236
-		require_once WPINV_PLUGIN_DIR . 'widgets/subscriptions.php';
237
-		require_once WPINV_PLUGIN_DIR . 'widgets/buy-item.php';
238
-		require_once WPINV_PLUGIN_DIR . 'widgets/getpaid.php';
239
-		require_once WPINV_PLUGIN_DIR . 'widgets/invoice.php';
240
-		require_once WPINV_PLUGIN_DIR . 'includes/admin/admin-pages.php';
241
-
242
-		if ( is_admin() || ( defined( 'WP_CLI' ) && WP_CLI ) ) {
243
-			GetPaid_Post_Types_Admin::init();
244
-
245
-			require_once WPINV_PLUGIN_DIR . 'includes/admin/wpinv-admin-functions.php';
246
-			require_once WPINV_PLUGIN_DIR . 'includes/admin/meta-boxes/class-mb-payment-form.php';
247
-			require_once WPINV_PLUGIN_DIR . 'includes/admin/meta-boxes/class-mb-invoice-notes.php';
248
-			require_once WPINV_PLUGIN_DIR . 'includes/admin/class-wpinv-admin-menus.php';
249
-			require_once WPINV_PLUGIN_DIR . 'includes/admin/class-wpinv-users.php';
250
-			require_once WPINV_PLUGIN_DIR . 'includes/admin/class-getpaid-admin-profile.php';
251
-			// load the user class only on the users.php page
252
-			global $pagenow;
253
-			if ( $pagenow == 'users.php' ) {
254
-				new WPInv_Admin_Users();
255
-			}
256
-		}
257
-
258
-		// Register cli commands
259
-		if ( defined( 'WP_CLI' ) && WP_CLI ) {
260
-			require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-cli.php';
261
-			WP_CLI::add_command( 'invoicing', 'WPInv_CLI' );
262
-		}
263
-	}
264
-
265
-	/**
266
-	 * Class autoloader
267
-	 *
268
-	 * @param       string $class_name The name of the class to load.
269
-	 * @access      public
270
-	 * @since       1.0.19
271
-	 * @return      void
272
-	 */
273
-	public function autoload( $class_name ) {
274
-		// Normalize the class name...
275
-		$class_name  = strtolower( $class_name );
276
-
277
-		// ... and make sure it is our class.
278
-		if ( false === strpos( $class_name, 'getpaid_' ) && false === strpos( $class_name, 'wpinv_' ) ) {
279
-			return;
280
-		}
281
-
282
-		// Next, prepare the file name from the class.
283
-		$file_name = 'class-' . str_replace( '_', '-', $class_name ) . '.php';
284
-
285
-		// Base path of the classes.
286
-		$plugin_path = untrailingslashit( WPINV_PLUGIN_DIR );
287
-
288
-		// And an array of possible locations in order of importance.
289
-		$locations = array(
290
-			"$plugin_path/includes",
291
-			"$plugin_path/includes/data-stores",
292
-			"$plugin_path/includes/gateways",
293
-			"$plugin_path/includes/payments",
294
-			"$plugin_path/includes/geolocation",
295
-			"$plugin_path/includes/reports",
296
-			"$plugin_path/includes/api",
297
-			"$plugin_path/includes/admin",
298
-			"$plugin_path/includes/admin/meta-boxes",
299
-		);
300
-
301
-		foreach ( apply_filters( 'getpaid_autoload_locations', $locations ) as $location ) {
302
-			if ( file_exists( trailingslashit( $location ) . $file_name ) ) {
303
-				include trailingslashit( $location ) . $file_name;
304
-				break;
305
-			}
306
-		}
307
-	}
308
-
309
-	/**
310
-	 * Inits hooks etc.
311
-	 */
312
-	public function init() {
313
-		// Fires before getpaid inits.
314
-		do_action( 'before_getpaid_init', $this );
315
-
316
-		// Maybe upgrade.
317
-		$this->maybe_upgrade_database();
318
-
319
-		// Load default gateways.
320
-		$gateways = apply_filters(
321
-			'getpaid_default_gateways',
322
-			array(
323
-				'manual'        => 'GetPaid_Manual_Gateway',
324
-				'paypal'        => 'GetPaid_Paypal_Gateway',
325
-				'worldpay'      => 'GetPaid_Worldpay_Gateway',
326
-				'bank_transfer' => 'GetPaid_Bank_Transfer_Gateway',
327
-				'authorizenet'  => 'GetPaid_Authorize_Net_Gateway',
328
-			)
329
-		);
330
-
331
-		foreach ( $gateways as $id => $class ) {
332
-			$this->gateways[ $id ] = new $class();
333
-		}
334
-
335
-		if ( 'yes' != get_option( 'wpinv_renamed_gateways' ) ) {
336
-			GetPaid_Installer::rename_gateways_label();
337
-			update_option( 'wpinv_renamed_gateways', 'yes' );
338
-		}
339
-
340
-		// Fires after getpaid inits.
341
-		do_action( 'getpaid_init', $this );
342
-	}
343
-
344
-	/**
345
-	 * Checks if this is an IPN request and processes it.
346
-	 */
347
-	public function maybe_process_ipn() {
348
-		// Ensure that this is an IPN request.
349
-		if ( empty( $_GET['wpi-listener'] ) || 'IPN' !== $_GET['wpi-listener'] || empty( $_GET['wpi-gateway'] ) ) {
350
-			return;
351
-		}
352
-
353
-		$gateway = sanitize_text_field( $_GET['wpi-gateway'] );
354
-
355
-		do_action( 'wpinv_verify_payment_ipn', $gateway );
356
-		do_action( "wpinv_verify_{$gateway}_ipn" );
357
-		exit;
358
-	}
359
-
360
-	public function enqueue_scripts() {
361
-		// Fires before adding scripts.
362
-		do_action( 'getpaid_enqueue_scripts' );
363
-
364
-		$localize                         = array();
365
-		$localize['ajax_url']             = admin_url( 'admin-ajax.php' );
366
-		$localize['thousands']            = wpinv_thousands_separator();
367
-		$localize['decimals']             = wpinv_decimal_separator();
368
-		$localize['nonce']                = wp_create_nonce( 'wpinv-nonce' );
369
-		$localize['txtComplete']          = __( 'Continue', 'invoicing' );
370
-		$localize['UseTaxes']             = wpinv_use_taxes();
371
-		$localize['formNonce']            = wp_create_nonce( 'getpaid_form_nonce' );
372
-		$localize['loading']              = __( 'Loading...', 'invoicing' );
373
-		$localize['connectionError']      = __( 'Could not establish a connection to the server.', 'invoicing' );
374
-		$localize['recaptchaSettings']    = getpaid_get_recaptcha_settings();
375
-
376
-		$localize = apply_filters( 'wpinv_front_js_localize', $localize );
377
-
378
-		// reCaptcha.
379
-		if ( getpaid_is_recaptcha_enabled() && ( $recaptcha_js = getpaid_recaptcha_api_url() ) ) {
380
-			wp_enqueue_script( 'recaptcha', $recaptcha_js, array(), null, true ); // phpcs:ignore WordPress.WP.EnqueuedResourceParameters.MissingVersion
381
-		}
382
-
383
-		wp_enqueue_script( 'wpinv-front-script', WPINV_PLUGIN_URL . 'assets/js/payment-forms.min.js', array( 'jquery' ), WPINV_VERSION, true );
384
-		wp_localize_script( 'wpinv-front-script', 'WPInv', $localize );
385
-	}
386
-
387
-	public function wpinv_actions() {
388
-		if ( isset( $_REQUEST['wpi_action'] ) ) {
389
-			do_action( 'wpinv_' . wpinv_sanitize_key( $_REQUEST['wpi_action'] ), $_REQUEST );
390
-		}
391
-
392
-		if ( defined( 'WP_ALL_IMPORT_ROOT_DIR' ) ) {
393
-			include plugin_dir_path( __FILE__ ) . 'libraries/wp-all-import/class-getpaid-wp-all-import.php';
394
-		}
395
-	}
396
-
397
-	/**
398
-	 * Fires an action after verifying that a user can fire them.
399
-	 *
400
-	 * Note: If the action is on an invoice, subscription etc, esure that the
401
-	 * current user owns the invoice/subscription.
402
-	 */
403
-	public function maybe_do_authenticated_action() {
404
-		if ( isset( $_REQUEST['getpaid-action'] ) && isset( $_REQUEST['getpaid-nonce'] ) && wp_verify_nonce( $_REQUEST['getpaid-nonce'], 'getpaid-nonce' ) ) {
405
-			$key  = sanitize_key( $_REQUEST['getpaid-action'] );
406
-			$data = wp_unslash( $_REQUEST );
407
-
408
-			if ( is_user_logged_in() ) {
409
-				do_action( "getpaid_authenticated_action_$key", $data );
410
-			}
411
-
412
-			do_action( "getpaid_unauthenticated_action_$key", $data );
413
-		}
414
-	}
415
-
416
-	public function pre_get_posts( $wp_query ) {
417
-		if ( ! is_admin() && ! empty( $wp_query->query_vars['post_type'] ) && getpaid_is_invoice_post_type( $wp_query->query_vars['post_type'] ) && is_user_logged_in() && is_single() && $wp_query->is_main_query() ) {
418
-			$wp_query->query_vars['post_status'] = array_keys( wpinv_get_invoice_statuses( false, false, $wp_query->query_vars['post_type'] ) );
419
-		}
420
-
421
-		return $wp_query;
422
-	}
423
-
424
-	/**
425
-	 * Register widgets
426
-	 *
427
-	 */
428
-	public function register_widgets() {
429
-		global $pagenow;
430
-
431
-		// Currently, UX Builder does not work particulaly well with SuperDuper.
432
-		// So we disable our widgets when editing a page with UX Builder.
433
-		if ( function_exists( 'ux_builder_is_active' ) && ux_builder_is_active() ) {
434
-			return;
435
-		}
436
-
437
-		$block_widget_init_screens = function_exists( 'sd_pagenow_exclude' ) ? sd_pagenow_exclude() : array();
438
-
439
-		if ( is_admin() && $pagenow && in_array( $pagenow, $block_widget_init_screens ) ) {
440
-			// don't initiate in these conditions.
441
-		} else {
442
-			// Only load allowed widgets.
443
-			$exclude = function_exists( 'sd_widget_exclude' ) ? sd_widget_exclude() : array();
444
-			$widgets = apply_filters(
445
-				'getpaid_widget_classes',
446
-				array(
447
-					'WPInv_Checkout_Widget',
448
-					'WPInv_History_Widget',
449
-					'WPInv_Receipt_Widget',
450
-					'WPInv_Subscriptions_Widget',
451
-					'WPInv_Buy_Item_Widget',
452
-					'WPInv_Messages_Widget',
453
-					'WPInv_GetPaid_Widget',
454
-					'WPInv_Invoice_Widget',
455
-				)
456
-			);
457
-
458
-			// For each widget...
459
-			foreach ( $widgets as $widget ) {
460
-				// Abort early if it is excluded for this page.
461
-				if ( in_array( $widget, $exclude ) ) {
462
-					continue;
463
-				}
464
-
465
-				// SD V1 used to extend the widget class. V2 does not, so we cannot call register widget on it.
466
-				if ( is_subclass_of( $widget, 'WP_Widget' ) ) {
467
-					register_widget( $widget );
468
-				} else {
469
-					new $widget();
470
-				}
471
-			}
472
-		}
473
-	}
474
-
475
-	/**
476
-	 * Upgrades the database.
477
-	 *
478
-	 * @since 2.0.2
479
-	 */
480
-	public function maybe_upgrade_database() {
481
-		// Ensure the database tables are up to date.
482
-		GetPaid_Installer::maybe_create_db_tables();
483
-
484
-		$wpi_version = get_option( 'wpinv_version', 0 );
485
-
486
-		if ( $wpi_version == WPINV_VERSION ) {
487
-			return;
488
-		}
489
-
490
-		$installer = new GetPaid_Installer();
491
-
492
-		if ( empty( $wpi_version ) ) {
493
-			return $installer->upgrade_db( 0 );
494
-		}
495
-
496
-		$upgrades  = array(
497
-			'0.0.5' => '004',
498
-			'1.0.3' => '102',
499
-			'2.0.0' => '118',
500
-			'2.8.0' => '279',
501
-		);
502
-
503
-		foreach ( $upgrades as $key => $method ) {
504
-			if ( version_compare( $wpi_version, $key, '<' ) ) {
505
-				return $installer->upgrade_db( $method );
506
-			}
507
-		}
508
-	}
509
-
510
-	/**
511
-	 * Flushes the permalinks if needed.
512
-	 *
513
-	 * @since 2.0.8
514
-	 */
515
-	public function maybe_flush_permalinks() {
516
-		$flush = get_option( 'wpinv_flush_permalinks', 0 );
517
-
518
-		if ( ! empty( $flush ) ) {
519
-			flush_rewrite_rules();
520
-			delete_option( 'wpinv_flush_permalinks' );
521
-		}
522
-	}
523
-
524
-	/**
525
-	 * Remove our pages from yoast sitemaps.
526
-	 *
527
-	 * @since 1.0.19
528
-	 * @param int[] $excluded_posts_ids
529
-	 */
530
-	public function wpseo_exclude_from_sitemap_by_post_ids( $excluded_posts_ids ) {
531
-		// Ensure that we have an array.
532
-		if ( ! is_array( $excluded_posts_ids ) ) {
533
-			$excluded_posts_ids = array();
534
-		}
535
-
536
-		// Prepare our pages.
537
-		$our_pages = array();
538
-
539
-		// Checkout page.
540
-		$our_pages[] = wpinv_get_option( 'checkout_page', false );
541
-
542
-		// Success page.
543
-		$our_pages[] = wpinv_get_option( 'success_page', false );
544
-
545
-		// Failure page.
546
-		$our_pages[] = wpinv_get_option( 'failure_page', false );
547
-
548
-		// History page.
549
-		$our_pages[] = wpinv_get_option( 'invoice_history_page', false );
550
-
551
-		// Subscriptions page.
552
-		$our_pages[] = wpinv_get_option( 'invoice_subscription_page', false );
553
-
554
-		$our_pages   = array_map( 'intval', array_filter( $our_pages ) );
555
-
556
-		$excluded_posts_ids = $excluded_posts_ids + $our_pages;
557
-
558
-		return array_unique( $excluded_posts_ids );
559
-	}
560
-
561
-	/**
562
-	 * Remove our pages from yoast sitemaps.
563
-	 *
564
-	 * @since 1.0.19
565
-	 * @param string[] $post_types
566
-	 */
567
-	public function exclude_invoicing_post_types( $post_types ) {
568
-		// Ensure that we have an array.
569
-		if ( ! is_array( $post_types ) ) {
570
-			$post_types = array();
571
-		}
572
-
573
-		// Remove our post types.
574
-		return array_diff( $post_types, array_keys( getpaid_get_invoice_post_types() ) );
575
-	}
576
-
577
-	/**
578
-	 * Displays additional footer code.
579
-	 *
580
-	 * @since 2.0.0
581
-	 */
582
-	public function wp_footer() {
583
-		wpinv_get_template( 'frontend-footer.php' );
584
-	}
585
-
586
-	/**
587
-	 * Displays additional header code.
588
-	 *
589
-	 * @since 2.0.0
590
-	 */
591
-	public function wp_head() {
592
-		wpinv_get_template( 'frontend-head.php' );
593
-	}
594
-
595
-	/**
596
-	 * Custom query vars.
597
-	 *
598
-	 */
599
-	public function custom_query_vars( $vars ) {
600
-		$vars[] = 'getpaid-ipn';
601
-		return $vars;
602
-	}
603
-
604
-	/**
605
-	 * Add rewrite tags and rules.
606
-	 *
607
-	 */
608
-	public function add_rewrite_rule() {
609
-		$tag = 'getpaid-ipn';
610
-		add_rewrite_tag( "%$tag%", '([^&]+)' );
611
-		add_rewrite_rule( "^$tag/([^/]*)/?", "index.php?$tag=\$matches[1]", 'top' );
612
-	}
613
-
614
-	/**
615
-	 * Processes non-query string ipns.
616
-	 *
617
-	 */
618
-	public function maybe_process_new_ipn( $query ) {
619
-		if ( is_admin() || ! $query->is_main_query() ) {
620
-			return;
621
-		}
622
-
623
-		$gateway = get_query_var( 'getpaid-ipn' );
624
-
625
-		if ( ! empty( $gateway ) ) {
626
-			$gateway = sanitize_text_field( $gateway );
627
-			nocache_headers();
628
-			do_action( 'wpinv_verify_payment_ipn', $gateway );
629
-			do_action( "wpinv_verify_{$gateway}_ipn" );
630
-			exit;
631
-		}
632
-	}
17
+    /**
18
+     * GetPaid version.
19
+     *
20
+     * @var string
21
+     */
22
+    public $version;
23
+
24
+    /**
25
+     * Data container.
26
+     *
27
+     * @var array
28
+     */
29
+    protected $data = array();
30
+
31
+    /**
32
+     * Form elements instance.
33
+     *
34
+     * @var WPInv_Payment_Form_Elements
35
+     */
36
+    public $form_elements;
37
+
38
+    /**
39
+     * @var array An array of payment gateways.
40
+     */
41
+    public $gateways;
42
+
43
+    /**
44
+     * Class constructor.
45
+     */
46
+    public function __construct() {
47
+        $this->define_constants();
48
+        $this->includes();
49
+        $this->init_hooks();
50
+        $this->set_properties();
51
+    }
52
+
53
+    /**
54
+     * Sets a custom data property.
55
+     *
56
+     * @param string $prop The prop to set.
57
+     * @param mixed $value The value to retrieve.
58
+     */
59
+    public function set( $prop, $value ) {
60
+        $this->data[ $prop ] = $value;
61
+    }
62
+
63
+    /**
64
+     * Gets a custom data property.
65
+     *
66
+     * @param string $prop The prop to set.
67
+     * @return mixed The value.
68
+     */
69
+    public function get( $prop ) {
70
+        if ( isset( $this->data[ $prop ] ) ) {
71
+            return $this->data[ $prop ];
72
+        }
73
+
74
+        return null;
75
+    }
76
+
77
+    /**
78
+     * Define class properties.
79
+     */
80
+    public function set_properties() {
81
+        // Sessions.
82
+        $this->set( 'session', new WPInv_Session_Handler() );
83
+        $GLOBALS['wpi_session'] = $this->get( 'session' ); // Backwards compatibility.
84
+        $GLOBALS['wpinv_euvat'] = new WPInv_EUVat(); // Backwards compatibility.
85
+
86
+        // Init other objects.
87
+        $this->set( 'notes', new WPInv_Notes() );
88
+        $this->set( 'api', new WPInv_API() );
89
+        $this->set( 'post_types', new GetPaid_Post_Types() );
90
+        $this->set( 'template', new GetPaid_Template() );
91
+        $this->set( 'admin', new GetPaid_Admin() );
92
+        $this->set( 'subscriptions', new WPInv_Subscriptions() );
93
+        $this->set( 'invoice_emails', new GetPaid_Invoice_Notification_Emails() );
94
+        $this->set( 'subscription_emails', new GetPaid_Subscription_Notification_Emails() );
95
+        $this->set( 'daily_maintenace', new GetPaid_Daily_Maintenance() );
96
+        $this->set( 'payment_forms', new GetPaid_Payment_Forms() );
97
+        $this->set( 'maxmind', new GetPaid_MaxMind_Geolocation() );
98
+        $this->set( 'data_retention', new WPInv_Data_Retention() );
99
+    }
100
+
101
+        /**
102
+         * Define plugin constants.
103
+         */
104
+    public function define_constants() {
105
+        define( 'WPINV_PLUGIN_DIR', plugin_dir_path( WPINV_PLUGIN_FILE ) );
106
+        define( 'WPINV_PLUGIN_URL', plugin_dir_url( WPINV_PLUGIN_FILE ) );
107
+        $this->version = WPINV_VERSION;
108
+    }
109
+
110
+    /**
111
+     * Hook into actions and filters.
112
+     *
113
+     * @since 1.0.19
114
+     */
115
+    protected function init_hooks() {
116
+        /* Internationalize the text strings used. */
117
+        add_action( 'plugins_loaded', array( &$this, 'plugins_loaded' ) );
118
+
119
+        // Init the plugin after WordPress inits.
120
+        add_action( 'init', array( $this, 'init' ), 1 );
121
+        add_action( 'init', array( $this, 'maybe_process_ipn' ), 100 );
122
+        add_action( 'init', array( $this, 'wpinv_actions' ) );
123
+        add_action( 'init', array( $this, 'maybe_do_authenticated_action' ), 100 );
124
+        add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ), 11 );
125
+        add_action( 'wp_footer', array( $this, 'wp_footer' ) );
126
+        add_action( 'wp_head', array( $this, 'wp_head' ) );
127
+        add_action( 'widgets_init', array( $this, 'register_widgets' ) );
128
+        add_filter( 'wpseo_exclude_from_sitemap_by_post_ids', array( $this, 'wpseo_exclude_from_sitemap_by_post_ids' ) );
129
+        add_filter( 'the_seo_framework_sitemap_supported_post_types', array( $this, 'exclude_invoicing_post_types' ) );
130
+        add_filter( 'pre_get_posts', array( &$this, 'pre_get_posts' ) );
131
+
132
+        add_filter( 'query_vars', array( $this, 'custom_query_vars' ) );
133
+        add_action( 'init', array( $this, 'add_rewrite_rule' ), 10, 0 );
134
+        add_action( 'pre_get_posts', array( $this, 'maybe_process_new_ipn' ), 1 );
135
+
136
+        // Fires after registering actions.
137
+        do_action( 'wpinv_actions', $this );
138
+        do_action( 'getpaid_actions', $this );
139
+    }
140
+
141
+    public function plugins_loaded() {
142
+        /* Internationalize the text strings used. */
143
+        $this->load_textdomain();
144
+
145
+        do_action( 'wpinv_loaded' );
146
+
147
+        // Fix oxygen page builder conflict
148
+        if ( function_exists( 'ct_css_output' ) ) {
149
+            wpinv_oxygen_fix_conflict();
150
+        }
151
+    }
152
+
153
+    /**
154
+     * Load Localisation files.
155
+     *
156
+     * Note: the first-loaded translation file overrides any following ones if the same translation is present.
157
+     *
158
+     * Locales found in:
159
+     *      - WP_LANG_DIR/plugins/invoicing-LOCALE.mo
160
+     *      - WP_PLUGIN_DIR/invoicing/languages/invoicing-LOCALE.mo
161
+     *
162
+     * @since 1.0.0
163
+     */
164
+    public function load_textdomain() {
165
+        // Determines the current locale.
166
+        if ( function_exists( 'determine_locale' ) ) {
167
+            $locale = determine_locale();
168
+        } else if ( function_exists( 'get_user_locale' ) ) {
169
+            $locale = get_user_locale();
170
+        } else {
171
+            $locale = get_locale();
172
+        }
173
+
174
+        /**
175
+         * Filter the locale to use for translations.
176
+         */
177
+        $locale = apply_filters( 'plugin_locale', $locale, 'invoicing' );
178
+
179
+        unload_textdomain( 'invoicing', true );
180
+        load_textdomain( 'invoicing', WP_LANG_DIR . '/invoicing/invoicing-' . $locale . '.mo' );
181
+        load_plugin_textdomain( 'invoicing', false, plugin_basename( dirname( WPINV_PLUGIN_FILE ) ) . '/languages/' );
182
+    }
183
+
184
+    /**
185
+     * Include required core files used in admin and on the frontend.
186
+     */
187
+    public function includes() {
188
+        // Start with the settings.
189
+        require_once WPINV_PLUGIN_DIR . 'includes/admin/register-settings.php';
190
+
191
+        // Packages/libraries.
192
+        require_once WPINV_PLUGIN_DIR . 'vendor/autoload.php';
193
+        require_once WPINV_PLUGIN_DIR . 'vendor/ayecode/wp-ayecode-ui/ayecode-ui-loader.php';
194
+
195
+        // Load functions.
196
+        require_once WPINV_PLUGIN_DIR . 'includes/deprecated-functions.php';
197
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-email-functions.php';
198
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-general-functions.php';
199
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-helper-functions.php';
200
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-tax-functions.php';
201
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-template-functions.php';
202
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-address-functions.php';
203
+        require_once WPINV_PLUGIN_DIR . 'includes/invoice-functions.php';
204
+        require_once WPINV_PLUGIN_DIR . 'includes/subscription-functions.php';
205
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-item-functions.php';
206
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-discount-functions.php';
207
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-gateway-functions.php';
208
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-payment-functions.php';
209
+        require_once WPINV_PLUGIN_DIR . 'includes/user-functions.php';
210
+        require_once WPINV_PLUGIN_DIR . 'includes/error-functions.php';
211
+
212
+        // Register autoloader.
213
+        try {
214
+            spl_autoload_register( array( $this, 'autoload' ), true );
215
+        } catch ( Exception $e ) {
216
+            wpinv_error_log( $e->getMessage(), '', __FILE__, 149, true );
217
+        }
218
+
219
+        require_once WPINV_PLUGIN_DIR . 'includes/abstracts/abstract-wpinv-session.php';
220
+        require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-session-handler.php';
221
+        require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-ajax.php';
222
+        require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-api.php';
223
+        require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-cache-helper.php';
224
+        require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-db.php';
225
+        require_once WPINV_PLUGIN_DIR . 'includes/admin/subscriptions.php';
226
+        require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-subscriptions-db.php';
227
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-subscription.php';
228
+        require_once WPINV_PLUGIN_DIR . 'includes/abstracts/abstract-wpinv-privacy.php';
229
+        require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-privacy.php';
230
+        require_once WPINV_PLUGIN_DIR . 'includes/libraries/class-ayecode-addons.php';
231
+        require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-addons.php';
232
+        require_once WPINV_PLUGIN_DIR . 'widgets/checkout.php';
233
+        require_once WPINV_PLUGIN_DIR . 'widgets/invoice-history.php';
234
+        require_once WPINV_PLUGIN_DIR . 'widgets/invoice-receipt.php';
235
+        require_once WPINV_PLUGIN_DIR . 'widgets/invoice-messages.php';
236
+        require_once WPINV_PLUGIN_DIR . 'widgets/subscriptions.php';
237
+        require_once WPINV_PLUGIN_DIR . 'widgets/buy-item.php';
238
+        require_once WPINV_PLUGIN_DIR . 'widgets/getpaid.php';
239
+        require_once WPINV_PLUGIN_DIR . 'widgets/invoice.php';
240
+        require_once WPINV_PLUGIN_DIR . 'includes/admin/admin-pages.php';
241
+
242
+        if ( is_admin() || ( defined( 'WP_CLI' ) && WP_CLI ) ) {
243
+            GetPaid_Post_Types_Admin::init();
244
+
245
+            require_once WPINV_PLUGIN_DIR . 'includes/admin/wpinv-admin-functions.php';
246
+            require_once WPINV_PLUGIN_DIR . 'includes/admin/meta-boxes/class-mb-payment-form.php';
247
+            require_once WPINV_PLUGIN_DIR . 'includes/admin/meta-boxes/class-mb-invoice-notes.php';
248
+            require_once WPINV_PLUGIN_DIR . 'includes/admin/class-wpinv-admin-menus.php';
249
+            require_once WPINV_PLUGIN_DIR . 'includes/admin/class-wpinv-users.php';
250
+            require_once WPINV_PLUGIN_DIR . 'includes/admin/class-getpaid-admin-profile.php';
251
+            // load the user class only on the users.php page
252
+            global $pagenow;
253
+            if ( $pagenow == 'users.php' ) {
254
+                new WPInv_Admin_Users();
255
+            }
256
+        }
257
+
258
+        // Register cli commands
259
+        if ( defined( 'WP_CLI' ) && WP_CLI ) {
260
+            require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-cli.php';
261
+            WP_CLI::add_command( 'invoicing', 'WPInv_CLI' );
262
+        }
263
+    }
264
+
265
+    /**
266
+     * Class autoloader
267
+     *
268
+     * @param       string $class_name The name of the class to load.
269
+     * @access      public
270
+     * @since       1.0.19
271
+     * @return      void
272
+     */
273
+    public function autoload( $class_name ) {
274
+        // Normalize the class name...
275
+        $class_name  = strtolower( $class_name );
276
+
277
+        // ... and make sure it is our class.
278
+        if ( false === strpos( $class_name, 'getpaid_' ) && false === strpos( $class_name, 'wpinv_' ) ) {
279
+            return;
280
+        }
281
+
282
+        // Next, prepare the file name from the class.
283
+        $file_name = 'class-' . str_replace( '_', '-', $class_name ) . '.php';
284
+
285
+        // Base path of the classes.
286
+        $plugin_path = untrailingslashit( WPINV_PLUGIN_DIR );
287
+
288
+        // And an array of possible locations in order of importance.
289
+        $locations = array(
290
+            "$plugin_path/includes",
291
+            "$plugin_path/includes/data-stores",
292
+            "$plugin_path/includes/gateways",
293
+            "$plugin_path/includes/payments",
294
+            "$plugin_path/includes/geolocation",
295
+            "$plugin_path/includes/reports",
296
+            "$plugin_path/includes/api",
297
+            "$plugin_path/includes/admin",
298
+            "$plugin_path/includes/admin/meta-boxes",
299
+        );
300
+
301
+        foreach ( apply_filters( 'getpaid_autoload_locations', $locations ) as $location ) {
302
+            if ( file_exists( trailingslashit( $location ) . $file_name ) ) {
303
+                include trailingslashit( $location ) . $file_name;
304
+                break;
305
+            }
306
+        }
307
+    }
308
+
309
+    /**
310
+     * Inits hooks etc.
311
+     */
312
+    public function init() {
313
+        // Fires before getpaid inits.
314
+        do_action( 'before_getpaid_init', $this );
315
+
316
+        // Maybe upgrade.
317
+        $this->maybe_upgrade_database();
318
+
319
+        // Load default gateways.
320
+        $gateways = apply_filters(
321
+            'getpaid_default_gateways',
322
+            array(
323
+                'manual'        => 'GetPaid_Manual_Gateway',
324
+                'paypal'        => 'GetPaid_Paypal_Gateway',
325
+                'worldpay'      => 'GetPaid_Worldpay_Gateway',
326
+                'bank_transfer' => 'GetPaid_Bank_Transfer_Gateway',
327
+                'authorizenet'  => 'GetPaid_Authorize_Net_Gateway',
328
+            )
329
+        );
330
+
331
+        foreach ( $gateways as $id => $class ) {
332
+            $this->gateways[ $id ] = new $class();
333
+        }
334
+
335
+        if ( 'yes' != get_option( 'wpinv_renamed_gateways' ) ) {
336
+            GetPaid_Installer::rename_gateways_label();
337
+            update_option( 'wpinv_renamed_gateways', 'yes' );
338
+        }
339
+
340
+        // Fires after getpaid inits.
341
+        do_action( 'getpaid_init', $this );
342
+    }
343
+
344
+    /**
345
+     * Checks if this is an IPN request and processes it.
346
+     */
347
+    public function maybe_process_ipn() {
348
+        // Ensure that this is an IPN request.
349
+        if ( empty( $_GET['wpi-listener'] ) || 'IPN' !== $_GET['wpi-listener'] || empty( $_GET['wpi-gateway'] ) ) {
350
+            return;
351
+        }
352
+
353
+        $gateway = sanitize_text_field( $_GET['wpi-gateway'] );
354
+
355
+        do_action( 'wpinv_verify_payment_ipn', $gateway );
356
+        do_action( "wpinv_verify_{$gateway}_ipn" );
357
+        exit;
358
+    }
359
+
360
+    public function enqueue_scripts() {
361
+        // Fires before adding scripts.
362
+        do_action( 'getpaid_enqueue_scripts' );
363
+
364
+        $localize                         = array();
365
+        $localize['ajax_url']             = admin_url( 'admin-ajax.php' );
366
+        $localize['thousands']            = wpinv_thousands_separator();
367
+        $localize['decimals']             = wpinv_decimal_separator();
368
+        $localize['nonce']                = wp_create_nonce( 'wpinv-nonce' );
369
+        $localize['txtComplete']          = __( 'Continue', 'invoicing' );
370
+        $localize['UseTaxes']             = wpinv_use_taxes();
371
+        $localize['formNonce']            = wp_create_nonce( 'getpaid_form_nonce' );
372
+        $localize['loading']              = __( 'Loading...', 'invoicing' );
373
+        $localize['connectionError']      = __( 'Could not establish a connection to the server.', 'invoicing' );
374
+        $localize['recaptchaSettings']    = getpaid_get_recaptcha_settings();
375
+
376
+        $localize = apply_filters( 'wpinv_front_js_localize', $localize );
377
+
378
+        // reCaptcha.
379
+        if ( getpaid_is_recaptcha_enabled() && ( $recaptcha_js = getpaid_recaptcha_api_url() ) ) {
380
+            wp_enqueue_script( 'recaptcha', $recaptcha_js, array(), null, true ); // phpcs:ignore WordPress.WP.EnqueuedResourceParameters.MissingVersion
381
+        }
382
+
383
+        wp_enqueue_script( 'wpinv-front-script', WPINV_PLUGIN_URL . 'assets/js/payment-forms.min.js', array( 'jquery' ), WPINV_VERSION, true );
384
+        wp_localize_script( 'wpinv-front-script', 'WPInv', $localize );
385
+    }
386
+
387
+    public function wpinv_actions() {
388
+        if ( isset( $_REQUEST['wpi_action'] ) ) {
389
+            do_action( 'wpinv_' . wpinv_sanitize_key( $_REQUEST['wpi_action'] ), $_REQUEST );
390
+        }
391
+
392
+        if ( defined( 'WP_ALL_IMPORT_ROOT_DIR' ) ) {
393
+            include plugin_dir_path( __FILE__ ) . 'libraries/wp-all-import/class-getpaid-wp-all-import.php';
394
+        }
395
+    }
396
+
397
+    /**
398
+     * Fires an action after verifying that a user can fire them.
399
+     *
400
+     * Note: If the action is on an invoice, subscription etc, esure that the
401
+     * current user owns the invoice/subscription.
402
+     */
403
+    public function maybe_do_authenticated_action() {
404
+        if ( isset( $_REQUEST['getpaid-action'] ) && isset( $_REQUEST['getpaid-nonce'] ) && wp_verify_nonce( $_REQUEST['getpaid-nonce'], 'getpaid-nonce' ) ) {
405
+            $key  = sanitize_key( $_REQUEST['getpaid-action'] );
406
+            $data = wp_unslash( $_REQUEST );
407
+
408
+            if ( is_user_logged_in() ) {
409
+                do_action( "getpaid_authenticated_action_$key", $data );
410
+            }
411
+
412
+            do_action( "getpaid_unauthenticated_action_$key", $data );
413
+        }
414
+    }
415
+
416
+    public function pre_get_posts( $wp_query ) {
417
+        if ( ! is_admin() && ! empty( $wp_query->query_vars['post_type'] ) && getpaid_is_invoice_post_type( $wp_query->query_vars['post_type'] ) && is_user_logged_in() && is_single() && $wp_query->is_main_query() ) {
418
+            $wp_query->query_vars['post_status'] = array_keys( wpinv_get_invoice_statuses( false, false, $wp_query->query_vars['post_type'] ) );
419
+        }
420
+
421
+        return $wp_query;
422
+    }
423
+
424
+    /**
425
+     * Register widgets
426
+     *
427
+     */
428
+    public function register_widgets() {
429
+        global $pagenow;
430
+
431
+        // Currently, UX Builder does not work particulaly well with SuperDuper.
432
+        // So we disable our widgets when editing a page with UX Builder.
433
+        if ( function_exists( 'ux_builder_is_active' ) && ux_builder_is_active() ) {
434
+            return;
435
+        }
436
+
437
+        $block_widget_init_screens = function_exists( 'sd_pagenow_exclude' ) ? sd_pagenow_exclude() : array();
438
+
439
+        if ( is_admin() && $pagenow && in_array( $pagenow, $block_widget_init_screens ) ) {
440
+            // don't initiate in these conditions.
441
+        } else {
442
+            // Only load allowed widgets.
443
+            $exclude = function_exists( 'sd_widget_exclude' ) ? sd_widget_exclude() : array();
444
+            $widgets = apply_filters(
445
+                'getpaid_widget_classes',
446
+                array(
447
+                    'WPInv_Checkout_Widget',
448
+                    'WPInv_History_Widget',
449
+                    'WPInv_Receipt_Widget',
450
+                    'WPInv_Subscriptions_Widget',
451
+                    'WPInv_Buy_Item_Widget',
452
+                    'WPInv_Messages_Widget',
453
+                    'WPInv_GetPaid_Widget',
454
+                    'WPInv_Invoice_Widget',
455
+                )
456
+            );
457
+
458
+            // For each widget...
459
+            foreach ( $widgets as $widget ) {
460
+                // Abort early if it is excluded for this page.
461
+                if ( in_array( $widget, $exclude ) ) {
462
+                    continue;
463
+                }
464
+
465
+                // SD V1 used to extend the widget class. V2 does not, so we cannot call register widget on it.
466
+                if ( is_subclass_of( $widget, 'WP_Widget' ) ) {
467
+                    register_widget( $widget );
468
+                } else {
469
+                    new $widget();
470
+                }
471
+            }
472
+        }
473
+    }
474
+
475
+    /**
476
+     * Upgrades the database.
477
+     *
478
+     * @since 2.0.2
479
+     */
480
+    public function maybe_upgrade_database() {
481
+        // Ensure the database tables are up to date.
482
+        GetPaid_Installer::maybe_create_db_tables();
483
+
484
+        $wpi_version = get_option( 'wpinv_version', 0 );
485
+
486
+        if ( $wpi_version == WPINV_VERSION ) {
487
+            return;
488
+        }
489
+
490
+        $installer = new GetPaid_Installer();
491
+
492
+        if ( empty( $wpi_version ) ) {
493
+            return $installer->upgrade_db( 0 );
494
+        }
495
+
496
+        $upgrades  = array(
497
+            '0.0.5' => '004',
498
+            '1.0.3' => '102',
499
+            '2.0.0' => '118',
500
+            '2.8.0' => '279',
501
+        );
502
+
503
+        foreach ( $upgrades as $key => $method ) {
504
+            if ( version_compare( $wpi_version, $key, '<' ) ) {
505
+                return $installer->upgrade_db( $method );
506
+            }
507
+        }
508
+    }
509
+
510
+    /**
511
+     * Flushes the permalinks if needed.
512
+     *
513
+     * @since 2.0.8
514
+     */
515
+    public function maybe_flush_permalinks() {
516
+        $flush = get_option( 'wpinv_flush_permalinks', 0 );
517
+
518
+        if ( ! empty( $flush ) ) {
519
+            flush_rewrite_rules();
520
+            delete_option( 'wpinv_flush_permalinks' );
521
+        }
522
+    }
523
+
524
+    /**
525
+     * Remove our pages from yoast sitemaps.
526
+     *
527
+     * @since 1.0.19
528
+     * @param int[] $excluded_posts_ids
529
+     */
530
+    public function wpseo_exclude_from_sitemap_by_post_ids( $excluded_posts_ids ) {
531
+        // Ensure that we have an array.
532
+        if ( ! is_array( $excluded_posts_ids ) ) {
533
+            $excluded_posts_ids = array();
534
+        }
535
+
536
+        // Prepare our pages.
537
+        $our_pages = array();
538
+
539
+        // Checkout page.
540
+        $our_pages[] = wpinv_get_option( 'checkout_page', false );
541
+
542
+        // Success page.
543
+        $our_pages[] = wpinv_get_option( 'success_page', false );
544
+
545
+        // Failure page.
546
+        $our_pages[] = wpinv_get_option( 'failure_page', false );
547
+
548
+        // History page.
549
+        $our_pages[] = wpinv_get_option( 'invoice_history_page', false );
550
+
551
+        // Subscriptions page.
552
+        $our_pages[] = wpinv_get_option( 'invoice_subscription_page', false );
553
+
554
+        $our_pages   = array_map( 'intval', array_filter( $our_pages ) );
555
+
556
+        $excluded_posts_ids = $excluded_posts_ids + $our_pages;
557
+
558
+        return array_unique( $excluded_posts_ids );
559
+    }
560
+
561
+    /**
562
+     * Remove our pages from yoast sitemaps.
563
+     *
564
+     * @since 1.0.19
565
+     * @param string[] $post_types
566
+     */
567
+    public function exclude_invoicing_post_types( $post_types ) {
568
+        // Ensure that we have an array.
569
+        if ( ! is_array( $post_types ) ) {
570
+            $post_types = array();
571
+        }
572
+
573
+        // Remove our post types.
574
+        return array_diff( $post_types, array_keys( getpaid_get_invoice_post_types() ) );
575
+    }
576
+
577
+    /**
578
+     * Displays additional footer code.
579
+     *
580
+     * @since 2.0.0
581
+     */
582
+    public function wp_footer() {
583
+        wpinv_get_template( 'frontend-footer.php' );
584
+    }
585
+
586
+    /**
587
+     * Displays additional header code.
588
+     *
589
+     * @since 2.0.0
590
+     */
591
+    public function wp_head() {
592
+        wpinv_get_template( 'frontend-head.php' );
593
+    }
594
+
595
+    /**
596
+     * Custom query vars.
597
+     *
598
+     */
599
+    public function custom_query_vars( $vars ) {
600
+        $vars[] = 'getpaid-ipn';
601
+        return $vars;
602
+    }
603
+
604
+    /**
605
+     * Add rewrite tags and rules.
606
+     *
607
+     */
608
+    public function add_rewrite_rule() {
609
+        $tag = 'getpaid-ipn';
610
+        add_rewrite_tag( "%$tag%", '([^&]+)' );
611
+        add_rewrite_rule( "^$tag/([^/]*)/?", "index.php?$tag=\$matches[1]", 'top' );
612
+    }
613
+
614
+    /**
615
+     * Processes non-query string ipns.
616
+     *
617
+     */
618
+    public function maybe_process_new_ipn( $query ) {
619
+        if ( is_admin() || ! $query->is_main_query() ) {
620
+            return;
621
+        }
622
+
623
+        $gateway = get_query_var( 'getpaid-ipn' );
624
+
625
+        if ( ! empty( $gateway ) ) {
626
+            $gateway = sanitize_text_field( $gateway );
627
+            nocache_headers();
628
+            do_action( 'wpinv_verify_payment_ipn', $gateway );
629
+            do_action( "wpinv_verify_{$gateway}_ipn" );
630
+            exit;
631
+        }
632
+    }
633 633
 }
Please login to merge, or discard this patch.
includes/admin/class-getpaid-installer.php 1 patch
Indentation   +496 added lines, -496 removed lines patch added patch discarded remove patch
@@ -20,411 +20,411 @@  discard block
 block discarded – undo
20 20
  */
21 21
 class GetPaid_Installer {
22 22
 
23
-	private static $schema = null;
24
-	private static $schema_version = null;
25
-
26
-	/**
27
-	 * Upgrades the install.
28
-	 *
29
-	 * @param string $upgrade_from The current invoicing version.
30
-	 */
31
-	public function upgrade_db( $upgrade_from ) {
32
-
33
-		// Save the current invoicing version.
34
-		update_option( 'wpinv_version', WPINV_VERSION );
35
-
36
-		// Setup the invoice Custom Post Type.
37
-		GetPaid_Post_Types::register_post_types();
38
-
39
-		// Clear the permalinks
40
-		flush_rewrite_rules();
41
-
42
-		// Maybe create new/missing pages.
43
-		$this->create_pages();
44
-
45
-		// Maybe re(add) admin capabilities.
46
-		$this->add_capabilities();
47
-
48
-		// Maybe create the default payment form.
49
-		wpinv_get_default_payment_form();
50
-
51
-		// Create any missing database tables.
52
-		$method = "upgrade_from_$upgrade_from";
53
-
54
-		$installed = get_option( 'gepaid_installed_on' );
55
-
56
-		if ( empty( $installed ) ) {
57
-			update_option( 'gepaid_installed_on', time() );
58
-		}
59
-
60
-		if ( method_exists( $this, $method ) ) {
61
-			$this->$method();
62
-		}
63
-
64
-	}
65
-
66
-	/**
67
-	 * Do a fresh install.
68
-	 *
69
-	 */
70
-	public function upgrade_from_0() {
71
-
72
-		// Save default tax rates.
73
-		update_option( 'wpinv_tax_rates', wpinv_get_data( 'tax-rates' ) );
74
-	}
75
-
76
-	/**
77
-	 * Upgrade to 0.0.5
78
-	 *
79
-	 */
80
-	public function upgrade_from_004() {
81
-		global $wpdb;
82
-
83
-		// Invoices.
84
-		$results = $wpdb->get_results( "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'wpi_invoice' AND post_status IN( 'pending', 'processing', 'onhold', 'refunded', 'cancelled', 'failed', 'renewal' )" );
85
-		if ( ! empty( $results ) ) {
86
-			$wpdb->query( "UPDATE {$wpdb->posts} SET post_status = CONCAT( 'wpi-', post_status ) WHERE post_type = 'wpi_invoice' AND post_status IN( 'pending', 'processing', 'onhold', 'refunded', 'cancelled', 'failed', 'renewal' )" );
87
-
88
-			// Clean post cache
89
-			foreach ( $results as $row ) {
90
-				clean_post_cache( $row->ID );
91
-			}
92
-		}
93
-
94
-		// Item meta key changes
95
-		$query = 'SELECT DISTINCT post_id FROM ' . $wpdb->postmeta . " WHERE meta_key IN( '_wpinv_item_id', '_wpinv_package_id', '_wpinv_post_id', '_wpinv_cpt_name', '_wpinv_cpt_singular_name' )";
96
-		$results = $wpdb->get_results( $query );
97
-
98
-		if ( ! empty( $results ) ) {
99
-			$wpdb->query( 'UPDATE ' . $wpdb->postmeta . " SET meta_key = '_wpinv_custom_id' WHERE meta_key IN( '_wpinv_item_id', '_wpinv_package_id', '_wpinv_post_id' )" );
100
-			$wpdb->query( 'UPDATE ' . $wpdb->postmeta . " SET meta_key = '_wpinv_custom_name' WHERE meta_key = '_wpinv_cpt_name'" );
101
-			$wpdb->query( 'UPDATE ' . $wpdb->postmeta . " SET meta_key = '_wpinv_custom_singular_name' WHERE meta_key = '_wpinv_cpt_singular_name'" );
102
-
103
-			foreach ( $results as $row ) {
104
-				clean_post_cache( $row->post_id );
105
-			}
106
-		}
107
-
108
-		$this->upgrade_from_118();
109
-	}
110
-
111
-	/**
112
-	 * Upgrade to version 2.0.0.
113
-	 *
114
-	 */
115
-	public function upgrade_from_118() {
116
-		$this->migrate_old_invoices();
117
-		$this->upgrade_from_279();
118
-	}
119
-
120
-	/**
121
-	 * Upgrade to version 2.0.0.
122
-	 *
123
-	 */
124
-	public function upgrade_from_279() {
125
-		self::migrate_old_customers();
126
-	}
127
-
128
-	/**
129
-	 * Give administrators the capability to manage GetPaid.
130
-	 *
131
-	 */
132
-	public function add_capabilities() {
133
-		$GLOBALS['wp_roles']->add_cap( 'administrator', 'manage_invoicing' );
134
-	}
135
-
136
-	/**
137
-	 * Retreives GetPaid pages.
138
-	 *
139
-	 */
140
-	public static function get_pages() {
141
-
142
-		return apply_filters(
143
-			'wpinv_create_pages',
144
-			array(
145
-
146
-				// Checkout page.
147
-				'checkout_page'             => array(
148
-					'name'    => _x( 'gp-checkout', 'Page slug', 'invoicing' ),
149
-					'title'   => _x( 'Checkout', 'Page title', 'invoicing' ),
150
-					'content' => '
23
+    private static $schema = null;
24
+    private static $schema_version = null;
25
+
26
+    /**
27
+     * Upgrades the install.
28
+     *
29
+     * @param string $upgrade_from The current invoicing version.
30
+     */
31
+    public function upgrade_db( $upgrade_from ) {
32
+
33
+        // Save the current invoicing version.
34
+        update_option( 'wpinv_version', WPINV_VERSION );
35
+
36
+        // Setup the invoice Custom Post Type.
37
+        GetPaid_Post_Types::register_post_types();
38
+
39
+        // Clear the permalinks
40
+        flush_rewrite_rules();
41
+
42
+        // Maybe create new/missing pages.
43
+        $this->create_pages();
44
+
45
+        // Maybe re(add) admin capabilities.
46
+        $this->add_capabilities();
47
+
48
+        // Maybe create the default payment form.
49
+        wpinv_get_default_payment_form();
50
+
51
+        // Create any missing database tables.
52
+        $method = "upgrade_from_$upgrade_from";
53
+
54
+        $installed = get_option( 'gepaid_installed_on' );
55
+
56
+        if ( empty( $installed ) ) {
57
+            update_option( 'gepaid_installed_on', time() );
58
+        }
59
+
60
+        if ( method_exists( $this, $method ) ) {
61
+            $this->$method();
62
+        }
63
+
64
+    }
65
+
66
+    /**
67
+     * Do a fresh install.
68
+     *
69
+     */
70
+    public function upgrade_from_0() {
71
+
72
+        // Save default tax rates.
73
+        update_option( 'wpinv_tax_rates', wpinv_get_data( 'tax-rates' ) );
74
+    }
75
+
76
+    /**
77
+     * Upgrade to 0.0.5
78
+     *
79
+     */
80
+    public function upgrade_from_004() {
81
+        global $wpdb;
82
+
83
+        // Invoices.
84
+        $results = $wpdb->get_results( "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'wpi_invoice' AND post_status IN( 'pending', 'processing', 'onhold', 'refunded', 'cancelled', 'failed', 'renewal' )" );
85
+        if ( ! empty( $results ) ) {
86
+            $wpdb->query( "UPDATE {$wpdb->posts} SET post_status = CONCAT( 'wpi-', post_status ) WHERE post_type = 'wpi_invoice' AND post_status IN( 'pending', 'processing', 'onhold', 'refunded', 'cancelled', 'failed', 'renewal' )" );
87
+
88
+            // Clean post cache
89
+            foreach ( $results as $row ) {
90
+                clean_post_cache( $row->ID );
91
+            }
92
+        }
93
+
94
+        // Item meta key changes
95
+        $query = 'SELECT DISTINCT post_id FROM ' . $wpdb->postmeta . " WHERE meta_key IN( '_wpinv_item_id', '_wpinv_package_id', '_wpinv_post_id', '_wpinv_cpt_name', '_wpinv_cpt_singular_name' )";
96
+        $results = $wpdb->get_results( $query );
97
+
98
+        if ( ! empty( $results ) ) {
99
+            $wpdb->query( 'UPDATE ' . $wpdb->postmeta . " SET meta_key = '_wpinv_custom_id' WHERE meta_key IN( '_wpinv_item_id', '_wpinv_package_id', '_wpinv_post_id' )" );
100
+            $wpdb->query( 'UPDATE ' . $wpdb->postmeta . " SET meta_key = '_wpinv_custom_name' WHERE meta_key = '_wpinv_cpt_name'" );
101
+            $wpdb->query( 'UPDATE ' . $wpdb->postmeta . " SET meta_key = '_wpinv_custom_singular_name' WHERE meta_key = '_wpinv_cpt_singular_name'" );
102
+
103
+            foreach ( $results as $row ) {
104
+                clean_post_cache( $row->post_id );
105
+            }
106
+        }
107
+
108
+        $this->upgrade_from_118();
109
+    }
110
+
111
+    /**
112
+     * Upgrade to version 2.0.0.
113
+     *
114
+     */
115
+    public function upgrade_from_118() {
116
+        $this->migrate_old_invoices();
117
+        $this->upgrade_from_279();
118
+    }
119
+
120
+    /**
121
+     * Upgrade to version 2.0.0.
122
+     *
123
+     */
124
+    public function upgrade_from_279() {
125
+        self::migrate_old_customers();
126
+    }
127
+
128
+    /**
129
+     * Give administrators the capability to manage GetPaid.
130
+     *
131
+     */
132
+    public function add_capabilities() {
133
+        $GLOBALS['wp_roles']->add_cap( 'administrator', 'manage_invoicing' );
134
+    }
135
+
136
+    /**
137
+     * Retreives GetPaid pages.
138
+     *
139
+     */
140
+    public static function get_pages() {
141
+
142
+        return apply_filters(
143
+            'wpinv_create_pages',
144
+            array(
145
+
146
+                // Checkout page.
147
+                'checkout_page'             => array(
148
+                    'name'    => _x( 'gp-checkout', 'Page slug', 'invoicing' ),
149
+                    'title'   => _x( 'Checkout', 'Page title', 'invoicing' ),
150
+                    'content' => '
151 151
 						<!-- wp:shortcode -->
152 152
 						[wpinv_checkout]
153 153
 						<!-- /wp:shortcode -->
154 154
 					',
155
-					'parent'  => '',
156
-				),
157
-
158
-				// Invoice history page.
159
-				'invoice_history_page'      => array(
160
-					'name'    => _x( 'gp-invoices', 'Page slug', 'invoicing' ),
161
-					'title'   => _x( 'My Invoices', 'Page title', 'invoicing' ),
162
-					'content' => '
155
+                    'parent'  => '',
156
+                ),
157
+
158
+                // Invoice history page.
159
+                'invoice_history_page'      => array(
160
+                    'name'    => _x( 'gp-invoices', 'Page slug', 'invoicing' ),
161
+                    'title'   => _x( 'My Invoices', 'Page title', 'invoicing' ),
162
+                    'content' => '
163 163
 					<!-- wp:shortcode -->
164 164
 					[wpinv_history]
165 165
 					<!-- /wp:shortcode -->
166 166
 				',
167
-					'parent'  => '',
168
-				),
169
-
170
-				// Success page content.
171
-				'success_page'              => array(
172
-					'name'    => _x( 'gp-receipt', 'Page slug', 'invoicing' ),
173
-					'title'   => _x( 'Payment Confirmation', 'Page title', 'invoicing' ),
174
-					'content' => '
167
+                    'parent'  => '',
168
+                ),
169
+
170
+                // Success page content.
171
+                'success_page'              => array(
172
+                    'name'    => _x( 'gp-receipt', 'Page slug', 'invoicing' ),
173
+                    'title'   => _x( 'Payment Confirmation', 'Page title', 'invoicing' ),
174
+                    'content' => '
175 175
 					<!-- wp:shortcode -->
176 176
 					[wpinv_receipt]
177 177
 					<!-- /wp:shortcode -->
178 178
 				',
179
-					'parent'  => 'gp-checkout',
180
-				),
181
-
182
-				// Failure page content.
183
-				'failure_page'              => array(
184
-					'name'    => _x( 'gp-transaction-failed', 'Page slug', 'invoicing' ),
185
-					'title'   => _x( 'Transaction Failed', 'Page title', 'invoicing' ),
186
-					'content' => __( 'Your transaction failed, please try again or contact site support.', 'invoicing' ),
187
-					'parent'  => 'gp-checkout',
188
-				),
189
-
190
-				// Subscriptions history page.
191
-				'invoice_subscription_page' => array(
192
-					'name'    => _x( 'gp-subscriptions', 'Page slug', 'invoicing' ),
193
-					'title'   => _x( 'My Subscriptions', 'Page title', 'invoicing' ),
194
-					'content' => '
179
+                    'parent'  => 'gp-checkout',
180
+                ),
181
+
182
+                // Failure page content.
183
+                'failure_page'              => array(
184
+                    'name'    => _x( 'gp-transaction-failed', 'Page slug', 'invoicing' ),
185
+                    'title'   => _x( 'Transaction Failed', 'Page title', 'invoicing' ),
186
+                    'content' => __( 'Your transaction failed, please try again or contact site support.', 'invoicing' ),
187
+                    'parent'  => 'gp-checkout',
188
+                ),
189
+
190
+                // Subscriptions history page.
191
+                'invoice_subscription_page' => array(
192
+                    'name'    => _x( 'gp-subscriptions', 'Page slug', 'invoicing' ),
193
+                    'title'   => _x( 'My Subscriptions', 'Page title', 'invoicing' ),
194
+                    'content' => '
195 195
 					<!-- wp:shortcode -->
196 196
 					[wpinv_subscriptions]
197 197
 					<!-- /wp:shortcode -->
198 198
 				',
199
-					'parent'  => '',
200
-				),
201
-
202
-			)
203
-		);
204
-
205
-	}
206
-
207
-	/**
208
-	 * Re-create GetPaid pages.
209
-	 *
210
-	 */
211
-	public function create_pages() {
212
-
213
-		foreach ( self::get_pages() as $key => $page ) {
214
-			wpinv_create_page( esc_sql( $page['name'] ), $key, $page['title'], $page['content'], $page['parent'] );
215
-		}
216
-
217
-	}
218
-
219
-	/**
220
-	 * Migrates old invoices to new invoices.
221
-	 *
222
-	 */
223
-	public function migrate_old_invoices() {
224
-		global $wpdb;
225
-
226
-		$invoices_table      = $wpdb->prefix . 'getpaid_invoices';
227
-		$invoice_items_table = $wpdb->prefix . 'getpaid_invoice_items';
228
-		$migrated            = $wpdb->get_col( "SELECT post_id FROM $invoices_table" );
229
-		$invoices            = array_unique(
230
-			get_posts(
231
-				array(
232
-					'post_type'      => array( 'wpi_invoice', 'wpi_quote' ),
233
-					'posts_per_page' => -1,
234
-					'fields'         => 'ids',
235
-					'post_status'    => array_keys( get_post_stati() ),
236
-					'exclude'        => (array) $migrated,
237
-				)
238
-			)
239
-		);
240
-
241
-		// Abort if we do not have any invoices.
242
-		if ( empty( $invoices ) ) {
243
-			return;
244
-		}
245
-
246
-		require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-legacy-invoice.php';
247
-
248
-		$invoice_rows = array();
249
-		foreach ( $invoices as $invoice ) {
250
-
251
-			$invoice = new WPInv_Legacy_Invoice( $invoice );
252
-
253
-			if ( empty( $invoice->ID ) ) {
254
-				return;
255
-			}
256
-
257
-			$fields = array(
258
-				'post_id'            => $invoice->ID,
259
-				'number'             => $invoice->get_number(),
260
-				'key'                => $invoice->get_key(),
261
-				'type'               => str_replace( 'wpi_', '', $invoice->post_type ),
262
-				'mode'               => $invoice->mode,
263
-				'user_ip'            => $invoice->get_ip(),
264
-				'first_name'         => $invoice->get_first_name(),
265
-				'last_name'          => $invoice->get_last_name(),
266
-				'address'            => $invoice->get_address(),
267
-				'city'               => $invoice->city,
268
-				'state'              => $invoice->state,
269
-				'country'            => $invoice->country,
270
-				'zip'                => $invoice->zip,
271
-				'adddress_confirmed' => (int) $invoice->adddress_confirmed,
272
-				'gateway'            => $invoice->get_gateway(),
273
-				'transaction_id'     => $invoice->get_transaction_id(),
274
-				'currency'           => $invoice->get_currency(),
275
-				'subtotal'           => $invoice->get_subtotal(),
276
-				'tax'                => $invoice->get_tax(),
277
-				'fees_total'         => $invoice->get_fees_total(),
278
-				'total'              => $invoice->get_total(),
279
-				'discount'           => $invoice->get_discount(),
280
-				'discount_code'      => $invoice->get_discount_code(),
281
-				'disable_taxes'      => $invoice->disable_taxes,
282
-				'due_date'           => $invoice->get_due_date(),
283
-				'completed_date'     => $invoice->get_completed_date(),
284
-				'company'            => $invoice->company,
285
-				'vat_number'         => $invoice->vat_number,
286
-				'vat_rate'           => $invoice->vat_rate,
287
-				'custom_meta'        => $invoice->payment_meta,
288
-			);
289
-
290
-			foreach ( $fields as $key => $val ) {
291
-				if ( is_null( $val ) ) {
292
-					$val = '';
293
-				}
294
-				$val = maybe_serialize( $val );
295
-				$fields[ $key ] = $wpdb->prepare( '%s', $val );
296
-			}
297
-
298
-			$fields = implode( ', ', $fields );
299
-			$invoice_rows[] = "($fields)";
300
-
301
-			$item_rows    = array();
302
-			$item_columns = array();
303
-			foreach ( $invoice->get_cart_details() as $details ) {
304
-				$fields = array(
305
-					'post_id'          => $invoice->ID,
306
-					'item_id'          => $details['id'],
307
-					'item_name'        => $details['name'],
308
-					'item_description' => empty( $details['meta']['description'] ) ? '' : $details['meta']['description'],
309
-					'vat_rate'         => $details['vat_rate'],
310
-					'vat_class'        => empty( $details['vat_class'] ) ? '_standard' : $details['vat_class'],
311
-					'tax'              => $details['tax'],
312
-					'item_price'       => $details['item_price'],
313
-					'custom_price'     => $details['custom_price'],
314
-					'quantity'         => $details['quantity'],
315
-					'discount'         => $details['discount'],
316
-					'subtotal'         => $details['subtotal'],
317
-					'price'            => $details['price'],
318
-					'meta'             => $details['meta'],
319
-					'fees'             => $details['fees'],
320
-				);
321
-
322
-				$item_columns = array_keys( $fields );
323
-
324
-				foreach ( $fields as $key => $val ) {
325
-					if ( is_null( $val ) ) {
326
-						$val = '';
327
-					}
328
-					$val = maybe_serialize( $val );
329
-					$fields[ $key ] = $wpdb->prepare( '%s', $val );
330
-				}
331
-
332
-				$fields = implode( ', ', $fields );
333
-				$item_rows[] = "($fields)";
334
-			}
335
-
336
-			$item_rows    = implode( ', ', $item_rows );
337
-			$item_columns = implode( ', ', $item_columns );
338
-			$wpdb->query( "INSERT INTO $invoice_items_table ($item_columns) VALUES $item_rows" );
339
-		}
340
-
341
-		if ( empty( $invoice_rows ) ) {
342
-			return;
343
-		}
344
-
345
-		$invoice_rows = implode( ', ', $invoice_rows );
346
-		$wpdb->query( "INSERT INTO $invoices_table VALUES $invoice_rows" );
347
-
348
-	}
349
-
350
-	/**
351
-	 * Migrates old customers to new table.
352
-	 *
353
-	 */
354
-	public static function migrate_old_customers() {
355
-		global $wpdb;
356
-
357
-		// Fetch post_id from $wpdb->prefix . 'getpaid_invoices' where customer_id = 0 or null.
358
-		$invoice_ids = $wpdb->get_col( "SELECT post_id FROM {$wpdb->prefix}getpaid_invoices WHERE customer_id = 0 OR customer_id IS NULL" );
359
-
360
-		foreach ( $invoice_ids as $invoice_id ) {
361
-			$invoice = wpinv_get_invoice( $invoice_id );
362
-
363
-			if ( empty( $invoice ) ) {
364
-				continue;
365
-			}
366
-
367
-			// Fetch customer from the user ID.
368
-			$user_id = $invoice->get_user_id();
369
-
370
-			if ( empty( $user_id ) ) {
371
-				continue;
372
-			}
373
-
374
-			$customer = getpaid_get_customer_by_user_id( $user_id );
375
-
376
-			// Create if not exists.
377
-			if ( empty( $customer ) ) {
378
-				$customer = new GetPaid_Customer( 0 );
379
-				$customer->clone_user( $user_id );
380
-				$customer->save();
381
-			}
382
-
383
-			$invoice->set_customer_id( $customer->get_id() );
384
-			$invoice->save();
385
-		}
386
-
387
-	}
388
-
389
-	/**
390
-	 * Migrates old invoices to new invoices.
391
-	 *
392
-	 */
393
-	public static function rename_gateways_label() {
394
-		global $wpdb;
395
-
396
-		foreach ( array_keys( wpinv_get_payment_gateways() ) as $gateway ) {
397
-
398
-			$wpdb->update(
399
-				$wpdb->prefix . 'getpaid_invoices',
400
-				array( 'gateway' => $gateway ),
401
-				array( 'gateway' => wpinv_get_gateway_admin_label( $gateway ) ),
402
-				'%s',
403
-				'%s'
404
-			);
405
-
406
-		}
407
-	}
408
-
409
-	/**
410
-	 * Returns the DB schema.
411
-	 *
412
-	 */
413
-	public static function get_db_schema() {
414
-		global $wpdb;
415
-
416
-		if ( ! empty( self::$schema ) ) {
417
-			return self::$schema;
418
-		}
199
+                    'parent'  => '',
200
+                ),
201
+
202
+            )
203
+        );
204
+
205
+    }
206
+
207
+    /**
208
+     * Re-create GetPaid pages.
209
+     *
210
+     */
211
+    public function create_pages() {
212
+
213
+        foreach ( self::get_pages() as $key => $page ) {
214
+            wpinv_create_page( esc_sql( $page['name'] ), $key, $page['title'], $page['content'], $page['parent'] );
215
+        }
216
+
217
+    }
218
+
219
+    /**
220
+     * Migrates old invoices to new invoices.
221
+     *
222
+     */
223
+    public function migrate_old_invoices() {
224
+        global $wpdb;
225
+
226
+        $invoices_table      = $wpdb->prefix . 'getpaid_invoices';
227
+        $invoice_items_table = $wpdb->prefix . 'getpaid_invoice_items';
228
+        $migrated            = $wpdb->get_col( "SELECT post_id FROM $invoices_table" );
229
+        $invoices            = array_unique(
230
+            get_posts(
231
+                array(
232
+                    'post_type'      => array( 'wpi_invoice', 'wpi_quote' ),
233
+                    'posts_per_page' => -1,
234
+                    'fields'         => 'ids',
235
+                    'post_status'    => array_keys( get_post_stati() ),
236
+                    'exclude'        => (array) $migrated,
237
+                )
238
+            )
239
+        );
240
+
241
+        // Abort if we do not have any invoices.
242
+        if ( empty( $invoices ) ) {
243
+            return;
244
+        }
245
+
246
+        require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-legacy-invoice.php';
247
+
248
+        $invoice_rows = array();
249
+        foreach ( $invoices as $invoice ) {
250
+
251
+            $invoice = new WPInv_Legacy_Invoice( $invoice );
252
+
253
+            if ( empty( $invoice->ID ) ) {
254
+                return;
255
+            }
256
+
257
+            $fields = array(
258
+                'post_id'            => $invoice->ID,
259
+                'number'             => $invoice->get_number(),
260
+                'key'                => $invoice->get_key(),
261
+                'type'               => str_replace( 'wpi_', '', $invoice->post_type ),
262
+                'mode'               => $invoice->mode,
263
+                'user_ip'            => $invoice->get_ip(),
264
+                'first_name'         => $invoice->get_first_name(),
265
+                'last_name'          => $invoice->get_last_name(),
266
+                'address'            => $invoice->get_address(),
267
+                'city'               => $invoice->city,
268
+                'state'              => $invoice->state,
269
+                'country'            => $invoice->country,
270
+                'zip'                => $invoice->zip,
271
+                'adddress_confirmed' => (int) $invoice->adddress_confirmed,
272
+                'gateway'            => $invoice->get_gateway(),
273
+                'transaction_id'     => $invoice->get_transaction_id(),
274
+                'currency'           => $invoice->get_currency(),
275
+                'subtotal'           => $invoice->get_subtotal(),
276
+                'tax'                => $invoice->get_tax(),
277
+                'fees_total'         => $invoice->get_fees_total(),
278
+                'total'              => $invoice->get_total(),
279
+                'discount'           => $invoice->get_discount(),
280
+                'discount_code'      => $invoice->get_discount_code(),
281
+                'disable_taxes'      => $invoice->disable_taxes,
282
+                'due_date'           => $invoice->get_due_date(),
283
+                'completed_date'     => $invoice->get_completed_date(),
284
+                'company'            => $invoice->company,
285
+                'vat_number'         => $invoice->vat_number,
286
+                'vat_rate'           => $invoice->vat_rate,
287
+                'custom_meta'        => $invoice->payment_meta,
288
+            );
289
+
290
+            foreach ( $fields as $key => $val ) {
291
+                if ( is_null( $val ) ) {
292
+                    $val = '';
293
+                }
294
+                $val = maybe_serialize( $val );
295
+                $fields[ $key ] = $wpdb->prepare( '%s', $val );
296
+            }
297
+
298
+            $fields = implode( ', ', $fields );
299
+            $invoice_rows[] = "($fields)";
300
+
301
+            $item_rows    = array();
302
+            $item_columns = array();
303
+            foreach ( $invoice->get_cart_details() as $details ) {
304
+                $fields = array(
305
+                    'post_id'          => $invoice->ID,
306
+                    'item_id'          => $details['id'],
307
+                    'item_name'        => $details['name'],
308
+                    'item_description' => empty( $details['meta']['description'] ) ? '' : $details['meta']['description'],
309
+                    'vat_rate'         => $details['vat_rate'],
310
+                    'vat_class'        => empty( $details['vat_class'] ) ? '_standard' : $details['vat_class'],
311
+                    'tax'              => $details['tax'],
312
+                    'item_price'       => $details['item_price'],
313
+                    'custom_price'     => $details['custom_price'],
314
+                    'quantity'         => $details['quantity'],
315
+                    'discount'         => $details['discount'],
316
+                    'subtotal'         => $details['subtotal'],
317
+                    'price'            => $details['price'],
318
+                    'meta'             => $details['meta'],
319
+                    'fees'             => $details['fees'],
320
+                );
321
+
322
+                $item_columns = array_keys( $fields );
323
+
324
+                foreach ( $fields as $key => $val ) {
325
+                    if ( is_null( $val ) ) {
326
+                        $val = '';
327
+                    }
328
+                    $val = maybe_serialize( $val );
329
+                    $fields[ $key ] = $wpdb->prepare( '%s', $val );
330
+                }
331
+
332
+                $fields = implode( ', ', $fields );
333
+                $item_rows[] = "($fields)";
334
+            }
335
+
336
+            $item_rows    = implode( ', ', $item_rows );
337
+            $item_columns = implode( ', ', $item_columns );
338
+            $wpdb->query( "INSERT INTO $invoice_items_table ($item_columns) VALUES $item_rows" );
339
+        }
340
+
341
+        if ( empty( $invoice_rows ) ) {
342
+            return;
343
+        }
344
+
345
+        $invoice_rows = implode( ', ', $invoice_rows );
346
+        $wpdb->query( "INSERT INTO $invoices_table VALUES $invoice_rows" );
347
+
348
+    }
349
+
350
+    /**
351
+     * Migrates old customers to new table.
352
+     *
353
+     */
354
+    public static function migrate_old_customers() {
355
+        global $wpdb;
356
+
357
+        // Fetch post_id from $wpdb->prefix . 'getpaid_invoices' where customer_id = 0 or null.
358
+        $invoice_ids = $wpdb->get_col( "SELECT post_id FROM {$wpdb->prefix}getpaid_invoices WHERE customer_id = 0 OR customer_id IS NULL" );
359
+
360
+        foreach ( $invoice_ids as $invoice_id ) {
361
+            $invoice = wpinv_get_invoice( $invoice_id );
362
+
363
+            if ( empty( $invoice ) ) {
364
+                continue;
365
+            }
366
+
367
+            // Fetch customer from the user ID.
368
+            $user_id = $invoice->get_user_id();
369
+
370
+            if ( empty( $user_id ) ) {
371
+                continue;
372
+            }
373
+
374
+            $customer = getpaid_get_customer_by_user_id( $user_id );
375
+
376
+            // Create if not exists.
377
+            if ( empty( $customer ) ) {
378
+                $customer = new GetPaid_Customer( 0 );
379
+                $customer->clone_user( $user_id );
380
+                $customer->save();
381
+            }
382
+
383
+            $invoice->set_customer_id( $customer->get_id() );
384
+            $invoice->save();
385
+        }
386
+
387
+    }
388
+
389
+    /**
390
+     * Migrates old invoices to new invoices.
391
+     *
392
+     */
393
+    public static function rename_gateways_label() {
394
+        global $wpdb;
395
+
396
+        foreach ( array_keys( wpinv_get_payment_gateways() ) as $gateway ) {
397
+
398
+            $wpdb->update(
399
+                $wpdb->prefix . 'getpaid_invoices',
400
+                array( 'gateway' => $gateway ),
401
+                array( 'gateway' => wpinv_get_gateway_admin_label( $gateway ) ),
402
+                '%s',
403
+                '%s'
404
+            );
405
+
406
+        }
407
+    }
408
+
409
+    /**
410
+     * Returns the DB schema.
411
+     *
412
+     */
413
+    public static function get_db_schema() {
414
+        global $wpdb;
415
+
416
+        if ( ! empty( self::$schema ) ) {
417
+            return self::$schema;
418
+        }
419 419
 
420
-		require_once ABSPATH . 'wp-admin/includes/upgrade.php';
420
+        require_once ABSPATH . 'wp-admin/includes/upgrade.php';
421 421
 
422
-		$charset_collate = $wpdb->get_charset_collate();
422
+        $charset_collate = $wpdb->get_charset_collate();
423 423
 
424
-		$schema = array();
424
+        $schema = array();
425 425
 
426
-		// Subscriptions.
427
-		$schema['subscriptions'] = "CREATE TABLE {$wpdb->prefix}wpinv_subscriptions (
426
+        // Subscriptions.
427
+        $schema['subscriptions'] = "CREATE TABLE {$wpdb->prefix}wpinv_subscriptions (
428 428
 			id bigint(20) unsigned NOT NULL auto_increment,
429 429
 			customer_id bigint(20) NOT NULL,
430 430
 			frequency int(11) NOT NULL DEFAULT '1',
@@ -447,8 +447,8 @@  discard block
 block discarded – undo
447 447
 			KEY customer_and_status (customer_id, status)
448 448
 		  ) $charset_collate;";
449 449
 
450
-		// Invoices.
451
-		$schema['invoices'] = "CREATE TABLE {$wpdb->prefix}getpaid_invoices (
450
+        // Invoices.
451
+        $schema['invoices'] = "CREATE TABLE {$wpdb->prefix}getpaid_invoices (
452 452
 			post_id BIGINT(20) NOT NULL,
453 453
 			customer_id BIGINT(20) NOT NULL DEFAULT 0,
454 454
             `number` VARCHAR(100),
@@ -486,8 +486,8 @@  discard block
 block discarded – undo
486 486
 			KEY invoice_key (invoice_key)
487 487
 		  ) $charset_collate;";
488 488
 
489
-		// Invoice items.
490
-		$schema['items'] = "CREATE TABLE {$wpdb->prefix}getpaid_invoice_items (
489
+        // Invoice items.
490
+        $schema['items'] = "CREATE TABLE {$wpdb->prefix}getpaid_invoice_items (
491 491
 			ID BIGINT(20) NOT NULL AUTO_INCREMENT,
492 492
             post_id BIGINT(20) NOT NULL,
493 493
             item_id BIGINT(20) NOT NULL,
@@ -509,8 +509,8 @@  discard block
 block discarded – undo
509 509
 			KEY post_id (post_id)
510 510
 		  ) $charset_collate;";
511 511
 
512
-		// Customers.
513
-		$schema['customers'] = "CREATE TABLE {$wpdb->prefix}getpaid_customers (
512
+        // Customers.
513
+        $schema['customers'] = "CREATE TABLE {$wpdb->prefix}getpaid_customers (
514 514
 			id BIGINT(20) NOT NULL AUTO_INCREMENT,
515 515
 			user_id BIGINT(20) NOT NULL,
516 516
 			email VARCHAR(100) NOT NULL,
@@ -520,38 +520,38 @@  discard block
 block discarded – undo
520 520
 			purchase_count BIGINT(20) NOT NULL DEFAULT 0,
521 521
 			";
522 522
 
523
-		// Add address fields.
524
-		foreach ( array_keys( getpaid_user_address_fields( true ) ) as $field ) {
525
-			// Skip id, user_id and email.
526
-			if ( in_array( $field, array( 'id', 'user_id', 'email', 'purchase_value', 'purchase_count', 'date_created', 'date_modified', 'uuid' ), true ) ) {
527
-				continue;
528
-			}
529
-
530
-			$field   = sanitize_key( $field );
531
-			$length  = 100;
532
-			$default = '';
533
-
534
-			// Country.
535
-			if ( 'country' === $field ) {
536
-				$length  = 2;
537
-				$default = wpinv_get_default_country();
538
-			}
539
-
540
-			// State.
541
-			if ( 'state' === $field ) {
542
-				$default = wpinv_get_default_state();
543
-			}
544
-
545
-			// Phone, zip.
546
-			if ( in_array( $field, array( 'phone', 'zip' ), true ) ) {
547
-				$length = 20;
548
-			}
549
-
550
-			$schema['customers'] .= "`$field` VARCHAR($length) NOT NULL DEFAULT '$default',
523
+        // Add address fields.
524
+        foreach ( array_keys( getpaid_user_address_fields( true ) ) as $field ) {
525
+            // Skip id, user_id and email.
526
+            if ( in_array( $field, array( 'id', 'user_id', 'email', 'purchase_value', 'purchase_count', 'date_created', 'date_modified', 'uuid' ), true ) ) {
527
+                continue;
528
+            }
529
+
530
+            $field   = sanitize_key( $field );
531
+            $length  = 100;
532
+            $default = '';
533
+
534
+            // Country.
535
+            if ( 'country' === $field ) {
536
+                $length  = 2;
537
+                $default = wpinv_get_default_country();
538
+            }
539
+
540
+            // State.
541
+            if ( 'state' === $field ) {
542
+                $default = wpinv_get_default_state();
543
+            }
544
+
545
+            // Phone, zip.
546
+            if ( in_array( $field, array( 'phone', 'zip' ), true ) ) {
547
+                $length = 20;
548
+            }
549
+
550
+            $schema['customers'] .= "`$field` VARCHAR($length) NOT NULL DEFAULT '$default',
551 551
 			";
552
-		}
552
+        }
553 553
 
554
-		$schema['customers'] .= "date_created DATETIME NOT NULL,
554
+        $schema['customers'] .= "date_created DATETIME NOT NULL,
555 555
 			date_modified DATETIME NOT NULL,
556 556
 			uuid VARCHAR(100) NOT NULL,
557 557
 			is_anonymized INT(2) NOT NULL DEFAULT 0,
@@ -561,8 +561,8 @@  discard block
 block discarded – undo
561 561
 			KEY email (email)
562 562
 		  ) $charset_collate;";
563 563
 
564
-		// Customer meta.
565
-		$schema['customer_meta'] = "CREATE TABLE {$wpdb->prefix}getpaid_customer_meta (
564
+        // Customer meta.
565
+        $schema['customer_meta'] = "CREATE TABLE {$wpdb->prefix}getpaid_customer_meta (
566 566
 			meta_id BIGINT(20) NOT NULL AUTO_INCREMENT,
567 567
 			customer_id BIGINT(20) NOT NULL,
568 568
 			meta_key VARCHAR(255) NOT NULL,
@@ -572,8 +572,8 @@  discard block
 block discarded – undo
572 572
 			KEY meta_key (meta_key(191))
573 573
 		  ) $charset_collate;";
574 574
 
575
-		// Anonymization Logs.
576
-		$schema['anonymization_logs'] = "CREATE TABLE {$wpdb->prefix}getpaid_anonymization_logs (
575
+        // Anonymization Logs.
576
+        $schema['anonymization_logs'] = "CREATE TABLE {$wpdb->prefix}getpaid_anonymization_logs (
577 577
 			log_id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
578 578
 			user_id BIGINT(20) UNSIGNED NOT NULL,
579 579
 			action VARCHAR(50) NOT NULL,
@@ -587,75 +587,75 @@  discard block
 block discarded – undo
587 587
 			KEY timestamp (timestamp)
588 588
 		) $charset_collate;";
589 589
 
590
-		// Filter.
591
-		$schema = apply_filters( 'getpaid_db_schema', $schema );
592
-
593
-		self::$schema         = implode( "\n", array_values( $schema ) );
594
-		self::$schema_version = md5( sanitize_key( self::$schema ) );
595
-
596
-		return self::$schema;
597
-	}
598
-
599
-	/**
600
-	 * Returns the DB schema version.
601
-	 *
602
-	 */
603
-	public static function get_db_schema_version() {
604
-		if ( ! empty( self::$schema_version ) ) {
605
-			return self::$schema_version;
606
-		}
607
-
608
-		self::get_db_schema();
609
-
610
-		return self::$schema_version;
611
-	}
612
-
613
-	/**
614
-	 * Checks if the db schema is up to date.
615
-	 *
616
-	 * @return bool
617
-	 */
618
-	public static function is_db_schema_up_to_date() {
619
-		return self::get_db_schema_version() === get_option( 'getpaid_db_schema' );
620
-	}
621
-
622
-	/**
623
-	 * Set up the database tables which the plugin needs to function.
624
-	 */
625
-	public static function create_db_tables() {
626
-		global $wpdb;
627
-
628
-		$wpdb->hide_errors();
629
-
630
-		require_once ABSPATH . 'wp-admin/includes/upgrade.php';
631
-
632
-		$schema = self::get_db_schema();
633
-
634
-		// If invoices table exists, rename key to invoice_key.
635
-		$invoices_table = "{$wpdb->prefix}getpaid_invoices";
636
-
637
-		if ( $wpdb->get_var( "SHOW TABLES LIKE '{$wpdb->prefix}getpaid_invoices'" ) === $invoices_table ) {
638
-			$fields = $wpdb->get_results( "SHOW COLUMNS FROM {$wpdb->prefix}getpaid_invoices" );
639
-
640
-			foreach ( $fields as $field ) {
641
-				if ( 'key' === $field->Field ) {
642
-					$wpdb->query( "ALTER TABLE {$wpdb->prefix}getpaid_invoices CHANGE `key` `invoice_key` VARCHAR(100)" );
643
-					break;
644
-				}
645
-			}
646
-		}
647
-
648
-		dbDelta( $schema );
649
-		wp_cache_flush();
650
-		update_option( 'getpaid_db_schema', self::get_db_schema_version() );
651
-	}
652
-
653
-	/**
654
-	 * Creates tables if schema is not up to date.
655
-	 */
656
-	public static function maybe_create_db_tables() {
657
-		if ( ! self::is_db_schema_up_to_date() ) {
658
-			self::create_db_tables();
659
-		}
660
-	}
590
+        // Filter.
591
+        $schema = apply_filters( 'getpaid_db_schema', $schema );
592
+
593
+        self::$schema         = implode( "\n", array_values( $schema ) );
594
+        self::$schema_version = md5( sanitize_key( self::$schema ) );
595
+
596
+        return self::$schema;
597
+    }
598
+
599
+    /**
600
+     * Returns the DB schema version.
601
+     *
602
+     */
603
+    public static function get_db_schema_version() {
604
+        if ( ! empty( self::$schema_version ) ) {
605
+            return self::$schema_version;
606
+        }
607
+
608
+        self::get_db_schema();
609
+
610
+        return self::$schema_version;
611
+    }
612
+
613
+    /**
614
+     * Checks if the db schema is up to date.
615
+     *
616
+     * @return bool
617
+     */
618
+    public static function is_db_schema_up_to_date() {
619
+        return self::get_db_schema_version() === get_option( 'getpaid_db_schema' );
620
+    }
621
+
622
+    /**
623
+     * Set up the database tables which the plugin needs to function.
624
+     */
625
+    public static function create_db_tables() {
626
+        global $wpdb;
627
+
628
+        $wpdb->hide_errors();
629
+
630
+        require_once ABSPATH . 'wp-admin/includes/upgrade.php';
631
+
632
+        $schema = self::get_db_schema();
633
+
634
+        // If invoices table exists, rename key to invoice_key.
635
+        $invoices_table = "{$wpdb->prefix}getpaid_invoices";
636
+
637
+        if ( $wpdb->get_var( "SHOW TABLES LIKE '{$wpdb->prefix}getpaid_invoices'" ) === $invoices_table ) {
638
+            $fields = $wpdb->get_results( "SHOW COLUMNS FROM {$wpdb->prefix}getpaid_invoices" );
639
+
640
+            foreach ( $fields as $field ) {
641
+                if ( 'key' === $field->Field ) {
642
+                    $wpdb->query( "ALTER TABLE {$wpdb->prefix}getpaid_invoices CHANGE `key` `invoice_key` VARCHAR(100)" );
643
+                    break;
644
+                }
645
+            }
646
+        }
647
+
648
+        dbDelta( $schema );
649
+        wp_cache_flush();
650
+        update_option( 'getpaid_db_schema', self::get_db_schema_version() );
651
+    }
652
+
653
+    /**
654
+     * Creates tables if schema is not up to date.
655
+     */
656
+    public static function maybe_create_db_tables() {
657
+        if ( ! self::is_db_schema_up_to_date() ) {
658
+            self::create_db_tables();
659
+        }
660
+    }
661 661
 }
Please login to merge, or discard this patch.
includes/class-wpinv-invoice.php 1 patch
Indentation   +2759 added lines, -2759 removed lines patch added patch discarded remove patch
@@ -14,31 +14,31 @@  discard block
 block discarded – undo
14 14
 class WPInv_Invoice extends GetPaid_Data {
15 15
 
16 16
     /**
17
-	 * Which data store to load.
18
-	 *
19
-	 * @var string
20
-	 */
17
+     * Which data store to load.
18
+     *
19
+     * @var string
20
+     */
21 21
     protected $data_store_name = 'invoice';
22 22
 
23 23
     /**
24
-	 * This is the name of this object type.
25
-	 *
26
-	 * @var string
27
-	 */
24
+     * This is the name of this object type.
25
+     *
26
+     * @var string
27
+     */
28 28
     protected $object_type = 'invoice';
29 29
 
30 30
     /**
31
-	 * Item Data array. This is the core item data exposed in APIs.
32
-	 *
33
-	 * @since 1.0.19
34
-	 * @var array
35
-	 */
36
-	protected $data = array(
37
-		'parent_id'              => 0,
38
-		'customer_id'            => 0,
39
-		'status'                 => 'wpi-pending',
40
-		'version'                => '',
41
-		'date_created'           => null,
31
+     * Item Data array. This is the core item data exposed in APIs.
32
+     *
33
+     * @since 1.0.19
34
+     * @var array
35
+     */
36
+    protected $data = array(
37
+        'parent_id'              => 0,
38
+        'customer_id'            => 0,
39
+        'status'                 => 'wpi-pending',
40
+        'version'                => '',
41
+        'date_created'           => null,
42 42
         'date_modified'          => null,
43 43
         'due_date'               => null,
44 44
         'completed_date'         => null,
@@ -61,17 +61,17 @@  discard block
 block discarded – undo
61 61
         'state'                  => null,
62 62
         'zip'                    => null,
63 63
         'company'                => null,
64
-		'company_id'             => null,
64
+        'company_id'             => null,
65 65
         'vat_number'             => null,
66 66
         'vat_rate'               => null,
67 67
         'address'                => null,
68 68
         'address_confirmed'      => false,
69 69
         'shipping'               => null,
70
-		'subtotal'               => 0,
70
+        'subtotal'               => 0,
71 71
         'total_discount'         => 0,
72 72
         'total_tax'              => 0,
73
-		'total_fees'             => 0,
74
-		'total'                  => 0,
73
+        'total_fees'             => 0,
74
+        'total'                  => 0,
75 75
         'fees'                   => array(),
76 76
         'discounts'              => array(),
77 77
         'taxes'                  => array(),
@@ -83,23 +83,23 @@  discard block
 block discarded – undo
83 83
         'transaction_id'         => '',
84 84
         'currency'               => '',
85 85
         'disable_taxes'          => false,
86
-		'subscription_id'        => null,
87
-		'remote_subscription_id' => null,
88
-		'is_anonymized'          => false,
89
-		'is_viewed'              => false,
90
-		'email_cc'               => '',
91
-		'template'               => 'quantity', // hours, amount only
92
-		'created_via'            => null,
86
+        'subscription_id'        => null,
87
+        'remote_subscription_id' => null,
88
+        'is_anonymized'          => false,
89
+        'is_viewed'              => false,
90
+        'email_cc'               => '',
91
+        'template'               => 'quantity', // hours, amount only
92
+        'created_via'            => null,
93 93
     );
94 94
 
95 95
     /**
96
-	 * Stores meta in cache for future reads.
97
-	 *
98
-	 * A group must be set to to enable caching.
99
-	 *
100
-	 * @var string
101
-	 */
102
-	protected $cache_group = 'getpaid_invoices';
96
+     * Stores meta in cache for future reads.
97
+     *
98
+     * A group must be set to to enable caching.
99
+     *
100
+     * @var string
101
+     */
102
+    protected $cache_group = 'getpaid_invoices';
103 103
 
104 104
     /**
105 105
      * Stores a reference to the original WP_Post object
@@ -113,122 +113,122 @@  discard block
 block discarded – undo
113 113
      *
114 114
      * @var int
115 115
      */
116
-	protected $recurring_item = null;
116
+    protected $recurring_item = null;
117 117
 
118
-	/**
118
+    /**
119 119
      * Stores an array of item totals.
120
-	 *
121
-	 * e.g $totals['discount'] = array(
122
-	 *      'initial'   => 10,
123
-	 *      'recurring' => 10,
124
-	 * )
120
+     *
121
+     * e.g $totals['discount'] = array(
122
+     *      'initial'   => 10,
123
+     *      'recurring' => 10,
124
+     * )
125 125
      *
126 126
      * @var array
127 127
      */
128
-	protected $totals = array();
128
+    protected $totals = array();
129 129
 
130
-	/**
130
+    /**
131 131
      * Tax rate.
132
-	 *
132
+     *
133 133
      * @var float
134 134
      */
135
-	protected $tax_rate = 0;
135
+    protected $tax_rate = 0;
136 136
 
137
-	/**
138
-	 * Stores the status transition information.
139
-	 *
140
-	 * @since 1.0.19
141
-	 * @var bool|array
142
-	 */
143
-	protected $status_transition = false;
137
+    /**
138
+     * Stores the status transition information.
139
+     *
140
+     * @since 1.0.19
141
+     * @var bool|array
142
+     */
143
+    protected $status_transition = false;
144 144
 
145 145
     /**
146
-	 * Get the invoice if ID is passed, otherwise the invoice is new and empty.
147
-	 *
148
-	 * @param  int|string|object|WPInv_Invoice|WPInv_Legacy_Invoice|WP_Post $invoice Invoice id, key, transaction id, number or object to read.
149
-	 */
146
+     * Get the invoice if ID is passed, otherwise the invoice is new and empty.
147
+     *
148
+     * @param  int|string|object|WPInv_Invoice|WPInv_Legacy_Invoice|WP_Post $invoice Invoice id, key, transaction id, number or object to read.
149
+     */
150 150
     public function __construct( $invoice = 0 ) {
151 151
 
152 152
         parent::__construct( $invoice );
153 153
 
154
-		if ( ! empty( $invoice ) && is_numeric( $invoice ) && getpaid_is_invoice_post_type( get_post_type( (int) $invoice ) ) ) {
155
-			$this->set_id( (int) $invoice );
156
-		} elseif ( $invoice instanceof self ) {
157
-			$this->set_id( $invoice->get_id() );
158
-		} elseif ( ! empty( $invoice->ID ) ) {
159
-			$this->set_id( $invoice->ID );
160
-		} elseif ( is_array( $invoice ) ) {
161
-			$this->set_props( $invoice );
162
-
163
-			if ( isset( $invoice['ID'] ) ) {
164
-				$this->set_id( $invoice['ID'] );
165
-			}
154
+        if ( ! empty( $invoice ) && is_numeric( $invoice ) && getpaid_is_invoice_post_type( get_post_type( (int) $invoice ) ) ) {
155
+            $this->set_id( (int) $invoice );
156
+        } elseif ( $invoice instanceof self ) {
157
+            $this->set_id( $invoice->get_id() );
158
+        } elseif ( ! empty( $invoice->ID ) ) {
159
+            $this->set_id( $invoice->ID );
160
+        } elseif ( is_array( $invoice ) ) {
161
+            $this->set_props( $invoice );
162
+
163
+            if ( isset( $invoice['ID'] ) ) {
164
+                $this->set_id( $invoice['ID'] );
165
+            }
166 166
 } elseif ( is_string( $invoice ) && $invoice_id = self::get_invoice_id_by_field( $invoice, 'key' ) ) {
167
-			$this->set_id( $invoice_id );
168
-		} elseif ( is_string( $invoice ) && $invoice_id = self::get_invoice_id_by_field( $invoice, 'number' ) ) {
169
-			$this->set_id( $invoice_id );
170
-		} elseif ( is_string( $invoice ) && $invoice_id = self::get_invoice_id_by_field( $invoice, 'transaction_id' ) ) {
171
-			$this->set_id( $invoice_id );
172
-		} else {
173
-			$this->set_object_read( true );
174
-		}
167
+            $this->set_id( $invoice_id );
168
+        } elseif ( is_string( $invoice ) && $invoice_id = self::get_invoice_id_by_field( $invoice, 'number' ) ) {
169
+            $this->set_id( $invoice_id );
170
+        } elseif ( is_string( $invoice ) && $invoice_id = self::get_invoice_id_by_field( $invoice, 'transaction_id' ) ) {
171
+            $this->set_id( $invoice_id );
172
+        } else {
173
+            $this->set_object_read( true );
174
+        }
175 175
 
176 176
         // Load the datastore.
177
-		$this->data_store = GetPaid_Data_Store::load( $this->data_store_name );
177
+        $this->data_store = GetPaid_Data_Store::load( $this->data_store_name );
178 178
 
179
-		if ( $this->get_id() > 0 ) {
179
+        if ( $this->get_id() > 0 ) {
180 180
             $this->post = get_post( $this->get_id() );
181 181
             $this->ID   = $this->get_id();
182
-			$this->data_store->read( $this );
182
+            $this->data_store->read( $this );
183 183
         }
184 184
 
185 185
     }
186 186
 
187 187
     /**
188
-	 * Given an invoice key/number, it returns its id.
189
-	 *
190
-	 *
191
-	 * @static
192
-	 * @param string $value The invoice key or number
193
-	 * @param string $field Either key, transaction_id or number.
194
-	 * @since 1.0.15
195
-	 * @return int
196
-	 */
197
-	public static function get_invoice_id_by_field( $value, $field = 'key' ) {
188
+     * Given an invoice key/number, it returns its id.
189
+     *
190
+     *
191
+     * @static
192
+     * @param string $value The invoice key or number
193
+     * @param string $field Either key, transaction_id or number.
194
+     * @since 1.0.15
195
+     * @return int
196
+     */
197
+    public static function get_invoice_id_by_field( $value, $field = 'key' ) {
198 198
         global $wpdb;
199 199
 
200
-		// Trim the value.
201
-		$value = trim( $value );
200
+        // Trim the value.
201
+        $value = trim( $value );
202 202
 
203
-		if ( empty( $value ) ) {
204
-			return 0;
205
-		}
203
+        if ( empty( $value ) ) {
204
+            return 0;
205
+        }
206 206
 
207 207
         // Valid fields.
208 208
         $fields = array( 'key', 'number', 'transaction_id' );
209 209
 
210
-		// Ensure a field has been passed.
211
-		if ( empty( $field ) || ! in_array( $field, $fields ) ) {
212
-			return 0;
213
-		}
210
+        // Ensure a field has been passed.
211
+        if ( empty( $field ) || ! in_array( $field, $fields ) ) {
212
+            return 0;
213
+        }
214 214
 
215
-		// Maybe retrieve from the cache.
216
-		$invoice_id   = wp_cache_get( $value, "getpaid_invoice_{$field}s_to_invoice_ids" );
217
-		if ( false !== $invoice_id ) {
218
-			return $invoice_id;
219
-		}
215
+        // Maybe retrieve from the cache.
216
+        $invoice_id   = wp_cache_get( $value, "getpaid_invoice_{$field}s_to_invoice_ids" );
217
+        if ( false !== $invoice_id ) {
218
+            return $invoice_id;
219
+        }
220 220
 
221 221
         // Fetch from the db.
222 222
         $table       = $wpdb->prefix . 'getpaid_invoices';
223
-		$db_field    = 'key' === $field ? 'invoice_key' : $field;
223
+        $db_field    = 'key' === $field ? 'invoice_key' : $field;
224 224
         $invoice_id  = (int) $wpdb->get_var(
225 225
             $wpdb->prepare( "SELECT `post_id` FROM $table WHERE `$db_field`=%s LIMIT 1", $value )
226 226
         );
227 227
 
228
-		// Update the cache with our data
229
-		wp_cache_set( $value, $invoice_id, "getpaid_invoice_{$field}s_to_invoice_ids" );
228
+        // Update the cache with our data
229
+        wp_cache_set( $value, $invoice_id, "getpaid_invoice_{$field}s_to_invoice_ids" );
230 230
 
231
-		return $invoice_id;
231
+        return $invoice_id;
232 232
     }
233 233
 
234 234
     /**
@@ -254,83 +254,83 @@  discard block
 block discarded – undo
254 254
     */
255 255
 
256 256
     /**
257
-	 * Get parent invoice ID.
258
-	 *
259
-	 * @since 1.0.19
260
-	 * @param  string $context View or edit context.
261
-	 * @return int
262
-	 */
263
-	public function get_parent_id( $context = 'view' ) {
264
-		return (int) $this->get_prop( 'parent_id', $context );
257
+     * Get parent invoice ID.
258
+     *
259
+     * @since 1.0.19
260
+     * @param  string $context View or edit context.
261
+     * @return int
262
+     */
263
+    public function get_parent_id( $context = 'view' ) {
264
+        return (int) $this->get_prop( 'parent_id', $context );
265 265
     }
266 266
 
267 267
     /**
268
-	 * Get parent invoice.
269
-	 *
270
-	 * @since 1.0.19
271
-	 * @return WPInv_Invoice
272
-	 */
268
+     * Get parent invoice.
269
+     *
270
+     * @since 1.0.19
271
+     * @return WPInv_Invoice
272
+     */
273 273
     public function get_parent_payment() {
274 274
         return new WPInv_Invoice( $this->get_parent_id() );
275 275
     }
276 276
 
277 277
     /**
278
-	 * Alias for self::get_parent_payment().
279
-	 *
280
-	 * @since 1.0.19
281
-	 * @return WPInv_Invoice
282
-	 */
278
+     * Alias for self::get_parent_payment().
279
+     *
280
+     * @since 1.0.19
281
+     * @return WPInv_Invoice
282
+     */
283 283
     public function get_parent() {
284 284
         return $this->get_parent_payment();
285 285
     }
286 286
 
287 287
     /**
288
-	 * Get invoice status.
289
-	 *
290
-	 * @since 1.0.19
291
-	 * @param  string $context View or edit context.
292
-	 * @return string
293
-	 */
294
-	public function get_status( $context = 'view' ) {
295
-		return $this->get_prop( 'status', $context );
296
-	}
288
+     * Get invoice status.
289
+     *
290
+     * @since 1.0.19
291
+     * @param  string $context View or edit context.
292
+     * @return string
293
+     */
294
+    public function get_status( $context = 'view' ) {
295
+        return $this->get_prop( 'status', $context );
296
+    }
297 297
 
298
-	/**
299
-	 * Retrieves an array of possible invoice statuses.
300
-	 *
301
-	 * @since 1.0.19
302
-	 * @return array
303
-	 */
304
-	public function get_all_statuses() {
305
-		return wpinv_get_invoice_statuses( true, true, $this );
298
+    /**
299
+     * Retrieves an array of possible invoice statuses.
300
+     *
301
+     * @since 1.0.19
302
+     * @return array
303
+     */
304
+    public function get_all_statuses() {
305
+        return wpinv_get_invoice_statuses( true, true, $this );
306 306
     }
307 307
 
308 308
     /**
309
-	 * Get invoice status nice name.
310
-	 *
311
-	 * @since 1.0.19
312
-	 * @return string
313
-	 */
309
+     * Get invoice status nice name.
310
+     *
311
+     * @since 1.0.19
312
+     * @return string
313
+     */
314 314
     public function get_status_nicename() {
315
-		$statuses = $this->get_all_statuses();
315
+        $statuses = $this->get_all_statuses();
316 316
 
317 317
         $status = isset( $statuses[ $this->get_status() ] ) ? $statuses[ $this->get_status() ] : $this->get_status();
318 318
 
319 319
         return apply_filters( 'wpinv_get_invoice_status_nicename', $status, $this );
320 320
     }
321 321
 
322
-	/**
323
-	 * Retrieves the invoice status class
324
-	 *
325
-	 * @since  1.0.19
326
-	 * @return string
327
-	 */
328
-	public function get_status_class() {
329
-		$statuses = getpaid_get_invoice_status_classes();
330
-		return isset( $statuses[ $this->get_status() ] ) ? $statuses[ $this->get_status() ] : 'bg-dark text-white';
331
-	}
322
+    /**
323
+     * Retrieves the invoice status class
324
+     *
325
+     * @since  1.0.19
326
+     * @return string
327
+     */
328
+    public function get_status_class() {
329
+        $statuses = getpaid_get_invoice_status_classes();
330
+        return isset( $statuses[ $this->get_status() ] ) ? $statuses[ $this->get_status() ] : 'bg-dark text-white';
331
+    }
332 332
 
333
-	/**
333
+    /**
334 334
      * Retrieves the invoice status label html
335 335
      *
336 336
      * @since  1.0.0
@@ -338,263 +338,263 @@  discard block
 block discarded – undo
338 338
      */
339 339
     public function get_status_label_html() {
340 340
 
341
-		$status_label = sanitize_text_field( $this->get_status_nicename() );
342
-		$status       = sanitize_html_class( $this->get_status() );
343
-		$class        = esc_attr( $this->get_status_class() );
344
-
345
-		return "<span class='bsui'><span class='badge $class $status'>$status_label</span></span>";
346
-	}
347
-
348
-    /**
349
-	 * Get plugin version when the invoice was created.
350
-	 *
351
-	 * @since 1.0.19
352
-	 * @param  string $context View or edit context.
353
-	 * @return string
354
-	 */
355
-	public function get_version( $context = 'view' ) {
356
-		return $this->get_prop( 'version', $context );
357
-	}
358
-
359
-	/**
360
-	 * @deprecated
361
-	 */
362
-	public function get_invoice_date( $format = true ) {
363
-		$date      = getpaid_format_date( $this->get_date_completed() );
364
-		$date      = empty( $date ) ? $this->get_date_created() : $this->get_date_completed();
365
-		$formatted = getpaid_format_date( $date );
366
-
367
-		if ( $format ) {
368
-			return $formatted;
369
-		}
370
-
371
-		return empty( $formatted ) ? '' : $date;
372
-
373
-    }
374
-
375
-    /**
376
-	 * Get date when the invoice was created.
377
-	 *
378
-	 * @since 1.0.19
379
-	 * @param  string $context View or edit context.
380
-	 * @return string
381
-	 */
382
-	public function get_date_created( $context = 'view' ) {
383
-		return $this->get_prop( 'date_created', $context );
384
-	}
385
-
386
-	/**
387
-	 * Alias for self::get_date_created().
388
-	 *
389
-	 * @since 1.0.19
390
-	 * @param  string $context View or edit context.
391
-	 * @return string
392
-	 */
393
-	public function get_created_date( $context = 'view' ) {
394
-		return $this->get_date_created( $context );
395
-    }
396
-
397
-    /**
398
-	 * Get GMT date when the invoice was created.
399
-	 *
400
-	 * @since 1.0.19
401
-	 * @param  string $context View or edit context.
402
-	 * @return string
403
-	 */
404
-	public function get_date_created_gmt( $context = 'view' ) {
341
+        $status_label = sanitize_text_field( $this->get_status_nicename() );
342
+        $status       = sanitize_html_class( $this->get_status() );
343
+        $class        = esc_attr( $this->get_status_class() );
344
+
345
+        return "<span class='bsui'><span class='badge $class $status'>$status_label</span></span>";
346
+    }
347
+
348
+    /**
349
+     * Get plugin version when the invoice was created.
350
+     *
351
+     * @since 1.0.19
352
+     * @param  string $context View or edit context.
353
+     * @return string
354
+     */
355
+    public function get_version( $context = 'view' ) {
356
+        return $this->get_prop( 'version', $context );
357
+    }
358
+
359
+    /**
360
+     * @deprecated
361
+     */
362
+    public function get_invoice_date( $format = true ) {
363
+        $date      = getpaid_format_date( $this->get_date_completed() );
364
+        $date      = empty( $date ) ? $this->get_date_created() : $this->get_date_completed();
365
+        $formatted = getpaid_format_date( $date );
366
+
367
+        if ( $format ) {
368
+            return $formatted;
369
+        }
370
+
371
+        return empty( $formatted ) ? '' : $date;
372
+
373
+    }
374
+
375
+    /**
376
+     * Get date when the invoice was created.
377
+     *
378
+     * @since 1.0.19
379
+     * @param  string $context View or edit context.
380
+     * @return string
381
+     */
382
+    public function get_date_created( $context = 'view' ) {
383
+        return $this->get_prop( 'date_created', $context );
384
+    }
385
+
386
+    /**
387
+     * Alias for self::get_date_created().
388
+     *
389
+     * @since 1.0.19
390
+     * @param  string $context View or edit context.
391
+     * @return string
392
+     */
393
+    public function get_created_date( $context = 'view' ) {
394
+        return $this->get_date_created( $context );
395
+    }
396
+
397
+    /**
398
+     * Get GMT date when the invoice was created.
399
+     *
400
+     * @since 1.0.19
401
+     * @param  string $context View or edit context.
402
+     * @return string
403
+     */
404
+    public function get_date_created_gmt( $context = 'view' ) {
405 405
         $date = $this->get_date_created( $context );
406 406
 
407 407
         if ( $date ) {
408 408
             $date = get_gmt_from_date( $date );
409 409
         }
410
-		return $date;
411
-    }
412
-
413
-    /**
414
-	 * Get date when the invoice was last modified.
415
-	 *
416
-	 * @since 1.0.19
417
-	 * @param  string $context View or edit context.
418
-	 * @return string
419
-	 */
420
-	public function get_date_modified( $context = 'view' ) {
421
-		return $this->get_prop( 'date_modified', $context );
422
-	}
423
-
424
-	/**
425
-	 * Alias for self::get_date_modified().
426
-	 *
427
-	 * @since 1.0.19
428
-	 * @param  string $context View or edit context.
429
-	 * @return string
430
-	 */
431
-	public function get_modified_date( $context = 'view' ) {
432
-		return $this->get_date_modified( $context );
433
-    }
434
-
435
-    /**
436
-	 * Get GMT date when the invoice was last modified.
437
-	 *
438
-	 * @since 1.0.19
439
-	 * @param  string $context View or edit context.
440
-	 * @return string
441
-	 */
442
-	public function get_date_modified_gmt( $context = 'view' ) {
410
+        return $date;
411
+    }
412
+
413
+    /**
414
+     * Get date when the invoice was last modified.
415
+     *
416
+     * @since 1.0.19
417
+     * @param  string $context View or edit context.
418
+     * @return string
419
+     */
420
+    public function get_date_modified( $context = 'view' ) {
421
+        return $this->get_prop( 'date_modified', $context );
422
+    }
423
+
424
+    /**
425
+     * Alias for self::get_date_modified().
426
+     *
427
+     * @since 1.0.19
428
+     * @param  string $context View or edit context.
429
+     * @return string
430
+     */
431
+    public function get_modified_date( $context = 'view' ) {
432
+        return $this->get_date_modified( $context );
433
+    }
434
+
435
+    /**
436
+     * Get GMT date when the invoice was last modified.
437
+     *
438
+     * @since 1.0.19
439
+     * @param  string $context View or edit context.
440
+     * @return string
441
+     */
442
+    public function get_date_modified_gmt( $context = 'view' ) {
443 443
         $date = $this->get_date_modified( $context );
444 444
 
445 445
         if ( $date ) {
446 446
             $date = get_gmt_from_date( $date );
447 447
         }
448
-		return $date;
448
+        return $date;
449 449
     }
450 450
 
451 451
     /**
452
-	 * Get the invoice due date.
453
-	 *
454
-	 * @since 1.0.19
455
-	 * @param  string $context View or edit context.
456
-	 * @return string
457
-	 */
458
-	public function get_due_date( $context = 'view' ) {
459
-		return $this->get_prop( 'due_date', $context );
452
+     * Get the invoice due date.
453
+     *
454
+     * @since 1.0.19
455
+     * @param  string $context View or edit context.
456
+     * @return string
457
+     */
458
+    public function get_due_date( $context = 'view' ) {
459
+        return $this->get_prop( 'due_date', $context );
460 460
     }
461 461
 
462 462
     /**
463
-	 * Alias for self::get_due_date().
464
-	 *
465
-	 * @since 1.0.19
466
-	 * @param  string $context View or edit context.
467
-	 * @return string
468
-	 */
469
-	public function get_date_due( $context = 'view' ) {
470
-		return $this->get_due_date( $context );
463
+     * Alias for self::get_due_date().
464
+     *
465
+     * @since 1.0.19
466
+     * @param  string $context View or edit context.
467
+     * @return string
468
+     */
469
+    public function get_date_due( $context = 'view' ) {
470
+        return $this->get_due_date( $context );
471 471
     }
472 472
 
473 473
     /**
474
-	 * Get the invoice GMT due date.
475
-	 *
476
-	 * @since 1.0.19
477
-	 * @param  string $context View or edit context.
478
-	 * @return string
479
-	 */
480
-	public function get_due_date_gmt( $context = 'view' ) {
474
+     * Get the invoice GMT due date.
475
+     *
476
+     * @since 1.0.19
477
+     * @param  string $context View or edit context.
478
+     * @return string
479
+     */
480
+    public function get_due_date_gmt( $context = 'view' ) {
481 481
         $date = $this->get_due_date( $context );
482 482
 
483 483
         if ( $date ) {
484 484
             $date = get_gmt_from_date( $date );
485 485
         }
486
-		return $date;
486
+        return $date;
487 487
     }
488 488
 
489 489
     /**
490
-	 * Alias for self::get_due_date_gmt().
491
-	 *
492
-	 * @since 1.0.19
493
-	 * @param  string $context View or edit context.
494
-	 * @return string
495
-	 */
496
-	public function get_gmt_date_due( $context = 'view' ) {
497
-		return $this->get_due_date_gmt( $context );
490
+     * Alias for self::get_due_date_gmt().
491
+     *
492
+     * @since 1.0.19
493
+     * @param  string $context View or edit context.
494
+     * @return string
495
+     */
496
+    public function get_gmt_date_due( $context = 'view' ) {
497
+        return $this->get_due_date_gmt( $context );
498 498
     }
499 499
 
500 500
     /**
501
-	 * Get date when the invoice was completed.
502
-	 *
503
-	 * @since 1.0.19
504
-	 * @param  string $context View or edit context.
505
-	 * @return string
506
-	 */
507
-	public function get_completed_date( $context = 'view' ) {
508
-		return $this->get_prop( 'completed_date', $context );
501
+     * Get date when the invoice was completed.
502
+     *
503
+     * @since 1.0.19
504
+     * @param  string $context View or edit context.
505
+     * @return string
506
+     */
507
+    public function get_completed_date( $context = 'view' ) {
508
+        return $this->get_prop( 'completed_date', $context );
509 509
     }
510 510
 
511 511
     /**
512
-	 * Alias for self::get_completed_date().
513
-	 *
514
-	 * @since 1.0.19
515
-	 * @param  string $context View or edit context.
516
-	 * @return string
517
-	 */
518
-	public function get_date_completed( $context = 'view' ) {
519
-		return $this->get_completed_date( $context );
512
+     * Alias for self::get_completed_date().
513
+     *
514
+     * @since 1.0.19
515
+     * @param  string $context View or edit context.
516
+     * @return string
517
+     */
518
+    public function get_date_completed( $context = 'view' ) {
519
+        return $this->get_completed_date( $context );
520 520
     }
521 521
 
522 522
     /**
523
-	 * Get GMT date when the invoice was was completed.
524
-	 *
525
-	 * @since 1.0.19
526
-	 * @param  string $context View or edit context.
527
-	 * @return string
528
-	 */
529
-	public function get_completed_date_gmt( $context = 'view' ) {
523
+     * Get GMT date when the invoice was was completed.
524
+     *
525
+     * @since 1.0.19
526
+     * @param  string $context View or edit context.
527
+     * @return string
528
+     */
529
+    public function get_completed_date_gmt( $context = 'view' ) {
530 530
         $date = $this->get_completed_date( $context );
531 531
 
532 532
         if ( $date ) {
533 533
             $date = get_gmt_from_date( $date );
534 534
         }
535
-		return $date;
535
+        return $date;
536 536
     }
537 537
 
538 538
     /**
539
-	 * Alias for self::get_completed_date_gmt().
540
-	 *
541
-	 * @since 1.0.19
542
-	 * @param  string $context View or edit context.
543
-	 * @return string
544
-	 */
545
-	public function get_gmt_completed_date( $context = 'view' ) {
546
-		return $this->get_completed_date_gmt( $context );
539
+     * Alias for self::get_completed_date_gmt().
540
+     *
541
+     * @since 1.0.19
542
+     * @param  string $context View or edit context.
543
+     * @return string
544
+     */
545
+    public function get_gmt_completed_date( $context = 'view' ) {
546
+        return $this->get_completed_date_gmt( $context );
547 547
     }
548 548
 
549 549
     /**
550
-	 * Get the invoice number.
551
-	 *
552
-	 * @since 1.0.19
553
-	 * @param  string $context View or edit context.
554
-	 * @return string
555
-	 */
556
-	public function get_number( $context = 'view' ) {
557
-		$number = $this->get_prop( 'number', $context );
550
+     * Get the invoice number.
551
+     *
552
+     * @since 1.0.19
553
+     * @param  string $context View or edit context.
554
+     * @return string
555
+     */
556
+    public function get_number( $context = 'view' ) {
557
+        $number = $this->get_prop( 'number', $context );
558 558
 
559
-		if ( empty( $number ) ) {
560
-			$number = $this->generate_number();
561
-			$this->set_number( $this->generate_number() );
562
-		}
559
+        if ( empty( $number ) ) {
560
+            $number = $this->generate_number();
561
+            $this->set_number( $this->generate_number() );
562
+        }
563 563
 
564
-		return $number;
564
+        return $number;
565 565
     }
566 566
 
567
-	/**
568
-	 * Set the invoice number.
569
-	 *
570
-	 * @since 1.0.19
571
-	 */
572
-	public function maybe_set_number() {
567
+    /**
568
+     * Set the invoice number.
569
+     *
570
+     * @since 1.0.19
571
+     */
572
+    public function maybe_set_number() {
573 573
         $number = $this->get_number();
574 574
 
575 575
         if ( empty( $number ) || $this->get_id() == $number ) {
576
-			$this->set_number( $this->generate_number() );
576
+            $this->set_number( $this->generate_number() );
577 577
         }
578 578
 
579
-	}
579
+    }
580 580
 
581 581
     /**
582
-	 * Get the invoice key.
583
-	 *
584
-	 * @since 1.0.19
585
-	 * @param  string $context View or edit context.
586
-	 * @return string
587
-	 */
588
-	public function get_key( $context = 'view' ) {
582
+     * Get the invoice key.
583
+     *
584
+     * @since 1.0.19
585
+     * @param  string $context View or edit context.
586
+     * @return string
587
+     */
588
+    public function get_key( $context = 'view' ) {
589 589
         return $this->get_prop( 'key', $context );
590
-	}
591
-
592
-	/**
593
-	 * Set the invoice key.
594
-	 *
595
-	 * @since 1.0.19
596
-	 */
597
-	public function maybe_set_key() {
590
+    }
591
+
592
+    /**
593
+     * Set the invoice key.
594
+     *
595
+     * @since 1.0.19
596
+     */
597
+    public function maybe_set_key() {
598 598
         $key = $this->get_key();
599 599
 
600 600
         if ( empty( $key ) ) {
@@ -605,140 +605,140 @@  discard block
 block discarded – undo
605 605
     }
606 606
 
607 607
     /**
608
-	 * Get the invoice type.
609
-	 *
610
-	 * @since 1.0.19
611
-	 * @param  string $context View or edit context.
612
-	 * @return string
613
-	 */
614
-	public function get_type( $context = 'view' ) {
608
+     * Get the invoice type.
609
+     *
610
+     * @since 1.0.19
611
+     * @param  string $context View or edit context.
612
+     * @return string
613
+     */
614
+    public function get_type( $context = 'view' ) {
615 615
         return $this->get_prop( 'type', $context );
616
-	}
617
-
618
-	/**
619
-	 * Returns the post type name.
620
-	 *
621
-	 * @since 1.0.19
622
-	 * @return string
623
-	 */
624
-	public function get_invoice_quote_type() {
616
+    }
617
+
618
+    /**
619
+     * Returns the post type name.
620
+     *
621
+     * @since 1.0.19
622
+     * @return string
623
+     */
624
+    public function get_invoice_quote_type() {
625 625
         return getpaid_get_post_type_label( $this->get_post_type(), false );
626 626
     }
627 627
 
628 628
     /**
629
-	 * Get the invoice post type label.
630
-	 *
631
-	 * @since 1.0.19
632
-	 * @param  string $context View or edit context.
633
-	 * @return string
634
-	 */
635
-	public function get_label( $context = 'view' ) {
629
+     * Get the invoice post type label.
630
+     *
631
+     * @since 1.0.19
632
+     * @param  string $context View or edit context.
633
+     * @return string
634
+     */
635
+    public function get_label( $context = 'view' ) {
636 636
         return getpaid_get_post_type_label( $this->get_post_type( $context ), false );
637
-	}
638
-
639
-	/**
640
-	 * Get the invoice post type.
641
-	 *
642
-	 * @since 1.0.19
643
-	 * @param  string $context View or edit context.
644
-	 * @return string
645
-	 */
646
-	public function get_post_type( $context = 'view' ) {
637
+    }
638
+
639
+    /**
640
+     * Get the invoice post type.
641
+     *
642
+     * @since 1.0.19
643
+     * @param  string $context View or edit context.
644
+     * @return string
645
+     */
646
+    public function get_post_type( $context = 'view' ) {
647 647
         return $this->get_prop( 'post_type', $context );
648 648
     }
649 649
 
650 650
     /**
651
-	 * Get the invoice mode.
652
-	 *
653
-	 * @since 1.0.19
654
-	 * @param  string $context View or edit context.
655
-	 * @return string
656
-	 */
657
-	public function get_mode( $context = 'view' ) {
651
+     * Get the invoice mode.
652
+     *
653
+     * @since 1.0.19
654
+     * @param  string $context View or edit context.
655
+     * @return string
656
+     */
657
+    public function get_mode( $context = 'view' ) {
658 658
         return $this->get_prop( 'mode', $context );
659 659
     }
660 660
 
661 661
     /**
662
-	 * Get the invoice path.
663
-	 *
664
-	 * @since 1.0.19
665
-	 * @param  string $context View or edit context.
666
-	 * @return string
667
-	 */
668
-	public function get_path( $context = 'view' ) {
662
+     * Get the invoice path.
663
+     *
664
+     * @since 1.0.19
665
+     * @param  string $context View or edit context.
666
+     * @return string
667
+     */
668
+    public function get_path( $context = 'view' ) {
669 669
         $path   = $this->get_prop( 'path', $context );
670
-		$prefix = $this->get_type();
670
+        $prefix = $this->get_type();
671 671
 
672
-		if ( 0 !== strpos( $path, $prefix ) ) {
673
-			$path = sanitize_title( $prefix . '-' . $this->get_id() );
674
-			$this->set_path( $path );
675
-		}
672
+        if ( 0 !== strpos( $path, $prefix ) ) {
673
+            $path = sanitize_title( $prefix . '-' . $this->get_id() );
674
+            $this->set_path( $path );
675
+        }
676 676
 
677
-		return $path;
677
+        return $path;
678 678
     }
679 679
 
680 680
     /**
681
-	 * Get the invoice name/title.
682
-	 *
683
-	 * @since 1.0.19
684
-	 * @param  string $context View or edit context.
685
-	 * @return string
686
-	 */
687
-	public function get_name( $context = 'view' ) {
681
+     * Get the invoice name/title.
682
+     *
683
+     * @since 1.0.19
684
+     * @param  string $context View or edit context.
685
+     * @return string
686
+     */
687
+    public function get_name( $context = 'view' ) {
688 688
         return $this->get_prop( 'title', $context );
689 689
     }
690 690
 
691 691
     /**
692
-	 * Alias of self::get_name().
693
-	 *
694
-	 * @since 1.0.19
695
-	 * @param  string $context View or edit context.
696
-	 * @return string
697
-	 */
698
-	public function get_title( $context = 'view' ) {
699
-		return $this->get_name( $context );
692
+     * Alias of self::get_name().
693
+     *
694
+     * @since 1.0.19
695
+     * @param  string $context View or edit context.
696
+     * @return string
697
+     */
698
+    public function get_title( $context = 'view' ) {
699
+        return $this->get_name( $context );
700 700
     }
701 701
 
702 702
     /**
703
-	 * Get the invoice description.
704
-	 *
705
-	 * @since 1.0.19
706
-	 * @param  string $context View or edit context.
707
-	 * @return string
708
-	 */
709
-	public function get_description( $context = 'view' ) {
710
-		return $this->get_prop( 'description', $context );
703
+     * Get the invoice description.
704
+     *
705
+     * @since 1.0.19
706
+     * @param  string $context View or edit context.
707
+     * @return string
708
+     */
709
+    public function get_description( $context = 'view' ) {
710
+        return $this->get_prop( 'description', $context );
711 711
     }
712 712
 
713 713
     /**
714
-	 * Alias of self::get_description().
715
-	 *
716
-	 * @since 1.0.19
717
-	 * @param  string $context View or edit context.
718
-	 * @return string
719
-	 */
720
-	public function get_excerpt( $context = 'view' ) {
721
-		return $this->get_description( $context );
714
+     * Alias of self::get_description().
715
+     *
716
+     * @since 1.0.19
717
+     * @param  string $context View or edit context.
718
+     * @return string
719
+     */
720
+    public function get_excerpt( $context = 'view' ) {
721
+        return $this->get_description( $context );
722 722
     }
723 723
 
724 724
     /**
725
-	 * Alias of self::get_description().
726
-	 *
727
-	 * @since 1.0.19
728
-	 * @param  string $context View or edit context.
729
-	 * @return string
730
-	 */
731
-	public function get_summary( $context = 'view' ) {
732
-		return $this->get_description( $context );
725
+     * Alias of self::get_description().
726
+     *
727
+     * @since 1.0.19
728
+     * @param  string $context View or edit context.
729
+     * @return string
730
+     */
731
+    public function get_summary( $context = 'view' ) {
732
+        return $this->get_description( $context );
733 733
     }
734 734
 
735 735
     /**
736
-	 * Returns the user info.
737
-	 *
738
-	 * @since 1.0.19
736
+     * Returns the user info.
737
+     *
738
+     * @since 1.0.19
739 739
      * @param  string $context View or edit context.
740
-	 * @return array
741
-	 */
740
+     * @return array
741
+     */
742 742
     public function get_user_info( $context = 'view' ) {
743 743
 
744 744
         $user_info = array(
@@ -753,683 +753,683 @@  discard block
 block discarded – undo
753 753
             'state'      => $this->get_state( $context ),
754 754
             'zip'        => $this->get_zip( $context ),
755 755
             'company'    => $this->get_company( $context ),
756
-			'company_id' => $this->get_company_id( $context ),
756
+            'company_id' => $this->get_company_id( $context ),
757 757
             'vat_number' => $this->get_vat_number( $context ),
758 758
             'discount'   => $this->get_discount_code( $context ),
759
-		);
759
+        );
760 760
 
761
-		return apply_filters( 'wpinv_user_info', $user_info, $this->get_id(), $this );
761
+        return apply_filters( 'wpinv_user_info', $user_info, $this->get_id(), $this );
762 762
 
763 763
     }
764 764
 
765 765
     /**
766
-	 * Get the user id.
767
-	 *
768
-	 * @since 1.0.19
769
-	 * @param  string $context View or edit context.
770
-	 * @return int
771
-	 */
772
-	public function get_author( $context = 'view' ) {
773
-		return (int) $this->get_prop( 'author', $context );
766
+     * Get the user id.
767
+     *
768
+     * @since 1.0.19
769
+     * @param  string $context View or edit context.
770
+     * @return int
771
+     */
772
+    public function get_author( $context = 'view' ) {
773
+        return (int) $this->get_prop( 'author', $context );
774 774
     }
775 775
 
776 776
     /**
777
-	 * Alias of self::get_author().
778
-	 *
779
-	 * @since 1.0.19
780
-	 * @param  string $context View or edit context.
781
-	 * @return int
782
-	 */
783
-	public function get_user_id( $context = 'view' ) {
784
-		return $this->get_author( $context );
777
+     * Alias of self::get_author().
778
+     *
779
+     * @since 1.0.19
780
+     * @param  string $context View or edit context.
781
+     * @return int
782
+     */
783
+    public function get_user_id( $context = 'view' ) {
784
+        return $this->get_author( $context );
785 785
     }
786 786
 
787
-     /**
788
-	 * Get customer ID.
789
-	 *
790
-	 * @since 1.0.19
791
-	 * @param  string $context View or edit context.
792
-	 * @return int
793
-	 */
794
-	public function get_customer_id( $context = 'view' ) {
795
-		return (int) $this->get_prop( 'customer_id', $context );
787
+        /**
788
+         * Get customer ID.
789
+         *
790
+         * @since 1.0.19
791
+         * @param  string $context View or edit context.
792
+         * @return int
793
+         */
794
+    public function get_customer_id( $context = 'view' ) {
795
+        return (int) $this->get_prop( 'customer_id', $context );
796 796
     }
797 797
 
798 798
     /**
799
-	 * Get the customer's ip.
800
-	 *
801
-	 * @since 1.0.19
802
-	 * @param  string $context View or edit context.
803
-	 * @return string
804
-	 */
805
-	public function get_ip( $context = 'view' ) {
806
-		return $this->get_prop( 'user_ip', $context );
799
+     * Get the customer's ip.
800
+     *
801
+     * @since 1.0.19
802
+     * @param  string $context View or edit context.
803
+     * @return string
804
+     */
805
+    public function get_ip( $context = 'view' ) {
806
+        return $this->get_prop( 'user_ip', $context );
807 807
     }
808 808
 
809 809
     /**
810
-	 * Alias of self::get_ip().
811
-	 *
812
-	 * @since 1.0.19
813
-	 * @param  string $context View or edit context.
814
-	 * @return string
815
-	 */
816
-	public function get_user_ip( $context = 'view' ) {
817
-		return $this->get_ip( $context );
810
+     * Alias of self::get_ip().
811
+     *
812
+     * @since 1.0.19
813
+     * @param  string $context View or edit context.
814
+     * @return string
815
+     */
816
+    public function get_user_ip( $context = 'view' ) {
817
+        return $this->get_ip( $context );
818 818
     }
819 819
 
820
-     /**
821
-	 * Alias of self::get_ip().
822
-	 *
823
-	 * @since 1.0.19
824
-	 * @param  string $context View or edit context.
825
-	 * @return string
826
-	 */
827
-	public function get_customer_ip( $context = 'view' ) {
828
-		return $this->get_ip( $context );
820
+        /**
821
+         * Alias of self::get_ip().
822
+         *
823
+         * @since 1.0.19
824
+         * @param  string $context View or edit context.
825
+         * @return string
826
+         */
827
+    public function get_customer_ip( $context = 'view' ) {
828
+        return $this->get_ip( $context );
829 829
     }
830 830
 
831 831
     /**
832
-	 * Get the customer's first name.
833
-	 *
834
-	 * @since 1.0.19
835
-	 * @param  string $context View or edit context.
836
-	 * @return string
837
-	 */
838
-	public function get_first_name( $context = 'view' ) {
839
-		return $this->get_prop( 'first_name', $context );
832
+     * Get the customer's first name.
833
+     *
834
+     * @since 1.0.19
835
+     * @param  string $context View or edit context.
836
+     * @return string
837
+     */
838
+    public function get_first_name( $context = 'view' ) {
839
+        return $this->get_prop( 'first_name', $context );
840 840
     }
841 841
 
842 842
     /**
843
-	 * Alias of self::get_first_name().
844
-	 *
845
-	 * @since 1.0.19
846
-	 * @param  string $context View or edit context.
847
-	 * @return string
848
-	 */
849
-	public function get_user_first_name( $context = 'view' ) {
850
-		return $this->get_first_name( $context );
843
+     * Alias of self::get_first_name().
844
+     *
845
+     * @since 1.0.19
846
+     * @param  string $context View or edit context.
847
+     * @return string
848
+     */
849
+    public function get_user_first_name( $context = 'view' ) {
850
+        return $this->get_first_name( $context );
851 851
     }
852 852
 
853
-     /**
854
-	 * Alias of self::get_first_name().
855
-	 *
856
-	 * @since 1.0.19
857
-	 * @param  string $context View or edit context.
858
-	 * @return string
859
-	 */
860
-	public function get_customer_first_name( $context = 'view' ) {
861
-		return $this->get_first_name( $context );
853
+        /**
854
+         * Alias of self::get_first_name().
855
+         *
856
+         * @since 1.0.19
857
+         * @param  string $context View or edit context.
858
+         * @return string
859
+         */
860
+    public function get_customer_first_name( $context = 'view' ) {
861
+        return $this->get_first_name( $context );
862 862
     }
863 863
 
864 864
     /**
865
-	 * Get the customer's last name.
866
-	 *
867
-	 * @since 1.0.19
868
-	 * @param  string $context View or edit context.
869
-	 * @return string
870
-	 */
871
-	public function get_last_name( $context = 'view' ) {
872
-		return $this->get_prop( 'last_name', $context );
865
+     * Get the customer's last name.
866
+     *
867
+     * @since 1.0.19
868
+     * @param  string $context View or edit context.
869
+     * @return string
870
+     */
871
+    public function get_last_name( $context = 'view' ) {
872
+        return $this->get_prop( 'last_name', $context );
873 873
     }
874 874
 
875 875
     /**
876
-	 * Alias of self::get_last_name().
877
-	 *
878
-	 * @since 1.0.19
879
-	 * @param  string $context View or edit context.
880
-	 * @return string
881
-	 */
882
-	public function get_user_last_name( $context = 'view' ) {
883
-		return $this->get_last_name( $context );
876
+     * Alias of self::get_last_name().
877
+     *
878
+     * @since 1.0.19
879
+     * @param  string $context View or edit context.
880
+     * @return string
881
+     */
882
+    public function get_user_last_name( $context = 'view' ) {
883
+        return $this->get_last_name( $context );
884 884
     }
885 885
 
886 886
     /**
887
-	 * Alias of self::get_last_name().
888
-	 *
889
-	 * @since 1.0.19
890
-	 * @param  string $context View or edit context.
891
-	 * @return string
892
-	 */
893
-	public function get_customer_last_name( $context = 'view' ) {
894
-		return $this->get_last_name( $context );
887
+     * Alias of self::get_last_name().
888
+     *
889
+     * @since 1.0.19
890
+     * @param  string $context View or edit context.
891
+     * @return string
892
+     */
893
+    public function get_customer_last_name( $context = 'view' ) {
894
+        return $this->get_last_name( $context );
895 895
     }
896 896
 
897 897
     /**
898
-	 * Get the customer's full name.
899
-	 *
900
-	 * @since 1.0.19
901
-	 * @param  string $context View or edit context.
902
-	 * @return string
903
-	 */
904
-	public function get_full_name( $context = 'view' ) {
905
-		$name = trim( $this->get_first_name( $context ) . ' ' . $this->get_last_name( $context ) );
898
+     * Get the customer's full name.
899
+     *
900
+     * @since 1.0.19
901
+     * @param  string $context View or edit context.
902
+     * @return string
903
+     */
904
+    public function get_full_name( $context = 'view' ) {
905
+        $name = trim( $this->get_first_name( $context ) . ' ' . $this->get_last_name( $context ) );
906 906
 
907
-		if ( ! $name ) {
908
-			$user = get_userdata( $this->get_author( $context ) );
907
+        if ( ! $name ) {
908
+            $user = get_userdata( $this->get_author( $context ) );
909 909
 
910
-			if ( $user ) {
911
-				$name = $user->display_name;
912
-			}
913
-		}
910
+            if ( $user ) {
911
+                $name = $user->display_name;
912
+            }
913
+        }
914 914
 
915
-		if ( ! $name ) {
916
-			$name = $this->get_email( $context );
917
-		}
915
+        if ( ! $name ) {
916
+            $name = $this->get_email( $context );
917
+        }
918 918
 
919
-		return apply_filters( 'wpinv_invoice_user_full_name', $name, $this );
919
+        return apply_filters( 'wpinv_invoice_user_full_name', $name, $this );
920 920
     }
921 921
 
922 922
     /**
923
-	 * Alias of self::get_full_name().
924
-	 *
925
-	 * @since 1.0.19
926
-	 * @param  string $context View or edit context.
927
-	 * @return string
928
-	 */
929
-	public function get_user_full_name( $context = 'view' ) {
930
-		return $this->get_full_name( $context );
931
-    }
923
+     * Alias of self::get_full_name().
924
+     *
925
+     * @since 1.0.19
926
+     * @param  string $context View or edit context.
927
+     * @return string
928
+     */
929
+    public function get_user_full_name( $context = 'view' ) {
930
+        return $this->get_full_name( $context );
931
+    }
932
+
933
+    /**
934
+     * Alias of self::get_full_name().
935
+     *
936
+     * @since 1.0.19
937
+     * @param  string $context View or edit context.
938
+     * @return string
939
+     */
940
+    public function get_customer_full_name( $context = 'view' ) {
941
+        return $this->get_full_name( $context );
942
+    }
943
+
944
+    /**
945
+     * Get the customer's phone number.
946
+     *
947
+     * @since 1.0.19
948
+     * @param  string $context View or edit context.
949
+     * @return string
950
+     */
951
+    public function get_phone( $context = 'view' ) {
952
+        return $this->get_prop( 'phone', $context );
953
+    }
954
+
955
+    /**
956
+     * Alias of self::get_phone().
957
+     *
958
+     * @since 1.0.19
959
+     * @param  string $context View or edit context.
960
+     * @return string
961
+     */
962
+    public function get_phone_number( $context = 'view' ) {
963
+        return $this->get_phone( $context );
964
+    }
965
+
966
+    /**
967
+     * Alias of self::get_phone().
968
+     *
969
+     * @since 1.0.19
970
+     * @param  string $context View or edit context.
971
+     * @return string
972
+     */
973
+    public function get_user_phone( $context = 'view' ) {
974
+        return $this->get_phone( $context );
975
+    }
976
+
977
+    /**
978
+     * Alias of self::get_phone().
979
+     *
980
+     * @since 1.0.19
981
+     * @param  string $context View or edit context.
982
+     * @return string
983
+     */
984
+    public function get_customer_phone( $context = 'view' ) {
985
+        return $this->get_phone( $context );
986
+    }
987
+
988
+    /**
989
+     * Get the customer's email address.
990
+     *
991
+     * @since 1.0.19
992
+     * @param  string $context View or edit context.
993
+     * @return string
994
+     */
995
+    public function get_email( $context = 'view' ) {
996
+        return $this->get_prop( 'email', $context );
997
+    }
932 998
 
933 999
     /**
934
-	 * Alias of self::get_full_name().
935
-	 *
936
-	 * @since 1.0.19
937
-	 * @param  string $context View or edit context.
938
-	 * @return string
939
-	 */
940
-	public function get_customer_full_name( $context = 'view' ) {
941
-		return $this->get_full_name( $context );
1000
+     * Alias of self::get_email().
1001
+     *
1002
+     * @since 1.0.19
1003
+     * @param  string $context View or edit context.
1004
+     * @return string
1005
+     */
1006
+    public function get_email_address( $context = 'view' ) {
1007
+        return $this->get_email( $context );
1008
+    }
1009
+
1010
+    /**
1011
+     * Alias of self::get_email().
1012
+     *
1013
+     * @since 1.0.19
1014
+     * @param  string $context View or edit context.
1015
+     * @return string
1016
+     */
1017
+    public function get_user_email( $context = 'view' ) {
1018
+        return $this->get_email( $context );
942 1019
     }
943 1020
 
944 1021
     /**
945
-	 * Get the customer's phone number.
946
-	 *
947
-	 * @since 1.0.19
948
-	 * @param  string $context View or edit context.
949
-	 * @return string
950
-	 */
951
-	public function get_phone( $context = 'view' ) {
952
-		return $this->get_prop( 'phone', $context );
1022
+     * Alias of self::get_email().
1023
+     *
1024
+     * @since 1.0.19
1025
+     * @param  string $context View or edit context.
1026
+     * @return string
1027
+     */
1028
+    public function get_customer_email( $context = 'view' ) {
1029
+        return $this->get_email( $context );
953 1030
     }
954 1031
 
955 1032
     /**
956
-	 * Alias of self::get_phone().
957
-	 *
958
-	 * @since 1.0.19
959
-	 * @param  string $context View or edit context.
960
-	 * @return string
961
-	 */
962
-	public function get_phone_number( $context = 'view' ) {
963
-		return $this->get_phone( $context );
1033
+     * Get the customer's country.
1034
+     *
1035
+     * @since 1.0.19
1036
+     * @param  string $context View or edit context.
1037
+     * @return string
1038
+     */
1039
+    public function get_country( $context = 'view' ) {
1040
+        $country = $this->get_prop( 'country', $context );
1041
+        return empty( $country ) ? wpinv_get_default_country() : $country;
964 1042
     }
965 1043
 
966 1044
     /**
967
-	 * Alias of self::get_phone().
968
-	 *
969
-	 * @since 1.0.19
970
-	 * @param  string $context View or edit context.
971
-	 * @return string
972
-	 */
973
-	public function get_user_phone( $context = 'view' ) {
974
-		return $this->get_phone( $context );
1045
+     * Alias of self::get_country().
1046
+     *
1047
+     * @since 1.0.19
1048
+     * @param  string $context View or edit context.
1049
+     * @return string
1050
+     */
1051
+    public function get_user_country( $context = 'view' ) {
1052
+        return $this->get_country( $context );
975 1053
     }
976 1054
 
977 1055
     /**
978
-	 * Alias of self::get_phone().
979
-	 *
980
-	 * @since 1.0.19
981
-	 * @param  string $context View or edit context.
982
-	 * @return string
983
-	 */
984
-	public function get_customer_phone( $context = 'view' ) {
985
-		return $this->get_phone( $context );
1056
+     * Alias of self::get_country().
1057
+     *
1058
+     * @since 1.0.19
1059
+     * @param  string $context View or edit context.
1060
+     * @return string
1061
+     */
1062
+    public function get_customer_country( $context = 'view' ) {
1063
+        return $this->get_country( $context );
1064
+    }
1065
+
1066
+    /**
1067
+     * Get the customer's state.
1068
+     *
1069
+     * @since 1.0.19
1070
+     * @param  string $context View or edit context.
1071
+     * @return string
1072
+     */
1073
+    public function get_state( $context = 'view' ) {
1074
+        $state = $this->get_prop( 'state', $context );
1075
+        return empty( $state ) ? wpinv_get_default_state() : $state;
1076
+    }
1077
+
1078
+    /**
1079
+     * Alias of self::get_state().
1080
+     *
1081
+     * @since 1.0.19
1082
+     * @param  string $context View or edit context.
1083
+     * @return string
1084
+     */
1085
+    public function get_user_state( $context = 'view' ) {
1086
+        return $this->get_state( $context );
1087
+    }
1088
+
1089
+    /**
1090
+     * Alias of self::get_state().
1091
+     *
1092
+     * @since 1.0.19
1093
+     * @param  string $context View or edit context.
1094
+     * @return string
1095
+     */
1096
+    public function get_customer_state( $context = 'view' ) {
1097
+        return $this->get_state( $context );
986 1098
     }
987 1099
 
988 1100
     /**
989
-	 * Get the customer's email address.
990
-	 *
991
-	 * @since 1.0.19
992
-	 * @param  string $context View or edit context.
993
-	 * @return string
994
-	 */
995
-	public function get_email( $context = 'view' ) {
996
-		return $this->get_prop( 'email', $context );
1101
+     * Get the customer's city.
1102
+     *
1103
+     * @since 1.0.19
1104
+     * @param  string $context View or edit context.
1105
+     * @return string
1106
+     */
1107
+    public function get_city( $context = 'view' ) {
1108
+        return $this->get_prop( 'city', $context );
997 1109
     }
998 1110
 
999 1111
     /**
1000
-	 * Alias of self::get_email().
1001
-	 *
1002
-	 * @since 1.0.19
1003
-	 * @param  string $context View or edit context.
1004
-	 * @return string
1005
-	 */
1006
-	public function get_email_address( $context = 'view' ) {
1007
-		return $this->get_email( $context );
1112
+     * Alias of self::get_city().
1113
+     *
1114
+     * @since 1.0.19
1115
+     * @param  string $context View or edit context.
1116
+     * @return string
1117
+     */
1118
+    public function get_user_city( $context = 'view' ) {
1119
+        return $this->get_city( $context );
1008 1120
     }
1009 1121
 
1010 1122
     /**
1011
-	 * Alias of self::get_email().
1012
-	 *
1013
-	 * @since 1.0.19
1014
-	 * @param  string $context View or edit context.
1015
-	 * @return string
1016
-	 */
1017
-	public function get_user_email( $context = 'view' ) {
1018
-		return $this->get_email( $context );
1123
+     * Alias of self::get_city().
1124
+     *
1125
+     * @since 1.0.19
1126
+     * @param  string $context View or edit context.
1127
+     * @return string
1128
+     */
1129
+    public function get_customer_city( $context = 'view' ) {
1130
+        return $this->get_city( $context );
1019 1131
     }
1020 1132
 
1021 1133
     /**
1022
-	 * Alias of self::get_email().
1023
-	 *
1024
-	 * @since 1.0.19
1025
-	 * @param  string $context View or edit context.
1026
-	 * @return string
1027
-	 */
1028
-	public function get_customer_email( $context = 'view' ) {
1029
-		return $this->get_email( $context );
1134
+     * Get the customer's zip.
1135
+     *
1136
+     * @since 1.0.19
1137
+     * @param  string $context View or edit context.
1138
+     * @return string
1139
+     */
1140
+    public function get_zip( $context = 'view' ) {
1141
+        return $this->get_prop( 'zip', $context );
1030 1142
     }
1031 1143
 
1032 1144
     /**
1033
-	 * Get the customer's country.
1034
-	 *
1035
-	 * @since 1.0.19
1036
-	 * @param  string $context View or edit context.
1037
-	 * @return string
1038
-	 */
1039
-	public function get_country( $context = 'view' ) {
1040
-		$country = $this->get_prop( 'country', $context );
1041
-		return empty( $country ) ? wpinv_get_default_country() : $country;
1145
+     * Alias of self::get_zip().
1146
+     *
1147
+     * @since 1.0.19
1148
+     * @param  string $context View or edit context.
1149
+     * @return string
1150
+     */
1151
+    public function get_user_zip( $context = 'view' ) {
1152
+        return $this->get_zip( $context );
1042 1153
     }
1043 1154
 
1044 1155
     /**
1045
-	 * Alias of self::get_country().
1046
-	 *
1047
-	 * @since 1.0.19
1048
-	 * @param  string $context View or edit context.
1049
-	 * @return string
1050
-	 */
1051
-	public function get_user_country( $context = 'view' ) {
1052
-		return $this->get_country( $context );
1156
+     * Alias of self::get_zip().
1157
+     *
1158
+     * @since 1.0.19
1159
+     * @param  string $context View or edit context.
1160
+     * @return string
1161
+     */
1162
+    public function get_customer_zip( $context = 'view' ) {
1163
+        return $this->get_zip( $context );
1053 1164
     }
1054 1165
 
1055 1166
     /**
1056
-	 * Alias of self::get_country().
1057
-	 *
1058
-	 * @since 1.0.19
1059
-	 * @param  string $context View or edit context.
1060
-	 * @return string
1061
-	 */
1062
-	public function get_customer_country( $context = 'view' ) {
1063
-		return $this->get_country( $context );
1167
+     * Get the customer's company.
1168
+     *
1169
+     * @since 1.0.19
1170
+     * @param  string $context View or edit context.
1171
+     * @return string
1172
+     */
1173
+    public function get_company( $context = 'view' ) {
1174
+        return $this->get_prop( 'company', $context );
1064 1175
     }
1065 1176
 
1066 1177
     /**
1067
-	 * Get the customer's state.
1068
-	 *
1069
-	 * @since 1.0.19
1070
-	 * @param  string $context View or edit context.
1071
-	 * @return string
1072
-	 */
1073
-	public function get_state( $context = 'view' ) {
1074
-		$state = $this->get_prop( 'state', $context );
1075
-		return empty( $state ) ? wpinv_get_default_state() : $state;
1178
+     * Alias of self::get_company().
1179
+     *
1180
+     * @since 1.0.19
1181
+     * @param  string $context View or edit context.
1182
+     * @return string
1183
+     */
1184
+    public function get_user_company( $context = 'view' ) {
1185
+        return $this->get_company( $context );
1076 1186
     }
1077 1187
 
1078 1188
     /**
1079
-	 * Alias of self::get_state().
1080
-	 *
1081
-	 * @since 1.0.19
1082
-	 * @param  string $context View or edit context.
1083
-	 * @return string
1084
-	 */
1085
-	public function get_user_state( $context = 'view' ) {
1086
-		return $this->get_state( $context );
1189
+     * Alias of self::get_company().
1190
+     *
1191
+     * @since 1.0.19
1192
+     * @param  string $context View or edit context.
1193
+     * @return string
1194
+     */
1195
+    public function get_customer_company( $context = 'view' ) {
1196
+        return $this->get_company( $context );
1087 1197
     }
1088 1198
 
1089 1199
     /**
1090
-	 * Alias of self::get_state().
1091
-	 *
1092
-	 * @since 1.0.19
1093
-	 * @param  string $context View or edit context.
1094
-	 * @return string
1095
-	 */
1096
-	public function get_customer_state( $context = 'view' ) {
1097
-		return $this->get_state( $context );
1200
+     * Get the customer's company id.
1201
+     *
1202
+     * @since 1.0.19
1203
+     * @param  string $context View or edit context.
1204
+     * @return string
1205
+     */
1206
+    public function get_company_id( $context = 'view' ) {
1207
+        return $this->get_prop( 'company_id', $context );
1098 1208
     }
1099 1209
 
1100 1210
     /**
1101
-	 * Get the customer's city.
1102
-	 *
1103
-	 * @since 1.0.19
1104
-	 * @param  string $context View or edit context.
1105
-	 * @return string
1106
-	 */
1107
-	public function get_city( $context = 'view' ) {
1108
-		return $this->get_prop( 'city', $context );
1211
+     * Get the customer's vat number.
1212
+     *
1213
+     * @since 1.0.19
1214
+     * @param  string $context View or edit context.
1215
+     * @return string
1216
+     */
1217
+    public function get_vat_number( $context = 'view' ) {
1218
+        return $this->get_prop( 'vat_number', $context );
1109 1219
     }
1110 1220
 
1111 1221
     /**
1112
-	 * Alias of self::get_city().
1113
-	 *
1114
-	 * @since 1.0.19
1115
-	 * @param  string $context View or edit context.
1116
-	 * @return string
1117
-	 */
1118
-	public function get_user_city( $context = 'view' ) {
1119
-		return $this->get_city( $context );
1222
+     * Alias of self::get_vat_number().
1223
+     *
1224
+     * @since 1.0.19
1225
+     * @param  string $context View or edit context.
1226
+     * @return string
1227
+     */
1228
+    public function get_user_vat_number( $context = 'view' ) {
1229
+        return $this->get_vat_number( $context );
1120 1230
     }
1121 1231
 
1122 1232
     /**
1123
-	 * Alias of self::get_city().
1124
-	 *
1125
-	 * @since 1.0.19
1126
-	 * @param  string $context View or edit context.
1127
-	 * @return string
1128
-	 */
1129
-	public function get_customer_city( $context = 'view' ) {
1130
-		return $this->get_city( $context );
1233
+     * Alias of self::get_vat_number().
1234
+     *
1235
+     * @since 1.0.19
1236
+     * @param  string $context View or edit context.
1237
+     * @return string
1238
+     */
1239
+    public function get_customer_vat_number( $context = 'view' ) {
1240
+        return $this->get_vat_number( $context );
1131 1241
     }
1132 1242
 
1133 1243
     /**
1134
-	 * Get the customer's zip.
1135
-	 *
1136
-	 * @since 1.0.19
1137
-	 * @param  string $context View or edit context.
1138
-	 * @return string
1139
-	 */
1140
-	public function get_zip( $context = 'view' ) {
1141
-		return $this->get_prop( 'zip', $context );
1244
+     * Get the customer's vat rate.
1245
+     *
1246
+     * @since 1.0.19
1247
+     * @param  string $context View or edit context.
1248
+     * @return string
1249
+     */
1250
+    public function get_vat_rate( $context = 'view' ) {
1251
+        return $this->get_prop( 'vat_rate', $context );
1142 1252
     }
1143 1253
 
1144 1254
     /**
1145
-	 * Alias of self::get_zip().
1146
-	 *
1147
-	 * @since 1.0.19
1148
-	 * @param  string $context View or edit context.
1149
-	 * @return string
1150
-	 */
1151
-	public function get_user_zip( $context = 'view' ) {
1152
-		return $this->get_zip( $context );
1255
+     * Alias of self::get_vat_rate().
1256
+     *
1257
+     * @since 1.0.19
1258
+     * @param  string $context View or edit context.
1259
+     * @return string
1260
+     */
1261
+    public function get_user_vat_rate( $context = 'view' ) {
1262
+        return $this->get_vat_rate( $context );
1153 1263
     }
1154 1264
 
1155 1265
     /**
1156
-	 * Alias of self::get_zip().
1157
-	 *
1158
-	 * @since 1.0.19
1159
-	 * @param  string $context View or edit context.
1160
-	 * @return string
1161
-	 */
1162
-	public function get_customer_zip( $context = 'view' ) {
1163
-		return $this->get_zip( $context );
1266
+     * Alias of self::get_vat_rate().
1267
+     *
1268
+     * @since 1.0.19
1269
+     * @param  string $context View or edit context.
1270
+     * @return string
1271
+     */
1272
+    public function get_customer_vat_rate( $context = 'view' ) {
1273
+        return $this->get_vat_rate( $context );
1164 1274
     }
1165 1275
 
1166 1276
     /**
1167
-	 * Get the customer's company.
1168
-	 *
1169
-	 * @since 1.0.19
1170
-	 * @param  string $context View or edit context.
1171
-	 * @return string
1172
-	 */
1173
-	public function get_company( $context = 'view' ) {
1174
-		return $this->get_prop( 'company', $context );
1277
+     * Get the customer's address.
1278
+     *
1279
+     * @since 1.0.19
1280
+     * @param  string $context View or edit context.
1281
+     * @return string
1282
+     */
1283
+    public function get_address( $context = 'view' ) {
1284
+        return $this->get_prop( 'address', $context );
1175 1285
     }
1176 1286
 
1177 1287
     /**
1178
-	 * Alias of self::get_company().
1179
-	 *
1180
-	 * @since 1.0.19
1181
-	 * @param  string $context View or edit context.
1182
-	 * @return string
1183
-	 */
1184
-	public function get_user_company( $context = 'view' ) {
1185
-		return $this->get_company( $context );
1288
+     * Alias of self::get_address().
1289
+     *
1290
+     * @since 1.0.19
1291
+     * @param  string $context View or edit context.
1292
+     * @return string
1293
+     */
1294
+    public function get_user_address( $context = 'view' ) {
1295
+        return $this->get_address( $context );
1186 1296
     }
1187 1297
 
1188 1298
     /**
1189
-	 * Alias of self::get_company().
1190
-	 *
1191
-	 * @since 1.0.19
1192
-	 * @param  string $context View or edit context.
1193
-	 * @return string
1194
-	 */
1195
-	public function get_customer_company( $context = 'view' ) {
1196
-		return $this->get_company( $context );
1299
+     * Alias of self::get_address().
1300
+     *
1301
+     * @since 1.0.19
1302
+     * @param  string $context View or edit context.
1303
+     * @return string
1304
+     */
1305
+    public function get_customer_address( $context = 'view' ) {
1306
+        return $this->get_address( $context );
1197 1307
     }
1198 1308
 
1199
-	/**
1200
-	 * Get the customer's company id.
1201
-	 *
1202
-	 * @since 1.0.19
1203
-	 * @param  string $context View or edit context.
1204
-	 * @return string
1205
-	 */
1206
-	public function get_company_id( $context = 'view' ) {
1207
-		return $this->get_prop( 'company_id', $context );
1309
+    /**
1310
+     * Get whether the customer has viewed the invoice or not.
1311
+     *
1312
+     * @since 1.0.19
1313
+     * @param  string $context View or edit context.
1314
+     * @return bool
1315
+     */
1316
+    public function get_is_viewed( $context = 'view' ) {
1317
+        return (bool) $this->get_prop( 'is_viewed', $context );
1208 1318
     }
1209 1319
 
1210 1320
     /**
1211
-	 * Get the customer's vat number.
1212
-	 *
1213
-	 * @since 1.0.19
1214
-	 * @param  string $context View or edit context.
1215
-	 * @return string
1216
-	 */
1217
-	public function get_vat_number( $context = 'view' ) {
1218
-		return $this->get_prop( 'vat_number', $context );
1321
+     * Get other recipients for invoice communications.
1322
+     *
1323
+     * @since 1.0.19
1324
+     * @param  string $context View or edit context.
1325
+     * @return bool
1326
+     */
1327
+    public function get_email_cc( $context = 'view' ) {
1328
+        return $this->get_prop( 'email_cc', $context );
1219 1329
     }
1220 1330
 
1221 1331
     /**
1222
-	 * Alias of self::get_vat_number().
1223
-	 *
1224
-	 * @since 1.0.19
1225
-	 * @param  string $context View or edit context.
1226
-	 * @return string
1227
-	 */
1228
-	public function get_user_vat_number( $context = 'view' ) {
1229
-		return $this->get_vat_number( $context );
1332
+     * Get invoice template.
1333
+     *
1334
+     * @since 1.0.19
1335
+     * @param  string $context View or edit context.
1336
+     * @return bool
1337
+     */
1338
+    public function get_template( $context = 'view' ) {
1339
+        return $this->get_prop( 'template', $context );
1230 1340
     }
1231 1341
 
1232 1342
     /**
1233
-	 * Alias of self::get_vat_number().
1234
-	 *
1235
-	 * @since 1.0.19
1236
-	 * @param  string $context View or edit context.
1237
-	 * @return string
1238
-	 */
1239
-	public function get_customer_vat_number( $context = 'view' ) {
1240
-		return $this->get_vat_number( $context );
1343
+     * Get invoice source.
1344
+     *
1345
+     * @since 1.0.19
1346
+     * @param  string $context View or edit context.
1347
+     * @return bool
1348
+     */
1349
+    public function get_created_via( $context = 'view' ) {
1350
+        return $this->get_prop( 'created_via', $context );
1241 1351
     }
1242 1352
 
1243
-    /**
1244
-	 * Get the customer's vat rate.
1245
-	 *
1246
-	 * @since 1.0.19
1247
-	 * @param  string $context View or edit context.
1248
-	 * @return string
1249
-	 */
1250
-	public function get_vat_rate( $context = 'view' ) {
1251
-		return $this->get_prop( 'vat_rate', $context );
1252
-    }
1253
-
1254
-    /**
1255
-	 * Alias of self::get_vat_rate().
1256
-	 *
1257
-	 * @since 1.0.19
1258
-	 * @param  string $context View or edit context.
1259
-	 * @return string
1260
-	 */
1261
-	public function get_user_vat_rate( $context = 'view' ) {
1262
-		return $this->get_vat_rate( $context );
1263
-    }
1264
-
1265
-    /**
1266
-	 * Alias of self::get_vat_rate().
1267
-	 *
1268
-	 * @since 1.0.19
1269
-	 * @param  string $context View or edit context.
1270
-	 * @return string
1271
-	 */
1272
-	public function get_customer_vat_rate( $context = 'view' ) {
1273
-		return $this->get_vat_rate( $context );
1274
-    }
1275
-
1276
-    /**
1277
-	 * Get the customer's address.
1278
-	 *
1279
-	 * @since 1.0.19
1280
-	 * @param  string $context View or edit context.
1281
-	 * @return string
1282
-	 */
1283
-	public function get_address( $context = 'view' ) {
1284
-		return $this->get_prop( 'address', $context );
1285
-    }
1286
-
1287
-    /**
1288
-	 * Alias of self::get_address().
1289
-	 *
1290
-	 * @since 1.0.19
1291
-	 * @param  string $context View or edit context.
1292
-	 * @return string
1293
-	 */
1294
-	public function get_user_address( $context = 'view' ) {
1295
-		return $this->get_address( $context );
1296
-    }
1297
-
1298
-    /**
1299
-	 * Alias of self::get_address().
1300
-	 *
1301
-	 * @since 1.0.19
1302
-	 * @param  string $context View or edit context.
1303
-	 * @return string
1304
-	 */
1305
-	public function get_customer_address( $context = 'view' ) {
1306
-		return $this->get_address( $context );
1307
-    }
1308
-
1309
-    /**
1310
-	 * Get whether the customer has viewed the invoice or not.
1311
-	 *
1312
-	 * @since 1.0.19
1313
-	 * @param  string $context View or edit context.
1314
-	 * @return bool
1315
-	 */
1316
-	public function get_is_viewed( $context = 'view' ) {
1317
-		return (bool) $this->get_prop( 'is_viewed', $context );
1318
-	}
1319
-
1320
-	/**
1321
-	 * Get other recipients for invoice communications.
1322
-	 *
1323
-	 * @since 1.0.19
1324
-	 * @param  string $context View or edit context.
1325
-	 * @return bool
1326
-	 */
1327
-	public function get_email_cc( $context = 'view' ) {
1328
-		return $this->get_prop( 'email_cc', $context );
1329
-	}
1330
-
1331
-	/**
1332
-	 * Get invoice template.
1333
-	 *
1334
-	 * @since 1.0.19
1335
-	 * @param  string $context View or edit context.
1336
-	 * @return bool
1337
-	 */
1338
-	public function get_template( $context = 'view' ) {
1339
-		return $this->get_prop( 'template', $context );
1340
-	}
1341
-
1342
-	/**
1343
-	 * Get invoice source.
1344
-	 *
1345
-	 * @since 1.0.19
1346
-	 * @param  string $context View or edit context.
1347
-	 * @return bool
1348
-	 */
1349
-	public function get_created_via( $context = 'view' ) {
1350
-		return $this->get_prop( 'created_via', $context );
1351
-	}
1352
-
1353
-	/**
1354
-	 * Get whether the customer has confirmed their address.
1355
-	 *
1356
-	 * @since 1.0.19
1357
-	 * @param  string $context View or edit context.
1358
-	 * @return bool
1359
-	 */
1360
-	public function get_address_confirmed( $context = 'view' ) {
1361
-		return (bool) $this->get_prop( 'address_confirmed', $context );
1362
-    }
1363
-
1364
-    /**
1365
-	 * Alias of self::get_address_confirmed().
1366
-	 *
1367
-	 * @since 1.0.19
1368
-	 * @param  string $context View or edit context.
1369
-	 * @return bool
1370
-	 */
1371
-	public function get_user_address_confirmed( $context = 'view' ) {
1372
-		return $this->get_address_confirmed( $context );
1373
-    }
1374
-
1375
-    /**
1376
-	 * Alias of self::get_address().
1377
-	 *
1378
-	 * @since 1.0.19
1379
-	 * @param  string $context View or edit context.
1380
-	 * @return bool
1381
-	 */
1382
-	public function get_customer_address_confirmed( $context = 'view' ) {
1383
-		return $this->get_address_confirmed( $context );
1384
-    }
1385
-
1386
-	/**
1387
-	 * Get the shipping address.
1388
-	 *
1389
-	 * @since 1.0.19
1390
-	 * @return array|false
1391
-	 */
1392
-	public function get_shipping_address() {
1393
-
1394
-		$shipping_address = get_post_meta( $this->get_id(), 'shipping_address', true );
1395
-		return is_array( $shipping_address ) ? $shipping_address : false;
1396
-    }
1397
-
1398
-	/**
1399
-	 * Check if the invoice has a shipping address.
1400
-	 */
1401
-	public function has_shipping_address() {
1402
-		return false !== $this->get_shipping_address();
1403
-    }
1404
-
1405
-	/**
1406
-	 * Get the shipping amount.
1407
-	 *
1408
-	 * @since 1.0.19
1409
-	 * @param  string $context View or edit context.
1410
-	 * @return float
1411
-	 */
1412
-	public function get_shipping( $context = 'view' ) {
1413
-
1414
-		if ( $context = 'view' ) {
1415
-			return floatval( $this->get_prop( 'shipping', $context ) );
1416
-		}
1417
-
1418
-		return $this->get_prop( 'shipping', $context );
1419
-    }
1420
-
1421
-	public function has_shipping() {
1422
-		return defined( 'GETPAID_SHIPPING_CALCULATOR_VERSION' ) && $this->get_prop( 'shipping', 'edit' );
1423
-    }
1424
-
1425
-    /**
1426
-	 * Get the invoice subtotal.
1427
-	 *
1428
-	 * @since 1.0.19
1429
-	 * @param  string $context View or edit context.
1430
-	 * @return float
1431
-	 */
1432
-	public function get_subtotal( $context = 'view' ) {
1353
+    /**
1354
+     * Get whether the customer has confirmed their address.
1355
+     *
1356
+     * @since 1.0.19
1357
+     * @param  string $context View or edit context.
1358
+     * @return bool
1359
+     */
1360
+    public function get_address_confirmed( $context = 'view' ) {
1361
+        return (bool) $this->get_prop( 'address_confirmed', $context );
1362
+    }
1363
+
1364
+    /**
1365
+     * Alias of self::get_address_confirmed().
1366
+     *
1367
+     * @since 1.0.19
1368
+     * @param  string $context View or edit context.
1369
+     * @return bool
1370
+     */
1371
+    public function get_user_address_confirmed( $context = 'view' ) {
1372
+        return $this->get_address_confirmed( $context );
1373
+    }
1374
+
1375
+    /**
1376
+     * Alias of self::get_address().
1377
+     *
1378
+     * @since 1.0.19
1379
+     * @param  string $context View or edit context.
1380
+     * @return bool
1381
+     */
1382
+    public function get_customer_address_confirmed( $context = 'view' ) {
1383
+        return $this->get_address_confirmed( $context );
1384
+    }
1385
+
1386
+    /**
1387
+     * Get the shipping address.
1388
+     *
1389
+     * @since 1.0.19
1390
+     * @return array|false
1391
+     */
1392
+    public function get_shipping_address() {
1393
+
1394
+        $shipping_address = get_post_meta( $this->get_id(), 'shipping_address', true );
1395
+        return is_array( $shipping_address ) ? $shipping_address : false;
1396
+    }
1397
+
1398
+    /**
1399
+     * Check if the invoice has a shipping address.
1400
+     */
1401
+    public function has_shipping_address() {
1402
+        return false !== $this->get_shipping_address();
1403
+    }
1404
+
1405
+    /**
1406
+     * Get the shipping amount.
1407
+     *
1408
+     * @since 1.0.19
1409
+     * @param  string $context View or edit context.
1410
+     * @return float
1411
+     */
1412
+    public function get_shipping( $context = 'view' ) {
1413
+
1414
+        if ( $context = 'view' ) {
1415
+            return floatval( $this->get_prop( 'shipping', $context ) );
1416
+        }
1417
+
1418
+        return $this->get_prop( 'shipping', $context );
1419
+    }
1420
+
1421
+    public function has_shipping() {
1422
+        return defined( 'GETPAID_SHIPPING_CALCULATOR_VERSION' ) && $this->get_prop( 'shipping', 'edit' );
1423
+    }
1424
+
1425
+    /**
1426
+     * Get the invoice subtotal.
1427
+     *
1428
+     * @since 1.0.19
1429
+     * @param  string $context View or edit context.
1430
+     * @return float
1431
+     */
1432
+    public function get_subtotal( $context = 'view' ) {
1433 1433
         $subtotal = (float) $this->get_prop( 'subtotal', $context );
1434 1434
 
1435 1435
         // Backwards compatibility.
@@ -1441,198 +1441,198 @@  discard block
 block discarded – undo
1441 1441
     }
1442 1442
 
1443 1443
     /**
1444
-	 * Get the invoice discount total.
1445
-	 *
1446
-	 * @since 1.0.19
1447
-	 * @param  string $context View or edit context.
1448
-	 * @return float
1449
-	 */
1450
-	public function get_total_discount( $context = 'view' ) {
1451
-		return wpinv_round_amount( wpinv_sanitize_amount( $this->get_prop( 'total_discount', $context ) ) );
1444
+     * Get the invoice discount total.
1445
+     *
1446
+     * @since 1.0.19
1447
+     * @param  string $context View or edit context.
1448
+     * @return float
1449
+     */
1450
+    public function get_total_discount( $context = 'view' ) {
1451
+        return wpinv_round_amount( wpinv_sanitize_amount( $this->get_prop( 'total_discount', $context ) ) );
1452 1452
     }
1453 1453
 
1454 1454
     /**
1455
-	 * Get the invoice tax total.
1456
-	 *
1457
-	 * @since 1.0.19
1458
-	 * @param  string $context View or edit context.
1459
-	 * @return float
1460
-	 */
1461
-	public function get_total_tax( $context = 'view' ) {
1462
-		return wpinv_round_amount( wpinv_sanitize_amount( $this->get_prop( 'total_tax', $context ) ) );
1463
-	}
1455
+     * Get the invoice tax total.
1456
+     *
1457
+     * @since 1.0.19
1458
+     * @param  string $context View or edit context.
1459
+     * @return float
1460
+     */
1461
+    public function get_total_tax( $context = 'view' ) {
1462
+        return wpinv_round_amount( wpinv_sanitize_amount( $this->get_prop( 'total_tax', $context ) ) );
1463
+    }
1464 1464
 
1465
-	/**
1466
-	 * @deprecated
1467
-	 */
1468
-	public function get_final_tax( $currency = false ) {
1469
-		$tax = $this->get_total_tax();
1465
+    /**
1466
+     * @deprecated
1467
+     */
1468
+    public function get_final_tax( $currency = false ) {
1469
+        $tax = $this->get_total_tax();
1470 1470
 
1471 1471
         if ( $currency ) {
1472
-			return wpinv_price( $tax, $this->get_currency() );
1472
+            return wpinv_price( $tax, $this->get_currency() );
1473 1473
         }
1474 1474
 
1475 1475
         return $tax;
1476 1476
     }
1477 1477
 
1478 1478
     /**
1479
-	 * Get the invoice fees total.
1480
-	 *
1481
-	 * @since 1.0.19
1482
-	 * @param  string $context View or edit context.
1483
-	 * @return float
1484
-	 */
1485
-	public function get_total_fees( $context = 'view' ) {
1486
-		return wpinv_round_amount( wpinv_sanitize_amount( $this->get_prop( 'total_fees', $context ) ) );
1479
+     * Get the invoice fees total.
1480
+     *
1481
+     * @since 1.0.19
1482
+     * @param  string $context View or edit context.
1483
+     * @return float
1484
+     */
1485
+    public function get_total_fees( $context = 'view' ) {
1486
+        return wpinv_round_amount( wpinv_sanitize_amount( $this->get_prop( 'total_fees', $context ) ) );
1487
+    }
1488
+
1489
+    /**
1490
+     * Alias for self::get_total_fees().
1491
+     *
1492
+     * @since 1.0.19
1493
+     * @param  string $context View or edit context.
1494
+     * @return float
1495
+     */
1496
+    public function get_fees_total( $context = 'view' ) {
1497
+        return $this->get_total_fees( $context );
1487 1498
     }
1488 1499
 
1489 1500
     /**
1490
-	 * Alias for self::get_total_fees().
1491
-	 *
1492
-	 * @since 1.0.19
1493
-	 * @param  string $context View or edit context.
1494
-	 * @return float
1495
-	 */
1496
-	public function get_fees_total( $context = 'view' ) {
1497
-		return $this->get_total_fees( $context );
1501
+     * Get the invoice total.
1502
+     *
1503
+     * @since 1.0.19
1504
+     * @return float
1505
+     */
1506
+    public function get_total( $context = 'view' ) {
1507
+        $total = $this->get_prop( 'total', $context );
1508
+
1509
+        if ( $this->has_shipping() && $context == 'view' ) {
1510
+            $total = $this->get_prop( 'total', $context ) + $this->get_shipping( $context );
1511
+        }
1512
+
1513
+        return wpinv_round_amount( wpinv_sanitize_amount( $total ) );
1498 1514
     }
1499 1515
 
1500 1516
     /**
1501
-	 * Get the invoice total.
1502
-	 *
1503
-	 * @since 1.0.19
1517
+     * Retrieves the non-recurring total of items.
1518
+     *
1519
+     * @since 2.3.0
1504 1520
      * @return float
1505
-	 */
1506
-	public function get_total( $context = 'view' ) {
1507
-		$total = $this->get_prop( 'total', $context );
1508
-
1509
-		if ( $this->has_shipping() && $context == 'view' ) {
1510
-			$total = $this->get_prop( 'total', $context ) + $this->get_shipping( $context );
1511
-		}
1512
-
1513
-		return wpinv_round_amount( wpinv_sanitize_amount( $total ) );
1514
-	}
1515
-
1516
-	/**
1517
-	 * Retrieves the non-recurring total of items.
1518
-	 *
1519
-	 * @since 2.3.0
1520
-	 * @return float
1521
-	 */
1522
-	public function get_non_recurring_total() {
1523
-
1524
-		$subtotal = 0;
1525
-		foreach ( $this->get_items() as $item ) {
1526
-			if ( ! $item->is_recurring() ) {
1527
-				$subtotal += $item->get_sub_total();
1528
-			}
1529
-		}
1530
-
1531
-		foreach ( $this->get_fees() as $fee ) {
1532
-			if ( empty( $fee['recurring_fee'] ) ) {
1533
-				$subtotal += wpinv_sanitize_amount( $fee['initial_fee'] );
1534
-			}
1535
-		}
1536
-
1537
-		$subtotal = wpinv_round_amount( wpinv_sanitize_amount( $subtotal ) );
1521
+     */
1522
+    public function get_non_recurring_total() {
1523
+
1524
+        $subtotal = 0;
1525
+        foreach ( $this->get_items() as $item ) {
1526
+            if ( ! $item->is_recurring() ) {
1527
+                $subtotal += $item->get_sub_total();
1528
+            }
1529
+        }
1530
+
1531
+        foreach ( $this->get_fees() as $fee ) {
1532
+            if ( empty( $fee['recurring_fee'] ) ) {
1533
+                $subtotal += wpinv_sanitize_amount( $fee['initial_fee'] );
1534
+            }
1535
+        }
1536
+
1537
+        $subtotal = wpinv_round_amount( wpinv_sanitize_amount( $subtotal ) );
1538 1538
         return apply_filters( 'wpinv_get_non_recurring_invoice_total', $subtotal, $this );
1539 1539
 
1540 1540
     }
1541 1541
 
1542
-	/**
1543
-	 * Get the invoice totals.
1544
-	 *
1545
-	 * @since 1.0.19
1542
+    /**
1543
+     * Get the invoice totals.
1544
+     *
1545
+     * @since 1.0.19
1546 1546
      * @return array
1547
-	 */
1548
-	public function get_totals() {
1549
-		return $this->totals;
1547
+     */
1548
+    public function get_totals() {
1549
+        return $this->totals;
1550 1550
     }
1551 1551
 
1552 1552
     /**
1553
-	 * Get the initial invoice total.
1554
-	 *
1555
-	 * @since 1.0.19
1553
+     * Get the initial invoice total.
1554
+     *
1555
+     * @since 1.0.19
1556 1556
      * @param  string $context View or edit context.
1557 1557
      * @return float
1558
-	 */
1558
+     */
1559 1559
     public function get_initial_total() {
1560 1560
 
1561
-		if ( empty( $this->totals ) ) {
1562
-			$this->recalculate_total();
1563
-		}
1561
+        if ( empty( $this->totals ) ) {
1562
+            $this->recalculate_total();
1563
+        }
1564 1564
 
1565
-		$tax      = $this->totals['tax']['initial'];
1566
-		$fee      = $this->totals['fee']['initial'];
1567
-		$discount = $this->totals['discount']['initial'];
1568
-		$subtotal = $this->totals['subtotal']['initial'];
1569
-		$total    = $tax + $fee - $discount + $subtotal;
1565
+        $tax      = $this->totals['tax']['initial'];
1566
+        $fee      = $this->totals['fee']['initial'];
1567
+        $discount = $this->totals['discount']['initial'];
1568
+        $subtotal = $this->totals['subtotal']['initial'];
1569
+        $total    = $tax + $fee - $discount + $subtotal;
1570 1570
 
1571
-		if ( 0 > $total ) {
1572
-			$total = 0;
1573
-		}
1571
+        if ( 0 > $total ) {
1572
+            $total = 0;
1573
+        }
1574 1574
 
1575
-		$total = wpinv_round_amount( wpinv_sanitize_amount( $total ) );
1575
+        $total = wpinv_round_amount( wpinv_sanitize_amount( $total ) );
1576 1576
         return apply_filters( 'wpinv_get_initial_invoice_total', $total, $this );
1577
-	}
1577
+    }
1578 1578
 
1579
-	/**
1580
-	 * Get the recurring invoice total.
1581
-	 *
1582
-	 * @since 1.0.19
1579
+    /**
1580
+     * Get the recurring invoice total.
1581
+     *
1582
+     * @since 1.0.19
1583 1583
      * @param  string $context View or edit context.
1584 1584
      * @return float
1585
-	 */
1585
+     */
1586 1586
     public function get_recurring_total() {
1587 1587
 
1588
-		if ( empty( $this->totals ) ) {
1589
-			$this->recalculate_total();
1590
-		}
1588
+        if ( empty( $this->totals ) ) {
1589
+            $this->recalculate_total();
1590
+        }
1591 1591
 
1592
-		$tax      = $this->totals['tax']['recurring'];
1593
-		$fee      = $this->totals['fee']['recurring'];
1594
-		$discount = $this->totals['discount']['recurring'];
1595
-		$subtotal = $this->totals['subtotal']['recurring'];
1596
-		$total    = $tax + $fee - $discount + $subtotal;
1592
+        $tax      = $this->totals['tax']['recurring'];
1593
+        $fee      = $this->totals['fee']['recurring'];
1594
+        $discount = $this->totals['discount']['recurring'];
1595
+        $subtotal = $this->totals['subtotal']['recurring'];
1596
+        $total    = $tax + $fee - $discount + $subtotal;
1597 1597
 
1598
-		if ( 0 > $total ) {
1599
-			$total = 0;
1600
-		}
1598
+        if ( 0 > $total ) {
1599
+            $total = 0;
1600
+        }
1601 1601
 
1602
-		$total = wpinv_round_amount( wpinv_sanitize_amount( $total ) );
1602
+        $total = wpinv_round_amount( wpinv_sanitize_amount( $total ) );
1603 1603
         return apply_filters( 'wpinv_get_recurring_invoice_total', $total, $this );
1604
-	}
1604
+    }
1605 1605
 
1606
-	/**
1607
-	 * Returns recurring payment details.
1608
-	 *
1609
-	 * @since 1.0.19
1606
+    /**
1607
+     * Returns recurring payment details.
1608
+     *
1609
+     * @since 1.0.19
1610 1610
      * @param  string $field Optionally provide a field to return.
1611
-	 * @param string $currency Whether to include the currency.
1611
+     * @param string $currency Whether to include the currency.
1612 1612
      * @return float|string
1613
-	 */
1613
+     */
1614 1614
     public function get_recurring_details( $field = '', $currency = false ) {
1615 1615
 
1616
-		// Maybe recalculate totals.
1617
-		if ( empty( $this->totals ) ) {
1618
-			$this->recalculate_total();
1619
-		}
1616
+        // Maybe recalculate totals.
1617
+        if ( empty( $this->totals ) ) {
1618
+            $this->recalculate_total();
1619
+        }
1620 1620
 
1621
-		// Prepare recurring totals.
1621
+        // Prepare recurring totals.
1622 1622
         $data = apply_filters(
1623
-			'wpinv_get_invoice_recurring_details',
1624
-			array(
1625
-				'cart_details' => $this->get_cart_details(),
1626
-				'subtotal'     => $this->totals['subtotal']['recurring'],
1627
-				'discount'     => $this->totals['discount']['recurring'],
1628
-				'tax'          => $this->totals['tax']['recurring'],
1629
-				'fee'          => $this->totals['fee']['recurring'],
1630
-				'total'        => $this->get_recurring_total(),
1631
-			),
1632
-			$this,
1633
-			$field,
1634
-			$currency
1635
-		);
1623
+            'wpinv_get_invoice_recurring_details',
1624
+            array(
1625
+                'cart_details' => $this->get_cart_details(),
1626
+                'subtotal'     => $this->totals['subtotal']['recurring'],
1627
+                'discount'     => $this->totals['discount']['recurring'],
1628
+                'tax'          => $this->totals['tax']['recurring'],
1629
+                'fee'          => $this->totals['fee']['recurring'],
1630
+                'total'        => $this->get_recurring_total(),
1631
+            ),
1632
+            $this,
1633
+            $field,
1634
+            $currency
1635
+        );
1636 1636
 
1637 1637
         if ( isset( $data[ $field ] ) ) {
1638 1638
             return ( $currency ? wpinv_price( $data[ $field ], $this->get_currency() ) : $data[ $field ] );
@@ -1642,166 +1642,166 @@  discard block
 block discarded – undo
1642 1642
     }
1643 1643
 
1644 1644
     /**
1645
-	 * Get the invoice fees.
1646
-	 *
1647
-	 * @since 1.0.19
1648
-	 * @param  string $context View or edit context.
1649
-	 * @return array
1650
-	 */
1651
-	public function get_fees( $context = 'view' ) {
1652
-		return wpinv_parse_list( $this->get_prop( 'fees', $context ) );
1645
+     * Get the invoice fees.
1646
+     *
1647
+     * @since 1.0.19
1648
+     * @param  string $context View or edit context.
1649
+     * @return array
1650
+     */
1651
+    public function get_fees( $context = 'view' ) {
1652
+        return wpinv_parse_list( $this->get_prop( 'fees', $context ) );
1653 1653
     }
1654 1654
 
1655 1655
     /**
1656
-	 * Get the invoice discounts.
1657
-	 *
1658
-	 * @since 1.0.19
1659
-	 * @param  string $context View or edit context.
1660
-	 * @return array
1661
-	 */
1662
-	public function get_discounts( $context = 'view' ) {
1663
-		return wpinv_parse_list( $this->get_prop( 'discounts', $context ) );
1656
+     * Get the invoice discounts.
1657
+     *
1658
+     * @since 1.0.19
1659
+     * @param  string $context View or edit context.
1660
+     * @return array
1661
+     */
1662
+    public function get_discounts( $context = 'view' ) {
1663
+        return wpinv_parse_list( $this->get_prop( 'discounts', $context ) );
1664 1664
     }
1665 1665
 
1666 1666
     /**
1667
-	 * Get the invoice taxes.
1668
-	 *
1669
-	 * @since 1.0.19
1670
-	 * @param  string $context View or edit context.
1671
-	 * @return array
1672
-	 */
1673
-	public function get_taxes( $context = 'view' ) {
1674
-		return wpinv_parse_list( $this->get_prop( 'taxes', $context ) );
1667
+     * Get the invoice taxes.
1668
+     *
1669
+     * @since 1.0.19
1670
+     * @param  string $context View or edit context.
1671
+     * @return array
1672
+     */
1673
+    public function get_taxes( $context = 'view' ) {
1674
+        return wpinv_parse_list( $this->get_prop( 'taxes', $context ) );
1675 1675
     }
1676 1676
 
1677 1677
     /**
1678
-	 * Get the invoice items.
1679
-	 *
1680
-	 * @since 1.0.19
1681
-	 * @param  string $context View or edit context.
1682
-	 * @return GetPaid_Form_Item[]
1683
-	 */
1684
-	public function get_items( $context = 'view' ) {
1678
+     * Get the invoice items.
1679
+     *
1680
+     * @since 1.0.19
1681
+     * @param  string $context View or edit context.
1682
+     * @return GetPaid_Form_Item[]
1683
+     */
1684
+    public function get_items( $context = 'view' ) {
1685 1685
         return $this->get_prop( 'items', $context );
1686
-	}
1686
+    }
1687 1687
 
1688
-	/**
1689
-	 * Get the invoice item ids.
1690
-	 *
1691
-	 * @since 1.0.19
1692
-	 * @return string
1693
-	 */
1694
-	public function get_item_ids() {
1695
-		return implode( ', ', wp_list_pluck( $this->get_cart_details(), 'item_id' ) );
1688
+    /**
1689
+     * Get the invoice item ids.
1690
+     *
1691
+     * @since 1.0.19
1692
+     * @return string
1693
+     */
1694
+    public function get_item_ids() {
1695
+        return implode( ', ', wp_list_pluck( $this->get_cart_details(), 'item_id' ) );
1696 1696
     }
1697 1697
 
1698 1698
     /**
1699
-	 * Get the invoice's payment form.
1700
-	 *
1701
-	 * @since 1.0.19
1702
-	 * @param  string $context View or edit context.
1703
-	 * @return int
1704
-	 */
1705
-	public function get_payment_form( $context = 'view' ) {
1706
-		return intval( $this->get_prop( 'payment_form', $context ) );
1699
+     * Get the invoice's payment form.
1700
+     *
1701
+     * @since 1.0.19
1702
+     * @param  string $context View or edit context.
1703
+     * @return int
1704
+     */
1705
+    public function get_payment_form( $context = 'view' ) {
1706
+        return intval( $this->get_prop( 'payment_form', $context ) );
1707 1707
     }
1708 1708
 
1709 1709
     /**
1710
-	 * Get the invoice's submission id.
1711
-	 *
1712
-	 * @since 1.0.19
1713
-	 * @param  string $context View or edit context.
1714
-	 * @return string
1715
-	 */
1716
-	public function get_submission_id( $context = 'view' ) {
1717
-		return $this->get_prop( 'submission_id', $context );
1710
+     * Get the invoice's submission id.
1711
+     *
1712
+     * @since 1.0.19
1713
+     * @param  string $context View or edit context.
1714
+     * @return string
1715
+     */
1716
+    public function get_submission_id( $context = 'view' ) {
1717
+        return $this->get_prop( 'submission_id', $context );
1718 1718
     }
1719 1719
 
1720 1720
     /**
1721
-	 * Get the invoice's discount code.
1722
-	 *
1723
-	 * @since 1.0.19
1724
-	 * @param  string $context View or edit context.
1725
-	 * @return string
1726
-	 */
1727
-	public function get_discount_code( $context = 'view' ) {
1728
-		return $this->get_prop( 'discount_code', $context );
1721
+     * Get the invoice's discount code.
1722
+     *
1723
+     * @since 1.0.19
1724
+     * @param  string $context View or edit context.
1725
+     * @return string
1726
+     */
1727
+    public function get_discount_code( $context = 'view' ) {
1728
+        return $this->get_prop( 'discount_code', $context );
1729 1729
     }
1730 1730
 
1731 1731
     /**
1732
-	 * Get the invoice's gateway.
1733
-	 *
1734
-	 * @since 1.0.19
1735
-	 * @param  string $context View or edit context.
1736
-	 * @return string
1737
-	 */
1738
-	public function get_gateway( $context = 'view' ) {
1739
-		return $this->get_prop( 'gateway', $context );
1732
+     * Get the invoice's gateway.
1733
+     *
1734
+     * @since 1.0.19
1735
+     * @param  string $context View or edit context.
1736
+     * @return string
1737
+     */
1738
+    public function get_gateway( $context = 'view' ) {
1739
+        return $this->get_prop( 'gateway', $context );
1740 1740
     }
1741 1741
 
1742 1742
     /**
1743
-	 * Get the invoice's gateway display title.
1744
-	 *
1745
-	 * @since 1.0.19
1746
-	 * @return string
1747
-	 */
1743
+     * Get the invoice's gateway display title.
1744
+     *
1745
+     * @since 1.0.19
1746
+     * @return string
1747
+     */
1748 1748
     public function get_gateway_title() {
1749 1749
         $title = wpinv_get_gateway_checkout_label( $this->get_gateway() );
1750 1750
         return apply_filters( 'wpinv_gateway_title', $title, $this->get_id(), $this );
1751 1751
     }
1752 1752
 
1753 1753
     /**
1754
-	 * Get the invoice's transaction id.
1755
-	 *
1756
-	 * @since 1.0.19
1757
-	 * @param  string $context View or edit context.
1758
-	 * @return string
1759
-	 */
1760
-	public function get_transaction_id( $context = 'view' ) {
1761
-		return $this->get_prop( 'transaction_id', $context );
1754
+     * Get the invoice's transaction id.
1755
+     *
1756
+     * @since 1.0.19
1757
+     * @param  string $context View or edit context.
1758
+     * @return string
1759
+     */
1760
+    public function get_transaction_id( $context = 'view' ) {
1761
+        return $this->get_prop( 'transaction_id', $context );
1762 1762
     }
1763 1763
 
1764 1764
     /**
1765
-	 * Get the invoice's currency.
1766
-	 *
1767
-	 * @since 1.0.19
1768
-	 * @param  string $context View or edit context.
1769
-	 * @return string
1770
-	 */
1771
-	public function get_currency( $context = 'view' ) {
1765
+     * Get the invoice's currency.
1766
+     *
1767
+     * @since 1.0.19
1768
+     * @param  string $context View or edit context.
1769
+     * @return string
1770
+     */
1771
+    public function get_currency( $context = 'view' ) {
1772 1772
         $currency = $this->get_prop( 'currency', $context );
1773 1773
         return empty( $currency ) ? wpinv_get_currency() : $currency;
1774 1774
     }
1775 1775
 
1776 1776
     /**
1777
-	 * Checks if we are charging taxes for this invoice.
1778
-	 *
1779
-	 * @since 1.0.19
1780
-	 * @param  string $context View or edit context.
1781
-	 * @return bool
1782
-	 */
1783
-	public function get_disable_taxes( $context = 'view' ) {
1777
+     * Checks if we are charging taxes for this invoice.
1778
+     *
1779
+     * @since 1.0.19
1780
+     * @param  string $context View or edit context.
1781
+     * @return bool
1782
+     */
1783
+    public function get_disable_taxes( $context = 'view' ) {
1784 1784
         return (bool) $this->get_prop( 'disable_taxes', $context );
1785 1785
     }
1786 1786
 
1787 1787
     /**
1788
-	 * Retrieves the subscription id for an invoice.
1789
-	 *
1790
-	 * @since 1.0.19
1791
-	 * @param  string $context View or edit context.
1792
-	 * @return int
1793
-	 */
1788
+     * Retrieves the subscription id for an invoice.
1789
+     *
1790
+     * @since 1.0.19
1791
+     * @param  string $context View or edit context.
1792
+     * @return int
1793
+     */
1794 1794
     public function get_subscription_id( $context = 'view' ) {
1795
-		return $this->is_renewal() ? $this->get_parent()->get_subscription_id( $context ) : $this->get_prop( 'subscription_id', $context );
1796
-	}
1797
-
1798
-	/**
1799
-	 * Retrieves the remote subscription id for an invoice.
1800
-	 *
1801
-	 * @since 1.0.19
1802
-	 * @param  string $context View or edit context.
1803
-	 * @return int
1804
-	 */
1795
+        return $this->is_renewal() ? $this->get_parent()->get_subscription_id( $context ) : $this->get_prop( 'subscription_id', $context );
1796
+    }
1797
+
1798
+    /**
1799
+     * Retrieves the remote subscription id for an invoice.
1800
+     *
1801
+     * @since 1.0.19
1802
+     * @param  string $context View or edit context.
1803
+     * @return int
1804
+     */
1805 1805
     public function get_remote_subscription_id( $context = 'view' ) {
1806 1806
         $subscription_id = $this->get_prop( 'remote_subscription_id', $context );
1807 1807
 
@@ -1813,24 +1813,24 @@  discard block
 block discarded – undo
1813 1813
         return $subscription_id;
1814 1814
     }
1815 1815
 
1816
-	/**
1817
-	 * Get the invoice's _anonymize status.
1818
-	 *
1819
-	 * @since 2.8.22
1820
-	 * @param  string $context View or edit context.
1821
-	 * @return string
1822
-	 */
1823
-	public function get_is_anonymized( $context = 'view' ) {
1824
-		return (bool) $this->get_prop( 'is_anonymized', $context );
1816
+    /**
1817
+     * Get the invoice's _anonymize status.
1818
+     *
1819
+     * @since 2.8.22
1820
+     * @param  string $context View or edit context.
1821
+     * @return string
1822
+     */
1823
+    public function get_is_anonymized( $context = 'view' ) {
1824
+        return (bool) $this->get_prop( 'is_anonymized', $context );
1825 1825
     }
1826 1826
 
1827 1827
     /**
1828
-	 * Retrieves the payment meta for an invoice.
1829
-	 *
1830
-	 * @since 1.0.19
1831
-	 * @param  string $context View or edit context.
1832
-	 * @return array
1833
-	 */
1828
+     * Retrieves the payment meta for an invoice.
1829
+     *
1830
+     * @since 1.0.19
1831
+     * @param  string $context View or edit context.
1832
+     * @return array
1833
+     */
1834 1834
     public function get_payment_meta( $context = 'view' ) {
1835 1835
 
1836 1836
         return array(
@@ -1850,31 +1850,31 @@  discard block
 block discarded – undo
1850 1850
     }
1851 1851
 
1852 1852
     /**
1853
-	 * Retrieves the cart details for an invoice.
1854
-	 *
1855
-	 * @since 1.0.19
1856
-	 * @return array
1857
-	 */
1853
+     * Retrieves the cart details for an invoice.
1854
+     *
1855
+     * @since 1.0.19
1856
+     * @return array
1857
+     */
1858 1858
     public function get_cart_details() {
1859 1859
         $items        = $this->get_items();
1860 1860
         $cart_details = array();
1861 1861
 
1862 1862
         foreach ( $items as $item ) {
1863
-			$item->invoice_id = $this->get_id();
1863
+            $item->invoice_id = $this->get_id();
1864 1864
             $cart_details[]   = $item->prepare_data_for_saving();
1865 1865
         }
1866 1866
 
1867 1867
         return $cart_details;
1868
-	}
1868
+    }
1869 1869
 
1870
-	/**
1871
-	 * Retrieves the recurring item.
1872
-	 *
1873
-	 * @return null|GetPaid_Form_Item|int
1874
-	 */
1875
-	public function get_recurring( $object = false ) {
1870
+    /**
1871
+     * Retrieves the recurring item.
1872
+     *
1873
+     * @return null|GetPaid_Form_Item|int
1874
+     */
1875
+    public function get_recurring( $object = false ) {
1876 1876
 
1877
-		// Are we returning an object?
1877
+        // Are we returning an object?
1878 1878
         if ( $object ) {
1879 1879
             return $this->get_item( $this->recurring_item );
1880 1880
         }
@@ -1882,130 +1882,130 @@  discard block
 block discarded – undo
1882 1882
         return $this->recurring_item;
1883 1883
     }
1884 1884
 
1885
-	/**
1886
-	 * Retrieves the subscription name.
1887
-	 *
1888
-	 * @since 1.0.19
1889
-	 * @return string
1890
-	 */
1891
-	public function get_subscription_name() {
1885
+    /**
1886
+     * Retrieves the subscription name.
1887
+     *
1888
+     * @since 1.0.19
1889
+     * @return string
1890
+     */
1891
+    public function get_subscription_name() {
1892 1892
 
1893
-		// Retrieve the recurring name
1893
+        // Retrieve the recurring name
1894 1894
         $item = $this->get_recurring( true );
1895 1895
 
1896
-		// Abort if it does not exist.
1896
+        // Abort if it does not exist.
1897 1897
         if ( empty( $item ) ) {
1898 1898
             return '';
1899 1899
         }
1900 1900
 
1901
-		// Return the item name.
1901
+        // Return the item name.
1902 1902
         return apply_filters( 'wpinv_invoice_get_subscription_name', $item->get_name(), $this );
1903
-	}
1904
-
1905
-	/**
1906
-	 * Retrieves the view url.
1907
-	 *
1908
-	 * @since 1.0.19
1909
-	 * @return string
1910
-	 */
1911
-	public function get_view_url() {
1903
+    }
1904
+
1905
+    /**
1906
+     * Retrieves the view url.
1907
+     *
1908
+     * @since 1.0.19
1909
+     * @return string
1910
+     */
1911
+    public function get_view_url() {
1912 1912
         $invoice_url = get_permalink( $this->get_id() );
1913
-		$invoice_url = add_query_arg( 'invoice_key', $this->get_key(), $invoice_url );
1913
+        $invoice_url = add_query_arg( 'invoice_key', $this->get_key(), $invoice_url );
1914 1914
         return apply_filters( 'wpinv_get_view_url', $invoice_url, $this );
1915
-	}
1915
+    }
1916 1916
 
1917
-	/**
1918
-	 * Retrieves the payment url.
1919
-	 *
1920
-	 * @since 1.0.19
1921
-	 * @return string
1922
-	 */
1923
-	public function get_checkout_payment_url( $deprecated = false, $secret = false ) {
1917
+    /**
1918
+     * Retrieves the payment url.
1919
+     *
1920
+     * @since 1.0.19
1921
+     * @return string
1922
+     */
1923
+    public function get_checkout_payment_url( $deprecated = false, $secret = false ) {
1924 1924
 
1925
-		// Retrieve the checkout url.
1925
+        // Retrieve the checkout url.
1926 1926
         $pay_url = wpinv_get_checkout_uri();
1927 1927
 
1928
-		// Maybe force ssl.
1928
+        // Maybe force ssl.
1929 1929
         if ( is_ssl() ) {
1930 1930
             $pay_url = str_replace( 'http:', 'https:', $pay_url );
1931 1931
         }
1932 1932
 
1933
-		// Add the invoice key.
1934
-		$pay_url = add_query_arg( 'invoice_key', $this->get_key(), $pay_url );
1933
+        // Add the invoice key.
1934
+        $pay_url = add_query_arg( 'invoice_key', $this->get_key(), $pay_url );
1935 1935
 
1936
-		// (Maybe?) add a secret
1936
+        // (Maybe?) add a secret
1937 1937
         if ( $secret ) {
1938 1938
             $pay_url = add_query_arg( array( '_wpipay' => md5( $this->get_user_id() . '::' . $this->get_email() . '::' . $this->get_key() ) ), $pay_url );
1939 1939
         }
1940 1940
 
1941 1941
         return apply_filters( 'wpinv_get_checkout_payment_url', $pay_url, $this, $deprecated, $secret );
1942
-	}
1942
+    }
1943 1943
 
1944
-	/**
1945
-	 * Retrieves the receipt url.
1946
-	 *
1947
-	 * @since 1.0.19
1948
-	 * @return string
1949
-	 */
1950
-	public function get_receipt_url() {
1944
+    /**
1945
+     * Retrieves the receipt url.
1946
+     *
1947
+     * @since 1.0.19
1948
+     * @return string
1949
+     */
1950
+    public function get_receipt_url() {
1951 1951
 
1952
-		// Retrieve the checkout url.
1952
+        // Retrieve the checkout url.
1953 1953
         $receipt_url = wpinv_get_success_page_uri();
1954 1954
 
1955
-		// Maybe force ssl.
1955
+        // Maybe force ssl.
1956 1956
         if ( is_ssl() ) {
1957 1957
             $receipt_url = str_replace( 'http:', 'https:', $receipt_url );
1958 1958
         }
1959 1959
 
1960
-		// Add the invoice key.
1961
-		$receipt_url = add_query_arg( 'invoice_key', $this->get_key(), $receipt_url );
1960
+        // Add the invoice key.
1961
+        $receipt_url = add_query_arg( 'invoice_key', $this->get_key(), $receipt_url );
1962 1962
 
1963 1963
         return apply_filters( 'getpaid_get_invoice_receipt_url', $receipt_url, $this );
1964
-	}
1965
-
1966
-	/**
1967
-	 * Retrieves the remote transaction url.
1968
-	 *
1969
-	 * @since 1.6.0
1970
-	 * @return string
1971
-	 */
1972
-	public function get_transaction_url() {
1973
-		return apply_filters( 'getpaid_gateway_' . $this->get_gateway() . '_transaction_url', '', $this );
1974
-	}
1975
-
1976
-	/**
1977
-	 * Retrieves the default status.
1978
-	 *
1979
-	 * @since 1.0.19
1980
-	 * @return string
1981
-	 */
1982
-	public function get_default_status() {
1983
-
1984
-		$type   = $this->get_type();
1985
-		$status = "wpi-$type-pending";
1986
-		return str_replace( '-invoice', '', $status );
1987
-
1988
-	}
1989
-
1990
-    /**
1991
-	 * Magic method for accessing invoice properties.
1992
-	 *
1993
-	 * @since 1.0.15
1994
-	 * @access public
1995
-	 *
1996
-	 * @param string $key Discount data to retrieve
1997
-	 * @param  string $context View or edit context.
1998
-	 * @return mixed Value of the given invoice property (if set).
1999
-	 */
2000
-	public function get( $key, $context = 'view' ) {
2001
-		$method = "get_$key";
2002
-
2003
-		if ( is_callable( array( $this, $method ) ) ) {
2004
-			return $this->$method( $context );
2005
-		}
1964
+    }
1965
+
1966
+    /**
1967
+     * Retrieves the remote transaction url.
1968
+     *
1969
+     * @since 1.6.0
1970
+     * @return string
1971
+     */
1972
+    public function get_transaction_url() {
1973
+        return apply_filters( 'getpaid_gateway_' . $this->get_gateway() . '_transaction_url', '', $this );
1974
+    }
1975
+
1976
+    /**
1977
+     * Retrieves the default status.
1978
+     *
1979
+     * @since 1.0.19
1980
+     * @return string
1981
+     */
1982
+    public function get_default_status() {
1983
+
1984
+        $type   = $this->get_type();
1985
+        $status = "wpi-$type-pending";
1986
+        return str_replace( '-invoice', '', $status );
1987
+
1988
+    }
1989
+
1990
+    /**
1991
+     * Magic method for accessing invoice properties.
1992
+     *
1993
+     * @since 1.0.15
1994
+     * @access public
1995
+     *
1996
+     * @param string $key Discount data to retrieve
1997
+     * @param  string $context View or edit context.
1998
+     * @return mixed Value of the given invoice property (if set).
1999
+     */
2000
+    public function get( $key, $context = 'view' ) {
2001
+        $method = "get_$key";
2002
+
2003
+        if ( is_callable( array( $this, $method ) ) ) {
2004
+            return $this->$method( $context );
2005
+        }
2006 2006
 
2007 2007
         return $this->get_prop( $key, $context );
2008
-	}
2008
+    }
2009 2009
 
2010 2010
     /*
2011 2011
 	|--------------------------------------------------------------------------
@@ -2018,129 +2018,129 @@  discard block
 block discarded – undo
2018 2018
     */
2019 2019
 
2020 2020
     /**
2021
-	 * Magic method for setting invoice properties.
2022
-	 *
2023
-	 * @since 1.0.19
2024
-	 * @access public
2025
-	 *
2026
-	 * @param string $key Discount data to retrieve
2027
-	 * @param  mixed $value new value.
2028
-	 * @return mixed Value of the given invoice property (if set).
2029
-	 */
2030
-	public function set( $key, $value ) {
2021
+     * Magic method for setting invoice properties.
2022
+     *
2023
+     * @since 1.0.19
2024
+     * @access public
2025
+     *
2026
+     * @param string $key Discount data to retrieve
2027
+     * @param  mixed $value new value.
2028
+     * @return mixed Value of the given invoice property (if set).
2029
+     */
2030
+    public function set( $key, $value ) {
2031 2031
 
2032 2032
         $setter = "set_$key";
2033 2033
         if ( is_callable( array( $this, $setter ) ) ) {
2034 2034
             $this->{$setter}( $value );
2035 2035
         }
2036 2036
 
2037
-	}
2038
-
2039
-	/**
2040
-	 * Sets item status.
2041
-	 *
2042
-	 * @since 1.0.19
2043
-	 * @param string $new_status    New status.
2044
-	 * @param string $note          Optional note to add.
2045
-	 * @param bool   $manual_update Is this a manual status change?.
2046
-	 * @return array details of change.
2047
-	 */
2048
-	public function set_status( $new_status, $note = '', $manual_update = false ) {
2049
-		$old_status = $this->get_status();
2050
-
2051
-		$statuses = $this->get_all_statuses();
2052
-
2053
-		if ( isset( $statuses['draft'] ) ) {
2054
-			unset( $statuses['draft'] );
2055
-		}
2056
-
2057
-		$this->set_prop( 'status', $new_status );
2058
-
2059
-		// If setting the status, ensure it's set to a valid status.
2060
-		if ( true === $this->object_read ) {
2061
-
2062
-			// Only allow valid new status.
2063
-			if ( ! array_key_exists( $new_status, $statuses ) ) {
2064
-				$new_status = $this->get_default_status();
2065
-			}
2066
-
2067
-			// If the old status is set but unknown (e.g. draft) assume its pending for action usage.
2068
-			if ( $old_status && ! array_key_exists( $new_status, $statuses ) ) {
2069
-				$old_status = $this->get_default_status();
2070
-			}
2071
-
2072
-			// Paid - Renewal (i.e when duplicating a parent invoice )
2073
-			if ( $new_status == 'wpi-pending' && $old_status == 'publish' && ! $this->get_id() ) {
2074
-				$old_status = 'wpi-pending';
2075
-			}
2076
-
2077
-			if ( $old_status !== $new_status ) {
2078
-				$this->status_transition = array(
2079
-					'from'   => ! empty( $this->status_transition['from'] ) ? $this->status_transition['from'] : $old_status,
2080
-					'to'     => $new_status,
2081
-					'note'   => $note,
2082
-					'manual' => (bool) $manual_update,
2083
-				);
2084
-
2085
-				if ( $manual_update ) {
2086
-					do_action( 'getpaid_' . $this->object_type . '_edit_status', $this->get_id(), $new_status );
2087
-				}
2088
-
2089
-				$this->maybe_set_date_paid();
2090
-
2091
-			}
2092
-		}
2093
-
2094
-		return array(
2095
-			'from' => $old_status,
2096
-			'to'   => $new_status,
2097
-		);
2098
-	}
2099
-
2100
-	/**
2101
-	 * Maybe set date paid.
2102
-	 *
2103
-	 * Sets the date paid variable when transitioning to the payment complete
2104
-	 * order status.
2105
-	 *
2106
-	 * @since 1.0.19
2107
-	 */
2108
-	public function maybe_set_date_paid() {
2109
-
2110
-		if ( ! $this->get_date_completed( 'edit' ) && $this->is_paid() ) {
2111
-			$this->set_date_completed( current_time( 'mysql' ) );
2112
-		}
2113
-	}
2114
-
2115
-    /**
2116
-	 * Set parent invoice ID.
2117
-	 *
2118
-	 * @since 1.0.19
2119
-	 */
2120
-	public function set_parent_id( $value ) {
2121
-		if ( $value && ( $value === $this->get_id() ) ) {
2122
-			return;
2123
-		}
2124
-		$this->set_prop( 'parent_id', absint( $value ) );
2125
-    }
2126
-
2127
-    /**
2128
-	 * Set plugin version when the invoice was created.
2129
-	 *
2130
-	 * @since 1.0.19
2131
-	 */
2132
-	public function set_version( $value ) {
2133
-		$this->set_prop( 'version', $value );
2134
-    }
2135
-
2136
-    /**
2137
-	 * Set date when the invoice was created.
2138
-	 *
2139
-	 * @since 1.0.19
2140
-	 * @param string $value Value to set.
2037
+    }
2038
+
2039
+    /**
2040
+     * Sets item status.
2041
+     *
2042
+     * @since 1.0.19
2043
+     * @param string $new_status    New status.
2044
+     * @param string $note          Optional note to add.
2045
+     * @param bool   $manual_update Is this a manual status change?.
2046
+     * @return array details of change.
2047
+     */
2048
+    public function set_status( $new_status, $note = '', $manual_update = false ) {
2049
+        $old_status = $this->get_status();
2050
+
2051
+        $statuses = $this->get_all_statuses();
2052
+
2053
+        if ( isset( $statuses['draft'] ) ) {
2054
+            unset( $statuses['draft'] );
2055
+        }
2056
+
2057
+        $this->set_prop( 'status', $new_status );
2058
+
2059
+        // If setting the status, ensure it's set to a valid status.
2060
+        if ( true === $this->object_read ) {
2061
+
2062
+            // Only allow valid new status.
2063
+            if ( ! array_key_exists( $new_status, $statuses ) ) {
2064
+                $new_status = $this->get_default_status();
2065
+            }
2066
+
2067
+            // If the old status is set but unknown (e.g. draft) assume its pending for action usage.
2068
+            if ( $old_status && ! array_key_exists( $new_status, $statuses ) ) {
2069
+                $old_status = $this->get_default_status();
2070
+            }
2071
+
2072
+            // Paid - Renewal (i.e when duplicating a parent invoice )
2073
+            if ( $new_status == 'wpi-pending' && $old_status == 'publish' && ! $this->get_id() ) {
2074
+                $old_status = 'wpi-pending';
2075
+            }
2076
+
2077
+            if ( $old_status !== $new_status ) {
2078
+                $this->status_transition = array(
2079
+                    'from'   => ! empty( $this->status_transition['from'] ) ? $this->status_transition['from'] : $old_status,
2080
+                    'to'     => $new_status,
2081
+                    'note'   => $note,
2082
+                    'manual' => (bool) $manual_update,
2083
+                );
2084
+
2085
+                if ( $manual_update ) {
2086
+                    do_action( 'getpaid_' . $this->object_type . '_edit_status', $this->get_id(), $new_status );
2087
+                }
2088
+
2089
+                $this->maybe_set_date_paid();
2090
+
2091
+            }
2092
+        }
2093
+
2094
+        return array(
2095
+            'from' => $old_status,
2096
+            'to'   => $new_status,
2097
+        );
2098
+    }
2099
+
2100
+    /**
2101
+     * Maybe set date paid.
2102
+     *
2103
+     * Sets the date paid variable when transitioning to the payment complete
2104
+     * order status.
2105
+     *
2106
+     * @since 1.0.19
2107
+     */
2108
+    public function maybe_set_date_paid() {
2109
+
2110
+        if ( ! $this->get_date_completed( 'edit' ) && $this->is_paid() ) {
2111
+            $this->set_date_completed( current_time( 'mysql' ) );
2112
+        }
2113
+    }
2114
+
2115
+    /**
2116
+     * Set parent invoice ID.
2117
+     *
2118
+     * @since 1.0.19
2119
+     */
2120
+    public function set_parent_id( $value ) {
2121
+        if ( $value && ( $value === $this->get_id() ) ) {
2122
+            return;
2123
+        }
2124
+        $this->set_prop( 'parent_id', absint( $value ) );
2125
+    }
2126
+
2127
+    /**
2128
+     * Set plugin version when the invoice was created.
2129
+     *
2130
+     * @since 1.0.19
2131
+     */
2132
+    public function set_version( $value ) {
2133
+        $this->set_prop( 'version', $value );
2134
+    }
2135
+
2136
+    /**
2137
+     * Set date when the invoice was created.
2138
+     *
2139
+     * @since 1.0.19
2140
+     * @param string $value Value to set.
2141 2141
      * @return bool Whether or not the date was set.
2142
-	 */
2143
-	public function set_date_created( $value ) {
2142
+     */
2143
+    public function set_date_created( $value ) {
2144 2144
         $date = strtotime( $value );
2145 2145
 
2146 2146
         if ( $date && $value !== '0000-00-00 00:00:00' ) {
@@ -2148,19 +2148,19 @@  discard block
 block discarded – undo
2148 2148
             return true;
2149 2149
         }
2150 2150
 
2151
-		$this->set_prop( 'date_created', '' );
2152
-		return false;
2151
+        $this->set_prop( 'date_created', '' );
2152
+        return false;
2153 2153
 
2154 2154
     }
2155 2155
 
2156 2156
     /**
2157
-	 * Set date invoice due date.
2158
-	 *
2159
-	 * @since 1.0.19
2160
-	 * @param string $value Value to set.
2157
+     * Set date invoice due date.
2158
+     *
2159
+     * @since 1.0.19
2160
+     * @param string $value Value to set.
2161 2161
      * @return bool Whether or not the date was set.
2162
-	 */
2163
-	public function set_due_date( $value ) {
2162
+     */
2163
+    public function set_due_date( $value ) {
2164 2164
         $date = strtotime( $value );
2165 2165
 
2166 2166
         if ( $date && $value !== '0000-00-00 00:00:00' ) {
@@ -2168,29 +2168,29 @@  discard block
 block discarded – undo
2168 2168
             return true;
2169 2169
         }
2170 2170
 
2171
-		$this->set_prop( 'due_date', '' );
2171
+        $this->set_prop( 'due_date', '' );
2172 2172
         return false;
2173 2173
 
2174 2174
     }
2175 2175
 
2176 2176
     /**
2177
-	 * Alias of self::set_due_date().
2178
-	 *
2179
-	 * @since 1.0.19
2180
-	 * @param  string $value New name.
2181
-	 */
2182
-	public function set_date_due( $value ) {
2183
-		$this->set_due_date( $value );
2177
+     * Alias of self::set_due_date().
2178
+     *
2179
+     * @since 1.0.19
2180
+     * @param  string $value New name.
2181
+     */
2182
+    public function set_date_due( $value ) {
2183
+        $this->set_due_date( $value );
2184 2184
     }
2185 2185
 
2186 2186
     /**
2187
-	 * Set date invoice was completed.
2188
-	 *
2189
-	 * @since 1.0.19
2190
-	 * @param string $value Value to set.
2187
+     * Set date invoice was completed.
2188
+     *
2189
+     * @since 1.0.19
2190
+     * @param string $value Value to set.
2191 2191
      * @return bool Whether or not the date was set.
2192
-	 */
2193
-	public function set_completed_date( $value ) {
2192
+     */
2193
+    public function set_completed_date( $value ) {
2194 2194
         $date = strtotime( $value );
2195 2195
 
2196 2196
         if ( $date && $value !== '0000-00-00 00:00:00' ) {
@@ -2198,29 +2198,29 @@  discard block
 block discarded – undo
2198 2198
             return true;
2199 2199
         }
2200 2200
 
2201
-		$this->set_prop( 'completed_date', '' );
2201
+        $this->set_prop( 'completed_date', '' );
2202 2202
         return false;
2203 2203
 
2204 2204
     }
2205 2205
 
2206 2206
     /**
2207
-	 * Alias of self::set_completed_date().
2208
-	 *
2209
-	 * @since 1.0.19
2210
-	 * @param  string $value New name.
2211
-	 */
2212
-	public function set_date_completed( $value ) {
2213
-		$this->set_completed_date( $value );
2207
+     * Alias of self::set_completed_date().
2208
+     *
2209
+     * @since 1.0.19
2210
+     * @param  string $value New name.
2211
+     */
2212
+    public function set_date_completed( $value ) {
2213
+        $this->set_completed_date( $value );
2214 2214
     }
2215 2215
 
2216 2216
     /**
2217
-	 * Set date when the invoice was last modified.
2218
-	 *
2219
-	 * @since 1.0.19
2220
-	 * @param string $value Value to set.
2217
+     * Set date when the invoice was last modified.
2218
+     *
2219
+     * @since 1.0.19
2220
+     * @param string $value Value to set.
2221 2221
      * @return bool Whether or not the date was set.
2222
-	 */
2223
-	public function set_date_modified( $value ) {
2222
+     */
2223
+    public function set_date_modified( $value ) {
2224 2224
         $date = strtotime( $value );
2225 2225
 
2226 2226
         if ( $date && $value !== '0000-00-00 00:00:00' ) {
@@ -2228,813 +2228,813 @@  discard block
 block discarded – undo
2228 2228
             return true;
2229 2229
         }
2230 2230
 
2231
-		$this->set_prop( 'date_modified', '' );
2231
+        $this->set_prop( 'date_modified', '' );
2232 2232
         return false;
2233 2233
 
2234 2234
     }
2235 2235
 
2236 2236
     /**
2237
-	 * Set the invoice number.
2238
-	 *
2239
-	 * @since 1.0.19
2240
-	 * @param  string $value New number.
2241
-	 */
2242
-	public function set_number( $value ) {
2237
+     * Set the invoice number.
2238
+     *
2239
+     * @since 1.0.19
2240
+     * @param  string $value New number.
2241
+     */
2242
+    public function set_number( $value ) {
2243 2243
         $number = sanitize_text_field( $value );
2244
-		$this->set_prop( 'number', $number );
2244
+        $this->set_prop( 'number', $number );
2245 2245
     }
2246 2246
 
2247 2247
     /**
2248
-	 * Set the invoice type.
2249
-	 *
2250
-	 * @since 1.0.19
2251
-	 * @param  string $value Type.
2252
-	 */
2253
-	public function set_type( $value ) {
2248
+     * Set the invoice type.
2249
+     *
2250
+     * @since 1.0.19
2251
+     * @param  string $value Type.
2252
+     */
2253
+    public function set_type( $value ) {
2254 2254
         $type = sanitize_text_field( str_replace( 'wpi_', '', $value ) );
2255
-		$this->set_prop( 'type', $type );
2256
-	}
2255
+        $this->set_prop( 'type', $type );
2256
+    }
2257 2257
 
2258 2258
     /**
2259
-	 * Set the invoice post type.
2260
-	 *
2261
-	 * @since 1.0.19
2262
-	 * @param  string $value Post type.
2263
-	 */
2264
-	public function set_post_type( $value ) {
2259
+     * Set the invoice post type.
2260
+     *
2261
+     * @since 1.0.19
2262
+     * @param  string $value Post type.
2263
+     */
2264
+    public function set_post_type( $value ) {
2265 2265
         if ( getpaid_is_invoice_post_type( $value ) ) {
2266
-			$this->set_type( $value );
2266
+            $this->set_type( $value );
2267 2267
             $this->set_prop( 'post_type', $value );
2268 2268
         }
2269 2269
     }
2270 2270
 
2271 2271
     /**
2272
-	 * Set the invoice key.
2273
-	 *
2274
-	 * @since 1.0.19
2275
-	 * @param  string $value New key.
2276
-	 */
2277
-	public function set_key( $value ) {
2272
+     * Set the invoice key.
2273
+     *
2274
+     * @since 1.0.19
2275
+     * @param  string $value New key.
2276
+     */
2277
+    public function set_key( $value ) {
2278 2278
         $key = sanitize_text_field( $value );
2279
-		$this->set_prop( 'key', $key );
2279
+        $this->set_prop( 'key', $key );
2280 2280
     }
2281 2281
 
2282 2282
     /**
2283
-	 * Set the invoice mode.
2284
-	 *
2285
-	 * @since 1.0.19
2286
-	 * @param  string $value mode.
2287
-	 */
2288
-	public function set_mode( $value ) {
2283
+     * Set the invoice mode.
2284
+     *
2285
+     * @since 1.0.19
2286
+     * @param  string $value mode.
2287
+     */
2288
+    public function set_mode( $value ) {
2289 2289
         if ( in_array( $value, array( 'live', 'test' ) ) ) {
2290 2290
             $this->set_prop( 'mode', $value );
2291 2291
         }
2292 2292
     }
2293 2293
 
2294 2294
     /**
2295
-	 * Set the invoice path.
2296
-	 *
2297
-	 * @since 1.0.19
2298
-	 * @param  string $value path.
2299
-	 */
2300
-	public function set_path( $value ) {
2295
+     * Set the invoice path.
2296
+     *
2297
+     * @since 1.0.19
2298
+     * @param  string $value path.
2299
+     */
2300
+    public function set_path( $value ) {
2301 2301
         $this->set_prop( 'path', $value );
2302 2302
     }
2303 2303
 
2304 2304
     /**
2305
-	 * Set the invoice name.
2306
-	 *
2307
-	 * @since 1.0.19
2308
-	 * @param  string $value New name.
2309
-	 */
2310
-	public function set_name( $value ) {
2305
+     * Set the invoice name.
2306
+     *
2307
+     * @since 1.0.19
2308
+     * @param  string $value New name.
2309
+     */
2310
+    public function set_name( $value ) {
2311 2311
         $name = sanitize_text_field( $value );
2312
-		$this->set_prop( 'name', $name );
2312
+        $this->set_prop( 'name', $name );
2313 2313
     }
2314 2314
 
2315 2315
     /**
2316
-	 * Alias of self::set_name().
2317
-	 *
2318
-	 * @since 1.0.19
2319
-	 * @param  string $value New name.
2320
-	 */
2321
-	public function set_title( $value ) {
2322
-		$this->set_name( $value );
2316
+     * Alias of self::set_name().
2317
+     *
2318
+     * @since 1.0.19
2319
+     * @param  string $value New name.
2320
+     */
2321
+    public function set_title( $value ) {
2322
+        $this->set_name( $value );
2323 2323
     }
2324 2324
 
2325 2325
     /**
2326
-	 * Set the invoice description.
2327
-	 *
2328
-	 * @since 1.0.19
2329
-	 * @param  string $value New description.
2330
-	 */
2331
-	public function set_description( $value ) {
2326
+     * Set the invoice description.
2327
+     *
2328
+     * @since 1.0.19
2329
+     * @param  string $value New description.
2330
+     */
2331
+    public function set_description( $value ) {
2332 2332
         $description = wp_kses_post( $value );
2333
-		$this->set_prop( 'description', $description );
2333
+        $this->set_prop( 'description', $description );
2334
+    }
2335
+
2336
+    /**
2337
+     * Alias of self::set_description().
2338
+     *
2339
+     * @since 1.0.19
2340
+     * @param  string $value New description.
2341
+     */
2342
+    public function set_excerpt( $value ) {
2343
+        $this->set_description( $value );
2344
+    }
2345
+
2346
+    /**
2347
+     * Alias of self::set_description().
2348
+     *
2349
+     * @since 1.0.19
2350
+     * @param  string $value New description.
2351
+     */
2352
+    public function set_summary( $value ) {
2353
+        $this->set_description( $value );
2354
+    }
2355
+
2356
+    /**
2357
+     * Set the receiver of the invoice.
2358
+     *
2359
+     * @since 1.0.19
2360
+     * @param  int $value New author.
2361
+     */
2362
+    public function set_author( $value ) {
2363
+        $user = get_user_by( 'id', (int) $value );
2364
+
2365
+        if ( $user && $user->ID ) {
2366
+            $this->set_prop( 'author', $user->ID );
2367
+            $this->set_prop( 'email', $user->user_email );
2368
+        }
2369
+
2370
+    }
2371
+
2372
+    /**
2373
+     * Alias of self::set_author().
2374
+     *
2375
+     * @since 1.0.19
2376
+     * @param  int $value New user id.
2377
+     */
2378
+    public function set_user_id( $value ) {
2379
+        $this->set_author( $value );
2380
+    }
2381
+
2382
+    /**
2383
+     * Sets the customer ID.
2384
+     *
2385
+     * @since 1.0.19
2386
+     * @param  int $value New user id.
2387
+     */
2388
+    public function set_customer_id( $value ) {
2389
+        $this->set_prop( 'customer_id', (int) $value );
2390
+    }
2391
+
2392
+    /**
2393
+     * Set the customer's ip.
2394
+     *
2395
+     * @since 1.0.19
2396
+     * @param  string $value ip address.
2397
+     */
2398
+    public function set_ip( $value ) {
2399
+        $this->set_prop( 'ip', $value );
2400
+    }
2401
+
2402
+    /**
2403
+     * Alias of self::set_ip().
2404
+     *
2405
+     * @since 1.0.19
2406
+     * @param  string $value ip address.
2407
+     */
2408
+    public function set_user_ip( $value ) {
2409
+        $this->set_ip( $value );
2410
+    }
2411
+
2412
+    /**
2413
+     * Set the customer's first name.
2414
+     *
2415
+     * @since 1.0.19
2416
+     * @param  string $value first name.
2417
+     */
2418
+    public function set_first_name( $value ) {
2419
+        $this->set_prop( 'first_name', $value );
2420
+    }
2421
+
2422
+    /**
2423
+     * Alias of self::set_first_name().
2424
+     *
2425
+     * @since 1.0.19
2426
+     * @param  string $value first name.
2427
+     */
2428
+    public function set_user_first_name( $value ) {
2429
+        $this->set_first_name( $value );
2430
+    }
2431
+
2432
+    /**
2433
+     * Alias of self::set_first_name().
2434
+     *
2435
+     * @since 1.0.19
2436
+     * @param  string $value first name.
2437
+     */
2438
+    public function set_customer_first_name( $value ) {
2439
+        $this->set_first_name( $value );
2440
+    }
2441
+
2442
+    /**
2443
+     * Set the customer's last name.
2444
+     *
2445
+     * @since 1.0.19
2446
+     * @param  string $value last name.
2447
+     */
2448
+    public function set_last_name( $value ) {
2449
+        $this->set_prop( 'last_name', $value );
2450
+    }
2451
+
2452
+    /**
2453
+     * Alias of self::set_last_name().
2454
+     *
2455
+     * @since 1.0.19
2456
+     * @param  string $value last name.
2457
+     */
2458
+    public function set_user_last_name( $value ) {
2459
+        $this->set_last_name( $value );
2460
+    }
2461
+
2462
+    /**
2463
+     * Alias of self::set_last_name().
2464
+     *
2465
+     * @since 1.0.19
2466
+     * @param  string $value last name.
2467
+     */
2468
+    public function set_customer_last_name( $value ) {
2469
+        $this->set_last_name( $value );
2334 2470
     }
2335 2471
 
2336 2472
     /**
2337
-	 * Alias of self::set_description().
2338
-	 *
2339
-	 * @since 1.0.19
2340
-	 * @param  string $value New description.
2341
-	 */
2342
-	public function set_excerpt( $value ) {
2343
-		$this->set_description( $value );
2473
+     * Set the customer's phone number.
2474
+     *
2475
+     * @since 1.0.19
2476
+     * @param  string $value phone.
2477
+     */
2478
+    public function set_phone( $value ) {
2479
+        $this->set_prop( 'phone', $value );
2480
+    }
2481
+
2482
+    /**
2483
+     * Alias of self::set_phone().
2484
+     *
2485
+     * @since 1.0.19
2486
+     * @param  string $value phone.
2487
+     */
2488
+    public function set_user_phone( $value ) {
2489
+        $this->set_phone( $value );
2344 2490
     }
2345 2491
 
2346 2492
     /**
2347
-	 * Alias of self::set_description().
2348
-	 *
2349
-	 * @since 1.0.19
2350
-	 * @param  string $value New description.
2351
-	 */
2352
-	public function set_summary( $value ) {
2353
-		$this->set_description( $value );
2493
+     * Alias of self::set_phone().
2494
+     *
2495
+     * @since 1.0.19
2496
+     * @param  string $value phone.
2497
+     */
2498
+    public function set_customer_phone( $value ) {
2499
+        $this->set_phone( $value );
2354 2500
     }
2355 2501
 
2356 2502
     /**
2357
-	 * Set the receiver of the invoice.
2358
-	 *
2359
-	 * @since 1.0.19
2360
-	 * @param  int $value New author.
2361
-	 */
2362
-	public function set_author( $value ) {
2363
-		$user = get_user_by( 'id', (int) $value );
2503
+     * Alias of self::set_phone().
2504
+     *
2505
+     * @since 1.0.19
2506
+     * @param  string $value phone.
2507
+     */
2508
+    public function set_phone_number( $value ) {
2509
+        $this->set_phone( $value );
2510
+    }
2364 2511
 
2365
-		if ( $user && $user->ID ) {
2366
-			$this->set_prop( 'author', $user->ID );
2367
-			$this->set_prop( 'email', $user->user_email );
2368
-		}
2512
+    /**
2513
+     * Set the customer's email address.
2514
+     *
2515
+     * @since 1.0.19
2516
+     * @param  string $value email address.
2517
+     */
2518
+    public function set_email( $value ) {
2519
+        $this->set_prop( 'email', $value );
2520
+    }
2369 2521
 
2522
+    /**
2523
+     * Alias of self::set_email().
2524
+     *
2525
+     * @since 1.0.19
2526
+     * @param  string $value email address.
2527
+     */
2528
+    public function set_user_email( $value ) {
2529
+        $this->set_email( $value );
2370 2530
     }
2371 2531
 
2372 2532
     /**
2373
-	 * Alias of self::set_author().
2374
-	 *
2375
-	 * @since 1.0.19
2376
-	 * @param  int $value New user id.
2377
-	 */
2378
-	public function set_user_id( $value ) {
2379
-		$this->set_author( $value );
2533
+     * Alias of self::set_email().
2534
+     *
2535
+     * @since 1.0.19
2536
+     * @param  string $value email address.
2537
+     */
2538
+    public function set_email_address( $value ) {
2539
+        $this->set_email( $value );
2380 2540
     }
2381 2541
 
2382 2542
     /**
2383
-	 * Sets the customer ID.
2384
-	 *
2385
-	 * @since 1.0.19
2386
-	 * @param  int $value New user id.
2387
-	 */
2388
-	public function set_customer_id( $value ) {
2389
-		$this->set_prop( 'customer_id', (int) $value );
2543
+     * Alias of self::set_email().
2544
+     *
2545
+     * @since 1.0.19
2546
+     * @param  string $value email address.
2547
+     */
2548
+    public function set_customer_email( $value ) {
2549
+        $this->set_email( $value );
2390 2550
     }
2391 2551
 
2392 2552
     /**
2393
-	 * Set the customer's ip.
2394
-	 *
2395
-	 * @since 1.0.19
2396
-	 * @param  string $value ip address.
2397
-	 */
2398
-	public function set_ip( $value ) {
2399
-		$this->set_prop( 'ip', $value );
2553
+     * Set the customer's country.
2554
+     *
2555
+     * @since 1.0.19
2556
+     * @param  string $value country.
2557
+     */
2558
+    public function set_country( $value ) {
2559
+        $this->set_prop( 'country', $value );
2400 2560
     }
2401 2561
 
2402 2562
     /**
2403
-	 * Alias of self::set_ip().
2404
-	 *
2405
-	 * @since 1.0.19
2406
-	 * @param  string $value ip address.
2407
-	 */
2408
-	public function set_user_ip( $value ) {
2409
-		$this->set_ip( $value );
2563
+     * Alias of self::set_country().
2564
+     *
2565
+     * @since 1.0.19
2566
+     * @param  string $value country.
2567
+     */
2568
+    public function set_user_country( $value ) {
2569
+        $this->set_country( $value );
2410 2570
     }
2411 2571
 
2412 2572
     /**
2413
-	 * Set the customer's first name.
2414
-	 *
2415
-	 * @since 1.0.19
2416
-	 * @param  string $value first name.
2417
-	 */
2418
-	public function set_first_name( $value ) {
2419
-		$this->set_prop( 'first_name', $value );
2573
+     * Alias of self::set_country().
2574
+     *
2575
+     * @since 1.0.19
2576
+     * @param  string $value country.
2577
+     */
2578
+    public function set_customer_country( $value ) {
2579
+        $this->set_country( $value );
2420 2580
     }
2421 2581
 
2422 2582
     /**
2423
-	 * Alias of self::set_first_name().
2424
-	 *
2425
-	 * @since 1.0.19
2426
-	 * @param  string $value first name.
2427
-	 */
2428
-	public function set_user_first_name( $value ) {
2429
-		$this->set_first_name( $value );
2583
+     * Set the customer's state.
2584
+     *
2585
+     * @since 1.0.19
2586
+     * @param  string $value state.
2587
+     */
2588
+    public function set_state( $value ) {
2589
+        $this->set_prop( 'state', $value );
2430 2590
     }
2431 2591
 
2432 2592
     /**
2433
-	 * Alias of self::set_first_name().
2434
-	 *
2435
-	 * @since 1.0.19
2436
-	 * @param  string $value first name.
2437
-	 */
2438
-	public function set_customer_first_name( $value ) {
2439
-		$this->set_first_name( $value );
2593
+     * Alias of self::set_state().
2594
+     *
2595
+     * @since 1.0.19
2596
+     * @param  string $value state.
2597
+     */
2598
+    public function set_user_state( $value ) {
2599
+        $this->set_state( $value );
2440 2600
     }
2441 2601
 
2442 2602
     /**
2443
-	 * Set the customer's last name.
2444
-	 *
2445
-	 * @since 1.0.19
2446
-	 * @param  string $value last name.
2447
-	 */
2448
-	public function set_last_name( $value ) {
2449
-		$this->set_prop( 'last_name', $value );
2603
+     * Alias of self::set_state().
2604
+     *
2605
+     * @since 1.0.19
2606
+     * @param  string $value state.
2607
+     */
2608
+    public function set_customer_state( $value ) {
2609
+        $this->set_state( $value );
2450 2610
     }
2451 2611
 
2452 2612
     /**
2453
-	 * Alias of self::set_last_name().
2454
-	 *
2455
-	 * @since 1.0.19
2456
-	 * @param  string $value last name.
2457
-	 */
2458
-	public function set_user_last_name( $value ) {
2459
-		$this->set_last_name( $value );
2613
+     * Set the customer's city.
2614
+     *
2615
+     * @since 1.0.19
2616
+     * @param  string $value city.
2617
+     */
2618
+    public function set_city( $value ) {
2619
+        $this->set_prop( 'city', $value );
2460 2620
     }
2461 2621
 
2462 2622
     /**
2463
-	 * Alias of self::set_last_name().
2464
-	 *
2465
-	 * @since 1.0.19
2466
-	 * @param  string $value last name.
2467
-	 */
2468
-	public function set_customer_last_name( $value ) {
2469
-		$this->set_last_name( $value );
2623
+     * Alias of self::set_city().
2624
+     *
2625
+     * @since 1.0.19
2626
+     * @param  string $value city.
2627
+     */
2628
+    public function set_user_city( $value ) {
2629
+        $this->set_city( $value );
2470 2630
     }
2471 2631
 
2472 2632
     /**
2473
-	 * Set the customer's phone number.
2474
-	 *
2475
-	 * @since 1.0.19
2476
-	 * @param  string $value phone.
2477
-	 */
2478
-	public function set_phone( $value ) {
2479
-		$this->set_prop( 'phone', $value );
2633
+     * Alias of self::set_city().
2634
+     *
2635
+     * @since 1.0.19
2636
+     * @param  string $value city.
2637
+     */
2638
+    public function set_customer_city( $value ) {
2639
+        $this->set_city( $value );
2480 2640
     }
2481 2641
 
2482 2642
     /**
2483
-	 * Alias of self::set_phone().
2484
-	 *
2485
-	 * @since 1.0.19
2486
-	 * @param  string $value phone.
2487
-	 */
2488
-	public function set_user_phone( $value ) {
2489
-		$this->set_phone( $value );
2643
+     * Set the customer's zip code.
2644
+     *
2645
+     * @since 1.0.19
2646
+     * @param  string $value zip.
2647
+     */
2648
+    public function set_zip( $value ) {
2649
+        $this->set_prop( 'zip', $value );
2490 2650
     }
2491 2651
 
2492 2652
     /**
2493
-	 * Alias of self::set_phone().
2494
-	 *
2495
-	 * @since 1.0.19
2496
-	 * @param  string $value phone.
2497
-	 */
2498
-	public function set_customer_phone( $value ) {
2499
-		$this->set_phone( $value );
2653
+     * Alias of self::set_zip().
2654
+     *
2655
+     * @since 1.0.19
2656
+     * @param  string $value zip.
2657
+     */
2658
+    public function set_user_zip( $value ) {
2659
+        $this->set_zip( $value );
2500 2660
     }
2501 2661
 
2502 2662
     /**
2503
-	 * Alias of self::set_phone().
2504
-	 *
2505
-	 * @since 1.0.19
2506
-	 * @param  string $value phone.
2507
-	 */
2508
-	public function set_phone_number( $value ) {
2509
-		$this->set_phone( $value );
2663
+     * Alias of self::set_zip().
2664
+     *
2665
+     * @since 1.0.19
2666
+     * @param  string $value zip.
2667
+     */
2668
+    public function set_customer_zip( $value ) {
2669
+        $this->set_zip( $value );
2510 2670
     }
2511 2671
 
2512 2672
     /**
2513
-	 * Set the customer's email address.
2514
-	 *
2515
-	 * @since 1.0.19
2516
-	 * @param  string $value email address.
2517
-	 */
2518
-	public function set_email( $value ) {
2519
-		$this->set_prop( 'email', $value );
2673
+     * Set the customer's company.
2674
+     *
2675
+     * @since 1.0.19
2676
+     * @param  string $value company.
2677
+     */
2678
+    public function set_company( $value ) {
2679
+        $this->set_prop( 'company', $value );
2520 2680
     }
2521 2681
 
2522 2682
     /**
2523
-	 * Alias of self::set_email().
2524
-	 *
2525
-	 * @since 1.0.19
2526
-	 * @param  string $value email address.
2527
-	 */
2528
-	public function set_user_email( $value ) {
2529
-		$this->set_email( $value );
2683
+     * Alias of self::set_company().
2684
+     *
2685
+     * @since 1.0.19
2686
+     * @param  string $value company.
2687
+     */
2688
+    public function set_user_company( $value ) {
2689
+        $this->set_company( $value );
2530 2690
     }
2531 2691
 
2532 2692
     /**
2533
-	 * Alias of self::set_email().
2534
-	 *
2535
-	 * @since 1.0.19
2536
-	 * @param  string $value email address.
2537
-	 */
2538
-	public function set_email_address( $value ) {
2539
-		$this->set_email( $value );
2693
+     * Alias of self::set_company().
2694
+     *
2695
+     * @since 1.0.19
2696
+     * @param  string $value company.
2697
+     */
2698
+    public function set_customer_company( $value ) {
2699
+        $this->set_company( $value );
2540 2700
     }
2541 2701
 
2542 2702
     /**
2543
-	 * Alias of self::set_email().
2544
-	 *
2545
-	 * @since 1.0.19
2546
-	 * @param  string $value email address.
2547
-	 */
2548
-	public function set_customer_email( $value ) {
2549
-		$this->set_email( $value );
2703
+     * Set the customer's company id.
2704
+     *
2705
+     * @since 1.0.19
2706
+     * @param  string $value company id.
2707
+     */
2708
+    public function set_company_id( $value ) {
2709
+        $this->set_prop( 'company_id', $value );
2550 2710
     }
2551 2711
 
2552 2712
     /**
2553
-	 * Set the customer's country.
2554
-	 *
2555
-	 * @since 1.0.19
2556
-	 * @param  string $value country.
2557
-	 */
2558
-	public function set_country( $value ) {
2559
-		$this->set_prop( 'country', $value );
2713
+     * Set the customer's var number.
2714
+     *
2715
+     * @since 1.0.19
2716
+     * @param  string $value var number.
2717
+     */
2718
+    public function set_vat_number( $value ) {
2719
+        $this->set_prop( 'vat_number', $value );
2560 2720
     }
2561 2721
 
2562 2722
     /**
2563
-	 * Alias of self::set_country().
2564
-	 *
2565
-	 * @since 1.0.19
2566
-	 * @param  string $value country.
2567
-	 */
2568
-	public function set_user_country( $value ) {
2569
-		$this->set_country( $value );
2723
+     * Alias of self::set_vat_number().
2724
+     *
2725
+     * @since 1.0.19
2726
+     * @param  string $value var number.
2727
+     */
2728
+    public function set_user_vat_number( $value ) {
2729
+        $this->set_vat_number( $value );
2570 2730
     }
2571 2731
 
2572 2732
     /**
2573
-	 * Alias of self::set_country().
2574
-	 *
2575
-	 * @since 1.0.19
2576
-	 * @param  string $value country.
2577
-	 */
2578
-	public function set_customer_country( $value ) {
2579
-		$this->set_country( $value );
2733
+     * Alias of self::set_vat_number().
2734
+     *
2735
+     * @since 1.0.19
2736
+     * @param  string $value var number.
2737
+     */
2738
+    public function set_customer_vat_number( $value ) {
2739
+        $this->set_vat_number( $value );
2580 2740
     }
2581 2741
 
2582 2742
     /**
2583
-	 * Set the customer's state.
2584
-	 *
2585
-	 * @since 1.0.19
2586
-	 * @param  string $value state.
2587
-	 */
2588
-	public function set_state( $value ) {
2589
-		$this->set_prop( 'state', $value );
2743
+     * Set the customer's vat rate.
2744
+     *
2745
+     * @since 1.0.19
2746
+     * @param  string $value var rate.
2747
+     */
2748
+    public function set_vat_rate( $value ) {
2749
+        $this->set_prop( 'vat_rate', $value );
2590 2750
     }
2591 2751
 
2592 2752
     /**
2593
-	 * Alias of self::set_state().
2594
-	 *
2595
-	 * @since 1.0.19
2596
-	 * @param  string $value state.
2597
-	 */
2598
-	public function set_user_state( $value ) {
2599
-		$this->set_state( $value );
2753
+     * Alias of self::set_vat_rate().
2754
+     *
2755
+     * @since 1.0.19
2756
+     * @param  string $value var number.
2757
+     */
2758
+    public function set_user_vat_rate( $value ) {
2759
+        $this->set_vat_rate( $value );
2600 2760
     }
2601 2761
 
2602 2762
     /**
2603
-	 * Alias of self::set_state().
2604
-	 *
2605
-	 * @since 1.0.19
2606
-	 * @param  string $value state.
2607
-	 */
2608
-	public function set_customer_state( $value ) {
2609
-		$this->set_state( $value );
2763
+     * Alias of self::set_vat_rate().
2764
+     *
2765
+     * @since 1.0.19
2766
+     * @param  string $value var number.
2767
+     */
2768
+    public function set_customer_vat_rate( $value ) {
2769
+        $this->set_vat_rate( $value );
2610 2770
     }
2611 2771
 
2612 2772
     /**
2613
-	 * Set the customer's city.
2614
-	 *
2615
-	 * @since 1.0.19
2616
-	 * @param  string $value city.
2617
-	 */
2618
-	public function set_city( $value ) {
2619
-		$this->set_prop( 'city', $value );
2773
+     * Set the customer's address.
2774
+     *
2775
+     * @since 1.0.19
2776
+     * @param  string $value address.
2777
+     */
2778
+    public function set_address( $value ) {
2779
+        $this->set_prop( 'address', $value );
2620 2780
     }
2621 2781
 
2622 2782
     /**
2623
-	 * Alias of self::set_city().
2624
-	 *
2625
-	 * @since 1.0.19
2626
-	 * @param  string $value city.
2627
-	 */
2628
-	public function set_user_city( $value ) {
2629
-		$this->set_city( $value );
2783
+     * Alias of self::set_address().
2784
+     *
2785
+     * @since 1.0.19
2786
+     * @param  string $value address.
2787
+     */
2788
+    public function set_user_address( $value ) {
2789
+        $this->set_address( $value );
2630 2790
     }
2631 2791
 
2632 2792
     /**
2633
-	 * Alias of self::set_city().
2634
-	 *
2635
-	 * @since 1.0.19
2636
-	 * @param  string $value city.
2637
-	 */
2638
-	public function set_customer_city( $value ) {
2639
-		$this->set_city( $value );
2793
+     * Alias of self::set_address().
2794
+     *
2795
+     * @since 1.0.19
2796
+     * @param  string $value address.
2797
+     */
2798
+    public function set_customer_address( $value ) {
2799
+        $this->set_address( $value );
2640 2800
     }
2641 2801
 
2642 2802
     /**
2643
-	 * Set the customer's zip code.
2644
-	 *
2645
-	 * @since 1.0.19
2646
-	 * @param  string $value zip.
2647
-	 */
2648
-	public function set_zip( $value ) {
2649
-		$this->set_prop( 'zip', $value );
2803
+     * Set whether the customer has viewed the invoice or not.
2804
+     *
2805
+     * @since 1.0.19
2806
+     * @param  int|bool $value confirmed.
2807
+     */
2808
+    public function set_is_viewed( $value ) {
2809
+        $this->set_prop( 'is_viewed', $value );
2650 2810
     }
2651 2811
 
2652 2812
     /**
2653
-	 * Alias of self::set_zip().
2654
-	 *
2655
-	 * @since 1.0.19
2656
-	 * @param  string $value zip.
2657
-	 */
2658
-	public function set_user_zip( $value ) {
2659
-		$this->set_zip( $value );
2813
+     * Set extra email recipients.
2814
+     *
2815
+     * @since 1.0.19
2816
+     * @param  string $value email recipients.
2817
+     */
2818
+    public function set_email_cc( $value ) {
2819
+        $this->set_prop( 'email_cc', $value );
2660 2820
     }
2661 2821
 
2662 2822
     /**
2663
-	 * Alias of self::set_zip().
2664
-	 *
2665
-	 * @since 1.0.19
2666
-	 * @param  string $value zip.
2667
-	 */
2668
-	public function set_customer_zip( $value ) {
2669
-		$this->set_zip( $value );
2823
+     * Set the invoice template.
2824
+     *
2825
+     * @since 1.0.19
2826
+     * @param  string $value template.
2827
+     */
2828
+    public function set_template( $value ) {
2829
+        if ( in_array( $value, array( 'quantity', 'hours', 'amount' ) ) ) {
2830
+            $this->set_prop( 'template', $value );
2831
+        }
2670 2832
     }
2671 2833
 
2672 2834
     /**
2673
-	 * Set the customer's company.
2674
-	 *
2675
-	 * @since 1.0.19
2676
-	 * @param  string $value company.
2677
-	 */
2678
-	public function set_company( $value ) {
2679
-		$this->set_prop( 'company', $value );
2835
+     * Set the invoice source.
2836
+     *
2837
+     * @since 1.0.19
2838
+     * @param  string $value source.
2839
+     * @deprecated
2840
+     */
2841
+    public function created_via( $value ) {
2842
+        $this->set_created_via( sanitize_text_field( $value ) );
2680 2843
     }
2681 2844
 
2682 2845
     /**
2683
-	 * Alias of self::set_company().
2684
-	 *
2685
-	 * @since 1.0.19
2686
-	 * @param  string $value company.
2687
-	 */
2688
-	public function set_user_company( $value ) {
2689
-		$this->set_company( $value );
2846
+     * Set the invoice source.
2847
+     *
2848
+     * @since 1.0.19
2849
+     * @param  string $value source.
2850
+     */
2851
+    public function set_created_via( $value ) {
2852
+        $this->set_prop( 'created_via', sanitize_text_field( $value ) );
2690 2853
     }
2691 2854
 
2692 2855
     /**
2693
-	 * Alias of self::set_company().
2694
-	 *
2695
-	 * @since 1.0.19
2696
-	 * @param  string $value company.
2697
-	 */
2698
-	public function set_customer_company( $value ) {
2699
-		$this->set_company( $value );
2700
-    }
2701
-
2702
-	/**
2703
-	 * Set the customer's company id.
2704
-	 *
2705
-	 * @since 1.0.19
2706
-	 * @param  string $value company id.
2707
-	 */
2708
-	public function set_company_id( $value ) {
2709
-		$this->set_prop( 'company_id', $value );
2856
+     * Set the customer's address confirmed status.
2857
+     *
2858
+     * @since 1.0.19
2859
+     * @param  int|bool $value confirmed.
2860
+     */
2861
+    public function set_address_confirmed( $value ) {
2862
+        $this->set_prop( 'address_confirmed', $value );
2710 2863
     }
2711 2864
 
2712 2865
     /**
2713
-	 * Set the customer's var number.
2714
-	 *
2715
-	 * @since 1.0.19
2716
-	 * @param  string $value var number.
2717
-	 */
2718
-	public function set_vat_number( $value ) {
2719
-		$this->set_prop( 'vat_number', $value );
2866
+     * Alias of self::set_address_confirmed().
2867
+     *
2868
+     * @since 1.0.19
2869
+     * @param  int|bool $value confirmed.
2870
+     */
2871
+    public function set_user_address_confirmed( $value ) {
2872
+        $this->set_address_confirmed( $value );
2720 2873
     }
2721 2874
 
2722 2875
     /**
2723
-	 * Alias of self::set_vat_number().
2724
-	 *
2725
-	 * @since 1.0.19
2726
-	 * @param  string $value var number.
2727
-	 */
2728
-	public function set_user_vat_number( $value ) {
2729
-		$this->set_vat_number( $value );
2876
+     * Alias of self::set_address_confirmed().
2877
+     *
2878
+     * @since 1.0.19
2879
+     * @param  int|bool $value confirmed.
2880
+     */
2881
+    public function set_customer_address_confirmed( $value ) {
2882
+        $this->set_address_confirmed( $value );
2730 2883
     }
2731 2884
 
2732 2885
     /**
2733
-	 * Alias of self::set_vat_number().
2734
-	 *
2735
-	 * @since 1.0.19
2736
-	 * @param  string $value var number.
2737
-	 */
2738
-	public function set_customer_vat_number( $value ) {
2739
-		$this->set_vat_number( $value );
2886
+     * Set the shipping fee
2887
+     *
2888
+     * @since 1.0.19
2889
+     * @param  float $value shipping amount.
2890
+     */
2891
+    public function set_shipping( $value ) {
2892
+
2893
+        if ( ! is_numeric( $value ) ) {
2894
+            return $this->set_prop( 'shipping', null );
2895
+        }
2896
+
2897
+        $this->set_prop( 'shipping', max( 0, floatval( $value ) ) );
2740 2898
     }
2741 2899
 
2742 2900
     /**
2743
-	 * Set the customer's vat rate.
2744
-	 *
2745
-	 * @since 1.0.19
2746
-	 * @param  string $value var rate.
2747
-	 */
2748
-	public function set_vat_rate( $value ) {
2749
-		$this->set_prop( 'vat_rate', $value );
2901
+     * Set the invoice sub total.
2902
+     *
2903
+     * @since 1.0.19
2904
+     * @param  float $value sub total.
2905
+     */
2906
+    public function set_subtotal( $value ) {
2907
+        $this->set_prop( 'subtotal', max( 0, $value ) );
2750 2908
     }
2751 2909
 
2752
-    /**
2753
-	 * Alias of self::set_vat_rate().
2754
-	 *
2755
-	 * @since 1.0.19
2756
-	 * @param  string $value var number.
2757
-	 */
2758
-	public function set_user_vat_rate( $value ) {
2759
-		$this->set_vat_rate( $value );
2760
-    }
2761
-
2762
-    /**
2763
-	 * Alias of self::set_vat_rate().
2764
-	 *
2765
-	 * @since 1.0.19
2766
-	 * @param  string $value var number.
2767
-	 */
2768
-	public function set_customer_vat_rate( $value ) {
2769
-		$this->set_vat_rate( $value );
2770
-    }
2771
-
2772
-    /**
2773
-	 * Set the customer's address.
2774
-	 *
2775
-	 * @since 1.0.19
2776
-	 * @param  string $value address.
2777
-	 */
2778
-	public function set_address( $value ) {
2779
-		$this->set_prop( 'address', $value );
2780
-    }
2781
-
2782
-    /**
2783
-	 * Alias of self::set_address().
2784
-	 *
2785
-	 * @since 1.0.19
2786
-	 * @param  string $value address.
2787
-	 */
2788
-	public function set_user_address( $value ) {
2789
-		$this->set_address( $value );
2790
-    }
2791
-
2792
-    /**
2793
-	 * Alias of self::set_address().
2794
-	 *
2795
-	 * @since 1.0.19
2796
-	 * @param  string $value address.
2797
-	 */
2798
-	public function set_customer_address( $value ) {
2799
-		$this->set_address( $value );
2800
-    }
2801
-
2802
-    /**
2803
-	 * Set whether the customer has viewed the invoice or not.
2804
-	 *
2805
-	 * @since 1.0.19
2806
-	 * @param  int|bool $value confirmed.
2807
-	 */
2808
-	public function set_is_viewed( $value ) {
2809
-		$this->set_prop( 'is_viewed', $value );
2810
-	}
2811
-
2812
-	/**
2813
-	 * Set extra email recipients.
2814
-	 *
2815
-	 * @since 1.0.19
2816
-	 * @param  string $value email recipients.
2817
-	 */
2818
-	public function set_email_cc( $value ) {
2819
-		$this->set_prop( 'email_cc', $value );
2820
-	}
2821
-
2822
-	/**
2823
-	 * Set the invoice template.
2824
-	 *
2825
-	 * @since 1.0.19
2826
-	 * @param  string $value template.
2827
-	 */
2828
-	public function set_template( $value ) {
2829
-		if ( in_array( $value, array( 'quantity', 'hours', 'amount' ) ) ) {
2830
-			$this->set_prop( 'template', $value );
2831
-		}
2832
-	}
2833
-
2834
-	/**
2835
-	 * Set the invoice source.
2836
-	 *
2837
-	 * @since 1.0.19
2838
-	 * @param  string $value source.
2839
-	 * @deprecated
2840
-	 */
2841
-	public function created_via( $value ) {
2842
-		$this->set_created_via( sanitize_text_field( $value ) );
2843
-	}
2844
-
2845
-	/**
2846
-	 * Set the invoice source.
2847
-	 *
2848
-	 * @since 1.0.19
2849
-	 * @param  string $value source.
2850
-	 */
2851
-	public function set_created_via( $value ) {
2852
-		$this->set_prop( 'created_via', sanitize_text_field( $value ) );
2853
-	}
2854
-
2855
-	/**
2856
-	 * Set the customer's address confirmed status.
2857
-	 *
2858
-	 * @since 1.0.19
2859
-	 * @param  int|bool $value confirmed.
2860
-	 */
2861
-	public function set_address_confirmed( $value ) {
2862
-		$this->set_prop( 'address_confirmed', $value );
2863
-    }
2864
-
2865
-    /**
2866
-	 * Alias of self::set_address_confirmed().
2867
-	 *
2868
-	 * @since 1.0.19
2869
-	 * @param  int|bool $value confirmed.
2870
-	 */
2871
-	public function set_user_address_confirmed( $value ) {
2872
-		$this->set_address_confirmed( $value );
2873
-    }
2874
-
2875
-    /**
2876
-	 * Alias of self::set_address_confirmed().
2877
-	 *
2878
-	 * @since 1.0.19
2879
-	 * @param  int|bool $value confirmed.
2880
-	 */
2881
-	public function set_customer_address_confirmed( $value ) {
2882
-		$this->set_address_confirmed( $value );
2883
-    }
2884
-
2885
-    /**
2886
-	 * Set the shipping fee
2887
-	 *
2888
-	 * @since 1.0.19
2889
-	 * @param  float $value shipping amount.
2890
-	 */
2891
-	public function set_shipping( $value ) {
2892
-
2893
-		if ( ! is_numeric( $value ) ) {
2894
-			return $this->set_prop( 'shipping', null );
2895
-		}
2896
-
2897
-		$this->set_prop( 'shipping', max( 0, floatval( $value ) ) );
2898
-	}
2899
-
2900
-	/**
2901
-	 * Set the invoice sub total.
2902
-	 *
2903
-	 * @since 1.0.19
2904
-	 * @param  float $value sub total.
2905
-	 */
2906
-	public function set_subtotal( $value ) {
2907
-		$this->set_prop( 'subtotal', max( 0, $value ) );
2908
-	}
2909
-
2910
-	/**
2911
-	 * Set the invoice total.
2912
-	 *
2913
-	 * @since 1.0.19
2914
-	 * @param  float $value sub total.
2915
-	 */
2916
-	public function set_total( $value ) {
2917
-		$this->set_prop( 'total', max( 0, $value ) );
2910
+    /**
2911
+     * Set the invoice total.
2912
+     *
2913
+     * @since 1.0.19
2914
+     * @param  float $value sub total.
2915
+     */
2916
+    public function set_total( $value ) {
2917
+        $this->set_prop( 'total', max( 0, $value ) );
2918 2918
     }
2919 2919
 
2920 2920
     /**
2921
-	 * Set the invoice discount amount.
2922
-	 *
2923
-	 * @since 1.0.19
2924
-	 * @param  float $value discount total.
2925
-	 */
2926
-	public function set_total_discount( $value ) {
2927
-		$this->set_prop( 'total_discount', max( 0, $value ) );
2921
+     * Set the invoice discount amount.
2922
+     *
2923
+     * @since 1.0.19
2924
+     * @param  float $value discount total.
2925
+     */
2926
+    public function set_total_discount( $value ) {
2927
+        $this->set_prop( 'total_discount', max( 0, $value ) );
2928 2928
     }
2929 2929
 
2930 2930
     /**
2931
-	 * Alias of self::set_total_discount().
2932
-	 *
2933
-	 * @since 1.0.19
2934
-	 * @param  float $value discount total.
2935
-	 */
2936
-	public function set_discount( $value ) {
2937
-		$this->set_total_discount( $value );
2931
+     * Alias of self::set_total_discount().
2932
+     *
2933
+     * @since 1.0.19
2934
+     * @param  float $value discount total.
2935
+     */
2936
+    public function set_discount( $value ) {
2937
+        $this->set_total_discount( $value );
2938 2938
     }
2939 2939
 
2940 2940
     /**
2941
-	 * Set the invoice tax amount.
2942
-	 *
2943
-	 * @since 1.0.19
2944
-	 * @param  float $value tax total.
2945
-	 */
2946
-	public function set_total_tax( $value ) {
2947
-		$this->set_prop( 'total_tax', max( 0, $value ) );
2941
+     * Set the invoice tax amount.
2942
+     *
2943
+     * @since 1.0.19
2944
+     * @param  float $value tax total.
2945
+     */
2946
+    public function set_total_tax( $value ) {
2947
+        $this->set_prop( 'total_tax', max( 0, $value ) );
2948 2948
     }
2949 2949
 
2950 2950
     /**
2951
-	 * Alias of self::set_total_tax().
2952
-	 *
2953
-	 * @since 1.0.19
2954
-	 * @param  float $value tax total.
2955
-	 */
2956
-	public function set_tax_total( $value ) {
2957
-		$this->set_total_tax( $value );
2951
+     * Alias of self::set_total_tax().
2952
+     *
2953
+     * @since 1.0.19
2954
+     * @param  float $value tax total.
2955
+     */
2956
+    public function set_tax_total( $value ) {
2957
+        $this->set_total_tax( $value );
2958 2958
     }
2959 2959
 
2960 2960
     /**
2961
-	 * Set the invoice fees amount.
2962
-	 *
2963
-	 * @since 1.0.19
2964
-	 * @param  float $value fees total.
2965
-	 */
2966
-	public function set_total_fees( $value ) {
2967
-		$this->set_prop( 'total_fees', max( 0, $value ) );
2961
+     * Set the invoice fees amount.
2962
+     *
2963
+     * @since 1.0.19
2964
+     * @param  float $value fees total.
2965
+     */
2966
+    public function set_total_fees( $value ) {
2967
+        $this->set_prop( 'total_fees', max( 0, $value ) );
2968 2968
     }
2969 2969
 
2970 2970
     /**
2971
-	 * Alias of self::set_total_fees().
2972
-	 *
2973
-	 * @since 1.0.19
2974
-	 * @param  float $value fees total.
2975
-	 */
2976
-	public function set_fees_total( $value ) {
2977
-		$this->set_total_fees( $value );
2971
+     * Alias of self::set_total_fees().
2972
+     *
2973
+     * @since 1.0.19
2974
+     * @param  float $value fees total.
2975
+     */
2976
+    public function set_fees_total( $value ) {
2977
+        $this->set_total_fees( $value );
2978 2978
     }
2979 2979
 
2980 2980
     /**
2981
-	 * Set the invoice fees.
2982
-	 *
2983
-	 * @since 1.0.19
2984
-	 * @param  array $value fees.
2985
-	 */
2986
-	public function set_fees( $value ) {
2981
+     * Set the invoice fees.
2982
+     *
2983
+     * @since 1.0.19
2984
+     * @param  array $value fees.
2985
+     */
2986
+    public function set_fees( $value ) {
2987 2987
 
2988
-		if ( ! is_array( $value ) ) {
2989
-			$value = array();
2990
-		}
2988
+        if ( ! is_array( $value ) ) {
2989
+            $value = array();
2990
+        }
2991 2991
 
2992
-		$this->set_prop( 'fees', $value );
2992
+        $this->set_prop( 'fees', $value );
2993 2993
 
2994 2994
     }
2995 2995
 
2996 2996
     /**
2997
-	 * Set the invoice taxes.
2998
-	 *
2999
-	 * @since 1.0.19
3000
-	 * @param  array $value taxes.
3001
-	 */
3002
-	public function set_taxes( $value ) {
2997
+     * Set the invoice taxes.
2998
+     *
2999
+     * @since 1.0.19
3000
+     * @param  array $value taxes.
3001
+     */
3002
+    public function set_taxes( $value ) {
3003 3003
 
3004
-		if ( ! is_array( $value ) ) {
3005
-			$value = array();
3006
-		}
3004
+        if ( ! is_array( $value ) ) {
3005
+            $value = array();
3006
+        }
3007 3007
 
3008
-		$this->set_prop( 'taxes', $value );
3008
+        $this->set_prop( 'taxes', $value );
3009 3009
 
3010 3010
     }
3011 3011
 
3012 3012
     /**
3013
-	 * Set the invoice discounts.
3014
-	 *
3015
-	 * @since 1.0.19
3016
-	 * @param  array $value discounts.
3017
-	 */
3018
-	public function set_discounts( $value ) {
3013
+     * Set the invoice discounts.
3014
+     *
3015
+     * @since 1.0.19
3016
+     * @param  array $value discounts.
3017
+     */
3018
+    public function set_discounts( $value ) {
3019 3019
 
3020
-		if ( ! is_array( $value ) ) {
3021
-			$value = array();
3022
-		}
3020
+        if ( ! is_array( $value ) ) {
3021
+            $value = array();
3022
+        }
3023 3023
 
3024
-		$this->set_prop( 'discounts', $value );
3024
+        $this->set_prop( 'discounts', $value );
3025 3025
     }
3026 3026
 
3027 3027
     /**
3028
-	 * Set the invoice items.
3029
-	 *
3030
-	 * @since 1.0.19
3031
-	 * @param  GetPaid_Form_Item[] $value items.
3032
-	 */
3033
-	public function set_items( $value ) {
3028
+     * Set the invoice items.
3029
+     *
3030
+     * @since 1.0.19
3031
+     * @param  GetPaid_Form_Item[] $value items.
3032
+     */
3033
+    public function set_items( $value ) {
3034 3034
 
3035 3035
         // Remove existing items.
3036 3036
         $this->set_prop( 'items', array() );
3037
-		$this->recurring_item = null;
3037
+        $this->recurring_item = null;
3038 3038
 
3039 3039
         // Ensure that we have an array.
3040 3040
         if ( ! is_array( $value ) ) {
@@ -3048,105 +3048,105 @@  discard block
 block discarded – undo
3048 3048
     }
3049 3049
 
3050 3050
     /**
3051
-	 * Set the payment form.
3052
-	 *
3053
-	 * @since 1.0.19
3054
-	 * @param  int $value payment form.
3055
-	 */
3056
-	public function set_payment_form( $value ) {
3057
-		$this->set_prop( 'payment_form', $value );
3051
+     * Set the payment form.
3052
+     *
3053
+     * @since 1.0.19
3054
+     * @param  int $value payment form.
3055
+     */
3056
+    public function set_payment_form( $value ) {
3057
+        $this->set_prop( 'payment_form', $value );
3058 3058
     }
3059 3059
 
3060 3060
     /**
3061
-	 * Set the submission id.
3062
-	 *
3063
-	 * @since 1.0.19
3064
-	 * @param  string $value submission id.
3065
-	 */
3066
-	public function set_submission_id( $value ) {
3067
-		$this->set_prop( 'submission_id', $value );
3061
+     * Set the submission id.
3062
+     *
3063
+     * @since 1.0.19
3064
+     * @param  string $value submission id.
3065
+     */
3066
+    public function set_submission_id( $value ) {
3067
+        $this->set_prop( 'submission_id', $value );
3068 3068
     }
3069 3069
 
3070 3070
     /**
3071
-	 * Set the discount code.
3072
-	 *
3073
-	 * @since 1.0.19
3074
-	 * @param  string $value discount code.
3075
-	 */
3076
-	public function set_discount_code( $value ) {
3077
-		$this->set_prop( 'discount_code', sanitize_text_field( $value ) );
3071
+     * Set the discount code.
3072
+     *
3073
+     * @since 1.0.19
3074
+     * @param  string $value discount code.
3075
+     */
3076
+    public function set_discount_code( $value ) {
3077
+        $this->set_prop( 'discount_code', sanitize_text_field( $value ) );
3078 3078
     }
3079 3079
 
3080 3080
     /**
3081
-	 * Set the gateway.
3082
-	 *
3083
-	 * @since 1.0.19
3084
-	 * @param  string $value gateway.
3085
-	 */
3086
-	public function set_gateway( $value ) {
3087
-		$this->set_prop( 'gateway', $value );
3081
+     * Set the gateway.
3082
+     *
3083
+     * @since 1.0.19
3084
+     * @param  string $value gateway.
3085
+     */
3086
+    public function set_gateway( $value ) {
3087
+        $this->set_prop( 'gateway', $value );
3088 3088
     }
3089 3089
 
3090 3090
     /**
3091
-	 * Set the transaction id.
3092
-	 *
3093
-	 * @since 1.0.19
3094
-	 * @param  string $value transaction id.
3095
-	 */
3096
-	public function set_transaction_id( $value ) {
3097
-		if ( ! empty( $value ) ) {
3098
-			$this->set_prop( 'transaction_id', $value );
3099
-		}
3091
+     * Set the transaction id.
3092
+     *
3093
+     * @since 1.0.19
3094
+     * @param  string $value transaction id.
3095
+     */
3096
+    public function set_transaction_id( $value ) {
3097
+        if ( ! empty( $value ) ) {
3098
+            $this->set_prop( 'transaction_id', $value );
3099
+        }
3100 3100
     }
3101 3101
 
3102 3102
     /**
3103
-	 * Set the currency id.
3104
-	 *
3105
-	 * @since 1.0.19
3106
-	 * @param  string $value currency id.
3107
-	 */
3108
-	public function set_currency( $value ) {
3109
-		$this->set_prop( 'currency', $value );
3103
+     * Set the currency id.
3104
+     *
3105
+     * @since 1.0.19
3106
+     * @param  string $value currency id.
3107
+     */
3108
+    public function set_currency( $value ) {
3109
+        $this->set_prop( 'currency', $value );
3110 3110
     }
3111 3111
 
3112
-	/**
3113
-	 * Set whether to disable taxes.
3114
-	 *
3115
-	 * @since 1.0.19
3116
-	 * @param  bool $value value.
3117
-	 */
3118
-	public function set_disable_taxes( $value ) {
3119
-		$this->set_prop( 'disable_taxes', (bool) $value );
3120
-	}
3112
+    /**
3113
+     * Set whether to disable taxes.
3114
+     *
3115
+     * @since 1.0.19
3116
+     * @param  bool $value value.
3117
+     */
3118
+    public function set_disable_taxes( $value ) {
3119
+        $this->set_prop( 'disable_taxes', (bool) $value );
3120
+    }
3121 3121
 
3122 3122
     /**
3123
-	 * Set the subscription id.
3124
-	 *
3125
-	 * @since 1.0.19
3126
-	 * @param  string $value subscription id.
3127
-	 */
3128
-	public function set_subscription_id( $value ) {
3129
-		$this->set_prop( 'subscription_id', $value );
3130
-	}
3123
+     * Set the subscription id.
3124
+     *
3125
+     * @since 1.0.19
3126
+     * @param  string $value subscription id.
3127
+     */
3128
+    public function set_subscription_id( $value ) {
3129
+        $this->set_prop( 'subscription_id', $value );
3130
+    }
3131 3131
 
3132
-	/**
3133
-	 * Set the remote subscription id.
3134
-	 *
3135
-	 * @since 1.0.19
3136
-	 * @param  string $value subscription id.
3137
-	 */
3138
-	public function set_remote_subscription_id( $value ) {
3139
-		$this->set_prop( 'remote_subscription_id', $value );
3132
+    /**
3133
+     * Set the remote subscription id.
3134
+     *
3135
+     * @since 1.0.19
3136
+     * @param  string $value subscription id.
3137
+     */
3138
+    public function set_remote_subscription_id( $value ) {
3139
+        $this->set_prop( 'remote_subscription_id', $value );
3140 3140
     }
3141 3141
 
3142
-	/**
3143
-	 * Set the invoice anonymize status.
3144
-	 *
3145
-	 * @since 2.8.22
3146
-	 * @param  bool $is_anonymized is anonymized.
3147
-	 */
3148
-	public function set_is_anonymized( $is_anonymized ) {
3149
-		$this->set_prop( 'is_anonymized', (bool) $is_anonymized );
3142
+    /**
3143
+     * Set the invoice anonymize status.
3144
+     *
3145
+     * @since 2.8.22
3146
+     * @param  bool $is_anonymized is anonymized.
3147
+     */
3148
+    public function set_is_anonymized( $is_anonymized ) {
3149
+        $this->set_prop( 'is_anonymized', (bool) $is_anonymized );
3150 3150
     }
3151 3151
 
3152 3152
     /*
@@ -3185,24 +3185,24 @@  discard block
 block discarded – undo
3185 3185
      */
3186 3186
     public function is_taxable() {
3187 3187
         return ! $this->get_disable_taxes();
3188
-	}
3188
+    }
3189 3189
 
3190
-	/**
3191
-	 * @deprecated
3192
-	 */
3193
-	public function has_vat() {
3190
+    /**
3191
+     * @deprecated
3192
+     */
3193
+    public function has_vat() {
3194 3194
         return $this->is_taxable();
3195
-	}
3195
+    }
3196 3196
 
3197
-	/**
3198
-	 * Checks to see if the invoice requires payment.
3199
-	 */
3200
-	public function is_free() {
3197
+    /**
3198
+     * Checks to see if the invoice requires payment.
3199
+     */
3200
+    public function is_free() {
3201 3201
         $is_free = ( (float) wpinv_round_amount( $this->get_initial_total() ) == 0 );
3202 3202
 
3203
-		if ( $this->is_recurring() && $this->get_recurring_total() > 0 ) {
3204
-			$is_free = false;
3205
-		}
3203
+        if ( $this->is_recurring() && $this->get_recurring_total() > 0 ) {
3204
+            $is_free = false;
3205
+        }
3206 3206
 
3207 3207
         return apply_filters( 'wpinv_invoice_is_free', $is_free, $this );
3208 3208
     }
@@ -3213,46 +3213,46 @@  discard block
 block discarded – undo
3213 3213
     public function is_paid() {
3214 3214
         $is_paid = $this->has_status( array( 'publish', 'wpi-processing', 'wpi-renewal' ) );
3215 3215
         return apply_filters( 'wpinv_invoice_is_paid', $is_paid, $this );
3216
-	}
3216
+    }
3217 3217
 
3218
-	/**
3218
+    /**
3219 3219
      * Checks if the invoice needs payment.
3220 3220
      */
3221
-	public function needs_payment() {
3222
-		$needs_payment = ! $this->is_paid() && ! $this->is_refunded() && ! $this->is_free();
3221
+    public function needs_payment() {
3222
+        $needs_payment = ! $this->is_paid() && ! $this->is_refunded() && ! $this->is_free();
3223 3223
         return apply_filters( 'wpinv_needs_payment', $needs_payment, $this );
3224 3224
     }
3225 3225
 
3226
-	/**
3226
+    /**
3227 3227
      * Checks if the invoice is refunded.
3228 3228
      */
3229
-	public function is_refunded() {
3229
+    public function is_refunded() {
3230 3230
         $is_refunded = $this->has_status( 'wpi-refunded' );
3231 3231
         return apply_filters( 'wpinv_invoice_is_refunded', $is_refunded, $this );
3232
-	}
3232
+    }
3233 3233
 
3234
-	/**
3234
+    /**
3235 3235
      * Checks if the invoice is held.
3236 3236
      */
3237
-	public function is_held() {
3237
+    public function is_held() {
3238 3238
         $is_held = $this->has_status( 'wpi-onhold' );
3239 3239
         return apply_filters( 'wpinv_invoice_is_held', $is_held, $this );
3240
-	}
3240
+    }
3241 3241
 
3242
-	/**
3242
+    /**
3243 3243
      * Checks if the invoice is due.
3244 3244
      */
3245
-	public function is_due() {
3246
-		$due_date = $this->get_due_date();
3247
-		return empty( $due_date ) ? false : current_time( 'timestamp' ) > strtotime( $due_date );
3248
-	}
3245
+    public function is_due() {
3246
+        $due_date = $this->get_due_date();
3247
+        return empty( $due_date ) ? false : current_time( 'timestamp' ) > strtotime( $due_date );
3248
+    }
3249 3249
 
3250
-	/**
3250
+    /**
3251 3251
      * Checks if the invoice is draft.
3252 3252
      */
3253
-	public function is_draft() {
3253
+    public function is_draft() {
3254 3254
         return $this->has_status( 'draft, auto-draft' );
3255
-	}
3255
+    }
3256 3256
 
3257 3257
     /**
3258 3258
      * Checks if the invoice has a given status.
@@ -3260,9 +3260,9 @@  discard block
 block discarded – undo
3260 3260
     public function has_status( $status ) {
3261 3261
         $status = wpinv_parse_list( $status );
3262 3262
         return apply_filters( 'wpinv_has_status', in_array( $this->get_status(), $status ), $status );
3263
-	}
3263
+    }
3264 3264
 
3265
-	/**
3265
+    /**
3266 3266
      * Checks if the invoice is of a given type.
3267 3267
      */
3268 3268
     public function is_type( $type ) {
@@ -3285,25 +3285,25 @@  discard block
 block discarded – undo
3285 3285
      */
3286 3286
     public function has_free_trial() {
3287 3287
         return $this->is_recurring() && 0 == $this->get_initial_total();
3288
-	}
3288
+    }
3289 3289
 
3290
-	/**
3290
+    /**
3291 3291
      * @deprecated
3292 3292
      */
3293 3293
     public function is_free_trial() {
3294 3294
         return $this->has_free_trial();
3295 3295
     }
3296 3296
 
3297
-	/**
3297
+    /**
3298 3298
      * Check if the initial payment if 0.
3299 3299
      *
3300 3300
      */
3301
-	public function is_initial_free() {
3301
+    public function is_initial_free() {
3302 3302
         $is_initial_free = ! ( (float) wpinv_round_amount( $this->get_initial_total() ) > 0 );
3303 3303
         return apply_filters( 'wpinv_invoice_is_initial_free', $is_initial_free, $this->get_cart_details(), $this );
3304 3304
     }
3305 3305
 
3306
-	/**
3306
+    /**
3307 3307
      * Check if the recurring item has a free trial.
3308 3308
      *
3309 3309
      */
@@ -3316,16 +3316,16 @@  discard block
 block discarded – undo
3316 3316
 
3317 3317
         $item = $this->get_recurring( true );
3318 3318
         return $item->has_free_trial();
3319
-	}
3319
+    }
3320 3320
 
3321
-	/**
3321
+    /**
3322 3322
      * Check if the free trial is a result of a discount.
3323 3323
      */
3324 3324
     public function is_free_trial_from_discount() {
3325
-		return $this->has_free_trial() && ! $this->item_has_free_trial();
3326
-	}
3325
+        return $this->has_free_trial() && ! $this->item_has_free_trial();
3326
+    }
3327 3327
 
3328
-	/**
3328
+    /**
3329 3329
      * Checks if this is an anonymized invoice.
3330 3330
      *
3331 3331
      * @since 2.8.22
@@ -3334,12 +3334,12 @@  discard block
 block discarded – undo
3334 3334
         return true === (bool) $this->get_is_anonymized();
3335 3335
     }
3336 3336
 
3337
-	/**
3337
+    /**
3338 3338
      * @deprecated
3339 3339
      */
3340 3340
     public function discount_first_payment_only() {
3341 3341
 
3342
-		$discount = wpinv_get_discount_obj( $this->get_discount_code() );
3342
+        $discount = wpinv_get_discount_obj( $this->get_discount_code() );
3343 3343
         if ( ! $discount->exists() || ! $this->is_recurring() ) {
3344 3344
             return true;
3345 3345
         }
@@ -3364,146 +3364,146 @@  discard block
 block discarded – undo
3364 3364
      */
3365 3365
     public function add_item( $item ) {
3366 3366
 
3367
-		if ( is_array( $item ) ) {
3368
-			$item = $this->process_array_item( $item );
3369
-		}
3367
+        if ( is_array( $item ) ) {
3368
+            $item = $this->process_array_item( $item );
3369
+        }
3370 3370
 
3371
-		if ( is_numeric( $item ) ) {
3372
-			$item = new GetPaid_Form_Item( $item );
3373
-		}
3371
+        if ( is_numeric( $item ) ) {
3372
+            $item = new GetPaid_Form_Item( $item );
3373
+        }
3374 3374
 
3375 3375
         // Make sure that it is available for purchase.
3376
-		if ( $item->get_id() > 0 && ! $item->can_purchase() ) {
3377
-			return new WP_Error( 'invalid_item', __( 'This item is not available for purchase', 'invoicing' ) );
3376
+        if ( $item->get_id() > 0 && ! $item->can_purchase() ) {
3377
+            return new WP_Error( 'invalid_item', __( 'This item is not available for purchase', 'invoicing' ) );
3378 3378
         }
3379 3379
 
3380 3380
         // Do we have a recurring item?
3381
-		if ( $item->is_recurring() ) {
3382
-			$this->recurring_item = $item->get_id();
3381
+        if ( $item->is_recurring() ) {
3382
+            $this->recurring_item = $item->get_id();
3383 3383
         }
3384 3384
 
3385 3385
         // Invoice id.
3386 3386
         $item->invoice_id = (int) $this->get_id();
3387 3387
 
3388
-		// Remove duplicates.
3389
-		$this->remove_item( $item->get_id() );
3388
+        // Remove duplicates.
3389
+        $this->remove_item( $item->get_id() );
3390 3390
 
3391
-		if ( 0 == $item->get_quantity() ) {
3392
-			return;
3393
-		}
3391
+        if ( 0 == $item->get_quantity() ) {
3392
+            return;
3393
+        }
3394 3394
 
3395
-		// Retrieve all items.
3395
+        // Retrieve all items.
3396 3396
         $items   = $this->get_items();
3397 3397
 
3398
-		// Add new item.
3398
+        // Add new item.
3399 3399
         $items[] = $item;
3400 3400
 
3401 3401
         $this->set_prop( 'items', $items );
3402 3402
 
3403
-		return true;
3404
-	}
3403
+        return true;
3404
+    }
3405 3405
 
3406
-	/**
3407
-	 * Converts an array to an item.
3408
-	 *
3409
-	 * @since 1.0.19
3410
-	 * @return GetPaid_Form_Item
3411
-	 */
3412
-	protected function process_array_item( $array ) {
3406
+    /**
3407
+     * Converts an array to an item.
3408
+     *
3409
+     * @since 1.0.19
3410
+     * @return GetPaid_Form_Item
3411
+     */
3412
+    protected function process_array_item( $array ) {
3413 3413
 
3414
-		$item_id = isset( $array['item_id'] ) ? $array['item_id'] : 0;
3415
-		$item    = new GetPaid_Form_Item( $item_id );
3414
+        $item_id = isset( $array['item_id'] ) ? $array['item_id'] : 0;
3415
+        $item    = new GetPaid_Form_Item( $item_id );
3416 3416
 
3417
-		// Set item data.
3418
-		foreach ( array( 'name', 'price', 'description' ) as $key ) {
3419
-			if ( isset( $array[ "item_$key" ] ) ) {
3420
-				$method = "set_$key";
3421
-				$item->$method( $array[ "item_$key" ] );
3422
-			}
3423
-		}
3417
+        // Set item data.
3418
+        foreach ( array( 'name', 'price', 'description' ) as $key ) {
3419
+            if ( isset( $array[ "item_$key" ] ) ) {
3420
+                $method = "set_$key";
3421
+                $item->$method( $array[ "item_$key" ] );
3422
+            }
3423
+        }
3424 3424
 
3425
-		if ( isset( $array['quantity'] ) ) {
3426
-			$item->set_quantity( $array['quantity'] );
3427
-		}
3425
+        if ( isset( $array['quantity'] ) ) {
3426
+            $item->set_quantity( $array['quantity'] );
3427
+        }
3428 3428
 
3429
-		// Set item meta.
3430
-		if ( isset( $array['meta'] ) && is_array( $array['meta'] ) ) {
3431
-			$item->set_item_meta( $array['meta'] );
3432
-		}
3429
+        // Set item meta.
3430
+        if ( isset( $array['meta'] ) && is_array( $array['meta'] ) ) {
3431
+            $item->set_item_meta( $array['meta'] );
3432
+        }
3433 3433
 
3434
-		return $item;
3434
+        return $item;
3435 3435
 
3436
-	}
3436
+    }
3437 3437
 
3438 3438
     /**
3439
-	 * Retrieves a specific item.
3440
-	 *
3441
-	 * @since 1.0.19
3442
-	 * @return GetPaid_Form_Item|null
3443
-	 */
3444
-	public function get_item( $item_id ) {
3439
+     * Retrieves a specific item.
3440
+     *
3441
+     * @since 1.0.19
3442
+     * @return GetPaid_Form_Item|null
3443
+     */
3444
+    public function get_item( $item_id ) {
3445 3445
 
3446
-		foreach ( $this->get_items() as $item ) {
3447
-			if ( (int) $item_id == $item->get_id() ) {
3448
-				return $item;
3449
-			}
3450
-		}
3446
+        foreach ( $this->get_items() as $item ) {
3447
+            if ( (int) $item_id == $item->get_id() ) {
3448
+                return $item;
3449
+            }
3450
+        }
3451 3451
 
3452
-		return null;
3452
+        return null;
3453 3453
     }
3454 3454
 
3455 3455
     /**
3456
-	 * Removes a specific item.
3457
-	 *
3458
-	 * @since 1.0.19
3459
-	 */
3460
-	public function remove_item( $item_id ) {
3461
-		$items   = $this->get_items();
3462
-		$item_id = (int) $item_id;
3456
+     * Removes a specific item.
3457
+     *
3458
+     * @since 1.0.19
3459
+     */
3460
+    public function remove_item( $item_id ) {
3461
+        $items   = $this->get_items();
3462
+        $item_id = (int) $item_id;
3463 3463
 
3464
-		foreach ( $items as $index => $item ) {
3465
-			if ( (int) $item_id == $item->get_id() ) {
3466
-				unset( $items[ $index ] );
3467
-				$this->set_prop( 'items', $items );
3464
+        foreach ( $items as $index => $item ) {
3465
+            if ( (int) $item_id == $item->get_id() ) {
3466
+                unset( $items[ $index ] );
3467
+                $this->set_prop( 'items', $items );
3468 3468
 
3469
-				if ( $item_id == $this->recurring_item ) {
3470
-					$this->recurring_item = null;
3471
-				}
3469
+                if ( $item_id == $this->recurring_item ) {
3470
+                    $this->recurring_item = null;
3471
+                }
3472 3472
 }
3473
-		}
3473
+        }
3474 3474
 
3475 3475
     }
3476 3476
 
3477 3477
     /**
3478
-	 * Adds a fee to the invoice.
3479
-	 *
3480
-	 * @param array $fee An array of fee details. name, initial_fee, and recurring_fee are required.
3481
-	 * @since 1.0.19
3482
-	 */
3478
+     * Adds a fee to the invoice.
3479
+     *
3480
+     * @param array $fee An array of fee details. name, initial_fee, and recurring_fee are required.
3481
+     * @since 1.0.19
3482
+     */
3483 3483
     public function add_fee( $fee ) {
3484 3484
 
3485
-		$fees                 = $this->get_fees();
3486
-		$fees[ $fee['name'] ] = $fee;
3487
-		$this->set_prop( 'fees', $fees );
3485
+        $fees                 = $this->get_fees();
3486
+        $fees[ $fee['name'] ] = $fee;
3487
+        $this->set_prop( 'fees', $fees );
3488 3488
 
3489 3489
     }
3490 3490
 
3491 3491
     /**
3492
-	 * Retrieves a specific fee.
3493
-	 *
3494
-	 * @since 1.0.19
3495
-	 */
3496
-	public function get_fee( $fee ) {
3492
+     * Retrieves a specific fee.
3493
+     *
3494
+     * @since 1.0.19
3495
+     */
3496
+    public function get_fee( $fee ) {
3497 3497
         $fees = $this->get_fees();
3498
-		return isset( $fees[ $fee ] ) ? $fees[ $fee ] : null;
3498
+        return isset( $fees[ $fee ] ) ? $fees[ $fee ] : null;
3499 3499
     }
3500 3500
 
3501 3501
     /**
3502
-	 * Removes a specific fee.
3503
-	 *
3504
-	 * @since 1.0.19
3505
-	 */
3506
-	public function remove_fee( $fee ) {
3502
+     * Removes a specific fee.
3503
+     *
3504
+     * @since 1.0.19
3505
+     */
3506
+    public function remove_fee( $fee ) {
3507 3507
         $fees = $this->get_fees();
3508 3508
         if ( isset( $fees[ $fee ] ) ) {
3509 3509
             unset( $fees[ $fee ] );
@@ -3511,55 +3511,55 @@  discard block
 block discarded – undo
3511 3511
         }
3512 3512
     }
3513 3513
 
3514
-	/**
3515
-	 * Adds a discount to the invoice.
3516
-	 *
3517
-	 * @param array $discount An array of discount details. name, initial_discount, and recurring_discount are required. Include discount_code if the discount is from a discount code.
3518
-	 * @since 1.0.19
3519
-	 */
3520
-	public function add_discount( $discount ) {
3514
+    /**
3515
+     * Adds a discount to the invoice.
3516
+     *
3517
+     * @param array $discount An array of discount details. name, initial_discount, and recurring_discount are required. Include discount_code if the discount is from a discount code.
3518
+     * @since 1.0.19
3519
+     */
3520
+    public function add_discount( $discount ) {
3521 3521
 
3522
-		$discounts = $this->get_discounts();
3523
-		$discounts[ $discount['name'] ] = $discount;
3524
-		$this->set_prop( 'discounts', $discounts );
3522
+        $discounts = $this->get_discounts();
3523
+        $discounts[ $discount['name'] ] = $discount;
3524
+        $this->set_prop( 'discounts', $discounts );
3525 3525
 
3526
-	}
3526
+    }
3527 3527
 
3528 3528
     /**
3529
-	 * Retrieves a specific discount.
3530
-	 *
3531
-	 * @since 1.0.19
3532
-	 * @return float
3533
-	 */
3534
-	public function get_discount( $discount = false ) {
3529
+     * Retrieves a specific discount.
3530
+     *
3531
+     * @since 1.0.19
3532
+     * @return float
3533
+     */
3534
+    public function get_discount( $discount = false ) {
3535 3535
 
3536
-		// Backwards compatibility.
3537
-		if ( empty( $discount ) ) {
3538
-			return $this->get_total_discount();
3539
-		}
3536
+        // Backwards compatibility.
3537
+        if ( empty( $discount ) ) {
3538
+            return $this->get_total_discount();
3539
+        }
3540 3540
 
3541 3541
         $discounts = $this->get_discounts();
3542
-		return isset( $discounts[ $discount ] ) ? $discounts[ $discount ] : null;
3542
+        return isset( $discounts[ $discount ] ) ? $discounts[ $discount ] : null;
3543 3543
     }
3544 3544
 
3545 3545
     /**
3546
-	 * Removes a specific discount.
3547
-	 *
3548
-	 * @since 1.0.19
3549
-	 */
3550
-	public function remove_discount( $discount ) {
3546
+     * Removes a specific discount.
3547
+     *
3548
+     * @since 1.0.19
3549
+     */
3550
+    public function remove_discount( $discount ) {
3551 3551
         $discounts = $this->get_discounts();
3552 3552
         if ( isset( $discounts[ $discount ] ) ) {
3553 3553
             unset( $discounts[ $discount ] );
3554 3554
             $this->set_prop( 'discounts', $discounts );
3555 3555
         }
3556 3556
 
3557
-		if ( 'discount_code' == $discount ) {
3558
-			foreach ( $this->get_items() as $item ) {
3559
-				$item->item_discount           = 0;
3560
-				$item->recurring_item_discount = 0;
3561
-			}
3562
-		}
3557
+        if ( 'discount_code' == $discount ) {
3558
+            foreach ( $this->get_items() as $item ) {
3559
+                $item->item_discount           = 0;
3560
+                $item->recurring_item_discount = 0;
3561
+            }
3562
+        }
3563 3563
 
3564 3564
     }
3565 3565
 
@@ -3572,116 +3572,116 @@  discard block
 block discarded – undo
3572 3572
         if ( $this->is_taxable() ) {
3573 3573
 
3574 3574
             $taxes                 = $this->get_taxes();
3575
-			$taxes[ $tax['name'] ] = $tax;
3576
-			$this->set_prop( 'taxes', $tax );
3575
+            $taxes[ $tax['name'] ] = $tax;
3576
+            $this->set_prop( 'taxes', $tax );
3577 3577
 
3578 3578
         }
3579 3579
     }
3580 3580
 
3581 3581
     /**
3582
-	 * Retrieves a specific tax.
3583
-	 *
3584
-	 * @since 1.0.19
3585
-	 */
3586
-	public function get_tax( $tax = null ) {
3582
+     * Retrieves a specific tax.
3583
+     *
3584
+     * @since 1.0.19
3585
+     */
3586
+    public function get_tax( $tax = null ) {
3587 3587
 
3588
-		// Backwards compatibility.
3589
-		if ( empty( $tax ) ) {
3590
-			return $this->get_total_tax();
3591
-		}
3588
+        // Backwards compatibility.
3589
+        if ( empty( $tax ) ) {
3590
+            return $this->get_total_tax();
3591
+        }
3592 3592
 
3593 3593
         $taxes = $this->get_taxes();
3594
-		return isset( $taxes[ $tax ] ) ? $taxes[ $tax ] : null;
3594
+        return isset( $taxes[ $tax ] ) ? $taxes[ $tax ] : null;
3595 3595
     }
3596 3596
 
3597
-	public function get_tax_total_by_name( $name ) {
3598
-		if ( $name && 0 === strpos( $name, 'tax__' ) ) {
3599
-			$name = str_replace( 'tax__', '', $name );
3600
-		}
3597
+    public function get_tax_total_by_name( $name ) {
3598
+        if ( $name && 0 === strpos( $name, 'tax__' ) ) {
3599
+            $name = str_replace( 'tax__', '', $name );
3600
+        }
3601 3601
 
3602
-		if ( empty( $name ) ) {
3603
-			return 0;
3604
-		}
3602
+        if ( empty( $name ) ) {
3603
+            return 0;
3604
+        }
3605 3605
 
3606
-		$tax = $this->get_tax( $name );
3606
+        $tax = $this->get_tax( $name );
3607 3607
 
3608
-		if ( empty( $tax ) ) {
3609
-			return 0;
3610
-		}
3608
+        if ( empty( $tax ) ) {
3609
+            return 0;
3610
+        }
3611 3611
 
3612 3612
         return $this->is_renewal() ? $tax['recurring_tax'] : $tax['initial_tax'];
3613 3613
     }
3614 3614
 
3615
-	/**
3616
-	 * Get tax item name.
3617
-	 *
3618
-	 * @since 2.8.8
3619
-	 */
3620
-	public function get_tax_item_name( $tax_key, $tax_item, $suffix = '' ) {
3621
-		$tax_name = _x( 'Tax', 'Tax name', 'invoicing' );
3615
+    /**
3616
+     * Get tax item name.
3617
+     *
3618
+     * @since 2.8.8
3619
+     */
3620
+    public function get_tax_item_name( $tax_key, $tax_item, $suffix = '' ) {
3621
+        $tax_name = _x( 'Tax', 'Tax name', 'invoicing' );
3622 3622
 
3623
-		if ( ! empty( $tax_item ) && is_array( $tax_item ) && ! empty( $tax_item['name'] ) ) {
3624
-			$tax_name = __( $tax_item['name'], 'invoicing' );
3625
-		}
3623
+        if ( ! empty( $tax_item ) && is_array( $tax_item ) && ! empty( $tax_item['name'] ) ) {
3624
+            $tax_name = __( $tax_item['name'], 'invoicing' );
3625
+        }
3626 3626
 
3627
-		if ( $suffix ) {
3628
-			$tax_name .= $suffix;
3629
-		}
3627
+        if ( $suffix ) {
3628
+            $tax_name .= $suffix;
3629
+        }
3630 3630
 
3631
-		return apply_filters( 'wpinv_invoice_get_tax_name', $tax_name, $this, $tax_key, $tax_item, $suffix );
3632
-	}
3631
+        return apply_filters( 'wpinv_invoice_get_tax_name', $tax_name, $this, $tax_key, $tax_item, $suffix );
3632
+    }
3633 3633
 
3634
-	/**
3635
-	 * Get tax item amount.
3636
-	 *
3637
-	 * @since 2.8.8
3638
-	 */
3639
-	public function get_tax_item_amount( $tax_key, $tax_item, $with_currency = false ) {
3640
-		$tax_amount = $this->get_tax_total_by_name( $tax_key );
3634
+    /**
3635
+     * Get tax item amount.
3636
+     *
3637
+     * @since 2.8.8
3638
+     */
3639
+    public function get_tax_item_amount( $tax_key, $tax_item, $with_currency = false ) {
3640
+        $tax_amount = $this->get_tax_total_by_name( $tax_key );
3641 3641
 
3642
-		if ( $with_currency ) {
3643
-			$tax_amount = wpinv_price( $tax_amount, $this->get_currency() );
3644
-		}
3642
+        if ( $with_currency ) {
3643
+            $tax_amount = wpinv_price( $tax_amount, $this->get_currency() );
3644
+        }
3645 3645
 
3646
-		return apply_filters( 'wpinv_invoice_get_tax_amount', $tax_amount, $this, $tax_item, $with_currency );
3647
-	}
3646
+        return apply_filters( 'wpinv_invoice_get_tax_amount', $tax_amount, $this, $tax_item, $with_currency );
3647
+    }
3648 3648
 
3649
-	public function get_item_tax_name( $percentage = true, $sep = ' + ' ) {
3650
-		$taxes = $this->get_taxes();
3649
+    public function get_item_tax_name( $percentage = true, $sep = ' + ' ) {
3650
+        $taxes = $this->get_taxes();
3651 3651
 
3652
-		if ( ! empty( $taxes ) && is_array( $taxes ) && count( $taxes ) == 1 && wpinv_display_individual_tax_rates() ) {
3653
-			$names = array();
3652
+        if ( ! empty( $taxes ) && is_array( $taxes ) && count( $taxes ) == 1 && wpinv_display_individual_tax_rates() ) {
3653
+            $names = array();
3654 3654
 
3655
-			foreach ( $taxes as $key => $tax ) {
3656
-				if ( ! empty( $tax ) && ! empty( $tax['name'] ) ) {
3657
-					$name = __( $tax['name'], 'invoicing' );
3655
+            foreach ( $taxes as $key => $tax ) {
3656
+                if ( ! empty( $tax ) && ! empty( $tax['name'] ) ) {
3657
+                    $name = __( $tax['name'], 'invoicing' );
3658 3658
 
3659
-					$names[] = $name;
3660
-				}
3661
-			}
3659
+                    $names[] = $name;
3660
+                }
3661
+            }
3662 3662
 
3663
-			if ( ! empty( $names ) ) {
3664
-				$names = array_unique( $names );
3663
+            if ( ! empty( $names ) ) {
3664
+                $names = array_unique( $names );
3665 3665
 
3666
-				$tax_name = implode( $sep, $names );
3667
-			}
3666
+                $tax_name = implode( $sep, $names );
3667
+            }
3668 3668
 
3669
-			if ( $percentage ) {
3670
-				$tax_name = wp_sprintf( _x( '%s (%%)', 'Tax name with %. Ex: Tax (%)', 'invoicing' ), $tax_name );
3671
-			}
3672
-		} else {
3673
-			$tax_name = $percentage ? __( 'Tax (%)', 'invoicing' ) : _x( 'Tax', 'Tax name', 'invoicing' );
3674
-		}
3669
+            if ( $percentage ) {
3670
+                $tax_name = wp_sprintf( _x( '%s (%%)', 'Tax name with %. Ex: Tax (%)', 'invoicing' ), $tax_name );
3671
+            }
3672
+        } else {
3673
+            $tax_name = $percentage ? __( 'Tax (%)', 'invoicing' ) : _x( 'Tax', 'Tax name', 'invoicing' );
3674
+        }
3675 3675
 
3676
-		return apply_filters( 'wpinv_invoice_get_item_tax_name', $tax_name, $this, $percentage, $sep );
3677
-	}
3676
+        return apply_filters( 'wpinv_invoice_get_item_tax_name', $tax_name, $this, $percentage, $sep );
3677
+    }
3678 3678
 
3679 3679
     /**
3680
-	 * Removes a specific tax.
3681
-	 *
3682
-	 * @since 1.0.19
3683
-	 */
3684
-	public function remove_tax( $tax ) {
3680
+     * Removes a specific tax.
3681
+     *
3682
+     * @since 1.0.19
3683
+     */
3684
+    public function remove_tax( $tax ) {
3685 3685
         $taxes = $this->get_taxes();
3686 3686
         if ( isset( $taxes[ $tax ] ) ) {
3687 3687
             unset( $taxes[ $tax ] );
@@ -3690,193 +3690,193 @@  discard block
 block discarded – undo
3690 3690
     }
3691 3691
 
3692 3692
     /**
3693
-	 * Recalculates the invoice subtotal.
3694
-	 *
3695
-	 * @since 1.0.19
3696
-	 * @return float The recalculated subtotal
3697
-	 */
3698
-	public function recalculate_subtotal() {
3693
+     * Recalculates the invoice subtotal.
3694
+     *
3695
+     * @since 1.0.19
3696
+     * @return float The recalculated subtotal
3697
+     */
3698
+    public function recalculate_subtotal() {
3699 3699
         $items     = $this->get_items();
3700
-		$subtotal  = 0;
3701
-		$recurring = 0;
3700
+        $subtotal  = 0;
3701
+        $recurring = 0;
3702 3702
 
3703 3703
         foreach ( $items as $item ) {
3704
-			$subtotal  += $item->get_sub_total( 'edit' );
3705
-			$recurring += $item->get_recurring_sub_total( 'edit' );
3704
+            $subtotal  += $item->get_sub_total( 'edit' );
3705
+            $recurring += $item->get_recurring_sub_total( 'edit' );
3706 3706
         }
3707 3707
 
3708
-		if ( wpinv_prices_include_tax() ) {
3709
-			$subtotal  = max( 0, $subtotal - $this->totals['tax']['initial'] );
3710
-			$recurring = max( 0, $recurring - $this->totals['tax']['recurring'] );
3711
-		}
3708
+        if ( wpinv_prices_include_tax() ) {
3709
+            $subtotal  = max( 0, $subtotal - $this->totals['tax']['initial'] );
3710
+            $recurring = max( 0, $recurring - $this->totals['tax']['recurring'] );
3711
+        }
3712 3712
 
3713
-		$current = $this->is_renewal() ? $recurring : $subtotal;
3714
-		$this->set_subtotal( $current );
3713
+        $current = $this->is_renewal() ? $recurring : $subtotal;
3714
+        $this->set_subtotal( $current );
3715 3715
 
3716
-		$this->totals['subtotal'] = array(
3717
-			'initial'   => $subtotal,
3718
-			'recurring' => $recurring,
3719
-		);
3716
+        $this->totals['subtotal'] = array(
3717
+            'initial'   => $subtotal,
3718
+            'recurring' => $recurring,
3719
+        );
3720 3720
 
3721 3721
         return $current;
3722 3722
     }
3723 3723
 
3724 3724
     /**
3725
-	 * Recalculates the invoice discount total.
3726
-	 *
3727
-	 * @since 1.0.19
3728
-	 * @return float The recalculated discount
3729
-	 */
3730
-	public function recalculate_total_discount() {
3731
-		// Fix renewal invoice amount when tax + recurring discount applied.
3732
-		if ( $this->is_renewal() && $this->get_discount_code() ) {
3733
-			// Maybe recalculate discount (Pre-GetPaid Fix).
3734
-			$discount = new WPInv_Discount( $this->get_discount_code() );
3735
-
3736
-			if ( $discount->exists() && $discount->is_recurring() ) {
3737
-				getpaid_calculate_invoice_discount( $this, $discount );
3738
-			}
3739
-		}
3725
+     * Recalculates the invoice discount total.
3726
+     *
3727
+     * @since 1.0.19
3728
+     * @return float The recalculated discount
3729
+     */
3730
+    public function recalculate_total_discount() {
3731
+        // Fix renewal invoice amount when tax + recurring discount applied.
3732
+        if ( $this->is_renewal() && $this->get_discount_code() ) {
3733
+            // Maybe recalculate discount (Pre-GetPaid Fix).
3734
+            $discount = new WPInv_Discount( $this->get_discount_code() );
3735
+
3736
+            if ( $discount->exists() && $discount->is_recurring() ) {
3737
+                getpaid_calculate_invoice_discount( $this, $discount );
3738
+            }
3739
+        }
3740 3740
 
3741
-		$discounts = $this->get_discounts();
3742
-		$discount  = 0;
3743
-		$recurring = 0;
3741
+        $discounts = $this->get_discounts();
3742
+        $discount  = 0;
3743
+        $recurring = 0;
3744 3744
 
3745 3745
         foreach ( $discounts as $data ) {
3746
-			$discount  += wpinv_sanitize_amount( $data['initial_discount'] );
3747
-			$recurring += wpinv_sanitize_amount( $data['recurring_discount'] );
3748
-		}
3746
+            $discount  += wpinv_sanitize_amount( $data['initial_discount'] );
3747
+            $recurring += wpinv_sanitize_amount( $data['recurring_discount'] );
3748
+        }
3749 3749
 
3750
-		$current = $this->is_renewal() ? $recurring : $discount;
3750
+        $current = $this->is_renewal() ? $recurring : $discount;
3751 3751
 
3752
-		$this->set_total_discount( $current );
3752
+        $this->set_total_discount( $current );
3753 3753
 
3754
-		$this->totals['discount'] = array(
3755
-			'initial'   => $discount,
3756
-			'recurring' => $recurring,
3757
-		);
3754
+        $this->totals['discount'] = array(
3755
+            'initial'   => $discount,
3756
+            'recurring' => $recurring,
3757
+        );
3758 3758
 
3759
-		return $current;
3759
+        return $current;
3760 3760
 
3761 3761
     }
3762 3762
 
3763 3763
     /**
3764
-	 * Recalculates the invoice tax total.
3765
-	 *
3766
-	 * @since 1.0.19
3767
-	 * @return float The recalculated tax
3768
-	 */
3769
-	public function recalculate_total_tax() {
3764
+     * Recalculates the invoice tax total.
3765
+     *
3766
+     * @since 1.0.19
3767
+     * @return float The recalculated tax
3768
+     */
3769
+    public function recalculate_total_tax() {
3770 3770
 
3771
-		// Maybe disable taxes.
3772
-		$vat_number = $this->get_vat_number();
3773
-		$skip_tax   = GetPaid_Payment_Form_Submission_Taxes::is_eu_transaction( $this->get_country() ) && ! empty( $vat_number );
3771
+        // Maybe disable taxes.
3772
+        $vat_number = $this->get_vat_number();
3773
+        $skip_tax   = GetPaid_Payment_Form_Submission_Taxes::is_eu_transaction( $this->get_country() ) && ! empty( $vat_number );
3774 3774
 
3775
-		if ( wpinv_is_base_country( $this->get_country() ) && 'vat_too' === wpinv_get_option( 'vat_same_country_rule', 'vat_too' ) ) {
3776
-			$skip_tax = false;
3777
-		}
3775
+        if ( wpinv_is_base_country( $this->get_country() ) && 'vat_too' === wpinv_get_option( 'vat_same_country_rule', 'vat_too' ) ) {
3776
+            $skip_tax = false;
3777
+        }
3778 3778
 
3779
-		if ( ! wpinv_use_taxes() || $this->get_disable_taxes() || ! wpinv_is_country_taxable( $this->get_country() ) || $skip_tax ) {
3779
+        if ( ! wpinv_use_taxes() || $this->get_disable_taxes() || ! wpinv_is_country_taxable( $this->get_country() ) || $skip_tax ) {
3780 3780
 
3781
-			$this->totals['tax'] = array(
3782
-				'initial'   => 0,
3783
-				'recurring' => 0,
3784
-			);
3781
+            $this->totals['tax'] = array(
3782
+                'initial'   => 0,
3783
+                'recurring' => 0,
3784
+            );
3785 3785
 
3786
-			$this->tax_rate = 0;
3786
+            $this->tax_rate = 0;
3787 3787
 
3788
-			$this->set_taxes( array() );
3789
-			$current = 0;
3790
-		} else {
3788
+            $this->set_taxes( array() );
3789
+            $current = 0;
3790
+        } else {
3791 3791
 
3792
-			$item_taxes = array();
3792
+            $item_taxes = array();
3793 3793
 
3794
-			foreach ( $this->get_items() as $item ) {
3795
-				$rates    = getpaid_get_item_tax_rates( $item, $this->get_country(), $this->get_state() );
3796
-				$rates    = getpaid_filter_item_tax_rates( $item, $rates );
3797
-				$taxes    = getpaid_calculate_item_taxes( getpaid_get_taxable_amount( $item, false ), $rates );
3798
-				$r_taxes  = getpaid_calculate_item_taxes( getpaid_get_taxable_amount( $item, true ), $rates );
3799
-				foreach ( $taxes as $name => $amount ) {
3800
-					$recurring = isset( $r_taxes[ $name ] ) ? $r_taxes[ $name ] : 0;
3801
-					$tax       = getpaid_prepare_item_tax( $item, $name, $amount, $recurring );
3794
+            foreach ( $this->get_items() as $item ) {
3795
+                $rates    = getpaid_get_item_tax_rates( $item, $this->get_country(), $this->get_state() );
3796
+                $rates    = getpaid_filter_item_tax_rates( $item, $rates );
3797
+                $taxes    = getpaid_calculate_item_taxes( getpaid_get_taxable_amount( $item, false ), $rates );
3798
+                $r_taxes  = getpaid_calculate_item_taxes( getpaid_get_taxable_amount( $item, true ), $rates );
3799
+                foreach ( $taxes as $name => $amount ) {
3800
+                    $recurring = isset( $r_taxes[ $name ] ) ? $r_taxes[ $name ] : 0;
3801
+                    $tax       = getpaid_prepare_item_tax( $item, $name, $amount, $recurring );
3802 3802
 
3803
-					if ( ! isset( $item_taxes[ $name ] ) ) {
3804
-						$item_taxes[ $name ] = $tax;
3805
-						continue;
3806
-					}
3803
+                    if ( ! isset( $item_taxes[ $name ] ) ) {
3804
+                        $item_taxes[ $name ] = $tax;
3805
+                        continue;
3806
+                    }
3807 3807
 
3808
-					$item_taxes[ $name ]['initial_tax']   += $tax['initial_tax'];
3809
-					$item_taxes[ $name ]['recurring_tax'] += $tax['recurring_tax'];
3808
+                    $item_taxes[ $name ]['initial_tax']   += $tax['initial_tax'];
3809
+                    $item_taxes[ $name ]['recurring_tax'] += $tax['recurring_tax'];
3810 3810
 
3811
-				}
3812
-			}
3811
+                }
3812
+            }
3813 3813
 
3814
-			$this->set_taxes( $item_taxes );
3814
+            $this->set_taxes( $item_taxes );
3815 3815
 
3816
-			$initial_tax   = array_sum( wp_list_pluck( $item_taxes, 'initial_tax' ) );
3817
-			$recurring_tax = array_sum( wp_list_pluck( $item_taxes, 'recurring_tax' ) );
3816
+            $initial_tax   = array_sum( wp_list_pluck( $item_taxes, 'initial_tax' ) );
3817
+            $recurring_tax = array_sum( wp_list_pluck( $item_taxes, 'recurring_tax' ) );
3818 3818
 
3819
-			$current = $this->is_renewal() ? $recurring_tax : $initial_tax;
3819
+            $current = $this->is_renewal() ? $recurring_tax : $initial_tax;
3820 3820
 
3821
-			$this->totals['tax'] = array(
3822
-				'initial'   => $initial_tax,
3823
-				'recurring' => $recurring_tax,
3824
-			);
3821
+            $this->totals['tax'] = array(
3822
+                'initial'   => $initial_tax,
3823
+                'recurring' => $recurring_tax,
3824
+            );
3825 3825
 
3826
-		}
3826
+        }
3827 3827
 
3828
-		$this->set_total_tax( $current );
3828
+        $this->set_total_tax( $current );
3829 3829
 
3830
-		return $current;
3830
+        return $current;
3831 3831
 
3832 3832
     }
3833 3833
 
3834 3834
     /**
3835
-	 * Recalculates the invoice fees total.
3836
-	 *
3837
-	 * @since 1.0.19
3838
-	 * @return float The recalculated fee
3839
-	 */
3840
-	public function recalculate_total_fees() {
3841
-		$fees      = $this->get_fees();
3842
-		$fee       = 0;
3843
-		$recurring = 0;
3835
+     * Recalculates the invoice fees total.
3836
+     *
3837
+     * @since 1.0.19
3838
+     * @return float The recalculated fee
3839
+     */
3840
+    public function recalculate_total_fees() {
3841
+        $fees      = $this->get_fees();
3842
+        $fee       = 0;
3843
+        $recurring = 0;
3844 3844
 
3845 3845
         foreach ( $fees as $data ) {
3846
-			$fee       += wpinv_sanitize_amount( $data['initial_fee'] );
3847
-			$recurring += wpinv_sanitize_amount( $data['recurring_fee'] );
3848
-		}
3846
+            $fee       += wpinv_sanitize_amount( $data['initial_fee'] );
3847
+            $recurring += wpinv_sanitize_amount( $data['recurring_fee'] );
3848
+        }
3849 3849
 
3850
-		$current = $this->is_renewal() ? $recurring : $fee;
3851
-		$this->set_total_fees( $current );
3850
+        $current = $this->is_renewal() ? $recurring : $fee;
3851
+        $this->set_total_fees( $current );
3852 3852
 
3853
-		$this->totals['fee'] = array(
3854
-			'initial'   => $fee,
3855
-			'recurring' => $recurring,
3856
-		);
3853
+        $this->totals['fee'] = array(
3854
+            'initial'   => $fee,
3855
+            'recurring' => $recurring,
3856
+        );
3857 3857
 
3858 3858
         $this->set_total_fees( $fee );
3859 3859
         return $current;
3860 3860
     }
3861 3861
 
3862 3862
     /**
3863
-	 * Recalculates the invoice total.
3864
-	 *
3865
-	 * @since 1.0.19
3863
+     * Recalculates the invoice total.
3864
+     *
3865
+     * @since 1.0.19
3866 3866
      * @return float The invoice total
3867
-	 */
3868
-	public function recalculate_total() {
3867
+     */
3868
+    public function recalculate_total() {
3869 3869
         $this->recalculate_total_fees();
3870 3870
         $this->recalculate_total_discount();
3871
-		$this->recalculate_total_tax();
3872
-		$this->recalculate_subtotal();
3873
-		$this->set_total( $this->get_total_tax( 'edit' ) + $this->get_total_fees( 'edit' ) + $this->get_subtotal( 'edit' ) - $this->get_total_discount( 'edit' ) );
3874
-		return $this->get_total();
3875
-	}
3876
-
3877
-	/**
3878
-	 * @deprecated
3879
-	 */
3871
+        $this->recalculate_total_tax();
3872
+        $this->recalculate_subtotal();
3873
+        $this->set_total( $this->get_total_tax( 'edit' ) + $this->get_total_fees( 'edit' ) + $this->get_subtotal( 'edit' ) - $this->get_total_discount( 'edit' ) );
3874
+        return $this->get_total();
3875
+    }
3876
+
3877
+    /**
3878
+     * @deprecated
3879
+     */
3880 3880
     public function recalculate_totals() {
3881 3881
         $this->recalculate_total();
3882 3882
         $this->save( true );
@@ -3890,22 +3890,22 @@  discard block
 block discarded – undo
3890 3890
         return $this->get_data();
3891 3891
     }
3892 3892
 
3893
-	/**
3893
+    /**
3894 3894
      * Adds a system note to an invoice.
3895 3895
      *
3896 3896
      * @param string $note The note being added.
3897
-	 * @return int|false The new note's ID on success, false on failure.
3897
+     * @return int|false The new note's ID on success, false on failure.
3898 3898
      *
3899 3899
      */
3900 3900
     public function add_system_note( $note ) {
3901
-		return $this->add_note( $note, false, false, true );
3902
-	}
3901
+        return $this->add_note( $note, false, false, true );
3902
+    }
3903 3903
 
3904 3904
     /**
3905 3905
      * Adds a note to an invoice.
3906 3906
      *
3907 3907
      * @param string $note The note being added.
3908
-	 * @return int|false The new note's ID on success, false on failure.
3908
+     * @return int|false The new note's ID on success, false on failure.
3909 3909
      *
3910 3910
      */
3911 3911
     public function add_note( $note = '', $customer_type = false, $added_by_user = false, $system = false ) {
@@ -3915,21 +3915,21 @@  discard block
 block discarded – undo
3915 3915
             return false;
3916 3916
         }
3917 3917
 
3918
-		$author       = 'System';
3919
-		$author_email = '[email protected]';
3918
+        $author       = 'System';
3919
+        $author_email = '[email protected]';
3920 3920
 
3921
-		// If this is an admin comment or it has been added by the user.
3922
-		if ( is_user_logged_in() && ( ! $system || $added_by_user ) ) {
3923
-			$user         = get_user_by( 'id', get_current_user_id() );
3921
+        // If this is an admin comment or it has been added by the user.
3922
+        if ( is_user_logged_in() && ( ! $system || $added_by_user ) ) {
3923
+            $user         = get_user_by( 'id', get_current_user_id() );
3924 3924
             $author       = $user->display_name;
3925 3925
             $author_email = $user->user_email;
3926
-		}
3926
+        }
3927 3927
 
3928
-		return getpaid_notes()->add_invoice_note( $this, $note, $author, $author_email, $customer_type );
3928
+        return getpaid_notes()->add_invoice_note( $this, $note, $author, $author_email, $customer_type );
3929 3929
 
3930
-	}
3930
+    }
3931 3931
 
3932
-	/**
3932
+    /**
3933 3933
      * Generates a unique key for the invoice.
3934 3934
      */
3935 3935
     public function generate_key( $string = '' ) {
@@ -3949,113 +3949,113 @@  discard block
 block discarded – undo
3949 3949
             $number = wpinv_get_next_invoice_number( $this->get_post_type() );
3950 3950
         }
3951 3951
 
3952
-		return wpinv_format_invoice_number( $number, $this->get_post_type() );
3953
-
3954
-	}
3955
-
3956
-	/**
3957
-	 * Handle the status transition.
3958
-	 */
3959
-	protected function status_transition() {
3960
-		$status_transition = $this->status_transition;
3961
-
3962
-		// Reset status transition variable.
3963
-		$this->status_transition = false;
3964
-
3965
-		if ( $status_transition ) {
3966
-			try {
3967
-
3968
-				// Fire a hook for the status change.
3969
-				do_action( 'getpaid_invoice_status_' . $status_transition['to'], $this, $status_transition );
3970
-
3971
-				// @deprecated this is deprecated and will be removed in the future.
3972
-				do_action( 'wpinv_status_' . $status_transition['to'], $this->get_id(), $status_transition['from'] );
3973
-
3974
-				if ( ! empty( $status_transition['from'] ) ) {
3975
-
3976
-					/* translators: 1: old invoice status 2: new invoice status */
3977
-					$transition_note = sprintf( __( 'Status changed from %1$s to %2$s.', 'invoicing' ), wpinv_status_nicename( $status_transition['from'], $this ), wpinv_status_nicename( $status_transition['to'], $this ) );
3978
-
3979
-					// Fire another hook.
3980
-					do_action( 'getpaid_invoice_status_' . $status_transition['from'] . '_to_' . $status_transition['to'], $this );
3981
-					do_action( 'getpaid_invoice_status_changed', $this, $status_transition['from'], $status_transition['to'] );
3952
+        return wpinv_format_invoice_number( $number, $this->get_post_type() );
3982 3953
 
3983
-					// @deprecated this is deprecated and will be removed in the future.
3984
-					do_action( 'wpinv_status_' . $status_transition['from'] . '_to_' . $status_transition['to'], $this->get_id(), $status_transition['from'] );
3985
-
3986
-					// Note the transition occurred.
3987
-					$this->add_note( trim( $status_transition['note'] . ' ' . $transition_note ), false, $status_transition['manual'] );
3988
-
3989
-					// Work out if this was for a payment, and trigger a payment_status hook instead.
3990
-					if (
3991
-						in_array( $status_transition['from'], array( 'wpi-cancelled', 'pending', 'wpi-pending', 'wpi-failed', 'wpi-refunded', 'wpi-onhold' ), true )
3992
-						&& in_array( $status_transition['to'], array( 'publish', 'wpi-processing', 'wpi-renewal' ), true )
3993
-					) {
3994
-						do_action( 'getpaid_invoice_payment_status_changed', $this, $status_transition );
3995
-					}
3996
-
3997
-					// Work out if this was for a payment reversal, and trigger a payment_status_reversed hook instead.
3998
-					if (
3999
-						in_array( $status_transition['from'], array( 'publish', 'wpi-processing', 'wpi-renewal' ), true )
4000
-						&& in_array( $status_transition['to'], array( 'wpi-cancelled', 'pending', 'wpi-pending', 'wpi-failed', 'wpi-refunded', 'wpi-onhold' ), true )
4001
-					) {
4002
-						do_action( 'getpaid_invoice_payment_status_reversed', $this, $status_transition );
4003
-					}
4004
-				} else {
4005
-					/* translators: %s: new invoice status */
4006
-					$transition_note = sprintf( __( 'Status set to %s.', 'invoicing' ), wpinv_status_nicename( $status_transition['to'], $this ) );
4007
-
4008
-					// Note the transition occurred.
4009
-					$this->add_note( trim( $status_transition['note'] . ' ' . $transition_note ), 0, $status_transition['manual'] );
3954
+    }
4010 3955
 
4011
-				}
4012
-			} catch ( Exception $e ) {
4013
-				$this->add_note( __( 'Error during status transition.', 'invoicing' ) . ' ' . $e->getMessage() );
4014
-			}
4015
-		}
4016
-	}
3956
+    /**
3957
+     * Handle the status transition.
3958
+     */
3959
+    protected function status_transition() {
3960
+        $status_transition = $this->status_transition;
3961
+
3962
+        // Reset status transition variable.
3963
+        $this->status_transition = false;
3964
+
3965
+        if ( $status_transition ) {
3966
+            try {
3967
+
3968
+                // Fire a hook for the status change.
3969
+                do_action( 'getpaid_invoice_status_' . $status_transition['to'], $this, $status_transition );
3970
+
3971
+                // @deprecated this is deprecated and will be removed in the future.
3972
+                do_action( 'wpinv_status_' . $status_transition['to'], $this->get_id(), $status_transition['from'] );
3973
+
3974
+                if ( ! empty( $status_transition['from'] ) ) {
3975
+
3976
+                    /* translators: 1: old invoice status 2: new invoice status */
3977
+                    $transition_note = sprintf( __( 'Status changed from %1$s to %2$s.', 'invoicing' ), wpinv_status_nicename( $status_transition['from'], $this ), wpinv_status_nicename( $status_transition['to'], $this ) );
3978
+
3979
+                    // Fire another hook.
3980
+                    do_action( 'getpaid_invoice_status_' . $status_transition['from'] . '_to_' . $status_transition['to'], $this );
3981
+                    do_action( 'getpaid_invoice_status_changed', $this, $status_transition['from'], $status_transition['to'] );
3982
+
3983
+                    // @deprecated this is deprecated and will be removed in the future.
3984
+                    do_action( 'wpinv_status_' . $status_transition['from'] . '_to_' . $status_transition['to'], $this->get_id(), $status_transition['from'] );
3985
+
3986
+                    // Note the transition occurred.
3987
+                    $this->add_note( trim( $status_transition['note'] . ' ' . $transition_note ), false, $status_transition['manual'] );
3988
+
3989
+                    // Work out if this was for a payment, and trigger a payment_status hook instead.
3990
+                    if (
3991
+                        in_array( $status_transition['from'], array( 'wpi-cancelled', 'pending', 'wpi-pending', 'wpi-failed', 'wpi-refunded', 'wpi-onhold' ), true )
3992
+                        && in_array( $status_transition['to'], array( 'publish', 'wpi-processing', 'wpi-renewal' ), true )
3993
+                    ) {
3994
+                        do_action( 'getpaid_invoice_payment_status_changed', $this, $status_transition );
3995
+                    }
3996
+
3997
+                    // Work out if this was for a payment reversal, and trigger a payment_status_reversed hook instead.
3998
+                    if (
3999
+                        in_array( $status_transition['from'], array( 'publish', 'wpi-processing', 'wpi-renewal' ), true )
4000
+                        && in_array( $status_transition['to'], array( 'wpi-cancelled', 'pending', 'wpi-pending', 'wpi-failed', 'wpi-refunded', 'wpi-onhold' ), true )
4001
+                    ) {
4002
+                        do_action( 'getpaid_invoice_payment_status_reversed', $this, $status_transition );
4003
+                    }
4004
+                } else {
4005
+                    /* translators: %s: new invoice status */
4006
+                    $transition_note = sprintf( __( 'Status set to %s.', 'invoicing' ), wpinv_status_nicename( $status_transition['to'], $this ) );
4007
+
4008
+                    // Note the transition occurred.
4009
+                    $this->add_note( trim( $status_transition['note'] . ' ' . $transition_note ), 0, $status_transition['manual'] );
4010
+
4011
+                }
4012
+            } catch ( Exception $e ) {
4013
+                $this->add_note( __( 'Error during status transition.', 'invoicing' ) . ' ' . $e->getMessage() );
4014
+            }
4015
+        }
4016
+    }
4017 4017
 
4018
-	/**
4019
-	 * Updates an invoice status.
4020
-	 */
4021
-	public function update_status( $new_status = false, $note = '', $manual = false ) {
4018
+    /**
4019
+     * Updates an invoice status.
4020
+     */
4021
+    public function update_status( $new_status = false, $note = '', $manual = false ) {
4022 4022
 
4023
-		// Fires before updating a status.
4024
-		do_action( 'wpinv_before_invoice_status_change', $this->get_id(), $new_status, $this->get_status( 'edit' ) );
4023
+        // Fires before updating a status.
4024
+        do_action( 'wpinv_before_invoice_status_change', $this->get_id(), $new_status, $this->get_status( 'edit' ) );
4025 4025
 
4026
-		// Update the status.
4027
-		$this->set_status( $new_status, $note, $manual );
4026
+        // Update the status.
4027
+        $this->set_status( $new_status, $note, $manual );
4028 4028
 
4029
-		// Save the order.
4030
-		return $this->save();
4029
+        // Save the order.
4030
+        return $this->save();
4031 4031
 
4032
-	}
4032
+    }
4033 4033
 
4034
-	/**
4035
-	 * @deprecated
4036
-	 */
4037
-	public function refresh_item_ids() {
4034
+    /**
4035
+     * @deprecated
4036
+     */
4037
+    public function refresh_item_ids() {
4038 4038
         $item_ids = implode( ',', array_unique( wp_list_pluck( $this->get_cart_details(), 'item_id' ) ) );
4039 4039
         update_post_meta( $this->get_id(), '_wpinv_item_ids', $item_ids );
4040
-	}
4040
+    }
4041 4041
 
4042
-	/**
4043
-	 * @deprecated
4044
-	 */
4045
-	public function update_items( $temp = false ) {
4042
+    /**
4043
+     * @deprecated
4044
+     */
4045
+    public function update_items( $temp = false ) {
4046 4046
 
4047
-		$this->set_items( $this->get_items() );
4047
+        $this->set_items( $this->get_items() );
4048 4048
 
4049
-		if ( ! $temp ) {
4050
-			$this->save();
4051
-		}
4049
+        if ( ! $temp ) {
4050
+            $this->save();
4051
+        }
4052 4052
 
4053 4053
         return $this;
4054
-	}
4054
+    }
4055 4055
 
4056
-	/**
4057
-	 * @deprecated
4058
-	 */
4056
+    /**
4057
+     * @deprecated
4058
+     */
4059 4059
     public function validate_discount() {
4060 4060
 
4061 4061
         $discount_code = $this->get_discount_code();
@@ -4071,101 +4071,101 @@  discard block
 block discarded – undo
4071 4071
 
4072 4072
     }
4073 4073
 
4074
-	/**
4075
-	 * Refunds an invoice.
4076
-	 */
4074
+    /**
4075
+     * Refunds an invoice.
4076
+     */
4077 4077
     public function refund() {
4078
-		$this->set_status( 'wpi-refunded' );
4078
+        $this->set_status( 'wpi-refunded' );
4079 4079
         $this->save();
4080
-	}
4080
+    }
4081 4081
 
4082
-	/**
4083
-	 * Marks an invoice as paid.
4084
-	 *
4085
-	 * @param string $transaction_id
4086
-	 */
4082
+    /**
4083
+     * Marks an invoice as paid.
4084
+     *
4085
+     * @param string $transaction_id
4086
+     */
4087 4087
     public function mark_paid( $transaction_id = null, $note = '' ) {
4088 4088
 
4089
-		// Set the transaction id.
4090
-		if ( empty( $transaction_id ) ) {
4091
-			$transaction_id = $this->generate_key( 'trans_' );
4092
-		}
4089
+        // Set the transaction id.
4090
+        if ( empty( $transaction_id ) ) {
4091
+            $transaction_id = $this->generate_key( 'trans_' );
4092
+        }
4093 4093
 
4094
-		if ( ! $this->get_transaction_id() ) {
4095
-			$this->set_transaction_id( $transaction_id );
4096
-		}
4094
+        if ( ! $this->get_transaction_id() ) {
4095
+            $this->set_transaction_id( $transaction_id );
4096
+        }
4097 4097
 
4098
-		if ( $this->is_paid() && 'wpi-processing' !== $this->get_status() ) {
4099
-			return $this->save();
4100
-		}
4098
+        if ( $this->is_paid() && 'wpi-processing' !== $this->get_status() ) {
4099
+            return $this->save();
4100
+        }
4101 4101
 
4102
-		// Set the completed date.
4103
-		$this->set_date_completed( current_time( 'mysql' ) );
4102
+        // Set the completed date.
4103
+        $this->set_date_completed( current_time( 'mysql' ) );
4104 4104
 
4105
-		// Set the new status.
4106
-		$gateway = sanitize_text_field( $this->get_gateway_title() );
4107
-		if ( $this->is_renewal() || ! $this->is_parent() ) {
4105
+        // Set the new status.
4106
+        $gateway = sanitize_text_field( $this->get_gateway_title() );
4107
+        if ( $this->is_renewal() || ! $this->is_parent() ) {
4108 4108
 
4109
-			$_note = wp_sprintf( __( 'Renewed via %s', 'invoicing' ), $gateway );
4110
-			$_note = $_note . empty( $note ) ? '' : " ($note)";
4109
+            $_note = wp_sprintf( __( 'Renewed via %s', 'invoicing' ), $gateway );
4110
+            $_note = $_note . empty( $note ) ? '' : " ($note)";
4111 4111
 
4112
-			if ( 'none' == $this->get_gateway() ) {
4113
-				$_note = $note;
4114
-			}
4112
+            if ( 'none' == $this->get_gateway() ) {
4113
+                $_note = $note;
4114
+            }
4115 4115
 
4116
-			$this->set_status( 'wpi-renewal', $_note );
4116
+            $this->set_status( 'wpi-renewal', $_note );
4117 4117
 
4118
-		} else {
4118
+        } else {
4119 4119
 
4120
-			$_note = wp_sprintf( __( 'Paid via %s', 'invoicing' ), $gateway );
4121
-			$_note = $_note . empty( $note ) ? '' : " ($note)";
4120
+            $_note = wp_sprintf( __( 'Paid via %s', 'invoicing' ), $gateway );
4121
+            $_note = $_note . empty( $note ) ? '' : " ($note)";
4122 4122
 
4123
-			if ( 'none' == $this->get_gateway() ) {
4124
-				$_note = $note;
4125
-			}
4123
+            if ( 'none' == $this->get_gateway() ) {
4124
+                $_note = $note;
4125
+            }
4126 4126
 
4127
-			$this->set_status( 'publish', $_note );
4127
+            $this->set_status( 'publish', $_note );
4128 4128
 
4129
-		}
4129
+        }
4130 4130
 
4131
-		// Set checkout mode.
4132
-		$mode = wpinv_is_test_mode( $this->get_gateway() ) ? 'test' : 'live';
4133
-		$this->set_mode( $mode );
4131
+        // Set checkout mode.
4132
+        $mode = wpinv_is_test_mode( $this->get_gateway() ) ? 'test' : 'live';
4133
+        $this->set_mode( $mode );
4134 4134
 
4135
-		// Save the invoice.
4135
+        // Save the invoice.
4136 4136
         $this->save();
4137
-	}
4138
-
4139
-	/**
4140
-	 * Save data to the database.
4141
-	 *
4142
-	 * @since 1.0.19
4143
-	 * @return int invoice ID
4144
-	 */
4145
-	public function save() {
4146
-		$this->maybe_set_date_paid();
4147
-		$this->maybe_set_key();
4148
-		parent::save();
4149
-		$this->clear_cache();
4150
-		$this->status_transition();
4151
-		return $this->get_id();
4152
-	}
4153
-
4154
-	/**
4137
+    }
4138
+
4139
+    /**
4140
+     * Save data to the database.
4141
+     *
4142
+     * @since 1.0.19
4143
+     * @return int invoice ID
4144
+     */
4145
+    public function save() {
4146
+        $this->maybe_set_date_paid();
4147
+        $this->maybe_set_key();
4148
+        parent::save();
4149
+        $this->clear_cache();
4150
+        $this->status_transition();
4151
+        return $this->get_id();
4152
+    }
4153
+
4154
+    /**
4155 4155
      * Clears the subscription's cache.
4156 4156
      */
4157 4157
     public function clear_cache() {
4158
-		if ( $this->get_key() ) {
4159
-			wp_cache_delete( $this->get_key(), 'getpaid_invoice_keys_to_invoice_ids' );
4160
-		}
4161
-
4162
-		if ( $this->get_number() ) {
4163
-			wp_cache_delete( $this->get_number(), 'getpaid_invoice_numbers_to_invoice_ids' );
4164
-		}
4165
-
4166
-		if ( $this->get_transaction_id() ) {
4167
-			wp_cache_delete( $this->get_transaction_id(), 'getpaid_invoice_transaction_ids_to_invoice_ids' );
4168
-		}
4169
-	}
4158
+        if ( $this->get_key() ) {
4159
+            wp_cache_delete( $this->get_key(), 'getpaid_invoice_keys_to_invoice_ids' );
4160
+        }
4161
+
4162
+        if ( $this->get_number() ) {
4163
+            wp_cache_delete( $this->get_number(), 'getpaid_invoice_numbers_to_invoice_ids' );
4164
+        }
4165
+
4166
+        if ( $this->get_transaction_id() ) {
4167
+            wp_cache_delete( $this->get_transaction_id(), 'getpaid_invoice_transaction_ids_to_invoice_ids' );
4168
+        }
4169
+    }
4170 4170
 
4171 4171
 }
Please login to merge, or discard this patch.
includes/gateways/class-getpaid-bank-transfer-gateway.php 1 patch
Indentation   +363 added lines, -363 removed lines patch added patch discarded remove patch
@@ -13,47 +13,47 @@  discard block
 block discarded – undo
13 13
 class GetPaid_Bank_Transfer_Gateway extends GetPaid_Payment_Gateway {
14 14
 
15 15
     /**
16
-	 * Payment method id.
17
-	 *
18
-	 * @var string
19
-	 */
16
+     * Payment method id.
17
+     *
18
+     * @var string
19
+     */
20 20
     public $id = 'bank_transfer';
21 21
 
22
-	/**
23
-	 * An array of features that this gateway supports.
24
-	 *
25
-	 * @var array
26
-	 */
27
-	protected $supports = array(
28
-		'subscription',
29
-		'addons',
30
-		'single_subscription_group',
31
-		'multiple_subscription_groups',
32
-		'subscription_date_change',
33
-		'subscription_bill_times_change',
34
-	);
22
+    /**
23
+     * An array of features that this gateway supports.
24
+     *
25
+     * @var array
26
+     */
27
+    protected $supports = array(
28
+        'subscription',
29
+        'addons',
30
+        'single_subscription_group',
31
+        'multiple_subscription_groups',
32
+        'subscription_date_change',
33
+        'subscription_bill_times_change',
34
+    );
35
+
36
+    /**
37
+     * Payment method order.
38
+     *
39
+     * @var int
40
+     */
41
+    public $order = 8;
42
+
43
+    /**
44
+     * Bank transfer instructions.
45
+     */
46
+    public $instructions;
35 47
 
36 48
     /**
37
-	 * Payment method order.
38
-	 *
39
-	 * @var int
40
-	 */
41
-	public $order = 8;
42
-
43
-	/**
44
-	 * Bank transfer instructions.
45
-	 */
46
-	public $instructions;
47
-
48
-	/**
49
-	 * Locale array.
50
-	 */
51
-	public $locale;
49
+     * Locale array.
50
+     */
51
+    public $locale;
52 52
 
53 53
     /**
54
-	 * Class constructor.
55
-	 */
56
-	public function __construct() {
54
+     * Class constructor.
55
+     */
56
+    public function __construct() {
57 57
         parent::__construct();
58 58
 
59 59
         $this->title                = __( 'Direct bank transfer', 'invoicing' );
@@ -61,43 +61,43 @@  discard block
 block discarded – undo
61 61
         $this->checkout_button_text = __( 'Proceed', 'invoicing' );
62 62
         $this->instructions         = apply_filters( 'wpinv_bank_instructions', $this->get_option( 'info' ) );
63 63
 
64
-		add_action( 'wpinv_receipt_end', array( $this, 'thankyou_page' ) );
65
-		add_action( 'getpaid_invoice_line_items', array( $this, 'thankyou_page' ), 40 );
66
-		add_action( 'wpinv_pdf_content_billing', array( $this, 'thankyou_page' ), 11 );
67
-		add_action( 'wpinv_email_invoice_details', array( $this, 'email_instructions' ), 10, 3 );
68
-		add_action( 'getpaid_should_renew_subscription', array( $this, 'maybe_renew_subscription' ), 12, 2 );
69
-		add_action( 'getpaid_invoice_status_publish', array( $this, 'invoice_paid' ), 20 );
70
-
71
-		add_filter( 'wpinv_' . $this->id . '_support_subscription', array( $this, 'supports_subscription' ), 20, 1 );
72
-		add_filter( 'getpaid_' . $this->id . '_support_subscription', array( $this, 'supports_subscription' ), 20, 1 );
73
-		add_filter( 'getpaid_' . $this->id . '_supports_subscription', array( $this, 'supports_subscription' ), 20, 1 );
74
-	}
75
-
76
-	/**
77
-	 * Check gateway supports for subscription.
78
-	 *
79
-	 * @since 2.8.24
80
-	 *
81
-	 * @param bool $supports True if supports else False.
82
-	 * @return bool True if supports else False.
83
-	 */
84
-	public function supports_subscription( $supports ) {
85
-		if ( $supports && (int) $this->get_option( 'no_subscription' ) ) {
86
-			$supports = false;
87
-		}
88
-
89
-		return $supports;
90
-	}
91
-
92
-	/**
93
-	 * Process Payment.
94
-	 *
95
-	 * @param WPInv_Invoice $invoice Invoice.
96
-	 * @param array $submission_data Posted checkout fields.
97
-	 * @param GetPaid_Payment_Form_Submission $submission Checkout submission.
98
-	 * @return array
99
-	 */
100
-	public function process_payment( $invoice, $submission_data, $submission ) {
64
+        add_action( 'wpinv_receipt_end', array( $this, 'thankyou_page' ) );
65
+        add_action( 'getpaid_invoice_line_items', array( $this, 'thankyou_page' ), 40 );
66
+        add_action( 'wpinv_pdf_content_billing', array( $this, 'thankyou_page' ), 11 );
67
+        add_action( 'wpinv_email_invoice_details', array( $this, 'email_instructions' ), 10, 3 );
68
+        add_action( 'getpaid_should_renew_subscription', array( $this, 'maybe_renew_subscription' ), 12, 2 );
69
+        add_action( 'getpaid_invoice_status_publish', array( $this, 'invoice_paid' ), 20 );
70
+
71
+        add_filter( 'wpinv_' . $this->id . '_support_subscription', array( $this, 'supports_subscription' ), 20, 1 );
72
+        add_filter( 'getpaid_' . $this->id . '_support_subscription', array( $this, 'supports_subscription' ), 20, 1 );
73
+        add_filter( 'getpaid_' . $this->id . '_supports_subscription', array( $this, 'supports_subscription' ), 20, 1 );
74
+    }
75
+
76
+    /**
77
+     * Check gateway supports for subscription.
78
+     *
79
+     * @since 2.8.24
80
+     *
81
+     * @param bool $supports True if supports else False.
82
+     * @return bool True if supports else False.
83
+     */
84
+    public function supports_subscription( $supports ) {
85
+        if ( $supports && (int) $this->get_option( 'no_subscription' ) ) {
86
+            $supports = false;
87
+        }
88
+
89
+        return $supports;
90
+    }
91
+
92
+    /**
93
+     * Process Payment.
94
+     *
95
+     * @param WPInv_Invoice $invoice Invoice.
96
+     * @param array $submission_data Posted checkout fields.
97
+     * @param GetPaid_Payment_Form_Submission $submission Checkout submission.
98
+     * @return array
99
+     */
100
+    public function process_payment( $invoice, $submission_data, $submission ) {
101 101
 
102 102
         // Add a transaction id.
103 103
         $invoice->set_transaction_id( $invoice->generate_key( 'bt_' ) );
@@ -118,66 +118,66 @@  discard block
 block discarded – undo
118 118
     }
119 119
 
120 120
     /**
121
-	 * Output for the order received page.
122
-	 *
123
-	 * @param WPInv_Invoice $invoice Invoice.
124
-	 */
125
-	public function thankyou_page( $invoice ) {
121
+     * Output for the order received page.
122
+     *
123
+     * @param WPInv_Invoice $invoice Invoice.
124
+     */
125
+    public function thankyou_page( $invoice ) {
126 126
 
127 127
         if ( 'bank_transfer' === $invoice->get_gateway() && $invoice->needs_payment() ) {
128 128
 
129
-			echo '<div class="mt-4 mb-2 getpaid-bank-transfer-details">' . PHP_EOL;
129
+            echo '<div class="mt-4 mb-2 getpaid-bank-transfer-details">' . PHP_EOL;
130 130
 
131 131
             if ( ! empty( $this->instructions ) ) {
132 132
                 echo wp_kses_post( wpautop( wptexturize( $this->instructions ) ) );
133
-			}
133
+            }
134 134
 
135
-			$this->bank_details( $invoice );
135
+            $this->bank_details( $invoice );
136 136
 
137
-			echo '</div>';
137
+            echo '</div>';
138 138
 
139 139
         }
140 140
 
141
-	}
141
+    }
142 142
 
143 143
     /**
144
-	 * Add content to the WPI emails.
145
-	 *
146
-	 * @param WPInv_Invoice $invoice Invoice.
147
-	 * @param string     $email_type Email format: plain text or HTML.
148
-	 * @param bool     $sent_to_admin Sent to admin.
149
-	 */
150
-	public function email_instructions( $invoice, $email_type, $sent_to_admin ) {
144
+     * Add content to the WPI emails.
145
+     *
146
+     * @param WPInv_Invoice $invoice Invoice.
147
+     * @param string     $email_type Email format: plain text or HTML.
148
+     * @param bool     $sent_to_admin Sent to admin.
149
+     */
150
+    public function email_instructions( $invoice, $email_type, $sent_to_admin ) {
151 151
 
152
-		if ( ! $sent_to_admin && 'bank_transfer' === $invoice->get_gateway() && $invoice->needs_payment() ) {
152
+        if ( ! $sent_to_admin && 'bank_transfer' === $invoice->get_gateway() && $invoice->needs_payment() ) {
153 153
 
154
-			echo '<div class="wpi-email-row getpaid-bank-transfer-details">';
154
+            echo '<div class="wpi-email-row getpaid-bank-transfer-details">';
155 155
 
156
-			if ( $this->instructions ) {
157
-				echo wp_kses_post( wpautop( wptexturize( $this->instructions ) ) . PHP_EOL );
156
+            if ( $this->instructions ) {
157
+                echo wp_kses_post( wpautop( wptexturize( $this->instructions ) ) . PHP_EOL );
158 158
             }
159 159
 
160
-			$this->bank_details( $invoice );
160
+            $this->bank_details( $invoice );
161 161
 
162
-			echo '</div>';
162
+            echo '</div>';
163 163
 
164
-		}
164
+        }
165 165
 
166 166
     }
167 167
 
168 168
     /**
169
-	 * Get bank details and place into a list format.
170
-	 *
171
-	 * @param WPInv_Invoice $invoice Invoice.
172
-	 */
173
-	protected function bank_details( $invoice ) {
169
+     * Get bank details and place into a list format.
170
+     *
171
+     * @param WPInv_Invoice $invoice Invoice.
172
+     */
173
+    protected function bank_details( $invoice ) {
174 174
 
175
-		// Get the invoice country and country $locale.
176
-		$country = $invoice->get_country();
177
-		$locale  = $this->get_country_locale();
175
+        // Get the invoice country and country $locale.
176
+        $country = $invoice->get_country();
177
+        $locale  = $this->get_country_locale();
178 178
 
179
-		// Get shortcode label in the $locale array and use appropriate one.
180
-		$sortcode = isset( $locale[ $country ]['sortcode']['label'] ) ? $locale[ $country ]['sortcode']['label'] : __( 'Sort code', 'invoicing' );
179
+        // Get shortcode label in the $locale array and use appropriate one.
180
+        $sortcode = isset( $locale[ $country ]['sortcode']['label'] ) ? $locale[ $country ]['sortcode']['label'] : __( 'Sort code', 'invoicing' );
181 181
 
182 182
         $bank_fields = array(
183 183
             'ac_name'   => __( 'Account Name', 'invoicing' ),
@@ -196,11 +196,11 @@  discard block
 block discarded – undo
196 196
 
197 197
             if ( ! empty( $value ) ) {
198 198
                 $bank_info[ $field ] = array(
199
-					'label' => $label,
200
-					'value' => $value,
201
-				);
199
+                    'label' => $label,
200
+                    'value' => $value,
201
+                );
202 202
             }
203
-		}
203
+        }
204 204
 
205 205
         $bank_info = apply_filters( 'wpinv_bank_info', $bank_info, $invoice );
206 206
 
@@ -208,177 +208,177 @@  discard block
 block discarded – undo
208 208
             return;
209 209
         }
210 210
 
211
-		echo '<h3 class="getpaid-bank-transfer-title"> ' . esc_html( apply_filters( 'wpinv_receipt_bank_details_title', __( 'Bank Details', 'invoicing' ), $invoice ) ) . '</h3>' . PHP_EOL;
211
+        echo '<h3 class="getpaid-bank-transfer-title"> ' . esc_html( apply_filters( 'wpinv_receipt_bank_details_title', __( 'Bank Details', 'invoicing' ), $invoice ) ) . '</h3>' . PHP_EOL;
212
+
213
+        echo '<table class="table table-bordered getpaid-bank-transfer-details">' . PHP_EOL;
214
+
215
+        foreach ( $bank_info as $key => $data ) {
216
+            echo "<tr class='getpaid-bank-transfer-" . esc_attr( $key ) . "'><th class='font-weight-bold'>" . wp_kses_post( $data['label'] ) . "</th><td class='w-75'>" . wp_kses_post( wptexturize( $data['value'] ) ) . '</td></tr>' . PHP_EOL;
217
+        }
218
+
219
+        echo '</table>';
220
+
221
+    }
222
+
223
+    /**
224
+     * Get country locale if localized.
225
+     *
226
+     * @return array
227
+     */
228
+    public function get_country_locale() {
229
+
230
+        if ( empty( $this->locale ) ) {
231
+
232
+            // Locale information to be used - only those that are not 'Sort Code'.
233
+            $this->locale = apply_filters(
234
+                'getpaid_get_bank_transfer_locale',
235
+                array(
236
+                    'AU' => array(
237
+                        'sortcode' => array(
238
+                            'label' => __( 'BSB', 'invoicing' ),
239
+                        ),
240
+                    ),
241
+                    'CA' => array(
242
+                        'sortcode' => array(
243
+                            'label' => __( 'Bank transit number', 'invoicing' ),
244
+                        ),
245
+                    ),
246
+                    'IN' => array(
247
+                        'sortcode' => array(
248
+                            'label' => __( 'IFSC', 'invoicing' ),
249
+                        ),
250
+                    ),
251
+                    'IT' => array(
252
+                        'sortcode' => array(
253
+                            'label' => __( 'Branch sort', 'invoicing' ),
254
+                        ),
255
+                    ),
256
+                    'NZ' => array(
257
+                        'sortcode' => array(
258
+                            'label' => __( 'Bank code', 'invoicing' ),
259
+                        ),
260
+                    ),
261
+                    'SE' => array(
262
+                        'sortcode' => array(
263
+                            'label' => __( 'Bank code', 'invoicing' ),
264
+                        ),
265
+                    ),
266
+                    'US' => array(
267
+                        'sortcode' => array(
268
+                            'label' => __( 'Routing number', 'invoicing' ),
269
+                        ),
270
+                    ),
271
+                    'ZA' => array(
272
+                        'sortcode' => array(
273
+                            'label' => __( 'Branch code', 'invoicing' ),
274
+                        ),
275
+                    ),
276
+                )
277
+            );
278
+
279
+        }
280
+
281
+        return $this->locale;
282
+
283
+    }
284
+
285
+    /**
286
+     * Filters the gateway settings.
287
+     *
288
+     * @param array $admin_settings
289
+     */
290
+    public function admin_settings( $admin_settings ) {
291
+        $admin_settings['bank_transfer_desc']['std']    = __( "Make your payment directly into our bank account. Please use your Invoice Number as the payment reference. Your invoice won't be processed until the funds have cleared in our account.", 'invoicing' );
292
+        $admin_settings['bank_transfer_active']['desc'] = __( 'Enable bank transfer', 'invoicing' );
293
+
294
+        $_settings = array();
295
+
296
+        foreach ( $admin_settings as $key => $setting ) {
297
+            $_settings[ $key ] = $setting;
298
+
299
+            if ( $key == 'bank_transfer_active' ) {
300
+                // Enable/disable subscriptions setting.
301
+                $_settings['bank_transfer_no_subscription'] = array(
302
+                    'id' => 'bank_transfer_no_subscription',
303
+                    'type' => 'checkbox',
304
+                    'name' => __( 'Disable Subscriptions', 'invoicing' ),
305
+                    'desc' => __( 'Tick to disable support for recurring items.', 'invoicing' ),
306
+                    'std' => 0
307
+                );
308
+            }
309
+        }
310
+
311
+        $admin_settings = $_settings;
312
+
313
+        $locale  = $this->get_country_locale();
314
+
315
+        // Get sortcode label in the $locale array and use appropriate one.
316
+        $country  = wpinv_default_billing_country();
317
+        $sortcode = isset( $locale[ $country ]['sortcode']['label'] ) ? $locale[ $country ]['sortcode']['label'] : __( 'Sort code', 'invoicing' );
318
+
319
+        $admin_settings['bank_transfer_ac_name'] = array(
320
+            'type' => 'text',
321
+            'id'   => 'bank_transfer_ac_name',
322
+            'name' => __( 'Account Name', 'invoicing' ),
323
+        );
324
+
325
+        $admin_settings['bank_transfer_ac_no'] = array(
326
+            'type' => 'text',
327
+            'id'   => 'bank_transfer_ac_no',
328
+            'name' => __( 'Account Number', 'invoicing' ),
329
+        );
330
+
331
+        $admin_settings['bank_transfer_bank_name'] = array(
332
+            'type' => 'text',
333
+            'id'   => 'bank_transfer_bank_name',
334
+            'name' => __( 'Bank Name', 'invoicing' ),
335
+        );
212 336
 
213
-		echo '<table class="table table-bordered getpaid-bank-transfer-details">' . PHP_EOL;
337
+        $admin_settings['bank_transfer_ifsc'] = array(
338
+            'type' => 'text',
339
+            'id'   => 'bank_transfer_ifsc',
340
+            'name' => __( 'IFSC Code', 'invoicing' ),
341
+        );
342
+
343
+        $admin_settings['bank_transfer_iban'] = array(
344
+            'type' => 'text',
345
+            'id'   => 'bank_transfer_iban',
346
+            'name' => __( 'IBAN', 'invoicing' ),
347
+        );
348
+
349
+        $admin_settings['bank_transfer_bic'] = array(
350
+            'type' => 'text',
351
+            'id'   => 'bank_transfer_bic',
352
+            'name' => __( 'BIC/Swift Code', 'invoicing' ),
353
+        );
214 354
 
215
-		foreach ( $bank_info as $key => $data ) {
216
-			echo "<tr class='getpaid-bank-transfer-" . esc_attr( $key ) . "'><th class='font-weight-bold'>" . wp_kses_post( $data['label'] ) . "</th><td class='w-75'>" . wp_kses_post( wptexturize( $data['value'] ) ) . '</td></tr>' . PHP_EOL;
217
-		}
355
+        $admin_settings['bank_transfer_sort_code'] = array(
356
+            'type' => 'text',
357
+            'id'   => 'bank_transfer_sort_code',
358
+            'name' => $sortcode,
359
+        );
218 360
 
219
-		echo '</table>';
361
+        $admin_settings['bank_transfer_info'] = array(
362
+            'id'   => 'bank_transfer_info',
363
+            'name' => __( 'Instructions', 'invoicing' ),
364
+            'desc' => __( 'Instructions that will be added to the thank you page and emails.', 'invoicing' ),
365
+            'type' => 'textarea',
366
+            'std'  => __( "Make your payment directly into our bank account. Please use your Invoice Number as the payment reference. Your invoice won't be processed until the funds have cleared in our account.", 'invoicing' ),
367
+            'cols' => 50,
368
+            'rows' => 5,
369
+        );
220 370
 
371
+        return $admin_settings;
221 372
     }
222 373
 
223 374
     /**
224
-	 * Get country locale if localized.
225
-	 *
226
-	 * @return array
227
-	 */
228
-	public function get_country_locale() {
229
-
230
-		if ( empty( $this->locale ) ) {
231
-
232
-			// Locale information to be used - only those that are not 'Sort Code'.
233
-			$this->locale = apply_filters(
234
-				'getpaid_get_bank_transfer_locale',
235
-				array(
236
-					'AU' => array(
237
-						'sortcode' => array(
238
-							'label' => __( 'BSB', 'invoicing' ),
239
-						),
240
-					),
241
-					'CA' => array(
242
-						'sortcode' => array(
243
-							'label' => __( 'Bank transit number', 'invoicing' ),
244
-						),
245
-					),
246
-					'IN' => array(
247
-						'sortcode' => array(
248
-							'label' => __( 'IFSC', 'invoicing' ),
249
-						),
250
-					),
251
-					'IT' => array(
252
-						'sortcode' => array(
253
-							'label' => __( 'Branch sort', 'invoicing' ),
254
-						),
255
-					),
256
-					'NZ' => array(
257
-						'sortcode' => array(
258
-							'label' => __( 'Bank code', 'invoicing' ),
259
-						),
260
-					),
261
-					'SE' => array(
262
-						'sortcode' => array(
263
-							'label' => __( 'Bank code', 'invoicing' ),
264
-						),
265
-					),
266
-					'US' => array(
267
-						'sortcode' => array(
268
-							'label' => __( 'Routing number', 'invoicing' ),
269
-						),
270
-					),
271
-					'ZA' => array(
272
-						'sortcode' => array(
273
-							'label' => __( 'Branch code', 'invoicing' ),
274
-						),
275
-					),
276
-				)
277
-			);
278
-
279
-		}
280
-
281
-		return $this->locale;
282
-
283
-	}
284
-
285
-	/**
286
-	 * Filters the gateway settings.
287
-	 *
288
-	 * @param array $admin_settings
289
-	 */
290
-	public function admin_settings( $admin_settings ) {
291
-		$admin_settings['bank_transfer_desc']['std']    = __( "Make your payment directly into our bank account. Please use your Invoice Number as the payment reference. Your invoice won't be processed until the funds have cleared in our account.", 'invoicing' );
292
-		$admin_settings['bank_transfer_active']['desc'] = __( 'Enable bank transfer', 'invoicing' );
293
-
294
-		$_settings = array();
295
-
296
-		foreach ( $admin_settings as $key => $setting ) {
297
-			$_settings[ $key ] = $setting;
298
-
299
-			if ( $key == 'bank_transfer_active' ) {
300
-				// Enable/disable subscriptions setting.
301
-				$_settings['bank_transfer_no_subscription'] = array(
302
-					'id' => 'bank_transfer_no_subscription',
303
-					'type' => 'checkbox',
304
-					'name' => __( 'Disable Subscriptions', 'invoicing' ),
305
-					'desc' => __( 'Tick to disable support for recurring items.', 'invoicing' ),
306
-					'std' => 0
307
-				);
308
-			}
309
-		}
310
-
311
-		$admin_settings = $_settings;
312
-
313
-		$locale  = $this->get_country_locale();
314
-
315
-		// Get sortcode label in the $locale array and use appropriate one.
316
-		$country  = wpinv_default_billing_country();
317
-		$sortcode = isset( $locale[ $country ]['sortcode']['label'] ) ? $locale[ $country ]['sortcode']['label'] : __( 'Sort code', 'invoicing' );
318
-
319
-		$admin_settings['bank_transfer_ac_name'] = array(
320
-			'type' => 'text',
321
-			'id'   => 'bank_transfer_ac_name',
322
-			'name' => __( 'Account Name', 'invoicing' ),
323
-		);
324
-
325
-		$admin_settings['bank_transfer_ac_no'] = array(
326
-			'type' => 'text',
327
-			'id'   => 'bank_transfer_ac_no',
328
-			'name' => __( 'Account Number', 'invoicing' ),
329
-		);
330
-
331
-		$admin_settings['bank_transfer_bank_name'] = array(
332
-			'type' => 'text',
333
-			'id'   => 'bank_transfer_bank_name',
334
-			'name' => __( 'Bank Name', 'invoicing' ),
335
-		);
336
-
337
-		$admin_settings['bank_transfer_ifsc'] = array(
338
-			'type' => 'text',
339
-			'id'   => 'bank_transfer_ifsc',
340
-			'name' => __( 'IFSC Code', 'invoicing' ),
341
-		);
342
-
343
-		$admin_settings['bank_transfer_iban'] = array(
344
-			'type' => 'text',
345
-			'id'   => 'bank_transfer_iban',
346
-			'name' => __( 'IBAN', 'invoicing' ),
347
-		);
348
-
349
-		$admin_settings['bank_transfer_bic'] = array(
350
-			'type' => 'text',
351
-			'id'   => 'bank_transfer_bic',
352
-			'name' => __( 'BIC/Swift Code', 'invoicing' ),
353
-		);
354
-
355
-		$admin_settings['bank_transfer_sort_code'] = array(
356
-			'type' => 'text',
357
-			'id'   => 'bank_transfer_sort_code',
358
-			'name' => $sortcode,
359
-		);
360
-
361
-		$admin_settings['bank_transfer_info'] = array(
362
-			'id'   => 'bank_transfer_info',
363
-			'name' => __( 'Instructions', 'invoicing' ),
364
-			'desc' => __( 'Instructions that will be added to the thank you page and emails.', 'invoicing' ),
365
-			'type' => 'textarea',
366
-			'std'  => __( "Make your payment directly into our bank account. Please use your Invoice Number as the payment reference. Your invoice won't be processed until the funds have cleared in our account.", 'invoicing' ),
367
-			'cols' => 50,
368
-			'rows' => 5,
369
-		);
370
-
371
-		return $admin_settings;
372
-	}
373
-
374
-	/**
375
-	 * Processes invoice addons.
376
-	 *
377
-	 * @param WPInv_Invoice $invoice
378
-	 * @param GetPaid_Form_Item[] $items
379
-	 * @return WPInv_Invoice
380
-	 */
381
-	public function process_addons( $invoice, $items ) {
375
+     * Processes invoice addons.
376
+     *
377
+     * @param WPInv_Invoice $invoice
378
+     * @param GetPaid_Form_Item[] $items
379
+     * @return WPInv_Invoice
380
+     */
381
+    public function process_addons( $invoice, $items ) {
382 382
 
383 383
         foreach ( $items as $item ) {
384 384
             $invoice->add_item( $item );
@@ -386,98 +386,98 @@  discard block
 block discarded – undo
386 386
 
387 387
         $invoice->recalculate_total();
388 388
         $invoice->save();
389
-	}
390
-
391
-	/**
392
-	 * (Maybe) renews a bank transfer subscription profile.
393
-	 *
394
-	 *
395
-	 * @param WPInv_Subscription $subscription
396
-	 */
397
-	public function maybe_renew_subscription( $subscription, $parent_invoice ) {
398
-		// Ensure its our subscription && it's active.
399
-		if ( ! empty( $parent_invoice ) && $this->id === $parent_invoice->get_gateway() && $subscription->has_status( 'active trialling' ) ) {
400
-			add_filter( 'getpaid_invoice_notifications_is_payment_form_invoice', array( $this, 'force_is_payment_form_invoice' ), 10, 2 );
401
-
402
-			$invoice = $subscription->create_payment();
403
-
404
-			if ( ! empty( $invoice ) ) {
405
-				$is_logged_in = is_user_logged_in();
406
-
407
-				// Cron run.
408
-				if ( ! $is_logged_in ) {
409
-					$note = wp_sprintf( __( 'Renewal %1$s created with the status "%2$s".', 'invoicing' ), $invoice->get_invoice_quote_type(), wpinv_status_nicename( $invoice->get_status(), $invoice ) );
410
-
411
-					$invoice->add_note( $note, false, $is_logged_in, ! $is_logged_in );
412
-				}
413
-			}
414
-
415
-			remove_filter( 'getpaid_invoice_notifications_is_payment_form_invoice', array( $this, 'force_is_payment_form_invoice' ), 10, 2 );
416
-		}
417
-	}
418
-
419
-	/**
420
-	 * Process a bank transfer payment.
421
-	 *
422
-	 *
389
+    }
390
+
391
+    /**
392
+     * (Maybe) renews a bank transfer subscription profile.
393
+     *
394
+     *
395
+     * @param WPInv_Subscription $subscription
396
+     */
397
+    public function maybe_renew_subscription( $subscription, $parent_invoice ) {
398
+        // Ensure its our subscription && it's active.
399
+        if ( ! empty( $parent_invoice ) && $this->id === $parent_invoice->get_gateway() && $subscription->has_status( 'active trialling' ) ) {
400
+            add_filter( 'getpaid_invoice_notifications_is_payment_form_invoice', array( $this, 'force_is_payment_form_invoice' ), 10, 2 );
401
+
402
+            $invoice = $subscription->create_payment();
403
+
404
+            if ( ! empty( $invoice ) ) {
405
+                $is_logged_in = is_user_logged_in();
406
+
407
+                // Cron run.
408
+                if ( ! $is_logged_in ) {
409
+                    $note = wp_sprintf( __( 'Renewal %1$s created with the status "%2$s".', 'invoicing' ), $invoice->get_invoice_quote_type(), wpinv_status_nicename( $invoice->get_status(), $invoice ) );
410
+
411
+                    $invoice->add_note( $note, false, $is_logged_in, ! $is_logged_in );
412
+                }
413
+            }
414
+
415
+            remove_filter( 'getpaid_invoice_notifications_is_payment_form_invoice', array( $this, 'force_is_payment_form_invoice' ), 10, 2 );
416
+        }
417
+    }
418
+
419
+    /**
420
+     * Process a bank transfer payment.
421
+     *
422
+     *
423 423
      * @param WPInv_Invoice $invoice
424
-	 */
425
-	public function invoice_paid( $invoice ) {
426
-
427
-		// Abort if not paid by bank transfer.
428
-		if ( $this->id !== $invoice->get_gateway() || ! $invoice->is_recurring() ) {
429
-			return;
430
-		}
431
-
432
-		// Is it a parent payment?
433
-		if ( 0 == $invoice->get_parent_id() ) {
434
-
435
-			// (Maybe) activate subscriptions.
436
-			$subscriptions = getpaid_get_invoice_subscriptions( $invoice );
437
-
438
-			if ( ! empty( $subscriptions ) ) {
439
-				$subscriptions = is_array( $subscriptions ) ? $subscriptions : array( $subscriptions );
440
-
441
-				foreach ( $subscriptions as $subscription ) {
442
-					if ( $subscription->exists() ) {
443
-						$duration = strtotime( $subscription->get_expiration() ) - strtotime( $subscription->get_date_created() );
444
-						$expiry   = gmdate( 'Y-m-d H:i:s', ( current_time( 'timestamp' ) + $duration ) );
445
-
446
-						$subscription->set_next_renewal_date( $expiry );
447
-						$subscription->set_date_created( current_time( 'mysql' ) );
448
-						$subscription->set_profile_id( 'bt_sub_' . $invoice->get_id() . '_' . $subscription->get_id() );
449
-						$subscription->activate();
450
-					}
451
-				}
452
-			}
453
-		} else {
454
-
455
-			$subscription = getpaid_get_subscription( $invoice->get_subscription_id() );
456
-
457
-			// Renew the subscription.
458
-			if ( $subscription && $subscription->exists() ) {
459
-				$subscription->add_payment( array(), $invoice );
460
-				$subscription->renew( strtotime( $invoice->get_date_created() ) );
461
-			}
462
-		}
424
+     */
425
+    public function invoice_paid( $invoice ) {
426
+
427
+        // Abort if not paid by bank transfer.
428
+        if ( $this->id !== $invoice->get_gateway() || ! $invoice->is_recurring() ) {
429
+            return;
430
+        }
431
+
432
+        // Is it a parent payment?
433
+        if ( 0 == $invoice->get_parent_id() ) {
434
+
435
+            // (Maybe) activate subscriptions.
436
+            $subscriptions = getpaid_get_invoice_subscriptions( $invoice );
437
+
438
+            if ( ! empty( $subscriptions ) ) {
439
+                $subscriptions = is_array( $subscriptions ) ? $subscriptions : array( $subscriptions );
440
+
441
+                foreach ( $subscriptions as $subscription ) {
442
+                    if ( $subscription->exists() ) {
443
+                        $duration = strtotime( $subscription->get_expiration() ) - strtotime( $subscription->get_date_created() );
444
+                        $expiry   = gmdate( 'Y-m-d H:i:s', ( current_time( 'timestamp' ) + $duration ) );
445
+
446
+                        $subscription->set_next_renewal_date( $expiry );
447
+                        $subscription->set_date_created( current_time( 'mysql' ) );
448
+                        $subscription->set_profile_id( 'bt_sub_' . $invoice->get_id() . '_' . $subscription->get_id() );
449
+                        $subscription->activate();
450
+                    }
451
+                }
452
+            }
453
+        } else {
454
+
455
+            $subscription = getpaid_get_subscription( $invoice->get_subscription_id() );
456
+
457
+            // Renew the subscription.
458
+            if ( $subscription && $subscription->exists() ) {
459
+                $subscription->add_payment( array(), $invoice );
460
+                $subscription->renew( strtotime( $invoice->get_date_created() ) );
461
+            }
462
+        }
463 463
 
464 464
     }
465 465
 
466
-	/**
467
-	 * Force created from payment false to allow email for auto renewal generation invoice.
468
-	 *
469
-	 * @since 2.8.11
470
-	 *
471
-	 * @param bool $is_payment_form_invoice True when invoice created via payment form else false.
472
-	 * @param int  $invoice Invoice ID.
473
-	 * @return bool True when invoice created via payment form else false.
474
-	 */
475
-	public function force_is_payment_form_invoice( $is_payment_form_invoice, $invoice ) {
476
-		if ( $is_payment_form_invoice ) {
477
-			$is_payment_form_invoice = false;
478
-		}
479
-
480
-		return $is_payment_form_invoice;
481
-	}
466
+    /**
467
+     * Force created from payment false to allow email for auto renewal generation invoice.
468
+     *
469
+     * @since 2.8.11
470
+     *
471
+     * @param bool $is_payment_form_invoice True when invoice created via payment form else false.
472
+     * @param int  $invoice Invoice ID.
473
+     * @return bool True when invoice created via payment form else false.
474
+     */
475
+    public function force_is_payment_form_invoice( $is_payment_form_invoice, $invoice ) {
476
+        if ( $is_payment_form_invoice ) {
477
+            $is_payment_form_invoice = false;
478
+        }
479
+
480
+        return $is_payment_form_invoice;
481
+    }
482 482
 
483 483
 }
Please login to merge, or discard this patch.