Passed
Push — master ( c2a68e...bcea1f )
by Stiofan
03:51
created
includes/api/class-wpinv-rest-discounts-controller.php 2 patches
Indentation   +970 added lines, -970 removed lines patch added patch discarded remove patch
@@ -20,91 +20,91 @@  discard block
 block discarded – undo
20 20
 class WPInv_REST_Discounts_Controller extends WP_REST_Posts_Controller {
21 21
 
22 22
     /**
23
-	 * Post type.
24
-	 *
25
-	 * @var string
26
-	 */
27
-	protected $post_type = 'wpi_discount';
23
+     * Post type.
24
+     *
25
+     * @var string
26
+     */
27
+    protected $post_type = 'wpi_discount';
28 28
 	
29
-	/**
30
-	 * Cached results of get_item_schema.
31
-	 *
32
-	 * @since 1.0.13
33
-	 * @var array
34
-	 */
35
-	protected $schema;
29
+    /**
30
+     * Cached results of get_item_schema.
31
+     *
32
+     * @since 1.0.13
33
+     * @var array
34
+     */
35
+    protected $schema;
36 36
 
37 37
     /**
38
-	 * Constructor.
39
-	 *
40
-	 * @since 1.0.13
41
-	 *
42
-	 * @param string $namespace Api Namespace
43
-	 */
44
-	public function __construct( $namespace ) {
38
+     * Constructor.
39
+     *
40
+     * @since 1.0.13
41
+     *
42
+     * @param string $namespace Api Namespace
43
+     */
44
+    public function __construct( $namespace ) {
45 45
         
46 46
         // Set api namespace...
47
-		$this->namespace = $namespace;
47
+        $this->namespace = $namespace;
48 48
 
49 49
         // ... and the rest base
50 50
         $this->rest_base = 'discounts';
51 51
 		
52 52
     }
53 53
 	
54
-	/**
55
-	 * Registers the routes for the objects of the controller.
56
-	 *
57
-	 * @since 1.0.13
58
-	 *
59
-	 * @see register_rest_route()
60
-	 */
61
-	public function register_routes() {
62
-
63
-		parent::register_routes();
64
-
65
-		register_rest_route(
66
-			$this->namespace,
67
-			'/' . $this->rest_base . '/discount-types',
68
-			array(
69
-				array(
70
-					'methods'             => WP_REST_Server::READABLE,
71
-					'callback'            => array( $this, 'get_discount_types' ),
72
-				),
73
-			)
74
-		);
75
-
76
-	}
54
+    /**
55
+     * Registers the routes for the objects of the controller.
56
+     *
57
+     * @since 1.0.13
58
+     *
59
+     * @see register_rest_route()
60
+     */
61
+    public function register_routes() {
62
+
63
+        parent::register_routes();
64
+
65
+        register_rest_route(
66
+            $this->namespace,
67
+            '/' . $this->rest_base . '/discount-types',
68
+            array(
69
+                array(
70
+                    'methods'             => WP_REST_Server::READABLE,
71
+                    'callback'            => array( $this, 'get_discount_types' ),
72
+                ),
73
+            )
74
+        );
75
+
76
+    }
77 77
 
78 78
     /**
79
-	 * Checks if a given request has access to read discounts.
79
+     * Checks if a given request has access to read discounts.
80 80
      * 
81
-	 *
82
-	 * @since 1.0.13
83
-	 *
84
-	 * @param WP_REST_Request $request Full details about the request.
85
-	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
86
-	 */
87
-	public function get_items_permissions_check( $request ) {
81
+     *
82
+     * @since 1.0.13
83
+     *
84
+     * @param WP_REST_Request $request Full details about the request.
85
+     * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
86
+     */
87
+    public function get_items_permissions_check( $request ) {
88 88
 	
89
-		if ( wpinv_current_user_can_manage_invoicing() ) {
90
-			return true;
91
-		}
89
+        if ( wpinv_current_user_can_manage_invoicing() ) {
90
+            return true;
91
+        }
92 92
 
93
-		return new WP_Error( 'rest_forbidden_context', __( 'Sorry, you are not allowed to view invoice discounts.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
93
+        return new WP_Error( 'rest_forbidden_context', __( 'Sorry, you are not allowed to view invoice discounts.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
94 94
 
95 95
     }
96 96
     
97 97
     /**
98
-	 * Retrieves a collection of discounts.
99
-	 *
100
-	 * @since 1.0.13
101
-	 *
102
-	 * @param WP_REST_Request $request Full details about the request.
103
-	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
104
-	 */
105
-	public function get_items( $request ) {
98
+     * Retrieves a collection of discounts.
99
+     *
100
+     * @since 1.0.13
101
+     *
102
+     * @param WP_REST_Request $request Full details about the request.
103
+     * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
104
+     */
105
+    public function get_items( $request ) {
106 106
 		
107
-		// Retrieve the list of registered item query parameters.
107
+        // Retrieve the list of registered item query parameters.
108 108
         $registered = $this->get_collection_params();
109 109
         
110 110
         $args       = array();
@@ -115,52 +115,52 @@  discard block
 block discarded – undo
115 115
                 $args[ $key ] = $request[ $key];
116 116
             }
117 117
 
118
-		} 
119
-
120
-		/**
121
-		 * Filters the wpinv_get_all_discounts arguments for discounts rest requests.
122
-		 *
123
-		 *
124
-		 * @since 1.0.13
125
-		 *
126
-		 *
127
-		 * @param array           $args    Key value array of query var to query value.
128
-		 * @param WP_REST_Request $request The request used.
129
-		 */
118
+        } 
119
+
120
+        /**
121
+         * Filters the wpinv_get_all_discounts arguments for discounts rest requests.
122
+         *
123
+         *
124
+         * @since 1.0.13
125
+         *
126
+         *
127
+         * @param array           $args    Key value array of query var to query value.
128
+         * @param WP_REST_Request $request The request used.
129
+         */
130 130
         $args       = apply_filters( "wpinv_rest_get_discounts_arguments", $args, $request, $this );
131 131
 		
132
-		// Special args
133
-		$args[ 'return' ]   = 'objects';
134
-		$args[ 'paginate' ] = true;
132
+        // Special args
133
+        $args[ 'return' ]   = 'objects';
134
+        $args[ 'paginate' ] = true;
135 135
 
136 136
         // Run the query.
137
-		$query = wpinv_get_all_discounts( $args );
137
+        $query = wpinv_get_all_discounts( $args );
138 138
 		
139
-		// Prepare the retrieved discounts
140
-		$discounts = array();
141
-		foreach( $query->discounts as $discount ) {
142
-
143
-			$data       = $this->prepare_item_for_response( $discount, $request );
144
-			$discounts[]    = $this->prepare_response_for_collection( $data );
145
-
146
-		}
147
-
148
-		// Prepare the response.
149
-		$response = rest_ensure_response( $discounts );
150
-		$response->header( 'X-WP-Total', (int) $query->total );
151
-		$response->header( 'X-WP-TotalPages', (int) $query->max_num_pages );
152
-
153
-		/**
154
-		 * Filters the responses for discount requests.
155
-		 *
156
-		 *
157
-		 * @since 1.0.13
158
-		 *
159
-		 *
160
-		 * @param arrWP_REST_Response $response    Response object.
161
-		 * @param WP_REST_Request     $request The request used.
139
+        // Prepare the retrieved discounts
140
+        $discounts = array();
141
+        foreach( $query->discounts as $discount ) {
142
+
143
+            $data       = $this->prepare_item_for_response( $discount, $request );
144
+            $discounts[]    = $this->prepare_response_for_collection( $data );
145
+
146
+        }
147
+
148
+        // Prepare the response.
149
+        $response = rest_ensure_response( $discounts );
150
+        $response->header( 'X-WP-Total', (int) $query->total );
151
+        $response->header( 'X-WP-TotalPages', (int) $query->max_num_pages );
152
+
153
+        /**
154
+         * Filters the responses for discount requests.
155
+         *
156
+         *
157
+         * @since 1.0.13
158
+         *
159
+         *
160
+         * @param arrWP_REST_Response $response    Response object.
161
+         * @param WP_REST_Request     $request The request used.
162 162
          * @param array               $args Array of args used to retrieve the discounts
163
-		 */
163
+         */
164 164
         $response       = apply_filters( "wpinv_rest_discounts_response", $response, $request, $args );
165 165
 
166 166
         return rest_ensure_response( $response );
@@ -168,25 +168,25 @@  discard block
 block discarded – undo
168 168
     }
169 169
 
170 170
     /**
171
-	 * Get the post, if the ID is valid.
172
-	 *
173
-	 * @since 1.0.13
174
-	 *
175
-	 * @param int $discount_id Supplied ID.
176
-	 * @return WP_Post|WP_Error Post object if ID is valid, WP_Error otherwise.
177
-	 */
178
-	protected function get_post( $discount_id ) {
171
+     * Get the post, if the ID is valid.
172
+     *
173
+     * @since 1.0.13
174
+     *
175
+     * @param int $discount_id Supplied ID.
176
+     * @return WP_Post|WP_Error Post object if ID is valid, WP_Error otherwise.
177
+     */
178
+    protected function get_post( $discount_id ) {
179 179
 		
180
-		$error     = new WP_Error( 'rest_item_invalid_id', __( 'Invalid discount ID.', 'invoicing' ), array( 'status' => 404 ) );
180
+        $error     = new WP_Error( 'rest_item_invalid_id', __( 'Invalid discount ID.', 'invoicing' ), array( 'status' => 404 ) );
181 181
 
182 182
         // Ids start from 1
183 183
         if ( (int) $discount_id <= 0 ) {
184
-			return $error;
185
-		}
184
+            return $error;
185
+        }
186 186
 
187
-		$discount = wpinv_get_discount( (int) $discount_id );
188
-		if ( empty( $discount ) ) {
189
-			return $error;
187
+        $discount = wpinv_get_discount( (int) $discount_id );
188
+        if ( empty( $discount ) ) {
189
+            return $error;
190 190
         }
191 191
 
192 192
         return $discount;
@@ -194,25 +194,25 @@  discard block
 block discarded – undo
194 194
     }
195 195
 
196 196
     /**
197
-	 * Checks if a given request has access to read a discount.
198
-	 *
199
-	 * @since 1.0.13
200
-	 *
201
-	 * @param WP_REST_Request $request Full details about the request.
202
-	 * @return bool|WP_Error True if the request has read access for the invoice item, WP_Error object otherwise.
203
-	 */
204
-	public function get_item_permissions_check( $request ) {
197
+     * Checks if a given request has access to read a discount.
198
+     *
199
+     * @since 1.0.13
200
+     *
201
+     * @param WP_REST_Request $request Full details about the request.
202
+     * @return bool|WP_Error True if the request has read access for the invoice item, WP_Error object otherwise.
203
+     */
204
+    public function get_item_permissions_check( $request ) {
205 205
 
206 206
         // Retrieve the discount object.
207 207
         $discount = $this->get_post( $request['id'] );
208 208
         
209 209
         // Ensure it is valid.
210
-		if ( is_wp_error( $discount ) ) {
211
-			return $discount;
212
-		}
210
+        if ( is_wp_error( $discount ) ) {
211
+            return $discount;
212
+        }
213 213
 
214
-		if ( ! wpinv_current_user_can_manage_invoicing() ) {
215
-			return new WP_Error(
214
+        if ( ! wpinv_current_user_can_manage_invoicing() ) {
215
+            return new WP_Error(
216 216
                 'rest_cannot_view', 
217 217
                 __( 'Sorry, you are not allowed to view this discount.', 'invoicing' ), 
218 218
                 array( 
@@ -221,40 +221,40 @@  discard block
 block discarded – undo
221 221
             );
222 222
         }
223 223
 
224
-		return true;
224
+        return true;
225 225
     }
226 226
     
227 227
     /**
228
-	 * Retrieves a single invoice item.
229
-	 *
230
-	 * @since 1.0.13
231
-	 *
232
-	 * @param WP_REST_Request $request Full details about the request.
233
-	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
234
-	 */
235
-	public function get_item( $request ) {
228
+     * Retrieves a single invoice item.
229
+     *
230
+     * @since 1.0.13
231
+     *
232
+     * @param WP_REST_Request $request Full details about the request.
233
+     * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
234
+     */
235
+    public function get_item( $request ) {
236 236
 
237 237
         // Fetch the discount.
238 238
         $discount = $this->get_post( $request['id'] );
239 239
         
240 240
         // Abort early if it does not exist
241
-		if ( is_wp_error( $discount ) ) {
242
-			return $discount;
243
-		}
244
-
245
-		// Prepare the response
246
-		$response = $this->prepare_item_for_response( $discount, $request );
247
-
248
-		/**
249
-		 * Filters the responses for single discount requests.
250
-		 *
251
-		 *
252
-		 * @since 1.0.13
253
-		 * @var WP_HTTP_Response
254
-		 *
255
-		 * @param WP_HTTP_Response $response Response.
256
-		 * @param WP_REST_Request  $request The request used.
257
-		 */
241
+        if ( is_wp_error( $discount ) ) {
242
+            return $discount;
243
+        }
244
+
245
+        // Prepare the response
246
+        $response = $this->prepare_item_for_response( $discount, $request );
247
+
248
+        /**
249
+         * Filters the responses for single discount requests.
250
+         *
251
+         *
252
+         * @since 1.0.13
253
+         * @var WP_HTTP_Response
254
+         *
255
+         * @param WP_HTTP_Response $response Response.
256
+         * @param WP_REST_Request  $request The request used.
257
+         */
258 258
         $response       = apply_filters( "wpinv_rest_get_discount_response", $response, $request );
259 259
 
260 260
         return rest_ensure_response( $response );
@@ -262,26 +262,26 @@  discard block
 block discarded – undo
262 262
     }
263 263
     
264 264
     /**
265
-	 * Checks if a given request has access to create an invoice item.
266
-	 *
267
-	 * @since 1.0.13
268
-	 *
269
-	 * @param WP_REST_Request $request Full details about the request.
270
-	 * @return true|WP_Error True if the request has access to create items, WP_Error object otherwise.
271
-	 */
272
-	public function create_item_permissions_check( $request ) {
265
+     * Checks if a given request has access to create an invoice item.
266
+     *
267
+     * @since 1.0.13
268
+     *
269
+     * @param WP_REST_Request $request Full details about the request.
270
+     * @return true|WP_Error True if the request has access to create items, WP_Error object otherwise.
271
+     */
272
+    public function create_item_permissions_check( $request ) {
273 273
 	
274
-		if ( ! empty( $request['id'] ) ) {
275
-			return new WP_Error( 'rest_item_exists', __( 'Cannot create existing item.', 'invoicing' ), array( 'status' => 400 ) );
276
-		}
274
+        if ( ! empty( $request['id'] ) ) {
275
+            return new WP_Error( 'rest_item_exists', __( 'Cannot create existing item.', 'invoicing' ), array( 'status' => 400 ) );
276
+        }
277 277
 
278
-		if ( wpinv_current_user_can_manage_invoicing() ) {
279
-			return true;
280
-		}
278
+        if ( wpinv_current_user_can_manage_invoicing() ) {
279
+            return true;
280
+        }
281 281
 
282
-		$post_type = get_post_type_object( $this->post_type );
283
-		if ( ! current_user_can( $post_type->cap->create_posts ) ) {
284
-			return new WP_Error( 
282
+        $post_type = get_post_type_object( $this->post_type );
283
+        if ( ! current_user_can( $post_type->cap->create_posts ) ) {
284
+            return new WP_Error( 
285 285
                 'rest_cannot_create', 
286 286
                 __( 'Sorry, you are not allowed to create discounts as this user.', 'invoicing' ), 
287 287
                 array( 
@@ -290,261 +290,261 @@  discard block
 block discarded – undo
290 290
             );
291 291
         }
292 292
 
293
-		return true;
293
+        return true;
294 294
     }
295 295
     
296 296
     /**
297
-	 * Creates a single discount.
298
-	 *
299
-	 * @since 1.0.13
300
-	 *
301
-	 * @param WP_REST_Request $request Full details about the request.
302
-	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
303
-	 */
304
-	public function create_item( $request ) {
305
-
306
-		if ( ! empty( $request['id'] ) ) {
307
-			return new WP_Error( 'rest_item_exists', __( 'Cannot create existing discount.', 'invoicing' ), array( 'status' => 400 ) );
308
-		}
297
+     * Creates a single discount.
298
+     *
299
+     * @since 1.0.13
300
+     *
301
+     * @param WP_REST_Request $request Full details about the request.
302
+     * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
303
+     */
304
+    public function create_item( $request ) {
305
+
306
+        if ( ! empty( $request['id'] ) ) {
307
+            return new WP_Error( 'rest_item_exists', __( 'Cannot create existing discount.', 'invoicing' ), array( 'status' => 400 ) );
308
+        }
309 309
 
310
-		$request->set_param( 'context', 'edit' );
310
+        $request->set_param( 'context', 'edit' );
311 311
 
312
-		// Prepare the updated data.
313
-		$discount_data = $this->prepare_item_for_database( $request );
312
+        // Prepare the updated data.
313
+        $discount_data = $this->prepare_item_for_database( $request );
314 314
 
315
-		if ( is_wp_error( $discount_data ) ) {
316
-			return $discount_data;
317
-		}
315
+        if ( is_wp_error( $discount_data ) ) {
316
+            return $discount_data;
317
+        }
318 318
 
319
-		$discount_data['post_type'] = $this->post_type;
319
+        $discount_data['post_type'] = $this->post_type;
320 320
 
321
-		// Try creating the discount.
321
+        // Try creating the discount.
322 322
         $discount = wp_insert_post( $discount_data, true );
323 323
 
324
-		if ( is_wp_error( $discount ) ) {
324
+        if ( is_wp_error( $discount ) ) {
325 325
             return $discount;
326
-		}
327
-
328
-		// Prepare the response
329
-		$response = $this->prepare_item_for_response( $discount, $request );
330
-
331
-		/**
332
-		 * Fires after a single discount is created or updated via the REST API.
333
-		 *
334
-		 * @since 1.0.13
335
-		 *
336
-		 * @param WP_Post   $discount  Inserted or updated discount object.
337
-		 * @param WP_REST_Request $request  Request object.
338
-		 * @param bool            $creating True when creating a post, false when updating.
339
-		 */
340
-		do_action( "wpinv_rest_insert_discount", $discount, $request, true );
341
-
342
-		/**
343
-		 * Filters the responses for creating single item requests.
344
-		 *
345
-		 *
346
-		 * @since 1.0.13
347
-		 *
348
-		 *
349
-		 * @param array           $response Invoice properties.
350
-		 * @param WP_REST_Request $request The request used.
351
-		 */
326
+        }
327
+
328
+        // Prepare the response
329
+        $response = $this->prepare_item_for_response( $discount, $request );
330
+
331
+        /**
332
+         * Fires after a single discount is created or updated via the REST API.
333
+         *
334
+         * @since 1.0.13
335
+         *
336
+         * @param WP_Post   $discount  Inserted or updated discount object.
337
+         * @param WP_REST_Request $request  Request object.
338
+         * @param bool            $creating True when creating a post, false when updating.
339
+         */
340
+        do_action( "wpinv_rest_insert_discount", $discount, $request, true );
341
+
342
+        /**
343
+         * Filters the responses for creating single item requests.
344
+         *
345
+         *
346
+         * @since 1.0.13
347
+         *
348
+         *
349
+         * @param array           $response Invoice properties.
350
+         * @param WP_REST_Request $request The request used.
351
+         */
352 352
         $response       = apply_filters( "wpinv_rest_create_discount_response", $response, $request );
353 353
 
354 354
         return rest_ensure_response( $response );
355
-	}
356
-
357
-	/**
358
-	 * Checks if a given request has access to update a discount.
359
-	 *
360
-	 * @since 1.0.13
361
-	 *
362
-	 * @param WP_REST_Request $request Full details about the request.
363
-	 * @return true|WP_Error True if the request has access to update the item, WP_Error object otherwise.
364
-	 */
365
-	public function update_item_permissions_check( $request ) {
366
-
367
-		// Retrieve the item.
368
-		$item = $this->get_post( $request['id'] );
369
-		if ( is_wp_error( $item ) ) {
370
-			return $item;
371
-		}
372
-
373
-		if ( wpinv_current_user_can_manage_invoicing() ) {
374
-			return true;
375
-		}
376
-
377
-		return new WP_Error( 
378
-			'rest_cannot_edit', 
379
-			__( 'Sorry, you are not allowed to update this discount.', 'invoicing' ), 
380
-			array( 
381
-				'status' => rest_authorization_required_code(),
382
-			)
383
-		);
384
-
385
-	}
386
-
387
-	/**
388
-	 * Updates a single discount.
389
-	 *
390
-	 * @since 1.0.13
391
-	 *
392
-	 * @param WP_REST_Request $request Full details about the request.
393
-	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
394
-	 */
395
-	public function update_item( $request ) {
355
+    }
356
+
357
+    /**
358
+     * Checks if a given request has access to update a discount.
359
+     *
360
+     * @since 1.0.13
361
+     *
362
+     * @param WP_REST_Request $request Full details about the request.
363
+     * @return true|WP_Error True if the request has access to update the item, WP_Error object otherwise.
364
+     */
365
+    public function update_item_permissions_check( $request ) {
366
+
367
+        // Retrieve the item.
368
+        $item = $this->get_post( $request['id'] );
369
+        if ( is_wp_error( $item ) ) {
370
+            return $item;
371
+        }
372
+
373
+        if ( wpinv_current_user_can_manage_invoicing() ) {
374
+            return true;
375
+        }
376
+
377
+        return new WP_Error( 
378
+            'rest_cannot_edit', 
379
+            __( 'Sorry, you are not allowed to update this discount.', 'invoicing' ), 
380
+            array( 
381
+                'status' => rest_authorization_required_code(),
382
+            )
383
+        );
384
+
385
+    }
386
+
387
+    /**
388
+     * Updates a single discount.
389
+     *
390
+     * @since 1.0.13
391
+     *
392
+     * @param WP_REST_Request $request Full details about the request.
393
+     * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
394
+     */
395
+    public function update_item( $request ) {
396 396
 		
397
-		// Ensure the item exists.
397
+        // Ensure the item exists.
398 398
         $valid_check = $this->get_post( $request['id'] );
399 399
         
400 400
         // Abort early if it does not exist
401
-		if ( is_wp_error( $valid_check ) ) {
402
-			return $valid_check;
403
-		}
401
+        if ( is_wp_error( $valid_check ) ) {
402
+            return $valid_check;
403
+        }
404 404
 
405
-		$request->set_param( 'context', 'edit' );
405
+        $request->set_param( 'context', 'edit' );
406 406
 
407
-		// Prepare the updated data.
408
-		$data_to_update = $this->prepare_item_for_database( $request );
407
+        // Prepare the updated data.
408
+        $data_to_update = $this->prepare_item_for_database( $request );
409 409
 
410
-		if ( is_wp_error( $data_to_update ) ) {
411
-			return $data_to_update;
412
-		}
410
+        if ( is_wp_error( $data_to_update ) ) {
411
+            return $data_to_update;
412
+        }
413 413
 
414
-		if( empty( $data_to_update['meta_input'] ) ) {
415
-			unset( $data_to_update['meta_input'] );
416
-		}
414
+        if( empty( $data_to_update['meta_input'] ) ) {
415
+            unset( $data_to_update['meta_input'] );
416
+        }
417 417
 
418
-		// Abort if no item data is provided
418
+        // Abort if no item data is provided
419 419
         if( empty( $data_to_update ) ) {
420 420
             return new WP_Error( 'missing_data', __( 'An update request cannot be empty.', 'invoicing' ) );
421
-		}
421
+        }
422 422
 		
423
-		// post_status
424
-		if( ! empty( $data_to_update['post_status'] ) ) {
425
-			wpinv_update_discount_status( $request['id'], $data_to_update['post_status'] );
426
-			unset( $data_to_update['post_status'] );
427
-		}
423
+        // post_status
424
+        if( ! empty( $data_to_update['post_status'] ) ) {
425
+            wpinv_update_discount_status( $request['id'], $data_to_update['post_status'] );
426
+            unset( $data_to_update['post_status'] );
427
+        }
428 428
 
429
-		// Update the item
430
-		if( ! empty( $data_to_update ) ) {
429
+        // Update the item
430
+        if( ! empty( $data_to_update ) ) {
431 431
 
432
-			// Include the item ID
433
-			$data_to_update['ID'] = $request['id'];
432
+            // Include the item ID
433
+            $data_to_update['ID'] = $request['id'];
434 434
 
435
-			$updated = wp_update_post( $data_to_update, true );
435
+            $updated = wp_update_post( $data_to_update, true );
436 436
 
437
-			// Incase the update operation failed...
438
-			if ( is_wp_error( $updated ) ) {
439
-				return $updated;
440
-			}
437
+            // Incase the update operation failed...
438
+            if ( is_wp_error( $updated ) ) {
439
+                return $updated;
440
+            }
441 441
 
442
-		}
442
+        }
443 443
 
444
-		$updated_discount = get_post( $request['id'] );
444
+        $updated_discount = get_post( $request['id'] );
445 445
 
446
-		// Prepare the response
447
-		$response = $this->prepare_item_for_response( $updated_discount, $request );
446
+        // Prepare the response
447
+        $response = $this->prepare_item_for_response( $updated_discount, $request );
448 448
 
449
-		/** This action is documented in includes/class-wpinv-rest-item-controller.php */
450
-		do_action( "wpinv_rest_insert_discount", $updated_discount, $request, false );
449
+        /** This action is documented in includes/class-wpinv-rest-item-controller.php */
450
+        do_action( "wpinv_rest_insert_discount", $updated_discount, $request, false );
451 451
 
452
-		/**
453
-		 * Filters the responses for updating single discount requests.
454
-		 *
455
-		 *
456
-		 * @since 1.0.13
457
-		 *
458
-		 *
459
-		 * @param array           $data_to_update Discount properties.
460
-		 * @param WP_REST_Request $request The request used.
461
-		 */
452
+        /**
453
+         * Filters the responses for updating single discount requests.
454
+         *
455
+         *
456
+         * @since 1.0.13
457
+         *
458
+         *
459
+         * @param array           $data_to_update Discount properties.
460
+         * @param WP_REST_Request $request The request used.
461
+         */
462 462
         $response       = apply_filters( "wpinv_rest_update_discount_response", $response,  $data_to_update, $request );
463 463
 
464 464
         return rest_ensure_response( $response );
465
-	}
466
-
467
-	/**
468
-	 * Checks if a given request has access to delete a discount.
469
-	 *
470
-	 * @since 1.0.13
471
-	 *
472
-	 * @param WP_REST_Request $request Full details about the request.
473
-	 * @return true|WP_Error True if the request has access to delete the discount, WP_Error object otherwise.
474
-	 */
475
-	public function delete_item_permissions_check( $request ) {
476
-
477
-		// Retrieve the discount.
478
-		$discount = $this->get_post( $request['id'] );
479
-		if ( is_wp_error( $discount ) ) {
480
-			return $discount;
481
-		} 
482
-
483
-		// Ensure the current user can delete the discount
484
-		if (! wpinv_current_user_can_manage_invoicing() ) {
485
-			return new WP_Error( 
465
+    }
466
+
467
+    /**
468
+     * Checks if a given request has access to delete a discount.
469
+     *
470
+     * @since 1.0.13
471
+     *
472
+     * @param WP_REST_Request $request Full details about the request.
473
+     * @return true|WP_Error True if the request has access to delete the discount, WP_Error object otherwise.
474
+     */
475
+    public function delete_item_permissions_check( $request ) {
476
+
477
+        // Retrieve the discount.
478
+        $discount = $this->get_post( $request['id'] );
479
+        if ( is_wp_error( $discount ) ) {
480
+            return $discount;
481
+        } 
482
+
483
+        // Ensure the current user can delete the discount
484
+        if (! wpinv_current_user_can_manage_invoicing() ) {
485
+            return new WP_Error( 
486 486
                 'rest_cannot_delete', 
487 487
                 __( 'Sorry, you are not allowed to delete this discount.', 'invoicing' ), 
488 488
                 array( 
489 489
                     'status' => rest_authorization_required_code(),
490 490
                 )
491 491
             );
492
-		}
493
-
494
-		return true;
495
-	}
496
-
497
-	/**
498
-	 * Deletes a single discount.
499
-	 *
500
-	 * @since 1.0.13
501
-	 *
502
-	 * @param WP_REST_Request $request Full details about the request.
503
-	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
504
-	 */
505
-	public function delete_item( $request ) {
492
+        }
493
+
494
+        return true;
495
+    }
496
+
497
+    /**
498
+     * Deletes a single discount.
499
+     *
500
+     * @since 1.0.13
501
+     *
502
+     * @param WP_REST_Request $request Full details about the request.
503
+     * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
504
+     */
505
+    public function delete_item( $request ) {
506 506
 		
507
-		// Retrieve the discount.
508
-		$discount = $this->get_post( $request['id'] );
509
-		if ( is_wp_error( $discount ) ) {
510
-			return $discount;
511
-		}
507
+        // Retrieve the discount.
508
+        $discount = $this->get_post( $request['id'] );
509
+        if ( is_wp_error( $discount ) ) {
510
+            return $discount;
511
+        }
512 512
 
513
-		$request->set_param( 'context', 'edit' );
513
+        $request->set_param( 'context', 'edit' );
514 514
 
515
-		// Prepare the discount id
516
-		$id    = $discount->ID;
515
+        // Prepare the discount id
516
+        $id    = $discount->ID;
517 517
 
518
-		// Prepare the response
519
-		$response = $this->prepare_item_for_response( $discount, $request );
518
+        // Prepare the response
519
+        $response = $this->prepare_item_for_response( $discount, $request );
520 520
 
521
-		// Delete the discount...
522
-		wpinv_remove_discount( $id );
521
+        // Delete the discount...
522
+        wpinv_remove_discount( $id );
523 523
 
524
-		/**
525
-		 * Fires immediately after a single discount is deleted via the REST API.
526
-		 *
527
-		 *
528
-		 * @since 1.0.13
529
-		 *
530
-		 * @param WP_POST    $discount  The deleted discount.
531
-		 * @param WP_REST_Request  $request  The request sent to the API.
532
-		 */
533
-		do_action( "wpinv_rest_delete_discount", $discount, $request );
524
+        /**
525
+         * Fires immediately after a single discount is deleted via the REST API.
526
+         *
527
+         *
528
+         * @since 1.0.13
529
+         *
530
+         * @param WP_POST    $discount  The deleted discount.
531
+         * @param WP_REST_Request  $request  The request sent to the API.
532
+         */
533
+        do_action( "wpinv_rest_delete_discount", $discount, $request );
534 534
 
535
-		return $response;
535
+        return $response;
536 536
 
537
-	}
537
+    }
538 538
     
539 539
     
540 540
     /**
541
-	 * Retrieves the query params for the discount collection.
542
-	 *
543
-	 * @since 1.0.13
544
-	 *
545
-	 * @return array Collection parameters.
546
-	 */
547
-	public function get_collection_params() {
541
+     * Retrieves the query params for the discount collection.
542
+     *
543
+     * @since 1.0.13
544
+     *
545
+     * @return array Collection parameters.
546
+     */
547
+    public function get_collection_params() {
548 548
         
549 549
         $query_params               = array(
550 550
 
@@ -558,27 +558,27 @@  discard block
 block discarded – undo
558 558
             
559 559
             // Discount types
560 560
             'type'                  => array(
561
-				'description'       => __( 'Type of discounts to fetch.', 'invoicing' ),
562
-				'type'              => 'array',
563
-				'default'           => array_keys( wpinv_get_discount_types() ),
564
-				'items'             => array(
561
+                'description'       => __( 'Type of discounts to fetch.', 'invoicing' ),
562
+                'type'              => 'array',
563
+                'default'           => array_keys( wpinv_get_discount_types() ),
564
+                'items'             => array(
565 565
                     'enum'          => array_keys( wpinv_get_discount_types() ),
566 566
                     'type'          => 'string',
567 567
                 ),
568
-			),
568
+            ),
569 569
 			
570
-			// Number of results per page
570
+            // Number of results per page
571 571
             'limit'                 => array(
572
-				'description'       => __( 'Number of discounts to fetch.', 'invoicing' ),
573
-				'type'              => 'integer',
574
-				'default'           => (int) get_option( 'posts_per_page' ),
572
+                'description'       => __( 'Number of discounts to fetch.', 'invoicing' ),
573
+                'type'              => 'integer',
574
+                'default'           => (int) get_option( 'posts_per_page' ),
575 575
             ),
576 576
 
577 577
             // Pagination
578 578
             'page'     => array(
579
-				'description'       => __( 'Current page to fetch.', 'invoicing' ),
580
-				'type'              => 'integer',
581
-				'default'           => 1,
579
+                'description'       => __( 'Current page to fetch.', 'invoicing' ),
580
+                'type'              => 'integer',
581
+                'default'           => 1,
582 582
             ),
583 583
 
584 584
             // Exclude certain items
@@ -601,9 +601,9 @@  discard block
 block discarded – undo
601 601
                     'date',
602 602
                     'ID',
603 603
                     'modified',
604
-					'title',
605
-					'relevance',
606
-					'rand'
604
+                    'title',
605
+                    'relevance',
606
+                    'rand'
607 607
                 ),
608 608
             ),
609 609
 
@@ -613,598 +613,598 @@  discard block
 block discarded – undo
613 613
                 'type'        => 'string',
614 614
                 'default'     => 'DESC',
615 615
                 'enum'        => array( 'ASC', 'DESC' ),
616
-			),
616
+            ),
617 617
 			
618
-			// Search term
618
+            // Search term
619 619
             'search'                => array(
620
-				'description'       => __( 'Return discounts that match the search term.', 'invoicing' ),
621
-				'type'              => 'string',
620
+                'description'       => __( 'Return discounts that match the search term.', 'invoicing' ),
621
+                'type'              => 'string',
622 622
             ),
623 623
         );
624 624
 
625
-		/**
626
-		 * Filter collection parameters for the discounts controller.
627
-		 *
628
-		 *
629
-		 * @since 1.0.13
630
-		 *
631
-		 * @param array        $query_params JSON Schema-formatted collection parameters.
632
-		 */
633
-		return apply_filters( "wpinv_rest_discounts_collection_params", $query_params );
625
+        /**
626
+         * Filter collection parameters for the discounts controller.
627
+         *
628
+         *
629
+         * @since 1.0.13
630
+         *
631
+         * @param array        $query_params JSON Schema-formatted collection parameters.
632
+         */
633
+        return apply_filters( "wpinv_rest_discounts_collection_params", $query_params );
634 634
     }
635 635
     
636 636
     /**
637
-	 * Checks if a given post type can be viewed or managed.
638
-	 *
639
-	 * @since 1.0.13
640
-	 *
641
-	 * @param object|string $post_type Post type name or object.
642
-	 * @return bool Whether the post type is allowed in REST.
643
-	 */
644
-	protected function check_is_post_type_allowed( $post_type ) {
645
-		return true;
646
-	}
647
-
648
-	/**
649
-	 * Prepares a single item for create or update.
650
-	 *
651
-	 * @since 1.0.13
652
-	 *
653
-	 * @param WP_REST_Request $request Request object.
654
-	 * @return array|WP_Error Discount Properties or WP_Error.
655
-	 */
656
-	protected function prepare_item_for_database( $request ) {
657
-		$prepared_item 		 = new stdClass();
658
-		$prepared_item->meta_input = array();
659
-
660
-		// Post ID.
661
-		if ( isset( $request['id'] ) ) {
662
-			$existing_item = $this->get_post( $request['id'] );
663
-			if ( is_wp_error( $existing_item ) ) {
664
-				return $existing_item;
665
-			}
666
-
667
-			$prepared_item->ID 		  = $existing_item->ID;
668
-		}
669
-
670
-		$schema = $this->get_item_schema();
671
-
672
-		// item title.
673
-		if ( ! empty( $schema['properties']['title'] ) && isset( $request['title'] ) ) {
674
-			$prepared_item->post_title = sanitize_text_field( $request['title'] );
675
-		}
676
-
677
-		// item status.
678
-		if ( ! empty( $schema['properties']['status'] ) && isset( $request['status'] ) && in_array( $request['status'], array_keys( get_post_stati( array( 'internal' => false ) ) ) ) ) {
679
-			$prepared_item->post_status = sanitize_text_field( $request['status'] );
680
-		}
681
-
682
-		// Code.
683
-		if ( ! empty( $schema['properties']['code'] ) && isset( $request['code'] ) ) {
684
-			$prepared_item->meta_input['_wpi_discount_code'] = trim( $request['code'] );
685
-		}
686
-
687
-		// Type.
688
-		if ( ! empty( $schema['properties']['type'] ) && isset( $request['type'] )  && in_array( $request['type'], array_keys( wpinv_get_discount_types() ) ) ) {
689
-			$prepared_item->meta_input['_wpi_discount_type'] = trim( $request['type'] );
690
-		}
691
-
692
-		// Amount.
693
-		if ( ! empty( $schema['properties']['amount'] ) && isset( $request['amount'] ) ) {
694
-			$prepared_item->meta_input['_wpi_discount_amount'] = floatval( $request['amount'] );
695
-		}
696
-
697
-		// Items.
698
-		if ( ! empty( $schema['properties']['items'] ) && isset( $request['items'] ) ) {
699
-			$prepared_item->meta_input['_wpi_discount_items'] = wpinv_parse_list( $request['items'] );
700
-		}
701
-
702
-		// Excluded Items.
703
-		if ( ! empty( $schema['properties']['exclude_items'] ) && isset( $request['exclude_items'] ) ) {
704
-			$prepared_item->meta_input['_wpi_discount_excluded_items'] = wpinv_parse_list( $request['exclude_items'] );
705
-		}
706
-
707
-		// Start date.
708
-		if ( ! empty( $schema['properties']['start_date'] ) && isset( $request['start_date'] ) ) {
709
-			$prepared_item->meta_input['_wpi_discount_start'] = trim( $request['start_date'] );
710
-		}
711
-
712
-		// End date.
713
-		if ( ! empty( $schema['properties']['end_date'] ) && isset( $request['end_date'] ) ) {
714
-			$prepared_item->meta_input['_wpi_discount_expiration'] = trim( $request['end_date'] );
715
-		}
716
-
717
-		// Minimum amount.
718
-		if ( ! empty( $schema['properties']['minimum_amount'] ) && isset( $request['minimum_amount'] ) ) {
719
-			$prepared_item->meta_input['_wpi_discount_min_total'] = floatval( $request['minimum_amount'] );
720
-		}
721
-
722
-		// Maximum amount.
723
-		if ( ! empty( $schema['properties']['maximum_amount'] ) && isset( $request['maximum_amount'] ) ) {
724
-			$prepared_item->meta_input['_wpi_discount_max_total'] = floatval( $request['maximum_amount'] );
725
-		}
726
-
727
-		// Recurring.
728
-		if ( ! empty( $schema['properties']['recurring'] ) && isset( $request['recurring'] ) ) {
729
-			$prepared_item->meta_input['_wpi_discount_is_recurring'] = empty( (int) $request['recurring'] ) ? 0 : 1;
730
-		}
731
-
732
-		// Maximum uses.
733
-		if ( ! empty( $schema['properties']['max_uses'] ) && isset( $request['max_uses'] ) ) {
734
-			$prepared_item->meta_input['_wpi_discount_max_uses'] = intval( $request['max_uses'] );
735
-		}
736
-
737
-		// Single use.
738
-		if ( ! empty( $schema['properties']['single_use'] ) && isset( $request['single_use'] ) ) {
739
-			$prepared_item->meta_input['_wpi_discount_is_single_use'] = empty( (int) $request['single_use'] ) ? 0 : 1;
740
-		}
741
-
742
-		$discount_data = (array) wp_unslash( $prepared_item );
743
-
744
-		/**
745
-		 * Filters an item before it is inserted via the REST API.
746
-		 *
747
-		 * @since 1.0.13
748
-		 *
749
-		 * @param array        $discount_data An array of discount data
750
-		 * @param WP_REST_Request $request       Request object.
751
-		 */
752
-		return apply_filters( "wpinv_rest_pre_insert_discount", $discount_data, $request );
753
-
754
-	}
755
-
756
-	/**
757
-	 * Prepares a single discount output for response.
758
-	 *
759
-	 * @since 1.0.13
760
-	 *
761
-	 * @param WP_Post   $discount    WP_Post object.
762
-	 * @param WP_REST_Request $request Request object.
763
-	 * @return WP_REST_Response Response object.
764
-	 */
765
-	public function prepare_item_for_response( $discount, $request ) {
766
-
767
-		$GLOBALS['post'] = get_post( $discount->ID );
768
-
769
-		setup_postdata( $discount->ID );
770
-
771
-		// Fetch the fields to include in this response.
772
-		$fields = $this->get_fields_for_response( $request );
773
-
774
-		// Base fields for every discount.
775
-		$data = array();
776
-
777
-		// Set up ID.
778
-		if ( rest_is_field_included( 'id', $fields ) ) {
779
-			$data['id'] = $discount->ID;
780
-		}
781
-
782
-		// Title.
783
-		if ( rest_is_field_included( 'title', $fields ) ) {
784
-			$data['title'] = get_the_title( $discount->ID );
785
-		}
786
-
787
-		// Code.
788
-		if ( rest_is_field_included( 'code', $fields ) ) {
789
-			$data['code'] = wpinv_get_discount_code( $discount->ID );
790
-		}
791
-
792
-		// Type.
793
-		if ( rest_is_field_included( 'type', $fields ) ) {
794
-			$data['type'] = wpinv_get_discount_type( $discount->ID );
795
-		}
796
-
797
-		// Amount.
798
-		if ( rest_is_field_included( 'amount', $fields ) ) {
799
-			$data['amount'] = wpinv_get_discount_amount( $discount->ID );
800
-		}
801
-
802
-		// Status.
803
-		if ( rest_is_field_included( 'status', $fields ) ) {
804
-			$data['status'] = get_post_status( $discount->ID );
805
-		}
806
-
807
-		// Items.
808
-		if ( rest_is_field_included( 'items', $fields ) ) {
809
-			$data['items'] = wpinv_get_discount_item_reqs( $discount->ID );
810
-		}
811
-
812
-		// Excluded Items.
813
-		if ( rest_is_field_included( 'exclude_items', $fields ) ) {
814
-			$data['exclude_items'] = wpinv_get_discount_excluded_items( $discount->ID );
815
-		}
816
-
817
-		// Start date.
818
-		if ( rest_is_field_included( 'start_date', $fields ) ) {
819
-			$data['start_date'] = wpinv_get_discount_start_date( $discount->ID );
820
-		}
821
-
822
-		// End date.
823
-		if ( rest_is_field_included( 'end_date', $fields ) ) {
824
-			$data['end_date'] = wpinv_get_discount_expiration( $discount->ID );
825
-		}
826
-
827
-		// Minimum amount.
828
-		if ( rest_is_field_included( 'minimum_amount', $fields ) ) {
829
-			$data['minimum_amount'] = wpinv_get_discount_min_total( $discount->ID );
830
-		}
831
-
832
-		// Maximum amount.
833
-		if ( rest_is_field_included( 'maximum_amount', $fields ) ) {
834
-			$data['maximum_amount'] = wpinv_get_discount_max_total( $discount->ID );
835
-		}
836
-
837
-		// Recurring.
838
-		if ( rest_is_field_included( 'recurring', $fields ) ) {
839
-			$data['recurring'] = wpinv_discount_is_recurring( $discount->ID );
840
-		}
841
-
842
-		// Maximum uses.
843
-		if ( rest_is_field_included( 'max_uses', $fields ) ) {
844
-			$data['max_uses'] = wpinv_get_discount_max_uses( $discount->ID );
845
-		}
846
-
847
-		// Single use.
848
-		if ( rest_is_field_included( 'single_use', $fields ) ) {
849
-			$data['single_use'] = wpinv_discount_is_single_use( $discount->ID );
850
-		}
851
-
852
-		$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
853
-		$data    = $this->add_additional_fields_to_object( $data, $request );
854
-		$data    = $this->filter_response_by_context( $data, $context );
855
-
856
-		// Wrap the data in a response object.
857
-		$response = rest_ensure_response( $data );
858
-
859
-		$links = $this->prepare_links( $discount );
860
-		$response->add_links( $links );
861
-
862
-		if ( ! empty( $links['self']['href'] ) ) {
863
-			$actions = $this->get_available_actions( $discount, $request );
864
-
865
-			$self = $links['self']['href'];
866
-
867
-			foreach ( $actions as $rel ) {
868
-				$response->add_link( $rel, $self );
869
-			}
870
-		}
871
-
872
-		/**
873
-		 * Filters the discount data for a response.
874
-		 *
875
-		 * @since 1.0.13
876
-		 *
877
-		 * @param WP_REST_Response $response The response object.
878
-		 * @param WP_Post    $discount  The discount post object.
879
-		 * @param WP_REST_Request  $request  Request object.
880
-		 */
881
-		return apply_filters( "wpinv_rest_prepare_discount", $response, $discount, $request );
882
-	}
883
-
884
-	/**
885
-	 * Gets an array of fields to be included on the response.
886
-	 *
887
-	 * Included fields are based on item schema and `_fields=` request argument.
888
-	 *
889
-	 * @since 1.0.13
890
-	 *
891
-	 * @param WP_REST_Request $request Full details about the request.
892
-	 * @return array Fields to be included in the response.
893
-	 */
894
-	public function get_fields_for_response( $request ) {
895
-		$schema     = $this->get_item_schema();
896
-		$properties = isset( $schema['properties'] ) ? $schema['properties'] : array();
897
-
898
-		$additional_fields = $this->get_additional_fields();
899
-		foreach ( $additional_fields as $field_name => $field_options ) {
900
-			// For back-compat, include any field with an empty schema
901
-			// because it won't be present in $this->get_item_schema().
902
-			if ( is_null( $field_options['schema'] ) ) {
903
-				$properties[ $field_name ] = $field_options;
904
-			}
905
-		}
906
-
907
-		// Exclude fields that specify a different context than the request context.
908
-		$context = $request['context'];
909
-		if ( $context ) {
910
-			foreach ( $properties as $name => $options ) {
911
-				if ( ! empty( $options['context'] ) && ! in_array( $context, $options['context'], true ) ) {
912
-					unset( $properties[ $name ] );
913
-				}
914
-			}
915
-		}
916
-
917
-		$fields = array_keys( $properties );
918
-
919
-		if ( ! isset( $request['_fields'] ) ) {
920
-			return $fields;
921
-		}
922
-		$requested_fields = wpinv_parse_list( $request['_fields'] );
923
-		if ( 0 === count( $requested_fields ) ) {
924
-			return $fields;
925
-		}
926
-		// Trim off outside whitespace from the comma delimited list.
927
-		$requested_fields = array_map( 'trim', $requested_fields );
928
-		// Always persist 'id', because it can be needed for add_additional_fields_to_object().
929
-		if ( in_array( 'id', $fields, true ) ) {
930
-			$requested_fields[] = 'id';
931
-		}
932
-		// Return the list of all requested fields which appear in the schema.
933
-		return array_reduce(
934
-			$requested_fields,
935
-			function( $response_fields, $field ) use ( $fields ) {
936
-				if ( in_array( $field, $fields, true ) ) {
937
-					$response_fields[] = $field;
938
-					return $response_fields;
939
-				}
940
-				// Check for nested fields if $field is not a direct match.
941
-				$nested_fields = explode( '.', $field );
942
-				// A nested field is included so long as its top-level property is
943
-				// present in the schema.
944
-				if ( in_array( $nested_fields[0], $fields, true ) ) {
945
-					$response_fields[] = $field;
946
-				}
947
-				return $response_fields;
948
-			},
949
-			array()
950
-		);
951
-	}
952
-
953
-	/**
954
-	 * Retrieves the discount's schema, conforming to JSON Schema.
955
-	 *
956
-	 * @since 1.0.13
957
-	 *
958
-	 * @return array Discount schema data.
959
-	 */
960
-	public function get_item_schema() {
961
-
962
-		// Maybe retrieve the schema from cache.
963
-		if (  empty( $this->schema ) ) {
964
-			return $this->add_additional_fields_schema( $this->schema );
965
-		}
966
-
967
-		$schema = array(
968
-			'$schema'    => 'http://json-schema.org/draft-04/schema#',
969
-			'title'      => $this->post_type,
970
-			'type'       => 'object',
971
-
972
-			// Base properties for every Item.
973
-			'properties' 		  => array(
974
-
975
-				'id'           => array(
976
-					'description' => __( 'Unique identifier for the discount.', 'invoicing' ),
977
-					'type'        => 'integer',
978
-					'context'     => array( 'view', 'edit', 'embed' ),
979
-					'readonly'    => true,
980
-				),
981
-
982
-				'title'			  => array(
983
-					'description' => __( 'The title for the discount.', 'invoicing' ),
984
-					'type'        => 'string',
985
-					'context'     => array( 'view', 'edit' ),
986
-				),
987
-
988
-				'code'        => array(
989
-					'description' => __( 'The discount code.', 'invoicing' ),
990
-					'type'        => 'string',
991
-					'context'     => array( 'view', 'edit', 'embed' ),
992
-					'required'	  => true,
993
-				),
994
-
995
-				'type'        => array(
996
-					'description' => __( 'The type of discount.', 'invoicing' ),
997
-					'type'        => 'string',
998
-					'enum'        => array_keys( wpinv_get_discount_types() ),
999
-					'context'     => array( 'view', 'edit', 'embed' ),
1000
-					'default'	  => 'percentage',
1001
-				),
1002
-
1003
-				'amount'        => array(
1004
-					'description' => __( 'The discount value.', 'invoicing' ),
1005
-					'type'        => 'number',
1006
-					'context'     => array( 'view', 'edit', 'embed' ),
1007
-					'required'	  => true,
1008
-				),
1009
-
1010
-				'status'       => array(
1011
-					'description' => __( 'A named status for the discount.', 'invoicing' ),
1012
-					'type'        => 'string',
1013
-					'enum'        => array_keys( get_post_stati( array( 'internal' => false ) ) ),
1014
-					'context'     => array( 'view', 'edit' ),
1015
-				),
1016
-
1017
-				'items'       => array(
1018
-					'description' => __( 'Items which need to be in the cart to use this discount or, for "Item Discounts", which items are discounted. If left blank, this discount will be used on any item.', 'invoicing' ),
1019
-					'type'        => 'array',
1020
-					'context'     => array( 'view', 'edit' ),
1021
-				),
1022
-
1023
-				'exclude_items'   => array(
1024
-					'description' => __( 'Items which are NOT allowed to use this discount.', 'invoicing' ),
1025
-					'type'        => 'array',
1026
-					'context'     => array( 'view', 'edit' ),
1027
-				),
1028
-
1029
-				'start_date'       => array(
1030
-					'description' => __( 'The start date for the discount in the format of yyyy-mm-dd hh:mm:ss  . If provided, the discount can only be used after or on this date.', 'invoicing' ),
1031
-					'type'        => 'string',
1032
-					'context'     => array( 'view', 'edit' ),
1033
-				),
1034
-
1035
-				'end_date'        => array(
1036
-					'description' => __( 'The expiration date for the discount.', 'invoicing' ),
1037
-					'type'        => 'string',
1038
-					'context'     => array( 'view', 'edit', 'embed' ),
1039
-				),
637
+     * Checks if a given post type can be viewed or managed.
638
+     *
639
+     * @since 1.0.13
640
+     *
641
+     * @param object|string $post_type Post type name or object.
642
+     * @return bool Whether the post type is allowed in REST.
643
+     */
644
+    protected function check_is_post_type_allowed( $post_type ) {
645
+        return true;
646
+    }
647
+
648
+    /**
649
+     * Prepares a single item for create or update.
650
+     *
651
+     * @since 1.0.13
652
+     *
653
+     * @param WP_REST_Request $request Request object.
654
+     * @return array|WP_Error Discount Properties or WP_Error.
655
+     */
656
+    protected function prepare_item_for_database( $request ) {
657
+        $prepared_item 		 = new stdClass();
658
+        $prepared_item->meta_input = array();
659
+
660
+        // Post ID.
661
+        if ( isset( $request['id'] ) ) {
662
+            $existing_item = $this->get_post( $request['id'] );
663
+            if ( is_wp_error( $existing_item ) ) {
664
+                return $existing_item;
665
+            }
666
+
667
+            $prepared_item->ID 		  = $existing_item->ID;
668
+        }
669
+
670
+        $schema = $this->get_item_schema();
671
+
672
+        // item title.
673
+        if ( ! empty( $schema['properties']['title'] ) && isset( $request['title'] ) ) {
674
+            $prepared_item->post_title = sanitize_text_field( $request['title'] );
675
+        }
676
+
677
+        // item status.
678
+        if ( ! empty( $schema['properties']['status'] ) && isset( $request['status'] ) && in_array( $request['status'], array_keys( get_post_stati( array( 'internal' => false ) ) ) ) ) {
679
+            $prepared_item->post_status = sanitize_text_field( $request['status'] );
680
+        }
681
+
682
+        // Code.
683
+        if ( ! empty( $schema['properties']['code'] ) && isset( $request['code'] ) ) {
684
+            $prepared_item->meta_input['_wpi_discount_code'] = trim( $request['code'] );
685
+        }
686
+
687
+        // Type.
688
+        if ( ! empty( $schema['properties']['type'] ) && isset( $request['type'] )  && in_array( $request['type'], array_keys( wpinv_get_discount_types() ) ) ) {
689
+            $prepared_item->meta_input['_wpi_discount_type'] = trim( $request['type'] );
690
+        }
691
+
692
+        // Amount.
693
+        if ( ! empty( $schema['properties']['amount'] ) && isset( $request['amount'] ) ) {
694
+            $prepared_item->meta_input['_wpi_discount_amount'] = floatval( $request['amount'] );
695
+        }
696
+
697
+        // Items.
698
+        if ( ! empty( $schema['properties']['items'] ) && isset( $request['items'] ) ) {
699
+            $prepared_item->meta_input['_wpi_discount_items'] = wpinv_parse_list( $request['items'] );
700
+        }
701
+
702
+        // Excluded Items.
703
+        if ( ! empty( $schema['properties']['exclude_items'] ) && isset( $request['exclude_items'] ) ) {
704
+            $prepared_item->meta_input['_wpi_discount_excluded_items'] = wpinv_parse_list( $request['exclude_items'] );
705
+        }
706
+
707
+        // Start date.
708
+        if ( ! empty( $schema['properties']['start_date'] ) && isset( $request['start_date'] ) ) {
709
+            $prepared_item->meta_input['_wpi_discount_start'] = trim( $request['start_date'] );
710
+        }
711
+
712
+        // End date.
713
+        if ( ! empty( $schema['properties']['end_date'] ) && isset( $request['end_date'] ) ) {
714
+            $prepared_item->meta_input['_wpi_discount_expiration'] = trim( $request['end_date'] );
715
+        }
716
+
717
+        // Minimum amount.
718
+        if ( ! empty( $schema['properties']['minimum_amount'] ) && isset( $request['minimum_amount'] ) ) {
719
+            $prepared_item->meta_input['_wpi_discount_min_total'] = floatval( $request['minimum_amount'] );
720
+        }
721
+
722
+        // Maximum amount.
723
+        if ( ! empty( $schema['properties']['maximum_amount'] ) && isset( $request['maximum_amount'] ) ) {
724
+            $prepared_item->meta_input['_wpi_discount_max_total'] = floatval( $request['maximum_amount'] );
725
+        }
726
+
727
+        // Recurring.
728
+        if ( ! empty( $schema['properties']['recurring'] ) && isset( $request['recurring'] ) ) {
729
+            $prepared_item->meta_input['_wpi_discount_is_recurring'] = empty( (int) $request['recurring'] ) ? 0 : 1;
730
+        }
731
+
732
+        // Maximum uses.
733
+        if ( ! empty( $schema['properties']['max_uses'] ) && isset( $request['max_uses'] ) ) {
734
+            $prepared_item->meta_input['_wpi_discount_max_uses'] = intval( $request['max_uses'] );
735
+        }
736
+
737
+        // Single use.
738
+        if ( ! empty( $schema['properties']['single_use'] ) && isset( $request['single_use'] ) ) {
739
+            $prepared_item->meta_input['_wpi_discount_is_single_use'] = empty( (int) $request['single_use'] ) ? 0 : 1;
740
+        }
741
+
742
+        $discount_data = (array) wp_unslash( $prepared_item );
743
+
744
+        /**
745
+         * Filters an item before it is inserted via the REST API.
746
+         *
747
+         * @since 1.0.13
748
+         *
749
+         * @param array        $discount_data An array of discount data
750
+         * @param WP_REST_Request $request       Request object.
751
+         */
752
+        return apply_filters( "wpinv_rest_pre_insert_discount", $discount_data, $request );
753
+
754
+    }
755
+
756
+    /**
757
+     * Prepares a single discount output for response.
758
+     *
759
+     * @since 1.0.13
760
+     *
761
+     * @param WP_Post   $discount    WP_Post object.
762
+     * @param WP_REST_Request $request Request object.
763
+     * @return WP_REST_Response Response object.
764
+     */
765
+    public function prepare_item_for_response( $discount, $request ) {
766
+
767
+        $GLOBALS['post'] = get_post( $discount->ID );
768
+
769
+        setup_postdata( $discount->ID );
770
+
771
+        // Fetch the fields to include in this response.
772
+        $fields = $this->get_fields_for_response( $request );
773
+
774
+        // Base fields for every discount.
775
+        $data = array();
776
+
777
+        // Set up ID.
778
+        if ( rest_is_field_included( 'id', $fields ) ) {
779
+            $data['id'] = $discount->ID;
780
+        }
781
+
782
+        // Title.
783
+        if ( rest_is_field_included( 'title', $fields ) ) {
784
+            $data['title'] = get_the_title( $discount->ID );
785
+        }
786
+
787
+        // Code.
788
+        if ( rest_is_field_included( 'code', $fields ) ) {
789
+            $data['code'] = wpinv_get_discount_code( $discount->ID );
790
+        }
791
+
792
+        // Type.
793
+        if ( rest_is_field_included( 'type', $fields ) ) {
794
+            $data['type'] = wpinv_get_discount_type( $discount->ID );
795
+        }
796
+
797
+        // Amount.
798
+        if ( rest_is_field_included( 'amount', $fields ) ) {
799
+            $data['amount'] = wpinv_get_discount_amount( $discount->ID );
800
+        }
801
+
802
+        // Status.
803
+        if ( rest_is_field_included( 'status', $fields ) ) {
804
+            $data['status'] = get_post_status( $discount->ID );
805
+        }
806
+
807
+        // Items.
808
+        if ( rest_is_field_included( 'items', $fields ) ) {
809
+            $data['items'] = wpinv_get_discount_item_reqs( $discount->ID );
810
+        }
811
+
812
+        // Excluded Items.
813
+        if ( rest_is_field_included( 'exclude_items', $fields ) ) {
814
+            $data['exclude_items'] = wpinv_get_discount_excluded_items( $discount->ID );
815
+        }
816
+
817
+        // Start date.
818
+        if ( rest_is_field_included( 'start_date', $fields ) ) {
819
+            $data['start_date'] = wpinv_get_discount_start_date( $discount->ID );
820
+        }
821
+
822
+        // End date.
823
+        if ( rest_is_field_included( 'end_date', $fields ) ) {
824
+            $data['end_date'] = wpinv_get_discount_expiration( $discount->ID );
825
+        }
826
+
827
+        // Minimum amount.
828
+        if ( rest_is_field_included( 'minimum_amount', $fields ) ) {
829
+            $data['minimum_amount'] = wpinv_get_discount_min_total( $discount->ID );
830
+        }
831
+
832
+        // Maximum amount.
833
+        if ( rest_is_field_included( 'maximum_amount', $fields ) ) {
834
+            $data['maximum_amount'] = wpinv_get_discount_max_total( $discount->ID );
835
+        }
836
+
837
+        // Recurring.
838
+        if ( rest_is_field_included( 'recurring', $fields ) ) {
839
+            $data['recurring'] = wpinv_discount_is_recurring( $discount->ID );
840
+        }
841
+
842
+        // Maximum uses.
843
+        if ( rest_is_field_included( 'max_uses', $fields ) ) {
844
+            $data['max_uses'] = wpinv_get_discount_max_uses( $discount->ID );
845
+        }
846
+
847
+        // Single use.
848
+        if ( rest_is_field_included( 'single_use', $fields ) ) {
849
+            $data['single_use'] = wpinv_discount_is_single_use( $discount->ID );
850
+        }
851
+
852
+        $context = ! empty( $request['context'] ) ? $request['context'] : 'view';
853
+        $data    = $this->add_additional_fields_to_object( $data, $request );
854
+        $data    = $this->filter_response_by_context( $data, $context );
855
+
856
+        // Wrap the data in a response object.
857
+        $response = rest_ensure_response( $data );
858
+
859
+        $links = $this->prepare_links( $discount );
860
+        $response->add_links( $links );
861
+
862
+        if ( ! empty( $links['self']['href'] ) ) {
863
+            $actions = $this->get_available_actions( $discount, $request );
864
+
865
+            $self = $links['self']['href'];
866
+
867
+            foreach ( $actions as $rel ) {
868
+                $response->add_link( $rel, $self );
869
+            }
870
+        }
871
+
872
+        /**
873
+         * Filters the discount data for a response.
874
+         *
875
+         * @since 1.0.13
876
+         *
877
+         * @param WP_REST_Response $response The response object.
878
+         * @param WP_Post    $discount  The discount post object.
879
+         * @param WP_REST_Request  $request  Request object.
880
+         */
881
+        return apply_filters( "wpinv_rest_prepare_discount", $response, $discount, $request );
882
+    }
883
+
884
+    /**
885
+     * Gets an array of fields to be included on the response.
886
+     *
887
+     * Included fields are based on item schema and `_fields=` request argument.
888
+     *
889
+     * @since 1.0.13
890
+     *
891
+     * @param WP_REST_Request $request Full details about the request.
892
+     * @return array Fields to be included in the response.
893
+     */
894
+    public function get_fields_for_response( $request ) {
895
+        $schema     = $this->get_item_schema();
896
+        $properties = isset( $schema['properties'] ) ? $schema['properties'] : array();
897
+
898
+        $additional_fields = $this->get_additional_fields();
899
+        foreach ( $additional_fields as $field_name => $field_options ) {
900
+            // For back-compat, include any field with an empty schema
901
+            // because it won't be present in $this->get_item_schema().
902
+            if ( is_null( $field_options['schema'] ) ) {
903
+                $properties[ $field_name ] = $field_options;
904
+            }
905
+        }
906
+
907
+        // Exclude fields that specify a different context than the request context.
908
+        $context = $request['context'];
909
+        if ( $context ) {
910
+            foreach ( $properties as $name => $options ) {
911
+                if ( ! empty( $options['context'] ) && ! in_array( $context, $options['context'], true ) ) {
912
+                    unset( $properties[ $name ] );
913
+                }
914
+            }
915
+        }
916
+
917
+        $fields = array_keys( $properties );
918
+
919
+        if ( ! isset( $request['_fields'] ) ) {
920
+            return $fields;
921
+        }
922
+        $requested_fields = wpinv_parse_list( $request['_fields'] );
923
+        if ( 0 === count( $requested_fields ) ) {
924
+            return $fields;
925
+        }
926
+        // Trim off outside whitespace from the comma delimited list.
927
+        $requested_fields = array_map( 'trim', $requested_fields );
928
+        // Always persist 'id', because it can be needed for add_additional_fields_to_object().
929
+        if ( in_array( 'id', $fields, true ) ) {
930
+            $requested_fields[] = 'id';
931
+        }
932
+        // Return the list of all requested fields which appear in the schema.
933
+        return array_reduce(
934
+            $requested_fields,
935
+            function( $response_fields, $field ) use ( $fields ) {
936
+                if ( in_array( $field, $fields, true ) ) {
937
+                    $response_fields[] = $field;
938
+                    return $response_fields;
939
+                }
940
+                // Check for nested fields if $field is not a direct match.
941
+                $nested_fields = explode( '.', $field );
942
+                // A nested field is included so long as its top-level property is
943
+                // present in the schema.
944
+                if ( in_array( $nested_fields[0], $fields, true ) ) {
945
+                    $response_fields[] = $field;
946
+                }
947
+                return $response_fields;
948
+            },
949
+            array()
950
+        );
951
+    }
952
+
953
+    /**
954
+     * Retrieves the discount's schema, conforming to JSON Schema.
955
+     *
956
+     * @since 1.0.13
957
+     *
958
+     * @return array Discount schema data.
959
+     */
960
+    public function get_item_schema() {
961
+
962
+        // Maybe retrieve the schema from cache.
963
+        if (  empty( $this->schema ) ) {
964
+            return $this->add_additional_fields_schema( $this->schema );
965
+        }
966
+
967
+        $schema = array(
968
+            '$schema'    => 'http://json-schema.org/draft-04/schema#',
969
+            'title'      => $this->post_type,
970
+            'type'       => 'object',
971
+
972
+            // Base properties for every Item.
973
+            'properties' 		  => array(
974
+
975
+                'id'           => array(
976
+                    'description' => __( 'Unique identifier for the discount.', 'invoicing' ),
977
+                    'type'        => 'integer',
978
+                    'context'     => array( 'view', 'edit', 'embed' ),
979
+                    'readonly'    => true,
980
+                ),
981
+
982
+                'title'			  => array(
983
+                    'description' => __( 'The title for the discount.', 'invoicing' ),
984
+                    'type'        => 'string',
985
+                    'context'     => array( 'view', 'edit' ),
986
+                ),
987
+
988
+                'code'        => array(
989
+                    'description' => __( 'The discount code.', 'invoicing' ),
990
+                    'type'        => 'string',
991
+                    'context'     => array( 'view', 'edit', 'embed' ),
992
+                    'required'	  => true,
993
+                ),
994
+
995
+                'type'        => array(
996
+                    'description' => __( 'The type of discount.', 'invoicing' ),
997
+                    'type'        => 'string',
998
+                    'enum'        => array_keys( wpinv_get_discount_types() ),
999
+                    'context'     => array( 'view', 'edit', 'embed' ),
1000
+                    'default'	  => 'percentage',
1001
+                ),
1002
+
1003
+                'amount'        => array(
1004
+                    'description' => __( 'The discount value.', 'invoicing' ),
1005
+                    'type'        => 'number',
1006
+                    'context'     => array( 'view', 'edit', 'embed' ),
1007
+                    'required'	  => true,
1008
+                ),
1009
+
1010
+                'status'       => array(
1011
+                    'description' => __( 'A named status for the discount.', 'invoicing' ),
1012
+                    'type'        => 'string',
1013
+                    'enum'        => array_keys( get_post_stati( array( 'internal' => false ) ) ),
1014
+                    'context'     => array( 'view', 'edit' ),
1015
+                ),
1016
+
1017
+                'items'       => array(
1018
+                    'description' => __( 'Items which need to be in the cart to use this discount or, for "Item Discounts", which items are discounted. If left blank, this discount will be used on any item.', 'invoicing' ),
1019
+                    'type'        => 'array',
1020
+                    'context'     => array( 'view', 'edit' ),
1021
+                ),
1022
+
1023
+                'exclude_items'   => array(
1024
+                    'description' => __( 'Items which are NOT allowed to use this discount.', 'invoicing' ),
1025
+                    'type'        => 'array',
1026
+                    'context'     => array( 'view', 'edit' ),
1027
+                ),
1028
+
1029
+                'start_date'       => array(
1030
+                    'description' => __( 'The start date for the discount in the format of yyyy-mm-dd hh:mm:ss  . If provided, the discount can only be used after or on this date.', 'invoicing' ),
1031
+                    'type'        => 'string',
1032
+                    'context'     => array( 'view', 'edit' ),
1033
+                ),
1034
+
1035
+                'end_date'        => array(
1036
+                    'description' => __( 'The expiration date for the discount.', 'invoicing' ),
1037
+                    'type'        => 'string',
1038
+                    'context'     => array( 'view', 'edit', 'embed' ),
1039
+                ),
1040 1040
 				
1041
-				'minimum_amount'       => array(
1042
-					'description' => __( 'Minimum amount needed to use this invoice.', 'invoicing' ),
1043
-					'type'        => 'number',
1044
-					'context'     => array( 'view', 'edit', 'embed' ),
1045
-				),
1046
-
1047
-				'maximum_amount'       => array(
1048
-					'description' => __( 'Maximum amount needed to use this invoice.', 'invoicing' ),
1049
-					'type'        => 'number',
1050
-					'context'     => array( 'view', 'edit', 'embed' ),
1051
-				),
1052
-
1053
-				'recurring'       => array(
1054
-					'description' => __( 'Whether the discount is applied to all recurring payments or only the first recurring payment.', 'invoicing' ),
1055
-					'type'        => 'integer',
1056
-					'context'     => array( 'view', 'edit', 'embed' ),
1057
-				),
1058
-
1059
-				'max_uses'        => array(
1060
-					'description' => __( 'The maximum number of times this discount code can be used.', 'invoicing' ),
1061
-					'type'        => 'number',
1062
-					'context'     => array( 'view', 'edit', 'embed' ),
1063
-				),
1064
-
1065
-				'single_use'       => array(
1066
-					'description' => __( 'Whether or not this discount can only be used once per user.', 'invoicing' ),
1067
-					'type'        => 'integer',
1068
-					'context'     => array( 'view', 'edit', 'embed' ),
1069
-				)
1070
-
1071
-			),
1072
-		);
1073
-
1074
-		// Add helpful links to the discount schem.
1075
-		$schema['links'] = $this->get_schema_links();
1076
-
1077
-		/**
1078
-		 * Filters the discount schema for the REST API.
1079
-		 *
1080
-		 * Enables adding extra properties to discounts.
1081
-		 *
1082
-		 * @since 1.0.13
1083
-		 *
1084
-		 * @param array   $schema    The discount schema.
1085
-		 */
1041
+                'minimum_amount'       => array(
1042
+                    'description' => __( 'Minimum amount needed to use this invoice.', 'invoicing' ),
1043
+                    'type'        => 'number',
1044
+                    'context'     => array( 'view', 'edit', 'embed' ),
1045
+                ),
1046
+
1047
+                'maximum_amount'       => array(
1048
+                    'description' => __( 'Maximum amount needed to use this invoice.', 'invoicing' ),
1049
+                    'type'        => 'number',
1050
+                    'context'     => array( 'view', 'edit', 'embed' ),
1051
+                ),
1052
+
1053
+                'recurring'       => array(
1054
+                    'description' => __( 'Whether the discount is applied to all recurring payments or only the first recurring payment.', 'invoicing' ),
1055
+                    'type'        => 'integer',
1056
+                    'context'     => array( 'view', 'edit', 'embed' ),
1057
+                ),
1058
+
1059
+                'max_uses'        => array(
1060
+                    'description' => __( 'The maximum number of times this discount code can be used.', 'invoicing' ),
1061
+                    'type'        => 'number',
1062
+                    'context'     => array( 'view', 'edit', 'embed' ),
1063
+                ),
1064
+
1065
+                'single_use'       => array(
1066
+                    'description' => __( 'Whether or not this discount can only be used once per user.', 'invoicing' ),
1067
+                    'type'        => 'integer',
1068
+                    'context'     => array( 'view', 'edit', 'embed' ),
1069
+                )
1070
+
1071
+            ),
1072
+        );
1073
+
1074
+        // Add helpful links to the discount schem.
1075
+        $schema['links'] = $this->get_schema_links();
1076
+
1077
+        /**
1078
+         * Filters the discount schema for the REST API.
1079
+         *
1080
+         * Enables adding extra properties to discounts.
1081
+         *
1082
+         * @since 1.0.13
1083
+         *
1084
+         * @param array   $schema    The discount schema.
1085
+         */
1086 1086
         $schema = apply_filters( "wpinv_rest_discount_schema", $schema );
1087 1087
 
1088
-		//  Cache the discount schema.
1089
-		$this->schema = $schema;
1088
+        //  Cache the discount schema.
1089
+        $this->schema = $schema;
1090 1090
 		
1091
-		return $this->add_additional_fields_schema( $this->schema );
1092
-	}
1093
-
1094
-	/**
1095
-	 * Retrieve Link Description Objects that should be added to the Schema for the discounts collection.
1096
-	 *
1097
-	 * @since 1.0.13
1098
-	 *
1099
-	 * @return array
1100
-	 */
1101
-	protected function get_schema_links() {
1102
-
1103
-		$href = rest_url( "{$this->namespace}/{$this->rest_base}/{id}" );
1104
-
1105
-		$links = array();
1106
-
1107
-		$links[] = array(
1108
-			'rel'          => 'https://api.w.org/action-publish',
1109
-			'title'        => __( 'The current user can publish this discount.', 'invoicing' ),
1110
-			'href'         => $href,
1111
-			'targetSchema' => array(
1112
-				'type'       => 'object',
1113
-				'properties' => array(
1114
-					'status' => array(
1115
-						'type' => 'string',
1116
-						'enum' => array( 'publish', 'future' ),
1117
-					),
1118
-				),
1119
-			),
1120
-		);
1121
-
1122
-		return $links;
1123
-	}
1124
-
1125
-	/**
1126
-	 * Prepares links for the request.
1127
-	 *
1128
-	 * @since 1.0.13
1129
-	 *
1130
-	 * @param WP_Post $discount Post Object.
1131
-	 * @return array Links for the given discount.
1132
-	 */
1133
-	protected function prepare_links( $discount ) {
1134
-
1135
-		// Prepare the base REST API endpoint for discounts.
1136
-		$base = sprintf( '%s/%s', $this->namespace, $this->rest_base );
1137
-
1138
-		// Entity meta.
1139
-		$links = array(
1140
-			'self'       => array(
1141
-				'href' => rest_url( trailingslashit( $base ) . $discount->ID ),
1142
-			),
1143
-			'collection' => array(
1144
-				'href' => rest_url( $base ),
1145
-			),
1146
-		);
1147
-
1148
-		/**
1149
-		 * Filters the returned discount links for the REST API.
1150
-		 *
1151
-		 * Enables adding extra links to discount API responses.
1152
-		 *
1153
-		 * @since 1.0.13
1154
-		 *
1155
-		 * @param array   $links    Rest links.
1156
-		 */
1157
-		return apply_filters( "wpinv_rest_discount_links", $links );
1158
-
1159
-	}
1160
-
1161
-	/**
1162
-	 * Get the link relations available for the post and current user.
1163
-	 *
1164
-	 * @since 1.0.13
1165
-	 *
1166
-	 * @param WP_Post   $discount    WP_Post object.
1167
-	 * @param WP_REST_Request $request Request object.
1168
-	 * @return array List of link relations.
1169
-	 */
1170
-	protected function get_available_actions( $discount, $request ) {
1171
-
1172
-		if ( 'edit' !== $request['context'] ) {
1173
-			return array();
1174
-		}
1175
-
1176
-		$rels = array();
1177
-
1178
-		// Retrieve the post type object.
1179
-		$post_type = get_post_type_object( $discount->post_type );
1180
-
1181
-		// Mark discount as published.
1182
-		if ( current_user_can( $post_type->cap->publish_posts ) ) {
1183
-			$rels[] = 'https://api.w.org/action-publish';
1184
-		}
1185
-
1186
-		/**
1187
-		 * Filters the available discount link relations for the REST API.
1188
-		 *
1189
-		 * Enables adding extra link relation for the current user and request to discount responses.
1190
-		 *
1191
-		 * @since 1.0.13
1192
-		 *
1193
-		 * @param array   $rels    Available link relations.
1194
-		 */
1195
-		return apply_filters( "wpinv_rest_discount_link_relations", $rels );
1196
-	}
1197
-
1198
-	/**
1199
-	 * Handles rest requests for discount types.
1200
-	 *
1201
-	 * @since 1.0.13
1202
-	 * 
1203
-	 * 
1204
-	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
1205
-	 */
1206
-	public function get_discount_types() {
1207
-		return rest_ensure_response( wpinv_get_discount_types() );
1208
-	}
1091
+        return $this->add_additional_fields_schema( $this->schema );
1092
+    }
1093
+
1094
+    /**
1095
+     * Retrieve Link Description Objects that should be added to the Schema for the discounts collection.
1096
+     *
1097
+     * @since 1.0.13
1098
+     *
1099
+     * @return array
1100
+     */
1101
+    protected function get_schema_links() {
1102
+
1103
+        $href = rest_url( "{$this->namespace}/{$this->rest_base}/{id}" );
1104
+
1105
+        $links = array();
1106
+
1107
+        $links[] = array(
1108
+            'rel'          => 'https://api.w.org/action-publish',
1109
+            'title'        => __( 'The current user can publish this discount.', 'invoicing' ),
1110
+            'href'         => $href,
1111
+            'targetSchema' => array(
1112
+                'type'       => 'object',
1113
+                'properties' => array(
1114
+                    'status' => array(
1115
+                        'type' => 'string',
1116
+                        'enum' => array( 'publish', 'future' ),
1117
+                    ),
1118
+                ),
1119
+            ),
1120
+        );
1121
+
1122
+        return $links;
1123
+    }
1124
+
1125
+    /**
1126
+     * Prepares links for the request.
1127
+     *
1128
+     * @since 1.0.13
1129
+     *
1130
+     * @param WP_Post $discount Post Object.
1131
+     * @return array Links for the given discount.
1132
+     */
1133
+    protected function prepare_links( $discount ) {
1134
+
1135
+        // Prepare the base REST API endpoint for discounts.
1136
+        $base = sprintf( '%s/%s', $this->namespace, $this->rest_base );
1137
+
1138
+        // Entity meta.
1139
+        $links = array(
1140
+            'self'       => array(
1141
+                'href' => rest_url( trailingslashit( $base ) . $discount->ID ),
1142
+            ),
1143
+            'collection' => array(
1144
+                'href' => rest_url( $base ),
1145
+            ),
1146
+        );
1147
+
1148
+        /**
1149
+         * Filters the returned discount links for the REST API.
1150
+         *
1151
+         * Enables adding extra links to discount API responses.
1152
+         *
1153
+         * @since 1.0.13
1154
+         *
1155
+         * @param array   $links    Rest links.
1156
+         */
1157
+        return apply_filters( "wpinv_rest_discount_links", $links );
1158
+
1159
+    }
1160
+
1161
+    /**
1162
+     * Get the link relations available for the post and current user.
1163
+     *
1164
+     * @since 1.0.13
1165
+     *
1166
+     * @param WP_Post   $discount    WP_Post object.
1167
+     * @param WP_REST_Request $request Request object.
1168
+     * @return array List of link relations.
1169
+     */
1170
+    protected function get_available_actions( $discount, $request ) {
1171
+
1172
+        if ( 'edit' !== $request['context'] ) {
1173
+            return array();
1174
+        }
1175
+
1176
+        $rels = array();
1177
+
1178
+        // Retrieve the post type object.
1179
+        $post_type = get_post_type_object( $discount->post_type );
1180
+
1181
+        // Mark discount as published.
1182
+        if ( current_user_can( $post_type->cap->publish_posts ) ) {
1183
+            $rels[] = 'https://api.w.org/action-publish';
1184
+        }
1185
+
1186
+        /**
1187
+         * Filters the available discount link relations for the REST API.
1188
+         *
1189
+         * Enables adding extra link relation for the current user and request to discount responses.
1190
+         *
1191
+         * @since 1.0.13
1192
+         *
1193
+         * @param array   $rels    Available link relations.
1194
+         */
1195
+        return apply_filters( "wpinv_rest_discount_link_relations", $rels );
1196
+    }
1197
+
1198
+    /**
1199
+     * Handles rest requests for discount types.
1200
+     *
1201
+     * @since 1.0.13
1202
+     * 
1203
+     * 
1204
+     * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
1205
+     */
1206
+    public function get_discount_types() {
1207
+        return rest_ensure_response( wpinv_get_discount_types() );
1208
+    }
1209 1209
     
1210 1210
 }
1211 1211
\ No newline at end of file
Please login to merge, or discard this patch.
Spacing   +261 added lines, -261 removed lines patch added patch discarded remove patch
@@ -8,7 +8,7 @@  discard block
 block discarded – undo
8 8
  * @since    1.0.13
9 9
  */
10 10
 
11
-if ( !defined( 'WPINC' ) ) {
11
+if (!defined('WPINC')) {
12 12
     exit;
13 13
 }
14 14
 
@@ -41,7 +41,7 @@  discard block
 block discarded – undo
41 41
 	 *
42 42
 	 * @param string $namespace Api Namespace
43 43
 	 */
44
-	public function __construct( $namespace ) {
44
+	public function __construct($namespace) {
45 45
         
46 46
         // Set api namespace...
47 47
 		$this->namespace = $namespace;
@@ -68,7 +68,7 @@  discard block
 block discarded – undo
68 68
 			array(
69 69
 				array(
70 70
 					'methods'             => WP_REST_Server::READABLE,
71
-					'callback'            => array( $this, 'get_discount_types' ),
71
+					'callback'            => array($this, 'get_discount_types'),
72 72
 				),
73 73
 			)
74 74
 		);
@@ -84,13 +84,13 @@  discard block
 block discarded – undo
84 84
 	 * @param WP_REST_Request $request Full details about the request.
85 85
 	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
86 86
 	 */
87
-	public function get_items_permissions_check( $request ) {
87
+	public function get_items_permissions_check($request) {
88 88
 	
89
-		if ( wpinv_current_user_can_manage_invoicing() ) {
89
+		if (wpinv_current_user_can_manage_invoicing()) {
90 90
 			return true;
91 91
 		}
92 92
 
93
-		return new WP_Error( 'rest_forbidden_context', __( 'Sorry, you are not allowed to view invoice discounts.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
93
+		return new WP_Error('rest_forbidden_context', __('Sorry, you are not allowed to view invoice discounts.', 'invoicing'), array('status' => rest_authorization_required_code()));
94 94
 
95 95
     }
96 96
     
@@ -102,17 +102,17 @@  discard block
 block discarded – undo
102 102
 	 * @param WP_REST_Request $request Full details about the request.
103 103
 	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
104 104
 	 */
105
-	public function get_items( $request ) {
105
+	public function get_items($request) {
106 106
 		
107 107
 		// Retrieve the list of registered item query parameters.
108 108
         $registered = $this->get_collection_params();
109 109
         
110 110
         $args       = array();
111 111
 
112
-        foreach( array_keys( $registered ) as $key ) {
112
+        foreach (array_keys($registered) as $key) {
113 113
 
114
-            if( isset( $request[ $key] ) ) {
115
-                $args[ $key ] = $request[ $key];
114
+            if (isset($request[$key])) {
115
+                $args[$key] = $request[$key];
116 116
             }
117 117
 
118 118
 		} 
@@ -127,28 +127,28 @@  discard block
 block discarded – undo
127 127
 		 * @param array           $args    Key value array of query var to query value.
128 128
 		 * @param WP_REST_Request $request The request used.
129 129
 		 */
130
-        $args       = apply_filters( "wpinv_rest_get_discounts_arguments", $args, $request, $this );
130
+        $args = apply_filters("wpinv_rest_get_discounts_arguments", $args, $request, $this);
131 131
 		
132 132
 		// Special args
133
-		$args[ 'return' ]   = 'objects';
134
-		$args[ 'paginate' ] = true;
133
+		$args['return']   = 'objects';
134
+		$args['paginate'] = true;
135 135
 
136 136
         // Run the query.
137
-		$query = wpinv_get_all_discounts( $args );
137
+		$query = wpinv_get_all_discounts($args);
138 138
 		
139 139
 		// Prepare the retrieved discounts
140 140
 		$discounts = array();
141
-		foreach( $query->discounts as $discount ) {
141
+		foreach ($query->discounts as $discount) {
142 142
 
143
-			$data       = $this->prepare_item_for_response( $discount, $request );
144
-			$discounts[]    = $this->prepare_response_for_collection( $data );
143
+			$data = $this->prepare_item_for_response($discount, $request);
144
+			$discounts[] = $this->prepare_response_for_collection($data);
145 145
 
146 146
 		}
147 147
 
148 148
 		// Prepare the response.
149
-		$response = rest_ensure_response( $discounts );
150
-		$response->header( 'X-WP-Total', (int) $query->total );
151
-		$response->header( 'X-WP-TotalPages', (int) $query->max_num_pages );
149
+		$response = rest_ensure_response($discounts);
150
+		$response->header('X-WP-Total', (int) $query->total);
151
+		$response->header('X-WP-TotalPages', (int) $query->max_num_pages);
152 152
 
153 153
 		/**
154 154
 		 * Filters the responses for discount requests.
@@ -161,9 +161,9 @@  discard block
 block discarded – undo
161 161
 		 * @param WP_REST_Request     $request The request used.
162 162
          * @param array               $args Array of args used to retrieve the discounts
163 163
 		 */
164
-        $response       = apply_filters( "wpinv_rest_discounts_response", $response, $request, $args );
164
+        $response = apply_filters("wpinv_rest_discounts_response", $response, $request, $args);
165 165
 
166
-        return rest_ensure_response( $response );
166
+        return rest_ensure_response($response);
167 167
         
168 168
     }
169 169
 
@@ -175,17 +175,17 @@  discard block
 block discarded – undo
175 175
 	 * @param int $discount_id Supplied ID.
176 176
 	 * @return WP_Post|WP_Error Post object if ID is valid, WP_Error otherwise.
177 177
 	 */
178
-	protected function get_post( $discount_id ) {
178
+	protected function get_post($discount_id) {
179 179
 		
180
-		$error     = new WP_Error( 'rest_item_invalid_id', __( 'Invalid discount ID.', 'invoicing' ), array( 'status' => 404 ) );
180
+		$error = new WP_Error('rest_item_invalid_id', __('Invalid discount ID.', 'invoicing'), array('status' => 404));
181 181
 
182 182
         // Ids start from 1
183
-        if ( (int) $discount_id <= 0 ) {
183
+        if ((int) $discount_id <= 0) {
184 184
 			return $error;
185 185
 		}
186 186
 
187
-		$discount = wpinv_get_discount( (int) $discount_id );
188
-		if ( empty( $discount ) ) {
187
+		$discount = wpinv_get_discount((int) $discount_id);
188
+		if (empty($discount)) {
189 189
 			return $error;
190 190
         }
191 191
 
@@ -201,20 +201,20 @@  discard block
 block discarded – undo
201 201
 	 * @param WP_REST_Request $request Full details about the request.
202 202
 	 * @return bool|WP_Error True if the request has read access for the invoice item, WP_Error object otherwise.
203 203
 	 */
204
-	public function get_item_permissions_check( $request ) {
204
+	public function get_item_permissions_check($request) {
205 205
 
206 206
         // Retrieve the discount object.
207
-        $discount = $this->get_post( $request['id'] );
207
+        $discount = $this->get_post($request['id']);
208 208
         
209 209
         // Ensure it is valid.
210
-		if ( is_wp_error( $discount ) ) {
210
+		if (is_wp_error($discount)) {
211 211
 			return $discount;
212 212
 		}
213 213
 
214
-		if ( ! wpinv_current_user_can_manage_invoicing() ) {
214
+		if (!wpinv_current_user_can_manage_invoicing()) {
215 215
 			return new WP_Error(
216 216
                 'rest_cannot_view', 
217
-                __( 'Sorry, you are not allowed to view this discount.', 'invoicing' ), 
217
+                __('Sorry, you are not allowed to view this discount.', 'invoicing'), 
218 218
                 array( 
219 219
                     'status' => rest_authorization_required_code(),
220 220
                 )
@@ -232,18 +232,18 @@  discard block
 block discarded – undo
232 232
 	 * @param WP_REST_Request $request Full details about the request.
233 233
 	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
234 234
 	 */
235
-	public function get_item( $request ) {
235
+	public function get_item($request) {
236 236
 
237 237
         // Fetch the discount.
238
-        $discount = $this->get_post( $request['id'] );
238
+        $discount = $this->get_post($request['id']);
239 239
         
240 240
         // Abort early if it does not exist
241
-		if ( is_wp_error( $discount ) ) {
241
+		if (is_wp_error($discount)) {
242 242
 			return $discount;
243 243
 		}
244 244
 
245 245
 		// Prepare the response
246
-		$response = $this->prepare_item_for_response( $discount, $request );
246
+		$response = $this->prepare_item_for_response($discount, $request);
247 247
 
248 248
 		/**
249 249
 		 * Filters the responses for single discount requests.
@@ -255,9 +255,9 @@  discard block
 block discarded – undo
255 255
 		 * @param WP_HTTP_Response $response Response.
256 256
 		 * @param WP_REST_Request  $request The request used.
257 257
 		 */
258
-        $response       = apply_filters( "wpinv_rest_get_discount_response", $response, $request );
258
+        $response = apply_filters("wpinv_rest_get_discount_response", $response, $request);
259 259
 
260
-        return rest_ensure_response( $response );
260
+        return rest_ensure_response($response);
261 261
 
262 262
     }
263 263
     
@@ -269,21 +269,21 @@  discard block
 block discarded – undo
269 269
 	 * @param WP_REST_Request $request Full details about the request.
270 270
 	 * @return true|WP_Error True if the request has access to create items, WP_Error object otherwise.
271 271
 	 */
272
-	public function create_item_permissions_check( $request ) {
272
+	public function create_item_permissions_check($request) {
273 273
 	
274
-		if ( ! empty( $request['id'] ) ) {
275
-			return new WP_Error( 'rest_item_exists', __( 'Cannot create existing item.', 'invoicing' ), array( 'status' => 400 ) );
274
+		if (!empty($request['id'])) {
275
+			return new WP_Error('rest_item_exists', __('Cannot create existing item.', 'invoicing'), array('status' => 400));
276 276
 		}
277 277
 
278
-		if ( wpinv_current_user_can_manage_invoicing() ) {
278
+		if (wpinv_current_user_can_manage_invoicing()) {
279 279
 			return true;
280 280
 		}
281 281
 
282
-		$post_type = get_post_type_object( $this->post_type );
283
-		if ( ! current_user_can( $post_type->cap->create_posts ) ) {
282
+		$post_type = get_post_type_object($this->post_type);
283
+		if (!current_user_can($post_type->cap->create_posts)) {
284 284
 			return new WP_Error( 
285 285
                 'rest_cannot_create', 
286
-                __( 'Sorry, you are not allowed to create discounts as this user.', 'invoicing' ), 
286
+                __('Sorry, you are not allowed to create discounts as this user.', 'invoicing'), 
287 287
                 array( 
288 288
                     'status' => rest_authorization_required_code(),
289 289
                 )
@@ -301,32 +301,32 @@  discard block
 block discarded – undo
301 301
 	 * @param WP_REST_Request $request Full details about the request.
302 302
 	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
303 303
 	 */
304
-	public function create_item( $request ) {
304
+	public function create_item($request) {
305 305
 
306
-		if ( ! empty( $request['id'] ) ) {
307
-			return new WP_Error( 'rest_item_exists', __( 'Cannot create existing discount.', 'invoicing' ), array( 'status' => 400 ) );
306
+		if (!empty($request['id'])) {
307
+			return new WP_Error('rest_item_exists', __('Cannot create existing discount.', 'invoicing'), array('status' => 400));
308 308
 		}
309 309
 
310
-		$request->set_param( 'context', 'edit' );
310
+		$request->set_param('context', 'edit');
311 311
 
312 312
 		// Prepare the updated data.
313
-		$discount_data = $this->prepare_item_for_database( $request );
313
+		$discount_data = $this->prepare_item_for_database($request);
314 314
 
315
-		if ( is_wp_error( $discount_data ) ) {
315
+		if (is_wp_error($discount_data)) {
316 316
 			return $discount_data;
317 317
 		}
318 318
 
319 319
 		$discount_data['post_type'] = $this->post_type;
320 320
 
321 321
 		// Try creating the discount.
322
-        $discount = wp_insert_post( $discount_data, true );
322
+        $discount = wp_insert_post($discount_data, true);
323 323
 
324
-		if ( is_wp_error( $discount ) ) {
324
+		if (is_wp_error($discount)) {
325 325
             return $discount;
326 326
 		}
327 327
 
328 328
 		// Prepare the response
329
-		$response = $this->prepare_item_for_response( $discount, $request );
329
+		$response = $this->prepare_item_for_response($discount, $request);
330 330
 
331 331
 		/**
332 332
 		 * Fires after a single discount is created or updated via the REST API.
@@ -337,7 +337,7 @@  discard block
 block discarded – undo
337 337
 		 * @param WP_REST_Request $request  Request object.
338 338
 		 * @param bool            $creating True when creating a post, false when updating.
339 339
 		 */
340
-		do_action( "wpinv_rest_insert_discount", $discount, $request, true );
340
+		do_action("wpinv_rest_insert_discount", $discount, $request, true);
341 341
 
342 342
 		/**
343 343
 		 * Filters the responses for creating single item requests.
@@ -349,9 +349,9 @@  discard block
 block discarded – undo
349 349
 		 * @param array           $response Invoice properties.
350 350
 		 * @param WP_REST_Request $request The request used.
351 351
 		 */
352
-        $response       = apply_filters( "wpinv_rest_create_discount_response", $response, $request );
352
+        $response = apply_filters("wpinv_rest_create_discount_response", $response, $request);
353 353
 
354
-        return rest_ensure_response( $response );
354
+        return rest_ensure_response($response);
355 355
 	}
356 356
 
357 357
 	/**
@@ -362,21 +362,21 @@  discard block
 block discarded – undo
362 362
 	 * @param WP_REST_Request $request Full details about the request.
363 363
 	 * @return true|WP_Error True if the request has access to update the item, WP_Error object otherwise.
364 364
 	 */
365
-	public function update_item_permissions_check( $request ) {
365
+	public function update_item_permissions_check($request) {
366 366
 
367 367
 		// Retrieve the item.
368
-		$item = $this->get_post( $request['id'] );
369
-		if ( is_wp_error( $item ) ) {
368
+		$item = $this->get_post($request['id']);
369
+		if (is_wp_error($item)) {
370 370
 			return $item;
371 371
 		}
372 372
 
373
-		if ( wpinv_current_user_can_manage_invoicing() ) {
373
+		if (wpinv_current_user_can_manage_invoicing()) {
374 374
 			return true;
375 375
 		}
376 376
 
377 377
 		return new WP_Error( 
378 378
 			'rest_cannot_edit', 
379
-			__( 'Sorry, you are not allowed to update this discount.', 'invoicing' ), 
379
+			__('Sorry, you are not allowed to update this discount.', 'invoicing'), 
380 380
 			array( 
381 381
 				'status' => rest_authorization_required_code(),
382 382
 			)
@@ -392,62 +392,62 @@  discard block
 block discarded – undo
392 392
 	 * @param WP_REST_Request $request Full details about the request.
393 393
 	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
394 394
 	 */
395
-	public function update_item( $request ) {
395
+	public function update_item($request) {
396 396
 		
397 397
 		// Ensure the item exists.
398
-        $valid_check = $this->get_post( $request['id'] );
398
+        $valid_check = $this->get_post($request['id']);
399 399
         
400 400
         // Abort early if it does not exist
401
-		if ( is_wp_error( $valid_check ) ) {
401
+		if (is_wp_error($valid_check)) {
402 402
 			return $valid_check;
403 403
 		}
404 404
 
405
-		$request->set_param( 'context', 'edit' );
405
+		$request->set_param('context', 'edit');
406 406
 
407 407
 		// Prepare the updated data.
408
-		$data_to_update = $this->prepare_item_for_database( $request );
408
+		$data_to_update = $this->prepare_item_for_database($request);
409 409
 
410
-		if ( is_wp_error( $data_to_update ) ) {
410
+		if (is_wp_error($data_to_update)) {
411 411
 			return $data_to_update;
412 412
 		}
413 413
 
414
-		if( empty( $data_to_update['meta_input'] ) ) {
415
-			unset( $data_to_update['meta_input'] );
414
+		if (empty($data_to_update['meta_input'])) {
415
+			unset($data_to_update['meta_input']);
416 416
 		}
417 417
 
418 418
 		// Abort if no item data is provided
419
-        if( empty( $data_to_update ) ) {
420
-            return new WP_Error( 'missing_data', __( 'An update request cannot be empty.', 'invoicing' ) );
419
+        if (empty($data_to_update)) {
420
+            return new WP_Error('missing_data', __('An update request cannot be empty.', 'invoicing'));
421 421
 		}
422 422
 		
423 423
 		// post_status
424
-		if( ! empty( $data_to_update['post_status'] ) ) {
425
-			wpinv_update_discount_status( $request['id'], $data_to_update['post_status'] );
426
-			unset( $data_to_update['post_status'] );
424
+		if (!empty($data_to_update['post_status'])) {
425
+			wpinv_update_discount_status($request['id'], $data_to_update['post_status']);
426
+			unset($data_to_update['post_status']);
427 427
 		}
428 428
 
429 429
 		// Update the item
430
-		if( ! empty( $data_to_update ) ) {
430
+		if (!empty($data_to_update)) {
431 431
 
432 432
 			// Include the item ID
433 433
 			$data_to_update['ID'] = $request['id'];
434 434
 
435
-			$updated = wp_update_post( $data_to_update, true );
435
+			$updated = wp_update_post($data_to_update, true);
436 436
 
437 437
 			// Incase the update operation failed...
438
-			if ( is_wp_error( $updated ) ) {
438
+			if (is_wp_error($updated)) {
439 439
 				return $updated;
440 440
 			}
441 441
 
442 442
 		}
443 443
 
444
-		$updated_discount = get_post( $request['id'] );
444
+		$updated_discount = get_post($request['id']);
445 445
 
446 446
 		// Prepare the response
447
-		$response = $this->prepare_item_for_response( $updated_discount, $request );
447
+		$response = $this->prepare_item_for_response($updated_discount, $request);
448 448
 
449 449
 		/** This action is documented in includes/class-wpinv-rest-item-controller.php */
450
-		do_action( "wpinv_rest_insert_discount", $updated_discount, $request, false );
450
+		do_action("wpinv_rest_insert_discount", $updated_discount, $request, false);
451 451
 
452 452
 		/**
453 453
 		 * Filters the responses for updating single discount requests.
@@ -459,9 +459,9 @@  discard block
 block discarded – undo
459 459
 		 * @param array           $data_to_update Discount properties.
460 460
 		 * @param WP_REST_Request $request The request used.
461 461
 		 */
462
-        $response       = apply_filters( "wpinv_rest_update_discount_response", $response,  $data_to_update, $request );
462
+        $response = apply_filters("wpinv_rest_update_discount_response", $response, $data_to_update, $request);
463 463
 
464
-        return rest_ensure_response( $response );
464
+        return rest_ensure_response($response);
465 465
 	}
466 466
 
467 467
 	/**
@@ -472,19 +472,19 @@  discard block
 block discarded – undo
472 472
 	 * @param WP_REST_Request $request Full details about the request.
473 473
 	 * @return true|WP_Error True if the request has access to delete the discount, WP_Error object otherwise.
474 474
 	 */
475
-	public function delete_item_permissions_check( $request ) {
475
+	public function delete_item_permissions_check($request) {
476 476
 
477 477
 		// Retrieve the discount.
478
-		$discount = $this->get_post( $request['id'] );
479
-		if ( is_wp_error( $discount ) ) {
478
+		$discount = $this->get_post($request['id']);
479
+		if (is_wp_error($discount)) {
480 480
 			return $discount;
481 481
 		} 
482 482
 
483 483
 		// Ensure the current user can delete the discount
484
-		if (! wpinv_current_user_can_manage_invoicing() ) {
484
+		if (!wpinv_current_user_can_manage_invoicing()) {
485 485
 			return new WP_Error( 
486 486
                 'rest_cannot_delete', 
487
-                __( 'Sorry, you are not allowed to delete this discount.', 'invoicing' ), 
487
+                __('Sorry, you are not allowed to delete this discount.', 'invoicing'), 
488 488
                 array( 
489 489
                     'status' => rest_authorization_required_code(),
490 490
                 )
@@ -502,24 +502,24 @@  discard block
 block discarded – undo
502 502
 	 * @param WP_REST_Request $request Full details about the request.
503 503
 	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
504 504
 	 */
505
-	public function delete_item( $request ) {
505
+	public function delete_item($request) {
506 506
 		
507 507
 		// Retrieve the discount.
508
-		$discount = $this->get_post( $request['id'] );
509
-		if ( is_wp_error( $discount ) ) {
508
+		$discount = $this->get_post($request['id']);
509
+		if (is_wp_error($discount)) {
510 510
 			return $discount;
511 511
 		}
512 512
 
513
-		$request->set_param( 'context', 'edit' );
513
+		$request->set_param('context', 'edit');
514 514
 
515 515
 		// Prepare the discount id
516
-		$id    = $discount->ID;
516
+		$id = $discount->ID;
517 517
 
518 518
 		// Prepare the response
519
-		$response = $this->prepare_item_for_response( $discount, $request );
519
+		$response = $this->prepare_item_for_response($discount, $request);
520 520
 
521 521
 		// Delete the discount...
522
-		wpinv_remove_discount( $id );
522
+		wpinv_remove_discount($id);
523 523
 
524 524
 		/**
525 525
 		 * Fires immediately after a single discount is deleted via the REST API.
@@ -530,7 +530,7 @@  discard block
 block discarded – undo
530 530
 		 * @param WP_POST    $discount  The deleted discount.
531 531
 		 * @param WP_REST_Request  $request  The request sent to the API.
532 532
 		 */
533
-		do_action( "wpinv_rest_delete_discount", $discount, $request );
533
+		do_action("wpinv_rest_delete_discount", $discount, $request);
534 534
 
535 535
 		return $response;
536 536
 
@@ -546,44 +546,44 @@  discard block
 block discarded – undo
546 546
 	 */
547 547
 	public function get_collection_params() {
548 548
         
549
-        $query_params               = array(
549
+        $query_params = array(
550 550
 
551 551
             // Discount status.
552 552
             'status'                => array(
553 553
                 'default'           => 'publish',
554
-                'description'       => __( 'Limit result set to discounts assigned one or more statuses.', 'invoicing' ),
554
+                'description'       => __('Limit result set to discounts assigned one or more statuses.', 'invoicing'),
555 555
                 'type'              => 'array',
556
-                'sanitize_callback' => array( $this, 'sanitize_post_statuses' ),
556
+                'sanitize_callback' => array($this, 'sanitize_post_statuses'),
557 557
             ),
558 558
             
559 559
             // Discount types
560 560
             'type'                  => array(
561
-				'description'       => __( 'Type of discounts to fetch.', 'invoicing' ),
561
+				'description'       => __('Type of discounts to fetch.', 'invoicing'),
562 562
 				'type'              => 'array',
563
-				'default'           => array_keys( wpinv_get_discount_types() ),
563
+				'default'           => array_keys(wpinv_get_discount_types()),
564 564
 				'items'             => array(
565
-                    'enum'          => array_keys( wpinv_get_discount_types() ),
565
+                    'enum'          => array_keys(wpinv_get_discount_types()),
566 566
                     'type'          => 'string',
567 567
                 ),
568 568
 			),
569 569
 			
570 570
 			// Number of results per page
571 571
             'limit'                 => array(
572
-				'description'       => __( 'Number of discounts to fetch.', 'invoicing' ),
572
+				'description'       => __('Number of discounts to fetch.', 'invoicing'),
573 573
 				'type'              => 'integer',
574
-				'default'           => (int) get_option( 'posts_per_page' ),
574
+				'default'           => (int) get_option('posts_per_page'),
575 575
             ),
576 576
 
577 577
             // Pagination
578 578
             'page'     => array(
579
-				'description'       => __( 'Current page to fetch.', 'invoicing' ),
579
+				'description'       => __('Current page to fetch.', 'invoicing'),
580 580
 				'type'              => 'integer',
581 581
 				'default'           => 1,
582 582
             ),
583 583
 
584 584
             // Exclude certain items
585 585
             'exclude'  => array(
586
-                'description' => __( 'Ensure result set excludes specific IDs.', 'invoicing' ),
586
+                'description' => __('Ensure result set excludes specific IDs.', 'invoicing'),
587 587
                 'type'        => 'array',
588 588
                 'items'       => array(
589 589
                     'type' => 'integer',
@@ -593,7 +593,7 @@  discard block
 block discarded – undo
593 593
 
594 594
             // Order discounts by
595 595
             'orderby'  => array(
596
-                'description' => __( 'Sort discounts by object attribute.', 'invoicing' ),
596
+                'description' => __('Sort discounts by object attribute.', 'invoicing'),
597 597
                 'type'        => 'string',
598 598
                 'default'     => 'date',
599 599
                 'enum'        => array(
@@ -609,15 +609,15 @@  discard block
 block discarded – undo
609 609
 
610 610
             // How to order
611 611
             'order'    => array(
612
-                'description' => __( 'Order sort attribute ascending or descending.', 'invoicing' ),
612
+                'description' => __('Order sort attribute ascending or descending.', 'invoicing'),
613 613
                 'type'        => 'string',
614 614
                 'default'     => 'DESC',
615
-                'enum'        => array( 'ASC', 'DESC' ),
615
+                'enum'        => array('ASC', 'DESC'),
616 616
 			),
617 617
 			
618 618
 			// Search term
619 619
             'search'                => array(
620
-				'description'       => __( 'Return discounts that match the search term.', 'invoicing' ),
620
+				'description'       => __('Return discounts that match the search term.', 'invoicing'),
621 621
 				'type'              => 'string',
622 622
             ),
623 623
         );
@@ -630,7 +630,7 @@  discard block
 block discarded – undo
630 630
 		 *
631 631
 		 * @param array        $query_params JSON Schema-formatted collection parameters.
632 632
 		 */
633
-		return apply_filters( "wpinv_rest_discounts_collection_params", $query_params );
633
+		return apply_filters("wpinv_rest_discounts_collection_params", $query_params);
634 634
     }
635 635
     
636 636
     /**
@@ -641,7 +641,7 @@  discard block
 block discarded – undo
641 641
 	 * @param object|string $post_type Post type name or object.
642 642
 	 * @return bool Whether the post type is allowed in REST.
643 643
 	 */
644
-	protected function check_is_post_type_allowed( $post_type ) {
644
+	protected function check_is_post_type_allowed($post_type) {
645 645
 		return true;
646 646
 	}
647 647
 
@@ -653,93 +653,93 @@  discard block
 block discarded – undo
653 653
 	 * @param WP_REST_Request $request Request object.
654 654
 	 * @return array|WP_Error Discount Properties or WP_Error.
655 655
 	 */
656
-	protected function prepare_item_for_database( $request ) {
657
-		$prepared_item 		 = new stdClass();
656
+	protected function prepare_item_for_database($request) {
657
+		$prepared_item = new stdClass();
658 658
 		$prepared_item->meta_input = array();
659 659
 
660 660
 		// Post ID.
661
-		if ( isset( $request['id'] ) ) {
662
-			$existing_item = $this->get_post( $request['id'] );
663
-			if ( is_wp_error( $existing_item ) ) {
661
+		if (isset($request['id'])) {
662
+			$existing_item = $this->get_post($request['id']);
663
+			if (is_wp_error($existing_item)) {
664 664
 				return $existing_item;
665 665
 			}
666 666
 
667
-			$prepared_item->ID 		  = $existing_item->ID;
667
+			$prepared_item->ID = $existing_item->ID;
668 668
 		}
669 669
 
670 670
 		$schema = $this->get_item_schema();
671 671
 
672 672
 		// item title.
673
-		if ( ! empty( $schema['properties']['title'] ) && isset( $request['title'] ) ) {
674
-			$prepared_item->post_title = sanitize_text_field( $request['title'] );
673
+		if (!empty($schema['properties']['title']) && isset($request['title'])) {
674
+			$prepared_item->post_title = sanitize_text_field($request['title']);
675 675
 		}
676 676
 
677 677
 		// item status.
678
-		if ( ! empty( $schema['properties']['status'] ) && isset( $request['status'] ) && in_array( $request['status'], array_keys( get_post_stati( array( 'internal' => false ) ) ) ) ) {
679
-			$prepared_item->post_status = sanitize_text_field( $request['status'] );
678
+		if (!empty($schema['properties']['status']) && isset($request['status']) && in_array($request['status'], array_keys(get_post_stati(array('internal' => false))))) {
679
+			$prepared_item->post_status = sanitize_text_field($request['status']);
680 680
 		}
681 681
 
682 682
 		// Code.
683
-		if ( ! empty( $schema['properties']['code'] ) && isset( $request['code'] ) ) {
684
-			$prepared_item->meta_input['_wpi_discount_code'] = trim( $request['code'] );
683
+		if (!empty($schema['properties']['code']) && isset($request['code'])) {
684
+			$prepared_item->meta_input['_wpi_discount_code'] = trim($request['code']);
685 685
 		}
686 686
 
687 687
 		// Type.
688
-		if ( ! empty( $schema['properties']['type'] ) && isset( $request['type'] )  && in_array( $request['type'], array_keys( wpinv_get_discount_types() ) ) ) {
689
-			$prepared_item->meta_input['_wpi_discount_type'] = trim( $request['type'] );
688
+		if (!empty($schema['properties']['type']) && isset($request['type']) && in_array($request['type'], array_keys(wpinv_get_discount_types()))) {
689
+			$prepared_item->meta_input['_wpi_discount_type'] = trim($request['type']);
690 690
 		}
691 691
 
692 692
 		// Amount.
693
-		if ( ! empty( $schema['properties']['amount'] ) && isset( $request['amount'] ) ) {
694
-			$prepared_item->meta_input['_wpi_discount_amount'] = floatval( $request['amount'] );
693
+		if (!empty($schema['properties']['amount']) && isset($request['amount'])) {
694
+			$prepared_item->meta_input['_wpi_discount_amount'] = floatval($request['amount']);
695 695
 		}
696 696
 
697 697
 		// Items.
698
-		if ( ! empty( $schema['properties']['items'] ) && isset( $request['items'] ) ) {
699
-			$prepared_item->meta_input['_wpi_discount_items'] = wpinv_parse_list( $request['items'] );
698
+		if (!empty($schema['properties']['items']) && isset($request['items'])) {
699
+			$prepared_item->meta_input['_wpi_discount_items'] = wpinv_parse_list($request['items']);
700 700
 		}
701 701
 
702 702
 		// Excluded Items.
703
-		if ( ! empty( $schema['properties']['exclude_items'] ) && isset( $request['exclude_items'] ) ) {
704
-			$prepared_item->meta_input['_wpi_discount_excluded_items'] = wpinv_parse_list( $request['exclude_items'] );
703
+		if (!empty($schema['properties']['exclude_items']) && isset($request['exclude_items'])) {
704
+			$prepared_item->meta_input['_wpi_discount_excluded_items'] = wpinv_parse_list($request['exclude_items']);
705 705
 		}
706 706
 
707 707
 		// Start date.
708
-		if ( ! empty( $schema['properties']['start_date'] ) && isset( $request['start_date'] ) ) {
709
-			$prepared_item->meta_input['_wpi_discount_start'] = trim( $request['start_date'] );
708
+		if (!empty($schema['properties']['start_date']) && isset($request['start_date'])) {
709
+			$prepared_item->meta_input['_wpi_discount_start'] = trim($request['start_date']);
710 710
 		}
711 711
 
712 712
 		// End date.
713
-		if ( ! empty( $schema['properties']['end_date'] ) && isset( $request['end_date'] ) ) {
714
-			$prepared_item->meta_input['_wpi_discount_expiration'] = trim( $request['end_date'] );
713
+		if (!empty($schema['properties']['end_date']) && isset($request['end_date'])) {
714
+			$prepared_item->meta_input['_wpi_discount_expiration'] = trim($request['end_date']);
715 715
 		}
716 716
 
717 717
 		// Minimum amount.
718
-		if ( ! empty( $schema['properties']['minimum_amount'] ) && isset( $request['minimum_amount'] ) ) {
719
-			$prepared_item->meta_input['_wpi_discount_min_total'] = floatval( $request['minimum_amount'] );
718
+		if (!empty($schema['properties']['minimum_amount']) && isset($request['minimum_amount'])) {
719
+			$prepared_item->meta_input['_wpi_discount_min_total'] = floatval($request['minimum_amount']);
720 720
 		}
721 721
 
722 722
 		// Maximum amount.
723
-		if ( ! empty( $schema['properties']['maximum_amount'] ) && isset( $request['maximum_amount'] ) ) {
724
-			$prepared_item->meta_input['_wpi_discount_max_total'] = floatval( $request['maximum_amount'] );
723
+		if (!empty($schema['properties']['maximum_amount']) && isset($request['maximum_amount'])) {
724
+			$prepared_item->meta_input['_wpi_discount_max_total'] = floatval($request['maximum_amount']);
725 725
 		}
726 726
 
727 727
 		// Recurring.
728
-		if ( ! empty( $schema['properties']['recurring'] ) && isset( $request['recurring'] ) ) {
729
-			$prepared_item->meta_input['_wpi_discount_is_recurring'] = empty( (int) $request['recurring'] ) ? 0 : 1;
728
+		if (!empty($schema['properties']['recurring']) && isset($request['recurring'])) {
729
+			$prepared_item->meta_input['_wpi_discount_is_recurring'] = empty((int) $request['recurring']) ? 0 : 1;
730 730
 		}
731 731
 
732 732
 		// Maximum uses.
733
-		if ( ! empty( $schema['properties']['max_uses'] ) && isset( $request['max_uses'] ) ) {
734
-			$prepared_item->meta_input['_wpi_discount_max_uses'] = intval( $request['max_uses'] );
733
+		if (!empty($schema['properties']['max_uses']) && isset($request['max_uses'])) {
734
+			$prepared_item->meta_input['_wpi_discount_max_uses'] = intval($request['max_uses']);
735 735
 		}
736 736
 
737 737
 		// Single use.
738
-		if ( ! empty( $schema['properties']['single_use'] ) && isset( $request['single_use'] ) ) {
739
-			$prepared_item->meta_input['_wpi_discount_is_single_use'] = empty( (int) $request['single_use'] ) ? 0 : 1;
738
+		if (!empty($schema['properties']['single_use']) && isset($request['single_use'])) {
739
+			$prepared_item->meta_input['_wpi_discount_is_single_use'] = empty((int) $request['single_use']) ? 0 : 1;
740 740
 		}
741 741
 
742
-		$discount_data = (array) wp_unslash( $prepared_item );
742
+		$discount_data = (array) wp_unslash($prepared_item);
743 743
 
744 744
 		/**
745 745
 		 * Filters an item before it is inserted via the REST API.
@@ -749,7 +749,7 @@  discard block
 block discarded – undo
749 749
 		 * @param array        $discount_data An array of discount data
750 750
 		 * @param WP_REST_Request $request       Request object.
751 751
 		 */
752
-		return apply_filters( "wpinv_rest_pre_insert_discount", $discount_data, $request );
752
+		return apply_filters("wpinv_rest_pre_insert_discount", $discount_data, $request);
753 753
 
754 754
 	}
755 755
 
@@ -762,110 +762,110 @@  discard block
 block discarded – undo
762 762
 	 * @param WP_REST_Request $request Request object.
763 763
 	 * @return WP_REST_Response Response object.
764 764
 	 */
765
-	public function prepare_item_for_response( $discount, $request ) {
765
+	public function prepare_item_for_response($discount, $request) {
766 766
 
767
-		$GLOBALS['post'] = get_post( $discount->ID );
767
+		$GLOBALS['post'] = get_post($discount->ID);
768 768
 
769
-		setup_postdata( $discount->ID );
769
+		setup_postdata($discount->ID);
770 770
 
771 771
 		// Fetch the fields to include in this response.
772
-		$fields = $this->get_fields_for_response( $request );
772
+		$fields = $this->get_fields_for_response($request);
773 773
 
774 774
 		// Base fields for every discount.
775 775
 		$data = array();
776 776
 
777 777
 		// Set up ID.
778
-		if ( rest_is_field_included( 'id', $fields ) ) {
778
+		if (rest_is_field_included('id', $fields)) {
779 779
 			$data['id'] = $discount->ID;
780 780
 		}
781 781
 
782 782
 		// Title.
783
-		if ( rest_is_field_included( 'title', $fields ) ) {
784
-			$data['title'] = get_the_title( $discount->ID );
783
+		if (rest_is_field_included('title', $fields)) {
784
+			$data['title'] = get_the_title($discount->ID);
785 785
 		}
786 786
 
787 787
 		// Code.
788
-		if ( rest_is_field_included( 'code', $fields ) ) {
789
-			$data['code'] = wpinv_get_discount_code( $discount->ID );
788
+		if (rest_is_field_included('code', $fields)) {
789
+			$data['code'] = wpinv_get_discount_code($discount->ID);
790 790
 		}
791 791
 
792 792
 		// Type.
793
-		if ( rest_is_field_included( 'type', $fields ) ) {
794
-			$data['type'] = wpinv_get_discount_type( $discount->ID );
793
+		if (rest_is_field_included('type', $fields)) {
794
+			$data['type'] = wpinv_get_discount_type($discount->ID);
795 795
 		}
796 796
 
797 797
 		// Amount.
798
-		if ( rest_is_field_included( 'amount', $fields ) ) {
799
-			$data['amount'] = wpinv_get_discount_amount( $discount->ID );
798
+		if (rest_is_field_included('amount', $fields)) {
799
+			$data['amount'] = wpinv_get_discount_amount($discount->ID);
800 800
 		}
801 801
 
802 802
 		// Status.
803
-		if ( rest_is_field_included( 'status', $fields ) ) {
804
-			$data['status'] = get_post_status( $discount->ID );
803
+		if (rest_is_field_included('status', $fields)) {
804
+			$data['status'] = get_post_status($discount->ID);
805 805
 		}
806 806
 
807 807
 		// Items.
808
-		if ( rest_is_field_included( 'items', $fields ) ) {
809
-			$data['items'] = wpinv_get_discount_item_reqs( $discount->ID );
808
+		if (rest_is_field_included('items', $fields)) {
809
+			$data['items'] = wpinv_get_discount_item_reqs($discount->ID);
810 810
 		}
811 811
 
812 812
 		// Excluded Items.
813
-		if ( rest_is_field_included( 'exclude_items', $fields ) ) {
814
-			$data['exclude_items'] = wpinv_get_discount_excluded_items( $discount->ID );
813
+		if (rest_is_field_included('exclude_items', $fields)) {
814
+			$data['exclude_items'] = wpinv_get_discount_excluded_items($discount->ID);
815 815
 		}
816 816
 
817 817
 		// Start date.
818
-		if ( rest_is_field_included( 'start_date', $fields ) ) {
819
-			$data['start_date'] = wpinv_get_discount_start_date( $discount->ID );
818
+		if (rest_is_field_included('start_date', $fields)) {
819
+			$data['start_date'] = wpinv_get_discount_start_date($discount->ID);
820 820
 		}
821 821
 
822 822
 		// End date.
823
-		if ( rest_is_field_included( 'end_date', $fields ) ) {
824
-			$data['end_date'] = wpinv_get_discount_expiration( $discount->ID );
823
+		if (rest_is_field_included('end_date', $fields)) {
824
+			$data['end_date'] = wpinv_get_discount_expiration($discount->ID);
825 825
 		}
826 826
 
827 827
 		// Minimum amount.
828
-		if ( rest_is_field_included( 'minimum_amount', $fields ) ) {
829
-			$data['minimum_amount'] = wpinv_get_discount_min_total( $discount->ID );
828
+		if (rest_is_field_included('minimum_amount', $fields)) {
829
+			$data['minimum_amount'] = wpinv_get_discount_min_total($discount->ID);
830 830
 		}
831 831
 
832 832
 		// Maximum amount.
833
-		if ( rest_is_field_included( 'maximum_amount', $fields ) ) {
834
-			$data['maximum_amount'] = wpinv_get_discount_max_total( $discount->ID );
833
+		if (rest_is_field_included('maximum_amount', $fields)) {
834
+			$data['maximum_amount'] = wpinv_get_discount_max_total($discount->ID);
835 835
 		}
836 836
 
837 837
 		// Recurring.
838
-		if ( rest_is_field_included( 'recurring', $fields ) ) {
839
-			$data['recurring'] = wpinv_discount_is_recurring( $discount->ID );
838
+		if (rest_is_field_included('recurring', $fields)) {
839
+			$data['recurring'] = wpinv_discount_is_recurring($discount->ID);
840 840
 		}
841 841
 
842 842
 		// Maximum uses.
843
-		if ( rest_is_field_included( 'max_uses', $fields ) ) {
844
-			$data['max_uses'] = wpinv_get_discount_max_uses( $discount->ID );
843
+		if (rest_is_field_included('max_uses', $fields)) {
844
+			$data['max_uses'] = wpinv_get_discount_max_uses($discount->ID);
845 845
 		}
846 846
 
847 847
 		// Single use.
848
-		if ( rest_is_field_included( 'single_use', $fields ) ) {
849
-			$data['single_use'] = wpinv_discount_is_single_use( $discount->ID );
848
+		if (rest_is_field_included('single_use', $fields)) {
849
+			$data['single_use'] = wpinv_discount_is_single_use($discount->ID);
850 850
 		}
851 851
 
852
-		$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
853
-		$data    = $this->add_additional_fields_to_object( $data, $request );
854
-		$data    = $this->filter_response_by_context( $data, $context );
852
+		$context = !empty($request['context']) ? $request['context'] : 'view';
853
+		$data    = $this->add_additional_fields_to_object($data, $request);
854
+		$data    = $this->filter_response_by_context($data, $context);
855 855
 
856 856
 		// Wrap the data in a response object.
857
-		$response = rest_ensure_response( $data );
857
+		$response = rest_ensure_response($data);
858 858
 
859
-		$links = $this->prepare_links( $discount );
860
-		$response->add_links( $links );
859
+		$links = $this->prepare_links($discount);
860
+		$response->add_links($links);
861 861
 
862
-		if ( ! empty( $links['self']['href'] ) ) {
863
-			$actions = $this->get_available_actions( $discount, $request );
862
+		if (!empty($links['self']['href'])) {
863
+			$actions = $this->get_available_actions($discount, $request);
864 864
 
865 865
 			$self = $links['self']['href'];
866 866
 
867
-			foreach ( $actions as $rel ) {
868
-				$response->add_link( $rel, $self );
867
+			foreach ($actions as $rel) {
868
+				$response->add_link($rel, $self);
869 869
 			}
870 870
 		}
871 871
 
@@ -878,7 +878,7 @@  discard block
 block discarded – undo
878 878
 		 * @param WP_Post    $discount  The discount post object.
879 879
 		 * @param WP_REST_Request  $request  Request object.
880 880
 		 */
881
-		return apply_filters( "wpinv_rest_prepare_discount", $response, $discount, $request );
881
+		return apply_filters("wpinv_rest_prepare_discount", $response, $discount, $request);
882 882
 	}
883 883
 
884 884
 	/**
@@ -891,57 +891,57 @@  discard block
 block discarded – undo
891 891
 	 * @param WP_REST_Request $request Full details about the request.
892 892
 	 * @return array Fields to be included in the response.
893 893
 	 */
894
-	public function get_fields_for_response( $request ) {
894
+	public function get_fields_for_response($request) {
895 895
 		$schema     = $this->get_item_schema();
896
-		$properties = isset( $schema['properties'] ) ? $schema['properties'] : array();
896
+		$properties = isset($schema['properties']) ? $schema['properties'] : array();
897 897
 
898 898
 		$additional_fields = $this->get_additional_fields();
899
-		foreach ( $additional_fields as $field_name => $field_options ) {
899
+		foreach ($additional_fields as $field_name => $field_options) {
900 900
 			// For back-compat, include any field with an empty schema
901 901
 			// because it won't be present in $this->get_item_schema().
902
-			if ( is_null( $field_options['schema'] ) ) {
903
-				$properties[ $field_name ] = $field_options;
902
+			if (is_null($field_options['schema'])) {
903
+				$properties[$field_name] = $field_options;
904 904
 			}
905 905
 		}
906 906
 
907 907
 		// Exclude fields that specify a different context than the request context.
908 908
 		$context = $request['context'];
909
-		if ( $context ) {
910
-			foreach ( $properties as $name => $options ) {
911
-				if ( ! empty( $options['context'] ) && ! in_array( $context, $options['context'], true ) ) {
912
-					unset( $properties[ $name ] );
909
+		if ($context) {
910
+			foreach ($properties as $name => $options) {
911
+				if (!empty($options['context']) && !in_array($context, $options['context'], true)) {
912
+					unset($properties[$name]);
913 913
 				}
914 914
 			}
915 915
 		}
916 916
 
917
-		$fields = array_keys( $properties );
917
+		$fields = array_keys($properties);
918 918
 
919
-		if ( ! isset( $request['_fields'] ) ) {
919
+		if (!isset($request['_fields'])) {
920 920
 			return $fields;
921 921
 		}
922
-		$requested_fields = wpinv_parse_list( $request['_fields'] );
923
-		if ( 0 === count( $requested_fields ) ) {
922
+		$requested_fields = wpinv_parse_list($request['_fields']);
923
+		if (0 === count($requested_fields)) {
924 924
 			return $fields;
925 925
 		}
926 926
 		// Trim off outside whitespace from the comma delimited list.
927
-		$requested_fields = array_map( 'trim', $requested_fields );
927
+		$requested_fields = array_map('trim', $requested_fields);
928 928
 		// Always persist 'id', because it can be needed for add_additional_fields_to_object().
929
-		if ( in_array( 'id', $fields, true ) ) {
929
+		if (in_array('id', $fields, true)) {
930 930
 			$requested_fields[] = 'id';
931 931
 		}
932 932
 		// Return the list of all requested fields which appear in the schema.
933 933
 		return array_reduce(
934 934
 			$requested_fields,
935
-			function( $response_fields, $field ) use ( $fields ) {
936
-				if ( in_array( $field, $fields, true ) ) {
935
+			function($response_fields, $field) use ($fields) {
936
+				if (in_array($field, $fields, true)) {
937 937
 					$response_fields[] = $field;
938 938
 					return $response_fields;
939 939
 				}
940 940
 				// Check for nested fields if $field is not a direct match.
941
-				$nested_fields = explode( '.', $field );
941
+				$nested_fields = explode('.', $field);
942 942
 				// A nested field is included so long as its top-level property is
943 943
 				// present in the schema.
944
-				if ( in_array( $nested_fields[0], $fields, true ) ) {
944
+				if (in_array($nested_fields[0], $fields, true)) {
945 945
 					$response_fields[] = $field;
946 946
 				}
947 947
 				return $response_fields;
@@ -960,8 +960,8 @@  discard block
 block discarded – undo
960 960
 	public function get_item_schema() {
961 961
 
962 962
 		// Maybe retrieve the schema from cache.
963
-		if (  empty( $this->schema ) ) {
964
-			return $this->add_additional_fields_schema( $this->schema );
963
+		if (empty($this->schema)) {
964
+			return $this->add_additional_fields_schema($this->schema);
965 965
 		}
966 966
 
967 967
 		$schema = array(
@@ -973,99 +973,99 @@  discard block
 block discarded – undo
973 973
 			'properties' 		  => array(
974 974
 
975 975
 				'id'           => array(
976
-					'description' => __( 'Unique identifier for the discount.', 'invoicing' ),
976
+					'description' => __('Unique identifier for the discount.', 'invoicing'),
977 977
 					'type'        => 'integer',
978
-					'context'     => array( 'view', 'edit', 'embed' ),
978
+					'context'     => array('view', 'edit', 'embed'),
979 979
 					'readonly'    => true,
980 980
 				),
981 981
 
982 982
 				'title'			  => array(
983
-					'description' => __( 'The title for the discount.', 'invoicing' ),
983
+					'description' => __('The title for the discount.', 'invoicing'),
984 984
 					'type'        => 'string',
985
-					'context'     => array( 'view', 'edit' ),
985
+					'context'     => array('view', 'edit'),
986 986
 				),
987 987
 
988 988
 				'code'        => array(
989
-					'description' => __( 'The discount code.', 'invoicing' ),
989
+					'description' => __('The discount code.', 'invoicing'),
990 990
 					'type'        => 'string',
991
-					'context'     => array( 'view', 'edit', 'embed' ),
991
+					'context'     => array('view', 'edit', 'embed'),
992 992
 					'required'	  => true,
993 993
 				),
994 994
 
995 995
 				'type'        => array(
996
-					'description' => __( 'The type of discount.', 'invoicing' ),
996
+					'description' => __('The type of discount.', 'invoicing'),
997 997
 					'type'        => 'string',
998
-					'enum'        => array_keys( wpinv_get_discount_types() ),
999
-					'context'     => array( 'view', 'edit', 'embed' ),
998
+					'enum'        => array_keys(wpinv_get_discount_types()),
999
+					'context'     => array('view', 'edit', 'embed'),
1000 1000
 					'default'	  => 'percentage',
1001 1001
 				),
1002 1002
 
1003 1003
 				'amount'        => array(
1004
-					'description' => __( 'The discount value.', 'invoicing' ),
1004
+					'description' => __('The discount value.', 'invoicing'),
1005 1005
 					'type'        => 'number',
1006
-					'context'     => array( 'view', 'edit', 'embed' ),
1006
+					'context'     => array('view', 'edit', 'embed'),
1007 1007
 					'required'	  => true,
1008 1008
 				),
1009 1009
 
1010 1010
 				'status'       => array(
1011
-					'description' => __( 'A named status for the discount.', 'invoicing' ),
1011
+					'description' => __('A named status for the discount.', 'invoicing'),
1012 1012
 					'type'        => 'string',
1013
-					'enum'        => array_keys( get_post_stati( array( 'internal' => false ) ) ),
1014
-					'context'     => array( 'view', 'edit' ),
1013
+					'enum'        => array_keys(get_post_stati(array('internal' => false))),
1014
+					'context'     => array('view', 'edit'),
1015 1015
 				),
1016 1016
 
1017 1017
 				'items'       => array(
1018
-					'description' => __( 'Items which need to be in the cart to use this discount or, for "Item Discounts", which items are discounted. If left blank, this discount will be used on any item.', 'invoicing' ),
1018
+					'description' => __('Items which need to be in the cart to use this discount or, for "Item Discounts", which items are discounted. If left blank, this discount will be used on any item.', 'invoicing'),
1019 1019
 					'type'        => 'array',
1020
-					'context'     => array( 'view', 'edit' ),
1020
+					'context'     => array('view', 'edit'),
1021 1021
 				),
1022 1022
 
1023 1023
 				'exclude_items'   => array(
1024
-					'description' => __( 'Items which are NOT allowed to use this discount.', 'invoicing' ),
1024
+					'description' => __('Items which are NOT allowed to use this discount.', 'invoicing'),
1025 1025
 					'type'        => 'array',
1026
-					'context'     => array( 'view', 'edit' ),
1026
+					'context'     => array('view', 'edit'),
1027 1027
 				),
1028 1028
 
1029 1029
 				'start_date'       => array(
1030
-					'description' => __( 'The start date for the discount in the format of yyyy-mm-dd hh:mm:ss  . If provided, the discount can only be used after or on this date.', 'invoicing' ),
1030
+					'description' => __('The start date for the discount in the format of yyyy-mm-dd hh:mm:ss  . If provided, the discount can only be used after or on this date.', 'invoicing'),
1031 1031
 					'type'        => 'string',
1032
-					'context'     => array( 'view', 'edit' ),
1032
+					'context'     => array('view', 'edit'),
1033 1033
 				),
1034 1034
 
1035 1035
 				'end_date'        => array(
1036
-					'description' => __( 'The expiration date for the discount.', 'invoicing' ),
1036
+					'description' => __('The expiration date for the discount.', 'invoicing'),
1037 1037
 					'type'        => 'string',
1038
-					'context'     => array( 'view', 'edit', 'embed' ),
1038
+					'context'     => array('view', 'edit', 'embed'),
1039 1039
 				),
1040 1040
 				
1041 1041
 				'minimum_amount'       => array(
1042
-					'description' => __( 'Minimum amount needed to use this invoice.', 'invoicing' ),
1042
+					'description' => __('Minimum amount needed to use this invoice.', 'invoicing'),
1043 1043
 					'type'        => 'number',
1044
-					'context'     => array( 'view', 'edit', 'embed' ),
1044
+					'context'     => array('view', 'edit', 'embed'),
1045 1045
 				),
1046 1046
 
1047 1047
 				'maximum_amount'       => array(
1048
-					'description' => __( 'Maximum amount needed to use this invoice.', 'invoicing' ),
1048
+					'description' => __('Maximum amount needed to use this invoice.', 'invoicing'),
1049 1049
 					'type'        => 'number',
1050
-					'context'     => array( 'view', 'edit', 'embed' ),
1050
+					'context'     => array('view', 'edit', 'embed'),
1051 1051
 				),
1052 1052
 
1053 1053
 				'recurring'       => array(
1054
-					'description' => __( 'Whether the discount is applied to all recurring payments or only the first recurring payment.', 'invoicing' ),
1054
+					'description' => __('Whether the discount is applied to all recurring payments or only the first recurring payment.', 'invoicing'),
1055 1055
 					'type'        => 'integer',
1056
-					'context'     => array( 'view', 'edit', 'embed' ),
1056
+					'context'     => array('view', 'edit', 'embed'),
1057 1057
 				),
1058 1058
 
1059 1059
 				'max_uses'        => array(
1060
-					'description' => __( 'The maximum number of times this discount code can be used.', 'invoicing' ),
1060
+					'description' => __('The maximum number of times this discount code can be used.', 'invoicing'),
1061 1061
 					'type'        => 'number',
1062
-					'context'     => array( 'view', 'edit', 'embed' ),
1062
+					'context'     => array('view', 'edit', 'embed'),
1063 1063
 				),
1064 1064
 
1065 1065
 				'single_use'       => array(
1066
-					'description' => __( 'Whether or not this discount can only be used once per user.', 'invoicing' ),
1066
+					'description' => __('Whether or not this discount can only be used once per user.', 'invoicing'),
1067 1067
 					'type'        => 'integer',
1068
-					'context'     => array( 'view', 'edit', 'embed' ),
1068
+					'context'     => array('view', 'edit', 'embed'),
1069 1069
 				)
1070 1070
 
1071 1071
 			),
@@ -1083,12 +1083,12 @@  discard block
 block discarded – undo
1083 1083
 		 *
1084 1084
 		 * @param array   $schema    The discount schema.
1085 1085
 		 */
1086
-        $schema = apply_filters( "wpinv_rest_discount_schema", $schema );
1086
+        $schema = apply_filters("wpinv_rest_discount_schema", $schema);
1087 1087
 
1088 1088
 		//  Cache the discount schema.
1089 1089
 		$this->schema = $schema;
1090 1090
 		
1091
-		return $this->add_additional_fields_schema( $this->schema );
1091
+		return $this->add_additional_fields_schema($this->schema);
1092 1092
 	}
1093 1093
 
1094 1094
 	/**
@@ -1100,20 +1100,20 @@  discard block
 block discarded – undo
1100 1100
 	 */
1101 1101
 	protected function get_schema_links() {
1102 1102
 
1103
-		$href = rest_url( "{$this->namespace}/{$this->rest_base}/{id}" );
1103
+		$href = rest_url("{$this->namespace}/{$this->rest_base}/{id}");
1104 1104
 
1105 1105
 		$links = array();
1106 1106
 
1107 1107
 		$links[] = array(
1108 1108
 			'rel'          => 'https://api.w.org/action-publish',
1109
-			'title'        => __( 'The current user can publish this discount.', 'invoicing' ),
1109
+			'title'        => __('The current user can publish this discount.', 'invoicing'),
1110 1110
 			'href'         => $href,
1111 1111
 			'targetSchema' => array(
1112 1112
 				'type'       => 'object',
1113 1113
 				'properties' => array(
1114 1114
 					'status' => array(
1115 1115
 						'type' => 'string',
1116
-						'enum' => array( 'publish', 'future' ),
1116
+						'enum' => array('publish', 'future'),
1117 1117
 					),
1118 1118
 				),
1119 1119
 			),
@@ -1130,18 +1130,18 @@  discard block
 block discarded – undo
1130 1130
 	 * @param WP_Post $discount Post Object.
1131 1131
 	 * @return array Links for the given discount.
1132 1132
 	 */
1133
-	protected function prepare_links( $discount ) {
1133
+	protected function prepare_links($discount) {
1134 1134
 
1135 1135
 		// Prepare the base REST API endpoint for discounts.
1136
-		$base = sprintf( '%s/%s', $this->namespace, $this->rest_base );
1136
+		$base = sprintf('%s/%s', $this->namespace, $this->rest_base);
1137 1137
 
1138 1138
 		// Entity meta.
1139 1139
 		$links = array(
1140 1140
 			'self'       => array(
1141
-				'href' => rest_url( trailingslashit( $base ) . $discount->ID ),
1141
+				'href' => rest_url(trailingslashit($base) . $discount->ID),
1142 1142
 			),
1143 1143
 			'collection' => array(
1144
-				'href' => rest_url( $base ),
1144
+				'href' => rest_url($base),
1145 1145
 			),
1146 1146
 		);
1147 1147
 
@@ -1154,7 +1154,7 @@  discard block
 block discarded – undo
1154 1154
 		 *
1155 1155
 		 * @param array   $links    Rest links.
1156 1156
 		 */
1157
-		return apply_filters( "wpinv_rest_discount_links", $links );
1157
+		return apply_filters("wpinv_rest_discount_links", $links);
1158 1158
 
1159 1159
 	}
1160 1160
 
@@ -1167,19 +1167,19 @@  discard block
 block discarded – undo
1167 1167
 	 * @param WP_REST_Request $request Request object.
1168 1168
 	 * @return array List of link relations.
1169 1169
 	 */
1170
-	protected function get_available_actions( $discount, $request ) {
1170
+	protected function get_available_actions($discount, $request) {
1171 1171
 
1172
-		if ( 'edit' !== $request['context'] ) {
1172
+		if ('edit' !== $request['context']) {
1173 1173
 			return array();
1174 1174
 		}
1175 1175
 
1176 1176
 		$rels = array();
1177 1177
 
1178 1178
 		// Retrieve the post type object.
1179
-		$post_type = get_post_type_object( $discount->post_type );
1179
+		$post_type = get_post_type_object($discount->post_type);
1180 1180
 
1181 1181
 		// Mark discount as published.
1182
-		if ( current_user_can( $post_type->cap->publish_posts ) ) {
1182
+		if (current_user_can($post_type->cap->publish_posts)) {
1183 1183
 			$rels[] = 'https://api.w.org/action-publish';
1184 1184
 		}
1185 1185
 
@@ -1192,7 +1192,7 @@  discard block
 block discarded – undo
1192 1192
 		 *
1193 1193
 		 * @param array   $rels    Available link relations.
1194 1194
 		 */
1195
-		return apply_filters( "wpinv_rest_discount_link_relations", $rels );
1195
+		return apply_filters("wpinv_rest_discount_link_relations", $rels);
1196 1196
 	}
1197 1197
 
1198 1198
 	/**
@@ -1204,7 +1204,7 @@  discard block
 block discarded – undo
1204 1204
 	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
1205 1205
 	 */
1206 1206
 	public function get_discount_types() {
1207
-		return rest_ensure_response( wpinv_get_discount_types() );
1207
+		return rest_ensure_response(wpinv_get_discount_types());
1208 1208
 	}
1209 1209
     
1210 1210
 }
1211 1211
\ No newline at end of file
Please login to merge, or discard this patch.
includes/libraries/wpinv-euvat/class-wpinv-euvat.php 2 patches
Spacing   +723 added lines, -723 removed lines patch added patch discarded remove patch
@@ -1,6 +1,6 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 // Exit if accessed directly.
3
-if (!defined( 'ABSPATH' ) ) exit;
3
+if (!defined('ABSPATH')) exit;
4 4
 
5 5
 class WPInv_EUVat {
6 6
     private static $is_ajax = false;
@@ -8,7 +8,7 @@  discard block
 block discarded – undo
8 8
     private static $instance = false;
9 9
     
10 10
     public static function get_instance() {
11
-        if ( !self::$instance ) {
11
+        if (!self::$instance) {
12 12
             self::$instance = new self();
13 13
             self::$instance->actions();
14 14
         }
@@ -17,137 +17,137 @@  discard block
 block discarded – undo
17 17
     }
18 18
     
19 19
     public function __construct() {
20
-        self::$is_ajax          = defined( 'DOING_AJAX' ) && DOING_AJAX;
20
+        self::$is_ajax          = defined('DOING_AJAX') && DOING_AJAX;
21 21
         self::$default_country  = wpinv_get_default_country();
22 22
     }
23 23
     
24 24
     public static function actions() {
25
-        if ( is_admin() ) {
26
-            add_action( 'admin_enqueue_scripts', array( self::$instance, 'enqueue_admin_scripts' ) );
27
-            add_action( 'wpinv_settings_sections_taxes', array( self::$instance, 'section_vat_settings' ) ); 
28
-            add_action( 'wpinv_settings_taxes', array( self::$instance, 'vat_settings' ) );
29
-            add_filter( 'wpinv_settings_taxes-vat_sanitize', array( self::$instance, 'sanitize_vat_settings' ) );
30
-            add_filter( 'wpinv_settings_taxes-vat_rates_sanitize', array( self::$instance, 'sanitize_vat_rates' ) );
31
-            add_action( 'wp_ajax_wpinv_add_vat_class', array( self::$instance, 'add_class' ) );
32
-            add_action( 'wp_ajax_nopriv_wpinv_add_vat_class', array( self::$instance, 'add_class' ) );
33
-            add_action( 'wp_ajax_wpinv_delete_vat_class', array( self::$instance, 'delete_class' ) );
34
-            add_action( 'wp_ajax_nopriv_wpinv_delete_vat_class', array( self::$instance, 'delete_class' ) );
35
-            add_action( 'wp_ajax_wpinv_update_vat_rates', array( self::$instance, 'update_eu_rates' ) );
36
-            add_action( 'wp_ajax_nopriv_wpinv_update_vat_rates', array( self::$instance, 'update_eu_rates' ) );
37
-            add_action( 'wp_ajax_wpinv_geoip2', array( self::$instance, 'geoip2_download_database' ) );
38
-            add_action( 'wp_ajax_nopriv_wpinv_geoip2', array( self::$instance, 'geoip2_download_database' ) );
39
-        }
40
-        
41
-        add_action( 'wp_enqueue_scripts', array( self::$instance, 'enqueue_vat_scripts' ) );
42
-        add_filter( 'wpinv_default_billing_country', array( self::$instance, 'get_user_country' ), 10 );
43
-        add_filter( 'wpinv_get_user_country', array( self::$instance, 'set_user_country' ), 10 );
44
-        add_action( 'wp_ajax_wpinv_vat_validate', array( self::$instance, 'ajax_vat_validate' ) );
45
-        add_action( 'wp_ajax_nopriv_wpinv_vat_validate', array( self::$instance, 'ajax_vat_validate' ) );
46
-        add_action( 'wp_ajax_wpinv_vat_reset', array( self::$instance, 'ajax_vat_reset' ) );
47
-        add_action( 'wp_ajax_nopriv_wpinv_vat_reset', array( self::$instance, 'ajax_vat_reset' ) );
48
-        add_action( 'wpinv_invoice_print_after_line_items', array( self::$instance, 'show_vat_notice' ), 999, 1 );
49
-        if ( wpinv_use_taxes() ) {
50
-            add_action( 'wpinv_after_billing_fields', array( self::$instance, 'checkout_vat_fields' ) );
51
-            if ( self::allow_vat_rules() ) {
52
-                add_action( 'wpinv_checkout_error_checks', array( self::$instance, 'checkout_vat_validate' ), 10, 2 );
53
-                add_filter( 'wpinv_tax_rate', array( self::$instance, 'get_rate' ), 10, 4 );
25
+        if (is_admin()) {
26
+            add_action('admin_enqueue_scripts', array(self::$instance, 'enqueue_admin_scripts'));
27
+            add_action('wpinv_settings_sections_taxes', array(self::$instance, 'section_vat_settings')); 
28
+            add_action('wpinv_settings_taxes', array(self::$instance, 'vat_settings'));
29
+            add_filter('wpinv_settings_taxes-vat_sanitize', array(self::$instance, 'sanitize_vat_settings'));
30
+            add_filter('wpinv_settings_taxes-vat_rates_sanitize', array(self::$instance, 'sanitize_vat_rates'));
31
+            add_action('wp_ajax_wpinv_add_vat_class', array(self::$instance, 'add_class'));
32
+            add_action('wp_ajax_nopriv_wpinv_add_vat_class', array(self::$instance, 'add_class'));
33
+            add_action('wp_ajax_wpinv_delete_vat_class', array(self::$instance, 'delete_class'));
34
+            add_action('wp_ajax_nopriv_wpinv_delete_vat_class', array(self::$instance, 'delete_class'));
35
+            add_action('wp_ajax_wpinv_update_vat_rates', array(self::$instance, 'update_eu_rates'));
36
+            add_action('wp_ajax_nopriv_wpinv_update_vat_rates', array(self::$instance, 'update_eu_rates'));
37
+            add_action('wp_ajax_wpinv_geoip2', array(self::$instance, 'geoip2_download_database'));
38
+            add_action('wp_ajax_nopriv_wpinv_geoip2', array(self::$instance, 'geoip2_download_database'));
39
+        }
40
+        
41
+        add_action('wp_enqueue_scripts', array(self::$instance, 'enqueue_vat_scripts'));
42
+        add_filter('wpinv_default_billing_country', array(self::$instance, 'get_user_country'), 10);
43
+        add_filter('wpinv_get_user_country', array(self::$instance, 'set_user_country'), 10);
44
+        add_action('wp_ajax_wpinv_vat_validate', array(self::$instance, 'ajax_vat_validate'));
45
+        add_action('wp_ajax_nopriv_wpinv_vat_validate', array(self::$instance, 'ajax_vat_validate'));
46
+        add_action('wp_ajax_wpinv_vat_reset', array(self::$instance, 'ajax_vat_reset'));
47
+        add_action('wp_ajax_nopriv_wpinv_vat_reset', array(self::$instance, 'ajax_vat_reset'));
48
+        add_action('wpinv_invoice_print_after_line_items', array(self::$instance, 'show_vat_notice'), 999, 1);
49
+        if (wpinv_use_taxes()) {
50
+            add_action('wpinv_after_billing_fields', array(self::$instance, 'checkout_vat_fields'));
51
+            if (self::allow_vat_rules()) {
52
+                add_action('wpinv_checkout_error_checks', array(self::$instance, 'checkout_vat_validate'), 10, 2);
53
+                add_filter('wpinv_tax_rate', array(self::$instance, 'get_rate'), 10, 4);
54 54
             }
55 55
         }
56 56
     }        
57 57
     
58
-    public static function get_eu_states( $sort = true ) {
59
-        $eu_states = array( 'AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GB', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE' );
60
-        if ( $sort ) {
61
-            $sort = sort( $eu_states );
58
+    public static function get_eu_states($sort = true) {
59
+        $eu_states = array('AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GB', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE');
60
+        if ($sort) {
61
+            $sort = sort($eu_states);
62 62
         }
63 63
         
64
-        return apply_filters( 'wpinv_get_eu_states', $eu_states, $sort );
64
+        return apply_filters('wpinv_get_eu_states', $eu_states, $sort);
65 65
     }
66 66
     
67
-    public static function get_gst_countries( $sort = true ) {
68
-        $gst_countries  = array( 'AU', 'NZ', 'CA', 'CN' );
67
+    public static function get_gst_countries($sort = true) {
68
+        $gst_countries = array('AU', 'NZ', 'CA', 'CN');
69 69
         
70
-        if ( $sort ) {
71
-            $sort = sort( $gst_countries );
70
+        if ($sort) {
71
+            $sort = sort($gst_countries);
72 72
         }
73 73
         
74
-        return apply_filters( 'wpinv_get_gst_countries', $gst_countries, $sort );
74
+        return apply_filters('wpinv_get_gst_countries', $gst_countries, $sort);
75 75
     }
76 76
     
77
-    public static function is_eu_state( $country_code ) {
78
-        $return = !empty( $country_code ) && in_array( strtoupper( $country_code ), self::get_eu_states() ) ? true : false;
77
+    public static function is_eu_state($country_code) {
78
+        $return = !empty($country_code) && in_array(strtoupper($country_code), self::get_eu_states()) ? true : false;
79 79
                 
80
-        return apply_filters( 'wpinv_is_eu_state', $return, $country_code );
80
+        return apply_filters('wpinv_is_eu_state', $return, $country_code);
81 81
     }
82 82
     
83
-    public static function is_gst_country( $country_code ) {
84
-        $return = !empty( $country_code ) && in_array( strtoupper( $country_code ), self::get_gst_countries() ) ? true : false;
83
+    public static function is_gst_country($country_code) {
84
+        $return = !empty($country_code) && in_array(strtoupper($country_code), self::get_gst_countries()) ? true : false;
85 85
                 
86
-        return apply_filters( 'wpinv_is_gst_country', $return, $country_code );
86
+        return apply_filters('wpinv_is_gst_country', $return, $country_code);
87 87
     }
88 88
     
89 89
     public static function enqueue_vat_scripts() {
90
-        if( wpinv_use_taxes() && wpinv_get_option( 'apply_vat_rules' ) ) {
90
+        if (wpinv_use_taxes() && wpinv_get_option('apply_vat_rules')) {
91 91
             self::load_vat_scripts();
92 92
         }
93 93
     }
94 94
 
95
-    public static function load_vat_scripts(){
96
-        $suffix     = '';//defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
95
+    public static function load_vat_scripts() {
96
+        $suffix = ''; //defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
97 97
 
98
-        wp_register_script( 'wpinv-vat-validation-script', WPINV_PLUGIN_URL . 'assets/js/jsvat' . $suffix . '.js', array( 'jquery' ),  WPINV_VERSION );
99
-        wp_register_script( 'wpinv-vat-script', WPINV_PLUGIN_URL . 'assets/js/euvat' . $suffix . '.js', array( 'jquery' ),  WPINV_VERSION );
98
+        wp_register_script('wpinv-vat-validation-script', WPINV_PLUGIN_URL . 'assets/js/jsvat' . $suffix . '.js', array('jquery'), WPINV_VERSION);
99
+        wp_register_script('wpinv-vat-script', WPINV_PLUGIN_URL . 'assets/js/euvat' . $suffix . '.js', array('jquery'), WPINV_VERSION);
100 100
 
101
-        $vat_name   = self::get_vat_name();
101
+        $vat_name = self::get_vat_name();
102 102
 
103 103
         $vars = array();
104 104
         $vars['UseTaxes'] = wpinv_use_taxes();
105 105
         $vars['EUStates'] = self::get_eu_states();
106
-        $vars['NoRateSet'] = __( 'You have not set a rate. Do you want to continue?', 'invoicing' );
107
-        $vars['EmptyCompany'] = __( 'Please enter your registered company name!', 'invoicing' );
108
-        $vars['EmptyVAT'] = wp_sprintf( __( 'Please enter your %s number!', 'invoicing' ), $vat_name );
109
-        $vars['TotalsRefreshed'] = wp_sprintf( __( 'The invoice totals will be refreshed to update the %s.', 'invoicing' ), $vat_name );
110
-        $vars['ErrValidateVAT'] = wp_sprintf( __( 'Fail to validate the %s number!', 'invoicing' ), $vat_name );
111
-        $vars['ErrResetVAT'] = wp_sprintf( __( 'Fail to reset the %s number!', 'invoicing' ), $vat_name );
112
-        $vars['ErrInvalidVat'] = wp_sprintf( __( 'The %s number supplied does not have a valid format!', 'invoicing' ), $vat_name );
113
-        $vars['ErrInvalidResponse'] = __( 'An invalid response has been received from the server!', 'invoicing' );
106
+        $vars['NoRateSet'] = __('You have not set a rate. Do you want to continue?', 'invoicing');
107
+        $vars['EmptyCompany'] = __('Please enter your registered company name!', 'invoicing');
108
+        $vars['EmptyVAT'] = wp_sprintf(__('Please enter your %s number!', 'invoicing'), $vat_name);
109
+        $vars['TotalsRefreshed'] = wp_sprintf(__('The invoice totals will be refreshed to update the %s.', 'invoicing'), $vat_name);
110
+        $vars['ErrValidateVAT'] = wp_sprintf(__('Fail to validate the %s number!', 'invoicing'), $vat_name);
111
+        $vars['ErrResetVAT'] = wp_sprintf(__('Fail to reset the %s number!', 'invoicing'), $vat_name);
112
+        $vars['ErrInvalidVat'] = wp_sprintf(__('The %s number supplied does not have a valid format!', 'invoicing'), $vat_name);
113
+        $vars['ErrInvalidResponse'] = __('An invalid response has been received from the server!', 'invoicing');
114 114
         $vars['ApplyVATRules'] = $vars['UseTaxes'] ? self::allow_vat_rules() : false;
115 115
         $vars['HideVatFields'] = $vars['ApplyVATRules'] ? self::hide_vat_fields() : true;
116
-        $vars['ErrResponse'] = __( 'The request response is invalid!', 'invoicing' );
117
-        $vars['ErrRateResponse'] = __( 'The get rate request response is invalid', 'invoicing' );
118
-        $vars['PageRefresh'] = __( 'The page will be refreshed in 10 seconds to show the new options.', 'invoicing' );
119
-        $vars['RequestResponseNotValidJSON'] = __( 'The get rate request response is not valid JSON', 'invoicing' );
120
-        $vars['GetRateRequestFailed'] = __( 'The get rate request failed: ', 'invoicing' );
121
-        $vars['NoRateInformationInResponse'] = __( 'The get rate request response does not contain any rate information', 'invoicing' );
122
-        $vars['RatesUpdated'] = __( 'The rates have been updated. Press the save button to record these new rates.', 'invoicing' );
123
-        $vars['IPAddressInformation'] = __( 'IP Address Information', 'invoicing' );
124
-        $vars['VatValidating'] = wp_sprintf( __( 'Validating %s number...', 'invoicing' ), $vat_name );
125
-        $vars['VatReseting'] = __( 'Reseting...', 'invoicing' );
126
-        $vars['VatValidated'] = wp_sprintf( __( '%s number validated', 'invoicing' ), $vat_name );
127
-        $vars['VatNotValidated'] = wp_sprintf( __( '%s number not validated', 'invoicing' ), $vat_name );
128
-        $vars['ConfirmDeleteClass'] = __( 'Are you sure you wish to delete this rates class?', 'invoicing' );
116
+        $vars['ErrResponse'] = __('The request response is invalid!', 'invoicing');
117
+        $vars['ErrRateResponse'] = __('The get rate request response is invalid', 'invoicing');
118
+        $vars['PageRefresh'] = __('The page will be refreshed in 10 seconds to show the new options.', 'invoicing');
119
+        $vars['RequestResponseNotValidJSON'] = __('The get rate request response is not valid JSON', 'invoicing');
120
+        $vars['GetRateRequestFailed'] = __('The get rate request failed: ', 'invoicing');
121
+        $vars['NoRateInformationInResponse'] = __('The get rate request response does not contain any rate information', 'invoicing');
122
+        $vars['RatesUpdated'] = __('The rates have been updated. Press the save button to record these new rates.', 'invoicing');
123
+        $vars['IPAddressInformation'] = __('IP Address Information', 'invoicing');
124
+        $vars['VatValidating'] = wp_sprintf(__('Validating %s number...', 'invoicing'), $vat_name);
125
+        $vars['VatReseting'] = __('Reseting...', 'invoicing');
126
+        $vars['VatValidated'] = wp_sprintf(__('%s number validated', 'invoicing'), $vat_name);
127
+        $vars['VatNotValidated'] = wp_sprintf(__('%s number not validated', 'invoicing'), $vat_name);
128
+        $vars['ConfirmDeleteClass'] = __('Are you sure you wish to delete this rates class?', 'invoicing');
129 129
         $vars['isFront'] = is_admin() ? false : true;
130 130
         $vars['baseCountry'] = wpinv_get_default_country();
131
-        $vars['disableVATSameCountry'] = ( self::same_country_rule() == 'no' ? true : false );
132
-        $vars['disableVATSimpleCheck'] = wpinv_get_option( 'vat_offline_check' ) ? true : false;
131
+        $vars['disableVATSameCountry'] = (self::same_country_rule() == 'no' ? true : false);
132
+        $vars['disableVATSimpleCheck'] = wpinv_get_option('vat_offline_check') ? true : false;
133 133
 
134
-        wp_enqueue_script( 'wpinv-vat-validation-script' );
135
-        wp_enqueue_script( 'wpinv-vat-script' );
136
-        wp_localize_script( 'wpinv-vat-script', 'WPInv_VAT_Vars', $vars );
134
+        wp_enqueue_script('wpinv-vat-validation-script');
135
+        wp_enqueue_script('wpinv-vat-script');
136
+        wp_localize_script('wpinv-vat-script', 'WPInv_VAT_Vars', $vars);
137 137
     }
138 138
 
139 139
     public static function enqueue_admin_scripts() {
140
-        if( isset( $_GET['page'] ) && 'wpinv-settings' == $_GET['page'] ) {
140
+        if (isset($_GET['page']) && 'wpinv-settings' == $_GET['page']) {
141 141
             self::load_vat_scripts();
142 142
         }
143 143
     }
144 144
     
145
-    public static function section_vat_settings( $sections ) {
146
-        if ( !empty( $sections ) ) {
147
-            $sections['vat'] = __( 'EU VAT Settings', 'invoicing' );
145
+    public static function section_vat_settings($sections) {
146
+        if (!empty($sections)) {
147
+            $sections['vat'] = __('EU VAT Settings', 'invoicing');
148 148
             
149
-            if ( self::allow_vat_classes() ) {
150
-                $sections['vat_rates'] = __( 'EU VAT Rates', 'invoicing' );
149
+            if (self::allow_vat_classes()) {
150
+                $sections['vat_rates'] = __('EU VAT Rates', 'invoicing');
151 151
             }
152 152
         }
153 153
         return $sections;
@@ -156,52 +156,52 @@  discard block
 block discarded – undo
156 156
     public static function vat_rates_settings() {
157 157
         $vat_classes = self::get_rate_classes();
158 158
         $vat_rates = array();
159
-        $vat_class = isset( $_REQUEST['wpi_sub'] ) && $_REQUEST['wpi_sub'] !== '' && isset( $vat_classes[$_REQUEST['wpi_sub']] )? sanitize_text_field( $_REQUEST['wpi_sub'] ) : '_new';
160
-        $current_url = remove_query_arg( 'wpi_sub' );
159
+        $vat_class = isset($_REQUEST['wpi_sub']) && $_REQUEST['wpi_sub'] !== '' && isset($vat_classes[$_REQUEST['wpi_sub']]) ? sanitize_text_field($_REQUEST['wpi_sub']) : '_new';
160
+        $current_url = remove_query_arg('wpi_sub');
161 161
         
162 162
         $vat_rates['vat_rates_header'] = array(
163 163
             'id' => 'vat_rates_header',
164
-            'name' => '<h3>' . __( 'Manage VAT Rates', 'invoicing' ) . '</h3>',
164
+            'name' => '<h3>' . __('Manage VAT Rates', 'invoicing') . '</h3>',
165 165
             'desc' => '',
166 166
             'type' => 'header',
167 167
             'size' => 'regular'
168 168
         );
169 169
         $vat_rates['vat_rates_class'] = array(
170 170
             'id'          => 'vat_rates_class',
171
-            'name'        => __( 'Edit VAT Rates', 'invoicing' ),
172
-            'desc'        => __( 'The standard rate will apply where no explicit rate is provided.', 'invoicing' ),
171
+            'name'        => __('Edit VAT Rates', 'invoicing'),
172
+            'desc'        => __('The standard rate will apply where no explicit rate is provided.', 'invoicing'),
173 173
             'type'        => 'select',
174
-            'options'     => array_merge( $vat_classes, array( '_new' => __( 'Add New Rate Class', 'invoicing' ) ) ),
175
-            'placeholder' => __( 'Select a VAT Rate', 'invoicing' ),
174
+            'options'     => array_merge($vat_classes, array('_new' => __('Add New Rate Class', 'invoicing'))),
175
+            'placeholder' => __('Select a VAT Rate', 'invoicing'),
176 176
             'selected'    => $vat_class,
177 177
             'class'       => 'wpi_select2',
178 178
             'onchange'    => 'document.location.href="' . $current_url . '&wpi_sub=" + this.value;',
179 179
         );
180 180
         
181
-        if ( $vat_class != '_standard' && $vat_class != '_new' ) {
181
+        if ($vat_class != '_standard' && $vat_class != '_new') {
182 182
             $vat_rates['vat_rate_delete'] = array(
183 183
                 'id'   => 'vat_rate_delete',
184 184
                 'type' => 'vat_rate_delete',
185 185
             );
186 186
         }
187 187
                     
188
-        if ( $vat_class == '_new' ) {
188
+        if ($vat_class == '_new') {
189 189
             $vat_rates['vat_rates_settings'] = array(
190 190
                 'id' => 'vat_rates_settings',
191
-                'name' => '<h3>' . __( 'Add New Rate Class', 'invoicing' ) . '</h3>',
191
+                'name' => '<h3>' . __('Add New Rate Class', 'invoicing') . '</h3>',
192 192
                 'type' => 'header',
193 193
             );
194 194
             $vat_rates['vat_rate_name'] = array(
195 195
                 'id'   => 'vat_rate_name',
196
-                'name' => __( 'Name', 'invoicing' ),
197
-                'desc' => __( 'A short name for the new VAT Rate class', 'invoicing' ),
196
+                'name' => __('Name', 'invoicing'),
197
+                'desc' => __('A short name for the new VAT Rate class', 'invoicing'),
198 198
                 'type' => 'text',
199 199
                 'size' => 'regular',
200 200
             );
201 201
             $vat_rates['vat_rate_desc'] = array(
202 202
                 'id'   => 'vat_rate_desc',
203
-                'name' => __( 'Description', 'invoicing' ),
204
-                'desc' => __( 'Manage VAT Rate class', 'invoicing' ),
203
+                'name' => __('Description', 'invoicing'),
204
+                'desc' => __('Manage VAT Rate class', 'invoicing'),
205 205
                 'type' => 'text',
206 206
                 'size' => 'regular',
207 207
             );
@@ -213,7 +213,7 @@  discard block
 block discarded – undo
213 213
             $vat_rates['vat_rates'] = array(
214 214
                 'id'   => 'vat_rates',
215 215
                 'name' => '<h3>' . $vat_classes[$vat_class] . '</h3>',
216
-                'desc' => self::get_class_desc( $vat_class ),
216
+                'desc' => self::get_class_desc($vat_class),
217 217
                 'type' => 'vat_rates',
218 218
             );
219 219
         }
@@ -221,12 +221,12 @@  discard block
 block discarded – undo
221 221
         return $vat_rates;
222 222
     }
223 223
     
224
-    public static function vat_settings( $settings ) {
225
-        if ( !empty( $settings ) ) {    
224
+    public static function vat_settings($settings) {
225
+        if (!empty($settings)) {    
226 226
             $vat_settings = array();
227 227
             $vat_settings['vat_company_title'] = array(
228 228
                 'id' => 'vat_company_title',
229
-                'name' => '<h3>' . __( 'Your Company Details', 'invoicing' ) . '</h3>',
229
+                'name' => '<h3>' . __('Your Company Details', 'invoicing') . '</h3>',
230 230
                 'desc' => '',
231 231
                 'type' => 'header',
232 232
                 'size' => 'regular'
@@ -234,22 +234,22 @@  discard block
 block discarded – undo
234 234
             
235 235
             $vat_settings['vat_company_name'] = array(
236 236
                 'id' => 'vat_company_name',
237
-                'name' => __( 'Your Company Name', 'invoicing' ),
238
-                'desc' => wp_sprintf(__( 'Your company name as it appears on your VAT return, you can verify it via your VAT ID on the %sEU VIES System.%s', 'invoicing' ), '<a href="http://ec.europa.eu/taxation_customs/vies/" target="_blank">', '</a>' ),
237
+                'name' => __('Your Company Name', 'invoicing'),
238
+                'desc' => wp_sprintf(__('Your company name as it appears on your VAT return, you can verify it via your VAT ID on the %sEU VIES System.%s', 'invoicing'), '<a href="http://ec.europa.eu/taxation_customs/vies/" target="_blank">', '</a>'),
239 239
                 'type' => 'text',
240 240
                 'size' => 'regular',
241 241
             );
242 242
             
243 243
             $vat_settings['vat_number'] = array(
244 244
                 'id'   => 'vat_number',
245
-                'name' => __( 'Your VAT Number', 'invoicing' ),
245
+                'name' => __('Your VAT Number', 'invoicing'),
246 246
                 'type' => 'vat_number',
247 247
                 'size' => 'regular',
248 248
             );
249 249
 
250 250
             $vat_settings['vat_settings_title'] = array(
251 251
                 'id' => 'vat_settings_title',
252
-                'name' => '<h3>' . __( 'Apply VAT Settings', 'invoicing' ) . '</h3>',
252
+                'name' => '<h3>' . __('Apply VAT Settings', 'invoicing') . '</h3>',
253 253
                 'desc' => '',
254 254
                 'type' => 'header',
255 255
                 'size' => 'regular'
@@ -257,8 +257,8 @@  discard block
 block discarded – undo
257 257
 
258 258
             $vat_settings['apply_vat_rules'] = array(
259 259
                 'id' => 'apply_vat_rules',
260
-                'name' => __( 'Enable VAT Rules', 'invoicing' ),
261
-                'desc' => __( 'Apply VAT to consumer sales from IP addresses within the EU, even if the billing address is outside the EU.', 'invoicing' ) . '<br><font style="color:red">' . __( 'Do not disable unless you know what you are doing.', 'invoicing' ) . '</font>',
260
+                'name' => __('Enable VAT Rules', 'invoicing'),
261
+                'desc' => __('Apply VAT to consumer sales from IP addresses within the EU, even if the billing address is outside the EU.', 'invoicing') . '<br><font style="color:red">' . __('Do not disable unless you know what you are doing.', 'invoicing') . '</font>',
262 262
                 'type' => 'checkbox',
263 263
                 'std' => '1'
264 264
             );
@@ -274,8 +274,8 @@  discard block
 block discarded – undo
274 274
 
275 275
             $vat_settings['vat_prevent_b2c_purchase'] = array(
276 276
                 'id' => 'vat_prevent_b2c_purchase',
277
-                'name' => __( 'Prevent EU B2C Sales', 'invoicing' ),
278
-                'desc' => __( 'Enable this option if you are not registered for VAT in the EU.', 'invoicing' ),
277
+                'name' => __('Prevent EU B2C Sales', 'invoicing'),
278
+                'desc' => __('Enable this option if you are not registered for VAT in the EU.', 'invoicing'),
279 279
                 'type' => 'checkbox'
280 280
             );
281 281
 
@@ -283,22 +283,22 @@  discard block
 block discarded – undo
283 283
 
284 284
             $vat_settings['vat_same_country_rule'] = array(
285 285
                 'id'          => 'vat_same_country_rule',
286
-                'name'        => __( 'Same Country Rule', 'invoicing' ),
287
-                'desc'        => __( 'Select how you want to handle VAT charge if sales are in the same country as the base country.', 'invoicing' ),
286
+                'name'        => __('Same Country Rule', 'invoicing'),
287
+                'desc'        => __('Select how you want to handle VAT charge if sales are in the same country as the base country.', 'invoicing'),
288 288
                 'type'        => 'select',
289 289
                 'options'     => array(
290
-                    ''          => __( 'Normal', 'invoicing' ),
291
-                    'no'        => __( 'No VAT', 'invoicing' ),
292
-                    'always'    => __( 'Always apply VAT', 'invoicing' ),
290
+                    ''          => __('Normal', 'invoicing'),
291
+                    'no'        => __('No VAT', 'invoicing'),
292
+                    'always'    => __('Always apply VAT', 'invoicing'),
293 293
                 ),
294
-                'placeholder' => __( 'Select an option', 'invoicing' ),
294
+                'placeholder' => __('Select an option', 'invoicing'),
295 295
                 'std'         => '',
296 296
                 'class'   => 'wpi_select2',
297 297
             );
298 298
 
299 299
             $vat_settings['vat_checkout_title'] = array(
300 300
                 'id' => 'vat_checkout_title',
301
-                'name' => '<h3>' . __( 'Checkout Fields', 'invoicing' ) . '</h3>',
301
+                'name' => '<h3>' . __('Checkout Fields', 'invoicing') . '</h3>',
302 302
                 'desc' => '',
303 303
                 'type' => 'header',
304 304
                 'size' => 'regular'
@@ -306,14 +306,14 @@  discard block
 block discarded – undo
306 306
 
307 307
             $vat_settings['vat_disable_fields'] = array(
308 308
                 'id' => 'vat_disable_fields',
309
-                'name' => __( 'Disable VAT Fields', 'invoicing' ),
310
-                'desc' => __( 'Disable VAT fields if Invoicing is being used for GST.', 'invoicing' ) . '<br><font style="color:red">' . __( 'Do not disable if you have enabled Prevent EU B2C sales, otherwise Prevent EU B2C sales setting will not work.', 'invoicing' ) . '</font>',
309
+                'name' => __('Disable VAT Fields', 'invoicing'),
310
+                'desc' => __('Disable VAT fields if Invoicing is being used for GST.', 'invoicing') . '<br><font style="color:red">' . __('Do not disable if you have enabled Prevent EU B2C sales, otherwise Prevent EU B2C sales setting will not work.', 'invoicing') . '</font>',
311 311
                 'type' => 'checkbox'
312 312
             );
313 313
 
314 314
             $vat_settings['vat_ip_lookup'] = array(
315 315
                 'id'   => 'vat_ip_lookup',
316
-                'name' => __( 'IP Country Look-up', 'invoicing' ),
316
+                'name' => __('IP Country Look-up', 'invoicing'),
317 317
                 'type' => 'vat_ip_lookup',
318 318
                 'size' => 'regular',
319 319
                 'std' => 'default',
@@ -322,21 +322,21 @@  discard block
 block discarded – undo
322 322
 
323 323
             $vat_settings['hide_ip_address'] = array(
324 324
                 'id' => 'hide_ip_address',
325
-                'name' => __( 'Hide IP Info at Checkout', 'invoicing' ),
326
-                'desc' => __( 'Hide the user IP info at checkout.', 'invoicing' ),
325
+                'name' => __('Hide IP Info at Checkout', 'invoicing'),
326
+                'desc' => __('Hide the user IP info at checkout.', 'invoicing'),
327 327
                 'type' => 'checkbox'
328 328
             );
329 329
 
330 330
             $vat_settings['vat_ip_country_default'] = array(
331 331
                 'id' => 'vat_ip_country_default',
332
-                'name' => __( 'Enable IP Country as Default', 'invoicing' ),
333
-                'desc' => __( 'Show the country of the users IP as the default country, otherwise the site default country will be used.', 'invoicing' ),
332
+                'name' => __('Enable IP Country as Default', 'invoicing'),
333
+                'desc' => __('Show the country of the users IP as the default country, otherwise the site default country will be used.', 'invoicing'),
334 334
                 'type' => 'checkbox'
335 335
             );
336 336
 
337 337
             $vat_settings['vies_validation_title'] = array(
338 338
                 'id' => 'vies_validation_title',
339
-                'name' => '<h3>' . __( 'VIES Validation', 'invoicing' ) . '</h3>',
339
+                'name' => '<h3>' . __('VIES Validation', 'invoicing') . '</h3>',
340 340
                 'desc' => '',
341 341
                 'type' => 'header',
342 342
                 'size' => 'regular'
@@ -344,37 +344,37 @@  discard block
 block discarded – undo
344 344
 
345 345
             $vat_settings['vat_vies_check'] = array(
346 346
                 'id' => 'vat_vies_check',
347
-                'name' => __( 'Disable VIES VAT ID Check', 'invoicing' ),
348
-                'desc' => wp_sprintf( __( 'Prevent VAT numbers from being validated by the %sEU VIES System.%s', 'invoicing' ), '<a href="http://ec.europa.eu/taxation_customs/vies/" target="_blank">', '</a>' ),
347
+                'name' => __('Disable VIES VAT ID Check', 'invoicing'),
348
+                'desc' => wp_sprintf(__('Prevent VAT numbers from being validated by the %sEU VIES System.%s', 'invoicing'), '<a href="http://ec.europa.eu/taxation_customs/vies/" target="_blank">', '</a>'),
349 349
                 'type' => 'checkbox'
350 350
             );
351 351
 
352 352
             $vat_settings['vat_disable_company_name_check'] = array(
353 353
                 'id' => 'vat_disable_company_name_check',
354
-                'name' => __( 'Disable VIES Name Check', 'invoicing' ),
355
-                'desc' => wp_sprintf( __( 'Prevent company name from being validated by the %sEU VIES System.%s', 'invoicing' ), '<a href="http://ec.europa.eu/taxation_customs/vies/" target="_blank">', '</a>' ),
354
+                'name' => __('Disable VIES Name Check', 'invoicing'),
355
+                'desc' => wp_sprintf(__('Prevent company name from being validated by the %sEU VIES System.%s', 'invoicing'), '<a href="http://ec.europa.eu/taxation_customs/vies/" target="_blank">', '</a>'),
356 356
                 'type' => 'checkbox'
357 357
             );
358 358
 
359 359
             $vat_settings['vat_offline_check'] = array(
360 360
                 'id' => 'vat_offline_check',
361
-                'name' => __( 'Disable Basic Checks', 'invoicing' ),
362
-                'desc' => __( 'Disable basic JS checks for correct format of VAT number. (Not Recommended)', 'invoicing' ),
361
+                'name' => __('Disable Basic Checks', 'invoicing'),
362
+                'desc' => __('Disable basic JS checks for correct format of VAT number. (Not Recommended)', 'invoicing'),
363 363
                 'type' => 'checkbox'
364 364
             );
365 365
             
366 366
 
367 367
             $settings['vat'] = $vat_settings;
368 368
             
369
-            if ( self::allow_vat_classes() ) {
369
+            if (self::allow_vat_classes()) {
370 370
                 $settings['vat_rates'] = self::vat_rates_settings();
371 371
             }
372 372
             
373 373
             $eu_fallback_rate = array(
374 374
                 'id'   => 'eu_fallback_rate',
375
-                'name' => '<h3>' . __( 'VAT rate for EU member states', 'invoicing' ) . '</h3>',
375
+                'name' => '<h3>' . __('VAT rate for EU member states', 'invoicing') . '</h3>',
376 376
                 'type' => 'eu_fallback_rate',
377
-                'desc' => __( 'Enter the VAT rate to be charged for EU member states. You can edit the rates for each member state when a country rate has been set up by pressing this button.', 'invoicing' ),
377
+                'desc' => __('Enter the VAT rate to be charged for EU member states. You can edit the rates for each member state when a country rate has been set up by pressing this button.', 'invoicing'),
378 378
                 'std'  => '20',
379 379
                 'size' => 'small'
380 380
             );
@@ -390,11 +390,11 @@  discard block
 block discarded – undo
390 390
         $database_url       = 'http' . (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] === 'on' ? 's' : '') . '://geolite.maxmind.com/download/geoip/database/';
391 391
         $destination_dir    = $upload_dir['basedir'] . '/invoicing';
392 392
         
393
-        if ( !is_dir( $destination_dir ) ) { 
394
-            mkdir( $destination_dir );
393
+        if (!is_dir($destination_dir)) { 
394
+            mkdir($destination_dir);
395 395
         }
396 396
         
397
-        $database_files     = array(
397
+        $database_files = array(
398 398
             'country'   => array(
399 399
                 'source'        => $database_url . 'GeoLite2-Country.mmdb.gz',
400 400
                 'destination'   => $destination_dir . '/GeoLite2-Country.mmdb',
@@ -405,57 +405,57 @@  discard block
 block discarded – undo
405 405
             )
406 406
         );
407 407
 
408
-        foreach( $database_files as $database => $files ) {
409
-            $result = self::geoip2_download_file( $files['source'], $files['destination'] );
408
+        foreach ($database_files as $database => $files) {
409
+            $result = self::geoip2_download_file($files['source'], $files['destination']);
410 410
             
411
-            if ( empty( $result['success'] ) ) {
411
+            if (empty($result['success'])) {
412 412
                 echo $result['message'];
413 413
                 exit;
414 414
             }
415 415
             
416
-            wpinv_update_option( 'wpinv_geoip2_date_updated', current_time( 'timestamp' ) );
417
-            echo sprintf(__( 'GeoIP2 %s database updated successfully.', 'invoicing' ), $database ) . ' ';
416
+            wpinv_update_option('wpinv_geoip2_date_updated', current_time('timestamp'));
417
+            echo sprintf(__('GeoIP2 %s database updated successfully.', 'invoicing'), $database) . ' ';
418 418
         }
419 419
         
420 420
         exit;
421 421
     }
422 422
     
423
-    public static function geoip2_download_file( $source_url, $destination_file ) {
423
+    public static function geoip2_download_file($source_url, $destination_file) {
424 424
         $success    = false;
425 425
         $message    = '';
426 426
         
427
-        if ( !function_exists( 'download_url' ) ) {
428
-            require_once( ABSPATH . 'wp-admin/includes/file.php' );
427
+        if (!function_exists('download_url')) {
428
+            require_once(ABSPATH . 'wp-admin/includes/file.php');
429 429
         }
430 430
 
431
-        $temp_file  = download_url( $source_url );
431
+        $temp_file = download_url($source_url);
432 432
         
433
-        if ( is_wp_error( $temp_file ) ) {
434
-            $message = sprintf( __( 'Error while downloading GeoIp2 database( %s ): %s', 'invoicing' ), $source_url, $temp_file->get_error_message() );
433
+        if (is_wp_error($temp_file)) {
434
+            $message = sprintf(__('Error while downloading GeoIp2 database( %s ): %s', 'invoicing'), $source_url, $temp_file->get_error_message());
435 435
         } else {
436
-            $handle = gzopen( $temp_file, 'rb' );
436
+            $handle = gzopen($temp_file, 'rb');
437 437
             
438
-            if ( $handle ) {
439
-                $fopen  = fopen( $destination_file, 'wb' );
440
-                if ( $fopen ) {
441
-                    while ( ( $data = gzread( $handle, 4096 ) ) != false ) {
442
-                        fwrite( $fopen, $data );
438
+            if ($handle) {
439
+                $fopen = fopen($destination_file, 'wb');
440
+                if ($fopen) {
441
+                    while (($data = gzread($handle, 4096)) != false) {
442
+                        fwrite($fopen, $data);
443 443
                     }
444 444
 
445
-                    gzclose( $handle );
446
-                    fclose( $fopen );
445
+                    gzclose($handle);
446
+                    fclose($fopen);
447 447
                         
448 448
                     $success = true;
449 449
                 } else {
450
-                    gzclose( $handle );
451
-                    $message = sprintf( __( 'Error could not open destination GeoIp2 database file for writing: %s', 'invoicing' ), $destination_file );
450
+                    gzclose($handle);
451
+                    $message = sprintf(__('Error could not open destination GeoIp2 database file for writing: %s', 'invoicing'), $destination_file);
452 452
                 }
453 453
             } else {
454
-                $message = sprintf( __( 'Error could not open GeoIp2 database file for reading: %s', 'invoicing' ), $temp_file );
454
+                $message = sprintf(__('Error could not open GeoIp2 database file for reading: %s', 'invoicing'), $temp_file);
455 455
             }
456 456
             
457
-            if ( file_exists( $temp_file ) ) {
458
-                unlink( $temp_file );
457
+            if (file_exists($temp_file)) {
458
+                unlink($temp_file);
459 459
             }
460 460
         }
461 461
         
@@ -467,11 +467,11 @@  discard block
 block discarded – undo
467 467
     }
468 468
     
469 469
     public static function load_geoip2() {
470
-        if ( defined( 'WPINV_GEOIP2_LODDED' ) ) {
470
+        if (defined('WPINV_GEOIP2_LODDED')) {
471 471
             return;
472 472
         }
473 473
         
474
-        if ( !class_exists( '\MaxMind\Db\Reader' ) ) {
474
+        if (!class_exists('\MaxMind\Db\Reader')) {
475 475
             $maxmind_db_files = array(
476 476
                 'Reader/Decoder.php',
477 477
                 'Reader/InvalidDatabaseException.php',
@@ -480,12 +480,12 @@  discard block
 block discarded – undo
480 480
                 'Reader.php',
481 481
             );
482 482
             
483
-            foreach ( $maxmind_db_files as $key => $file ) {
484
-                require_once( WPINV_PLUGIN_DIR . 'includes/libraries/MaxMind/Db/' . $file );
483
+            foreach ($maxmind_db_files as $key => $file) {
484
+                require_once(WPINV_PLUGIN_DIR . 'includes/libraries/MaxMind/Db/' . $file);
485 485
             }
486 486
         }
487 487
         
488
-        if ( !class_exists( '\GeoIp2\Database\Reader' ) ) {        
488
+        if (!class_exists('\GeoIp2\Database\Reader')) {        
489 489
             $geoip2_files = array(
490 490
                 'ProviderInterface.php',
491 491
                 'Compat/JsonSerializable.php',
@@ -519,23 +519,23 @@  discard block
 block discarded – undo
519 519
                 'WebService/Client.php',
520 520
             );
521 521
             
522
-            foreach ( $geoip2_files as $key => $file ) {
523
-                require_once( WPINV_PLUGIN_DIR . 'includes/libraries/GeoIp2/' . $file );
522
+            foreach ($geoip2_files as $key => $file) {
523
+                require_once(WPINV_PLUGIN_DIR . 'includes/libraries/GeoIp2/' . $file);
524 524
             }
525 525
         }
526 526
 
527
-        define( 'WPINV_GEOIP2_LODDED', true );
527
+        define('WPINV_GEOIP2_LODDED', true);
528 528
     }
529 529
 
530 530
     public static function geoip2_country_dbfile() {
531 531
         $upload_dir = wp_upload_dir();
532 532
 
533
-        if ( !isset( $upload_dir['basedir'] ) ) {
533
+        if (!isset($upload_dir['basedir'])) {
534 534
             return false;
535 535
         }
536 536
 
537 537
         $filename = $upload_dir['basedir'] . '/invoicing/GeoLite2-Country.mmdb';
538
-        if ( !file_exists( $filename ) ) {
538
+        if (!file_exists($filename)) {
539 539
             return false;
540 540
         }
541 541
         
@@ -545,12 +545,12 @@  discard block
 block discarded – undo
545 545
     public static function geoip2_city_dbfile() {
546 546
         $upload_dir = wp_upload_dir();
547 547
 
548
-        if ( !isset( $upload_dir['basedir'] ) ) {
548
+        if (!isset($upload_dir['basedir'])) {
549 549
             return false;
550 550
         }
551 551
 
552 552
         $filename = $upload_dir['basedir'] . '/invoicing/GeoLite2-City.mmdb';
553
-        if ( !file_exists( $filename ) ) {
553
+        if (!file_exists($filename)) {
554 554
             return false;
555 555
         }
556 556
         
@@ -561,10 +561,10 @@  discard block
 block discarded – undo
561 561
         try {
562 562
             self::load_geoip2();
563 563
 
564
-            if ( $filename = self::geoip2_country_dbfile() ) {
565
-                return new \GeoIp2\Database\Reader( $filename );
564
+            if ($filename = self::geoip2_country_dbfile()) {
565
+                return new \GeoIp2\Database\Reader($filename);
566 566
             }
567
-        } catch( Exception $e ) {
567
+        } catch (Exception $e) {
568 568
             return false;
569 569
         }
570 570
         
@@ -575,183 +575,183 @@  discard block
 block discarded – undo
575 575
         try {
576 576
             self::load_geoip2();
577 577
 
578
-            if ( $filename = self::geoip2_city_dbfile() ) {
579
-                return new \GeoIp2\Database\Reader( $filename );
578
+            if ($filename = self::geoip2_city_dbfile()) {
579
+                return new \GeoIp2\Database\Reader($filename);
580 580
             }
581
-        } catch( Exception $e ) {
581
+        } catch (Exception $e) {
582 582
             return false;
583 583
         }
584 584
         
585 585
         return false;
586 586
     }
587 587
 
588
-    public static function geoip2_country_record( $ip_address ) {
588
+    public static function geoip2_country_record($ip_address) {
589 589
         try {
590 590
             $reader = self::geoip2_country_reader();
591 591
 
592
-            if ( $reader ) {
593
-                $record = $reader->country( $ip_address );
592
+            if ($reader) {
593
+                $record = $reader->country($ip_address);
594 594
                 
595
-                if ( !empty( $record->country->isoCode ) ) {
595
+                if (!empty($record->country->isoCode)) {
596 596
                     return $record;
597 597
                 }
598 598
             }
599
-        } catch(\InvalidArgumentException $e) {
600
-            wpinv_error_log( $e->getMessage(), 'GeoIp2 Lookup( ' . $ip_address . ' )' );
599
+        } catch (\InvalidArgumentException $e) {
600
+            wpinv_error_log($e->getMessage(), 'GeoIp2 Lookup( ' . $ip_address . ' )');
601 601
             
602 602
             return false;
603
-        } catch(\GeoIp2\Exception\AddressNotFoundException $e) {
604
-            wpinv_error_log( $e->getMessage(), 'GeoIp2 Lookup( ' . $ip_address . ' )' );
603
+        } catch (\GeoIp2\Exception\AddressNotFoundException $e) {
604
+            wpinv_error_log($e->getMessage(), 'GeoIp2 Lookup( ' . $ip_address . ' )');
605 605
             
606 606
             return false;
607
-        } catch( Exception $e ) {
607
+        } catch (Exception $e) {
608 608
             return false;
609 609
         }
610 610
         
611 611
         return false;
612 612
     }
613 613
 
614
-    public static function geoip2_city_record( $ip_address ) {
614
+    public static function geoip2_city_record($ip_address) {
615 615
         try {
616 616
             $reader = self::geoip2_city_reader();
617 617
 
618
-            if ( $reader ) {
619
-                $record = $reader->city( $ip_address );
618
+            if ($reader) {
619
+                $record = $reader->city($ip_address);
620 620
                 
621
-                if ( !empty( $record->country->isoCode ) ) {
621
+                if (!empty($record->country->isoCode)) {
622 622
                     return $record;
623 623
                 }
624 624
             }
625
-        } catch(\InvalidArgumentException $e) {
626
-            wpinv_error_log( $e->getMessage(), 'GeoIp2 Lookup( ' . $ip_address . ' )' );
625
+        } catch (\InvalidArgumentException $e) {
626
+            wpinv_error_log($e->getMessage(), 'GeoIp2 Lookup( ' . $ip_address . ' )');
627 627
             
628 628
             return false;
629
-        } catch(\GeoIp2\Exception\AddressNotFoundException $e) {
630
-            wpinv_error_log( $e->getMessage(), 'GeoIp2 Lookup( ' . $ip_address . ' )' );
629
+        } catch (\GeoIp2\Exception\AddressNotFoundException $e) {
630
+            wpinv_error_log($e->getMessage(), 'GeoIp2 Lookup( ' . $ip_address . ' )');
631 631
             
632 632
             return false;
633
-        } catch( Exception $e ) {
633
+        } catch (Exception $e) {
634 634
             return false;
635 635
         }
636 636
         
637 637
         return false;
638 638
     }
639 639
 
640
-    public static function geoip2_country_code( $ip_address ) {
641
-        $record = self::geoip2_country_record( $ip_address );
642
-        return !empty( $record->country->isoCode ) ? $record->country->isoCode : wpinv_get_default_country();
640
+    public static function geoip2_country_code($ip_address) {
641
+        $record = self::geoip2_country_record($ip_address);
642
+        return !empty($record->country->isoCode) ? $record->country->isoCode : wpinv_get_default_country();
643 643
     }
644 644
 
645 645
     // Find country by IP address.
646
-    public static function get_country_by_ip( $ip = '' ) {
646
+    public static function get_country_by_ip($ip = '') {
647 647
         global $wpinv_ip_address_country;
648 648
         
649
-        if ( !empty( $wpinv_ip_address_country ) ) {
649
+        if (!empty($wpinv_ip_address_country)) {
650 650
             return $wpinv_ip_address_country;
651 651
         }
652 652
         
653
-        if ( empty( $ip ) ) {
653
+        if (empty($ip)) {
654 654
             $ip = wpinv_get_ip();
655 655
         }
656 656
 
657
-        $ip_country_service = wpinv_get_option( 'vat_ip_lookup' );
658
-        $is_default         = empty( $ip_country_service ) || $ip_country_service === 'default' ? true : false;
657
+        $ip_country_service = wpinv_get_option('vat_ip_lookup');
658
+        $is_default         = empty($ip_country_service) || $ip_country_service === 'default' ? true : false;
659 659
 
660
-        if ( !empty( $ip ) && $ip !== '127.0.0.1' ) { // For 127.0.0.1(localhost) use default country.
661
-            if ( function_exists( 'geoip_country_code_by_name') && ( $ip_country_service === 'geoip' || $is_default ) ) {
660
+        if (!empty($ip) && $ip !== '127.0.0.1') { // For 127.0.0.1(localhost) use default country.
661
+            if (function_exists('geoip_country_code_by_name') && ($ip_country_service === 'geoip' || $is_default)) {
662 662
                 try {
663
-                    $wpinv_ip_address_country = geoip_country_code_by_name( $ip );
664
-                } catch( Exception $e ) {
665
-                    wpinv_error_log( $e->getMessage(), 'GeoIP Lookup( ' . $ip . ' )' );
663
+                    $wpinv_ip_address_country = geoip_country_code_by_name($ip);
664
+                } catch (Exception $e) {
665
+                    wpinv_error_log($e->getMessage(), 'GeoIP Lookup( ' . $ip . ' )');
666 666
                 }
667
-            } else if ( self::geoip2_country_dbfile() && ( $ip_country_service === 'geoip2' || $is_default ) ) {
668
-                $wpinv_ip_address_country = self::geoip2_country_code( $ip );
669
-            } else if ( function_exists( 'simplexml_load_file' ) && ini_get('allow_url_fopen') && ( $ip_country_service === 'geoplugin' || $is_default ) ) {
670
-                $load_xml = simplexml_load_file( 'http://www.geoplugin.net/xml.gp?ip=' . $ip );
667
+            } else if (self::geoip2_country_dbfile() && ($ip_country_service === 'geoip2' || $is_default)) {
668
+                $wpinv_ip_address_country = self::geoip2_country_code($ip);
669
+            } else if (function_exists('simplexml_load_file') && ini_get('allow_url_fopen') && ($ip_country_service === 'geoplugin' || $is_default)) {
670
+                $load_xml = simplexml_load_file('http://www.geoplugin.net/xml.gp?ip=' . $ip);
671 671
                 
672
-                if ( !empty( $load_xml ) && !empty( $load_xml->geoplugin_countryCode ) ) {
673
-                    $wpinv_ip_address_country = (string)$load_xml->geoplugin_countryCode;
672
+                if (!empty($load_xml) && !empty($load_xml->geoplugin_countryCode)) {
673
+                    $wpinv_ip_address_country = (string) $load_xml->geoplugin_countryCode;
674 674
                 }
675
-            }elseif(!empty( $ip )){
675
+            }elseif (!empty($ip)) {
676 676
                 $url = 'http://ip-api.com/json/' . $ip;
677 677
                 $response = wp_remote_get($url);
678 678
 
679
-                if ( is_array( $response ) && wp_remote_retrieve_response_code( $response ) == '200' ) {
680
-                    $data = json_decode(wp_remote_retrieve_body( $response ),true);
681
-                    if(!empty($data['countryCode'])){
682
-                        $wpinv_ip_address_country = (string)$data['countryCode'];
679
+                if (is_array($response) && wp_remote_retrieve_response_code($response) == '200') {
680
+                    $data = json_decode(wp_remote_retrieve_body($response), true);
681
+                    if (!empty($data['countryCode'])) {
682
+                        $wpinv_ip_address_country = (string) $data['countryCode'];
683 683
                     }
684 684
                 }
685 685
             }
686 686
         }
687 687
 
688
-        if ( empty( $wpinv_ip_address_country ) ) {
688
+        if (empty($wpinv_ip_address_country)) {
689 689
             $wpinv_ip_address_country = wpinv_get_default_country();
690 690
         }
691 691
 
692 692
         return $wpinv_ip_address_country;
693 693
     }
694 694
     
695
-    public static function sanitize_vat_settings( $input ) {
695
+    public static function sanitize_vat_settings($input) {
696 696
         global $wpinv_options;
697 697
         
698 698
         $valid      = false;
699 699
         $message    = '';
700 700
         
701
-        if ( !empty( $wpinv_options['vat_vies_check'] ) ) {
702
-            if ( empty( $wpinv_options['vat_offline_check'] ) ) {
703
-                $valid = self::offline_check( $input['vat_number'] );
701
+        if (!empty($wpinv_options['vat_vies_check'])) {
702
+            if (empty($wpinv_options['vat_offline_check'])) {
703
+                $valid = self::offline_check($input['vat_number']);
704 704
             } else {
705 705
                 $valid = true;
706 706
             }
707 707
             
708
-            $message = $valid ? '' : __( 'VAT number not validated', 'invoicing' );
708
+            $message = $valid ? '' : __('VAT number not validated', 'invoicing');
709 709
         } else {
710
-            $result = self::check_vat( $input['vat_number'] );
710
+            $result = self::check_vat($input['vat_number']);
711 711
             
712
-            if ( empty( $result['valid'] ) ) {
712
+            if (empty($result['valid'])) {
713 713
                 $valid      = false;
714 714
                 $message    = $result['message'];
715 715
             } else {
716
-                $valid      = ( isset( $result['company'] ) && ( $result['company'] == '---' || ( strcasecmp( trim( $result['company'] ), trim( $input['vat_company_name'] ) ) == 0 ) ) ) || !empty( $wpinv_options['vat_disable_company_name_check'] );
717
-                $message    = $valid ? '' : __( 'The company name associated with the VAT number provided is not the same as the company name provided.', 'invoicing' );
716
+                $valid      = (isset($result['company']) && ($result['company'] == '---' || (strcasecmp(trim($result['company']), trim($input['vat_company_name'])) == 0))) || !empty($wpinv_options['vat_disable_company_name_check']);
717
+                $message    = $valid ? '' : __('The company name associated with the VAT number provided is not the same as the company name provided.', 'invoicing');
718 718
             }
719 719
         }
720 720
 
721
-        if ( $message && self::is_vat_validated() != $valid ) {
722
-            add_settings_error( 'wpinv-notices', '', $message, ( $valid ? 'updated' : 'error' ) );
721
+        if ($message && self::is_vat_validated() != $valid) {
722
+            add_settings_error('wpinv-notices', '', $message, ($valid ? 'updated' : 'error'));
723 723
         }
724 724
 
725 725
         $input['vat_valid'] = $valid;
726 726
         return $input;
727 727
     }
728 728
     
729
-    public static function sanitize_vat_rates( $input ) {
730
-        if( !wpinv_current_user_can_manage_invoicing() ) {
731
-            add_settings_error( 'wpinv-notices', '', __( 'Your account does not have permission to add rate classes.', 'invoicing' ), 'error' );
729
+    public static function sanitize_vat_rates($input) {
730
+        if (!wpinv_current_user_can_manage_invoicing()) {
731
+            add_settings_error('wpinv-notices', '', __('Your account does not have permission to add rate classes.', 'invoicing'), 'error');
732 732
             return $input;
733 733
         }
734 734
         
735 735
         $vat_classes = self::get_rate_classes();
736
-        $vat_class = !empty( $_REQUEST['wpi_vat_class'] ) && isset( $vat_classes[$_REQUEST['wpi_vat_class']] )? sanitize_text_field( $_REQUEST['wpi_vat_class'] ) : '';
736
+        $vat_class = !empty($_REQUEST['wpi_vat_class']) && isset($vat_classes[$_REQUEST['wpi_vat_class']]) ? sanitize_text_field($_REQUEST['wpi_vat_class']) : '';
737 737
         
738
-        if ( empty( $vat_class ) ) {
739
-            add_settings_error( 'wpinv-notices', '', __( 'No valid VAT rates class contained in the request to save rates.', 'invoicing' ), 'error' );
738
+        if (empty($vat_class)) {
739
+            add_settings_error('wpinv-notices', '', __('No valid VAT rates class contained in the request to save rates.', 'invoicing'), 'error');
740 740
             
741 741
             return $input;
742 742
         }
743 743
 
744
-        $new_rates = ! empty( $_POST['vat_rates'] ) ? array_values( $_POST['vat_rates'] ) : array();
744
+        $new_rates = !empty($_POST['vat_rates']) ? array_values($_POST['vat_rates']) : array();
745 745
 
746
-        if ( $vat_class === '_standard' ) {
746
+        if ($vat_class === '_standard') {
747 747
             // Save the active rates in the invoice settings
748
-            update_option( 'wpinv_tax_rates', $new_rates );
748
+            update_option('wpinv_tax_rates', $new_rates);
749 749
         } else {
750 750
             // Get the existing set of rates
751 751
             $rates = self::get_non_standard_rates();
752 752
             $rates[$vat_class] = $new_rates;
753 753
 
754
-            update_option( 'wpinv_vat_rates', $rates );
754
+            update_option('wpinv_vat_rates', $rates);
755 755
         }
756 756
         
757 757
         return $input;
@@ -761,71 +761,71 @@  discard block
 block discarded – undo
761 761
         $response = array();
762 762
         $response['success'] = false;
763 763
         
764
-        if ( !wpinv_current_user_can_manage_invoicing() ) {
765
-            $response['error'] = __( 'Invalid access!', 'invoicing' );
766
-            wp_send_json( $response );
764
+        if (!wpinv_current_user_can_manage_invoicing()) {
765
+            $response['error'] = __('Invalid access!', 'invoicing');
766
+            wp_send_json($response);
767 767
         }
768 768
         
769
-        $vat_class_name = !empty( $_POST['name'] ) ? sanitize_text_field( $_POST['name'] ) : false;
770
-        $vat_class_desc = !empty( $_POST['desc'] ) ? sanitize_text_field( $_POST['desc'] ) : false;
769
+        $vat_class_name = !empty($_POST['name']) ? sanitize_text_field($_POST['name']) : false;
770
+        $vat_class_desc = !empty($_POST['desc']) ? sanitize_text_field($_POST['desc']) : false;
771 771
         
772
-        if ( empty( $vat_class_name ) ) {
773
-            $response['error'] = __( 'Select the VAT rate name', 'invoicing' );
774
-            wp_send_json( $response );
772
+        if (empty($vat_class_name)) {
773
+            $response['error'] = __('Select the VAT rate name', 'invoicing');
774
+            wp_send_json($response);
775 775
         }
776 776
         
777
-        $vat_classes = (array)self::get_rate_classes();
777
+        $vat_classes = (array) self::get_rate_classes();
778 778
 
779
-        if ( !empty( $vat_classes ) && in_array( strtolower( $vat_class_name ), array_map( 'strtolower', array_values( $vat_classes ) ) ) ) {
780
-            $response['error'] = wp_sprintf( __( 'A VAT Rate name "%s" already exists', 'invoicing' ), $vat_class_name );
781
-            wp_send_json( $response );
779
+        if (!empty($vat_classes) && in_array(strtolower($vat_class_name), array_map('strtolower', array_values($vat_classes)))) {
780
+            $response['error'] = wp_sprintf(__('A VAT Rate name "%s" already exists', 'invoicing'), $vat_class_name);
781
+            wp_send_json($response);
782 782
         }
783 783
         
784
-        $rate_class_key = normalize_whitespace( 'wpi-' . $vat_class_name );
785
-        $rate_class_key = sanitize_key( str_replace( " ", "-", $rate_class_key ) );
784
+        $rate_class_key = normalize_whitespace('wpi-' . $vat_class_name);
785
+        $rate_class_key = sanitize_key(str_replace(" ", "-", $rate_class_key));
786 786
         
787
-        $vat_classes = (array)self::get_rate_classes( true );
788
-        $vat_classes[$rate_class_key] = array( 'name' => $vat_class_name, 'desc' => $vat_class_desc );
787
+        $vat_classes = (array) self::get_rate_classes(true);
788
+        $vat_classes[$rate_class_key] = array('name' => $vat_class_name, 'desc' => $vat_class_desc);
789 789
         
790
-        update_option( '_wpinv_vat_rate_classes', $vat_classes );
790
+        update_option('_wpinv_vat_rate_classes', $vat_classes);
791 791
         
792 792
         $response['success'] = true;
793
-        $response['redirect'] = admin_url( 'admin.php?page=wpinv-settings&tab=taxes&section=vat_rates&wpi_sub=' . $rate_class_key );
793
+        $response['redirect'] = admin_url('admin.php?page=wpinv-settings&tab=taxes&section=vat_rates&wpi_sub=' . $rate_class_key);
794 794
         
795
-        wp_send_json( $response );
795
+        wp_send_json($response);
796 796
     }
797 797
     
798 798
     public static function delete_class() {
799 799
         $response = array();
800 800
         $response['success'] = false;
801 801
         
802
-        if ( !wpinv_current_user_can_manage_invoicing() || !isset( $_POST['class'] ) ) {
803
-            $response['error'] = __( 'Invalid access!', 'invoicing' );
804
-            wp_send_json( $response );
802
+        if (!wpinv_current_user_can_manage_invoicing() || !isset($_POST['class'])) {
803
+            $response['error'] = __('Invalid access!', 'invoicing');
804
+            wp_send_json($response);
805 805
         }
806 806
         
807
-        $vat_class = isset( $_POST['class'] ) && $_POST['class'] !== '' ? sanitize_text_field( $_POST['class'] ) : false;
808
-        $vat_classes = (array)self::get_rate_classes();
807
+        $vat_class = isset($_POST['class']) && $_POST['class'] !== '' ? sanitize_text_field($_POST['class']) : false;
808
+        $vat_classes = (array) self::get_rate_classes();
809 809
 
810
-        if ( !isset( $vat_classes[$vat_class] ) ) {
811
-            $response['error'] = __( 'Requested class does not exists', 'invoicing' );
812
-            wp_send_json( $response );
810
+        if (!isset($vat_classes[$vat_class])) {
811
+            $response['error'] = __('Requested class does not exists', 'invoicing');
812
+            wp_send_json($response);
813 813
         }
814 814
         
815
-        if ( $vat_class == '_new' || $vat_class == '_standard' ) {
816
-            $response['error'] = __( 'You can not delete standard rates class', 'invoicing' );
817
-            wp_send_json( $response );
815
+        if ($vat_class == '_new' || $vat_class == '_standard') {
816
+            $response['error'] = __('You can not delete standard rates class', 'invoicing');
817
+            wp_send_json($response);
818 818
         }
819 819
             
820
-        $vat_classes = (array)self::get_rate_classes( true );
821
-        unset( $vat_classes[$vat_class] );
820
+        $vat_classes = (array) self::get_rate_classes(true);
821
+        unset($vat_classes[$vat_class]);
822 822
         
823
-        update_option( '_wpinv_vat_rate_classes', $vat_classes );
823
+        update_option('_wpinv_vat_rate_classes', $vat_classes);
824 824
         
825 825
         $response['success'] = true;
826
-        $response['redirect'] = admin_url( 'admin.php?page=wpinv-settings&tab=taxes&section=vat_rates&wpi_sub=_new' );
826
+        $response['redirect'] = admin_url('admin.php?page=wpinv-settings&tab=taxes&section=vat_rates&wpi_sub=_new');
827 827
         
828
-        wp_send_json( $response );
828
+        wp_send_json($response);
829 829
     }
830 830
     
831 831
     public static function update_eu_rates() {        
@@ -834,72 +834,72 @@  discard block
 block discarded – undo
834 834
         $response['error']      = null;
835 835
         $response['data']       = null;
836 836
         
837
-        if ( !wpinv_current_user_can_manage_invoicing() ) {
838
-            $response['error'] = __( 'Invalid access!', 'invoicing' );
839
-            wp_send_json( $response );
837
+        if (!wpinv_current_user_can_manage_invoicing()) {
838
+            $response['error'] = __('Invalid access!', 'invoicing');
839
+            wp_send_json($response);
840 840
         }
841 841
         
842
-        $group      = !empty( $_POST['group'] ) ? sanitize_text_field( $_POST['group'] ) : '';
843
-        $euvatrates = self::request_euvatrates( $group );
842
+        $group      = !empty($_POST['group']) ? sanitize_text_field($_POST['group']) : '';
843
+        $euvatrates = self::request_euvatrates($group);
844 844
         
845
-        if ( !empty( $euvatrates ) ) {
846
-            if ( !empty( $euvatrates['success'] ) && !empty( $euvatrates['rates'] ) ) {
845
+        if (!empty($euvatrates)) {
846
+            if (!empty($euvatrates['success']) && !empty($euvatrates['rates'])) {
847 847
                 $response['success']        = true;
848 848
                 $response['data']['rates']  = $euvatrates['rates'];
849
-            } else if ( !empty( $euvatrates['error'] ) ) {
849
+            } else if (!empty($euvatrates['error'])) {
850 850
                 $response['error']          = $euvatrates['error'];
851 851
             }
852 852
         }
853 853
             
854
-        wp_send_json( $response );
854
+        wp_send_json($response);
855 855
     }
856 856
     
857 857
     public static function hide_vat_fields() {
858
-        $hide = wpinv_get_option( 'vat_disable_fields' );
858
+        $hide = wpinv_get_option('vat_disable_fields');
859 859
         
860
-        return apply_filters( 'wpinv_hide_vat_fields', $hide );
860
+        return apply_filters('wpinv_hide_vat_fields', $hide);
861 861
     }
862 862
     
863 863
     public static function same_country_rule() {
864
-        $same_country_rule = wpinv_get_option( 'vat_same_country_rule' );
864
+        $same_country_rule = wpinv_get_option('vat_same_country_rule');
865 865
         
866
-        return apply_filters( 'wpinv_vat_same_country_rule', $same_country_rule );
866
+        return apply_filters('wpinv_vat_same_country_rule', $same_country_rule);
867 867
     }
868 868
     
869 869
     public static function get_vat_name() {
870
-        $vat_name   = wpinv_get_option( 'vat_name' );
871
-        $vat_name   = !empty( $vat_name ) ? $vat_name : 'VAT';
870
+        $vat_name   = wpinv_get_option('vat_name');
871
+        $vat_name   = !empty($vat_name) ? $vat_name : 'VAT';
872 872
         
873
-        return apply_filters( 'wpinv_get_owner_vat_name', $vat_name );
873
+        return apply_filters('wpinv_get_owner_vat_name', $vat_name);
874 874
     }
875 875
     
876 876
     public static function get_company_name() {
877
-        $company_name = wpinv_get_option( 'vat_company_name' );
877
+        $company_name = wpinv_get_option('vat_company_name');
878 878
         
879
-        return apply_filters( 'wpinv_get_owner_company_name', $company_name );
879
+        return apply_filters('wpinv_get_owner_company_name', $company_name);
880 880
     }
881 881
     
882 882
     public static function get_vat_number() {
883
-        $vat_number = wpinv_get_option( 'vat_number' );
883
+        $vat_number = wpinv_get_option('vat_number');
884 884
         
885
-        return apply_filters( 'wpinv_get_owner_vat_number', $vat_number );
885
+        return apply_filters('wpinv_get_owner_vat_number', $vat_number);
886 886
     }
887 887
     
888 888
     public static function is_vat_validated() {
889
-        $validated = self::get_vat_number() && wpinv_get_option( 'vat_valid' );
889
+        $validated = self::get_vat_number() && wpinv_get_option('vat_valid');
890 890
         
891
-        return apply_filters( 'wpinv_is_owner_vat_validated', $validated );
891
+        return apply_filters('wpinv_is_owner_vat_validated', $validated);
892 892
     }
893 893
     
894
-    public static function sanitize_vat( $vat_number, $country_code = '' ) {        
895
-        $vat_number = str_replace( array(' ', '.', '-', '_', ',' ), '', strtoupper( trim( $vat_number ) ) );
894
+    public static function sanitize_vat($vat_number, $country_code = '') {        
895
+        $vat_number = str_replace(array(' ', '.', '-', '_', ','), '', strtoupper(trim($vat_number)));
896 896
         
897
-        if ( empty( $country_code ) ) {
898
-            $country_code = substr( $vat_number, 0, 2 );
897
+        if (empty($country_code)) {
898
+            $country_code = substr($vat_number, 0, 2);
899 899
         }
900 900
         
901
-        if ( strpos( $vat_number , $country_code ) === 0 ) {
902
-            $vat = str_replace( $country_code, '', $vat_number );
901
+        if (strpos($vat_number, $country_code) === 0) {
902
+            $vat = str_replace($country_code, '', $vat_number);
903 903
         } else {
904 904
             $vat = $country_code . $vat_number;
905 905
         }
@@ -912,140 +912,140 @@  discard block
 block discarded – undo
912 912
         return $return;
913 913
     }
914 914
     
915
-    public static function offline_check( $vat_number, $country_code = '', $formatted = false ) {
916
-        $vat            = self::sanitize_vat( $vat_number, $country_code );
915
+    public static function offline_check($vat_number, $country_code = '', $formatted = false) {
916
+        $vat            = self::sanitize_vat($vat_number, $country_code);
917 917
         $vat_number     = $vat['vat_number'];
918 918
         $country_code   = $vat['iso'];
919 919
         $regex          = array();
920 920
         
921
-        switch ( $country_code ) {
921
+        switch ($country_code) {
922 922
             case 'AT':
923
-                $regex[] = '/^(AT)U(\d{8})$/';                           // Austria
923
+                $regex[] = '/^(AT)U(\d{8})$/'; // Austria
924 924
                 break;
925 925
             case 'BE':
926
-                $regex[] = '/^(BE)(0?\d{9})$/';                          // Belgium
926
+                $regex[] = '/^(BE)(0?\d{9})$/'; // Belgium
927 927
                 break;
928 928
             case 'BG':
929
-                $regex[] = '/^(BG)(\d{9,10})$/';                         // Bulgaria
929
+                $regex[] = '/^(BG)(\d{9,10})$/'; // Bulgaria
930 930
                 break;
931 931
             case 'CH':
932 932
             case 'CHE':
933
-                $regex[] = '/^(CHE)(\d{9})MWST$/';                       // Switzerland (Not EU)
933
+                $regex[] = '/^(CHE)(\d{9})MWST$/'; // Switzerland (Not EU)
934 934
                 break;
935 935
             case 'CY':
936
-                $regex[] = '/^(CY)([0-5|9]\d{7}[A-Z])$/';                // Cyprus
936
+                $regex[] = '/^(CY)([0-5|9]\d{7}[A-Z])$/'; // Cyprus
937 937
                 break;
938 938
             case 'CZ':
939
-                $regex[] = '/^(CZ)(\d{8,13})$/';                         // Czech Republic
939
+                $regex[] = '/^(CZ)(\d{8,13})$/'; // Czech Republic
940 940
                 break;
941 941
             case 'DE':
942
-                $regex[] = '/^(DE)([1-9]\d{8})$/';                       // Germany
942
+                $regex[] = '/^(DE)([1-9]\d{8})$/'; // Germany
943 943
                 break;
944 944
             case 'DK':
945
-                $regex[] = '/^(DK)(\d{8})$/';                            // Denmark
945
+                $regex[] = '/^(DK)(\d{8})$/'; // Denmark
946 946
                 break;
947 947
             case 'EE':
948
-                $regex[] = '/^(EE)(10\d{7})$/';                          // Estonia
948
+                $regex[] = '/^(EE)(10\d{7})$/'; // Estonia
949 949
                 break;
950 950
             case 'EL':
951
-                $regex[] = '/^(EL)(\d{9})$/';                            // Greece
951
+                $regex[] = '/^(EL)(\d{9})$/'; // Greece
952 952
                 break;
953 953
             case 'ES':
954
-                $regex[] = '/^(ES)([A-Z]\d{8})$/';                       // Spain (National juridical entities)
955
-                $regex[] = '/^(ES)([A-H|N-S|W]\d{7}[A-J])$/';            // Spain (Other juridical entities)
956
-                $regex[] = '/^(ES)([0-9|Y|Z]\d{7}[A-Z])$/';              // Spain (Personal entities type 1)
957
-                $regex[] = '/^(ES)([K|L|M|X]\d{7}[A-Z])$/';              // Spain (Personal entities type 2)
954
+                $regex[] = '/^(ES)([A-Z]\d{8})$/'; // Spain (National juridical entities)
955
+                $regex[] = '/^(ES)([A-H|N-S|W]\d{7}[A-J])$/'; // Spain (Other juridical entities)
956
+                $regex[] = '/^(ES)([0-9|Y|Z]\d{7}[A-Z])$/'; // Spain (Personal entities type 1)
957
+                $regex[] = '/^(ES)([K|L|M|X]\d{7}[A-Z])$/'; // Spain (Personal entities type 2)
958 958
                 break;
959 959
             case 'EU':
960
-                $regex[] = '/^(EU)(\d{9})$/';                            // EU-type
960
+                $regex[] = '/^(EU)(\d{9})$/'; // EU-type
961 961
                 break;
962 962
             case 'FI':
963
-                $regex[] = '/^(FI)(\d{8})$/';                            // Finland
963
+                $regex[] = '/^(FI)(\d{8})$/'; // Finland
964 964
                 break;
965 965
             case 'FR':
966
-                $regex[] = '/^(FR)(\d{11})$/';                           // France (1)
967
-                $regex[] = '/^(FR)[(A-H)|(J-N)|(P-Z)](\d{10})$/';        // France (2)
968
-                $regex[] = '/^(FR)\d[(A-H)|(J-N)|(P-Z)](\d{9})$/';       // France (3)
969
-                $regex[] = '/^(FR)[(A-H)|(J-N)|(P-Z)]{2}(\d{9})$/';      // France (4)
966
+                $regex[] = '/^(FR)(\d{11})$/'; // France (1)
967
+                $regex[] = '/^(FR)[(A-H)|(J-N)|(P-Z)](\d{10})$/'; // France (2)
968
+                $regex[] = '/^(FR)\d[(A-H)|(J-N)|(P-Z)](\d{9})$/'; // France (3)
969
+                $regex[] = '/^(FR)[(A-H)|(J-N)|(P-Z)]{2}(\d{9})$/'; // France (4)
970 970
                 break;
971 971
             case 'GB':
972
-                $regex[] = '/^(GB)?(\d{9})$/';                           // UK (Standard)
973
-                $regex[] = '/^(GB)?(\d{12})$/';                          // UK (Branches)
974
-                $regex[] = '/^(GB)?(GD\d{3})$/';                         // UK (Government)
975
-                $regex[] = '/^(GB)?(HA\d{3})$/';                         // UK (Health authority)
972
+                $regex[] = '/^(GB)?(\d{9})$/'; // UK (Standard)
973
+                $regex[] = '/^(GB)?(\d{12})$/'; // UK (Branches)
974
+                $regex[] = '/^(GB)?(GD\d{3})$/'; // UK (Government)
975
+                $regex[] = '/^(GB)?(HA\d{3})$/'; // UK (Health authority)
976 976
                 break;
977 977
             case 'GR':
978
-                $regex[] = '/^(GR)(\d{8,9})$/';                          // Greece
978
+                $regex[] = '/^(GR)(\d{8,9})$/'; // Greece
979 979
                 break;
980 980
             case 'HR':
981
-                $regex[] = '/^(HR)(\d{11})$/';                           // Croatia
981
+                $regex[] = '/^(HR)(\d{11})$/'; // Croatia
982 982
                 break;
983 983
             case 'HU':
984
-                $regex[] = '/^(HU)(\d{8})$/';                            // Hungary
984
+                $regex[] = '/^(HU)(\d{8})$/'; // Hungary
985 985
                 break;
986 986
             case 'IE':
987
-                $regex[] = '/^(IE)(\d{7}[A-W])$/';                       // Ireland (1)
988
-                $regex[] = '/^(IE)([7-9][A-Z\*\+)]\d{5}[A-W])$/';        // Ireland (2)
989
-                $regex[] = '/^(IE)(\d{7}[A-Z][AH])$/';                   // Ireland (3) (new format from 1 Jan 2013)
987
+                $regex[] = '/^(IE)(\d{7}[A-W])$/'; // Ireland (1)
988
+                $regex[] = '/^(IE)([7-9][A-Z\*\+)]\d{5}[A-W])$/'; // Ireland (2)
989
+                $regex[] = '/^(IE)(\d{7}[A-Z][AH])$/'; // Ireland (3) (new format from 1 Jan 2013)
990 990
                 break;
991 991
             case 'IT':
992
-                $regex[] = '/^(IT)(\d{11})$/';                           // Italy
992
+                $regex[] = '/^(IT)(\d{11})$/'; // Italy
993 993
                 break;
994 994
             case 'LV':
995
-                $regex[] = '/^(LV)(\d{11})$/';                           // Latvia
995
+                $regex[] = '/^(LV)(\d{11})$/'; // Latvia
996 996
                 break;
997 997
             case 'LT':
998
-                $regex[] = '/^(LT)(\d{9}|\d{12})$/';                     // Lithuania
998
+                $regex[] = '/^(LT)(\d{9}|\d{12})$/'; // Lithuania
999 999
                 break;
1000 1000
             case 'LU':
1001
-                $regex[] = '/^(LU)(\d{8})$/';                            // Luxembourg
1001
+                $regex[] = '/^(LU)(\d{8})$/'; // Luxembourg
1002 1002
                 break;
1003 1003
             case 'MT':
1004
-                $regex[] = '/^(MT)([1-9]\d{7})$/';                       // Malta
1004
+                $regex[] = '/^(MT)([1-9]\d{7})$/'; // Malta
1005 1005
                 break;
1006 1006
             case 'NL':
1007
-                $regex[] = '/^(NL)(\d{9})B\d{2}$/';                      // Netherlands
1007
+                $regex[] = '/^(NL)(\d{9})B\d{2}$/'; // Netherlands
1008 1008
                 break;
1009 1009
             case 'NO':
1010
-                $regex[] = '/^(NO)(\d{9})$/';                            // Norway (Not EU)
1010
+                $regex[] = '/^(NO)(\d{9})$/'; // Norway (Not EU)
1011 1011
                 break;
1012 1012
             case 'PL':
1013
-                $regex[] = '/^(PL)(\d{10})$/';                           // Poland
1013
+                $regex[] = '/^(PL)(\d{10})$/'; // Poland
1014 1014
                 break;
1015 1015
             case 'PT':
1016
-                $regex[] = '/^(PT)(\d{9})$/';                            // Portugal
1016
+                $regex[] = '/^(PT)(\d{9})$/'; // Portugal
1017 1017
                 break;
1018 1018
             case 'RO':
1019
-                $regex[] = '/^(RO)([1-9]\d{1,9})$/';                     // Romania
1019
+                $regex[] = '/^(RO)([1-9]\d{1,9})$/'; // Romania
1020 1020
                 break;
1021 1021
             case 'RS':
1022
-                $regex[] = '/^(RS)(\d{9})$/';                            // Serbia (Not EU)
1022
+                $regex[] = '/^(RS)(\d{9})$/'; // Serbia (Not EU)
1023 1023
                 break;
1024 1024
             case 'SI':
1025
-                $regex[] = '/^(SI)([1-9]\d{7})$/';                       // Slovenia
1025
+                $regex[] = '/^(SI)([1-9]\d{7})$/'; // Slovenia
1026 1026
                 break;
1027 1027
             case 'SK':
1028
-                $regex[] = '/^(SK)([1-9]\d[(2-4)|(6-9)]\d{7})$/';        // Slovakia Republic
1028
+                $regex[] = '/^(SK)([1-9]\d[(2-4)|(6-9)]\d{7})$/'; // Slovakia Republic
1029 1029
                 break;
1030 1030
             case 'SE':
1031
-                $regex[] = '/^(SE)(\d{10}01)$/';                         // Sweden
1031
+                $regex[] = '/^(SE)(\d{10}01)$/'; // Sweden
1032 1032
                 break;
1033 1033
             default:
1034 1034
                 $regex = array();
1035 1035
             break;
1036 1036
         }
1037 1037
         
1038
-        if ( empty( $regex ) ) {
1038
+        if (empty($regex)) {
1039 1039
             return false;
1040 1040
         }
1041 1041
         
1042
-        foreach ( $regex as $pattern ) {
1042
+        foreach ($regex as $pattern) {
1043 1043
             $matches = null;
1044
-            preg_match_all( $pattern, $vat_number, $matches );
1044
+            preg_match_all($pattern, $vat_number, $matches);
1045 1045
             
1046
-            if ( !empty( $matches[1][0] ) && !empty( $matches[2][0] ) ) {
1047
-                if ( $formatted ) {
1048
-                    return array( 'code' => $matches[1][0], 'number' => $matches[2][0] );
1046
+            if (!empty($matches[1][0]) && !empty($matches[2][0])) {
1047
+                if ($formatted) {
1048
+                    return array('code' => $matches[1][0], 'number' => $matches[2][0]);
1049 1049
                 } else {
1050 1050
                     return true;
1051 1051
                 }
@@ -1055,75 +1055,75 @@  discard block
 block discarded – undo
1055 1055
         return false;
1056 1056
     }
1057 1057
     
1058
-    public static function vies_check( $vat_number, $country_code = '', $result = false ) {
1059
-        $vat            = self::sanitize_vat( $vat_number, $country_code );
1058
+    public static function vies_check($vat_number, $country_code = '', $result = false) {
1059
+        $vat            = self::sanitize_vat($vat_number, $country_code);
1060 1060
         $vat_number     = $vat['vat'];
1061 1061
         $iso            = $vat['iso'];
1062 1062
         
1063
-        $url = 'http://ec.europa.eu/taxation_customs/vies/viesquer.do?ms=' . urlencode( $iso ) . '&iso=' . urlencode( $iso ) . '&vat=' . urlencode( $vat_number );
1063
+        $url = 'http://ec.europa.eu/taxation_customs/vies/viesquer.do?ms=' . urlencode($iso) . '&iso=' . urlencode($iso) . '&vat=' . urlencode($vat_number);
1064 1064
         
1065
-        if ( ini_get( 'allow_url_fopen' ) ) {
1066
-            $response = file_get_contents( $url );
1067
-        } else if ( function_exists( 'curl_init' ) ) {
1065
+        if (ini_get('allow_url_fopen')) {
1066
+            $response = file_get_contents($url);
1067
+        } else if (function_exists('curl_init')) {
1068 1068
             $ch = curl_init();
1069 1069
             
1070
-            curl_setopt( $ch, CURLOPT_URL, $url );
1071
-            curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, 30 );
1072
-            curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
1073
-            curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 0 );
1074
-            curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, 0 );
1070
+            curl_setopt($ch, CURLOPT_URL, $url);
1071
+            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
1072
+            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
1073
+            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
1074
+            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
1075 1075
             
1076
-            $response = curl_exec( $ch );
1076
+            $response = curl_exec($ch);
1077 1077
             
1078
-            if ( curl_errno( $ch ) ) {
1079
-                wpinv_error_log( curl_error( $ch ), 'VIES CHECK ERROR' );
1078
+            if (curl_errno($ch)) {
1079
+                wpinv_error_log(curl_error($ch), 'VIES CHECK ERROR');
1080 1080
                 $response = '';
1081 1081
             }
1082 1082
             
1083
-            curl_close( $ch );
1083
+            curl_close($ch);
1084 1084
         } else {
1085
-            wpinv_error_log( 'To use VIES CHECK you must have allow_url_fopen is ON or cURL installed & active on your server.', 'VIES CHECK ERROR' );
1085
+            wpinv_error_log('To use VIES CHECK you must have allow_url_fopen is ON or cURL installed & active on your server.', 'VIES CHECK ERROR');
1086 1086
         }
1087 1087
         
1088
-        if ( empty( $response ) ) {
1088
+        if (empty($response)) {
1089 1089
             return $result;
1090 1090
         }
1091 1091
 
1092
-        if ( preg_match( '/invalid VAT number/i', $response ) ) {
1092
+        if (preg_match('/invalid VAT number/i', $response)) {
1093 1093
             return false;
1094
-        } else if ( preg_match( '/valid VAT number/i', $response, $matches ) ) {
1095
-            $content = explode( "valid VAT number", htmlentities( $response ) );
1094
+        } else if (preg_match('/valid VAT number/i', $response, $matches)) {
1095
+            $content = explode("valid VAT number", htmlentities($response));
1096 1096
             
1097
-            if ( !empty( $content[1] ) ) {
1098
-                preg_match_all( '/<tr>(.*?)<td.*?>(.*?)<\/td>(.*?)<\/tr>/si', html_entity_decode( $content[1] ), $matches );
1097
+            if (!empty($content[1])) {
1098
+                preg_match_all('/<tr>(.*?)<td.*?>(.*?)<\/td>(.*?)<\/tr>/si', html_entity_decode($content[1]), $matches);
1099 1099
                 
1100
-                if ( !empty( $matches[2] ) && $matches[3] ) {
1100
+                if (!empty($matches[2]) && $matches[3]) {
1101 1101
                     $return = array();
1102 1102
                     
1103
-                    foreach ( $matches[2] as $key => $label ) {
1104
-                        $label = trim( $label );
1103
+                    foreach ($matches[2] as $key => $label) {
1104
+                        $label = trim($label);
1105 1105
                         
1106
-                        switch ( strtolower( $label ) ) {
1106
+                        switch (strtolower($label)) {
1107 1107
                             case 'member state':
1108
-                                $return['state'] = trim( strip_tags( $matches[3][$key] ) );
1108
+                                $return['state'] = trim(strip_tags($matches[3][$key]));
1109 1109
                             break;
1110 1110
                             case 'vat number':
1111
-                                $return['number'] = trim( strip_tags( $matches[3][$key] ) );
1111
+                                $return['number'] = trim(strip_tags($matches[3][$key]));
1112 1112
                             break;
1113 1113
                             case 'name':
1114
-                                $return['company'] = trim( strip_tags( $matches[3][$key] ) );
1114
+                                $return['company'] = trim(strip_tags($matches[3][$key]));
1115 1115
                             break;
1116 1116
                             case 'address':
1117
-                                $address           = str_replace( array( "<br><br>", "<br /><br />", "<br/><br/>" ), "<br>", html_entity_decode( trim( $matches[3][$key] ) ) );
1118
-                                $return['address'] = trim( strip_tags( $address, '<br>' ) );
1117
+                                $address           = str_replace(array("<br><br>", "<br /><br />", "<br/><br/>"), "<br>", html_entity_decode(trim($matches[3][$key])));
1118
+                                $return['address'] = trim(strip_tags($address, '<br>'));
1119 1119
                             break;
1120 1120
                             case 'consultation number':
1121
-                                $return['consultation'] = trim( strip_tags( $matches[3][$key] ) );
1121
+                                $return['consultation'] = trim(strip_tags($matches[3][$key]));
1122 1122
                             break;
1123 1123
                         }
1124 1124
                     }
1125 1125
                     
1126
-                    if ( !empty( $return ) ) {
1126
+                    if (!empty($return)) {
1127 1127
                         return $return;
1128 1128
                     }
1129 1129
                 }
@@ -1135,63 +1135,63 @@  discard block
 block discarded – undo
1135 1135
         }
1136 1136
     }
1137 1137
     
1138
-    public static function check_vat( $vat_number, $country_code = '' ) {        
1138
+    public static function check_vat($vat_number, $country_code = '') {        
1139 1139
         $vat_name           = self::get_vat_name();
1140 1140
         
1141 1141
         $return             = array();
1142 1142
         $return['valid']    = false;
1143
-        $return['message']  = wp_sprintf( __( '%s number not validated', 'invoicing' ), $vat_name );
1143
+        $return['message']  = wp_sprintf(__('%s number not validated', 'invoicing'), $vat_name);
1144 1144
                 
1145
-        if ( !wpinv_get_option( 'vat_offline_check' ) && !self::offline_check( $vat_number, $country_code ) ) {
1145
+        if (!wpinv_get_option('vat_offline_check') && !self::offline_check($vat_number, $country_code)) {
1146 1146
             return $return;
1147 1147
         }
1148 1148
             
1149
-        $response = self::vies_check( $vat_number, $country_code );
1149
+        $response = self::vies_check($vat_number, $country_code);
1150 1150
         
1151
-        if ( $response ) {
1152
-            $return['valid']    = true;
1151
+        if ($response) {
1152
+            $return['valid'] = true;
1153 1153
             
1154
-            if ( is_array( $response ) ) {
1155
-                $return['company'] = isset( $response['company'] ) ? $response['company'] : '';
1156
-                $return['address'] = isset( $response['address'] ) ? $response['address'] : '';
1154
+            if (is_array($response)) {
1155
+                $return['company'] = isset($response['company']) ? $response['company'] : '';
1156
+                $return['address'] = isset($response['address']) ? $response['address'] : '';
1157 1157
                 $return['message'] = $return['company'] . '<br/>' . $return['address'];
1158 1158
             }
1159 1159
         } else {
1160 1160
             $return['valid']    = false;
1161
-            $return['message']  = wp_sprintf( __( 'Fail to validate the %s number: EU Commission VAT server (VIES) check fails.', 'invoicing' ), $vat_name );
1161
+            $return['message']  = wp_sprintf(__('Fail to validate the %s number: EU Commission VAT server (VIES) check fails.', 'invoicing'), $vat_name);
1162 1162
         }
1163 1163
         
1164 1164
         return $return;
1165 1165
     }
1166 1166
     
1167
-    public static function request_euvatrates( $group ) {
1167
+    public static function request_euvatrates($group) {
1168 1168
         $response               = array();
1169 1169
         $response['success']    = false;
1170 1170
         $response['error']      = null;
1171 1171
         $response['eurates']    = null;
1172 1172
         
1173 1173
         $euvatrates_url = 'https://euvatrates.com/rates.json';
1174
-        $euvatrates_url = apply_filters( 'wpinv_euvatrates_url', $euvatrates_url );
1175
-        $api_response   = wp_remote_get( $euvatrates_url );
1174
+        $euvatrates_url = apply_filters('wpinv_euvatrates_url', $euvatrates_url);
1175
+        $api_response   = wp_remote_get($euvatrates_url);
1176 1176
     
1177 1177
         try {
1178
-            if ( is_wp_error( $api_response ) ) {
1179
-                $response['error']      = __( $api_response->get_error_message(), 'invoicing' );
1178
+            if (is_wp_error($api_response)) {
1179
+                $response['error'] = __($api_response->get_error_message(), 'invoicing');
1180 1180
             } else {
1181
-                $body = json_decode( $api_response['body'] );
1181
+                $body = json_decode($api_response['body']);
1182 1182
                 
1183
-                if ( isset( $body->rates ) ) {
1183
+                if (isset($body->rates)) {
1184 1184
                     $rates = array();
1185 1185
                     
1186
-                    foreach ( $body->rates as $country_code => $rate ) {
1186
+                    foreach ($body->rates as $country_code => $rate) {
1187 1187
                         $vat_rate = array();
1188 1188
                         $vat_rate['country']        = $rate->country;
1189
-                        $vat_rate['standard']       = (float)$rate->standard_rate;
1190
-                        $vat_rate['reduced']        = (float)$rate->reduced_rate;
1191
-                        $vat_rate['superreduced']   = (float)$rate->super_reduced_rate;
1192
-                        $vat_rate['parking']        = (float)$rate->parking_rate;
1189
+                        $vat_rate['standard']       = (float) $rate->standard_rate;
1190
+                        $vat_rate['reduced']        = (float) $rate->reduced_rate;
1191
+                        $vat_rate['superreduced']   = (float) $rate->super_reduced_rate;
1192
+                        $vat_rate['parking']        = (float) $rate->parking_rate;
1193 1193
                         
1194
-                        if ( $group !== '' && in_array( $group, array( 'standard', 'reduced', 'superreduced', 'parking' ) ) ) {
1194
+                        if ($group !== '' && in_array($group, array('standard', 'reduced', 'superreduced', 'parking'))) {
1195 1195
                             $vat_rate_group = array();
1196 1196
                             $vat_rate_group['country'] = $rate->country;
1197 1197
                             $vat_rate_group[$group]    = $vat_rate[$group];
@@ -1203,79 +1203,79 @@  discard block
 block discarded – undo
1203 1203
                     }
1204 1204
                     
1205 1205
                     $response['success']    = true;                                
1206
-                    $response['rates']      = apply_filters( 'wpinv_process_euvatrates', $rates, $api_response, $group );
1206
+                    $response['rates']      = apply_filters('wpinv_process_euvatrates', $rates, $api_response, $group);
1207 1207
                 } else {
1208
-                    $response['error']      = __( 'No EU rates found!', 'invoicing' );
1208
+                    $response['error']      = __('No EU rates found!', 'invoicing');
1209 1209
                 }
1210 1210
             }
1211
-        } catch ( Exception $e ) {
1212
-            $response['error'] = __( $e->getMessage(), 'invoicing' );
1211
+        } catch (Exception $e) {
1212
+            $response['error'] = __($e->getMessage(), 'invoicing');
1213 1213
         }
1214 1214
         
1215
-        return apply_filters( 'wpinv_response_euvatrates', $response, $group );
1215
+        return apply_filters('wpinv_response_euvatrates', $response, $group);
1216 1216
     }    
1217 1217
     
1218
-    public static function requires_vat( $requires_vat = false, $user_id = 0, $is_digital = null ) {
1218
+    public static function requires_vat($requires_vat = false, $user_id = 0, $is_digital = null) {
1219 1219
         global $wpi_item_id, $wpi_country;
1220 1220
         
1221
-        if ( !empty( $_POST['wpinv_country'] ) ) {
1222
-            $country_code = trim( $_POST['wpinv_country'] );
1223
-        } else if ( !empty( $_POST['country'] ) ) {
1224
-            $country_code = trim( $_POST['country'] );
1225
-        } else if ( !empty( $wpi_country ) ) {
1221
+        if (!empty($_POST['wpinv_country'])) {
1222
+            $country_code = trim($_POST['wpinv_country']);
1223
+        } else if (!empty($_POST['country'])) {
1224
+            $country_code = trim($_POST['country']);
1225
+        } else if (!empty($wpi_country)) {
1226 1226
             $country_code = $wpi_country;
1227 1227
         } else {
1228
-            $country_code = self::get_user_country( '', $user_id );
1228
+            $country_code = self::get_user_country('', $user_id);
1229 1229
         }
1230 1230
         
1231
-        if ( $is_digital === null && $wpi_item_id ) {
1232
-            $is_digital = $wpi_item_id ? self::item_has_digital_rule( $wpi_item_id ) : self::allow_vat_rules();
1231
+        if ($is_digital === null && $wpi_item_id) {
1232
+            $is_digital = $wpi_item_id ? self::item_has_digital_rule($wpi_item_id) : self::allow_vat_rules();
1233 1233
         }
1234 1234
         
1235
-        if ( !empty( $country_code ) ) {
1236
-            $requires_vat = ( self::is_eu_state( $country_code ) && ( self::is_eu_state( self::$default_country ) || $is_digital ) ) || ( self::is_gst_country( $country_code ) && self::is_gst_country( self::$default_country ) );
1235
+        if (!empty($country_code)) {
1236
+            $requires_vat = (self::is_eu_state($country_code) && (self::is_eu_state(self::$default_country) || $is_digital)) || (self::is_gst_country($country_code) && self::is_gst_country(self::$default_country));
1237 1237
         }
1238 1238
         
1239
-        return apply_filters( 'wpinv_requires_vat', $requires_vat, $user_id );
1239
+        return apply_filters('wpinv_requires_vat', $requires_vat, $user_id);
1240 1240
     }
1241 1241
     
1242
-    public static function tax_label( $label = '' ) {
1242
+    public static function tax_label($label = '') {
1243 1243
         global $wpi_requires_vat;
1244 1244
         
1245
-        if ( !( $wpi_requires_vat !== 0 && $wpi_requires_vat ) ) {
1246
-            $wpi_requires_vat = self::requires_vat( 0, false );
1245
+        if (!($wpi_requires_vat !== 0 && $wpi_requires_vat)) {
1246
+            $wpi_requires_vat = self::requires_vat(0, false);
1247 1247
         }
1248 1248
         
1249
-        return $wpi_requires_vat ? __( self::get_vat_name(), 'invoicing' ) : ( $label ? $label : __( 'Tax', 'invoicing' ) );
1249
+        return $wpi_requires_vat ? __(self::get_vat_name(), 'invoicing') : ($label ? $label : __('Tax', 'invoicing'));
1250 1250
     }
1251 1251
     
1252 1252
     public static function standard_rates_label() {
1253
-        return __( 'Standard Rates', 'invoicing' );
1253
+        return __('Standard Rates', 'invoicing');
1254 1254
     }
1255 1255
     
1256
-    public static function get_rate_classes( $with_desc = false ) {        
1257
-        $rate_classes_option = get_option( '_wpinv_vat_rate_classes', true );
1258
-        $classes = maybe_unserialize( $rate_classes_option );
1256
+    public static function get_rate_classes($with_desc = false) {        
1257
+        $rate_classes_option = get_option('_wpinv_vat_rate_classes', true);
1258
+        $classes = maybe_unserialize($rate_classes_option);
1259 1259
         
1260
-        if ( empty( $classes ) || !is_array( $classes ) ) {
1260
+        if (empty($classes) || !is_array($classes)) {
1261 1261
             $classes = array();
1262 1262
         }
1263 1263
 
1264 1264
         $rate_classes = array();
1265
-        if ( !array_key_exists( '_standard', $classes ) ) {
1266
-            if ( $with_desc ) {
1267
-                $rate_classes['_standard'] = array( 'name' => self::standard_rates_label(), 'desc' => __( 'EU member states standard VAT rates', 'invoicing' ) );
1265
+        if (!array_key_exists('_standard', $classes)) {
1266
+            if ($with_desc) {
1267
+                $rate_classes['_standard'] = array('name' => self::standard_rates_label(), 'desc' => __('EU member states standard VAT rates', 'invoicing'));
1268 1268
             } else {
1269 1269
                 $rate_classes['_standard'] = self::standard_rates_label();
1270 1270
             }
1271 1271
         }
1272 1272
         
1273
-        foreach ( $classes as $key => $class ) {
1274
-            $name = !empty( $class['name'] ) ? __( $class['name'], 'invoicing' ) : $key;
1275
-            $desc = !empty( $class['desc'] ) ? __( $class['desc'], 'invoicing' ) : '';
1273
+        foreach ($classes as $key => $class) {
1274
+            $name = !empty($class['name']) ? __($class['name'], 'invoicing') : $key;
1275
+            $desc = !empty($class['desc']) ? __($class['desc'], 'invoicing') : '';
1276 1276
             
1277
-            if ( $with_desc ) {
1278
-                $rate_classes[$key] = array( 'name' => $name, 'desc' => $desc );
1277
+            if ($with_desc) {
1278
+                $rate_classes[$key] = array('name' => $name, 'desc' => $desc);
1279 1279
             } else {
1280 1280
                 $rate_classes[$key] = $name;
1281 1281
             }
@@ -1286,15 +1286,15 @@  discard block
 block discarded – undo
1286 1286
     
1287 1287
     public static function get_all_classes() {        
1288 1288
         $classes            = self::get_rate_classes();
1289
-        $classes['_exempt'] = __( 'Exempt (0%)', 'invoicing' );
1289
+        $classes['_exempt'] = __('Exempt (0%)', 'invoicing');
1290 1290
         
1291
-        return apply_filters( 'wpinv_vat_get_all_classes', $classes );
1291
+        return apply_filters('wpinv_vat_get_all_classes', $classes);
1292 1292
     }
1293 1293
     
1294
-    public static function get_class_desc( $rate_class ) {        
1295
-        $rate_classes = self::get_rate_classes( true );
1294
+    public static function get_class_desc($rate_class) {        
1295
+        $rate_classes = self::get_rate_classes(true);
1296 1296
 
1297
-        if ( !empty( $rate_classes ) && isset( $rate_classes[$rate_class] ) && isset( $rate_classes[$rate_class]['desc'] ) ) {
1297
+        if (!empty($rate_classes) && isset($rate_classes[$rate_class]) && isset($rate_classes[$rate_class]['desc'])) {
1298 1298
             return $rate_classes[$rate_class]['desc'];
1299 1299
         }
1300 1300
         
@@ -1310,106 +1310,106 @@  discard block
 block discarded – undo
1310 1310
             'increased'     => 'Increased'
1311 1311
         );
1312 1312
         
1313
-        return apply_filters( 'wpinv_get_vat_groups', $vat_groups );
1313
+        return apply_filters('wpinv_get_vat_groups', $vat_groups);
1314 1314
     }
1315 1315
 
1316 1316
     public static function get_rules() {
1317 1317
         $vat_rules = array(
1318
-            'digital' => __( 'Digital Product', 'invoicing' ),
1319
-            'physical' => __( 'Physical Product', 'invoicing' )
1318
+            'digital' => __('Digital Product', 'invoicing'),
1319
+            'physical' => __('Physical Product', 'invoicing')
1320 1320
         );
1321
-        return apply_filters( 'wpinv_get_vat_rules', $vat_rules );
1321
+        return apply_filters('wpinv_get_vat_rules', $vat_rules);
1322 1322
     }
1323 1323
 
1324
-    public static function get_vat_rates( $class ) {
1325
-        if ( $class === '_standard' ) {
1324
+    public static function get_vat_rates($class) {
1325
+        if ($class === '_standard') {
1326 1326
             return wpinv_get_tax_rates();
1327 1327
         }
1328 1328
 
1329 1329
         $rates = self::get_non_standard_rates();
1330 1330
 
1331
-        return array_key_exists( $class, $rates ) ? $rates[$class] : array();
1331
+        return array_key_exists($class, $rates) ? $rates[$class] : array();
1332 1332
     }
1333 1333
 
1334 1334
     public static function get_non_standard_rates() {
1335
-        $option = get_option( 'wpinv_vat_rates', array());
1336
-        return is_array( $option ) ? $option : array();
1335
+        $option = get_option('wpinv_vat_rates', array());
1336
+        return is_array($option) ? $option : array();
1337 1337
     }
1338 1338
     
1339 1339
     public static function allow_vat_rules() {
1340
-        return ( wpinv_use_taxes() && wpinv_get_option( 'apply_vat_rules' ) ? true : false );
1340
+        return (wpinv_use_taxes() && wpinv_get_option('apply_vat_rules') ? true : false);
1341 1341
     }
1342 1342
     
1343 1343
     public static function allow_vat_classes() {
1344 1344
         return false; // TODO
1345
-        return ( wpinv_get_option( 'vat_allow_classes' ) ? true : false );
1345
+        return (wpinv_get_option('vat_allow_classes') ? true : false);
1346 1346
     }
1347 1347
     
1348
-    public static function get_item_class( $postID ) {
1349
-        $class = get_post_meta( $postID, '_wpinv_vat_class', true );
1348
+    public static function get_item_class($postID) {
1349
+        $class = get_post_meta($postID, '_wpinv_vat_class', true);
1350 1350
 
1351
-        if ( empty( $class ) ) {
1351
+        if (empty($class)) {
1352 1352
             $class = '_standard';
1353 1353
         }
1354 1354
         
1355
-        return apply_filters( 'wpinv_get_item_vat_class', $class, $postID );
1355
+        return apply_filters('wpinv_get_item_vat_class', $class, $postID);
1356 1356
     }
1357 1357
     
1358
-    public static function item_class_label( $postID ) {        
1358
+    public static function item_class_label($postID) {        
1359 1359
         $vat_classes = self::get_all_classes();
1360 1360
         
1361
-        $class = self::get_item_class( $postID );
1362
-        $class = isset( $vat_classes[$class] ) ? $vat_classes[$class] : __( $class, 'invoicing' );
1361
+        $class = self::get_item_class($postID);
1362
+        $class = isset($vat_classes[$class]) ? $vat_classes[$class] : __($class, 'invoicing');
1363 1363
         
1364
-        return apply_filters( 'wpinv_item_class_label', $class, $postID );
1364
+        return apply_filters('wpinv_item_class_label', $class, $postID);
1365 1365
     }
1366 1366
     
1367
-    public static function get_item_rule( $postID ) {        
1368
-        $rule_type = get_post_meta( $postID, '_wpinv_vat_rule', true );
1367
+    public static function get_item_rule($postID) {        
1368
+        $rule_type = get_post_meta($postID, '_wpinv_vat_rule', true);
1369 1369
         
1370
-        if ( empty( $rule_type ) ) {        
1370
+        if (empty($rule_type)) {        
1371 1371
             $rule_type = self::allow_vat_rules() ? 'digital' : 'physical';
1372 1372
         }
1373 1373
         
1374
-        return apply_filters( 'wpinv_item_get_vat_rule', $rule_type, $postID );
1374
+        return apply_filters('wpinv_item_get_vat_rule', $rule_type, $postID);
1375 1375
     }
1376 1376
     
1377
-    public static function item_rule_label( $postID ) {
1377
+    public static function item_rule_label($postID) {
1378 1378
         $vat_rules  = self::get_rules();
1379
-        $vat_rule   = self::get_item_rule( $postID );
1380
-        $vat_rule   = isset( $vat_rules[$vat_rule] ) ? $vat_rules[$vat_rule] : $vat_rule;
1379
+        $vat_rule   = self::get_item_rule($postID);
1380
+        $vat_rule   = isset($vat_rules[$vat_rule]) ? $vat_rules[$vat_rule] : $vat_rule;
1381 1381
         
1382
-        return apply_filters( 'wpinv_item_rule_label', $vat_rule, $postID );
1382
+        return apply_filters('wpinv_item_rule_label', $vat_rule, $postID);
1383 1383
     }
1384 1384
     
1385
-    public static function item_has_digital_rule( $item_id = 0 ) {        
1386
-        return self::get_item_rule( $item_id ) == 'digital' ? true : false;
1385
+    public static function item_has_digital_rule($item_id = 0) {        
1386
+        return self::get_item_rule($item_id) == 'digital' ? true : false;
1387 1387
     }
1388 1388
     
1389
-    public static function invoice_has_digital_rule( $invoice = 0 ) {        
1390
-        if ( !self::allow_vat_rules() ) {
1389
+    public static function invoice_has_digital_rule($invoice = 0) {        
1390
+        if (!self::allow_vat_rules()) {
1391 1391
             return false;
1392 1392
         }
1393 1393
         
1394
-        if ( empty( $invoice ) ) {
1394
+        if (empty($invoice)) {
1395 1395
             return true;
1396 1396
         }
1397 1397
         
1398
-        if ( is_int( $invoice ) ) {
1399
-            $invoice = new WPInv_Invoice( $invoice );
1398
+        if (is_int($invoice)) {
1399
+            $invoice = new WPInv_Invoice($invoice);
1400 1400
         }
1401 1401
         
1402
-        if ( !( is_object( $invoice ) && is_a( $invoice, 'WPInv_Invoice' ) ) ) {
1402
+        if (!(is_object($invoice) && is_a($invoice, 'WPInv_Invoice'))) {
1403 1403
             return true;
1404 1404
         }
1405 1405
         
1406
-        $cart_items  = $invoice->get_cart_details();
1406
+        $cart_items = $invoice->get_cart_details();
1407 1407
         
1408
-        if ( !empty( $cart_items ) ) {
1408
+        if (!empty($cart_items)) {
1409 1409
             $has_digital_rule = false;
1410 1410
             
1411
-            foreach ( $cart_items as $key => $item ) {
1412
-                if ( self::item_has_digital_rule( $item['id'] ) ) {
1411
+            foreach ($cart_items as $key => $item) {
1412
+                if (self::item_has_digital_rule($item['id'])) {
1413 1413
                     $has_digital_rule = true;
1414 1414
                     break;
1415 1415
                 }
@@ -1421,67 +1421,67 @@  discard block
 block discarded – undo
1421 1421
         return $has_digital_rule;
1422 1422
     }
1423 1423
     
1424
-    public static function item_is_taxable( $item_id = 0, $country = false, $state = false ) {        
1425
-        if ( !wpinv_use_taxes() ) {
1424
+    public static function item_is_taxable($item_id = 0, $country = false, $state = false) {        
1425
+        if (!wpinv_use_taxes()) {
1426 1426
             return false;
1427 1427
         }
1428 1428
         
1429 1429
         $is_taxable = true;
1430 1430
 
1431
-        if ( !empty( $item_id ) && self::get_item_class( $item_id ) == '_exempt' ) {
1431
+        if (!empty($item_id) && self::get_item_class($item_id) == '_exempt') {
1432 1432
             $is_taxable = false;
1433 1433
         }
1434 1434
         
1435
-        return apply_filters( 'wpinv_item_is_taxable', $is_taxable, $item_id, $country , $state );
1435
+        return apply_filters('wpinv_item_is_taxable', $is_taxable, $item_id, $country, $state);
1436 1436
     }
1437 1437
     
1438
-    public static function find_rate( $country, $state, $rate, $class ) {
1438
+    public static function find_rate($country, $state, $rate, $class) {
1439 1439
         global $wpi_zero_tax;
1440 1440
 
1441
-        if ( $class === '_exempt' || $wpi_zero_tax ) {
1441
+        if ($class === '_exempt' || $wpi_zero_tax) {
1442 1442
             return 0;
1443 1443
         }
1444 1444
 
1445
-        $tax_rates   = wpinv_get_tax_rates();
1445
+        $tax_rates = wpinv_get_tax_rates();
1446 1446
         
1447
-        if ( $class !== '_standard' ) {
1448
-            $class_rates = self::get_vat_rates( $class );
1447
+        if ($class !== '_standard') {
1448
+            $class_rates = self::get_vat_rates($class);
1449 1449
             
1450
-            if ( is_array( $class_rates ) ) {
1450
+            if (is_array($class_rates)) {
1451 1451
                 $indexed_class_rates = array();
1452 1452
                 
1453
-                foreach ( $class_rates as $key => $cr ) {
1453
+                foreach ($class_rates as $key => $cr) {
1454 1454
                     $indexed_class_rates[$cr['country']] = $cr;
1455 1455
                 }
1456 1456
 
1457
-                $tax_rates = array_map( function( $tr ) use( $indexed_class_rates ) {
1457
+                $tax_rates = array_map(function($tr) use($indexed_class_rates) {
1458 1458
                     $tr_country = $tr['country'];
1459
-                    if ( !isset( $indexed_class_rates[$tr_country] ) ) {
1459
+                    if (!isset($indexed_class_rates[$tr_country])) {
1460 1460
                         return $tr;
1461 1461
                     }
1462 1462
                     $icr = $indexed_class_rates[$tr_country];
1463
-                    return ( empty( $icr['rate'] ) && $icr['rate'] !== '0' ) ? $tr : $icr;
1463
+                    return (empty($icr['rate']) && $icr['rate'] !== '0') ? $tr : $icr;
1464 1464
 
1465
-                }, $tax_rates, $class_rates );
1465
+                }, $tax_rates, $class_rates);
1466 1466
             }
1467 1467
         }
1468 1468
 
1469
-        if ( !empty( $tax_rates ) ) {
1470
-            foreach ( $tax_rates as $key => $tax_rate ) {
1471
-                if ( $country != $tax_rate['country'] )
1469
+        if (!empty($tax_rates)) {
1470
+            foreach ($tax_rates as $key => $tax_rate) {
1471
+                if ($country != $tax_rate['country'])
1472 1472
                     continue;
1473 1473
 
1474
-                if ( !empty( $tax_rate['global'] ) ) {
1475
-                    if ( 0 !== $tax_rate['rate'] || !empty( $tax_rate['rate'] ) ) {
1476
-                        $rate = number_format( $tax_rate['rate'], 4 );
1474
+                if (!empty($tax_rate['global'])) {
1475
+                    if (0 !== $tax_rate['rate'] || !empty($tax_rate['rate'])) {
1476
+                        $rate = number_format($tax_rate['rate'], 4);
1477 1477
                     }
1478 1478
                 } else {
1479
-                    if ( empty( $tax_rate['state'] ) || strtolower( $state ) != strtolower( $tax_rate['state'] ) )
1479
+                    if (empty($tax_rate['state']) || strtolower($state) != strtolower($tax_rate['state']))
1480 1480
                         continue;
1481 1481
 
1482 1482
                     $state_rate = $tax_rate['rate'];
1483
-                    if ( 0 !== $state_rate || !empty( $state_rate ) ) {
1484
-                        $rate = number_format( $state_rate, 4 );
1483
+                    if (0 !== $state_rate || !empty($state_rate)) {
1484
+                        $rate = number_format($state_rate, 4);
1485 1485
                     }
1486 1486
                 }
1487 1487
             }
@@ -1490,84 +1490,84 @@  discard block
 block discarded – undo
1490 1490
         return $rate;
1491 1491
     }
1492 1492
     
1493
-    public static function get_rate( $rate = 1, $country = '', $state = '', $item_id = 0 ) {
1493
+    public static function get_rate($rate = 1, $country = '', $state = '', $item_id = 0) {
1494 1494
         global $wpinv_options, $wpi_session, $wpi_item_id, $wpi_zero_tax;
1495 1495
         
1496 1496
         $item_id = $item_id > 0 ? $item_id : $wpi_item_id;
1497 1497
         $allow_vat_classes = self::allow_vat_classes();
1498
-        $class = $item_id ? self::get_item_class( $item_id ) : '_standard';
1498
+        $class = $item_id ? self::get_item_class($item_id) : '_standard';
1499 1499
 
1500
-        if ( $class === '_exempt' || $wpi_zero_tax ) {
1500
+        if ($class === '_exempt' || $wpi_zero_tax) {
1501 1501
             return 0;
1502
-        } else if ( !$allow_vat_classes ) {
1502
+        } else if (!$allow_vat_classes) {
1503 1503
             $class = '_standard';
1504 1504
         }
1505 1505
 
1506
-        if( !empty( $_POST['wpinv_country'] ) ) {
1506
+        if (!empty($_POST['wpinv_country'])) {
1507 1507
             $post_country = $_POST['wpinv_country'];
1508
-        } elseif( !empty( $_POST['wpinv_country'] ) ) {
1508
+        } elseif (!empty($_POST['wpinv_country'])) {
1509 1509
             $post_country = $_POST['wpinv_country'];
1510
-        } elseif( !empty( $_POST['country'] ) ) {
1510
+        } elseif (!empty($_POST['country'])) {
1511 1511
             $post_country = $_POST['country'];
1512 1512
         } else {
1513 1513
             $post_country = '';
1514 1514
         }
1515 1515
 
1516
-        $country        = !empty( $post_country ) ? $post_country : wpinv_default_billing_country( $country );
1517
-        $base_country   = wpinv_is_base_country( $country );
1516
+        $country        = !empty($post_country) ? $post_country : wpinv_default_billing_country($country);
1517
+        $base_country   = wpinv_is_base_country($country);
1518 1518
         
1519
-        $requires_vat   = self::requires_vat( 0, false );
1520
-        $is_digital     = self::get_item_rule( $item_id ) == 'digital' ;
1521
-        $rate           = $requires_vat && isset( $wpinv_options['eu_fallback_rate'] ) ? $wpinv_options['eu_fallback_rate'] : $rate;
1519
+        $requires_vat   = self::requires_vat(0, false);
1520
+        $is_digital     = self::get_item_rule($item_id) == 'digital';
1521
+        $rate           = $requires_vat && isset($wpinv_options['eu_fallback_rate']) ? $wpinv_options['eu_fallback_rate'] : $rate;
1522 1522
           
1523
-        if ( self::same_country_rule() == 'no' && $base_country ) { // Disable VAT to same country
1523
+        if (self::same_country_rule() == 'no' && $base_country) { // Disable VAT to same country
1524 1524
             $rate = 0;
1525
-        } else if ( $requires_vat ) {
1526
-            $vat_number = self::get_user_vat_number( '', 0, true );
1525
+        } else if ($requires_vat) {
1526
+            $vat_number = self::get_user_vat_number('', 0, true);
1527 1527
             $vat_info   = self::current_vat_data();
1528 1528
             
1529
-            if ( is_array( $vat_info ) ) {
1530
-                $vat_number = isset( $vat_info['number'] ) && !empty( $vat_info['valid'] ) ? $vat_info['number'] : "";
1529
+            if (is_array($vat_info)) {
1530
+                $vat_number = isset($vat_info['number']) && !empty($vat_info['valid']) ? $vat_info['number'] : "";
1531 1531
             }
1532 1532
             
1533
-            if ( $country == 'UK' ) {
1533
+            if ($country == 'UK') {
1534 1534
                 $country = 'GB';
1535 1535
             }
1536 1536
 
1537
-            if ( !empty( $vat_number ) ) {
1537
+            if (!empty($vat_number)) {
1538 1538
                 $rate = 0;
1539 1539
             } else {
1540
-                $rate = self::find_rate( $country, $state, $rate, $class ); // Fix if there are no tax rated and you try to pay an invoice it does not add the fallback tax rate
1540
+                $rate = self::find_rate($country, $state, $rate, $class); // Fix if there are no tax rated and you try to pay an invoice it does not add the fallback tax rate
1541 1541
             }
1542 1542
 
1543
-            if ( empty( $vat_number ) && !$is_digital ) {
1544
-                if ( $base_country ) {
1545
-                    $rate = self::find_rate( $country, null, $rate, $class );
1543
+            if (empty($vat_number) && !$is_digital) {
1544
+                if ($base_country) {
1545
+                    $rate = self::find_rate($country, null, $rate, $class);
1546 1546
                 } else {
1547
-                    if ( empty( $country ) && isset( $wpinv_options['eu_fallback_rate'] ) ) {
1547
+                    if (empty($country) && isset($wpinv_options['eu_fallback_rate'])) {
1548 1548
                         $rate = $wpinv_options['eu_fallback_rate'];
1549
-                    } else if( !empty( $country ) ) {
1550
-                        $rate = self::find_rate( $country, $state, $rate, $class );
1549
+                    } else if (!empty($country)) {
1550
+                        $rate = self::find_rate($country, $state, $rate, $class);
1551 1551
                     }
1552 1552
                 }
1553
-            } else if ( empty( $vat_number ) || ( self::same_country_rule() == 'always' && $base_country ) ) {
1554
-                if ( empty( $country ) && isset( $wpinv_options['eu_fallback_rate'] ) ) {
1553
+            } else if (empty($vat_number) || (self::same_country_rule() == 'always' && $base_country)) {
1554
+                if (empty($country) && isset($wpinv_options['eu_fallback_rate'])) {
1555 1555
                     $rate = $wpinv_options['eu_fallback_rate'];
1556
-                } else if( !empty( $country ) ) {
1557
-                    $rate = self::find_rate( $country, $state, $rate, $class );
1556
+                } else if (!empty($country)) {
1557
+                    $rate = self::find_rate($country, $state, $rate, $class);
1558 1558
                 }
1559 1559
             }
1560 1560
         } else {
1561
-            if ( $is_digital ) {
1561
+            if ($is_digital) {
1562 1562
                 $ip_country_code = self::get_country_by_ip();
1563 1563
                 
1564
-                if ( $ip_country_code && self::is_eu_state( $ip_country_code ) ) {
1565
-                    $rate = self::find_rate( $ip_country_code, '', 0, $class );
1564
+                if ($ip_country_code && self::is_eu_state($ip_country_code)) {
1565
+                    $rate = self::find_rate($ip_country_code, '', 0, $class);
1566 1566
                 } else {
1567
-                    $rate = self::find_rate( $country, $state, $rate, $class );
1567
+                    $rate = self::find_rate($country, $state, $rate, $class);
1568 1568
                 }
1569 1569
             } else {
1570
-                $rate = self::find_rate( $country, $state, $rate, $class );
1570
+                $rate = self::find_rate($country, $state, $rate, $class);
1571 1571
             }
1572 1572
         }
1573 1573
 
@@ -1577,48 +1577,48 @@  discard block
 block discarded – undo
1577 1577
     public static function current_vat_data() {
1578 1578
         global $wpi_session;
1579 1579
         
1580
-        return $wpi_session->get( 'user_vat_data' );
1580
+        return $wpi_session->get('user_vat_data');
1581 1581
     }
1582 1582
     
1583
-    public static function get_user_country( $country = '', $user_id = 0 ) {
1584
-        $user_address = wpinv_get_user_address( $user_id, false );
1583
+    public static function get_user_country($country = '', $user_id = 0) {
1584
+        $user_address = wpinv_get_user_address($user_id, false);
1585 1585
         
1586
-        if ( wpinv_get_option( 'vat_ip_country_default' ) ) {
1586
+        if (wpinv_get_option('vat_ip_country_default')) {
1587 1587
             $country = '';
1588 1588
         }
1589 1589
         
1590
-        $country    = empty( $user_address ) || !isset( $user_address['country'] ) || empty( $user_address['country'] ) ? $country : $user_address['country'];
1591
-        $result     = apply_filters( 'wpinv_get_user_country', $country, $user_id );
1590
+        $country    = empty($user_address) || !isset($user_address['country']) || empty($user_address['country']) ? $country : $user_address['country'];
1591
+        $result     = apply_filters('wpinv_get_user_country', $country, $user_id);
1592 1592
 
1593
-        if ( empty( $result ) ) {
1593
+        if (empty($result)) {
1594 1594
             $result = self::get_country_by_ip();
1595 1595
         }
1596 1596
 
1597 1597
         return $result;
1598 1598
     }
1599 1599
     
1600
-    public static function set_user_country( $country = '', $user_id = 0 ) {
1600
+    public static function set_user_country($country = '', $user_id = 0) {
1601 1601
         global $wpi_userID;
1602 1602
         
1603
-        if ( empty($country) && !empty($wpi_userID) && get_current_user_id() != $wpi_userID ) {
1603
+        if (empty($country) && !empty($wpi_userID) && get_current_user_id() != $wpi_userID) {
1604 1604
             $country = wpinv_get_default_country();
1605 1605
         }
1606 1606
         
1607 1607
         return $country;
1608 1608
     }
1609 1609
     
1610
-    public static function get_user_vat_number( $vat_number = '', $user_id = 0, $is_valid = false ) {
1610
+    public static function get_user_vat_number($vat_number = '', $user_id = 0, $is_valid = false) {
1611 1611
         global $wpi_current_id, $wpi_userID;
1612 1612
         
1613
-        if ( !empty( $_POST['new_user'] ) ) {
1613
+        if (!empty($_POST['new_user'])) {
1614 1614
             return '';
1615 1615
         }
1616 1616
         
1617
-        if ( empty( $user_id ) ) {
1618
-            $user_id = !empty( $wpi_userID ) ? $wpi_userID : ( $wpi_current_id ? wpinv_get_user_id( $wpi_current_id ) : get_current_user_id() );
1617
+        if (empty($user_id)) {
1618
+            $user_id = !empty($wpi_userID) ? $wpi_userID : ($wpi_current_id ? wpinv_get_user_id($wpi_current_id) : get_current_user_id());
1619 1619
         }
1620 1620
 
1621
-        $vat_number = empty( $user_id ) ? '' : get_user_meta( $user_id, '_wpinv_vat_number', true );
1621
+        $vat_number = empty($user_id) ? '' : get_user_meta($user_id, '_wpinv_vat_number', true);
1622 1622
         
1623 1623
         /* TODO
1624 1624
         if ( $is_valid && $vat_number ) {
@@ -1629,38 +1629,38 @@  discard block
 block discarded – undo
1629 1629
         }
1630 1630
         */
1631 1631
 
1632
-        return apply_filters('wpinv_get_user_vat_number', $vat_number, $user_id, $is_valid );
1632
+        return apply_filters('wpinv_get_user_vat_number', $vat_number, $user_id, $is_valid);
1633 1633
     }
1634 1634
     
1635
-    public static function get_user_company( $company = '', $user_id = 0 ) {
1635
+    public static function get_user_company($company = '', $user_id = 0) {
1636 1636
         global $wpi_current_id, $wpi_userID;
1637 1637
         
1638
-        if ( empty( $user_id ) ) {
1639
-            $user_id = !empty( $wpi_userID ) ? $wpi_userID : ( $wpi_current_id ? wpinv_get_user_id( $wpi_current_id ) : get_current_user_id() );
1638
+        if (empty($user_id)) {
1639
+            $user_id = !empty($wpi_userID) ? $wpi_userID : ($wpi_current_id ? wpinv_get_user_id($wpi_current_id) : get_current_user_id());
1640 1640
         }
1641 1641
 
1642
-        $company = empty( $user_id ) ? "" : get_user_meta( $user_id, '_wpinv_company', true );
1642
+        $company = empty($user_id) ? "" : get_user_meta($user_id, '_wpinv_company', true);
1643 1643
 
1644
-        return apply_filters( 'wpinv_user_company', $company, $user_id );
1644
+        return apply_filters('wpinv_user_company', $company, $user_id);
1645 1645
     }
1646 1646
     
1647
-    public static function save_user_vat_details( $company = '', $vat_number = '' ) {
1648
-        $save = apply_filters( 'wpinv_allow_save_user_vat_details', true );
1647
+    public static function save_user_vat_details($company = '', $vat_number = '') {
1648
+        $save = apply_filters('wpinv_allow_save_user_vat_details', true);
1649 1649
 
1650
-        if ( is_user_logged_in() && $save ) {
1650
+        if (is_user_logged_in() && $save) {
1651 1651
             $user_id = get_current_user_id();
1652 1652
 
1653
-            if ( !empty( $vat_number ) ) {
1654
-                update_user_meta( $user_id, '_wpinv_vat_number', $vat_number );
1653
+            if (!empty($vat_number)) {
1654
+                update_user_meta($user_id, '_wpinv_vat_number', $vat_number);
1655 1655
             } else {
1656
-                delete_user_meta( $user_id, '_wpinv_vat_number');
1656
+                delete_user_meta($user_id, '_wpinv_vat_number');
1657 1657
             }
1658 1658
 
1659
-            if ( !empty( $company ) ) {
1660
-                update_user_meta( $user_id, '_wpinv_company', $company );
1659
+            if (!empty($company)) {
1660
+                update_user_meta($user_id, '_wpinv_company', $company);
1661 1661
             } else {
1662
-                delete_user_meta( $user_id, '_wpinv_company');
1663
-                delete_user_meta( $user_id, '_wpinv_vat_number');
1662
+                delete_user_meta($user_id, '_wpinv_company');
1663
+                delete_user_meta($user_id, '_wpinv_vat_number');
1664 1664
             }
1665 1665
         }
1666 1666
 
@@ -1670,113 +1670,113 @@  discard block
 block discarded – undo
1670 1670
     public static function ajax_vat_validate() {
1671 1671
         global $wpinv_options, $wpi_session;
1672 1672
         
1673
-        $is_checkout            = ( !empty( $_POST['source'] ) && $_POST['source'] == 'checkout' ) ? true : false;
1673
+        $is_checkout            = (!empty($_POST['source']) && $_POST['source'] == 'checkout') ? true : false;
1674 1674
         $response               = array();
1675 1675
         $response['success']    = false;
1676 1676
         
1677
-        if ( empty( $_REQUEST['_wpi_nonce'] ) || ( !empty( $_REQUEST['_wpi_nonce'] ) && !wp_verify_nonce( $_REQUEST['_wpi_nonce'], 'vat_validation' ) ) ) {
1678
-            $response['error'] = __( 'Invalid security nonce', 'invoicing' );
1679
-            wp_send_json( $response );
1677
+        if (empty($_REQUEST['_wpi_nonce']) || (!empty($_REQUEST['_wpi_nonce']) && !wp_verify_nonce($_REQUEST['_wpi_nonce'], 'vat_validation'))) {
1678
+            $response['error'] = __('Invalid security nonce', 'invoicing');
1679
+            wp_send_json($response);
1680 1680
         }
1681 1681
         
1682
-        $vat_name   = self::get_vat_name();
1682
+        $vat_name = self::get_vat_name();
1683 1683
         
1684
-        if ( $is_checkout ) {
1684
+        if ($is_checkout) {
1685 1685
             $invoice = wpinv_get_invoice_cart();
1686 1686
             
1687
-            if ( !self::requires_vat( false, 0, self::invoice_has_digital_rule( $invoice ) ) ) {
1687
+            if (!self::requires_vat(false, 0, self::invoice_has_digital_rule($invoice))) {
1688 1688
                 $vat_info = array();
1689
-                $wpi_session->set( 'user_vat_data', $vat_info );
1689
+                $wpi_session->set('user_vat_data', $vat_info);
1690 1690
 
1691 1691
                 self::save_user_vat_details();
1692 1692
                 
1693 1693
                 $response['success'] = true;
1694
-                $response['message'] = wp_sprintf( __( 'Ignore %s', 'invoicing' ), $vat_name );
1695
-                wp_send_json( $response );
1694
+                $response['message'] = wp_sprintf(__('Ignore %s', 'invoicing'), $vat_name);
1695
+                wp_send_json($response);
1696 1696
             }
1697 1697
         }
1698 1698
         
1699
-        $company    = !empty( $_POST['company'] ) ? sanitize_text_field( $_POST['company'] ) : '';
1700
-        $vat_number = !empty( $_POST['number'] ) ? sanitize_text_field( $_POST['number'] ) : '';
1699
+        $company    = !empty($_POST['company']) ? sanitize_text_field($_POST['company']) : '';
1700
+        $vat_number = !empty($_POST['number']) ? sanitize_text_field($_POST['number']) : '';
1701 1701
         
1702
-        $vat_info = $wpi_session->get( 'user_vat_data' );
1703
-        if ( !is_array( $vat_info ) || empty( $vat_info ) ) {
1704
-            $vat_info = array( 'company'=> $company, 'number' => '', 'valid' => true );
1702
+        $vat_info = $wpi_session->get('user_vat_data');
1703
+        if (!is_array($vat_info) || empty($vat_info)) {
1704
+            $vat_info = array('company'=> $company, 'number' => '', 'valid' => true);
1705 1705
         }
1706 1706
         
1707
-        if ( empty( $vat_number ) ) {
1708
-            if ( $is_checkout ) {
1707
+        if (empty($vat_number)) {
1708
+            if ($is_checkout) {
1709 1709
                 $response['success'] = true;
1710
-                $response['message'] = wp_sprintf( __( 'No %s number has been applied. %s will be added to invoice totals', 'invoicing' ), $vat_name, $vat_name );
1710
+                $response['message'] = wp_sprintf(__('No %s number has been applied. %s will be added to invoice totals', 'invoicing'), $vat_name, $vat_name);
1711 1711
                 
1712
-                $vat_info = $wpi_session->get( 'user_vat_data' );
1712
+                $vat_info = $wpi_session->get('user_vat_data');
1713 1713
                 $vat_info['number'] = "";
1714 1714
                 $vat_info['valid'] = true;
1715 1715
                 
1716
-                self::save_user_vat_details( $company );
1716
+                self::save_user_vat_details($company);
1717 1717
             } else {
1718
-                $response['error'] = wp_sprintf( __( 'Please enter your %s number!', 'invoicing' ), $vat_name );
1718
+                $response['error'] = wp_sprintf(__('Please enter your %s number!', 'invoicing'), $vat_name);
1719 1719
                 
1720 1720
                 $vat_info['valid'] = false;
1721 1721
             }
1722 1722
 
1723
-            $wpi_session->set( 'user_vat_data', $vat_info );
1724
-            wp_send_json( $response );
1723
+            $wpi_session->set('user_vat_data', $vat_info);
1724
+            wp_send_json($response);
1725 1725
         }
1726 1726
         
1727
-        if ( empty( $company ) ) {
1727
+        if (empty($company)) {
1728 1728
             $vat_info['valid'] = false;
1729
-            $wpi_session->set( 'user_vat_data', $vat_info );
1729
+            $wpi_session->set('user_vat_data', $vat_info);
1730 1730
             
1731
-            $response['error'] = __( 'Please enter your registered company name!', 'invoicing' );
1732
-            wp_send_json( $response );
1731
+            $response['error'] = __('Please enter your registered company name!', 'invoicing');
1732
+            wp_send_json($response);
1733 1733
         }
1734 1734
         
1735
-        if ( !empty( $wpinv_options['vat_vies_check'] ) ) {
1736
-            if ( empty( $wpinv_options['vat_offline_check'] ) && !self::offline_check( $vat_number ) ) {
1735
+        if (!empty($wpinv_options['vat_vies_check'])) {
1736
+            if (empty($wpinv_options['vat_offline_check']) && !self::offline_check($vat_number)) {
1737 1737
                 $vat_info['valid'] = false;
1738
-                $wpi_session->set( 'user_vat_data', $vat_info );
1738
+                $wpi_session->set('user_vat_data', $vat_info);
1739 1739
                 
1740
-                $response['error'] = wp_sprintf( __( '%s number not validated', 'invoicing' ), $vat_name );
1741
-                wp_send_json( $response );
1740
+                $response['error'] = wp_sprintf(__('%s number not validated', 'invoicing'), $vat_name);
1741
+                wp_send_json($response);
1742 1742
             }
1743 1743
             
1744 1744
             $response['success'] = true;
1745
-            $response['message'] = wp_sprintf( __( '%s number validated', 'invoicing' ), $vat_name );
1745
+            $response['message'] = wp_sprintf(__('%s number validated', 'invoicing'), $vat_name);
1746 1746
         } else {
1747
-            $result = self::check_vat( $vat_number );
1747
+            $result = self::check_vat($vat_number);
1748 1748
             
1749
-            if ( empty( $result['valid'] ) ) {
1749
+            if (empty($result['valid'])) {
1750 1750
                 $response['error'] = $result['message'];
1751
-                wp_send_json( $response );
1751
+                wp_send_json($response);
1752 1752
             }
1753 1753
             
1754
-            $vies_company = !empty( $result['company'] ) ? $result['company'] : '';
1755
-            $vies_company = apply_filters( 'wpinv_vies_company_name', $vies_company );
1754
+            $vies_company = !empty($result['company']) ? $result['company'] : '';
1755
+            $vies_company = apply_filters('wpinv_vies_company_name', $vies_company);
1756 1756
             
1757
-            $valid_company = $vies_company && $company && ( $vies_company == '---' || strcasecmp( trim( $vies_company ), trim( $company ) ) == 0 ) ? true : false;
1757
+            $valid_company = $vies_company && $company && ($vies_company == '---' || strcasecmp(trim($vies_company), trim($company)) == 0) ? true : false;
1758 1758
 
1759
-            if ( !empty( $wpinv_options['vat_disable_company_name_check'] ) || $valid_company ) {
1759
+            if (!empty($wpinv_options['vat_disable_company_name_check']) || $valid_company) {
1760 1760
                 $response['success'] = true;
1761
-                $response['message'] = wp_sprintf( __( '%s number validated', 'invoicing' ), $vat_name );
1761
+                $response['message'] = wp_sprintf(__('%s number validated', 'invoicing'), $vat_name);
1762 1762
             } else {           
1763 1763
                 $vat_info['valid'] = false;
1764
-                $wpi_session->set( 'user_vat_data', $vat_info );
1764
+                $wpi_session->set('user_vat_data', $vat_info);
1765 1765
                 
1766 1766
                 $response['success'] = false;
1767
-                $response['message'] = wp_sprintf( __( 'The company name associated with the %s number provided is not the same as the company name provided.', 'invoicing' ), $vat_name );
1768
-                wp_send_json( $response );
1767
+                $response['message'] = wp_sprintf(__('The company name associated with the %s number provided is not the same as the company name provided.', 'invoicing'), $vat_name);
1768
+                wp_send_json($response);
1769 1769
             }
1770 1770
         }
1771 1771
         
1772
-        if ( $is_checkout ) {
1773
-            self::save_user_vat_details( $company, $vat_number );
1772
+        if ($is_checkout) {
1773
+            self::save_user_vat_details($company, $vat_number);
1774 1774
 
1775
-            $vat_info = array('company' => $company, 'number' => $vat_number, 'valid' => true );
1776
-            $wpi_session->set( 'user_vat_data', $vat_info );
1775
+            $vat_info = array('company' => $company, 'number' => $vat_number, 'valid' => true);
1776
+            $wpi_session->set('user_vat_data', $vat_info);
1777 1777
         }
1778 1778
 
1779
-        wp_send_json( $response );
1779
+        wp_send_json($response);
1780 1780
     }
1781 1781
     
1782 1782
     public static function ajax_vat_reset() {
@@ -1785,161 +1785,161 @@  discard block
 block discarded – undo
1785 1785
         $company    = is_user_logged_in() ? self::get_user_company() : '';
1786 1786
         $vat_number = self::get_user_vat_number();
1787 1787
         
1788
-        $vat_info   = array('company' => $company, 'number' => $vat_number, 'valid' => false );
1789
-        $wpi_session->set( 'user_vat_data', $vat_info );
1788
+        $vat_info   = array('company' => $company, 'number' => $vat_number, 'valid' => false);
1789
+        $wpi_session->set('user_vat_data', $vat_info);
1790 1790
         
1791 1791
         $response                       = array();
1792 1792
         $response['success']            = true;
1793 1793
         $response['data']['company']    = $company;
1794 1794
         $response['data']['number']     = $vat_number;
1795 1795
         
1796
-        wp_send_json( $response );
1796
+        wp_send_json($response);
1797 1797
     }
1798 1798
     
1799
-    public static function checkout_vat_validate( $valid_data, $post ) {
1799
+    public static function checkout_vat_validate($valid_data, $post) {
1800 1800
         global $wpinv_options, $wpi_session;
1801 1801
         
1802
-        $vat_name  = __( self::get_vat_name(), 'invoicing' );
1802
+        $vat_name = __(self::get_vat_name(), 'invoicing');
1803 1803
         
1804
-        if ( !isset( $_POST['_wpi_nonce'] ) || !wp_verify_nonce( $_POST['_wpi_nonce'], 'vat_validation' ) ) {
1805
-            wpinv_set_error( 'vat_validation', wp_sprintf( __( "Invalid %s validation request.", 'invoicing' ), $vat_name ) );
1804
+        if (!isset($_POST['_wpi_nonce']) || !wp_verify_nonce($_POST['_wpi_nonce'], 'vat_validation')) {
1805
+            wpinv_set_error('vat_validation', wp_sprintf(__("Invalid %s validation request.", 'invoicing'), $vat_name));
1806 1806
             return;
1807 1807
         }
1808 1808
         
1809
-        $vat_saved = $wpi_session->get( 'user_vat_data' );
1810
-        $wpi_session->set( 'user_vat_data', null );
1809
+        $vat_saved = $wpi_session->get('user_vat_data');
1810
+        $wpi_session->set('user_vat_data', null);
1811 1811
         
1812 1812
         $invoice        = wpinv_get_invoice_cart();
1813 1813
         $amount         = $invoice->get_total();
1814
-        $is_digital     = self::invoice_has_digital_rule( $invoice );
1815
-        $no_vat         = !self::requires_vat( 0, false, $is_digital );
1814
+        $is_digital     = self::invoice_has_digital_rule($invoice);
1815
+        $no_vat         = !self::requires_vat(0, false, $is_digital);
1816 1816
         
1817
-        $company        = !empty( $_POST['wpinv_company'] ) ? $_POST['wpinv_company'] : null;
1818
-        $vat_number     = !empty( $_POST['wpinv_vat_number'] ) ? $_POST['wpinv_vat_number'] : null;
1819
-        $country        = !empty( $_POST['wpinv_country'] ) ? $_POST['wpinv_country'] : $invoice->country;
1820
-        if ( empty( $country ) ) {
1817
+        $company        = !empty($_POST['wpinv_company']) ? $_POST['wpinv_company'] : null;
1818
+        $vat_number     = !empty($_POST['wpinv_vat_number']) ? $_POST['wpinv_vat_number'] : null;
1819
+        $country        = !empty($_POST['wpinv_country']) ? $_POST['wpinv_country'] : $invoice->country;
1820
+        if (empty($country)) {
1821 1821
             $country = wpinv_default_billing_country();
1822 1822
         }
1823 1823
         
1824
-        if ( !$is_digital && $no_vat ) {
1824
+        if (!$is_digital && $no_vat) {
1825 1825
             return;
1826 1826
         }
1827 1827
             
1828
-        $vat_data           = array( 'company' => '', 'number' => '', 'valid' => false );
1828
+        $vat_data           = array('company' => '', 'number' => '', 'valid' => false);
1829 1829
         
1830 1830
         $ip_country_code    = self::get_country_by_ip();
1831
-        $is_eu_state        = self::is_eu_state( $country );
1832
-        $is_eu_state_ip     = self::is_eu_state( $ip_country_code );
1831
+        $is_eu_state        = self::is_eu_state($country);
1832
+        $is_eu_state_ip     = self::is_eu_state($ip_country_code);
1833 1833
         $is_non_eu_user     = !$is_eu_state && !$is_eu_state_ip;
1834 1834
         
1835
-        if ( $is_digital && !$is_non_eu_user && empty( $vat_number ) && apply_filters( 'wpinv_checkout_requires_country', true, $amount ) ) {
1835
+        if ($is_digital && !$is_non_eu_user && empty($vat_number) && apply_filters('wpinv_checkout_requires_country', true, $amount)) {
1836 1836
             $vat_data['adddress_confirmed'] = false;
1837 1837
             
1838
-            if ( !isset( $_POST['wpinv_adddress_confirmed'] ) ) {
1839
-                if ( $ip_country_code != $country ) {
1840
-                    wpinv_set_error( 'vat_validation', sprintf( __( 'The country of your current location must be the same as the country of your billing location or you must %s confirm %s the billing address is your home country.', 'invoicing' ), '<a href="#wpinv_adddress_confirm">', '</a>' ) );
1838
+            if (!isset($_POST['wpinv_adddress_confirmed'])) {
1839
+                if ($ip_country_code != $country) {
1840
+                    wpinv_set_error('vat_validation', sprintf(__('The country of your current location must be the same as the country of your billing location or you must %s confirm %s the billing address is your home country.', 'invoicing'), '<a href="#wpinv_adddress_confirm">', '</a>'));
1841 1841
                 }
1842 1842
             } else {
1843 1843
                 $vat_data['adddress_confirmed'] = true;
1844 1844
             }
1845 1845
         }
1846 1846
         
1847
-        if ( !empty( $wpinv_options['vat_prevent_b2c_purchase'] ) && !$is_non_eu_user && ( empty( $vat_number ) || $no_vat ) ) {
1848
-            if ( $is_eu_state ) {
1849
-                wpinv_set_error( 'vat_validation', wp_sprintf( __( 'Please enter and validate your %s number to verify your purchase is by an EU business.', 'invoicing' ), $vat_name ) );
1850
-            } else if ( $is_digital && $is_eu_state_ip ) {
1851
-                wpinv_set_error( 'vat_validation', wp_sprintf( __( 'Sales to non-EU countries cannot be completed because %s must be applied.', 'invoicing' ), $vat_name ) );
1847
+        if (!empty($wpinv_options['vat_prevent_b2c_purchase']) && !$is_non_eu_user && (empty($vat_number) || $no_vat)) {
1848
+            if ($is_eu_state) {
1849
+                wpinv_set_error('vat_validation', wp_sprintf(__('Please enter and validate your %s number to verify your purchase is by an EU business.', 'invoicing'), $vat_name));
1850
+            } else if ($is_digital && $is_eu_state_ip) {
1851
+                wpinv_set_error('vat_validation', wp_sprintf(__('Sales to non-EU countries cannot be completed because %s must be applied.', 'invoicing'), $vat_name));
1852 1852
             }
1853 1853
         }
1854 1854
         
1855
-        if ( !$is_eu_state || $no_vat || empty( $vat_number ) ) {
1855
+        if (!$is_eu_state || $no_vat || empty($vat_number)) {
1856 1856
             return;
1857 1857
         }
1858 1858
 
1859
-        if ( !empty( $vat_saved ) && isset( $vat_saved['valid'] ) ) {
1860
-            $vat_data['valid']  = $vat_saved['valid'];
1859
+        if (!empty($vat_saved) && isset($vat_saved['valid'])) {
1860
+            $vat_data['valid'] = $vat_saved['valid'];
1861 1861
         }
1862 1862
             
1863
-        if ( $company !== null ) {
1863
+        if ($company !== null) {
1864 1864
             $vat_data['company'] = $company;
1865 1865
         }
1866 1866
 
1867 1867
         $message = '';
1868
-        if ( $vat_number !== null ) {
1868
+        if ($vat_number !== null) {
1869 1869
             $vat_data['number'] = $vat_number;
1870 1870
             
1871
-            if ( !$vat_data['valid'] || ( $vat_saved['number'] !== $vat_data['number'] ) || ( $vat_saved['company'] !== $vat_data['company'] ) ) {
1872
-                if ( !empty( $wpinv_options['vat_vies_check'] ) ) {            
1873
-                    if ( empty( $wpinv_options['vat_offline_check'] ) && !self::offline_check( $vat_number ) ) {
1871
+            if (!$vat_data['valid'] || ($vat_saved['number'] !== $vat_data['number']) || ($vat_saved['company'] !== $vat_data['company'])) {
1872
+                if (!empty($wpinv_options['vat_vies_check'])) {            
1873
+                    if (empty($wpinv_options['vat_offline_check']) && !self::offline_check($vat_number)) {
1874 1874
                         $vat_data['valid'] = false;
1875 1875
                     }
1876 1876
                 } else {
1877
-                    $result = self::check_vat( $vat_number );
1877
+                    $result = self::check_vat($vat_number);
1878 1878
                     
1879
-                    if ( !empty( $result['valid'] ) ) {                
1879
+                    if (!empty($result['valid'])) {                
1880 1880
                         $vat_data['valid'] = true;
1881
-                        $vies_company = !empty( $result['company'] ) ? $result['company'] : '';
1882
-                        $vies_company = apply_filters( 'wpinv_vies_company_name', $vies_company );
1881
+                        $vies_company = !empty($result['company']) ? $result['company'] : '';
1882
+                        $vies_company = apply_filters('wpinv_vies_company_name', $vies_company);
1883 1883
                     
1884
-                        $valid_company = $vies_company && $company && ( $vies_company == '---' || strcasecmp( trim( $vies_company ), trim( $company ) ) == 0 ) ? true : false;
1884
+                        $valid_company = $vies_company && $company && ($vies_company == '---' || strcasecmp(trim($vies_company), trim($company)) == 0) ? true : false;
1885 1885
 
1886
-                        if ( !( !empty( $wpinv_options['vat_disable_company_name_check'] ) || $valid_company ) ) {         
1886
+                        if (!(!empty($wpinv_options['vat_disable_company_name_check']) || $valid_company)) {         
1887 1887
                             $vat_data['valid'] = false;
1888 1888
                             
1889
-                            $message = wp_sprintf( __( 'The company name associated with the %s number provided is not the same as the company name provided.', 'invoicing' ), $vat_name );
1889
+                            $message = wp_sprintf(__('The company name associated with the %s number provided is not the same as the company name provided.', 'invoicing'), $vat_name);
1890 1890
                         }
1891 1891
                     } else {
1892
-                        $message = wp_sprintf( __( 'Fail to validate the %s number: EU Commission VAT server (VIES) check fails.', 'invoicing' ), $vat_name );
1892
+                        $message = wp_sprintf(__('Fail to validate the %s number: EU Commission VAT server (VIES) check fails.', 'invoicing'), $vat_name);
1893 1893
                     }
1894 1894
                 }
1895 1895
                 
1896
-                if ( !$vat_data['valid'] ) {
1897
-                    $error = wp_sprintf( __( 'The %s %s number %s you have entered has not been validated', 'invoicing' ), '<a href="#wpi-vat-details">', $vat_name, '</a>' ) . ( $message ? ' ( ' . $message . ' )' : '' );
1898
-                    wpinv_set_error( 'vat_validation', $error );
1896
+                if (!$vat_data['valid']) {
1897
+                    $error = wp_sprintf(__('The %s %s number %s you have entered has not been validated', 'invoicing'), '<a href="#wpi-vat-details">', $vat_name, '</a>') . ($message ? ' ( ' . $message . ' )' : '');
1898
+                    wpinv_set_error('vat_validation', $error);
1899 1899
                 }
1900 1900
             }
1901 1901
         }
1902 1902
 
1903
-        $wpi_session->set( 'user_vat_data', $vat_data );
1903
+        $wpi_session->set('user_vat_data', $vat_data);
1904 1904
     }
1905 1905
     
1906
-    public static function checkout_vat_fields( $billing_details ) {
1906
+    public static function checkout_vat_fields($billing_details) {
1907 1907
         global $wpi_session, $wpinv_options, $wpi_country, $wpi_requires_vat;
1908 1908
         
1909 1909
         $ip_address         = wpinv_get_ip();
1910 1910
         $ip_country_code    = self::get_country_by_ip();
1911 1911
         
1912
-        $tax_label          = __( self::get_vat_name(), 'invoicing' );
1912
+        $tax_label          = __(self::get_vat_name(), 'invoicing');
1913 1913
         $invoice            = wpinv_get_invoice_cart();
1914
-        $is_digital         = self::invoice_has_digital_rule( $invoice );
1914
+        $is_digital         = self::invoice_has_digital_rule($invoice);
1915 1915
         $wpi_country        = $invoice->country;
1916 1916
         
1917
-        $requires_vat       = !self::hide_vat_fields() && !$invoice->is_free() && self::requires_vat( 0, false, $is_digital );
1917
+        $requires_vat       = !self::hide_vat_fields() && !$invoice->is_free() && self::requires_vat(0, false, $is_digital);
1918 1918
         $wpi_requires_vat   = $requires_vat;
1919 1919
         
1920 1920
         $company            = self::get_user_company();
1921 1921
         $vat_number         = self::get_user_vat_number();
1922 1922
         
1923
-        $validated          = $vat_number ? self::get_user_vat_number( '', 0, true ) : 1;
1924
-        $vat_info           = $wpi_session->get( 'user_vat_data' );
1923
+        $validated          = $vat_number ? self::get_user_vat_number('', 0, true) : 1;
1924
+        $vat_info           = $wpi_session->get('user_vat_data');
1925 1925
 
1926
-        if ( is_array( $vat_info ) ) {
1927
-            $company    = isset( $vat_info['company'] ) ? $vat_info['company'] : '';
1928
-            $vat_number = isset( $vat_info['number'] ) ? $vat_info['number'] : '';
1929
-            $validated  = isset( $vat_info['valid'] ) ? $vat_info['valid'] : false;
1926
+        if (is_array($vat_info)) {
1927
+            $company    = isset($vat_info['company']) ? $vat_info['company'] : '';
1928
+            $vat_number = isset($vat_info['number']) ? $vat_info['number'] : '';
1929
+            $validated  = isset($vat_info['valid']) ? $vat_info['valid'] : false;
1930 1930
         }
1931 1931
         
1932 1932
         $selected_country = $invoice->country ? $invoice->country : wpinv_default_billing_country();
1933 1933
 
1934
-        if ( $ip_country_code == 'UK' ) {
1934
+        if ($ip_country_code == 'UK') {
1935 1935
             $ip_country_code = 'GB';
1936 1936
         }
1937 1937
         
1938
-        if ( $selected_country == 'UK' ) {
1938
+        if ($selected_country == 'UK') {
1939 1939
             $selected_country = 'GB';
1940 1940
         }
1941 1941
         
1942
-        if ( $requires_vat && ( self::same_country_rule() == 'no' && wpinv_is_base_country( $selected_country ) || !self::allow_vat_rules() ) ) {
1942
+        if ($requires_vat && (self::same_country_rule() == 'no' && wpinv_is_base_country($selected_country) || !self::allow_vat_rules())) {
1943 1943
             $requires_vat = false;
1944 1944
         }
1945 1945
 
@@ -1947,52 +1947,52 @@  discard block
 block discarded – undo
1947 1947
         $display_validate_btn   = 'none';
1948 1948
         $display_reset_btn      = 'none';
1949 1949
         
1950
-        if ( !empty( $vat_number ) && $validated ) {
1951
-            $vat_vailidated_text    = wp_sprintf( __( '%s number validated', 'invoicing' ), $tax_label );
1950
+        if (!empty($vat_number) && $validated) {
1951
+            $vat_vailidated_text    = wp_sprintf(__('%s number validated', 'invoicing'), $tax_label);
1952 1952
             $vat_vailidated_class   = 'wpinv-vat-stat-1';
1953 1953
             $display_reset_btn      = 'block';
1954 1954
         } else {
1955
-            $vat_vailidated_text    = empty( $vat_number ) ? '' : wp_sprintf( __( '%s number not validated', 'invoicing' ), $tax_label );
1956
-            $vat_vailidated_class   = empty( $vat_number ) ? '' : 'wpinv-vat-stat-0';
1955
+            $vat_vailidated_text    = empty($vat_number) ? '' : wp_sprintf(__('%s number not validated', 'invoicing'), $tax_label);
1956
+            $vat_vailidated_class   = empty($vat_number) ? '' : 'wpinv-vat-stat-0';
1957 1957
             $display_validate_btn   = 'block';
1958 1958
         }
1959 1959
         
1960
-        $show_ip_country        = $is_digital && ( empty( $vat_number ) || !$requires_vat ) && $ip_country_code != $selected_country ? 'block' : 'none';
1960
+        $show_ip_country = $is_digital && (empty($vat_number) || !$requires_vat) && $ip_country_code != $selected_country ? 'block' : 'none';
1961 1961
         ?>
1962 1962
         <div id="wpi-vat-details" class="wpi-vat-details clearfix" style="display:<?php echo $display_vat_details; ?>">
1963 1963
             <div id="wpi_vat_info" class="clearfix panel panel-default">
1964
-                <div class="panel-heading"><h3 class="panel-title"><?php echo wp_sprintf( __( '%s Details', 'invoicing' ), $tax_label );?></h3></div>
1964
+                <div class="panel-heading"><h3 class="panel-title"><?php echo wp_sprintf(__('%s Details', 'invoicing'), $tax_label); ?></h3></div>
1965 1965
                 <div id="wpinv-fields-box" class="panel-body">
1966 1966
                     <p id="wpi_show_vat_note">
1967
-                        <?php echo wp_sprintf( __( 'Validate your registered %s number to exclude tax.', 'invoicing' ), $tax_label ); ?>
1967
+                        <?php echo wp_sprintf(__('Validate your registered %s number to exclude tax.', 'invoicing'), $tax_label); ?>
1968 1968
                     </p>
1969 1969
                     <div id="wpi_vat_fields" class="wpi_vat_info">
1970 1970
                         <p class="wpi-cart-field wpi-col2 wpi-colf">
1971
-                            <label for="wpinv_company" class="wpi-label"><?php _e( 'Company Name', 'invoicing' );?></label>
1971
+                            <label for="wpinv_company" class="wpi-label"><?php _e('Company Name', 'invoicing'); ?></label>
1972 1972
                             <?php
1973
-                            echo wpinv_html_text( array(
1973
+                            echo wpinv_html_text(array(
1974 1974
                                     'id'            => 'wpinv_company',
1975 1975
                                     'name'          => 'wpinv_company',
1976 1976
                                     'value'         => $company,
1977 1977
                                     'class'         => 'wpi-input form-control',
1978
-                                    'placeholder'   => __( 'Company name', 'invoicing' ),
1979
-                                ) );
1978
+                                    'placeholder'   => __('Company name', 'invoicing'),
1979
+                                ));
1980 1980
                             ?>
1981 1981
                         </p>
1982 1982
                         <p class="wpi-cart-field wpi-col2 wpi-coll wpi-cart-field-vat">
1983
-                            <label for="wpinv_vat_number" class="wpi-label"><?php echo wp_sprintf( __( '%s Number', 'invoicing' ), $tax_label );?></label>
1983
+                            <label for="wpinv_vat_number" class="wpi-label"><?php echo wp_sprintf(__('%s Number', 'invoicing'), $tax_label); ?></label>
1984 1984
                             <span id="wpinv_vat_number-wrap">
1985 1985
                                 <label for="wpinv_vat_number" class="wpinv-label"></label>
1986
-                                <input type="text" class="wpi-input form-control" placeholder="<?php echo esc_attr( wp_sprintf( __( '%s number', 'invoicing' ), $tax_label ) );?>" value="<?php esc_attr_e( $vat_number );?>" id="wpinv_vat_number" name="wpinv_vat_number">
1987
-                                <span class="wpinv-vat-stat <?php echo $vat_vailidated_class;?>"><i class="fa"></i>&nbsp;<font><?php echo $vat_vailidated_text;?></font></span>
1986
+                                <input type="text" class="wpi-input form-control" placeholder="<?php echo esc_attr(wp_sprintf(__('%s number', 'invoicing'), $tax_label)); ?>" value="<?php esc_attr_e($vat_number); ?>" id="wpinv_vat_number" name="wpinv_vat_number">
1987
+                                <span class="wpinv-vat-stat <?php echo $vat_vailidated_class; ?>"><i class="fa"></i>&nbsp;<font><?php echo $vat_vailidated_text; ?></font></span>
1988 1988
                             </span>
1989 1989
                         </p>
1990 1990
                         <p class="wpi-cart-field wpi-col wpi-colf wpi-cart-field-actions">
1991
-                            <button class="btn btn-success btn-sm wpinv-vat-validate" type="button" id="wpinv_vat_validate" style="display:<?php echo $display_validate_btn; ?>"><?php echo wp_sprintf( __("Validate %s Number", 'invoicing'), $tax_label ); ?></button>
1992
-                            <button class="btn btn-danger btn-sm wpinv-vat-reset" type="button" id="wpinv_vat_reset" style="display:<?php echo $display_reset_btn; ?>"><?php echo wp_sprintf( __("Reset %s", 'invoicing'), $tax_label ); ?></button>
1991
+                            <button class="btn btn-success btn-sm wpinv-vat-validate" type="button" id="wpinv_vat_validate" style="display:<?php echo $display_validate_btn; ?>"><?php echo wp_sprintf(__("Validate %s Number", 'invoicing'), $tax_label); ?></button>
1992
+                            <button class="btn btn-danger btn-sm wpinv-vat-reset" type="button" id="wpinv_vat_reset" style="display:<?php echo $display_reset_btn; ?>"><?php echo wp_sprintf(__("Reset %s", 'invoicing'), $tax_label); ?></button>
1993 1993
                             <span class="wpi-vat-box wpi-vat-box-info"><span id="text"></span></span>
1994 1994
                             <span class="wpi-vat-box wpi-vat-box-error"><span id="text"></span></span>
1995
-                            <input type="hidden" name="_wpi_nonce" value="<?php echo wp_create_nonce( 'vat_validation' ) ?>" />
1995
+                            <input type="hidden" name="_wpi_nonce" value="<?php echo wp_create_nonce('vat_validation') ?>" />
1996 1996
                         </p>
1997 1997
                     </div>
1998 1998
                 </div>
@@ -2006,32 +2006,32 @@  discard block
 block discarded – undo
2006 2006
                 </span>
2007 2007
             </div>
2008 2008
         </div>
2009
-        <?php if ( empty( $wpinv_options['hide_ip_address'] ) ) { 
2010
-            $ip_link = '<a title="' . esc_attr( __( 'View more details on map', 'invoicing' ) ) . '" target="_blank" href="' . esc_url( admin_url( 'admin-ajax.php?action=wpinv_ip_geolocation&ip=' . $ip_address ) ) . '" class="wpi-ip-address-link">' . $ip_address . '&nbsp;&nbsp;<i class="fa fa-external-link-square" aria-hidden="true"></i></a>';
2009
+        <?php if (empty($wpinv_options['hide_ip_address'])) { 
2010
+            $ip_link = '<a title="' . esc_attr(__('View more details on map', 'invoicing')) . '" target="_blank" href="' . esc_url(admin_url('admin-ajax.php?action=wpinv_ip_geolocation&ip=' . $ip_address)) . '" class="wpi-ip-address-link">' . $ip_address . '&nbsp;&nbsp;<i class="fa fa-external-link-square" aria-hidden="true"></i></a>';
2011 2011
         ?>
2012 2012
         <div class="wpi-ip-info clearfix panel panel-info">
2013 2013
             <div id="wpinv-fields-box" class="panel-body">
2014
-                <span><?php echo wp_sprintf( __( "Your IP address is: %s", 'invoicing' ), $ip_link ); ?></span>
2014
+                <span><?php echo wp_sprintf(__("Your IP address is: %s", 'invoicing'), $ip_link); ?></span>
2015 2015
             </div>
2016 2016
         </div>
2017 2017
         <?php }
2018 2018
     }
2019 2019
     
2020
-    public static function show_vat_notice( $invoice ) {
2021
-        if ( empty( $invoice ) ) {
2020
+    public static function show_vat_notice($invoice) {
2021
+        if (empty($invoice)) {
2022 2022
             return NULL;
2023 2023
         }
2024 2024
         
2025
-        $label      = wpinv_get_option( 'vat_invoice_notice_label' );
2026
-        $notice     = wpinv_get_option( 'vat_invoice_notice' );
2027
-        if ( $label || $notice ) {
2025
+        $label      = wpinv_get_option('vat_invoice_notice_label');
2026
+        $notice     = wpinv_get_option('vat_invoice_notice');
2027
+        if ($label || $notice) {
2028 2028
         ?>
2029 2029
         <div class="row wpinv-vat-notice">
2030 2030
             <div class="col-sm-12">
2031
-                <?php if ( $label ) { ?>
2032
-                <strong><?php _e( $label, 'invoicing' ); ?></strong>
2033
-                <?php } if ( $notice ) { ?>
2034
-                <?php echo wpautop( wptexturize( __( $notice, 'invoicing' ) ) ) ?>
2031
+                <?php if ($label) { ?>
2032
+                <strong><?php _e($label, 'invoicing'); ?></strong>
2033
+                <?php } if ($notice) { ?>
2034
+                <?php echo wpautop(wptexturize(__($notice, 'invoicing'))) ?>
2035 2035
                 <?php } ?>
2036 2036
             </div>
2037 2037
         </div>
Please login to merge, or discard this patch.
Braces   +10 added lines, -6 removed lines patch added patch discarded remove patch
@@ -1,6 +1,8 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 // Exit if accessed directly.
3
-if (!defined( 'ABSPATH' ) ) exit;
3
+if (!defined( 'ABSPATH' ) ) {
4
+    exit;
5
+}
4 6
 
5 7
 class WPInv_EUVat {
6 8
     private static $is_ajax = false;
@@ -672,7 +674,7 @@  discard block
 block discarded – undo
672 674
                 if ( !empty( $load_xml ) && !empty( $load_xml->geoplugin_countryCode ) ) {
673 675
                     $wpinv_ip_address_country = (string)$load_xml->geoplugin_countryCode;
674 676
                 }
675
-            }elseif(!empty( $ip )){
677
+            } elseif(!empty( $ip )){
676 678
                 $url = 'http://ip-api.com/json/' . $ip;
677 679
                 $response = wp_remote_get($url);
678 680
 
@@ -1468,16 +1470,18 @@  discard block
 block discarded – undo
1468 1470
 
1469 1471
         if ( !empty( $tax_rates ) ) {
1470 1472
             foreach ( $tax_rates as $key => $tax_rate ) {
1471
-                if ( $country != $tax_rate['country'] )
1472
-                    continue;
1473
+                if ( $country != $tax_rate['country'] ) {
1474
+                                    continue;
1475
+                }
1473 1476
 
1474 1477
                 if ( !empty( $tax_rate['global'] ) ) {
1475 1478
                     if ( 0 !== $tax_rate['rate'] || !empty( $tax_rate['rate'] ) ) {
1476 1479
                         $rate = number_format( $tax_rate['rate'], 4 );
1477 1480
                     }
1478 1481
                 } else {
1479
-                    if ( empty( $tax_rate['state'] ) || strtolower( $state ) != strtolower( $tax_rate['state'] ) )
1480
-                        continue;
1482
+                    if ( empty( $tax_rate['state'] ) || strtolower( $state ) != strtolower( $tax_rate['state'] ) ) {
1483
+                                            continue;
1484
+                    }
1481 1485
 
1482 1486
                     $state_rate = $tax_rate['rate'];
1483 1487
                     if ( 0 !== $state_rate || !empty( $state_rate ) ) {
Please login to merge, or discard this patch.
vendor/ayecode/wp-super-duper/wp-super-duper.php 3 patches
Indentation   +1661 added lines, -1661 removed lines patch added patch discarded remove patch
@@ -1,243 +1,243 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 if ( ! defined( 'ABSPATH' ) ) {
3
-	exit;
3
+    exit;
4 4
 }
5 5
 
6 6
 if ( ! class_exists( 'WP_Super_Duper' ) ) {
7 7
 
8 8
 
9
-	/**
10
-	 * A Class to be able to create a Widget, Shortcode or Block to be able to output content for WordPress.
11
-	 *
12
-	 * Should not be called direct but extended instead.
13
-	 *
14
-	 * Class WP_Super_Duper
15
-	 * @since 1.0.16 change log moved to file change-log.txt - CHANGED
16
-	 * @ver 1.0.16
17
-	 */
18
-	class WP_Super_Duper extends WP_Widget {
19
-
20
-		public $version = "1.0.16";
21
-		public $font_awesome_icon_version = "5.11.2";
22
-		public $block_code;
23
-		public $options;
24
-		public $base_id;
25
-		public $arguments = array();
26
-		public $instance = array();
27
-		private $class_name;
28
-
29
-		/**
30
-		 * The relative url to the current folder.
31
-		 *
32
-		 * @var string
33
-		 */
34
-		public $url = '';
35
-
36
-		/**
37
-		 * Take the array options and use them to build.
38
-		 */
39
-		public function __construct( $options ) {
40
-			global $sd_widgets;
41
-
42
-			$sd_widgets[ $options['base_id'] ] = array(
43
-				'name'       => $options['name'],
44
-				'class_name' => $options['class_name']
45
-			);
46
-			$this->base_id                     = $options['base_id'];
47
-			// lets filter the options before we do anything
48
-			$options       = apply_filters( "wp_super_duper_options", $options );
49
-			$options       = apply_filters( "wp_super_duper_options_{$this->base_id}", $options );
50
-			$options       = $this->add_name_from_key( $options );
51
-			$this->options = $options;
52
-
53
-			$this->base_id   = $options['base_id'];
54
-			$this->arguments = isset( $options['arguments'] ) ? $options['arguments'] : array();
55
-
56
-			// init parent
57
-			parent::__construct( $options['base_id'], $options['name'], $options['widget_ops'] );
58
-
59
-			if ( isset( $options['class_name'] ) ) {
60
-				// register widget
61
-				$this->class_name = $options['class_name'];
62
-
63
-				// register shortcode
64
-				$this->register_shortcode();
65
-
66
-				// Fusion Builder (avada) support
67
-				if( function_exists('fusion_builder_map') ){ $this->register_fusion_element(); }
68
-
69
-				// register block
70
-				add_action( 'admin_enqueue_scripts', array( $this, 'register_block' ) );
71
-			}
72
-
73
-			// add the CSS and JS we need ONCE
74
-			global $sd_widget_scripts;
75
-
76
-			if ( ! $sd_widget_scripts ) {
77
-				wp_add_inline_script( 'admin-widgets', $this->widget_js() );
78
-				wp_add_inline_script( 'customize-controls', $this->widget_js() );
79
-				wp_add_inline_style( 'widgets', $this->widget_css() );
80
-
81
-				$sd_widget_scripts = true;
82
-
83
-				// add shortcode insert button once
84
-				add_action( 'media_buttons', array( $this, 'shortcode_insert_button' ) );
85
-				// generatepress theme sections compatibility
86
-				if ( function_exists( 'generate_sections_sections_metabox' ) ) {
87
-					add_action( 'generate_sections_metabox', array( $this, 'shortcode_insert_button_script' ) );
88
-				}
89
-				if ( $this->is_preview() ) {
90
-					add_action( 'wp_footer', array( $this, 'shortcode_insert_button_script' ) );
91
-					// this makes the insert button work for elementor
92
-					add_action( 'elementor/editor/after_enqueue_scripts', array(
93
-						$this,
94
-						'shortcode_insert_button_script'
95
-					) ); // for elementor
96
-				}
97
-				// this makes the insert button work for cornerstone
98
-				add_action('wp_print_footer_scripts',array( __CLASS__, 'maybe_cornerstone_builder' ));
99
-
100
-				add_action( 'wp_ajax_super_duper_get_widget_settings', array( __CLASS__, 'get_widget_settings' ) );
101
-				add_action( 'wp_ajax_super_duper_get_picker', array( __CLASS__, 'get_picker' ) );
102
-
103
-				// add generator text to admin head
104
-				add_action( 'admin_head', array( $this, 'generator' ) );
105
-			}
106
-
107
-			do_action( 'wp_super_duper_widget_init', $options, $this );
108
-		}
109
-
110
-		public function register_fusion_element(){
111
-
112
-			$options = $this->options;
113
-
114
-			if($this->base_id){
115
-
116
-				$params = $this->get_fusion_params();
117
-
118
-				$args = array(
119
-					'name'            => $options['name'],
120
-					'shortcode'       => $this->base_id,
121
-					'icon'            => $options['block-icon'] ? $options['block-icon'] : 'far fa-square',
122
-					'allow_generator' => true,
123
-				);
124
-
125
-				if(!empty($params)){
126
-					$args['params'] = $params;
127
-				}
128
-
129
-				fusion_builder_map($args);
130
-			}
131
-
132
-		}
133
-
134
-		public function get_fusion_params(){
135
-			$params = array();
136
-			$arguments = $this->get_arguments();
137
-
138
-			if(!empty($arguments)){
139
-				foreach($arguments as $key => $val){
140
-					$param = array();
141
-					// type
142
-					$param['type'] = str_replace(
143
-						array(
144
-							"text",
145
-							"number",
146
-							"email",
147
-							"color",
148
-							"checkbox"
149
-						),
150
-						array(
151
-							"textfield",
152
-							"textfield",
153
-							"textfield",
154
-							"colorpicker",
155
-							"select",
156
-
157
-						),
158
-						$val['type']);
159
-
160
-					// heading
161
-					$param['heading'] = $val['title'];
162
-
163
-					// description
164
-					$param['description'] = isset($val['desc']) ? $val['desc'] : '';
165
-
166
-					// param_name
167
-					$param['param_name'] = $key;
168
-
169
-					// Default 
170
-					$param['default'] = isset($val['default']) ? $val['default'] : '';
171
-
172
-					// Group
173
-					if(isset($val['group'])){
174
-						$param['group'] = $val['group'];
175
-					}
176
-
177
-					// value
178
-					if($val['type'] == 'checkbox'){
179
-						if(isset($val['default']) && $val['default'] == '0'){
180
-							unset($param['default']);
181
-						}
182
-						$param['value'] = array(''=>__("No"),'1'=>__("Yes"));
183
-					}elseif($param['type'] == 'select'){
184
-						$param['value'] = isset($val['options']) ? $val['options'] : array();
185
-					}else{
186
-						$param['value'] = isset($val['default']) ? $val['default'] : '';
187
-					}
188
-
189
-					// setup the param
190
-					$params[] = $param;
191
-
192
-				}
193
-			}
194
-
195
-
196
-			return $params;
197
-		}
198
-
199
-		/**
200
-		 * Maybe insert the shortcode inserter button in the footer if we are in the cornerstone builder
201
-		 */
202
-		public static function maybe_cornerstone_builder(){
203
-			if(did_action('cornerstone_before_boot_app')){
204
-				self::shortcode_insert_button_script();
205
-			}
206
-		}
207
-
208
-		/**
209
-		 * A function to ge the shortcode builder picker html.
210
-		 *
211
-		 * @param string $editor_id
212
-		 *
213
-		 * @return string
214
-		 */
215
-		public static function get_picker( $editor_id = '' ) {
216
-
217
-			ob_start();
218
-			if ( isset( $_POST['editor_id'] ) ) {
219
-				$editor_id = esc_attr( $_POST['editor_id'] );
220
-			} elseif ( isset( $_REQUEST['et_fb'] ) ) {
221
-				$editor_id = 'main_content_content_vb_tiny_mce';
222
-			}
223
-
224
-			global $sd_widgets;
225
-			?>
9
+    /**
10
+     * A Class to be able to create a Widget, Shortcode or Block to be able to output content for WordPress.
11
+     *
12
+     * Should not be called direct but extended instead.
13
+     *
14
+     * Class WP_Super_Duper
15
+     * @since 1.0.16 change log moved to file change-log.txt - CHANGED
16
+     * @ver 1.0.16
17
+     */
18
+    class WP_Super_Duper extends WP_Widget {
19
+
20
+        public $version = "1.0.16";
21
+        public $font_awesome_icon_version = "5.11.2";
22
+        public $block_code;
23
+        public $options;
24
+        public $base_id;
25
+        public $arguments = array();
26
+        public $instance = array();
27
+        private $class_name;
28
+
29
+        /**
30
+         * The relative url to the current folder.
31
+         *
32
+         * @var string
33
+         */
34
+        public $url = '';
35
+
36
+        /**
37
+         * Take the array options and use them to build.
38
+         */
39
+        public function __construct( $options ) {
40
+            global $sd_widgets;
41
+
42
+            $sd_widgets[ $options['base_id'] ] = array(
43
+                'name'       => $options['name'],
44
+                'class_name' => $options['class_name']
45
+            );
46
+            $this->base_id                     = $options['base_id'];
47
+            // lets filter the options before we do anything
48
+            $options       = apply_filters( "wp_super_duper_options", $options );
49
+            $options       = apply_filters( "wp_super_duper_options_{$this->base_id}", $options );
50
+            $options       = $this->add_name_from_key( $options );
51
+            $this->options = $options;
52
+
53
+            $this->base_id   = $options['base_id'];
54
+            $this->arguments = isset( $options['arguments'] ) ? $options['arguments'] : array();
55
+
56
+            // init parent
57
+            parent::__construct( $options['base_id'], $options['name'], $options['widget_ops'] );
58
+
59
+            if ( isset( $options['class_name'] ) ) {
60
+                // register widget
61
+                $this->class_name = $options['class_name'];
62
+
63
+                // register shortcode
64
+                $this->register_shortcode();
65
+
66
+                // Fusion Builder (avada) support
67
+                if( function_exists('fusion_builder_map') ){ $this->register_fusion_element(); }
68
+
69
+                // register block
70
+                add_action( 'admin_enqueue_scripts', array( $this, 'register_block' ) );
71
+            }
72
+
73
+            // add the CSS and JS we need ONCE
74
+            global $sd_widget_scripts;
75
+
76
+            if ( ! $sd_widget_scripts ) {
77
+                wp_add_inline_script( 'admin-widgets', $this->widget_js() );
78
+                wp_add_inline_script( 'customize-controls', $this->widget_js() );
79
+                wp_add_inline_style( 'widgets', $this->widget_css() );
80
+
81
+                $sd_widget_scripts = true;
82
+
83
+                // add shortcode insert button once
84
+                add_action( 'media_buttons', array( $this, 'shortcode_insert_button' ) );
85
+                // generatepress theme sections compatibility
86
+                if ( function_exists( 'generate_sections_sections_metabox' ) ) {
87
+                    add_action( 'generate_sections_metabox', array( $this, 'shortcode_insert_button_script' ) );
88
+                }
89
+                if ( $this->is_preview() ) {
90
+                    add_action( 'wp_footer', array( $this, 'shortcode_insert_button_script' ) );
91
+                    // this makes the insert button work for elementor
92
+                    add_action( 'elementor/editor/after_enqueue_scripts', array(
93
+                        $this,
94
+                        'shortcode_insert_button_script'
95
+                    ) ); // for elementor
96
+                }
97
+                // this makes the insert button work for cornerstone
98
+                add_action('wp_print_footer_scripts',array( __CLASS__, 'maybe_cornerstone_builder' ));
99
+
100
+                add_action( 'wp_ajax_super_duper_get_widget_settings', array( __CLASS__, 'get_widget_settings' ) );
101
+                add_action( 'wp_ajax_super_duper_get_picker', array( __CLASS__, 'get_picker' ) );
102
+
103
+                // add generator text to admin head
104
+                add_action( 'admin_head', array( $this, 'generator' ) );
105
+            }
106
+
107
+            do_action( 'wp_super_duper_widget_init', $options, $this );
108
+        }
109
+
110
+        public function register_fusion_element(){
111
+
112
+            $options = $this->options;
113
+
114
+            if($this->base_id){
115
+
116
+                $params = $this->get_fusion_params();
117
+
118
+                $args = array(
119
+                    'name'            => $options['name'],
120
+                    'shortcode'       => $this->base_id,
121
+                    'icon'            => $options['block-icon'] ? $options['block-icon'] : 'far fa-square',
122
+                    'allow_generator' => true,
123
+                );
124
+
125
+                if(!empty($params)){
126
+                    $args['params'] = $params;
127
+                }
128
+
129
+                fusion_builder_map($args);
130
+            }
131
+
132
+        }
133
+
134
+        public function get_fusion_params(){
135
+            $params = array();
136
+            $arguments = $this->get_arguments();
137
+
138
+            if(!empty($arguments)){
139
+                foreach($arguments as $key => $val){
140
+                    $param = array();
141
+                    // type
142
+                    $param['type'] = str_replace(
143
+                        array(
144
+                            "text",
145
+                            "number",
146
+                            "email",
147
+                            "color",
148
+                            "checkbox"
149
+                        ),
150
+                        array(
151
+                            "textfield",
152
+                            "textfield",
153
+                            "textfield",
154
+                            "colorpicker",
155
+                            "select",
156
+
157
+                        ),
158
+                        $val['type']);
159
+
160
+                    // heading
161
+                    $param['heading'] = $val['title'];
162
+
163
+                    // description
164
+                    $param['description'] = isset($val['desc']) ? $val['desc'] : '';
165
+
166
+                    // param_name
167
+                    $param['param_name'] = $key;
168
+
169
+                    // Default 
170
+                    $param['default'] = isset($val['default']) ? $val['default'] : '';
171
+
172
+                    // Group
173
+                    if(isset($val['group'])){
174
+                        $param['group'] = $val['group'];
175
+                    }
176
+
177
+                    // value
178
+                    if($val['type'] == 'checkbox'){
179
+                        if(isset($val['default']) && $val['default'] == '0'){
180
+                            unset($param['default']);
181
+                        }
182
+                        $param['value'] = array(''=>__("No"),'1'=>__("Yes"));
183
+                    }elseif($param['type'] == 'select'){
184
+                        $param['value'] = isset($val['options']) ? $val['options'] : array();
185
+                    }else{
186
+                        $param['value'] = isset($val['default']) ? $val['default'] : '';
187
+                    }
188
+
189
+                    // setup the param
190
+                    $params[] = $param;
191
+
192
+                }
193
+            }
194
+
195
+
196
+            return $params;
197
+        }
198
+
199
+        /**
200
+         * Maybe insert the shortcode inserter button in the footer if we are in the cornerstone builder
201
+         */
202
+        public static function maybe_cornerstone_builder(){
203
+            if(did_action('cornerstone_before_boot_app')){
204
+                self::shortcode_insert_button_script();
205
+            }
206
+        }
207
+
208
+        /**
209
+         * A function to ge the shortcode builder picker html.
210
+         *
211
+         * @param string $editor_id
212
+         *
213
+         * @return string
214
+         */
215
+        public static function get_picker( $editor_id = '' ) {
216
+
217
+            ob_start();
218
+            if ( isset( $_POST['editor_id'] ) ) {
219
+                $editor_id = esc_attr( $_POST['editor_id'] );
220
+            } elseif ( isset( $_REQUEST['et_fb'] ) ) {
221
+                $editor_id = 'main_content_content_vb_tiny_mce';
222
+            }
223
+
224
+            global $sd_widgets;
225
+            ?>
226 226
 
227 227
 			<div class="sd-shortcode-left-wrap">
228 228
 				<?php
229
-				ksort( $sd_widgets );
230
-				//				print_r($sd_widgets);exit;
231
-				if ( ! empty( $sd_widgets ) ) {
232
-					echo '<select class="widefat" onchange="sd_get_shortcode_options(this);">';
233
-					echo "<option>" . __( 'Select shortcode' ) . "</option>";
234
-					foreach ( $sd_widgets as $shortcode => $class ) {
235
-						echo "<option value='" . esc_attr( $shortcode ) . "'>" . esc_attr( $shortcode ) . " (" . esc_attr( $class['name'] ) . ")</option>";
236
-					}
237
-					echo "</select>";
238
-
239
-				}
240
-				?>
229
+                ksort( $sd_widgets );
230
+                //				print_r($sd_widgets);exit;
231
+                if ( ! empty( $sd_widgets ) ) {
232
+                    echo '<select class="widefat" onchange="sd_get_shortcode_options(this);">';
233
+                    echo "<option>" . __( 'Select shortcode' ) . "</option>";
234
+                    foreach ( $sd_widgets as $shortcode => $class ) {
235
+                        echo "<option value='" . esc_attr( $shortcode ) . "'>" . esc_attr( $shortcode ) . " (" . esc_attr( $class['name'] ) . ")</option>";
236
+                    }
237
+                    echo "</select>";
238
+
239
+                }
240
+                ?>
241 241
 				<div class="sd-shortcode-settings"></div>
242 242
 
243 243
 			</div>
@@ -248,8 +248,8 @@  discard block
 block discarded – undo
248 248
 					<?php if ( $editor_id != '' ) { ?>
249 249
 						<button class="button sd-insert-shortcode-button"
250 250
 						        onclick="sd_insert_shortcode(<?php if ( ! empty( $editor_id ) ) {
251
-							        echo "'" . $editor_id . "'";
252
-						        } ?>)"><?php _e( 'Insert shortcode' ); ?></button>
251
+                                    echo "'" . $editor_id . "'";
252
+                                } ?>)"><?php _e( 'Insert shortcode' ); ?></button>
253 253
 					<?php } ?>
254 254
 					<button class="button"
255 255
 					        onclick="sd_copy_to_clipboard()"><?php _e( 'Copy shortcode' ); ?></button>
@@ -257,134 +257,134 @@  discard block
 block discarded – undo
257 257
 			</div>
258 258
 			<?php
259 259
 
260
-			$html = ob_get_clean();
261
-
262
-			if ( wp_doing_ajax() ) {
263
-				echo $html;
264
-				$should_die = true;
265
-
266
-				// some builder get the editor via ajax so we should not die on those ocasions
267
-				$dont_die = array(
268
-					'parent_tag',// WP Bakery
269
-					'avia_request' // enfold
270
-				);
271
-
272
-				foreach ( $dont_die as $request ) {
273
-					if ( isset( $_REQUEST[ $request ] ) ) {
274
-						$should_die = false;
275
-					}
276
-				}
277
-
278
-				if ( $should_die ) {
279
-					wp_die();
280
-				}
281
-
282
-			} else {
283
-				return $html;
284
-			}
285
-
286
-			return '';
287
-
288
-		}
289
-
290
-		/**
291
-		 * Output the version in the admin header.
292
-		 */
293
-		public function generator() {
294
-			echo '<meta name="generator" content="WP Super Duper v' . $this->version . '" />';
295
-		}
296
-
297
-		/**
298
-		 * Get widget settings.
299
-		 *
300
-		 * @since 1.0.0
301
-		 */
302
-		public static function get_widget_settings() {
303
-			global $sd_widgets;
304
-
305
-			$shortcode = isset( $_REQUEST['shortcode'] ) && $_REQUEST['shortcode'] ? sanitize_title_with_dashes( $_REQUEST['shortcode'] ) : '';
306
-			if ( ! $shortcode ) {
307
-				wp_die();
308
-			}
309
-			$widget_args = isset( $sd_widgets[ $shortcode ] ) ? $sd_widgets[ $shortcode ] : '';
310
-			if ( ! $widget_args ) {
311
-				wp_die();
312
-			}
313
-			$class_name = isset( $widget_args['class_name'] ) && $widget_args['class_name'] ? $widget_args['class_name'] : '';
314
-			if ( ! $class_name ) {
315
-				wp_die();
316
-			}
317
-
318
-			// invoke an instance method
319
-			$widget = new $class_name;
320
-
321
-			ob_start();
322
-			$widget->form( array() );
323
-			$form = ob_get_clean();
324
-			echo "<form id='$shortcode'>" . $form . "<div class=\"widget-control-save\"></div></form>";
325
-			echo "<style>" . $widget->widget_css() . "</style>";
326
-			echo "<script>" . $widget->widget_js() . "</script>";
327
-			?>
260
+            $html = ob_get_clean();
261
+
262
+            if ( wp_doing_ajax() ) {
263
+                echo $html;
264
+                $should_die = true;
265
+
266
+                // some builder get the editor via ajax so we should not die on those ocasions
267
+                $dont_die = array(
268
+                    'parent_tag',// WP Bakery
269
+                    'avia_request' // enfold
270
+                );
271
+
272
+                foreach ( $dont_die as $request ) {
273
+                    if ( isset( $_REQUEST[ $request ] ) ) {
274
+                        $should_die = false;
275
+                    }
276
+                }
277
+
278
+                if ( $should_die ) {
279
+                    wp_die();
280
+                }
281
+
282
+            } else {
283
+                return $html;
284
+            }
285
+
286
+            return '';
287
+
288
+        }
289
+
290
+        /**
291
+         * Output the version in the admin header.
292
+         */
293
+        public function generator() {
294
+            echo '<meta name="generator" content="WP Super Duper v' . $this->version . '" />';
295
+        }
296
+
297
+        /**
298
+         * Get widget settings.
299
+         *
300
+         * @since 1.0.0
301
+         */
302
+        public static function get_widget_settings() {
303
+            global $sd_widgets;
304
+
305
+            $shortcode = isset( $_REQUEST['shortcode'] ) && $_REQUEST['shortcode'] ? sanitize_title_with_dashes( $_REQUEST['shortcode'] ) : '';
306
+            if ( ! $shortcode ) {
307
+                wp_die();
308
+            }
309
+            $widget_args = isset( $sd_widgets[ $shortcode ] ) ? $sd_widgets[ $shortcode ] : '';
310
+            if ( ! $widget_args ) {
311
+                wp_die();
312
+            }
313
+            $class_name = isset( $widget_args['class_name'] ) && $widget_args['class_name'] ? $widget_args['class_name'] : '';
314
+            if ( ! $class_name ) {
315
+                wp_die();
316
+            }
317
+
318
+            // invoke an instance method
319
+            $widget = new $class_name;
320
+
321
+            ob_start();
322
+            $widget->form( array() );
323
+            $form = ob_get_clean();
324
+            echo "<form id='$shortcode'>" . $form . "<div class=\"widget-control-save\"></div></form>";
325
+            echo "<style>" . $widget->widget_css() . "</style>";
326
+            echo "<script>" . $widget->widget_js() . "</script>";
327
+            ?>
328 328
 			<?php
329
-			wp_die();
330
-		}
331
-
332
-		/**
333
-		 * Insert shortcode builder button to classic editor (not inside Gutenberg, not needed).
334
-		 *
335
-		 * @since 1.0.0
336
-		 *
337
-		 * @param string $editor_id Optional. Shortcode editor id. Default null.
338
-		 * @param string $insert_shortcode_function Optional. Insert shotcode function. Default null.
339
-		 */
340
-		public static function shortcode_insert_button( $editor_id = '', $insert_shortcode_function = '' ) {
341
-			global $sd_widgets, $shortcode_insert_button_once;
342
-			if ( $shortcode_insert_button_once ) {
343
-				return;
344
-			}
345
-			add_thickbox();
346
-
347
-
348
-			/**
349
-			 * Cornerstone makes us play dirty tricks :/
350
-			 * All media_buttons are removed via JS unless they are two specific id's so we wrap our content in this ID so it is not removed.
351
-			 */
352
-			if ( function_exists( 'cornerstone_plugin_init' ) && ! is_admin() ) {
353
-				echo '<span id="insert-media-button">';
354
-			}
355
-
356
-			echo self::shortcode_button( 'this', 'true' );
357
-
358
-			// see opening note
359
-			if ( function_exists( 'cornerstone_plugin_init' ) && ! is_admin() ) {
360
-				echo '</span>'; // end #insert-media-button
361
-			}
362
-
363
-			// Add separate script for generatepress theme sections
364
-			if ( function_exists( 'generate_sections_sections_metabox' ) && did_action( 'generate_sections_metabox' ) ) {
365
-			} else {
366
-				self::shortcode_insert_button_script( $editor_id, $insert_shortcode_function );
367
-			}
368
-
369
-			$shortcode_insert_button_once = true;
370
-		}
371
-
372
-		/**
373
-		 * Gets the shortcode insert button html.
374
-		 *
375
-		 * @param string $id
376
-		 * @param string $search_for_id
377
-		 *
378
-		 * @return mixed
379
-		 */
380
-		public static function shortcode_button( $id = '', $search_for_id = '' ) {
381
-			ob_start();
382
-			?>
329
+            wp_die();
330
+        }
331
+
332
+        /**
333
+         * Insert shortcode builder button to classic editor (not inside Gutenberg, not needed).
334
+         *
335
+         * @since 1.0.0
336
+         *
337
+         * @param string $editor_id Optional. Shortcode editor id. Default null.
338
+         * @param string $insert_shortcode_function Optional. Insert shotcode function. Default null.
339
+         */
340
+        public static function shortcode_insert_button( $editor_id = '', $insert_shortcode_function = '' ) {
341
+            global $sd_widgets, $shortcode_insert_button_once;
342
+            if ( $shortcode_insert_button_once ) {
343
+                return;
344
+            }
345
+            add_thickbox();
346
+
347
+
348
+            /**
349
+             * Cornerstone makes us play dirty tricks :/
350
+             * All media_buttons are removed via JS unless they are two specific id's so we wrap our content in this ID so it is not removed.
351
+             */
352
+            if ( function_exists( 'cornerstone_plugin_init' ) && ! is_admin() ) {
353
+                echo '<span id="insert-media-button">';
354
+            }
355
+
356
+            echo self::shortcode_button( 'this', 'true' );
357
+
358
+            // see opening note
359
+            if ( function_exists( 'cornerstone_plugin_init' ) && ! is_admin() ) {
360
+                echo '</span>'; // end #insert-media-button
361
+            }
362
+
363
+            // Add separate script for generatepress theme sections
364
+            if ( function_exists( 'generate_sections_sections_metabox' ) && did_action( 'generate_sections_metabox' ) ) {
365
+            } else {
366
+                self::shortcode_insert_button_script( $editor_id, $insert_shortcode_function );
367
+            }
368
+
369
+            $shortcode_insert_button_once = true;
370
+        }
371
+
372
+        /**
373
+         * Gets the shortcode insert button html.
374
+         *
375
+         * @param string $id
376
+         * @param string $search_for_id
377
+         *
378
+         * @return mixed
379
+         */
380
+        public static function shortcode_button( $id = '', $search_for_id = '' ) {
381
+            ob_start();
382
+            ?>
383 383
 			<span class="sd-lable-shortcode-inserter">
384 384
 				<a onclick="sd_ajax_get_picker(<?php echo $id;
385
-				if ( $search_for_id ) {
386
-					echo "," . $search_for_id;
387
-				} ?>);" href="#TB_inline?width=100%&height=550&inlineId=super-duper-content-ajaxed"
385
+                if ( $search_for_id ) {
386
+                    echo "," . $search_for_id;
387
+                } ?>);" href="#TB_inline?width=100%&height=550&inlineId=super-duper-content-ajaxed"
388 388
 				   class="thickbox button super-duper-content-open" title="Add Shortcode">
389 389
 					<span style="vertical-align: middle;line-height: 18px;font-size: 20px;"
390 390
 					      class="dashicons dashicons-screenoptions"></span>
@@ -395,21 +395,21 @@  discard block
 block discarded – undo
395 395
 			</span>
396 396
 
397 397
 			<?php
398
-			$html = ob_get_clean();
399
-
400
-			// remove line breaks so we can use it in js
401
-			return preg_replace( "/\r|\n/", "", trim( $html ) );
402
-		}
403
-
404
-		/**
405
-		 * Makes SD work with the siteOrigin page builder.
406
-		 *
407
-		 * @since 1.0.6
408
-		 * @return mixed
409
-		 */
410
-		public static function siteorigin_js() {
411
-			ob_start();
412
-			?>
398
+            $html = ob_get_clean();
399
+
400
+            // remove line breaks so we can use it in js
401
+            return preg_replace( "/\r|\n/", "", trim( $html ) );
402
+        }
403
+
404
+        /**
405
+         * Makes SD work with the siteOrigin page builder.
406
+         *
407
+         * @since 1.0.6
408
+         * @return mixed
409
+         */
410
+        public static function siteorigin_js() {
411
+            ob_start();
412
+            ?>
413 413
 			<script>
414 414
 				/**
415 415
 				 * Check a form to see what items shoudl be shown or hidden.
@@ -487,28 +487,28 @@  discard block
 block discarded – undo
487 487
 				});
488 488
 			</script>
489 489
 			<?php
490
-			$output = ob_get_clean();
490
+            $output = ob_get_clean();
491 491
 
492
-			/*
492
+            /*
493 493
 			 * We only add the <script> tags for code highlighting, so we strip them from the output.
494 494
 			 */
495 495
 
496
-			return str_replace( array(
497
-				'<script>',
498
-				'</script>'
499
-			), '', $output );
500
-		}
501
-
502
-		/**
503
-		 * Output the JS and CSS for the shortcode insert button.
504
-		 *
505
-		 * @since 1.0.6
506
-		 *
507
-		 * @param string $editor_id
508
-		 * @param string $insert_shortcode_function
509
-		 */
510
-		public static function shortcode_insert_button_script( $editor_id = '', $insert_shortcode_function = '' ) {
511
-			?>
496
+            return str_replace( array(
497
+                '<script>',
498
+                '</script>'
499
+            ), '', $output );
500
+        }
501
+
502
+        /**
503
+         * Output the JS and CSS for the shortcode insert button.
504
+         *
505
+         * @since 1.0.6
506
+         *
507
+         * @param string $editor_id
508
+         * @param string $insert_shortcode_function
509
+         */
510
+        public static function shortcode_insert_button_script( $editor_id = '', $insert_shortcode_function = '' ) {
511
+            ?>
512 512
 			<style>
513 513
 				.sd-shortcode-left-wrap {
514 514
 					float: left;
@@ -632,35 +632,35 @@  discard block
 block discarded – undo
632 632
 				<?php } ?>
633 633
 			</style>
634 634
 			<?php
635
-			if ( class_exists( 'SiteOrigin_Panels' ) ) {
636
-				echo "<script>" . self::siteorigin_js() . "</script>";
637
-			}
638
-			?>
635
+            if ( class_exists( 'SiteOrigin_Panels' ) ) {
636
+                echo "<script>" . self::siteorigin_js() . "</script>";
637
+            }
638
+            ?>
639 639
 			<script>
640 640
 				<?php
641
-				if(! empty( $insert_shortcode_function )){
642
-					echo $insert_shortcode_function;
643
-				}else{
644
-
645
-				/**
646
-				 * Function for super duper insert shortcode.
647
-				 *
648
-				 * @since 1.0.0
649
-				 */
650
-				?>
641
+                if(! empty( $insert_shortcode_function )){
642
+                    echo $insert_shortcode_function;
643
+                }else{
644
+
645
+                /**
646
+                 * Function for super duper insert shortcode.
647
+                 *
648
+                 * @since 1.0.0
649
+                 */
650
+                ?>
651 651
 				function sd_insert_shortcode($editor_id) {
652 652
 					$shortcode = jQuery('#TB_ajaxContent #sd-shortcode-output').val();
653 653
 					if ($shortcode) {
654 654
 						if (!$editor_id) {
655 655
 							<?php
656
-							if ( isset( $_REQUEST['et_fb'] ) ) {
657
-								echo '$editor_id = "#main_content_content_vb_tiny_mce";';
658
-							} elseif ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) {
659
-								echo '$editor_id = "#elementor-controls .wp-editor-container textarea";';
660
-							} else {
661
-								echo '$editor_id = "#wp-content-editor-container textarea";';
662
-							}
663
-							?>
656
+                            if ( isset( $_REQUEST['et_fb'] ) ) {
657
+                                echo '$editor_id = "#main_content_content_vb_tiny_mce";';
658
+                            } elseif ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) {
659
+                                echo '$editor_id = "#elementor-controls .wp-editor-container textarea";';
660
+                            } else {
661
+                                echo '$editor_id = "#wp-content-editor-container textarea";';
662
+                            }
663
+                            ?>
664 664
 						} else {
665 665
 							$editor_id = '#' + $editor_id;
666 666
 						}
@@ -986,16 +986,16 @@  discard block
 block discarded – undo
986 986
 
987 987
 			</script>
988 988
 			<?php
989
-		}
990
-
991
-		/**
992
-		 * Gets some CSS for the widgets screen.
993
-		 *
994
-		 * @return mixed
995
-		 */
996
-		public function widget_css() {
997
-			ob_start();
998
-			?>
989
+        }
990
+
991
+        /**
992
+         * Gets some CSS for the widgets screen.
993
+         *
994
+         * @return mixed
995
+         */
996
+        public function widget_css() {
997
+            ob_start();
998
+            ?>
999 999
 			<style>
1000 1000
 				.sd-advanced-setting {
1001 1001
 					display: none;
@@ -1030,26 +1030,26 @@  discard block
 block discarded – undo
1030 1030
 				}
1031 1031
 			</style>
1032 1032
 			<?php
1033
-			$output = ob_get_clean();
1033
+            $output = ob_get_clean();
1034 1034
 
1035
-			/*
1035
+            /*
1036 1036
 			 * We only add the <script> tags for code highlighting, so we strip them from the output.
1037 1037
 			 */
1038 1038
 
1039
-			return str_replace( array(
1040
-				'<style>',
1041
-				'</style>'
1042
-			), '', $output );
1043
-		}
1044
-
1045
-		/**
1046
-		 * Gets some JS for the widgets screen.
1047
-		 *
1048
-		 * @return mixed
1049
-		 */
1050
-		public function widget_js() {
1051
-			ob_start();
1052
-			?>
1039
+            return str_replace( array(
1040
+                '<style>',
1041
+                '</style>'
1042
+            ), '', $output );
1043
+        }
1044
+
1045
+        /**
1046
+         * Gets some JS for the widgets screen.
1047
+         *
1048
+         * @return mixed
1049
+         */
1050
+        public function widget_js() {
1051
+            ob_start();
1052
+            ?>
1053 1053
 			<script>
1054 1054
 
1055 1055
 				/**
@@ -1204,397 +1204,397 @@  discard block
 block discarded – undo
1204 1204
 				<?php do_action( 'wp_super_duper_widget_js', $this ); ?>
1205 1205
 			</script>
1206 1206
 			<?php
1207
-			$output = ob_get_clean();
1207
+            $output = ob_get_clean();
1208 1208
 
1209
-			/*
1209
+            /*
1210 1210
 			 * We only add the <script> tags for code highlighting, so we strip them from the output.
1211 1211
 			 */
1212 1212
 
1213
-			return str_replace( array(
1214
-				'<script>',
1215
-				'</script>'
1216
-			), '', $output );
1217
-		}
1218
-
1219
-
1220
-		/**
1221
-		 * Set the name from the argument key.
1222
-		 *
1223
-		 * @param $options
1224
-		 *
1225
-		 * @return mixed
1226
-		 */
1227
-		private function add_name_from_key( $options, $arguments = false ) {
1228
-			if ( ! empty( $options['arguments'] ) ) {
1229
-				foreach ( $options['arguments'] as $key => $val ) {
1230
-					$options['arguments'][ $key ]['name'] = $key;
1231
-				}
1232
-			} elseif ( $arguments && is_array( $options ) && ! empty( $options ) ) {
1233
-				foreach ( $options as $key => $val ) {
1234
-					$options[ $key ]['name'] = $key;
1235
-				}
1236
-			}
1237
-
1238
-			return $options;
1239
-		}
1240
-
1241
-		/**
1242
-		 * Register the parent shortcode.
1243
-		 *
1244
-		 * @since 1.0.0
1245
-		 */
1246
-		public function register_shortcode() {
1247
-			add_shortcode( $this->base_id, array( $this, 'shortcode_output' ) );
1248
-			add_action( 'wp_ajax_super_duper_output_shortcode', array( __CLASS__, 'render_shortcode' ) );
1249
-		}
1250
-
1251
-		/**
1252
-		 * Render the shortcode via ajax so we can return it to Gutenberg.
1253
-		 *
1254
-		 * @since 1.0.0
1255
-		 */
1256
-		public static function render_shortcode() {
1257
-
1258
-			check_ajax_referer( 'super_duper_output_shortcode', '_ajax_nonce', true );
1259
-			if ( ! current_user_can( 'manage_options' ) ) {
1260
-				wp_die();
1261
-			}
1262
-
1263
-			// we might need the $post value here so lets set it.
1264
-			if ( isset( $_POST['post_id'] ) && $_POST['post_id'] ) {
1265
-				$post_obj = get_post( absint( $_POST['post_id'] ) );
1266
-				if ( ! empty( $post_obj ) && empty( $post ) ) {
1267
-					global $post;
1268
-					$post = $post_obj;
1269
-				}
1270
-			}
1271
-
1272
-			if ( isset( $_POST['shortcode'] ) && $_POST['shortcode'] ) {
1273
-				$shortcode_name   = sanitize_title_with_dashes( $_POST['shortcode'] );
1274
-				$attributes_array = isset( $_POST['attributes'] ) && $_POST['attributes'] ? $_POST['attributes'] : array();
1275
-				$attributes       = '';
1276
-				if ( ! empty( $attributes_array ) ) {
1277
-					foreach ( $attributes_array as $key => $value ) {
1278
-						$attributes .= " " . sanitize_title_with_dashes( $key ) . "='" . wp_slash( $value ) . "' ";
1279
-					}
1280
-				}
1281
-
1282
-				$shortcode = "[" . $shortcode_name . " " . $attributes . "]";
1283
-
1284
-				echo do_shortcode( $shortcode );
1285
-
1286
-			}
1287
-			wp_die();
1288
-		}
1289
-
1290
-		/**
1291
-		 * Output the shortcode.
1292
-		 *
1293
-		 * @param array $args
1294
-		 * @param string $content
1295
-		 *
1296
-		 * @return string
1297
-		 */
1298
-		public function shortcode_output( $args = array(), $content = '' ) {
1299
-			$args = self::argument_values( $args );
1300
-
1301
-			// add extra argument so we know its a output to gutenberg
1302
-			//$args
1303
-			$args = $this->string_to_bool( $args );
1304
-
1305
-			// if we have a enclosed shortcode we add it to the special `html` argument
1306
-			if(!empty($content)){
1307
-				$args['html'] = $content;
1308
-			}
1309
-
1310
-			$class = isset( $this->options['widget_ops']['classname'] ) ? esc_attr( $this->options['widget_ops']['classname'] ) : '';
1311
-
1312
-			$class = apply_filters( 'wp_super_duper_div_classname', $class, $args, $this );
1313
-			$class = apply_filters( 'wp_super_duper_div_classname_' . $this->base_id, $class, $args, $this );
1314
-
1315
-			$attrs = apply_filters( 'wp_super_duper_div_attrs', '', $args, $this );
1316
-			$attrs = apply_filters( 'wp_super_duper_div_attrs_' . $this->base_id, '', $args, $this ); //@todo this does not seem right @kiran?
1317
-
1318
-			$shortcode_args = array();
1319
-			$output         = '';
1320
-			$no_wrap        = isset( $this->options['no_wrap'] ) && $this->options['no_wrap'] ? true : false;
1321
-			if( isset( $args['no_wrap'] ) && $args['no_wrap'] ){ $no_wrap = true; }
1322
-			$main_content   = $this->output( $args, $shortcode_args, $content );
1323
-			if ( $main_content && ! $no_wrap ) {
1324
-				// wrap the shortcode in a div with the same class as the widget
1325
-				$output .= '<div class="' . $class . '" ' . $attrs . '>';
1326
-				if ( ! empty( $args['title'] ) ) {
1327
-					// if its a shortcode and there is a title try to grab the title wrappers
1328
-					$shortcode_args = array( 'before_title' => '', 'after_title' => '' );
1329
-					if ( empty( $instance ) ) {
1330
-						global $wp_registered_sidebars;
1331
-						if ( ! empty( $wp_registered_sidebars ) ) {
1332
-							foreach ( $wp_registered_sidebars as $sidebar ) {
1333
-								if ( ! empty( $sidebar['before_title'] ) ) {
1334
-									$shortcode_args['before_title'] = $sidebar['before_title'];
1335
-									$shortcode_args['after_title']  = $sidebar['after_title'];
1336
-									break;
1337
-								}
1338
-							}
1339
-						}
1340
-					}
1341
-					$output .= $this->output_title( $shortcode_args, $args );
1342
-				}
1343
-				$output .= $main_content;
1344
-				$output .= '</div>';
1345
-			} elseif ( $main_content && $no_wrap ) {
1346
-				$output .= $main_content;
1347
-			}
1348
-
1349
-			// if preview show a placeholder if empty
1350
-			if ( $this->is_preview() && $output == '' ) {
1351
-				$output = $this->preview_placeholder_text( "[{" . $this->base_id . "}]" );
1352
-			}
1353
-
1354
-			return apply_filters( 'wp_super_duper_widget_output', $output, $args, $shortcode_args, $this );
1355
-		}
1356
-
1357
-		/**
1358
-		 * Placeholder text to show if output is empty and we are on a preview/builder page.
1359
-		 *
1360
-		 * @param string $name
1361
-		 *
1362
-		 * @return string
1363
-		 */
1364
-		public function preview_placeholder_text( $name = '' ) {
1365
-			return "<div style='background:#0185ba33;padding: 10px;border: 4px #ccc dashed;'>" . sprintf( __( 'Placeholder for: %s' ), $name ) . "</div>";
1366
-		}
1367
-
1368
-		/**
1369
-		 * Sometimes booleans values can be turned to strings, so we fix that.
1370
-		 *
1371
-		 * @param $options
1372
-		 *
1373
-		 * @return mixed
1374
-		 */
1375
-		public function string_to_bool( $options ) {
1376
-			// convert bool strings to booleans
1377
-			foreach ( $options as $key => $val ) {
1378
-				if ( $val == 'false' ) {
1379
-					$options[ $key ] = false;
1380
-				} elseif ( $val == 'true' ) {
1381
-					$options[ $key ] = true;
1382
-				}
1383
-			}
1384
-
1385
-			return $options;
1386
-		}
1387
-
1388
-		/**
1389
-		 * Get the argument values that are also filterable.
1390
-		 *
1391
-		 * @param $instance
1392
-		 *
1393
-		 * @since 1.0.12 Don't set checkbox default value if the value is empty.
1394
-		 *
1395
-		 * @return array
1396
-		 */
1397
-		public function argument_values( $instance ) {
1398
-			$argument_values = array();
1399
-
1400
-			// set widget instance
1401
-			$this->instance = $instance;
1402
-
1403
-			if ( empty( $this->arguments ) ) {
1404
-				$this->arguments = $this->get_arguments();
1405
-			}
1406
-
1407
-			if ( ! empty( $this->arguments ) ) {
1408
-				foreach ( $this->arguments as $key => $args ) {
1409
-					// set the input name from the key
1410
-					$args['name'] = $key;
1411
-					//
1412
-					$argument_values[ $key ] = isset( $instance[ $key ] ) ? $instance[ $key ] : '';
1413
-					if($args['type']=='checkbox' && $argument_values[ $key ] == ''){
1414
-						// don't set default for an empty checkbox
1415
-					}
1416
-					elseif ( $argument_values[ $key ] == '' && isset( $args['default'] ) ) {
1417
-						$argument_values[ $key ] = $args['default'];
1418
-					}
1419
-				}
1420
-			}
1421
-
1422
-			return $argument_values;
1423
-		}
1424
-
1425
-		/**
1426
-		 * Set arguments in super duper.
1427
-		 *
1428
-		 * @since 1.0.0
1429
-		 *
1430
-		 * @return array Set arguments.
1431
-		 */
1432
-		public function set_arguments() {
1433
-			return $this->arguments;
1434
-		}
1435
-
1436
-		/**
1437
-		 * Get arguments in super duper.
1438
-		 *
1439
-		 * @since 1.0.0
1440
-		 *
1441
-		 * @return array Get arguments.
1442
-		 */
1443
-		public function get_arguments() {
1444
-			if ( empty( $this->arguments ) ) {
1445
-				$this->arguments = $this->set_arguments();
1446
-			}
1447
-
1448
-			$this->arguments = apply_filters( 'wp_super_duper_arguments', $this->arguments, $this->options, $this->instance );
1449
-			$this->arguments = $this->add_name_from_key( $this->arguments, true );
1450
-
1451
-			return $this->arguments;
1452
-		}
1453
-
1454
-		/**
1455
-		 * This is the main output class for all 3 items, widget, shortcode and block, it is extended in the calling class.
1456
-		 *
1457
-		 * @param array $args
1458
-		 * @param array $widget_args
1459
-		 * @param string $content
1460
-		 */
1461
-		public function output( $args = array(), $widget_args = array(), $content = '' ) {
1462
-
1463
-		}
1464
-
1465
-		/**
1466
-		 * Add the dynamic block code inline when the wp-block in enqueued.
1467
-		 */
1468
-		public function register_block() {
1469
-			wp_add_inline_script( 'wp-blocks', $this->block() );
1470
-			if ( class_exists( 'SiteOrigin_Panels' ) ) {
1471
-
1472
-				wp_add_inline_script( 'wp-blocks', $this->siteorigin_js() );
1473
-
1474
-			}
1475
-		}
1476
-
1477
-		/**
1478
-		 * Check if we need to show advanced options.
1479
-		 *
1480
-		 * @return bool
1481
-		 */
1482
-		public function block_show_advanced() {
1483
-
1484
-			$show      = false;
1485
-			$arguments = $this->arguments;
1486
-
1487
-			if ( empty( $arguments ) ) {
1488
-				$arguments = $this->get_arguments();
1489
-			}
1490
-
1491
-			if ( ! empty( $arguments ) ) {
1492
-				foreach ( $arguments as $argument ) {
1493
-					if ( isset( $argument['advanced'] ) && $argument['advanced'] ) {
1494
-						$show = true;
1495
-						break; // no need to continue if we know we have it
1496
-					}
1497
-				}
1498
-			}
1499
-
1500
-			return $show;
1501
-		}
1502
-
1503
-		/**
1504
-		 * Get the url path to the current folder.
1505
-		 *
1506
-		 * @return string
1507
-		 */
1508
-		public function get_url() {
1509
-
1510
-			$url = $this->url;
1511
-
1512
-			if(!$url){
1513
-				// check if we are inside a plugin
1514
-				$file_dir = str_replace("/includes","", dirname( __FILE__ ));
1515
-
1516
-				$dir_parts = explode("/wp-content/",$file_dir);
1517
-				$url_parts = explode("/wp-content/",plugins_url());
1518
-
1519
-				if(!empty($url_parts[0]) && !empty($dir_parts[1])){
1520
-					$url = trailingslashit( $url_parts[0]."/wp-content/".$dir_parts[1] );
1521
-					$this->url = $url;
1522
-				}
1523
-			}
1524
-
1525
-
1526
-			return $url;
1527
-		}
1528
-
1529
-		/**
1530
-		 * Generate the block icon.
1531
-		 *
1532
-		 * Enables the use of Font Awesome icons.
1533
-		 *
1534
-		 * @note xlink:href is actually deprecated but href is not supported by all so we use both.
1535
-		 * @param $icon
1536
-		 * @since 1.1.0
1537
-		 * @return string
1538
-		 */
1539
-		public function get_block_icon($icon){
1540
-
1541
-			// check if we have a Font Awesome icon
1542
-			$fa_type = '';
1543
-			if(substr( $icon, 0, 7 ) === "fas fa-"){
1544
-				$fa_type = 'solid';
1545
-			}elseif(substr( $icon, 0, 7 ) === "far fa-"){
1546
-				$fa_type = 'regular';
1547
-			}elseif(substr( $icon, 0, 7 ) === "fab fa-"){
1548
-				$fa_type = 'brands';
1549
-			}else{
1550
-				$icon = "'".$icon."'";
1551
-			}
1552
-
1553
-			// set the icon if we found one
1554
-			if($fa_type){
1555
-				$fa_icon = str_replace(array("fas fa-","far fa-","fab fa-"),"",$icon);
1556
-				$icon  = "el('svg',{width: 20, height: 20, viewBox: '0 0 20 20'},el('use', {'xlink:href': '".$this->get_url()."icons/".$fa_type.".svg#".$fa_icon."','href': '".$this->get_url()."icons/".$fa_type.".svg#".$fa_icon."'}))";
1557
-			}
1558
-
1559
-			return $icon;
1560
-		}
1561
-
1562
-		public function group_arguments($arguments){
1213
+            return str_replace( array(
1214
+                '<script>',
1215
+                '</script>'
1216
+            ), '', $output );
1217
+        }
1218
+
1219
+
1220
+        /**
1221
+         * Set the name from the argument key.
1222
+         *
1223
+         * @param $options
1224
+         *
1225
+         * @return mixed
1226
+         */
1227
+        private function add_name_from_key( $options, $arguments = false ) {
1228
+            if ( ! empty( $options['arguments'] ) ) {
1229
+                foreach ( $options['arguments'] as $key => $val ) {
1230
+                    $options['arguments'][ $key ]['name'] = $key;
1231
+                }
1232
+            } elseif ( $arguments && is_array( $options ) && ! empty( $options ) ) {
1233
+                foreach ( $options as $key => $val ) {
1234
+                    $options[ $key ]['name'] = $key;
1235
+                }
1236
+            }
1237
+
1238
+            return $options;
1239
+        }
1240
+
1241
+        /**
1242
+         * Register the parent shortcode.
1243
+         *
1244
+         * @since 1.0.0
1245
+         */
1246
+        public function register_shortcode() {
1247
+            add_shortcode( $this->base_id, array( $this, 'shortcode_output' ) );
1248
+            add_action( 'wp_ajax_super_duper_output_shortcode', array( __CLASS__, 'render_shortcode' ) );
1249
+        }
1250
+
1251
+        /**
1252
+         * Render the shortcode via ajax so we can return it to Gutenberg.
1253
+         *
1254
+         * @since 1.0.0
1255
+         */
1256
+        public static function render_shortcode() {
1257
+
1258
+            check_ajax_referer( 'super_duper_output_shortcode', '_ajax_nonce', true );
1259
+            if ( ! current_user_can( 'manage_options' ) ) {
1260
+                wp_die();
1261
+            }
1262
+
1263
+            // we might need the $post value here so lets set it.
1264
+            if ( isset( $_POST['post_id'] ) && $_POST['post_id'] ) {
1265
+                $post_obj = get_post( absint( $_POST['post_id'] ) );
1266
+                if ( ! empty( $post_obj ) && empty( $post ) ) {
1267
+                    global $post;
1268
+                    $post = $post_obj;
1269
+                }
1270
+            }
1271
+
1272
+            if ( isset( $_POST['shortcode'] ) && $_POST['shortcode'] ) {
1273
+                $shortcode_name   = sanitize_title_with_dashes( $_POST['shortcode'] );
1274
+                $attributes_array = isset( $_POST['attributes'] ) && $_POST['attributes'] ? $_POST['attributes'] : array();
1275
+                $attributes       = '';
1276
+                if ( ! empty( $attributes_array ) ) {
1277
+                    foreach ( $attributes_array as $key => $value ) {
1278
+                        $attributes .= " " . sanitize_title_with_dashes( $key ) . "='" . wp_slash( $value ) . "' ";
1279
+                    }
1280
+                }
1281
+
1282
+                $shortcode = "[" . $shortcode_name . " " . $attributes . "]";
1283
+
1284
+                echo do_shortcode( $shortcode );
1285
+
1286
+            }
1287
+            wp_die();
1288
+        }
1289
+
1290
+        /**
1291
+         * Output the shortcode.
1292
+         *
1293
+         * @param array $args
1294
+         * @param string $content
1295
+         *
1296
+         * @return string
1297
+         */
1298
+        public function shortcode_output( $args = array(), $content = '' ) {
1299
+            $args = self::argument_values( $args );
1300
+
1301
+            // add extra argument so we know its a output to gutenberg
1302
+            //$args
1303
+            $args = $this->string_to_bool( $args );
1304
+
1305
+            // if we have a enclosed shortcode we add it to the special `html` argument
1306
+            if(!empty($content)){
1307
+                $args['html'] = $content;
1308
+            }
1309
+
1310
+            $class = isset( $this->options['widget_ops']['classname'] ) ? esc_attr( $this->options['widget_ops']['classname'] ) : '';
1311
+
1312
+            $class = apply_filters( 'wp_super_duper_div_classname', $class, $args, $this );
1313
+            $class = apply_filters( 'wp_super_duper_div_classname_' . $this->base_id, $class, $args, $this );
1314
+
1315
+            $attrs = apply_filters( 'wp_super_duper_div_attrs', '', $args, $this );
1316
+            $attrs = apply_filters( 'wp_super_duper_div_attrs_' . $this->base_id, '', $args, $this ); //@todo this does not seem right @kiran?
1317
+
1318
+            $shortcode_args = array();
1319
+            $output         = '';
1320
+            $no_wrap        = isset( $this->options['no_wrap'] ) && $this->options['no_wrap'] ? true : false;
1321
+            if( isset( $args['no_wrap'] ) && $args['no_wrap'] ){ $no_wrap = true; }
1322
+            $main_content   = $this->output( $args, $shortcode_args, $content );
1323
+            if ( $main_content && ! $no_wrap ) {
1324
+                // wrap the shortcode in a div with the same class as the widget
1325
+                $output .= '<div class="' . $class . '" ' . $attrs . '>';
1326
+                if ( ! empty( $args['title'] ) ) {
1327
+                    // if its a shortcode and there is a title try to grab the title wrappers
1328
+                    $shortcode_args = array( 'before_title' => '', 'after_title' => '' );
1329
+                    if ( empty( $instance ) ) {
1330
+                        global $wp_registered_sidebars;
1331
+                        if ( ! empty( $wp_registered_sidebars ) ) {
1332
+                            foreach ( $wp_registered_sidebars as $sidebar ) {
1333
+                                if ( ! empty( $sidebar['before_title'] ) ) {
1334
+                                    $shortcode_args['before_title'] = $sidebar['before_title'];
1335
+                                    $shortcode_args['after_title']  = $sidebar['after_title'];
1336
+                                    break;
1337
+                                }
1338
+                            }
1339
+                        }
1340
+                    }
1341
+                    $output .= $this->output_title( $shortcode_args, $args );
1342
+                }
1343
+                $output .= $main_content;
1344
+                $output .= '</div>';
1345
+            } elseif ( $main_content && $no_wrap ) {
1346
+                $output .= $main_content;
1347
+            }
1348
+
1349
+            // if preview show a placeholder if empty
1350
+            if ( $this->is_preview() && $output == '' ) {
1351
+                $output = $this->preview_placeholder_text( "[{" . $this->base_id . "}]" );
1352
+            }
1353
+
1354
+            return apply_filters( 'wp_super_duper_widget_output', $output, $args, $shortcode_args, $this );
1355
+        }
1356
+
1357
+        /**
1358
+         * Placeholder text to show if output is empty and we are on a preview/builder page.
1359
+         *
1360
+         * @param string $name
1361
+         *
1362
+         * @return string
1363
+         */
1364
+        public function preview_placeholder_text( $name = '' ) {
1365
+            return "<div style='background:#0185ba33;padding: 10px;border: 4px #ccc dashed;'>" . sprintf( __( 'Placeholder for: %s' ), $name ) . "</div>";
1366
+        }
1367
+
1368
+        /**
1369
+         * Sometimes booleans values can be turned to strings, so we fix that.
1370
+         *
1371
+         * @param $options
1372
+         *
1373
+         * @return mixed
1374
+         */
1375
+        public function string_to_bool( $options ) {
1376
+            // convert bool strings to booleans
1377
+            foreach ( $options as $key => $val ) {
1378
+                if ( $val == 'false' ) {
1379
+                    $options[ $key ] = false;
1380
+                } elseif ( $val == 'true' ) {
1381
+                    $options[ $key ] = true;
1382
+                }
1383
+            }
1384
+
1385
+            return $options;
1386
+        }
1387
+
1388
+        /**
1389
+         * Get the argument values that are also filterable.
1390
+         *
1391
+         * @param $instance
1392
+         *
1393
+         * @since 1.0.12 Don't set checkbox default value if the value is empty.
1394
+         *
1395
+         * @return array
1396
+         */
1397
+        public function argument_values( $instance ) {
1398
+            $argument_values = array();
1399
+
1400
+            // set widget instance
1401
+            $this->instance = $instance;
1402
+
1403
+            if ( empty( $this->arguments ) ) {
1404
+                $this->arguments = $this->get_arguments();
1405
+            }
1406
+
1407
+            if ( ! empty( $this->arguments ) ) {
1408
+                foreach ( $this->arguments as $key => $args ) {
1409
+                    // set the input name from the key
1410
+                    $args['name'] = $key;
1411
+                    //
1412
+                    $argument_values[ $key ] = isset( $instance[ $key ] ) ? $instance[ $key ] : '';
1413
+                    if($args['type']=='checkbox' && $argument_values[ $key ] == ''){
1414
+                        // don't set default for an empty checkbox
1415
+                    }
1416
+                    elseif ( $argument_values[ $key ] == '' && isset( $args['default'] ) ) {
1417
+                        $argument_values[ $key ] = $args['default'];
1418
+                    }
1419
+                }
1420
+            }
1421
+
1422
+            return $argument_values;
1423
+        }
1424
+
1425
+        /**
1426
+         * Set arguments in super duper.
1427
+         *
1428
+         * @since 1.0.0
1429
+         *
1430
+         * @return array Set arguments.
1431
+         */
1432
+        public function set_arguments() {
1433
+            return $this->arguments;
1434
+        }
1435
+
1436
+        /**
1437
+         * Get arguments in super duper.
1438
+         *
1439
+         * @since 1.0.0
1440
+         *
1441
+         * @return array Get arguments.
1442
+         */
1443
+        public function get_arguments() {
1444
+            if ( empty( $this->arguments ) ) {
1445
+                $this->arguments = $this->set_arguments();
1446
+            }
1447
+
1448
+            $this->arguments = apply_filters( 'wp_super_duper_arguments', $this->arguments, $this->options, $this->instance );
1449
+            $this->arguments = $this->add_name_from_key( $this->arguments, true );
1450
+
1451
+            return $this->arguments;
1452
+        }
1453
+
1454
+        /**
1455
+         * This is the main output class for all 3 items, widget, shortcode and block, it is extended in the calling class.
1456
+         *
1457
+         * @param array $args
1458
+         * @param array $widget_args
1459
+         * @param string $content
1460
+         */
1461
+        public function output( $args = array(), $widget_args = array(), $content = '' ) {
1462
+
1463
+        }
1464
+
1465
+        /**
1466
+         * Add the dynamic block code inline when the wp-block in enqueued.
1467
+         */
1468
+        public function register_block() {
1469
+            wp_add_inline_script( 'wp-blocks', $this->block() );
1470
+            if ( class_exists( 'SiteOrigin_Panels' ) ) {
1471
+
1472
+                wp_add_inline_script( 'wp-blocks', $this->siteorigin_js() );
1473
+
1474
+            }
1475
+        }
1476
+
1477
+        /**
1478
+         * Check if we need to show advanced options.
1479
+         *
1480
+         * @return bool
1481
+         */
1482
+        public function block_show_advanced() {
1483
+
1484
+            $show      = false;
1485
+            $arguments = $this->arguments;
1486
+
1487
+            if ( empty( $arguments ) ) {
1488
+                $arguments = $this->get_arguments();
1489
+            }
1490
+
1491
+            if ( ! empty( $arguments ) ) {
1492
+                foreach ( $arguments as $argument ) {
1493
+                    if ( isset( $argument['advanced'] ) && $argument['advanced'] ) {
1494
+                        $show = true;
1495
+                        break; // no need to continue if we know we have it
1496
+                    }
1497
+                }
1498
+            }
1499
+
1500
+            return $show;
1501
+        }
1502
+
1503
+        /**
1504
+         * Get the url path to the current folder.
1505
+         *
1506
+         * @return string
1507
+         */
1508
+        public function get_url() {
1509
+
1510
+            $url = $this->url;
1511
+
1512
+            if(!$url){
1513
+                // check if we are inside a plugin
1514
+                $file_dir = str_replace("/includes","", dirname( __FILE__ ));
1515
+
1516
+                $dir_parts = explode("/wp-content/",$file_dir);
1517
+                $url_parts = explode("/wp-content/",plugins_url());
1518
+
1519
+                if(!empty($url_parts[0]) && !empty($dir_parts[1])){
1520
+                    $url = trailingslashit( $url_parts[0]."/wp-content/".$dir_parts[1] );
1521
+                    $this->url = $url;
1522
+                }
1523
+            }
1524
+
1525
+
1526
+            return $url;
1527
+        }
1528
+
1529
+        /**
1530
+         * Generate the block icon.
1531
+         *
1532
+         * Enables the use of Font Awesome icons.
1533
+         *
1534
+         * @note xlink:href is actually deprecated but href is not supported by all so we use both.
1535
+         * @param $icon
1536
+         * @since 1.1.0
1537
+         * @return string
1538
+         */
1539
+        public function get_block_icon($icon){
1540
+
1541
+            // check if we have a Font Awesome icon
1542
+            $fa_type = '';
1543
+            if(substr( $icon, 0, 7 ) === "fas fa-"){
1544
+                $fa_type = 'solid';
1545
+            }elseif(substr( $icon, 0, 7 ) === "far fa-"){
1546
+                $fa_type = 'regular';
1547
+            }elseif(substr( $icon, 0, 7 ) === "fab fa-"){
1548
+                $fa_type = 'brands';
1549
+            }else{
1550
+                $icon = "'".$icon."'";
1551
+            }
1552
+
1553
+            // set the icon if we found one
1554
+            if($fa_type){
1555
+                $fa_icon = str_replace(array("fas fa-","far fa-","fab fa-"),"",$icon);
1556
+                $icon  = "el('svg',{width: 20, height: 20, viewBox: '0 0 20 20'},el('use', {'xlink:href': '".$this->get_url()."icons/".$fa_type.".svg#".$fa_icon."','href': '".$this->get_url()."icons/".$fa_type.".svg#".$fa_icon."'}))";
1557
+            }
1558
+
1559
+            return $icon;
1560
+        }
1561
+
1562
+        public function group_arguments($arguments){
1563 1563
 //			echo '###';print_r($arguments);
1564
-			if(!empty($arguments)){
1565
-				$temp_arguments = array();
1566
-				$general = __("General");
1567
-				$add_sections = false;
1568
-				foreach($arguments as $key => $args){
1569
-					if(isset($args['group'])){
1570
-						$temp_arguments[$args['group']][$key] = $args;
1571
-						$add_sections = true;
1572
-					}else{
1573
-						$temp_arguments[$general][$key] = $args;
1574
-					}
1575
-				}
1576
-
1577
-				// only add sections if more than one
1578
-				if($add_sections){
1579
-					$arguments = $temp_arguments;
1580
-				}
1581
-			}
1564
+            if(!empty($arguments)){
1565
+                $temp_arguments = array();
1566
+                $general = __("General");
1567
+                $add_sections = false;
1568
+                foreach($arguments as $key => $args){
1569
+                    if(isset($args['group'])){
1570
+                        $temp_arguments[$args['group']][$key] = $args;
1571
+                        $add_sections = true;
1572
+                    }else{
1573
+                        $temp_arguments[$general][$key] = $args;
1574
+                    }
1575
+                }
1576
+
1577
+                // only add sections if more than one
1578
+                if($add_sections){
1579
+                    $arguments = $temp_arguments;
1580
+                }
1581
+            }
1582 1582
 //			echo '###';print_r($arguments);
1583
-			return $arguments;
1584
-		}
1585
-
1586
-
1587
-		/**
1588
-		 * Output the JS for building the dynamic Guntenberg block.
1589
-		 *
1590
-		 * @since 1.0.4 Added block_wrap property which will set the block wrapping output element ie: div, span, p or empty for no wrap.
1591
-		 * @since 1.0.9 Save numbers as numbers and not strings.
1592
-		 * @since 1.1.0 Font Awesome classes can be used for icons.
1593
-		 * @return mixed
1594
-		 */
1595
-		public function block() {
1596
-			ob_start();
1597
-			?>
1583
+            return $arguments;
1584
+        }
1585
+
1586
+
1587
+        /**
1588
+         * Output the JS for building the dynamic Guntenberg block.
1589
+         *
1590
+         * @since 1.0.4 Added block_wrap property which will set the block wrapping output element ie: div, span, p or empty for no wrap.
1591
+         * @since 1.0.9 Save numbers as numbers and not strings.
1592
+         * @since 1.1.0 Font Awesome classes can be used for icons.
1593
+         * @return mixed
1594
+         */
1595
+        public function block() {
1596
+            ob_start();
1597
+            ?>
1598 1598
 			<script>
1599 1599
 				/**
1600 1600
 				 * BLOCK: Basic
@@ -1633,93 +1633,93 @@  discard block
 block discarded – undo
1633 1633
 						icon: <?php echo $this->get_block_icon($this->options['block-icon']);?>,//'<?php echo isset( $this->options['block-icon'] ) ? esc_attr( $this->options['block-icon'] ) : 'shield-alt';?>', // Block icon from Dashicons → https://developer.wordpress.org/resource/dashicons/.
1634 1634
 						supports: {
1635 1635
 							<?php
1636
-							if(isset($this->options['block-supports'])){
1637
-								echo $this->array_to_attributes( $this->options['block-supports'] );
1638
-							}
1639
-							?>
1636
+                            if(isset($this->options['block-supports'])){
1637
+                                echo $this->array_to_attributes( $this->options['block-supports'] );
1638
+                            }
1639
+                            ?>
1640 1640
 						},
1641 1641
 						category: '<?php echo isset( $this->options['block-category'] ) ? esc_attr( $this->options['block-category'] ) : 'common';?>', // Block category — Group blocks together based on common traits E.g. common, formatting, layout widgets, embed.
1642 1642
 						<?php if ( isset( $this->options['block-keywords'] ) ) {
1643
-						echo "keywords : " . $this->options['block-keywords'] . ",";
1644
-					}?>
1643
+                        echo "keywords : " . $this->options['block-keywords'] . ",";
1644
+                    }?>
1645 1645
 
1646 1646
 						<?php
1647 1647
 
1648
-						// maybe set no_wrap
1649
-						$no_wrap        = isset( $this->options['no_wrap'] ) && $this->options['no_wrap'] ? true : false;
1650
-						if( isset( $this->arguments['no_wrap'] ) && $this->arguments['no_wrap'] ){ $no_wrap = true; }
1651
-						if( $no_wrap ){ $this->options['block-wrap'] = ''; }
1648
+                        // maybe set no_wrap
1649
+                        $no_wrap        = isset( $this->options['no_wrap'] ) && $this->options['no_wrap'] ? true : false;
1650
+                        if( isset( $this->arguments['no_wrap'] ) && $this->arguments['no_wrap'] ){ $no_wrap = true; }
1651
+                        if( $no_wrap ){ $this->options['block-wrap'] = ''; }
1652 1652
 
1653
-						$show_advanced = $this->block_show_advanced();
1653
+                        $show_advanced = $this->block_show_advanced();
1654 1654
 
1655
-						$show_alignment = false;
1656
-						// align feature
1657
-						/*echo "supports: {";
1655
+                        $show_alignment = false;
1656
+                        // align feature
1657
+                        /*echo "supports: {";
1658 1658
 						echo "	align: true,";
1659 1659
 						echo "  html: false";
1660 1660
 						echo "},";*/
1661 1661
 
1662
-						if ( ! empty( $this->arguments ) ) {
1663
-							echo "attributes : {";
1664
-
1665
-							if ( $show_advanced ) {
1666
-								echo "show_advanced: {";
1667
-								echo "	type: 'boolean',";
1668
-								echo "  default: false,";
1669
-								echo "},";
1670
-							}
1671
-
1672
-							// block wrap element
1673
-							if ( !empty( $this->options['block-wrap'] ) ) { //@todo we should validate this?
1674
-								echo "block_wrap: {";
1675
-								echo "	type: 'string',";
1676
-								echo "  default: '" . esc_attr( $this->options['block-wrap'] ) . "',";
1677
-								echo "},";
1678
-							}
1679
-
1680
-							foreach ( $this->arguments as $key => $args ) {
1681
-
1682
-								// set if we should show alignment
1683
-								if ( $key == 'alignment' ) {
1684
-									$show_alignment = true;
1685
-								}
1686
-
1687
-								$extra = '';
1688
-
1689
-								if ( $args['type'] == 'checkbox' ) {
1690
-									$type    = 'boolean';
1691
-									$default = isset( $args['default'] ) && $args['default'] ? 'true' : 'false';
1692
-								} elseif ( $args['type'] == 'number' ) {
1693
-									$type    = 'number';
1694
-									$default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
1695
-								} elseif ( $args['type'] == 'select' && ! empty( $args['multiple'] ) ) {
1696
-									$type = 'array';
1697
-									if ( is_array( $args['default'] ) ) {
1698
-										$default = isset( $args['default'] ) ? "['" . implode( "','", $args['default'] ) . "']" : "[]";
1699
-									} else {
1700
-										$default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
1701
-									}
1702
-								} elseif ( $args['type'] == 'multiselect' ) {
1703
-									$type    = 'array';
1704
-									$default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
1705
-								} else {
1706
-									$type    = 'string';
1707
-									$default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
1708
-								}
1709
-								echo $key . " : {";
1710
-								echo "type : '$type',";
1711
-								echo "default : $default,";
1712
-								echo "},";
1713
-							}
1714
-
1715
-							echo "content : {type : 'string',default: 'Please select the attributes in the block settings'},";
1716
-							echo "className: { type: 'string', default: '' },";
1717
-
1718
-							echo "},";
1719
-
1720
-						}
1721
-
1722
-						?>
1662
+                        if ( ! empty( $this->arguments ) ) {
1663
+                            echo "attributes : {";
1664
+
1665
+                            if ( $show_advanced ) {
1666
+                                echo "show_advanced: {";
1667
+                                echo "	type: 'boolean',";
1668
+                                echo "  default: false,";
1669
+                                echo "},";
1670
+                            }
1671
+
1672
+                            // block wrap element
1673
+                            if ( !empty( $this->options['block-wrap'] ) ) { //@todo we should validate this?
1674
+                                echo "block_wrap: {";
1675
+                                echo "	type: 'string',";
1676
+                                echo "  default: '" . esc_attr( $this->options['block-wrap'] ) . "',";
1677
+                                echo "},";
1678
+                            }
1679
+
1680
+                            foreach ( $this->arguments as $key => $args ) {
1681
+
1682
+                                // set if we should show alignment
1683
+                                if ( $key == 'alignment' ) {
1684
+                                    $show_alignment = true;
1685
+                                }
1686
+
1687
+                                $extra = '';
1688
+
1689
+                                if ( $args['type'] == 'checkbox' ) {
1690
+                                    $type    = 'boolean';
1691
+                                    $default = isset( $args['default'] ) && $args['default'] ? 'true' : 'false';
1692
+                                } elseif ( $args['type'] == 'number' ) {
1693
+                                    $type    = 'number';
1694
+                                    $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
1695
+                                } elseif ( $args['type'] == 'select' && ! empty( $args['multiple'] ) ) {
1696
+                                    $type = 'array';
1697
+                                    if ( is_array( $args['default'] ) ) {
1698
+                                        $default = isset( $args['default'] ) ? "['" . implode( "','", $args['default'] ) . "']" : "[]";
1699
+                                    } else {
1700
+                                        $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
1701
+                                    }
1702
+                                } elseif ( $args['type'] == 'multiselect' ) {
1703
+                                    $type    = 'array';
1704
+                                    $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
1705
+                                } else {
1706
+                                    $type    = 'string';
1707
+                                    $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
1708
+                                }
1709
+                                echo $key . " : {";
1710
+                                echo "type : '$type',";
1711
+                                echo "default : $default,";
1712
+                                echo "},";
1713
+                            }
1714
+
1715
+                            echo "content : {type : 'string',default: 'Please select the attributes in the block settings'},";
1716
+                            echo "className: { type: 'string', default: '' },";
1717
+
1718
+                            echo "},";
1719
+
1720
+                        }
1721
+
1722
+                        ?>
1723 1723
 
1724 1724
 						// The "edit" property must be a valid function.
1725 1725
 						edit: function (props) {
@@ -1738,8 +1738,8 @@  discard block
 block discarded – undo
1738 1738
 										'shortcode': '<?php echo $this->options['base_id'];?>',
1739 1739
 										'attributes': props.attributes,
1740 1740
 										'post_id': <?php global $post; if ( isset( $post->ID ) ) {
1741
-										echo $post->ID;
1742
-									}?>,
1741
+                                        echo $post->ID;
1742
+                                    }?>,
1743 1743
 										'_ajax_nonce': '<?php echo wp_create_nonce( 'super_duper_output_shortcode' );?>'
1744 1744
 									};
1745 1745
 
@@ -1786,10 +1786,10 @@  discard block
 block discarded – undo
1786 1786
 
1787 1787
 									<?php
1788 1788
 
1789
-									if(! empty( $this->arguments )){
1789
+                                    if(! empty( $this->arguments )){
1790 1790
 
1791
-									if ( $show_advanced ) {
1792
-									?>
1791
+                                    if ( $show_advanced ) {
1792
+                                    ?>
1793 1793
 									el(
1794 1794
 										wp.components.ToggleControl,
1795 1795
 										{
@@ -1802,61 +1802,61 @@  discard block
 block discarded – undo
1802 1802
 									),
1803 1803
 									<?php
1804 1804
 
1805
-									}
1805
+                                    }
1806 1806
 
1807
-									$arguments = $this->group_arguments($this->arguments);
1807
+                                    $arguments = $this->group_arguments($this->arguments);
1808 1808
 
1809
-									// Do we have sections?
1810
-									$has_sections = $arguments == $this->arguments ? false : true;
1809
+                                    // Do we have sections?
1810
+                                    $has_sections = $arguments == $this->arguments ? false : true;
1811 1811
 
1812 1812
 
1813
-									if($has_sections){
1814
-									$panel_count = 0;
1815
-									foreach($arguments as $key => $args){
1816
-									?>
1813
+                                    if($has_sections){
1814
+                                    $panel_count = 0;
1815
+                                    foreach($arguments as $key => $args){
1816
+                                    ?>
1817 1817
 									el(wp.components.PanelBody, {
1818 1818
 											title: '<?php esc_attr_e($key); ?>',
1819 1819
 											initialOpen: <?php if($panel_count){echo "false";}else{echo "true";}?>
1820 1820
 										},
1821 1821
 										<?php
1822 1822
 
1823
-										foreach($args as $k => $a){
1824
-											$this->build_block_arguments($k, $a);
1825
-										}
1826
-										?>
1823
+                                        foreach($args as $k => $a){
1824
+                                            $this->build_block_arguments($k, $a);
1825
+                                        }
1826
+                                        ?>
1827 1827
 									),
1828 1828
 									<?php
1829
-									$panel_count++;
1829
+                                    $panel_count++;
1830 1830
 
1831
-									}
1832
-									}else{
1833
-										foreach($this->arguments as $key => $args){
1834
-											$this->build_block_arguments($key, $args);
1835
-										}
1836
-									}
1831
+                                    }
1832
+                                    }else{
1833
+                                        foreach($this->arguments as $key => $args){
1834
+                                            $this->build_block_arguments($key, $args);
1835
+                                        }
1836
+                                    }
1837 1837
 
1838 1838
 
1839 1839
 
1840
-									}
1841
-									?>
1840
+                                    }
1841
+                                    ?>
1842 1842
 
1843 1843
 								),
1844 1844
 
1845 1845
 								<?php
1846
-								// If the user sets block-output array then build it
1847
-								if ( ! empty( $this->options['block-output'] ) ) {
1848
-								$this->block_element( $this->options['block-output'] );
1849
-							}else{
1850
-								// if no block-output is set then we try and get the shortcode html output via ajax.
1851
-								?>
1846
+                                // If the user sets block-output array then build it
1847
+                                if ( ! empty( $this->options['block-output'] ) ) {
1848
+                                $this->block_element( $this->options['block-output'] );
1849
+                            }else{
1850
+                                // if no block-output is set then we try and get the shortcode html output via ajax.
1851
+                                ?>
1852 1852
 								el('div', {
1853 1853
 									dangerouslySetInnerHTML: {__html: onChangeContent()},
1854 1854
 									className: props.className,
1855 1855
 									style: {'min-height': '30px'}
1856 1856
 								})
1857 1857
 								<?php
1858
-								}
1859
-								?>
1858
+                                }
1859
+                                ?>
1860 1860
 							]; // end return
1861 1861
 						},
1862 1862
 
@@ -1874,10 +1874,10 @@  discard block
 block discarded – undo
1874 1874
 							$html = '';
1875 1875
 							<?php
1876 1876
 
1877
-							if(! empty( $this->arguments )){
1877
+                            if(! empty( $this->arguments )){
1878 1878
 
1879
-							foreach($this->arguments as $key => $args){
1880
-							?>
1879
+                            foreach($this->arguments as $key => $args){
1880
+                            ?>
1881 1881
 							if (attr.hasOwnProperty("<?php echo esc_attr( $key );?>")) {
1882 1882
 								if('<?php echo esc_attr( $key );?>' == 'html'){
1883 1883
 									$html = attr.<?php echo esc_attr( $key );?>;
@@ -1886,10 +1886,10 @@  discard block
 block discarded – undo
1886 1886
 								}
1887 1887
 							}
1888 1888
 							<?php
1889
-							}
1890
-							}
1889
+                            }
1890
+                            }
1891 1891
 
1892
-							?>
1892
+                            ?>
1893 1893
 							content += "]";
1894 1894
 							
1895 1895
 							// if has html element
@@ -1912,20 +1912,20 @@  discard block
 block discarded – undo
1912 1912
 							}
1913 1913
 
1914 1914
 							<?php
1915
-							if(isset( $this->options['block-wrap'] ) && $this->options['block-wrap'] == ''){
1916
-							?>
1915
+                            if(isset( $this->options['block-wrap'] ) && $this->options['block-wrap'] == ''){
1916
+                            ?>
1917 1917
 							return content;
1918 1918
 							<?php
1919
-							}else{
1920
-							?>
1919
+                            }else{
1920
+                            ?>
1921 1921
 							var block_wrap = 'div';
1922 1922
 							if (attr.hasOwnProperty("block_wrap")) {
1923 1923
 								block_wrap = attr.block_wrap;
1924 1924
 							}
1925 1925
 							return el(block_wrap, {dangerouslySetInnerHTML: {__html: content}, className: align});
1926 1926
 							<?php
1927
-							}
1928
-							?>
1927
+                            }
1928
+                            ?>
1929 1929
 
1930 1930
 
1931 1931
 						}
@@ -1933,89 +1933,89 @@  discard block
 block discarded – undo
1933 1933
 				})();
1934 1934
 			</script>
1935 1935
 			<?php
1936
-			$output = ob_get_clean();
1936
+            $output = ob_get_clean();
1937 1937
 
1938
-			/*
1938
+            /*
1939 1939
 			 * We only add the <script> tags for code highlighting, so we strip them from the output.
1940 1940
 			 */
1941 1941
 
1942
-			return str_replace( array(
1943
-				'<script>',
1944
-				'</script>'
1945
-			), '', $output );
1946
-		}
1947
-
1948
-		public function build_block_arguments($key,$args){
1949
-			$custom_attributes = ! empty( $args['custom_attributes'] ) ? $this->array_to_attributes( $args['custom_attributes'] ) : '';
1950
-			$options = '';
1951
-			$extra = '';
1952
-			$require = '';
1953
-
1954
-			// `content` is a protected and special argument
1955
-			if($key == 'content'){return;}
1956
-
1957
-			$onchange = "props.setAttributes({ $key: $key } )";
1958
-			$value = "props.attributes.$key";
1959
-			$text_type = array( 'text', 'password', 'number', 'email', 'tel', 'url', 'color' );
1960
-			if ( in_array( $args['type'], $text_type ) ) {
1961
-				$type = 'TextControl';
1962
-				// Save numbers as numbers and not strings
1963
-				if ( $args['type'] == 'number' ) {
1964
-					$onchange = "props.setAttributes({ $key: Number($key) } )";
1965
-				}
1966
-			}
1967
-			//									elseif ( $args['type'] == 'color' ) { //@todo ColorPicker labels are not shown yet, we use html5 color input for now https://github.com/WordPress/gutenberg/issues/14378
1968
-			//										$type = 'ColorPicker';
1969
-			//									}
1970
-			elseif ( $args['type'] == 'checkbox' ) {
1971
-				$type = 'CheckboxControl';
1972
-				$extra .= "checked: props.attributes.$key,";
1973
-				$onchange = "props.setAttributes({ $key: ! props.attributes.$key } )";
1974
-			}elseif ( $args['type'] == 'textarea' ) {
1975
-				$type = 'TextareaControl';
1976
-			} elseif ( $args['type'] == 'select' || $args['type'] == 'multiselect' ) {
1977
-				$type = 'SelectControl';
1978
-				if ( ! empty( $args['options'] ) ) {
1979
-					$options .= "options  : [";
1980
-					foreach ( $args['options'] as $option_val => $option_label ) {
1981
-						$options .= "{ value : '" . esc_attr( $option_val ) . "',     label : '" . esc_attr( $option_label ) . "'     },";
1982
-					}
1983
-					$options .= "],";
1984
-				}
1985
-				if ( isset( $args['multiple'] ) && $args['multiple'] ) { //@todo multiselect does not work at the moment: https://github.com/WordPress/gutenberg/issues/5550
1986
-					$extra .= ' multiple: true, ';
1987
-					//$onchange = "props.setAttributes({ $key: ['edit'] } )";
1988
-					//$value = "['edit', 'delete']";
1989
-				}
1990
-			} elseif ( $args['type'] == 'alignment' ) {
1991
-				$type = 'AlignmentToolbar'; // @todo this does not seem to work but cant find a example
1992
-			} else {
1993
-				return;// if we have not implemented the control then don't break the JS.
1994
-			}
1995
-
1996
-			// add show only if advanced
1997
-			if ( ! empty( $args['advanced'] ) ) {
1998
-				echo "props.attributes.show_advanced && ";
1999
-			}
2000
-			// add setting require if defined
2001
-			if ( ! empty( $args['element_require'] ) ) {
2002
-				echo $this->block_props_replace( $args['element_require'], true ) . " && ";
2003
-			}
2004
-			?>
1942
+            return str_replace( array(
1943
+                '<script>',
1944
+                '</script>'
1945
+            ), '', $output );
1946
+        }
1947
+
1948
+        public function build_block_arguments($key,$args){
1949
+            $custom_attributes = ! empty( $args['custom_attributes'] ) ? $this->array_to_attributes( $args['custom_attributes'] ) : '';
1950
+            $options = '';
1951
+            $extra = '';
1952
+            $require = '';
1953
+
1954
+            // `content` is a protected and special argument
1955
+            if($key == 'content'){return;}
1956
+
1957
+            $onchange = "props.setAttributes({ $key: $key } )";
1958
+            $value = "props.attributes.$key";
1959
+            $text_type = array( 'text', 'password', 'number', 'email', 'tel', 'url', 'color' );
1960
+            if ( in_array( $args['type'], $text_type ) ) {
1961
+                $type = 'TextControl';
1962
+                // Save numbers as numbers and not strings
1963
+                if ( $args['type'] == 'number' ) {
1964
+                    $onchange = "props.setAttributes({ $key: Number($key) } )";
1965
+                }
1966
+            }
1967
+            //									elseif ( $args['type'] == 'color' ) { //@todo ColorPicker labels are not shown yet, we use html5 color input for now https://github.com/WordPress/gutenberg/issues/14378
1968
+            //										$type = 'ColorPicker';
1969
+            //									}
1970
+            elseif ( $args['type'] == 'checkbox' ) {
1971
+                $type = 'CheckboxControl';
1972
+                $extra .= "checked: props.attributes.$key,";
1973
+                $onchange = "props.setAttributes({ $key: ! props.attributes.$key } )";
1974
+            }elseif ( $args['type'] == 'textarea' ) {
1975
+                $type = 'TextareaControl';
1976
+            } elseif ( $args['type'] == 'select' || $args['type'] == 'multiselect' ) {
1977
+                $type = 'SelectControl';
1978
+                if ( ! empty( $args['options'] ) ) {
1979
+                    $options .= "options  : [";
1980
+                    foreach ( $args['options'] as $option_val => $option_label ) {
1981
+                        $options .= "{ value : '" . esc_attr( $option_val ) . "',     label : '" . esc_attr( $option_label ) . "'     },";
1982
+                    }
1983
+                    $options .= "],";
1984
+                }
1985
+                if ( isset( $args['multiple'] ) && $args['multiple'] ) { //@todo multiselect does not work at the moment: https://github.com/WordPress/gutenberg/issues/5550
1986
+                    $extra .= ' multiple: true, ';
1987
+                    //$onchange = "props.setAttributes({ $key: ['edit'] } )";
1988
+                    //$value = "['edit', 'delete']";
1989
+                }
1990
+            } elseif ( $args['type'] == 'alignment' ) {
1991
+                $type = 'AlignmentToolbar'; // @todo this does not seem to work but cant find a example
1992
+            } else {
1993
+                return;// if we have not implemented the control then don't break the JS.
1994
+            }
1995
+
1996
+            // add show only if advanced
1997
+            if ( ! empty( $args['advanced'] ) ) {
1998
+                echo "props.attributes.show_advanced && ";
1999
+            }
2000
+            // add setting require if defined
2001
+            if ( ! empty( $args['element_require'] ) ) {
2002
+                echo $this->block_props_replace( $args['element_require'], true ) . " && ";
2003
+            }
2004
+            ?>
2005 2005
 			el(
2006 2006
 			wp.components.<?php echo esc_attr( $type );?>,
2007 2007
 			{
2008 2008
 			label: '<?php echo esc_attr( $args['title'] );?>',
2009 2009
 			help: '<?php if ( isset( $args['desc'] ) ) {
2010
-				echo esc_attr( $args['desc'] );
2011
-			}?>',
2010
+                echo esc_attr( $args['desc'] );
2011
+            }?>',
2012 2012
 			value: <?php echo $value;?>,
2013 2013
 			<?php if ( $type == 'TextControl' && $args['type'] != 'text' ) {
2014
-				echo "type: '" . esc_attr( $args['type'] ) . "',";
2015
-			}?>
2014
+                echo "type: '" . esc_attr( $args['type'] ) . "',";
2015
+            }?>
2016 2016
 			<?php if ( ! empty( $args['placeholder'] ) ) {
2017
-				echo "placeholder: '" . esc_attr( $args['placeholder'] ) . "',";
2018
-			}?>
2017
+                echo "placeholder: '" . esc_attr( $args['placeholder'] ) . "',";
2018
+            }?>
2019 2019
 			<?php echo $options;?>
2020 2020
 			<?php echo $extra;?>
2021 2021
 			<?php echo $custom_attributes;?>
@@ -2025,508 +2025,508 @@  discard block
 block discarded – undo
2025 2025
 			}
2026 2026
 			),
2027 2027
 			<?php
2028
-		}
2029
-
2030
-		/**
2031
-		 * Convert an array of attributes to block string.
2032
-		 *
2033
-		 * @todo there is prob a faster way to do this, also we could add some validation here.
2034
-		 *
2035
-		 * @param $custom_attributes
2036
-		 *
2037
-		 * @return string
2038
-		 */
2039
-		public function array_to_attributes( $custom_attributes, $html = false ) {
2040
-			$attributes = '';
2041
-			if ( ! empty( $custom_attributes ) ) {
2042
-
2043
-				if ( $html ) {
2044
-					foreach ( $custom_attributes as $key => $val ) {
2045
-						$attributes .= " $key='$val' ";
2046
-					}
2047
-				} else {
2048
-					foreach ( $custom_attributes as $key => $val ) {
2049
-						$attributes .= "'$key': '$val',";
2050
-					}
2051
-				}
2052
-			}
2053
-
2054
-			return $attributes;
2055
-		}
2056
-
2057
-		/**
2058
-		 * A self looping function to create the output for JS block elements.
2059
-		 *
2060
-		 * This is what is output in the WP Editor visual view.
2061
-		 *
2062
-		 * @param $args
2063
-		 */
2064
-		public function block_element( $args ) {
2065
-
2066
-
2067
-			if ( ! empty( $args ) ) {
2068
-				foreach ( $args as $element => $new_args ) {
2069
-
2070
-					if ( is_array( $new_args ) ) { // its an element
2071
-
2072
-
2073
-						if ( isset( $new_args['element'] ) ) {
2074
-
2075
-							if ( isset( $new_args['element_require'] ) ) {
2076
-								echo str_replace( array(
2077
-										"'+",
2078
-										"+'"
2079
-									), '', $this->block_props_replace( $new_args['element_require'] ) ) . " &&  ";
2080
-								unset( $new_args['element_require'] );
2081
-							}
2082
-
2083
-							echo "\n el( '" . $new_args['element'] . "', {";
2084
-
2085
-							// get the attributes
2086
-							foreach ( $new_args as $new_key => $new_value ) {
2087
-
2088
-
2089
-								if ( $new_key == 'element' || $new_key == 'content' || $new_key == 'element_require' || $new_key == 'element_repeat' || is_array( $new_value ) ) {
2090
-									// do nothing
2091
-								} else {
2092
-									echo $this->block_element( array( $new_key => $new_value ) );
2093
-								}
2094
-							}
2095
-
2096
-							echo "},";// end attributes
2097
-
2098
-							// get the content
2099
-							$first_item = 0;
2100
-							foreach ( $new_args as $new_key => $new_value ) {
2101
-								if ( $new_key === 'content' || is_array( $new_value ) ) {
2102
-
2103
-									if ( $new_key === 'content' ) {
2104
-										echo "'" . $this->block_props_replace( wp_slash( $new_value ) ) . "'";
2105
-									}
2106
-
2107
-									if ( is_array( $new_value ) ) {
2108
-
2109
-										if ( isset( $new_value['element_require'] ) ) {
2110
-											echo str_replace( array(
2111
-													"'+",
2112
-													"+'"
2113
-												), '', $this->block_props_replace( $new_value['element_require'] ) ) . " &&  ";
2114
-											unset( $new_value['element_require'] );
2115
-										}
2116
-
2117
-										if ( isset( $new_value['element_repeat'] ) ) {
2118
-											$x = 1;
2119
-											while ( $x <= absint( $new_value['element_repeat'] ) ) {
2120
-												$this->block_element( array( '' => $new_value ) );
2121
-												$x ++;
2122
-											}
2123
-										} else {
2124
-											$this->block_element( array( '' => $new_value ) );
2125
-										}
2126
-									}
2127
-									$first_item ++;
2128
-								}
2129
-							}
2130
-
2131
-							echo ")";// end content
2132
-
2133
-							echo ", \n";
2134
-
2135
-						}
2136
-					} else {
2137
-
2138
-						if ( substr( $element, 0, 3 ) === "if_" ) {
2139
-							echo str_replace( "if_", "", $element ) . ": " . $this->block_props_replace( $new_args, true ) . ",";
2140
-						} elseif ( $element == 'style' ) {
2141
-							echo $element . ": " . $this->block_props_replace( $new_args ) . ",";
2142
-						} else {
2143
-							echo $element . ": '" . $this->block_props_replace( $new_args ) . "',";
2144
-						}
2145
-
2146
-					}
2147
-				}
2148
-			}
2149
-		}
2150
-
2151
-		/**
2152
-		 * Replace block attributes placeholders with the proper naming.
2153
-		 *
2154
-		 * @param $string
2155
-		 *
2156
-		 * @return mixed
2157
-		 */
2158
-		public function block_props_replace( $string, $no_wrap = false ) {
2159
-
2160
-			if ( $no_wrap ) {
2161
-				$string = str_replace( array( "[%", "%]" ), array( "props.attributes.", "" ), $string );
2162
-			} else {
2163
-				$string = str_replace( array( "[%", "%]" ), array( "'+props.attributes.", "+'" ), $string );
2164
-			}
2165
-
2166
-			return $string;
2167
-		}
2168
-
2169
-		/**
2170
-		 * Outputs the content of the widget
2171
-		 *
2172
-		 * @param array $args
2173
-		 * @param array $instance
2174
-		 */
2175
-		public function widget( $args, $instance ) {
2176
-
2177
-			// get the filtered values
2178
-			$argument_values = $this->argument_values( $instance );
2179
-			$argument_values = $this->string_to_bool( $argument_values );
2180
-			$output          = $this->output( $argument_values, $args );
2181
-
2182
-			$no_wrap = false;
2183
-			if( isset( $argument_values['no_wrap'] ) && $argument_values['no_wrap'] ){ $no_wrap = true; }
2184
-
2185
-			ob_start();
2186
-			if ( $output && !$no_wrap) {
2187
-				// Before widget
2188
-				$before_widget = $args['before_widget'];
2189
-				$before_widget = apply_filters( 'wp_super_duper_before_widget', $before_widget, $args, $instance, $this );
2190
-				$before_widget = apply_filters( 'wp_super_duper_before_widget_' . $this->base_id, $before_widget, $args, $instance, $this );
2191
-
2192
-				// After widget
2193
-				$after_widget = $args['after_widget'];
2194
-				$after_widget = apply_filters( 'wp_super_duper_after_widget', $after_widget, $args, $instance, $this );
2195
-				$after_widget = apply_filters( 'wp_super_duper_after_widget_' . $this->base_id, $after_widget, $args, $instance, $this );
2196
-
2197
-				echo $before_widget;
2198
-				// elementor strips the widget wrapping div so we check for and add it back if needed
2199
-				if ( $this->is_elementor_widget_output() ) {
2200
-					echo ! empty( $this->options['widget_ops']['classname'] ) ? "<span class='" . esc_attr( $this->options['widget_ops']['classname'] ) . "'>" : '';
2201
-				}
2202
-				echo $this->output_title( $args, $instance );
2203
-				echo $output;
2204
-				if ( $this->is_elementor_widget_output() ) {
2205
-					echo ! empty( $this->options['widget_ops']['classname'] ) ? "</span>" : '';
2206
-				}
2207
-				echo $after_widget;
2208
-			} elseif ( $this->is_preview() && $output == '' ) {// if preview show a placeholder if empty
2209
-				$output = $this->preview_placeholder_text( "{{" . $this->base_id . "}}" );
2210
-				echo $output;
2211
-			} elseif($output && $no_wrap){
2212
-				echo $output;
2213
-			}
2214
-			$output = ob_get_clean();
2215
-
2216
-			$output = apply_filters( 'wp_super_duper_widget_output', $output, $instance, $args, $this );
2217
-
2218
-			echo $output;
2219
-		}
2220
-
2221
-		/**
2222
-		 * Tests if the current output is inside a elementor container.
2223
-		 *
2224
-		 * @since 1.0.4
2225
-		 * @return bool
2226
-		 */
2227
-		public function is_elementor_widget_output() {
2228
-			$result = false;
2229
-			if ( defined( 'ELEMENTOR_VERSION' ) && isset( $this->number ) && $this->number == 'REPLACE_TO_ID' ) {
2230
-				$result = true;
2231
-			}
2232
-
2233
-			return $result;
2234
-		}
2235
-
2236
-		/**
2237
-		 * Tests if the current output is inside a elementor preview.
2238
-		 *
2239
-		 * @since 1.0.4
2240
-		 * @return bool
2241
-		 */
2242
-		public function is_elementor_preview() {
2243
-			$result = false;
2244
-			if ( isset( $_REQUEST['elementor-preview'] ) || ( is_admin() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) || ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor_ajax' ) ) {
2245
-				$result = true;
2246
-			}
2247
-
2248
-			return $result;
2249
-		}
2250
-
2251
-		/**
2252
-		 * Tests if the current output is inside a Divi preview.
2253
-		 *
2254
-		 * @since 1.0.6
2255
-		 * @return bool
2256
-		 */
2257
-		public function is_divi_preview() {
2258
-			$result = false;
2259
-			if ( isset( $_REQUEST['et_fb'] ) || isset( $_REQUEST['et_pb_preview'] ) || ( is_admin() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) ) {
2260
-				$result = true;
2261
-			}
2262
-
2263
-			return $result;
2264
-		}
2265
-
2266
-		/**
2267
-		 * Tests if the current output is inside a Beaver builder preview.
2268
-		 *
2269
-		 * @since 1.0.6
2270
-		 * @return bool
2271
-		 */
2272
-		public function is_beaver_preview() {
2273
-			$result = false;
2274
-			if ( isset( $_REQUEST['fl_builder'] ) ) {
2275
-				$result = true;
2276
-			}
2277
-
2278
-			return $result;
2279
-		}
2280
-
2281
-		/**
2282
-		 * Tests if the current output is inside a siteorigin builder preview.
2283
-		 *
2284
-		 * @since 1.0.6
2285
-		 * @return bool
2286
-		 */
2287
-		public function is_siteorigin_preview() {
2288
-			$result = false;
2289
-			if ( ! empty( $_REQUEST['siteorigin_panels_live_editor'] ) ) {
2290
-				$result = true;
2291
-			}
2292
-
2293
-			return $result;
2294
-		}
2295
-
2296
-		/**
2297
-		 * Tests if the current output is inside a cornerstone builder preview.
2298
-		 *
2299
-		 * @since 1.0.8
2300
-		 * @return bool
2301
-		 */
2302
-		public function is_cornerstone_preview() {
2303
-			$result = false;
2304
-			if ( ! empty( $_REQUEST['cornerstone_preview'] ) || basename( $_SERVER['REQUEST_URI'] ) == 'cornerstone-endpoint' ) {
2305
-				$result = true;
2306
-			}
2307
-
2308
-			return $result;
2309
-		}
2310
-
2311
-		/**
2312
-		 * Tests if the current output is inside a fusion builder preview.
2313
-		 *
2314
-		 * @since 1.1.0
2315
-		 * @return bool
2316
-		 */
2317
-		public function is_fusion_preview() {
2318
-			$result = false;
2319
-			if ( ! empty( $_REQUEST['fb-edit'] ) || ! empty( $_REQUEST['fusion_load_nonce'] ) ) {
2320
-				$result = true;
2321
-			}
2322
-
2323
-			return $result;
2324
-		}
2325
-
2326
-		/**
2327
-		 * General function to check if we are in a preview situation.
2328
-		 *
2329
-		 * @since 1.0.6
2330
-		 * @return bool
2331
-		 */
2332
-		public function is_preview() {
2333
-			$preview = false;
2334
-			if ( $this->is_divi_preview() ) {
2335
-				$preview = true;
2336
-			} elseif ( $this->is_elementor_preview() ) {
2337
-				$preview = true;
2338
-			} elseif ( $this->is_beaver_preview() ) {
2339
-				$preview = true;
2340
-			} elseif ( $this->is_siteorigin_preview() ) {
2341
-				$preview = true;
2342
-			} elseif ( $this->is_cornerstone_preview() ) {
2343
-				$preview = true;
2344
-			} elseif ( $this->is_fusion_preview() ) {
2345
-				$preview = true;
2346
-			}
2347
-
2348
-			return $preview;
2349
-		}
2350
-
2351
-		/**
2352
-		 * Output the super title.
2353
-		 *
2354
-		 * @param $args
2355
-		 * @param array $instance
2356
-		 *
2357
-		 * @return string
2358
-		 */
2359
-		public function output_title( $args, $instance = array() ) {
2360
-			$output = '';
2361
-			if ( ! empty( $instance['title'] ) ) {
2362
-				/** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */
2363
-				$title  = apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base );
2364
-				$output = $args['before_title'] . $title . $args['after_title'];
2365
-			}
2366
-
2367
-			return $output;
2368
-		}
2369
-
2370
-		/**
2371
-		 * Outputs the options form inputs for the widget.
2372
-		 *
2373
-		 * @param array $instance The widget options.
2374
-		 */
2375
-		public function form( $instance ) {
2376
-
2377
-			// set widget instance
2378
-			$this->instance = $instance;
2379
-
2380
-			// set it as a SD widget
2381
-			echo $this->widget_advanced_toggle();
2382
-
2383
-			echo "<p>" . esc_attr( $this->options['widget_ops']['description'] ) . "</p>";
2384
-			$arguments_raw = $this->get_arguments();
2385
-
2386
-			if ( is_array( $arguments_raw ) ) {
2387
-
2388
-				$arguments = $this->group_arguments($arguments_raw);
2389
-
2390
-				// Do we have sections?
2391
-				$has_sections = $arguments == $arguments_raw ? false : true;
2392
-
2393
-
2394
-				if($has_sections){
2395
-					$panel_count = 0;
2396
-					foreach($arguments as $key => $args){
2397
-
2398
-						?>
2028
+        }
2029
+
2030
+        /**
2031
+         * Convert an array of attributes to block string.
2032
+         *
2033
+         * @todo there is prob a faster way to do this, also we could add some validation here.
2034
+         *
2035
+         * @param $custom_attributes
2036
+         *
2037
+         * @return string
2038
+         */
2039
+        public function array_to_attributes( $custom_attributes, $html = false ) {
2040
+            $attributes = '';
2041
+            if ( ! empty( $custom_attributes ) ) {
2042
+
2043
+                if ( $html ) {
2044
+                    foreach ( $custom_attributes as $key => $val ) {
2045
+                        $attributes .= " $key='$val' ";
2046
+                    }
2047
+                } else {
2048
+                    foreach ( $custom_attributes as $key => $val ) {
2049
+                        $attributes .= "'$key': '$val',";
2050
+                    }
2051
+                }
2052
+            }
2053
+
2054
+            return $attributes;
2055
+        }
2056
+
2057
+        /**
2058
+         * A self looping function to create the output for JS block elements.
2059
+         *
2060
+         * This is what is output in the WP Editor visual view.
2061
+         *
2062
+         * @param $args
2063
+         */
2064
+        public function block_element( $args ) {
2065
+
2066
+
2067
+            if ( ! empty( $args ) ) {
2068
+                foreach ( $args as $element => $new_args ) {
2069
+
2070
+                    if ( is_array( $new_args ) ) { // its an element
2071
+
2072
+
2073
+                        if ( isset( $new_args['element'] ) ) {
2074
+
2075
+                            if ( isset( $new_args['element_require'] ) ) {
2076
+                                echo str_replace( array(
2077
+                                        "'+",
2078
+                                        "+'"
2079
+                                    ), '', $this->block_props_replace( $new_args['element_require'] ) ) . " &&  ";
2080
+                                unset( $new_args['element_require'] );
2081
+                            }
2082
+
2083
+                            echo "\n el( '" . $new_args['element'] . "', {";
2084
+
2085
+                            // get the attributes
2086
+                            foreach ( $new_args as $new_key => $new_value ) {
2087
+
2088
+
2089
+                                if ( $new_key == 'element' || $new_key == 'content' || $new_key == 'element_require' || $new_key == 'element_repeat' || is_array( $new_value ) ) {
2090
+                                    // do nothing
2091
+                                } else {
2092
+                                    echo $this->block_element( array( $new_key => $new_value ) );
2093
+                                }
2094
+                            }
2095
+
2096
+                            echo "},";// end attributes
2097
+
2098
+                            // get the content
2099
+                            $first_item = 0;
2100
+                            foreach ( $new_args as $new_key => $new_value ) {
2101
+                                if ( $new_key === 'content' || is_array( $new_value ) ) {
2102
+
2103
+                                    if ( $new_key === 'content' ) {
2104
+                                        echo "'" . $this->block_props_replace( wp_slash( $new_value ) ) . "'";
2105
+                                    }
2106
+
2107
+                                    if ( is_array( $new_value ) ) {
2108
+
2109
+                                        if ( isset( $new_value['element_require'] ) ) {
2110
+                                            echo str_replace( array(
2111
+                                                    "'+",
2112
+                                                    "+'"
2113
+                                                ), '', $this->block_props_replace( $new_value['element_require'] ) ) . " &&  ";
2114
+                                            unset( $new_value['element_require'] );
2115
+                                        }
2116
+
2117
+                                        if ( isset( $new_value['element_repeat'] ) ) {
2118
+                                            $x = 1;
2119
+                                            while ( $x <= absint( $new_value['element_repeat'] ) ) {
2120
+                                                $this->block_element( array( '' => $new_value ) );
2121
+                                                $x ++;
2122
+                                            }
2123
+                                        } else {
2124
+                                            $this->block_element( array( '' => $new_value ) );
2125
+                                        }
2126
+                                    }
2127
+                                    $first_item ++;
2128
+                                }
2129
+                            }
2130
+
2131
+                            echo ")";// end content
2132
+
2133
+                            echo ", \n";
2134
+
2135
+                        }
2136
+                    } else {
2137
+
2138
+                        if ( substr( $element, 0, 3 ) === "if_" ) {
2139
+                            echo str_replace( "if_", "", $element ) . ": " . $this->block_props_replace( $new_args, true ) . ",";
2140
+                        } elseif ( $element == 'style' ) {
2141
+                            echo $element . ": " . $this->block_props_replace( $new_args ) . ",";
2142
+                        } else {
2143
+                            echo $element . ": '" . $this->block_props_replace( $new_args ) . "',";
2144
+                        }
2145
+
2146
+                    }
2147
+                }
2148
+            }
2149
+        }
2150
+
2151
+        /**
2152
+         * Replace block attributes placeholders with the proper naming.
2153
+         *
2154
+         * @param $string
2155
+         *
2156
+         * @return mixed
2157
+         */
2158
+        public function block_props_replace( $string, $no_wrap = false ) {
2159
+
2160
+            if ( $no_wrap ) {
2161
+                $string = str_replace( array( "[%", "%]" ), array( "props.attributes.", "" ), $string );
2162
+            } else {
2163
+                $string = str_replace( array( "[%", "%]" ), array( "'+props.attributes.", "+'" ), $string );
2164
+            }
2165
+
2166
+            return $string;
2167
+        }
2168
+
2169
+        /**
2170
+         * Outputs the content of the widget
2171
+         *
2172
+         * @param array $args
2173
+         * @param array $instance
2174
+         */
2175
+        public function widget( $args, $instance ) {
2176
+
2177
+            // get the filtered values
2178
+            $argument_values = $this->argument_values( $instance );
2179
+            $argument_values = $this->string_to_bool( $argument_values );
2180
+            $output          = $this->output( $argument_values, $args );
2181
+
2182
+            $no_wrap = false;
2183
+            if( isset( $argument_values['no_wrap'] ) && $argument_values['no_wrap'] ){ $no_wrap = true; }
2184
+
2185
+            ob_start();
2186
+            if ( $output && !$no_wrap) {
2187
+                // Before widget
2188
+                $before_widget = $args['before_widget'];
2189
+                $before_widget = apply_filters( 'wp_super_duper_before_widget', $before_widget, $args, $instance, $this );
2190
+                $before_widget = apply_filters( 'wp_super_duper_before_widget_' . $this->base_id, $before_widget, $args, $instance, $this );
2191
+
2192
+                // After widget
2193
+                $after_widget = $args['after_widget'];
2194
+                $after_widget = apply_filters( 'wp_super_duper_after_widget', $after_widget, $args, $instance, $this );
2195
+                $after_widget = apply_filters( 'wp_super_duper_after_widget_' . $this->base_id, $after_widget, $args, $instance, $this );
2196
+
2197
+                echo $before_widget;
2198
+                // elementor strips the widget wrapping div so we check for and add it back if needed
2199
+                if ( $this->is_elementor_widget_output() ) {
2200
+                    echo ! empty( $this->options['widget_ops']['classname'] ) ? "<span class='" . esc_attr( $this->options['widget_ops']['classname'] ) . "'>" : '';
2201
+                }
2202
+                echo $this->output_title( $args, $instance );
2203
+                echo $output;
2204
+                if ( $this->is_elementor_widget_output() ) {
2205
+                    echo ! empty( $this->options['widget_ops']['classname'] ) ? "</span>" : '';
2206
+                }
2207
+                echo $after_widget;
2208
+            } elseif ( $this->is_preview() && $output == '' ) {// if preview show a placeholder if empty
2209
+                $output = $this->preview_placeholder_text( "{{" . $this->base_id . "}}" );
2210
+                echo $output;
2211
+            } elseif($output && $no_wrap){
2212
+                echo $output;
2213
+            }
2214
+            $output = ob_get_clean();
2215
+
2216
+            $output = apply_filters( 'wp_super_duper_widget_output', $output, $instance, $args, $this );
2217
+
2218
+            echo $output;
2219
+        }
2220
+
2221
+        /**
2222
+         * Tests if the current output is inside a elementor container.
2223
+         *
2224
+         * @since 1.0.4
2225
+         * @return bool
2226
+         */
2227
+        public function is_elementor_widget_output() {
2228
+            $result = false;
2229
+            if ( defined( 'ELEMENTOR_VERSION' ) && isset( $this->number ) && $this->number == 'REPLACE_TO_ID' ) {
2230
+                $result = true;
2231
+            }
2232
+
2233
+            return $result;
2234
+        }
2235
+
2236
+        /**
2237
+         * Tests if the current output is inside a elementor preview.
2238
+         *
2239
+         * @since 1.0.4
2240
+         * @return bool
2241
+         */
2242
+        public function is_elementor_preview() {
2243
+            $result = false;
2244
+            if ( isset( $_REQUEST['elementor-preview'] ) || ( is_admin() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) || ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor_ajax' ) ) {
2245
+                $result = true;
2246
+            }
2247
+
2248
+            return $result;
2249
+        }
2250
+
2251
+        /**
2252
+         * Tests if the current output is inside a Divi preview.
2253
+         *
2254
+         * @since 1.0.6
2255
+         * @return bool
2256
+         */
2257
+        public function is_divi_preview() {
2258
+            $result = false;
2259
+            if ( isset( $_REQUEST['et_fb'] ) || isset( $_REQUEST['et_pb_preview'] ) || ( is_admin() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) ) {
2260
+                $result = true;
2261
+            }
2262
+
2263
+            return $result;
2264
+        }
2265
+
2266
+        /**
2267
+         * Tests if the current output is inside a Beaver builder preview.
2268
+         *
2269
+         * @since 1.0.6
2270
+         * @return bool
2271
+         */
2272
+        public function is_beaver_preview() {
2273
+            $result = false;
2274
+            if ( isset( $_REQUEST['fl_builder'] ) ) {
2275
+                $result = true;
2276
+            }
2277
+
2278
+            return $result;
2279
+        }
2280
+
2281
+        /**
2282
+         * Tests if the current output is inside a siteorigin builder preview.
2283
+         *
2284
+         * @since 1.0.6
2285
+         * @return bool
2286
+         */
2287
+        public function is_siteorigin_preview() {
2288
+            $result = false;
2289
+            if ( ! empty( $_REQUEST['siteorigin_panels_live_editor'] ) ) {
2290
+                $result = true;
2291
+            }
2292
+
2293
+            return $result;
2294
+        }
2295
+
2296
+        /**
2297
+         * Tests if the current output is inside a cornerstone builder preview.
2298
+         *
2299
+         * @since 1.0.8
2300
+         * @return bool
2301
+         */
2302
+        public function is_cornerstone_preview() {
2303
+            $result = false;
2304
+            if ( ! empty( $_REQUEST['cornerstone_preview'] ) || basename( $_SERVER['REQUEST_URI'] ) == 'cornerstone-endpoint' ) {
2305
+                $result = true;
2306
+            }
2307
+
2308
+            return $result;
2309
+        }
2310
+
2311
+        /**
2312
+         * Tests if the current output is inside a fusion builder preview.
2313
+         *
2314
+         * @since 1.1.0
2315
+         * @return bool
2316
+         */
2317
+        public function is_fusion_preview() {
2318
+            $result = false;
2319
+            if ( ! empty( $_REQUEST['fb-edit'] ) || ! empty( $_REQUEST['fusion_load_nonce'] ) ) {
2320
+                $result = true;
2321
+            }
2322
+
2323
+            return $result;
2324
+        }
2325
+
2326
+        /**
2327
+         * General function to check if we are in a preview situation.
2328
+         *
2329
+         * @since 1.0.6
2330
+         * @return bool
2331
+         */
2332
+        public function is_preview() {
2333
+            $preview = false;
2334
+            if ( $this->is_divi_preview() ) {
2335
+                $preview = true;
2336
+            } elseif ( $this->is_elementor_preview() ) {
2337
+                $preview = true;
2338
+            } elseif ( $this->is_beaver_preview() ) {
2339
+                $preview = true;
2340
+            } elseif ( $this->is_siteorigin_preview() ) {
2341
+                $preview = true;
2342
+            } elseif ( $this->is_cornerstone_preview() ) {
2343
+                $preview = true;
2344
+            } elseif ( $this->is_fusion_preview() ) {
2345
+                $preview = true;
2346
+            }
2347
+
2348
+            return $preview;
2349
+        }
2350
+
2351
+        /**
2352
+         * Output the super title.
2353
+         *
2354
+         * @param $args
2355
+         * @param array $instance
2356
+         *
2357
+         * @return string
2358
+         */
2359
+        public function output_title( $args, $instance = array() ) {
2360
+            $output = '';
2361
+            if ( ! empty( $instance['title'] ) ) {
2362
+                /** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */
2363
+                $title  = apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base );
2364
+                $output = $args['before_title'] . $title . $args['after_title'];
2365
+            }
2366
+
2367
+            return $output;
2368
+        }
2369
+
2370
+        /**
2371
+         * Outputs the options form inputs for the widget.
2372
+         *
2373
+         * @param array $instance The widget options.
2374
+         */
2375
+        public function form( $instance ) {
2376
+
2377
+            // set widget instance
2378
+            $this->instance = $instance;
2379
+
2380
+            // set it as a SD widget
2381
+            echo $this->widget_advanced_toggle();
2382
+
2383
+            echo "<p>" . esc_attr( $this->options['widget_ops']['description'] ) . "</p>";
2384
+            $arguments_raw = $this->get_arguments();
2385
+
2386
+            if ( is_array( $arguments_raw ) ) {
2387
+
2388
+                $arguments = $this->group_arguments($arguments_raw);
2389
+
2390
+                // Do we have sections?
2391
+                $has_sections = $arguments == $arguments_raw ? false : true;
2392
+
2393
+
2394
+                if($has_sections){
2395
+                    $panel_count = 0;
2396
+                    foreach($arguments as $key => $args){
2397
+
2398
+                        ?>
2399 2399
 						<script>
2400 2400
 							//							jQuery(this).find("i").toggleClass("fas fa-chevron-up fas fa-chevron-down");jQuery(this).next().toggle();
2401 2401
 						</script>
2402 2402
 						<?php
2403 2403
 
2404
-						$hide = $panel_count ? ' style="display:none;" ' : '';
2405
-						$icon_class = $panel_count ? 'fas fa-chevron-up' : 'fas fa-chevron-down';
2406
-						echo "<button onclick='jQuery(this).find(\"i\").toggleClass(\"fas fa-chevron-up fas fa-chevron-down\");jQuery(this).next().slideToggle();' type='button' class='sd-toggle-group-button sd-input-group-toggle".sanitize_title_with_dashes($key)."'>".esc_attr($key)." <i style='float:right;' class='".$icon_class."'></i></button>";
2407
-						echo "<div class='sd-toggle-group sd-input-group-".sanitize_title_with_dashes($key)."' $hide>";
2408
-
2409
-						foreach($args as $k => $a){
2410
-							$this->widget_inputs($a, $instance);
2411
-						}
2412
-
2413
-						echo "</div>";
2414
-
2415
-						$panel_count++;
2416
-
2417
-					}
2418
-				}else{
2419
-					foreach ( $arguments as $key => $args ) {
2420
-						$this->widget_inputs( $args, $instance );
2421
-					}
2422
-				}
2423
-
2424
-			}
2425
-		}
2426
-
2427
-		/**
2428
-		 * Get the hidden input that when added makes the advanced button show on widget settings.
2429
-		 *
2430
-		 * @return string
2431
-		 */
2432
-		public function widget_advanced_toggle() {
2433
-
2434
-			$output = '';
2435
-			if ( $this->block_show_advanced() ) {
2436
-				$val = 1;
2437
-			} else {
2438
-				$val = 0;
2439
-			}
2440
-
2441
-			$output .= "<input type='hidden'  class='sd-show-advanced' value='$val' />";
2442
-
2443
-			return $output;
2444
-		}
2445
-
2446
-		/**
2447
-		 * Convert require element.
2448
-		 *
2449
-		 * @since 1.0.0
2450
-		 *
2451
-		 * @param string $input Input element.
2452
-		 *
2453
-		 * @return string $output
2454
-		 */
2455
-		public function convert_element_require( $input ) {
2456
-
2457
-			$input = str_replace( "'", '"', $input );// we only want double quotes
2458
-
2459
-			$output = esc_attr( str_replace( array( "[%", "%]" ), array(
2460
-				"jQuery(form).find('[data-argument=\"",
2461
-				"\"]').find('input,select,textarea').val()"
2462
-			), $input ) );
2463
-
2464
-			return $output;
2465
-		}
2466
-
2467
-		/**
2468
-		 * Builds the inputs for the widget options.
2469
-		 *
2470
-		 * @param $args
2471
-		 * @param $instance
2472
-		 */
2473
-		public function widget_inputs( $args, $instance ) {
2474
-
2475
-			$class             = "";
2476
-			$element_require   = "";
2477
-			$custom_attributes = "";
2478
-
2479
-			// get value
2480
-			if ( isset( $instance[ $args['name'] ] ) ) {
2481
-				$value = $instance[ $args['name'] ];
2482
-			} elseif ( ! isset( $instance[ $args['name'] ] ) && ! empty( $args['default'] ) ) {
2483
-				$value = is_array( $args['default'] ) ? array_map( "esc_html", $args['default'] ) : esc_html( $args['default'] );
2484
-			} else {
2485
-				$value = '';
2486
-			}
2487
-
2488
-			// get placeholder
2489
-			if ( ! empty( $args['placeholder'] ) ) {
2490
-				$placeholder = "placeholder='" . esc_html( $args['placeholder'] ) . "'";
2491
-			} else {
2492
-				$placeholder = '';
2493
-			}
2494
-
2495
-			// get if advanced
2496
-			if ( isset( $args['advanced'] ) && $args['advanced'] ) {
2497
-				$class .= " sd-advanced-setting ";
2498
-			}
2499
-
2500
-			// element_require
2501
-			if ( isset( $args['element_require'] ) && $args['element_require'] ) {
2502
-				$element_require = $args['element_require'];
2503
-			}
2504
-
2505
-			// custom_attributes
2506
-			if ( isset( $args['custom_attributes'] ) && $args['custom_attributes'] ) {
2507
-				$custom_attributes = $this->array_to_attributes( $args['custom_attributes'], true );
2508
-			}
2509
-
2510
-			// before wrapper
2511
-			?>
2404
+                        $hide = $panel_count ? ' style="display:none;" ' : '';
2405
+                        $icon_class = $panel_count ? 'fas fa-chevron-up' : 'fas fa-chevron-down';
2406
+                        echo "<button onclick='jQuery(this).find(\"i\").toggleClass(\"fas fa-chevron-up fas fa-chevron-down\");jQuery(this).next().slideToggle();' type='button' class='sd-toggle-group-button sd-input-group-toggle".sanitize_title_with_dashes($key)."'>".esc_attr($key)." <i style='float:right;' class='".$icon_class."'></i></button>";
2407
+                        echo "<div class='sd-toggle-group sd-input-group-".sanitize_title_with_dashes($key)."' $hide>";
2408
+
2409
+                        foreach($args as $k => $a){
2410
+                            $this->widget_inputs($a, $instance);
2411
+                        }
2412
+
2413
+                        echo "</div>";
2414
+
2415
+                        $panel_count++;
2416
+
2417
+                    }
2418
+                }else{
2419
+                    foreach ( $arguments as $key => $args ) {
2420
+                        $this->widget_inputs( $args, $instance );
2421
+                    }
2422
+                }
2423
+
2424
+            }
2425
+        }
2426
+
2427
+        /**
2428
+         * Get the hidden input that when added makes the advanced button show on widget settings.
2429
+         *
2430
+         * @return string
2431
+         */
2432
+        public function widget_advanced_toggle() {
2433
+
2434
+            $output = '';
2435
+            if ( $this->block_show_advanced() ) {
2436
+                $val = 1;
2437
+            } else {
2438
+                $val = 0;
2439
+            }
2440
+
2441
+            $output .= "<input type='hidden'  class='sd-show-advanced' value='$val' />";
2442
+
2443
+            return $output;
2444
+        }
2445
+
2446
+        /**
2447
+         * Convert require element.
2448
+         *
2449
+         * @since 1.0.0
2450
+         *
2451
+         * @param string $input Input element.
2452
+         *
2453
+         * @return string $output
2454
+         */
2455
+        public function convert_element_require( $input ) {
2456
+
2457
+            $input = str_replace( "'", '"', $input );// we only want double quotes
2458
+
2459
+            $output = esc_attr( str_replace( array( "[%", "%]" ), array(
2460
+                "jQuery(form).find('[data-argument=\"",
2461
+                "\"]').find('input,select,textarea').val()"
2462
+            ), $input ) );
2463
+
2464
+            return $output;
2465
+        }
2466
+
2467
+        /**
2468
+         * Builds the inputs for the widget options.
2469
+         *
2470
+         * @param $args
2471
+         * @param $instance
2472
+         */
2473
+        public function widget_inputs( $args, $instance ) {
2474
+
2475
+            $class             = "";
2476
+            $element_require   = "";
2477
+            $custom_attributes = "";
2478
+
2479
+            // get value
2480
+            if ( isset( $instance[ $args['name'] ] ) ) {
2481
+                $value = $instance[ $args['name'] ];
2482
+            } elseif ( ! isset( $instance[ $args['name'] ] ) && ! empty( $args['default'] ) ) {
2483
+                $value = is_array( $args['default'] ) ? array_map( "esc_html", $args['default'] ) : esc_html( $args['default'] );
2484
+            } else {
2485
+                $value = '';
2486
+            }
2487
+
2488
+            // get placeholder
2489
+            if ( ! empty( $args['placeholder'] ) ) {
2490
+                $placeholder = "placeholder='" . esc_html( $args['placeholder'] ) . "'";
2491
+            } else {
2492
+                $placeholder = '';
2493
+            }
2494
+
2495
+            // get if advanced
2496
+            if ( isset( $args['advanced'] ) && $args['advanced'] ) {
2497
+                $class .= " sd-advanced-setting ";
2498
+            }
2499
+
2500
+            // element_require
2501
+            if ( isset( $args['element_require'] ) && $args['element_require'] ) {
2502
+                $element_require = $args['element_require'];
2503
+            }
2504
+
2505
+            // custom_attributes
2506
+            if ( isset( $args['custom_attributes'] ) && $args['custom_attributes'] ) {
2507
+                $custom_attributes = $this->array_to_attributes( $args['custom_attributes'], true );
2508
+            }
2509
+
2510
+            // before wrapper
2511
+            ?>
2512 2512
 			<p class="sd-argument <?php echo esc_attr( $class ); ?>"
2513 2513
 			   data-argument='<?php echo esc_attr( $args['name'] ); ?>'
2514 2514
 			   data-element_require='<?php if ( $element_require ) {
2515
-				   echo $this->convert_element_require( $element_require );
2516
-			   } ?>'
2515
+                    echo $this->convert_element_require( $element_require );
2516
+                } ?>'
2517 2517
 			>
2518 2518
 				<?php
2519 2519
 
2520
-				switch ( $args['type'] ) {
2521
-					//array('text','password','number','email','tel','url','color')
2522
-					case "text":
2523
-					case "password":
2524
-					case "number":
2525
-					case "email":
2526
-					case "tel":
2527
-					case "url":
2528
-					case "color":
2529
-						?>
2520
+                switch ( $args['type'] ) {
2521
+                    //array('text','password','number','email','tel','url','color')
2522
+                    case "text":
2523
+                    case "password":
2524
+                    case "number":
2525
+                    case "email":
2526
+                    case "tel":
2527
+                    case "url":
2528
+                    case "color":
2529
+                        ?>
2530 2530
 						<label
2531 2531
 							for="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>"><?php echo esc_attr( $args['title'] ); ?><?php echo $this->widget_field_desc( $args ); ?></label>
2532 2532
 						<input <?php echo $placeholder; ?> class="widefat"
@@ -2537,47 +2537,47 @@  discard block
 block discarded – undo
2537 2537
 							                               value="<?php echo esc_attr( $value ); ?>">
2538 2538
 						<?php
2539 2539
 
2540
-						break;
2541
-					case "select":
2542
-						$multiple = isset( $args['multiple'] ) && $args['multiple'] ? true : false;
2543
-						if ( $multiple ) {
2544
-							if ( empty( $value ) ) {
2545
-								$value = array();
2546
-							}
2547
-						}
2548
-						?>
2540
+                        break;
2541
+                    case "select":
2542
+                        $multiple = isset( $args['multiple'] ) && $args['multiple'] ? true : false;
2543
+                        if ( $multiple ) {
2544
+                            if ( empty( $value ) ) {
2545
+                                $value = array();
2546
+                            }
2547
+                        }
2548
+                        ?>
2549 2549
 						<label
2550 2550
 							for="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>"><?php echo esc_attr( $args['title'] ); ?><?php echo $this->widget_field_desc( $args ); ?></label>
2551 2551
 						<select <?php echo $placeholder; ?> class="widefat"
2552 2552
 							<?php echo $custom_attributes; ?>
2553 2553
 							                                id="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>"
2554 2554
 							                                name="<?php echo esc_attr( $this->get_field_name( $args['name'] ) );
2555
-							                                if ( $multiple ) {
2556
-								                                echo "[]";
2557
-							                                } ?>"
2555
+                                                            if ( $multiple ) {
2556
+                                                                echo "[]";
2557
+                                                            } ?>"
2558 2558
 							<?php if ( $multiple ) {
2559
-								echo "multiple";
2560
-							} //@todo not implemented yet due to gutenberg not supporting it
2561
-							?>
2559
+                                echo "multiple";
2560
+                            } //@todo not implemented yet due to gutenberg not supporting it
2561
+                            ?>
2562 2562
 						>
2563 2563
 							<?php
2564 2564
 
2565
-							if ( ! empty( $args['options'] ) ) {
2566
-								foreach ( $args['options'] as $val => $label ) {
2567
-									if ( $multiple ) {
2568
-										$selected = in_array( $val, $value ) ? 'selected="selected"' : '';
2569
-									} else {
2570
-										$selected = selected( $value, $val, false );
2571
-									}
2572
-									echo "<option value='$val' " . $selected . ">$label</option>";
2573
-								}
2574
-							}
2575
-							?>
2565
+                            if ( ! empty( $args['options'] ) ) {
2566
+                                foreach ( $args['options'] as $val => $label ) {
2567
+                                    if ( $multiple ) {
2568
+                                        $selected = in_array( $val, $value ) ? 'selected="selected"' : '';
2569
+                                    } else {
2570
+                                        $selected = selected( $value, $val, false );
2571
+                                    }
2572
+                                    echo "<option value='$val' " . $selected . ">$label</option>";
2573
+                                }
2574
+                            }
2575
+                            ?>
2576 2576
 						</select>
2577 2577
 						<?php
2578
-						break;
2579
-					case "checkbox":
2580
-						?>
2578
+                        break;
2579
+                    case "checkbox":
2580
+                        ?>
2581 2581
 						<input <?php echo $placeholder; ?>
2582 2582
 							<?php checked( 1, $value, true ) ?>
2583 2583
 							<?php echo $custom_attributes; ?>
@@ -2587,9 +2587,9 @@  discard block
 block discarded – undo
2587 2587
 						<label
2588 2588
 							for="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>"><?php echo esc_attr( $args['title'] ); ?><?php echo $this->widget_field_desc( $args ); ?></label>
2589 2589
 						<?php
2590
-						break;
2591
-					case "textarea":
2592
-						?>
2590
+                        break;
2591
+                    case "textarea":
2592
+                        ?>
2593 2593
 						<label
2594 2594
 							for="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>"><?php echo esc_attr( $args['title'] ); ?><?php echo $this->widget_field_desc( $args ); ?></label>
2595 2595
 						<textarea <?php echo $placeholder; ?> class="widefat"
@@ -2599,136 +2599,136 @@  discard block
 block discarded – undo
2599 2599
 							                               ><?php echo esc_attr( $value ); ?></textarea>
2600 2600
 						<?php
2601 2601
 
2602
-						break;
2603
-					case "hidden":
2604
-						?>
2602
+                        break;
2603
+                    case "hidden":
2604
+                        ?>
2605 2605
 						<input id="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>"
2606 2606
 						       name="<?php echo esc_attr( $this->get_field_name( $args['name'] ) ); ?>" type="hidden"
2607 2607
 						       value="<?php echo esc_attr( $value ); ?>">
2608 2608
 						<?php
2609
-						break;
2610
-					default:
2611
-						echo "No input type found!"; // @todo we need to add more input types.
2612
-				}
2609
+                        break;
2610
+                    default:
2611
+                        echo "No input type found!"; // @todo we need to add more input types.
2612
+                }
2613 2613
 
2614
-				// after wrapper
2615
-				?>
2614
+                // after wrapper
2615
+                ?>
2616 2616
 			</p>
2617 2617
 			<?php
2618 2618
 
2619
-		}
2620
-
2621
-		/**
2622
-		 * Get the widget input description html.
2623
-		 *
2624
-		 * @param $args
2625
-		 *
2626
-		 * @return string
2627
-		 * @todo, need to make its own tooltip script
2628
-		 */
2629
-		public function widget_field_desc( $args ) {
2630
-
2631
-			$description = '';
2632
-			if ( isset( $args['desc'] ) && $args['desc'] ) {
2633
-				if ( isset( $args['desc_tip'] ) && $args['desc_tip'] ) {
2634
-					$description = $this->desc_tip( $args['desc'] );
2635
-				} else {
2636
-					$description = '<span class="description">' . wp_kses_post( $args['desc'] ) . '</span>';
2637
-				}
2638
-			}
2639
-
2640
-			return $description;
2641
-		}
2642
-
2643
-		/**
2644
-		 * Get the tool tip html.
2645
-		 *
2646
-		 * @param $tip
2647
-		 * @param bool $allow_html
2648
-		 *
2649
-		 * @return string
2650
-		 */
2651
-		function desc_tip( $tip, $allow_html = false ) {
2652
-			if ( $allow_html ) {
2653
-				$tip = $this->sanitize_tooltip( $tip );
2654
-			} else {
2655
-				$tip = esc_attr( $tip );
2656
-			}
2657
-
2658
-			return '<span class="gd-help-tip dashicons dashicons-editor-help" title="' . $tip . '"></span>';
2659
-		}
2660
-
2661
-		/**
2662
-		 * Sanitize a string destined to be a tooltip.
2663
-		 *
2664
-		 * @param string $var
2665
-		 *
2666
-		 * @return string
2667
-		 */
2668
-		public function sanitize_tooltip( $var ) {
2669
-			return htmlspecialchars( wp_kses( html_entity_decode( $var ), array(
2670
-				'br'     => array(),
2671
-				'em'     => array(),
2672
-				'strong' => array(),
2673
-				'small'  => array(),
2674
-				'span'   => array(),
2675
-				'ul'     => array(),
2676
-				'li'     => array(),
2677
-				'ol'     => array(),
2678
-				'p'      => array(),
2679
-			) ) );
2680
-		}
2681
-
2682
-		/**
2683
-		 * Processing widget options on save
2684
-		 *
2685
-		 * @param array $new_instance The new options
2686
-		 * @param array $old_instance The previous options
2687
-		 *
2688
-		 * @return array
2689
-		 * @todo we should add some sanitation here.
2690
-		 */
2691
-		public function update( $new_instance, $old_instance ) {
2692
-
2693
-			//save the widget
2694
-			$instance = array_merge( (array) $old_instance, (array) $new_instance );
2695
-
2696
-			// set widget instance
2697
-			$this->instance = $instance;
2698
-
2699
-			if ( empty( $this->arguments ) ) {
2700
-				$this->get_arguments();
2701
-			}
2702
-
2703
-			// check for checkboxes
2704
-			if ( ! empty( $this->arguments ) ) {
2705
-				foreach ( $this->arguments as $argument ) {
2706
-					if ( isset( $argument['type'] ) && $argument['type'] == 'checkbox' && ! isset( $new_instance[ $argument['name'] ] ) ) {
2707
-						$instance[ $argument['name'] ] = '0';
2708
-					}
2709
-				}
2710
-			}
2711
-
2712
-			return $instance;
2713
-		}
2714
-
2715
-		/**
2716
-		 * Checks if the current call is a ajax call to get the block content.
2717
-		 *
2718
-		 * This can be used in your widget to return different content as the block content.
2719
-		 *
2720
-		 * @since 1.0.3
2721
-		 * @return bool
2722
-		 */
2723
-		public function is_block_content_call() {
2724
-			$result = false;
2725
-			if ( wp_doing_ajax() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'super_duper_output_shortcode' ) {
2726
-				$result = true;
2727
-			}
2728
-
2729
-			return $result;
2730
-		}
2731
-
2732
-	}
2619
+        }
2620
+
2621
+        /**
2622
+         * Get the widget input description html.
2623
+         *
2624
+         * @param $args
2625
+         *
2626
+         * @return string
2627
+         * @todo, need to make its own tooltip script
2628
+         */
2629
+        public function widget_field_desc( $args ) {
2630
+
2631
+            $description = '';
2632
+            if ( isset( $args['desc'] ) && $args['desc'] ) {
2633
+                if ( isset( $args['desc_tip'] ) && $args['desc_tip'] ) {
2634
+                    $description = $this->desc_tip( $args['desc'] );
2635
+                } else {
2636
+                    $description = '<span class="description">' . wp_kses_post( $args['desc'] ) . '</span>';
2637
+                }
2638
+            }
2639
+
2640
+            return $description;
2641
+        }
2642
+
2643
+        /**
2644
+         * Get the tool tip html.
2645
+         *
2646
+         * @param $tip
2647
+         * @param bool $allow_html
2648
+         *
2649
+         * @return string
2650
+         */
2651
+        function desc_tip( $tip, $allow_html = false ) {
2652
+            if ( $allow_html ) {
2653
+                $tip = $this->sanitize_tooltip( $tip );
2654
+            } else {
2655
+                $tip = esc_attr( $tip );
2656
+            }
2657
+
2658
+            return '<span class="gd-help-tip dashicons dashicons-editor-help" title="' . $tip . '"></span>';
2659
+        }
2660
+
2661
+        /**
2662
+         * Sanitize a string destined to be a tooltip.
2663
+         *
2664
+         * @param string $var
2665
+         *
2666
+         * @return string
2667
+         */
2668
+        public function sanitize_tooltip( $var ) {
2669
+            return htmlspecialchars( wp_kses( html_entity_decode( $var ), array(
2670
+                'br'     => array(),
2671
+                'em'     => array(),
2672
+                'strong' => array(),
2673
+                'small'  => array(),
2674
+                'span'   => array(),
2675
+                'ul'     => array(),
2676
+                'li'     => array(),
2677
+                'ol'     => array(),
2678
+                'p'      => array(),
2679
+            ) ) );
2680
+        }
2681
+
2682
+        /**
2683
+         * Processing widget options on save
2684
+         *
2685
+         * @param array $new_instance The new options
2686
+         * @param array $old_instance The previous options
2687
+         *
2688
+         * @return array
2689
+         * @todo we should add some sanitation here.
2690
+         */
2691
+        public function update( $new_instance, $old_instance ) {
2692
+
2693
+            //save the widget
2694
+            $instance = array_merge( (array) $old_instance, (array) $new_instance );
2695
+
2696
+            // set widget instance
2697
+            $this->instance = $instance;
2698
+
2699
+            if ( empty( $this->arguments ) ) {
2700
+                $this->get_arguments();
2701
+            }
2702
+
2703
+            // check for checkboxes
2704
+            if ( ! empty( $this->arguments ) ) {
2705
+                foreach ( $this->arguments as $argument ) {
2706
+                    if ( isset( $argument['type'] ) && $argument['type'] == 'checkbox' && ! isset( $new_instance[ $argument['name'] ] ) ) {
2707
+                        $instance[ $argument['name'] ] = '0';
2708
+                    }
2709
+                }
2710
+            }
2711
+
2712
+            return $instance;
2713
+        }
2714
+
2715
+        /**
2716
+         * Checks if the current call is a ajax call to get the block content.
2717
+         *
2718
+         * This can be used in your widget to return different content as the block content.
2719
+         *
2720
+         * @since 1.0.3
2721
+         * @return bool
2722
+         */
2723
+        public function is_block_content_call() {
2724
+            $result = false;
2725
+            if ( wp_doing_ajax() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'super_duper_output_shortcode' ) {
2726
+                $result = true;
2727
+            }
2728
+
2729
+            return $result;
2730
+        }
2731
+
2732
+    }
2733 2733
 
2734 2734
 }
2735 2735
\ No newline at end of file
Please login to merge, or discard this patch.
Spacing   +440 added lines, -440 removed lines patch added patch discarded remove patch
@@ -1,9 +1,9 @@  discard block
 block discarded – undo
1 1
 <?php
2
-if ( ! defined( 'ABSPATH' ) ) {
2
+if (!defined('ABSPATH')) {
3 3
 	exit;
4 4
 }
5 5
 
6
-if ( ! class_exists( 'WP_Super_Duper' ) ) {
6
+if (!class_exists('WP_Super_Duper')) {
7 7
 
8 8
 
9 9
 	/**
@@ -36,27 +36,27 @@  discard block
 block discarded – undo
36 36
 		/**
37 37
 		 * Take the array options and use them to build.
38 38
 		 */
39
-		public function __construct( $options ) {
39
+		public function __construct($options) {
40 40
 			global $sd_widgets;
41 41
 
42
-			$sd_widgets[ $options['base_id'] ] = array(
42
+			$sd_widgets[$options['base_id']] = array(
43 43
 				'name'       => $options['name'],
44 44
 				'class_name' => $options['class_name']
45 45
 			);
46
-			$this->base_id                     = $options['base_id'];
46
+			$this->base_id = $options['base_id'];
47 47
 			// lets filter the options before we do anything
48
-			$options       = apply_filters( "wp_super_duper_options", $options );
49
-			$options       = apply_filters( "wp_super_duper_options_{$this->base_id}", $options );
50
-			$options       = $this->add_name_from_key( $options );
48
+			$options       = apply_filters("wp_super_duper_options", $options);
49
+			$options       = apply_filters("wp_super_duper_options_{$this->base_id}", $options);
50
+			$options       = $this->add_name_from_key($options);
51 51
 			$this->options = $options;
52 52
 
53 53
 			$this->base_id   = $options['base_id'];
54
-			$this->arguments = isset( $options['arguments'] ) ? $options['arguments'] : array();
54
+			$this->arguments = isset($options['arguments']) ? $options['arguments'] : array();
55 55
 
56 56
 			// init parent
57
-			parent::__construct( $options['base_id'], $options['name'], $options['widget_ops'] );
57
+			parent::__construct($options['base_id'], $options['name'], $options['widget_ops']);
58 58
 
59
-			if ( isset( $options['class_name'] ) ) {
59
+			if (isset($options['class_name'])) {
60 60
 				// register widget
61 61
 				$this->class_name = $options['class_name'];
62 62
 
@@ -64,54 +64,54 @@  discard block
 block discarded – undo
64 64
 				$this->register_shortcode();
65 65
 
66 66
 				// Fusion Builder (avada) support
67
-				if( function_exists('fusion_builder_map') ){ $this->register_fusion_element(); }
67
+				if (function_exists('fusion_builder_map')) { $this->register_fusion_element(); }
68 68
 
69 69
 				// register block
70
-				add_action( 'admin_enqueue_scripts', array( $this, 'register_block' ) );
70
+				add_action('admin_enqueue_scripts', array($this, 'register_block'));
71 71
 			}
72 72
 
73 73
 			// add the CSS and JS we need ONCE
74 74
 			global $sd_widget_scripts;
75 75
 
76
-			if ( ! $sd_widget_scripts ) {
77
-				wp_add_inline_script( 'admin-widgets', $this->widget_js() );
78
-				wp_add_inline_script( 'customize-controls', $this->widget_js() );
79
-				wp_add_inline_style( 'widgets', $this->widget_css() );
76
+			if (!$sd_widget_scripts) {
77
+				wp_add_inline_script('admin-widgets', $this->widget_js());
78
+				wp_add_inline_script('customize-controls', $this->widget_js());
79
+				wp_add_inline_style('widgets', $this->widget_css());
80 80
 
81 81
 				$sd_widget_scripts = true;
82 82
 
83 83
 				// add shortcode insert button once
84
-				add_action( 'media_buttons', array( $this, 'shortcode_insert_button' ) );
84
+				add_action('media_buttons', array($this, 'shortcode_insert_button'));
85 85
 				// generatepress theme sections compatibility
86
-				if ( function_exists( 'generate_sections_sections_metabox' ) ) {
87
-					add_action( 'generate_sections_metabox', array( $this, 'shortcode_insert_button_script' ) );
86
+				if (function_exists('generate_sections_sections_metabox')) {
87
+					add_action('generate_sections_metabox', array($this, 'shortcode_insert_button_script'));
88 88
 				}
89
-				if ( $this->is_preview() ) {
90
-					add_action( 'wp_footer', array( $this, 'shortcode_insert_button_script' ) );
89
+				if ($this->is_preview()) {
90
+					add_action('wp_footer', array($this, 'shortcode_insert_button_script'));
91 91
 					// this makes the insert button work for elementor
92
-					add_action( 'elementor/editor/after_enqueue_scripts', array(
92
+					add_action('elementor/editor/after_enqueue_scripts', array(
93 93
 						$this,
94 94
 						'shortcode_insert_button_script'
95
-					) ); // for elementor
95
+					)); // for elementor
96 96
 				}
97 97
 				// this makes the insert button work for cornerstone
98
-				add_action('wp_print_footer_scripts',array( __CLASS__, 'maybe_cornerstone_builder' ));
98
+				add_action('wp_print_footer_scripts', array(__CLASS__, 'maybe_cornerstone_builder'));
99 99
 
100
-				add_action( 'wp_ajax_super_duper_get_widget_settings', array( __CLASS__, 'get_widget_settings' ) );
101
-				add_action( 'wp_ajax_super_duper_get_picker', array( __CLASS__, 'get_picker' ) );
100
+				add_action('wp_ajax_super_duper_get_widget_settings', array(__CLASS__, 'get_widget_settings'));
101
+				add_action('wp_ajax_super_duper_get_picker', array(__CLASS__, 'get_picker'));
102 102
 
103 103
 				// add generator text to admin head
104
-				add_action( 'admin_head', array( $this, 'generator' ) );
104
+				add_action('admin_head', array($this, 'generator'));
105 105
 			}
106 106
 
107
-			do_action( 'wp_super_duper_widget_init', $options, $this );
107
+			do_action('wp_super_duper_widget_init', $options, $this);
108 108
 		}
109 109
 
110
-		public function register_fusion_element(){
110
+		public function register_fusion_element() {
111 111
 
112 112
 			$options = $this->options;
113 113
 
114
-			if($this->base_id){
114
+			if ($this->base_id) {
115 115
 
116 116
 				$params = $this->get_fusion_params();
117 117
 
@@ -122,7 +122,7 @@  discard block
 block discarded – undo
122 122
 					'allow_generator' => true,
123 123
 				);
124 124
 
125
-				if(!empty($params)){
125
+				if (!empty($params)) {
126 126
 					$args['params'] = $params;
127 127
 				}
128 128
 
@@ -131,12 +131,12 @@  discard block
 block discarded – undo
131 131
 
132 132
 		}
133 133
 
134
-		public function get_fusion_params(){
134
+		public function get_fusion_params() {
135 135
 			$params = array();
136 136
 			$arguments = $this->get_arguments();
137 137
 
138
-			if(!empty($arguments)){
139
-				foreach($arguments as $key => $val){
138
+			if (!empty($arguments)) {
139
+				foreach ($arguments as $key => $val) {
140 140
 					$param = array();
141 141
 					// type
142 142
 					$param['type'] = str_replace(
@@ -170,19 +170,19 @@  discard block
 block discarded – undo
170 170
 					$param['default'] = isset($val['default']) ? $val['default'] : '';
171 171
 
172 172
 					// Group
173
-					if(isset($val['group'])){
173
+					if (isset($val['group'])) {
174 174
 						$param['group'] = $val['group'];
175 175
 					}
176 176
 
177 177
 					// value
178
-					if($val['type'] == 'checkbox'){
179
-						if(isset($val['default']) && $val['default'] == '0'){
178
+					if ($val['type'] == 'checkbox') {
179
+						if (isset($val['default']) && $val['default'] == '0') {
180 180
 							unset($param['default']);
181 181
 						}
182
-						$param['value'] = array(''=>__("No"),'1'=>__("Yes"));
183
-					}elseif($param['type'] == 'select'){
182
+						$param['value'] = array(''=>__("No"), '1'=>__("Yes"));
183
+					}elseif ($param['type'] == 'select') {
184 184
 						$param['value'] = isset($val['options']) ? $val['options'] : array();
185
-					}else{
185
+					} else {
186 186
 						$param['value'] = isset($val['default']) ? $val['default'] : '';
187 187
 					}
188 188
 
@@ -199,8 +199,8 @@  discard block
 block discarded – undo
199 199
 		/**
200 200
 		 * Maybe insert the shortcode inserter button in the footer if we are in the cornerstone builder
201 201
 		 */
202
-		public static function maybe_cornerstone_builder(){
203
-			if(did_action('cornerstone_before_boot_app')){
202
+		public static function maybe_cornerstone_builder() {
203
+			if (did_action('cornerstone_before_boot_app')) {
204 204
 				self::shortcode_insert_button_script();
205 205
 			}
206 206
 		}
@@ -212,12 +212,12 @@  discard block
 block discarded – undo
212 212
 		 *
213 213
 		 * @return string
214 214
 		 */
215
-		public static function get_picker( $editor_id = '' ) {
215
+		public static function get_picker($editor_id = '') {
216 216
 
217 217
 			ob_start();
218
-			if ( isset( $_POST['editor_id'] ) ) {
219
-				$editor_id = esc_attr( $_POST['editor_id'] );
220
-			} elseif ( isset( $_REQUEST['et_fb'] ) ) {
218
+			if (isset($_POST['editor_id'])) {
219
+				$editor_id = esc_attr($_POST['editor_id']);
220
+			} elseif (isset($_REQUEST['et_fb'])) {
221 221
 				$editor_id = 'main_content_content_vb_tiny_mce';
222 222
 			}
223 223
 
@@ -226,13 +226,13 @@  discard block
 block discarded – undo
226 226
 
227 227
 			<div class="sd-shortcode-left-wrap">
228 228
 				<?php
229
-				ksort( $sd_widgets );
229
+				ksort($sd_widgets);
230 230
 				//				print_r($sd_widgets);exit;
231
-				if ( ! empty( $sd_widgets ) ) {
231
+				if (!empty($sd_widgets)) {
232 232
 					echo '<select class="widefat" onchange="sd_get_shortcode_options(this);">';
233
-					echo "<option>" . __( 'Select shortcode' ) . "</option>";
234
-					foreach ( $sd_widgets as $shortcode => $class ) {
235
-						echo "<option value='" . esc_attr( $shortcode ) . "'>" . esc_attr( $shortcode ) . " (" . esc_attr( $class['name'] ) . ")</option>";
233
+					echo "<option>" . __('Select shortcode') . "</option>";
234
+					foreach ($sd_widgets as $shortcode => $class) {
235
+						echo "<option value='" . esc_attr($shortcode) . "'>" . esc_attr($shortcode) . " (" . esc_attr($class['name']) . ")</option>";
236 236
 					}
237 237
 					echo "</select>";
238 238
 
@@ -245,37 +245,37 @@  discard block
 block discarded – undo
245 245
 			<div class="sd-shortcode-right-wrap">
246 246
 				<textarea id='sd-shortcode-output' disabled></textarea>
247 247
 				<div id='sd-shortcode-output-actions'>
248
-					<?php if ( $editor_id != '' ) { ?>
248
+					<?php if ($editor_id != '') { ?>
249 249
 						<button class="button sd-insert-shortcode-button"
250
-						        onclick="sd_insert_shortcode(<?php if ( ! empty( $editor_id ) ) {
250
+						        onclick="sd_insert_shortcode(<?php if (!empty($editor_id)) {
251 251
 							        echo "'" . $editor_id . "'";
252
-						        } ?>)"><?php _e( 'Insert shortcode' ); ?></button>
252
+						        } ?>)"><?php _e('Insert shortcode'); ?></button>
253 253
 					<?php } ?>
254 254
 					<button class="button"
255
-					        onclick="sd_copy_to_clipboard()"><?php _e( 'Copy shortcode' ); ?></button>
255
+					        onclick="sd_copy_to_clipboard()"><?php _e('Copy shortcode'); ?></button>
256 256
 				</div>
257 257
 			</div>
258 258
 			<?php
259 259
 
260 260
 			$html = ob_get_clean();
261 261
 
262
-			if ( wp_doing_ajax() ) {
262
+			if (wp_doing_ajax()) {
263 263
 				echo $html;
264 264
 				$should_die = true;
265 265
 
266 266
 				// some builder get the editor via ajax so we should not die on those ocasions
267 267
 				$dont_die = array(
268
-					'parent_tag',// WP Bakery
268
+					'parent_tag', // WP Bakery
269 269
 					'avia_request' // enfold
270 270
 				);
271 271
 
272
-				foreach ( $dont_die as $request ) {
273
-					if ( isset( $_REQUEST[ $request ] ) ) {
272
+				foreach ($dont_die as $request) {
273
+					if (isset($_REQUEST[$request])) {
274 274
 						$should_die = false;
275 275
 					}
276 276
 				}
277 277
 
278
-				if ( $should_die ) {
278
+				if ($should_die) {
279 279
 					wp_die();
280 280
 				}
281 281
 
@@ -302,16 +302,16 @@  discard block
 block discarded – undo
302 302
 		public static function get_widget_settings() {
303 303
 			global $sd_widgets;
304 304
 
305
-			$shortcode = isset( $_REQUEST['shortcode'] ) && $_REQUEST['shortcode'] ? sanitize_title_with_dashes( $_REQUEST['shortcode'] ) : '';
306
-			if ( ! $shortcode ) {
305
+			$shortcode = isset($_REQUEST['shortcode']) && $_REQUEST['shortcode'] ? sanitize_title_with_dashes($_REQUEST['shortcode']) : '';
306
+			if (!$shortcode) {
307 307
 				wp_die();
308 308
 			}
309
-			$widget_args = isset( $sd_widgets[ $shortcode ] ) ? $sd_widgets[ $shortcode ] : '';
310
-			if ( ! $widget_args ) {
309
+			$widget_args = isset($sd_widgets[$shortcode]) ? $sd_widgets[$shortcode] : '';
310
+			if (!$widget_args) {
311 311
 				wp_die();
312 312
 			}
313
-			$class_name = isset( $widget_args['class_name'] ) && $widget_args['class_name'] ? $widget_args['class_name'] : '';
314
-			if ( ! $class_name ) {
313
+			$class_name = isset($widget_args['class_name']) && $widget_args['class_name'] ? $widget_args['class_name'] : '';
314
+			if (!$class_name) {
315 315
 				wp_die();
316 316
 			}
317 317
 
@@ -319,7 +319,7 @@  discard block
 block discarded – undo
319 319
 			$widget = new $class_name;
320 320
 
321 321
 			ob_start();
322
-			$widget->form( array() );
322
+			$widget->form(array());
323 323
 			$form = ob_get_clean();
324 324
 			echo "<form id='$shortcode'>" . $form . "<div class=\"widget-control-save\"></div></form>";
325 325
 			echo "<style>" . $widget->widget_css() . "</style>";
@@ -337,9 +337,9 @@  discard block
 block discarded – undo
337 337
 		 * @param string $editor_id Optional. Shortcode editor id. Default null.
338 338
 		 * @param string $insert_shortcode_function Optional. Insert shotcode function. Default null.
339 339
 		 */
340
-		public static function shortcode_insert_button( $editor_id = '', $insert_shortcode_function = '' ) {
340
+		public static function shortcode_insert_button($editor_id = '', $insert_shortcode_function = '') {
341 341
 			global $sd_widgets, $shortcode_insert_button_once;
342
-			if ( $shortcode_insert_button_once ) {
342
+			if ($shortcode_insert_button_once) {
343 343
 				return;
344 344
 			}
345 345
 			add_thickbox();
@@ -349,21 +349,21 @@  discard block
 block discarded – undo
349 349
 			 * Cornerstone makes us play dirty tricks :/
350 350
 			 * All media_buttons are removed via JS unless they are two specific id's so we wrap our content in this ID so it is not removed.
351 351
 			 */
352
-			if ( function_exists( 'cornerstone_plugin_init' ) && ! is_admin() ) {
352
+			if (function_exists('cornerstone_plugin_init') && !is_admin()) {
353 353
 				echo '<span id="insert-media-button">';
354 354
 			}
355 355
 
356
-			echo self::shortcode_button( 'this', 'true' );
356
+			echo self::shortcode_button('this', 'true');
357 357
 
358 358
 			// see opening note
359
-			if ( function_exists( 'cornerstone_plugin_init' ) && ! is_admin() ) {
359
+			if (function_exists('cornerstone_plugin_init') && !is_admin()) {
360 360
 				echo '</span>'; // end #insert-media-button
361 361
 			}
362 362
 
363 363
 			// Add separate script for generatepress theme sections
364
-			if ( function_exists( 'generate_sections_sections_metabox' ) && did_action( 'generate_sections_metabox' ) ) {
364
+			if (function_exists('generate_sections_sections_metabox') && did_action('generate_sections_metabox')) {
365 365
 			} else {
366
-				self::shortcode_insert_button_script( $editor_id, $insert_shortcode_function );
366
+				self::shortcode_insert_button_script($editor_id, $insert_shortcode_function);
367 367
 			}
368 368
 
369 369
 			$shortcode_insert_button_once = true;
@@ -377,12 +377,12 @@  discard block
 block discarded – undo
377 377
 		 *
378 378
 		 * @return mixed
379 379
 		 */
380
-		public static function shortcode_button( $id = '', $search_for_id = '' ) {
380
+		public static function shortcode_button($id = '', $search_for_id = '') {
381 381
 			ob_start();
382 382
 			?>
383 383
 			<span class="sd-lable-shortcode-inserter">
384 384
 				<a onclick="sd_ajax_get_picker(<?php echo $id;
385
-				if ( $search_for_id ) {
385
+				if ($search_for_id) {
386 386
 					echo "," . $search_for_id;
387 387
 				} ?>);" href="#TB_inline?width=100%&height=550&inlineId=super-duper-content-ajaxed"
388 388
 				   class="thickbox button super-duper-content-open" title="Add Shortcode">
@@ -398,7 +398,7 @@  discard block
 block discarded – undo
398 398
 			$html = ob_get_clean();
399 399
 
400 400
 			// remove line breaks so we can use it in js
401
-			return preg_replace( "/\r|\n/", "", trim( $html ) );
401
+			return preg_replace("/\r|\n/", "", trim($html));
402 402
 		}
403 403
 
404 404
 		/**
@@ -456,7 +456,7 @@  discard block
 block discarded – undo
456 456
 						jQuery($this).data('sd-widget-enabled', true);
457 457
 					}
458 458
 
459
-					var $button = '<button title="<?php _e( 'Advanced Settings' );?>" class="button button-primary right sd-advanced-button" onclick="sd_so_toggle_advanced(this);return false;"><i class="fas fa-sliders-h" aria-hidden="true"></i></button>';
459
+					var $button = '<button title="<?php _e('Advanced Settings'); ?>" class="button button-primary right sd-advanced-button" onclick="sd_so_toggle_advanced(this);return false;"><i class="fas fa-sliders-h" aria-hidden="true"></i></button>';
460 460
 					var form = jQuery($this).parents('' + $selector + '');
461 461
 
462 462
 					if (jQuery($this).val() == '1' && jQuery(form).find('.sd-advanced-button').length == 0) {
@@ -493,10 +493,10 @@  discard block
 block discarded – undo
493 493
 			 * We only add the <script> tags for code highlighting, so we strip them from the output.
494 494
 			 */
495 495
 
496
-			return str_replace( array(
496
+			return str_replace(array(
497 497
 				'<script>',
498 498
 				'</script>'
499
-			), '', $output );
499
+			), '', $output);
500 500
 		}
501 501
 
502 502
 		/**
@@ -507,7 +507,7 @@  discard block
 block discarded – undo
507 507
 		 * @param string $editor_id
508 508
 		 * @param string $insert_shortcode_function
509 509
 		 */
510
-		public static function shortcode_insert_button_script( $editor_id = '', $insert_shortcode_function = '' ) {
510
+		public static function shortcode_insert_button_script($editor_id = '', $insert_shortcode_function = '') {
511 511
 			?>
512 512
 			<style>
513 513
 				.sd-shortcode-left-wrap {
@@ -625,22 +625,22 @@  discard block
 block discarded – undo
625 625
 					height: 250px;
626 626
 					width: 100%;
627 627
 				}
628
-				<?php if ( function_exists( 'generate_sections_sections_metabox' ) ) { ?>
628
+				<?php if (function_exists('generate_sections_sections_metabox')) { ?>
629 629
 				.generate-sections-modal #custom-media-buttons > .sd-lable-shortcode-inserter {
630 630
 					display: inline;
631 631
 				}
632 632
 				<?php } ?>
633 633
 			</style>
634 634
 			<?php
635
-			if ( class_exists( 'SiteOrigin_Panels' ) ) {
635
+			if (class_exists('SiteOrigin_Panels')) {
636 636
 				echo "<script>" . self::siteorigin_js() . "</script>";
637 637
 			}
638 638
 			?>
639 639
 			<script>
640 640
 				<?php
641
-				if(! empty( $insert_shortcode_function )){
641
+				if (!empty($insert_shortcode_function)) {
642 642
 					echo $insert_shortcode_function;
643
-				}else{
643
+				} else {
644 644
 
645 645
 				/**
646 646
 				 * Function for super duper insert shortcode.
@@ -653,9 +653,9 @@  discard block
 block discarded – undo
653 653
 					if ($shortcode) {
654 654
 						if (!$editor_id) {
655 655
 							<?php
656
-							if ( isset( $_REQUEST['et_fb'] ) ) {
656
+							if (isset($_REQUEST['et_fb'])) {
657 657
 								echo '$editor_id = "#main_content_content_vb_tiny_mce";';
658
-							} elseif ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) {
658
+							} elseif (isset($_REQUEST['action']) && $_REQUEST['action'] == 'elementor') {
659 659
 								echo '$editor_id = "#elementor-controls .wp-editor-container textarea";';
660 660
 							} else {
661 661
 								echo '$editor_id = "#wp-content-editor-container textarea";';
@@ -740,11 +740,11 @@  discard block
 block discarded – undo
740 740
 							'shortcode': $short_code,
741 741
 							'attributes': 123,
742 742
 							'post_id': 321,
743
-							'_ajax_nonce': '<?php echo wp_create_nonce( 'super_duper_output_shortcode' );?>'
743
+							'_ajax_nonce': '<?php echo wp_create_nonce('super_duper_output_shortcode'); ?>'
744 744
 						};
745 745
 
746 746
 						if (typeof ajaxurl === 'undefined') {
747
-							var ajaxurl = "<?php echo admin_url( 'admin-ajax.php' );?>";
747
+							var ajaxurl = "<?php echo admin_url('admin-ajax.php'); ?>";
748 748
 						}
749 749
 
750 750
 						jQuery.post(ajaxurl, data, function (response) {
@@ -953,11 +953,11 @@  discard block
 block discarded – undo
953 953
 					var data = {
954 954
 						'action': 'super_duper_get_picker',
955 955
 						'editor_id': $id,
956
-						'_ajax_nonce': '<?php echo wp_create_nonce( 'super_duper_picker' );?>'
956
+						'_ajax_nonce': '<?php echo wp_create_nonce('super_duper_picker'); ?>'
957 957
 					};
958 958
 
959 959
 					if (!ajaxurl) {
960
-						var ajaxurl = "<?php echo admin_url( 'admin-ajax.php' ); ?>";
960
+						var ajaxurl = "<?php echo admin_url('admin-ajax.php'); ?>";
961 961
 					}
962 962
 
963 963
 					jQuery.post(ajaxurl, data, function (response) {
@@ -978,9 +978,9 @@  discard block
 block discarded – undo
978 978
 				 */
979 979
 				function sd_shortcode_button($id) {
980 980
 					if ($id) {
981
-						return '<?php echo self::shortcode_button( "\\''+\$id+'\\'" );?>';
981
+						return '<?php echo self::shortcode_button("\\''+\$id+'\\'"); ?>';
982 982
 					} else {
983
-						return '<?php echo self::shortcode_button();?>';
983
+						return '<?php echo self::shortcode_button(); ?>';
984 984
 					}
985 985
 				}
986 986
 
@@ -1036,10 +1036,10 @@  discard block
 block discarded – undo
1036 1036
 			 * We only add the <script> tags for code highlighting, so we strip them from the output.
1037 1037
 			 */
1038 1038
 
1039
-			return str_replace( array(
1039
+			return str_replace(array(
1040 1040
 				'<style>',
1041 1041
 				'</style>'
1042
-			), '', $output );
1042
+			), '', $output);
1043 1043
 		}
1044 1044
 
1045 1045
 		/**
@@ -1109,7 +1109,7 @@  discard block
 block discarded – undo
1109 1109
 						jQuery($this).data('sd-widget-enabled', true);
1110 1110
 					}
1111 1111
 
1112
-					var $button = '<button title="<?php _e( 'Advanced Settings' );?>" class="button button-primary right sd-advanced-button" onclick="sd_toggle_advanced(this);return false;"><span class="dashicons dashicons-admin-settings" style="width: 28px;font-size: 28px;"></span></button>';
1112
+					var $button = '<button title="<?php _e('Advanced Settings'); ?>" class="button button-primary right sd-advanced-button" onclick="sd_toggle_advanced(this);return false;"><span class="dashicons dashicons-admin-settings" style="width: 28px;font-size: 28px;"></span></button>';
1113 1113
 					var form = jQuery($this).parents('' + $selector + '');
1114 1114
 
1115 1115
 					if (jQuery($this).val() == '1' && jQuery(form).find('.sd-advanced-button').length == 0) {
@@ -1201,7 +1201,7 @@  discard block
 block discarded – undo
1201 1201
 					});
1202 1202
 
1203 1203
 				}
1204
-				<?php do_action( 'wp_super_duper_widget_js', $this ); ?>
1204
+				<?php do_action('wp_super_duper_widget_js', $this); ?>
1205 1205
 			</script>
1206 1206
 			<?php
1207 1207
 			$output = ob_get_clean();
@@ -1210,10 +1210,10 @@  discard block
 block discarded – undo
1210 1210
 			 * We only add the <script> tags for code highlighting, so we strip them from the output.
1211 1211
 			 */
1212 1212
 
1213
-			return str_replace( array(
1213
+			return str_replace(array(
1214 1214
 				'<script>',
1215 1215
 				'</script>'
1216
-			), '', $output );
1216
+			), '', $output);
1217 1217
 		}
1218 1218
 
1219 1219
 
@@ -1224,14 +1224,14 @@  discard block
 block discarded – undo
1224 1224
 		 *
1225 1225
 		 * @return mixed
1226 1226
 		 */
1227
-		private function add_name_from_key( $options, $arguments = false ) {
1228
-			if ( ! empty( $options['arguments'] ) ) {
1229
-				foreach ( $options['arguments'] as $key => $val ) {
1230
-					$options['arguments'][ $key ]['name'] = $key;
1227
+		private function add_name_from_key($options, $arguments = false) {
1228
+			if (!empty($options['arguments'])) {
1229
+				foreach ($options['arguments'] as $key => $val) {
1230
+					$options['arguments'][$key]['name'] = $key;
1231 1231
 				}
1232
-			} elseif ( $arguments && is_array( $options ) && ! empty( $options ) ) {
1233
-				foreach ( $options as $key => $val ) {
1234
-					$options[ $key ]['name'] = $key;
1232
+			} elseif ($arguments && is_array($options) && !empty($options)) {
1233
+				foreach ($options as $key => $val) {
1234
+					$options[$key]['name'] = $key;
1235 1235
 				}
1236 1236
 			}
1237 1237
 
@@ -1244,8 +1244,8 @@  discard block
 block discarded – undo
1244 1244
 		 * @since 1.0.0
1245 1245
 		 */
1246 1246
 		public function register_shortcode() {
1247
-			add_shortcode( $this->base_id, array( $this, 'shortcode_output' ) );
1248
-			add_action( 'wp_ajax_super_duper_output_shortcode', array( __CLASS__, 'render_shortcode' ) );
1247
+			add_shortcode($this->base_id, array($this, 'shortcode_output'));
1248
+			add_action('wp_ajax_super_duper_output_shortcode', array(__CLASS__, 'render_shortcode'));
1249 1249
 		}
1250 1250
 
1251 1251
 		/**
@@ -1255,33 +1255,33 @@  discard block
 block discarded – undo
1255 1255
 		 */
1256 1256
 		public static function render_shortcode() {
1257 1257
 
1258
-			check_ajax_referer( 'super_duper_output_shortcode', '_ajax_nonce', true );
1259
-			if ( ! current_user_can( 'manage_options' ) ) {
1258
+			check_ajax_referer('super_duper_output_shortcode', '_ajax_nonce', true);
1259
+			if (!current_user_can('manage_options')) {
1260 1260
 				wp_die();
1261 1261
 			}
1262 1262
 
1263 1263
 			// we might need the $post value here so lets set it.
1264
-			if ( isset( $_POST['post_id'] ) && $_POST['post_id'] ) {
1265
-				$post_obj = get_post( absint( $_POST['post_id'] ) );
1266
-				if ( ! empty( $post_obj ) && empty( $post ) ) {
1264
+			if (isset($_POST['post_id']) && $_POST['post_id']) {
1265
+				$post_obj = get_post(absint($_POST['post_id']));
1266
+				if (!empty($post_obj) && empty($post)) {
1267 1267
 					global $post;
1268 1268
 					$post = $post_obj;
1269 1269
 				}
1270 1270
 			}
1271 1271
 
1272
-			if ( isset( $_POST['shortcode'] ) && $_POST['shortcode'] ) {
1273
-				$shortcode_name   = sanitize_title_with_dashes( $_POST['shortcode'] );
1274
-				$attributes_array = isset( $_POST['attributes'] ) && $_POST['attributes'] ? $_POST['attributes'] : array();
1272
+			if (isset($_POST['shortcode']) && $_POST['shortcode']) {
1273
+				$shortcode_name   = sanitize_title_with_dashes($_POST['shortcode']);
1274
+				$attributes_array = isset($_POST['attributes']) && $_POST['attributes'] ? $_POST['attributes'] : array();
1275 1275
 				$attributes       = '';
1276
-				if ( ! empty( $attributes_array ) ) {
1277
-					foreach ( $attributes_array as $key => $value ) {
1278
-						$attributes .= " " . sanitize_title_with_dashes( $key ) . "='" . wp_slash( $value ) . "' ";
1276
+				if (!empty($attributes_array)) {
1277
+					foreach ($attributes_array as $key => $value) {
1278
+						$attributes .= " " . sanitize_title_with_dashes($key) . "='" . wp_slash($value) . "' ";
1279 1279
 					}
1280 1280
 				}
1281 1281
 
1282 1282
 				$shortcode = "[" . $shortcode_name . " " . $attributes . "]";
1283 1283
 
1284
-				echo do_shortcode( $shortcode );
1284
+				echo do_shortcode($shortcode);
1285 1285
 
1286 1286
 			}
1287 1287
 			wp_die();
@@ -1295,42 +1295,42 @@  discard block
 block discarded – undo
1295 1295
 		 *
1296 1296
 		 * @return string
1297 1297
 		 */
1298
-		public function shortcode_output( $args = array(), $content = '' ) {
1299
-			$args = self::argument_values( $args );
1298
+		public function shortcode_output($args = array(), $content = '') {
1299
+			$args = self::argument_values($args);
1300 1300
 
1301 1301
 			// add extra argument so we know its a output to gutenberg
1302 1302
 			//$args
1303
-			$args = $this->string_to_bool( $args );
1303
+			$args = $this->string_to_bool($args);
1304 1304
 
1305 1305
 			// if we have a enclosed shortcode we add it to the special `html` argument
1306
-			if(!empty($content)){
1306
+			if (!empty($content)) {
1307 1307
 				$args['html'] = $content;
1308 1308
 			}
1309 1309
 
1310
-			$class = isset( $this->options['widget_ops']['classname'] ) ? esc_attr( $this->options['widget_ops']['classname'] ) : '';
1310
+			$class = isset($this->options['widget_ops']['classname']) ? esc_attr($this->options['widget_ops']['classname']) : '';
1311 1311
 
1312
-			$class = apply_filters( 'wp_super_duper_div_classname', $class, $args, $this );
1313
-			$class = apply_filters( 'wp_super_duper_div_classname_' . $this->base_id, $class, $args, $this );
1312
+			$class = apply_filters('wp_super_duper_div_classname', $class, $args, $this);
1313
+			$class = apply_filters('wp_super_duper_div_classname_' . $this->base_id, $class, $args, $this);
1314 1314
 
1315
-			$attrs = apply_filters( 'wp_super_duper_div_attrs', '', $args, $this );
1316
-			$attrs = apply_filters( 'wp_super_duper_div_attrs_' . $this->base_id, '', $args, $this ); //@todo this does not seem right @kiran?
1315
+			$attrs = apply_filters('wp_super_duper_div_attrs', '', $args, $this);
1316
+			$attrs = apply_filters('wp_super_duper_div_attrs_' . $this->base_id, '', $args, $this); //@todo this does not seem right @kiran?
1317 1317
 
1318 1318
 			$shortcode_args = array();
1319 1319
 			$output         = '';
1320
-			$no_wrap        = isset( $this->options['no_wrap'] ) && $this->options['no_wrap'] ? true : false;
1321
-			if( isset( $args['no_wrap'] ) && $args['no_wrap'] ){ $no_wrap = true; }
1322
-			$main_content   = $this->output( $args, $shortcode_args, $content );
1323
-			if ( $main_content && ! $no_wrap ) {
1320
+			$no_wrap        = isset($this->options['no_wrap']) && $this->options['no_wrap'] ? true : false;
1321
+			if (isset($args['no_wrap']) && $args['no_wrap']) { $no_wrap = true; }
1322
+			$main_content   = $this->output($args, $shortcode_args, $content);
1323
+			if ($main_content && !$no_wrap) {
1324 1324
 				// wrap the shortcode in a div with the same class as the widget
1325 1325
 				$output .= '<div class="' . $class . '" ' . $attrs . '>';
1326
-				if ( ! empty( $args['title'] ) ) {
1326
+				if (!empty($args['title'])) {
1327 1327
 					// if its a shortcode and there is a title try to grab the title wrappers
1328
-					$shortcode_args = array( 'before_title' => '', 'after_title' => '' );
1329
-					if ( empty( $instance ) ) {
1328
+					$shortcode_args = array('before_title' => '', 'after_title' => '');
1329
+					if (empty($instance)) {
1330 1330
 						global $wp_registered_sidebars;
1331
-						if ( ! empty( $wp_registered_sidebars ) ) {
1332
-							foreach ( $wp_registered_sidebars as $sidebar ) {
1333
-								if ( ! empty( $sidebar['before_title'] ) ) {
1331
+						if (!empty($wp_registered_sidebars)) {
1332
+							foreach ($wp_registered_sidebars as $sidebar) {
1333
+								if (!empty($sidebar['before_title'])) {
1334 1334
 									$shortcode_args['before_title'] = $sidebar['before_title'];
1335 1335
 									$shortcode_args['after_title']  = $sidebar['after_title'];
1336 1336
 									break;
@@ -1338,20 +1338,20 @@  discard block
 block discarded – undo
1338 1338
 							}
1339 1339
 						}
1340 1340
 					}
1341
-					$output .= $this->output_title( $shortcode_args, $args );
1341
+					$output .= $this->output_title($shortcode_args, $args);
1342 1342
 				}
1343 1343
 				$output .= $main_content;
1344 1344
 				$output .= '</div>';
1345
-			} elseif ( $main_content && $no_wrap ) {
1345
+			} elseif ($main_content && $no_wrap) {
1346 1346
 				$output .= $main_content;
1347 1347
 			}
1348 1348
 
1349 1349
 			// if preview show a placeholder if empty
1350
-			if ( $this->is_preview() && $output == '' ) {
1351
-				$output = $this->preview_placeholder_text( "[{" . $this->base_id . "}]" );
1350
+			if ($this->is_preview() && $output == '') {
1351
+				$output = $this->preview_placeholder_text("[{" . $this->base_id . "}]");
1352 1352
 			}
1353 1353
 
1354
-			return apply_filters( 'wp_super_duper_widget_output', $output, $args, $shortcode_args, $this );
1354
+			return apply_filters('wp_super_duper_widget_output', $output, $args, $shortcode_args, $this);
1355 1355
 		}
1356 1356
 
1357 1357
 		/**
@@ -1361,8 +1361,8 @@  discard block
 block discarded – undo
1361 1361
 		 *
1362 1362
 		 * @return string
1363 1363
 		 */
1364
-		public function preview_placeholder_text( $name = '' ) {
1365
-			return "<div style='background:#0185ba33;padding: 10px;border: 4px #ccc dashed;'>" . sprintf( __( 'Placeholder for: %s' ), $name ) . "</div>";
1364
+		public function preview_placeholder_text($name = '') {
1365
+			return "<div style='background:#0185ba33;padding: 10px;border: 4px #ccc dashed;'>" . sprintf(__('Placeholder for: %s'), $name) . "</div>";
1366 1366
 		}
1367 1367
 
1368 1368
 		/**
@@ -1372,13 +1372,13 @@  discard block
 block discarded – undo
1372 1372
 		 *
1373 1373
 		 * @return mixed
1374 1374
 		 */
1375
-		public function string_to_bool( $options ) {
1375
+		public function string_to_bool($options) {
1376 1376
 			// convert bool strings to booleans
1377
-			foreach ( $options as $key => $val ) {
1378
-				if ( $val == 'false' ) {
1379
-					$options[ $key ] = false;
1380
-				} elseif ( $val == 'true' ) {
1381
-					$options[ $key ] = true;
1377
+			foreach ($options as $key => $val) {
1378
+				if ($val == 'false') {
1379
+					$options[$key] = false;
1380
+				} elseif ($val == 'true') {
1381
+					$options[$key] = true;
1382 1382
 				}
1383 1383
 			}
1384 1384
 
@@ -1394,27 +1394,27 @@  discard block
 block discarded – undo
1394 1394
 		 *
1395 1395
 		 * @return array
1396 1396
 		 */
1397
-		public function argument_values( $instance ) {
1397
+		public function argument_values($instance) {
1398 1398
 			$argument_values = array();
1399 1399
 
1400 1400
 			// set widget instance
1401 1401
 			$this->instance = $instance;
1402 1402
 
1403
-			if ( empty( $this->arguments ) ) {
1403
+			if (empty($this->arguments)) {
1404 1404
 				$this->arguments = $this->get_arguments();
1405 1405
 			}
1406 1406
 
1407
-			if ( ! empty( $this->arguments ) ) {
1408
-				foreach ( $this->arguments as $key => $args ) {
1407
+			if (!empty($this->arguments)) {
1408
+				foreach ($this->arguments as $key => $args) {
1409 1409
 					// set the input name from the key
1410 1410
 					$args['name'] = $key;
1411 1411
 					//
1412
-					$argument_values[ $key ] = isset( $instance[ $key ] ) ? $instance[ $key ] : '';
1413
-					if($args['type']=='checkbox' && $argument_values[ $key ] == ''){
1412
+					$argument_values[$key] = isset($instance[$key]) ? $instance[$key] : '';
1413
+					if ($args['type'] == 'checkbox' && $argument_values[$key] == '') {
1414 1414
 						// don't set default for an empty checkbox
1415 1415
 					}
1416
-					elseif ( $argument_values[ $key ] == '' && isset( $args['default'] ) ) {
1417
-						$argument_values[ $key ] = $args['default'];
1416
+					elseif ($argument_values[$key] == '' && isset($args['default'])) {
1417
+						$argument_values[$key] = $args['default'];
1418 1418
 					}
1419 1419
 				}
1420 1420
 			}
@@ -1441,12 +1441,12 @@  discard block
 block discarded – undo
1441 1441
 		 * @return array Get arguments.
1442 1442
 		 */
1443 1443
 		public function get_arguments() {
1444
-			if ( empty( $this->arguments ) ) {
1444
+			if (empty($this->arguments)) {
1445 1445
 				$this->arguments = $this->set_arguments();
1446 1446
 			}
1447 1447
 
1448
-			$this->arguments = apply_filters( 'wp_super_duper_arguments', $this->arguments, $this->options, $this->instance );
1449
-			$this->arguments = $this->add_name_from_key( $this->arguments, true );
1448
+			$this->arguments = apply_filters('wp_super_duper_arguments', $this->arguments, $this->options, $this->instance);
1449
+			$this->arguments = $this->add_name_from_key($this->arguments, true);
1450 1450
 
1451 1451
 			return $this->arguments;
1452 1452
 		}
@@ -1458,7 +1458,7 @@  discard block
 block discarded – undo
1458 1458
 		 * @param array $widget_args
1459 1459
 		 * @param string $content
1460 1460
 		 */
1461
-		public function output( $args = array(), $widget_args = array(), $content = '' ) {
1461
+		public function output($args = array(), $widget_args = array(), $content = '') {
1462 1462
 
1463 1463
 		}
1464 1464
 
@@ -1466,10 +1466,10 @@  discard block
 block discarded – undo
1466 1466
 		 * Add the dynamic block code inline when the wp-block in enqueued.
1467 1467
 		 */
1468 1468
 		public function register_block() {
1469
-			wp_add_inline_script( 'wp-blocks', $this->block() );
1470
-			if ( class_exists( 'SiteOrigin_Panels' ) ) {
1469
+			wp_add_inline_script('wp-blocks', $this->block());
1470
+			if (class_exists('SiteOrigin_Panels')) {
1471 1471
 
1472
-				wp_add_inline_script( 'wp-blocks', $this->siteorigin_js() );
1472
+				wp_add_inline_script('wp-blocks', $this->siteorigin_js());
1473 1473
 
1474 1474
 			}
1475 1475
 		}
@@ -1484,13 +1484,13 @@  discard block
 block discarded – undo
1484 1484
 			$show      = false;
1485 1485
 			$arguments = $this->arguments;
1486 1486
 
1487
-			if ( empty( $arguments ) ) {
1487
+			if (empty($arguments)) {
1488 1488
 				$arguments = $this->get_arguments();
1489 1489
 			}
1490 1490
 
1491
-			if ( ! empty( $arguments ) ) {
1492
-				foreach ( $arguments as $argument ) {
1493
-					if ( isset( $argument['advanced'] ) && $argument['advanced'] ) {
1491
+			if (!empty($arguments)) {
1492
+				foreach ($arguments as $argument) {
1493
+					if (isset($argument['advanced']) && $argument['advanced']) {
1494 1494
 						$show = true;
1495 1495
 						break; // no need to continue if we know we have it
1496 1496
 					}
@@ -1509,15 +1509,15 @@  discard block
 block discarded – undo
1509 1509
 
1510 1510
 			$url = $this->url;
1511 1511
 
1512
-			if(!$url){
1512
+			if (!$url) {
1513 1513
 				// check if we are inside a plugin
1514
-				$file_dir = str_replace("/includes","", dirname( __FILE__ ));
1514
+				$file_dir = str_replace("/includes", "", dirname(__FILE__));
1515 1515
 
1516
-				$dir_parts = explode("/wp-content/",$file_dir);
1517
-				$url_parts = explode("/wp-content/",plugins_url());
1516
+				$dir_parts = explode("/wp-content/", $file_dir);
1517
+				$url_parts = explode("/wp-content/", plugins_url());
1518 1518
 
1519
-				if(!empty($url_parts[0]) && !empty($dir_parts[1])){
1520
-					$url = trailingslashit( $url_parts[0]."/wp-content/".$dir_parts[1] );
1519
+				if (!empty($url_parts[0]) && !empty($dir_parts[1])) {
1520
+					$url = trailingslashit($url_parts[0] . "/wp-content/" . $dir_parts[1]);
1521 1521
 					$this->url = $url;
1522 1522
 				}
1523 1523
 			}
@@ -1536,46 +1536,46 @@  discard block
 block discarded – undo
1536 1536
 		 * @since 1.1.0
1537 1537
 		 * @return string
1538 1538
 		 */
1539
-		public function get_block_icon($icon){
1539
+		public function get_block_icon($icon) {
1540 1540
 
1541 1541
 			// check if we have a Font Awesome icon
1542 1542
 			$fa_type = '';
1543
-			if(substr( $icon, 0, 7 ) === "fas fa-"){
1543
+			if (substr($icon, 0, 7) === "fas fa-") {
1544 1544
 				$fa_type = 'solid';
1545
-			}elseif(substr( $icon, 0, 7 ) === "far fa-"){
1545
+			}elseif (substr($icon, 0, 7) === "far fa-") {
1546 1546
 				$fa_type = 'regular';
1547
-			}elseif(substr( $icon, 0, 7 ) === "fab fa-"){
1547
+			}elseif (substr($icon, 0, 7) === "fab fa-") {
1548 1548
 				$fa_type = 'brands';
1549
-			}else{
1550
-				$icon = "'".$icon."'";
1549
+			} else {
1550
+				$icon = "'" . $icon . "'";
1551 1551
 			}
1552 1552
 
1553 1553
 			// set the icon if we found one
1554
-			if($fa_type){
1555
-				$fa_icon = str_replace(array("fas fa-","far fa-","fab fa-"),"",$icon);
1556
-				$icon  = "el('svg',{width: 20, height: 20, viewBox: '0 0 20 20'},el('use', {'xlink:href': '".$this->get_url()."icons/".$fa_type.".svg#".$fa_icon."','href': '".$this->get_url()."icons/".$fa_type.".svg#".$fa_icon."'}))";
1554
+			if ($fa_type) {
1555
+				$fa_icon = str_replace(array("fas fa-", "far fa-", "fab fa-"), "", $icon);
1556
+				$icon = "el('svg',{width: 20, height: 20, viewBox: '0 0 20 20'},el('use', {'xlink:href': '" . $this->get_url() . "icons/" . $fa_type . ".svg#" . $fa_icon . "','href': '" . $this->get_url() . "icons/" . $fa_type . ".svg#" . $fa_icon . "'}))";
1557 1557
 			}
1558 1558
 
1559 1559
 			return $icon;
1560 1560
 		}
1561 1561
 
1562
-		public function group_arguments($arguments){
1562
+		public function group_arguments($arguments) {
1563 1563
 //			echo '###';print_r($arguments);
1564
-			if(!empty($arguments)){
1564
+			if (!empty($arguments)) {
1565 1565
 				$temp_arguments = array();
1566 1566
 				$general = __("General");
1567 1567
 				$add_sections = false;
1568
-				foreach($arguments as $key => $args){
1569
-					if(isset($args['group'])){
1568
+				foreach ($arguments as $key => $args) {
1569
+					if (isset($args['group'])) {
1570 1570
 						$temp_arguments[$args['group']][$key] = $args;
1571 1571
 						$add_sections = true;
1572
-					}else{
1572
+					} else {
1573 1573
 						$temp_arguments[$general][$key] = $args;
1574 1574
 					}
1575 1575
 				}
1576 1576
 
1577 1577
 				// only add sections if more than one
1578
-				if($add_sections){
1578
+				if ($add_sections) {
1579 1579
 					$arguments = $temp_arguments;
1580 1580
 				}
1581 1581
 			}
@@ -1627,28 +1627,28 @@  discard block
 block discarded – undo
1627 1627
 					 * @return {?WPBlock}          The block, if it has been successfully
1628 1628
 					 *                             registered; otherwise `undefined`.
1629 1629
 					 */
1630
-					registerBlockType('<?php echo str_replace( "_", "-", sanitize_title_with_dashes( $this->options['textdomain'] ) . '/' . sanitize_title_with_dashes( $this->options['class_name'] ) );  ?>', { // Block name. Block names must be string that contains a namespace prefix. Example: my-plugin/my-custom-block.
1631
-						title: '<?php echo $this->options['name'];?>', // Block title.
1632
-						description: '<?php echo esc_attr( $this->options['widget_ops']['description'] )?>', // Block title.
1633
-						icon: <?php echo $this->get_block_icon($this->options['block-icon']);?>,//'<?php echo isset( $this->options['block-icon'] ) ? esc_attr( $this->options['block-icon'] ) : 'shield-alt';?>', // Block icon from Dashicons → https://developer.wordpress.org/resource/dashicons/.
1630
+					registerBlockType('<?php echo str_replace("_", "-", sanitize_title_with_dashes($this->options['textdomain']) . '/' . sanitize_title_with_dashes($this->options['class_name'])); ?>', { // Block name. Block names must be string that contains a namespace prefix. Example: my-plugin/my-custom-block.
1631
+						title: '<?php echo $this->options['name']; ?>', // Block title.
1632
+						description: '<?php echo esc_attr($this->options['widget_ops']['description'])?>', // Block title.
1633
+						icon: <?php echo $this->get_block_icon($this->options['block-icon']); ?>,//'<?php echo isset($this->options['block-icon']) ? esc_attr($this->options['block-icon']) : 'shield-alt'; ?>', // Block icon from Dashicons → https://developer.wordpress.org/resource/dashicons/.
1634 1634
 						supports: {
1635 1635
 							<?php
1636
-							if(isset($this->options['block-supports'])){
1637
-								echo $this->array_to_attributes( $this->options['block-supports'] );
1636
+							if (isset($this->options['block-supports'])) {
1637
+								echo $this->array_to_attributes($this->options['block-supports']);
1638 1638
 							}
1639 1639
 							?>
1640 1640
 						},
1641
-						category: '<?php echo isset( $this->options['block-category'] ) ? esc_attr( $this->options['block-category'] ) : 'common';?>', // Block category — Group blocks together based on common traits E.g. common, formatting, layout widgets, embed.
1642
-						<?php if ( isset( $this->options['block-keywords'] ) ) {
1641
+						category: '<?php echo isset($this->options['block-category']) ? esc_attr($this->options['block-category']) : 'common'; ?>', // Block category — Group blocks together based on common traits E.g. common, formatting, layout widgets, embed.
1642
+						<?php if (isset($this->options['block-keywords'])) {
1643 1643
 						echo "keywords : " . $this->options['block-keywords'] . ",";
1644 1644
 					}?>
1645 1645
 
1646 1646
 						<?php
1647 1647
 
1648 1648
 						// maybe set no_wrap
1649
-						$no_wrap        = isset( $this->options['no_wrap'] ) && $this->options['no_wrap'] ? true : false;
1650
-						if( isset( $this->arguments['no_wrap'] ) && $this->arguments['no_wrap'] ){ $no_wrap = true; }
1651
-						if( $no_wrap ){ $this->options['block-wrap'] = ''; }
1649
+						$no_wrap = isset($this->options['no_wrap']) && $this->options['no_wrap'] ? true : false;
1650
+						if (isset($this->arguments['no_wrap']) && $this->arguments['no_wrap']) { $no_wrap = true; }
1651
+						if ($no_wrap) { $this->options['block-wrap'] = ''; }
1652 1652
 
1653 1653
 						$show_advanced = $this->block_show_advanced();
1654 1654
 
@@ -1659,10 +1659,10 @@  discard block
 block discarded – undo
1659 1659
 						echo "  html: false";
1660 1660
 						echo "},";*/
1661 1661
 
1662
-						if ( ! empty( $this->arguments ) ) {
1662
+						if (!empty($this->arguments)) {
1663 1663
 							echo "attributes : {";
1664 1664
 
1665
-							if ( $show_advanced ) {
1665
+							if ($show_advanced) {
1666 1666
 								echo "show_advanced: {";
1667 1667
 								echo "	type: 'boolean',";
1668 1668
 								echo "  default: false,";
@@ -1670,41 +1670,41 @@  discard block
 block discarded – undo
1670 1670
 							}
1671 1671
 
1672 1672
 							// block wrap element
1673
-							if ( !empty( $this->options['block-wrap'] ) ) { //@todo we should validate this?
1673
+							if (!empty($this->options['block-wrap'])) { //@todo we should validate this?
1674 1674
 								echo "block_wrap: {";
1675 1675
 								echo "	type: 'string',";
1676
-								echo "  default: '" . esc_attr( $this->options['block-wrap'] ) . "',";
1676
+								echo "  default: '" . esc_attr($this->options['block-wrap']) . "',";
1677 1677
 								echo "},";
1678 1678
 							}
1679 1679
 
1680
-							foreach ( $this->arguments as $key => $args ) {
1680
+							foreach ($this->arguments as $key => $args) {
1681 1681
 
1682 1682
 								// set if we should show alignment
1683
-								if ( $key == 'alignment' ) {
1683
+								if ($key == 'alignment') {
1684 1684
 									$show_alignment = true;
1685 1685
 								}
1686 1686
 
1687 1687
 								$extra = '';
1688 1688
 
1689
-								if ( $args['type'] == 'checkbox' ) {
1689
+								if ($args['type'] == 'checkbox') {
1690 1690
 									$type    = 'boolean';
1691
-									$default = isset( $args['default'] ) && $args['default'] ? 'true' : 'false';
1692
-								} elseif ( $args['type'] == 'number' ) {
1691
+									$default = isset($args['default']) && $args['default'] ? 'true' : 'false';
1692
+								} elseif ($args['type'] == 'number') {
1693 1693
 									$type    = 'number';
1694
-									$default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
1695
-								} elseif ( $args['type'] == 'select' && ! empty( $args['multiple'] ) ) {
1694
+									$default = isset($args['default']) ? "'" . $args['default'] . "'" : "''";
1695
+								} elseif ($args['type'] == 'select' && !empty($args['multiple'])) {
1696 1696
 									$type = 'array';
1697
-									if ( is_array( $args['default'] ) ) {
1698
-										$default = isset( $args['default'] ) ? "['" . implode( "','", $args['default'] ) . "']" : "[]";
1697
+									if (is_array($args['default'])) {
1698
+										$default = isset($args['default']) ? "['" . implode("','", $args['default']) . "']" : "[]";
1699 1699
 									} else {
1700
-										$default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
1700
+										$default = isset($args['default']) ? "'" . $args['default'] . "'" : "''";
1701 1701
 									}
1702
-								} elseif ( $args['type'] == 'multiselect' ) {
1702
+								} elseif ($args['type'] == 'multiselect') {
1703 1703
 									$type    = 'array';
1704
-									$default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
1704
+									$default = isset($args['default']) ? "'" . $args['default'] . "'" : "''";
1705 1705
 								} else {
1706 1706
 									$type    = 'string';
1707
-									$default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
1707
+									$default = isset($args['default']) ? "'" . $args['default'] . "'" : "''";
1708 1708
 								}
1709 1709
 								echo $key . " : {";
1710 1710
 								echo "type : '$type',";
@@ -1735,12 +1735,12 @@  discard block
 block discarded – undo
1735 1735
 									is_fetching = true;
1736 1736
 									var data = {
1737 1737
 										'action': 'super_duper_output_shortcode',
1738
-										'shortcode': '<?php echo $this->options['base_id'];?>',
1738
+										'shortcode': '<?php echo $this->options['base_id']; ?>',
1739 1739
 										'attributes': props.attributes,
1740
-										'post_id': <?php global $post; if ( isset( $post->ID ) ) {
1740
+										'post_id': <?php global $post; if (isset($post->ID)) {
1741 1741
 										echo $post->ID;
1742 1742
 									}?>,
1743
-										'_ajax_nonce': '<?php echo wp_create_nonce( 'super_duper_output_shortcode' );?>'
1743
+										'_ajax_nonce': '<?php echo wp_create_nonce('super_duper_output_shortcode'); ?>'
1744 1744
 									};
1745 1745
 
1746 1746
 									jQuery.post(ajaxurl, data, function (response) {
@@ -1749,7 +1749,7 @@  discard block
 block discarded – undo
1749 1749
 
1750 1750
 										// if the content is empty then we place some placeholder text
1751 1751
 										if (env == '') {
1752
-											env = "<div style='background:#0185ba33;padding: 10px;border: 4px #ccc dashed;'>" + "<?php _e( 'Placeholder for: ' );?>" + props.name + "</div>";
1752
+											env = "<div style='background:#0185ba33;padding: 10px;border: 4px #ccc dashed;'>" + "<?php _e('Placeholder for: '); ?>" + props.name + "</div>";
1753 1753
 										}
1754 1754
 
1755 1755
 										props.setAttributes({content: env});
@@ -1768,7 +1768,7 @@  discard block
 block discarded – undo
1768 1768
 
1769 1769
 								el(wp.blockEditor.BlockControls, {key: 'controls'},
1770 1770
 
1771
-									<?php if($show_alignment){?>
1771
+									<?php if ($show_alignment) {?>
1772 1772
 									el(
1773 1773
 										wp.blockEditor.AlignmentToolbar,
1774 1774
 										{
@@ -1786,9 +1786,9 @@  discard block
 block discarded – undo
1786 1786
 
1787 1787
 									<?php
1788 1788
 
1789
-									if(! empty( $this->arguments )){
1789
+									if (!empty($this->arguments)) {
1790 1790
 
1791
-									if ( $show_advanced ) {
1791
+									if ($show_advanced) {
1792 1792
 									?>
1793 1793
 									el(
1794 1794
 										wp.components.ToggleControl,
@@ -1810,17 +1810,17 @@  discard block
 block discarded – undo
1810 1810
 									$has_sections = $arguments == $this->arguments ? false : true;
1811 1811
 
1812 1812
 
1813
-									if($has_sections){
1813
+									if ($has_sections) {
1814 1814
 									$panel_count = 0;
1815
-									foreach($arguments as $key => $args){
1815
+									foreach ($arguments as $key => $args) {
1816 1816
 									?>
1817 1817
 									el(wp.components.PanelBody, {
1818 1818
 											title: '<?php esc_attr_e($key); ?>',
1819
-											initialOpen: <?php if($panel_count){echo "false";}else{echo "true";}?>
1819
+											initialOpen: <?php if ($panel_count) {echo "false"; } else {echo "true"; }?>
1820 1820
 										},
1821 1821
 										<?php
1822 1822
 
1823
-										foreach($args as $k => $a){
1823
+										foreach ($args as $k => $a) {
1824 1824
 											$this->build_block_arguments($k, $a);
1825 1825
 										}
1826 1826
 										?>
@@ -1829,8 +1829,8 @@  discard block
 block discarded – undo
1829 1829
 									$panel_count++;
1830 1830
 
1831 1831
 									}
1832
-									}else{
1833
-										foreach($this->arguments as $key => $args){
1832
+									} else {
1833
+										foreach ($this->arguments as $key => $args) {
1834 1834
 											$this->build_block_arguments($key, $args);
1835 1835
 										}
1836 1836
 									}
@@ -1844,9 +1844,9 @@  discard block
 block discarded – undo
1844 1844
 
1845 1845
 								<?php
1846 1846
 								// If the user sets block-output array then build it
1847
-								if ( ! empty( $this->options['block-output'] ) ) {
1848
-								$this->block_element( $this->options['block-output'] );
1849
-							}else{
1847
+								if (!empty($this->options['block-output'])) {
1848
+								$this->block_element($this->options['block-output']);
1849
+							} else {
1850 1850
 								// if no block-output is set then we try and get the shortcode html output via ajax.
1851 1851
 								?>
1852 1852
 								el('div', {
@@ -1870,19 +1870,19 @@  discard block
 block discarded – undo
1870 1870
 							var align = '';
1871 1871
 
1872 1872
 							// build the shortcode.
1873
-							var content = "[<?php echo $this->options['base_id'];?>";
1873
+							var content = "[<?php echo $this->options['base_id']; ?>";
1874 1874
 							$html = '';
1875 1875
 							<?php
1876 1876
 
1877
-							if(! empty( $this->arguments )){
1877
+							if (!empty($this->arguments)) {
1878 1878
 
1879
-							foreach($this->arguments as $key => $args){
1879
+							foreach ($this->arguments as $key => $args) {
1880 1880
 							?>
1881
-							if (attr.hasOwnProperty("<?php echo esc_attr( $key );?>")) {
1882
-								if('<?php echo esc_attr( $key );?>' == 'html'){
1883
-									$html = attr.<?php echo esc_attr( $key );?>;
1881
+							if (attr.hasOwnProperty("<?php echo esc_attr($key); ?>")) {
1882
+								if('<?php echo esc_attr($key); ?>' == 'html'){
1883
+									$html = attr.<?php echo esc_attr($key); ?>;
1884 1884
 								}else{
1885
-									content += " <?php echo esc_attr( $key );?>='" + attr.<?php echo esc_attr( $key );?>+ "' ";
1885
+									content += " <?php echo esc_attr($key); ?>='" + attr.<?php echo esc_attr($key); ?>+ "' ";
1886 1886
 								}
1887 1887
 							}
1888 1888
 							<?php
@@ -1894,7 +1894,7 @@  discard block
 block discarded – undo
1894 1894
 							
1895 1895
 							// if has html element
1896 1896
 							if($html){
1897
-								content += $html + "[/<?php echo $this->options['base_id'];?>]";
1897
+								content += $html + "[/<?php echo $this->options['base_id']; ?>]";
1898 1898
 							}
1899 1899
 
1900 1900
 
@@ -1912,11 +1912,11 @@  discard block
 block discarded – undo
1912 1912
 							}
1913 1913
 
1914 1914
 							<?php
1915
-							if(isset( $this->options['block-wrap'] ) && $this->options['block-wrap'] == ''){
1915
+							if (isset($this->options['block-wrap']) && $this->options['block-wrap'] == '') {
1916 1916
 							?>
1917 1917
 							return content;
1918 1918
 							<?php
1919
-							}else{
1919
+							} else {
1920 1920
 							?>
1921 1921
 							var block_wrap = 'div';
1922 1922
 							if (attr.hasOwnProperty("block_wrap")) {
@@ -1939,88 +1939,88 @@  discard block
 block discarded – undo
1939 1939
 			 * We only add the <script> tags for code highlighting, so we strip them from the output.
1940 1940
 			 */
1941 1941
 
1942
-			return str_replace( array(
1942
+			return str_replace(array(
1943 1943
 				'<script>',
1944 1944
 				'</script>'
1945
-			), '', $output );
1945
+			), '', $output);
1946 1946
 		}
1947 1947
 
1948
-		public function build_block_arguments($key,$args){
1949
-			$custom_attributes = ! empty( $args['custom_attributes'] ) ? $this->array_to_attributes( $args['custom_attributes'] ) : '';
1948
+		public function build_block_arguments($key, $args) {
1949
+			$custom_attributes = !empty($args['custom_attributes']) ? $this->array_to_attributes($args['custom_attributes']) : '';
1950 1950
 			$options = '';
1951 1951
 			$extra = '';
1952 1952
 			$require = '';
1953 1953
 
1954 1954
 			// `content` is a protected and special argument
1955
-			if($key == 'content'){return;}
1955
+			if ($key == 'content') {return; }
1956 1956
 
1957 1957
 			$onchange = "props.setAttributes({ $key: $key } )";
1958 1958
 			$value = "props.attributes.$key";
1959
-			$text_type = array( 'text', 'password', 'number', 'email', 'tel', 'url', 'color' );
1960
-			if ( in_array( $args['type'], $text_type ) ) {
1959
+			$text_type = array('text', 'password', 'number', 'email', 'tel', 'url', 'color');
1960
+			if (in_array($args['type'], $text_type)) {
1961 1961
 				$type = 'TextControl';
1962 1962
 				// Save numbers as numbers and not strings
1963
-				if ( $args['type'] == 'number' ) {
1963
+				if ($args['type'] == 'number') {
1964 1964
 					$onchange = "props.setAttributes({ $key: Number($key) } )";
1965 1965
 				}
1966 1966
 			}
1967 1967
 			//									elseif ( $args['type'] == 'color' ) { //@todo ColorPicker labels are not shown yet, we use html5 color input for now https://github.com/WordPress/gutenberg/issues/14378
1968 1968
 			//										$type = 'ColorPicker';
1969 1969
 			//									}
1970
-			elseif ( $args['type'] == 'checkbox' ) {
1970
+			elseif ($args['type'] == 'checkbox') {
1971 1971
 				$type = 'CheckboxControl';
1972 1972
 				$extra .= "checked: props.attributes.$key,";
1973 1973
 				$onchange = "props.setAttributes({ $key: ! props.attributes.$key } )";
1974
-			}elseif ( $args['type'] == 'textarea' ) {
1974
+			}elseif ($args['type'] == 'textarea') {
1975 1975
 				$type = 'TextareaControl';
1976
-			} elseif ( $args['type'] == 'select' || $args['type'] == 'multiselect' ) {
1976
+			} elseif ($args['type'] == 'select' || $args['type'] == 'multiselect') {
1977 1977
 				$type = 'SelectControl';
1978
-				if ( ! empty( $args['options'] ) ) {
1978
+				if (!empty($args['options'])) {
1979 1979
 					$options .= "options  : [";
1980
-					foreach ( $args['options'] as $option_val => $option_label ) {
1981
-						$options .= "{ value : '" . esc_attr( $option_val ) . "',     label : '" . esc_attr( $option_label ) . "'     },";
1980
+					foreach ($args['options'] as $option_val => $option_label) {
1981
+						$options .= "{ value : '" . esc_attr($option_val) . "',     label : '" . esc_attr($option_label) . "'     },";
1982 1982
 					}
1983 1983
 					$options .= "],";
1984 1984
 				}
1985
-				if ( isset( $args['multiple'] ) && $args['multiple'] ) { //@todo multiselect does not work at the moment: https://github.com/WordPress/gutenberg/issues/5550
1985
+				if (isset($args['multiple']) && $args['multiple']) { //@todo multiselect does not work at the moment: https://github.com/WordPress/gutenberg/issues/5550
1986 1986
 					$extra .= ' multiple: true, ';
1987 1987
 					//$onchange = "props.setAttributes({ $key: ['edit'] } )";
1988 1988
 					//$value = "['edit', 'delete']";
1989 1989
 				}
1990
-			} elseif ( $args['type'] == 'alignment' ) {
1990
+			} elseif ($args['type'] == 'alignment') {
1991 1991
 				$type = 'AlignmentToolbar'; // @todo this does not seem to work but cant find a example
1992 1992
 			} else {
1993
-				return;// if we have not implemented the control then don't break the JS.
1993
+				return; // if we have not implemented the control then don't break the JS.
1994 1994
 			}
1995 1995
 
1996 1996
 			// add show only if advanced
1997
-			if ( ! empty( $args['advanced'] ) ) {
1997
+			if (!empty($args['advanced'])) {
1998 1998
 				echo "props.attributes.show_advanced && ";
1999 1999
 			}
2000 2000
 			// add setting require if defined
2001
-			if ( ! empty( $args['element_require'] ) ) {
2002
-				echo $this->block_props_replace( $args['element_require'], true ) . " && ";
2001
+			if (!empty($args['element_require'])) {
2002
+				echo $this->block_props_replace($args['element_require'], true) . " && ";
2003 2003
 			}
2004 2004
 			?>
2005 2005
 			el(
2006
-			wp.components.<?php echo esc_attr( $type );?>,
2006
+			wp.components.<?php echo esc_attr($type); ?>,
2007 2007
 			{
2008
-			label: '<?php echo esc_attr( $args['title'] );?>',
2009
-			help: '<?php if ( isset( $args['desc'] ) ) {
2010
-				echo esc_attr( $args['desc'] );
2008
+			label: '<?php echo esc_attr($args['title']); ?>',
2009
+			help: '<?php if (isset($args['desc'])) {
2010
+				echo esc_attr($args['desc']);
2011 2011
 			}?>',
2012
-			value: <?php echo $value;?>,
2013
-			<?php if ( $type == 'TextControl' && $args['type'] != 'text' ) {
2014
-				echo "type: '" . esc_attr( $args['type'] ) . "',";
2012
+			value: <?php echo $value; ?>,
2013
+			<?php if ($type == 'TextControl' && $args['type'] != 'text') {
2014
+				echo "type: '" . esc_attr($args['type']) . "',";
2015 2015
 			}?>
2016
-			<?php if ( ! empty( $args['placeholder'] ) ) {
2017
-				echo "placeholder: '" . esc_attr( $args['placeholder'] ) . "',";
2016
+			<?php if (!empty($args['placeholder'])) {
2017
+				echo "placeholder: '" . esc_attr($args['placeholder']) . "',";
2018 2018
 			}?>
2019
-			<?php echo $options;?>
2020
-			<?php echo $extra;?>
2021
-			<?php echo $custom_attributes;?>
2022
-			onChange: function ( <?php echo $key;?> ) {
2023
-			<?php echo $onchange;?>
2019
+			<?php echo $options; ?>
2020
+			<?php echo $extra; ?>
2021
+			<?php echo $custom_attributes; ?>
2022
+			onChange: function ( <?php echo $key; ?> ) {
2023
+			<?php echo $onchange; ?>
2024 2024
 			}
2025 2025
 			}
2026 2026
 			),
@@ -2036,16 +2036,16 @@  discard block
 block discarded – undo
2036 2036
 		 *
2037 2037
 		 * @return string
2038 2038
 		 */
2039
-		public function array_to_attributes( $custom_attributes, $html = false ) {
2039
+		public function array_to_attributes($custom_attributes, $html = false) {
2040 2040
 			$attributes = '';
2041
-			if ( ! empty( $custom_attributes ) ) {
2041
+			if (!empty($custom_attributes)) {
2042 2042
 
2043
-				if ( $html ) {
2044
-					foreach ( $custom_attributes as $key => $val ) {
2043
+				if ($html) {
2044
+					foreach ($custom_attributes as $key => $val) {
2045 2045
 						$attributes .= " $key='$val' ";
2046 2046
 					}
2047 2047
 				} else {
2048
-					foreach ( $custom_attributes as $key => $val ) {
2048
+					foreach ($custom_attributes as $key => $val) {
2049 2049
 						$attributes .= "'$key': '$val',";
2050 2050
 					}
2051 2051
 				}
@@ -2061,86 +2061,86 @@  discard block
 block discarded – undo
2061 2061
 		 *
2062 2062
 		 * @param $args
2063 2063
 		 */
2064
-		public function block_element( $args ) {
2064
+		public function block_element($args) {
2065 2065
 
2066 2066
 
2067
-			if ( ! empty( $args ) ) {
2068
-				foreach ( $args as $element => $new_args ) {
2067
+			if (!empty($args)) {
2068
+				foreach ($args as $element => $new_args) {
2069 2069
 
2070
-					if ( is_array( $new_args ) ) { // its an element
2070
+					if (is_array($new_args)) { // its an element
2071 2071
 
2072 2072
 
2073
-						if ( isset( $new_args['element'] ) ) {
2073
+						if (isset($new_args['element'])) {
2074 2074
 
2075
-							if ( isset( $new_args['element_require'] ) ) {
2076
-								echo str_replace( array(
2075
+							if (isset($new_args['element_require'])) {
2076
+								echo str_replace(array(
2077 2077
 										"'+",
2078 2078
 										"+'"
2079
-									), '', $this->block_props_replace( $new_args['element_require'] ) ) . " &&  ";
2080
-								unset( $new_args['element_require'] );
2079
+									), '', $this->block_props_replace($new_args['element_require'])) . " &&  ";
2080
+								unset($new_args['element_require']);
2081 2081
 							}
2082 2082
 
2083 2083
 							echo "\n el( '" . $new_args['element'] . "', {";
2084 2084
 
2085 2085
 							// get the attributes
2086
-							foreach ( $new_args as $new_key => $new_value ) {
2086
+							foreach ($new_args as $new_key => $new_value) {
2087 2087
 
2088 2088
 
2089
-								if ( $new_key == 'element' || $new_key == 'content' || $new_key == 'element_require' || $new_key == 'element_repeat' || is_array( $new_value ) ) {
2089
+								if ($new_key == 'element' || $new_key == 'content' || $new_key == 'element_require' || $new_key == 'element_repeat' || is_array($new_value)) {
2090 2090
 									// do nothing
2091 2091
 								} else {
2092
-									echo $this->block_element( array( $new_key => $new_value ) );
2092
+									echo $this->block_element(array($new_key => $new_value));
2093 2093
 								}
2094 2094
 							}
2095 2095
 
2096
-							echo "},";// end attributes
2096
+							echo "},"; // end attributes
2097 2097
 
2098 2098
 							// get the content
2099 2099
 							$first_item = 0;
2100
-							foreach ( $new_args as $new_key => $new_value ) {
2101
-								if ( $new_key === 'content' || is_array( $new_value ) ) {
2100
+							foreach ($new_args as $new_key => $new_value) {
2101
+								if ($new_key === 'content' || is_array($new_value)) {
2102 2102
 
2103
-									if ( $new_key === 'content' ) {
2104
-										echo "'" . $this->block_props_replace( wp_slash( $new_value ) ) . "'";
2103
+									if ($new_key === 'content') {
2104
+										echo "'" . $this->block_props_replace(wp_slash($new_value)) . "'";
2105 2105
 									}
2106 2106
 
2107
-									if ( is_array( $new_value ) ) {
2107
+									if (is_array($new_value)) {
2108 2108
 
2109
-										if ( isset( $new_value['element_require'] ) ) {
2110
-											echo str_replace( array(
2109
+										if (isset($new_value['element_require'])) {
2110
+											echo str_replace(array(
2111 2111
 													"'+",
2112 2112
 													"+'"
2113
-												), '', $this->block_props_replace( $new_value['element_require'] ) ) . " &&  ";
2114
-											unset( $new_value['element_require'] );
2113
+												), '', $this->block_props_replace($new_value['element_require'])) . " &&  ";
2114
+											unset($new_value['element_require']);
2115 2115
 										}
2116 2116
 
2117
-										if ( isset( $new_value['element_repeat'] ) ) {
2117
+										if (isset($new_value['element_repeat'])) {
2118 2118
 											$x = 1;
2119
-											while ( $x <= absint( $new_value['element_repeat'] ) ) {
2120
-												$this->block_element( array( '' => $new_value ) );
2121
-												$x ++;
2119
+											while ($x <= absint($new_value['element_repeat'])) {
2120
+												$this->block_element(array('' => $new_value));
2121
+												$x++;
2122 2122
 											}
2123 2123
 										} else {
2124
-											$this->block_element( array( '' => $new_value ) );
2124
+											$this->block_element(array('' => $new_value));
2125 2125
 										}
2126 2126
 									}
2127
-									$first_item ++;
2127
+									$first_item++;
2128 2128
 								}
2129 2129
 							}
2130 2130
 
2131
-							echo ")";// end content
2131
+							echo ")"; // end content
2132 2132
 
2133 2133
 							echo ", \n";
2134 2134
 
2135 2135
 						}
2136 2136
 					} else {
2137 2137
 
2138
-						if ( substr( $element, 0, 3 ) === "if_" ) {
2139
-							echo str_replace( "if_", "", $element ) . ": " . $this->block_props_replace( $new_args, true ) . ",";
2140
-						} elseif ( $element == 'style' ) {
2141
-							echo $element . ": " . $this->block_props_replace( $new_args ) . ",";
2138
+						if (substr($element, 0, 3) === "if_") {
2139
+							echo str_replace("if_", "", $element) . ": " . $this->block_props_replace($new_args, true) . ",";
2140
+						} elseif ($element == 'style') {
2141
+							echo $element . ": " . $this->block_props_replace($new_args) . ",";
2142 2142
 						} else {
2143
-							echo $element . ": '" . $this->block_props_replace( $new_args ) . "',";
2143
+							echo $element . ": '" . $this->block_props_replace($new_args) . "',";
2144 2144
 						}
2145 2145
 
2146 2146
 					}
@@ -2155,12 +2155,12 @@  discard block
 block discarded – undo
2155 2155
 		 *
2156 2156
 		 * @return mixed
2157 2157
 		 */
2158
-		public function block_props_replace( $string, $no_wrap = false ) {
2158
+		public function block_props_replace($string, $no_wrap = false) {
2159 2159
 
2160
-			if ( $no_wrap ) {
2161
-				$string = str_replace( array( "[%", "%]" ), array( "props.attributes.", "" ), $string );
2160
+			if ($no_wrap) {
2161
+				$string = str_replace(array("[%", "%]"), array("props.attributes.", ""), $string);
2162 2162
 			} else {
2163
-				$string = str_replace( array( "[%", "%]" ), array( "'+props.attributes.", "+'" ), $string );
2163
+				$string = str_replace(array("[%", "%]"), array("'+props.attributes.", "+'"), $string);
2164 2164
 			}
2165 2165
 
2166 2166
 			return $string;
@@ -2172,48 +2172,48 @@  discard block
 block discarded – undo
2172 2172
 		 * @param array $args
2173 2173
 		 * @param array $instance
2174 2174
 		 */
2175
-		public function widget( $args, $instance ) {
2175
+		public function widget($args, $instance) {
2176 2176
 
2177 2177
 			// get the filtered values
2178
-			$argument_values = $this->argument_values( $instance );
2179
-			$argument_values = $this->string_to_bool( $argument_values );
2180
-			$output          = $this->output( $argument_values, $args );
2178
+			$argument_values = $this->argument_values($instance);
2179
+			$argument_values = $this->string_to_bool($argument_values);
2180
+			$output          = $this->output($argument_values, $args);
2181 2181
 
2182 2182
 			$no_wrap = false;
2183
-			if( isset( $argument_values['no_wrap'] ) && $argument_values['no_wrap'] ){ $no_wrap = true; }
2183
+			if (isset($argument_values['no_wrap']) && $argument_values['no_wrap']) { $no_wrap = true; }
2184 2184
 
2185 2185
 			ob_start();
2186
-			if ( $output && !$no_wrap) {
2186
+			if ($output && !$no_wrap) {
2187 2187
 				// Before widget
2188 2188
 				$before_widget = $args['before_widget'];
2189
-				$before_widget = apply_filters( 'wp_super_duper_before_widget', $before_widget, $args, $instance, $this );
2190
-				$before_widget = apply_filters( 'wp_super_duper_before_widget_' . $this->base_id, $before_widget, $args, $instance, $this );
2189
+				$before_widget = apply_filters('wp_super_duper_before_widget', $before_widget, $args, $instance, $this);
2190
+				$before_widget = apply_filters('wp_super_duper_before_widget_' . $this->base_id, $before_widget, $args, $instance, $this);
2191 2191
 
2192 2192
 				// After widget
2193 2193
 				$after_widget = $args['after_widget'];
2194
-				$after_widget = apply_filters( 'wp_super_duper_after_widget', $after_widget, $args, $instance, $this );
2195
-				$after_widget = apply_filters( 'wp_super_duper_after_widget_' . $this->base_id, $after_widget, $args, $instance, $this );
2194
+				$after_widget = apply_filters('wp_super_duper_after_widget', $after_widget, $args, $instance, $this);
2195
+				$after_widget = apply_filters('wp_super_duper_after_widget_' . $this->base_id, $after_widget, $args, $instance, $this);
2196 2196
 
2197 2197
 				echo $before_widget;
2198 2198
 				// elementor strips the widget wrapping div so we check for and add it back if needed
2199
-				if ( $this->is_elementor_widget_output() ) {
2200
-					echo ! empty( $this->options['widget_ops']['classname'] ) ? "<span class='" . esc_attr( $this->options['widget_ops']['classname'] ) . "'>" : '';
2199
+				if ($this->is_elementor_widget_output()) {
2200
+					echo !empty($this->options['widget_ops']['classname']) ? "<span class='" . esc_attr($this->options['widget_ops']['classname']) . "'>" : '';
2201 2201
 				}
2202
-				echo $this->output_title( $args, $instance );
2202
+				echo $this->output_title($args, $instance);
2203 2203
 				echo $output;
2204
-				if ( $this->is_elementor_widget_output() ) {
2205
-					echo ! empty( $this->options['widget_ops']['classname'] ) ? "</span>" : '';
2204
+				if ($this->is_elementor_widget_output()) {
2205
+					echo !empty($this->options['widget_ops']['classname']) ? "</span>" : '';
2206 2206
 				}
2207 2207
 				echo $after_widget;
2208
-			} elseif ( $this->is_preview() && $output == '' ) {// if preview show a placeholder if empty
2209
-				$output = $this->preview_placeholder_text( "{{" . $this->base_id . "}}" );
2208
+			} elseif ($this->is_preview() && $output == '') {// if preview show a placeholder if empty
2209
+				$output = $this->preview_placeholder_text("{{" . $this->base_id . "}}");
2210 2210
 				echo $output;
2211
-			} elseif($output && $no_wrap){
2211
+			} elseif ($output && $no_wrap) {
2212 2212
 				echo $output;
2213 2213
 			}
2214 2214
 			$output = ob_get_clean();
2215 2215
 
2216
-			$output = apply_filters( 'wp_super_duper_widget_output', $output, $instance, $args, $this );
2216
+			$output = apply_filters('wp_super_duper_widget_output', $output, $instance, $args, $this);
2217 2217
 
2218 2218
 			echo $output;
2219 2219
 		}
@@ -2226,7 +2226,7 @@  discard block
 block discarded – undo
2226 2226
 		 */
2227 2227
 		public function is_elementor_widget_output() {
2228 2228
 			$result = false;
2229
-			if ( defined( 'ELEMENTOR_VERSION' ) && isset( $this->number ) && $this->number == 'REPLACE_TO_ID' ) {
2229
+			if (defined('ELEMENTOR_VERSION') && isset($this->number) && $this->number == 'REPLACE_TO_ID') {
2230 2230
 				$result = true;
2231 2231
 			}
2232 2232
 
@@ -2241,7 +2241,7 @@  discard block
 block discarded – undo
2241 2241
 		 */
2242 2242
 		public function is_elementor_preview() {
2243 2243
 			$result = false;
2244
-			if ( isset( $_REQUEST['elementor-preview'] ) || ( is_admin() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) || ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor_ajax' ) ) {
2244
+			if (isset($_REQUEST['elementor-preview']) || (is_admin() && isset($_REQUEST['action']) && $_REQUEST['action'] == 'elementor') || (isset($_REQUEST['action']) && $_REQUEST['action'] == 'elementor_ajax')) {
2245 2245
 				$result = true;
2246 2246
 			}
2247 2247
 
@@ -2256,7 +2256,7 @@  discard block
 block discarded – undo
2256 2256
 		 */
2257 2257
 		public function is_divi_preview() {
2258 2258
 			$result = false;
2259
-			if ( isset( $_REQUEST['et_fb'] ) || isset( $_REQUEST['et_pb_preview'] ) || ( is_admin() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) ) {
2259
+			if (isset($_REQUEST['et_fb']) || isset($_REQUEST['et_pb_preview']) || (is_admin() && isset($_REQUEST['action']) && $_REQUEST['action'] == 'elementor')) {
2260 2260
 				$result = true;
2261 2261
 			}
2262 2262
 
@@ -2271,7 +2271,7 @@  discard block
 block discarded – undo
2271 2271
 		 */
2272 2272
 		public function is_beaver_preview() {
2273 2273
 			$result = false;
2274
-			if ( isset( $_REQUEST['fl_builder'] ) ) {
2274
+			if (isset($_REQUEST['fl_builder'])) {
2275 2275
 				$result = true;
2276 2276
 			}
2277 2277
 
@@ -2286,7 +2286,7 @@  discard block
 block discarded – undo
2286 2286
 		 */
2287 2287
 		public function is_siteorigin_preview() {
2288 2288
 			$result = false;
2289
-			if ( ! empty( $_REQUEST['siteorigin_panels_live_editor'] ) ) {
2289
+			if (!empty($_REQUEST['siteorigin_panels_live_editor'])) {
2290 2290
 				$result = true;
2291 2291
 			}
2292 2292
 
@@ -2301,7 +2301,7 @@  discard block
 block discarded – undo
2301 2301
 		 */
2302 2302
 		public function is_cornerstone_preview() {
2303 2303
 			$result = false;
2304
-			if ( ! empty( $_REQUEST['cornerstone_preview'] ) || basename( $_SERVER['REQUEST_URI'] ) == 'cornerstone-endpoint' ) {
2304
+			if (!empty($_REQUEST['cornerstone_preview']) || basename($_SERVER['REQUEST_URI']) == 'cornerstone-endpoint') {
2305 2305
 				$result = true;
2306 2306
 			}
2307 2307
 
@@ -2316,7 +2316,7 @@  discard block
 block discarded – undo
2316 2316
 		 */
2317 2317
 		public function is_fusion_preview() {
2318 2318
 			$result = false;
2319
-			if ( ! empty( $_REQUEST['fb-edit'] ) || ! empty( $_REQUEST['fusion_load_nonce'] ) ) {
2319
+			if (!empty($_REQUEST['fb-edit']) || !empty($_REQUEST['fusion_load_nonce'])) {
2320 2320
 				$result = true;
2321 2321
 			}
2322 2322
 
@@ -2331,17 +2331,17 @@  discard block
 block discarded – undo
2331 2331
 		 */
2332 2332
 		public function is_preview() {
2333 2333
 			$preview = false;
2334
-			if ( $this->is_divi_preview() ) {
2334
+			if ($this->is_divi_preview()) {
2335 2335
 				$preview = true;
2336
-			} elseif ( $this->is_elementor_preview() ) {
2336
+			} elseif ($this->is_elementor_preview()) {
2337 2337
 				$preview = true;
2338
-			} elseif ( $this->is_beaver_preview() ) {
2338
+			} elseif ($this->is_beaver_preview()) {
2339 2339
 				$preview = true;
2340
-			} elseif ( $this->is_siteorigin_preview() ) {
2340
+			} elseif ($this->is_siteorigin_preview()) {
2341 2341
 				$preview = true;
2342
-			} elseif ( $this->is_cornerstone_preview() ) {
2342
+			} elseif ($this->is_cornerstone_preview()) {
2343 2343
 				$preview = true;
2344
-			} elseif ( $this->is_fusion_preview() ) {
2344
+			} elseif ($this->is_fusion_preview()) {
2345 2345
 				$preview = true;
2346 2346
 			}
2347 2347
 
@@ -2356,11 +2356,11 @@  discard block
 block discarded – undo
2356 2356
 		 *
2357 2357
 		 * @return string
2358 2358
 		 */
2359
-		public function output_title( $args, $instance = array() ) {
2359
+		public function output_title($args, $instance = array()) {
2360 2360
 			$output = '';
2361
-			if ( ! empty( $instance['title'] ) ) {
2361
+			if (!empty($instance['title'])) {
2362 2362
 				/** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */
2363
-				$title  = apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base );
2363
+				$title  = apply_filters('widget_title', $instance['title'], $instance, $this->id_base);
2364 2364
 				$output = $args['before_title'] . $title . $args['after_title'];
2365 2365
 			}
2366 2366
 
@@ -2372,7 +2372,7 @@  discard block
 block discarded – undo
2372 2372
 		 *
2373 2373
 		 * @param array $instance The widget options.
2374 2374
 		 */
2375
-		public function form( $instance ) {
2375
+		public function form($instance) {
2376 2376
 
2377 2377
 			// set widget instance
2378 2378
 			$this->instance = $instance;
@@ -2380,10 +2380,10 @@  discard block
 block discarded – undo
2380 2380
 			// set it as a SD widget
2381 2381
 			echo $this->widget_advanced_toggle();
2382 2382
 
2383
-			echo "<p>" . esc_attr( $this->options['widget_ops']['description'] ) . "</p>";
2383
+			echo "<p>" . esc_attr($this->options['widget_ops']['description']) . "</p>";
2384 2384
 			$arguments_raw = $this->get_arguments();
2385 2385
 
2386
-			if ( is_array( $arguments_raw ) ) {
2386
+			if (is_array($arguments_raw)) {
2387 2387
 
2388 2388
 				$arguments = $this->group_arguments($arguments_raw);
2389 2389
 
@@ -2391,9 +2391,9 @@  discard block
 block discarded – undo
2391 2391
 				$has_sections = $arguments == $arguments_raw ? false : true;
2392 2392
 
2393 2393
 
2394
-				if($has_sections){
2394
+				if ($has_sections) {
2395 2395
 					$panel_count = 0;
2396
-					foreach($arguments as $key => $args){
2396
+					foreach ($arguments as $key => $args) {
2397 2397
 
2398 2398
 						?>
2399 2399
 						<script>
@@ -2403,10 +2403,10 @@  discard block
 block discarded – undo
2403 2403
 
2404 2404
 						$hide = $panel_count ? ' style="display:none;" ' : '';
2405 2405
 						$icon_class = $panel_count ? 'fas fa-chevron-up' : 'fas fa-chevron-down';
2406
-						echo "<button onclick='jQuery(this).find(\"i\").toggleClass(\"fas fa-chevron-up fas fa-chevron-down\");jQuery(this).next().slideToggle();' type='button' class='sd-toggle-group-button sd-input-group-toggle".sanitize_title_with_dashes($key)."'>".esc_attr($key)." <i style='float:right;' class='".$icon_class."'></i></button>";
2407
-						echo "<div class='sd-toggle-group sd-input-group-".sanitize_title_with_dashes($key)."' $hide>";
2406
+						echo "<button onclick='jQuery(this).find(\"i\").toggleClass(\"fas fa-chevron-up fas fa-chevron-down\");jQuery(this).next().slideToggle();' type='button' class='sd-toggle-group-button sd-input-group-toggle" . sanitize_title_with_dashes($key) . "'>" . esc_attr($key) . " <i style='float:right;' class='" . $icon_class . "'></i></button>";
2407
+						echo "<div class='sd-toggle-group sd-input-group-" . sanitize_title_with_dashes($key) . "' $hide>";
2408 2408
 
2409
-						foreach($args as $k => $a){
2409
+						foreach ($args as $k => $a) {
2410 2410
 							$this->widget_inputs($a, $instance);
2411 2411
 						}
2412 2412
 
@@ -2415,9 +2415,9 @@  discard block
 block discarded – undo
2415 2415
 						$panel_count++;
2416 2416
 
2417 2417
 					}
2418
-				}else{
2419
-					foreach ( $arguments as $key => $args ) {
2420
-						$this->widget_inputs( $args, $instance );
2418
+				} else {
2419
+					foreach ($arguments as $key => $args) {
2420
+						$this->widget_inputs($args, $instance);
2421 2421
 					}
2422 2422
 				}
2423 2423
 
@@ -2432,7 +2432,7 @@  discard block
 block discarded – undo
2432 2432
 		public function widget_advanced_toggle() {
2433 2433
 
2434 2434
 			$output = '';
2435
-			if ( $this->block_show_advanced() ) {
2435
+			if ($this->block_show_advanced()) {
2436 2436
 				$val = 1;
2437 2437
 			} else {
2438 2438
 				$val = 0;
@@ -2452,14 +2452,14 @@  discard block
 block discarded – undo
2452 2452
 		 *
2453 2453
 		 * @return string $output
2454 2454
 		 */
2455
-		public function convert_element_require( $input ) {
2455
+		public function convert_element_require($input) {
2456 2456
 
2457
-			$input = str_replace( "'", '"', $input );// we only want double quotes
2457
+			$input = str_replace("'", '"', $input); // we only want double quotes
2458 2458
 
2459
-			$output = esc_attr( str_replace( array( "[%", "%]" ), array(
2459
+			$output = esc_attr(str_replace(array("[%", "%]"), array(
2460 2460
 				"jQuery(form).find('[data-argument=\"",
2461 2461
 				"\"]').find('input,select,textarea').val()"
2462
-			), $input ) );
2462
+			), $input));
2463 2463
 
2464 2464
 			return $output;
2465 2465
 		}
@@ -2470,54 +2470,54 @@  discard block
 block discarded – undo
2470 2470
 		 * @param $args
2471 2471
 		 * @param $instance
2472 2472
 		 */
2473
-		public function widget_inputs( $args, $instance ) {
2473
+		public function widget_inputs($args, $instance) {
2474 2474
 
2475 2475
 			$class             = "";
2476 2476
 			$element_require   = "";
2477 2477
 			$custom_attributes = "";
2478 2478
 
2479 2479
 			// get value
2480
-			if ( isset( $instance[ $args['name'] ] ) ) {
2481
-				$value = $instance[ $args['name'] ];
2482
-			} elseif ( ! isset( $instance[ $args['name'] ] ) && ! empty( $args['default'] ) ) {
2483
-				$value = is_array( $args['default'] ) ? array_map( "esc_html", $args['default'] ) : esc_html( $args['default'] );
2480
+			if (isset($instance[$args['name']])) {
2481
+				$value = $instance[$args['name']];
2482
+			} elseif (!isset($instance[$args['name']]) && !empty($args['default'])) {
2483
+				$value = is_array($args['default']) ? array_map("esc_html", $args['default']) : esc_html($args['default']);
2484 2484
 			} else {
2485 2485
 				$value = '';
2486 2486
 			}
2487 2487
 
2488 2488
 			// get placeholder
2489
-			if ( ! empty( $args['placeholder'] ) ) {
2490
-				$placeholder = "placeholder='" . esc_html( $args['placeholder'] ) . "'";
2489
+			if (!empty($args['placeholder'])) {
2490
+				$placeholder = "placeholder='" . esc_html($args['placeholder']) . "'";
2491 2491
 			} else {
2492 2492
 				$placeholder = '';
2493 2493
 			}
2494 2494
 
2495 2495
 			// get if advanced
2496
-			if ( isset( $args['advanced'] ) && $args['advanced'] ) {
2496
+			if (isset($args['advanced']) && $args['advanced']) {
2497 2497
 				$class .= " sd-advanced-setting ";
2498 2498
 			}
2499 2499
 
2500 2500
 			// element_require
2501
-			if ( isset( $args['element_require'] ) && $args['element_require'] ) {
2501
+			if (isset($args['element_require']) && $args['element_require']) {
2502 2502
 				$element_require = $args['element_require'];
2503 2503
 			}
2504 2504
 
2505 2505
 			// custom_attributes
2506
-			if ( isset( $args['custom_attributes'] ) && $args['custom_attributes'] ) {
2507
-				$custom_attributes = $this->array_to_attributes( $args['custom_attributes'], true );
2506
+			if (isset($args['custom_attributes']) && $args['custom_attributes']) {
2507
+				$custom_attributes = $this->array_to_attributes($args['custom_attributes'], true);
2508 2508
 			}
2509 2509
 
2510 2510
 			// before wrapper
2511 2511
 			?>
2512
-			<p class="sd-argument <?php echo esc_attr( $class ); ?>"
2513
-			   data-argument='<?php echo esc_attr( $args['name'] ); ?>'
2514
-			   data-element_require='<?php if ( $element_require ) {
2515
-				   echo $this->convert_element_require( $element_require );
2512
+			<p class="sd-argument <?php echo esc_attr($class); ?>"
2513
+			   data-argument='<?php echo esc_attr($args['name']); ?>'
2514
+			   data-element_require='<?php if ($element_require) {
2515
+				   echo $this->convert_element_require($element_require);
2516 2516
 			   } ?>'
2517 2517
 			>
2518 2518
 				<?php
2519 2519
 
2520
-				switch ( $args['type'] ) {
2520
+				switch ($args['type']) {
2521 2521
 					//array('text','password','number','email','tel','url','color')
2522 2522
 					case "text":
2523 2523
 					case "password":
@@ -2528,46 +2528,46 @@  discard block
 block discarded – undo
2528 2528
 					case "color":
2529 2529
 						?>
2530 2530
 						<label
2531
-							for="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>"><?php echo esc_attr( $args['title'] ); ?><?php echo $this->widget_field_desc( $args ); ?></label>
2531
+							for="<?php echo esc_attr($this->get_field_id($args['name'])); ?>"><?php echo esc_attr($args['title']); ?><?php echo $this->widget_field_desc($args); ?></label>
2532 2532
 						<input <?php echo $placeholder; ?> class="widefat"
2533 2533
 							<?php echo $custom_attributes; ?>
2534
-							                               id="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>"
2535
-							                               name="<?php echo esc_attr( $this->get_field_name( $args['name'] ) ); ?>"
2536
-							                               type="<?php echo esc_attr( $args['type'] ); ?>"
2537
-							                               value="<?php echo esc_attr( $value ); ?>">
2534
+							                               id="<?php echo esc_attr($this->get_field_id($args['name'])); ?>"
2535
+							                               name="<?php echo esc_attr($this->get_field_name($args['name'])); ?>"
2536
+							                               type="<?php echo esc_attr($args['type']); ?>"
2537
+							                               value="<?php echo esc_attr($value); ?>">
2538 2538
 						<?php
2539 2539
 
2540 2540
 						break;
2541 2541
 					case "select":
2542
-						$multiple = isset( $args['multiple'] ) && $args['multiple'] ? true : false;
2543
-						if ( $multiple ) {
2544
-							if ( empty( $value ) ) {
2542
+						$multiple = isset($args['multiple']) && $args['multiple'] ? true : false;
2543
+						if ($multiple) {
2544
+							if (empty($value)) {
2545 2545
 								$value = array();
2546 2546
 							}
2547 2547
 						}
2548 2548
 						?>
2549 2549
 						<label
2550
-							for="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>"><?php echo esc_attr( $args['title'] ); ?><?php echo $this->widget_field_desc( $args ); ?></label>
2550
+							for="<?php echo esc_attr($this->get_field_id($args['name'])); ?>"><?php echo esc_attr($args['title']); ?><?php echo $this->widget_field_desc($args); ?></label>
2551 2551
 						<select <?php echo $placeholder; ?> class="widefat"
2552 2552
 							<?php echo $custom_attributes; ?>
2553
-							                                id="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>"
2554
-							                                name="<?php echo esc_attr( $this->get_field_name( $args['name'] ) );
2555
-							                                if ( $multiple ) {
2553
+							                                id="<?php echo esc_attr($this->get_field_id($args['name'])); ?>"
2554
+							                                name="<?php echo esc_attr($this->get_field_name($args['name']));
2555
+							                                if ($multiple) {
2556 2556
 								                                echo "[]";
2557 2557
 							                                } ?>"
2558
-							<?php if ( $multiple ) {
2558
+							<?php if ($multiple) {
2559 2559
 								echo "multiple";
2560 2560
 							} //@todo not implemented yet due to gutenberg not supporting it
2561 2561
 							?>
2562 2562
 						>
2563 2563
 							<?php
2564 2564
 
2565
-							if ( ! empty( $args['options'] ) ) {
2566
-								foreach ( $args['options'] as $val => $label ) {
2567
-									if ( $multiple ) {
2568
-										$selected = in_array( $val, $value ) ? 'selected="selected"' : '';
2565
+							if (!empty($args['options'])) {
2566
+								foreach ($args['options'] as $val => $label) {
2567
+									if ($multiple) {
2568
+										$selected = in_array($val, $value) ? 'selected="selected"' : '';
2569 2569
 									} else {
2570
-										$selected = selected( $value, $val, false );
2570
+										$selected = selected($value, $val, false);
2571 2571
 									}
2572 2572
 									echo "<option value='$val' " . $selected . ">$label</option>";
2573 2573
 								}
@@ -2579,32 +2579,32 @@  discard block
 block discarded – undo
2579 2579
 					case "checkbox":
2580 2580
 						?>
2581 2581
 						<input <?php echo $placeholder; ?>
2582
-							<?php checked( 1, $value, true ) ?>
2582
+							<?php checked(1, $value, true) ?>
2583 2583
 							<?php echo $custom_attributes; ?>
2584
-							class="widefat" id="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>"
2585
-							name="<?php echo esc_attr( $this->get_field_name( $args['name'] ) ); ?>" type="checkbox"
2584
+							class="widefat" id="<?php echo esc_attr($this->get_field_id($args['name'])); ?>"
2585
+							name="<?php echo esc_attr($this->get_field_name($args['name'])); ?>" type="checkbox"
2586 2586
 							value="1">
2587 2587
 						<label
2588
-							for="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>"><?php echo esc_attr( $args['title'] ); ?><?php echo $this->widget_field_desc( $args ); ?></label>
2588
+							for="<?php echo esc_attr($this->get_field_id($args['name'])); ?>"><?php echo esc_attr($args['title']); ?><?php echo $this->widget_field_desc($args); ?></label>
2589 2589
 						<?php
2590 2590
 						break;
2591 2591
 					case "textarea":
2592 2592
 						?>
2593 2593
 						<label
2594
-							for="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>"><?php echo esc_attr( $args['title'] ); ?><?php echo $this->widget_field_desc( $args ); ?></label>
2594
+							for="<?php echo esc_attr($this->get_field_id($args['name'])); ?>"><?php echo esc_attr($args['title']); ?><?php echo $this->widget_field_desc($args); ?></label>
2595 2595
 						<textarea <?php echo $placeholder; ?> class="widefat"
2596 2596
 							<?php echo $custom_attributes; ?>
2597
-							                               id="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>"
2598
-							                               name="<?php echo esc_attr( $this->get_field_name( $args['name'] ) ); ?>"
2599
-							                               ><?php echo esc_attr( $value ); ?></textarea>
2597
+							                               id="<?php echo esc_attr($this->get_field_id($args['name'])); ?>"
2598
+							                               name="<?php echo esc_attr($this->get_field_name($args['name'])); ?>"
2599
+							                               ><?php echo esc_attr($value); ?></textarea>
2600 2600
 						<?php
2601 2601
 
2602 2602
 						break;
2603 2603
 					case "hidden":
2604 2604
 						?>
2605
-						<input id="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>"
2606
-						       name="<?php echo esc_attr( $this->get_field_name( $args['name'] ) ); ?>" type="hidden"
2607
-						       value="<?php echo esc_attr( $value ); ?>">
2605
+						<input id="<?php echo esc_attr($this->get_field_id($args['name'])); ?>"
2606
+						       name="<?php echo esc_attr($this->get_field_name($args['name'])); ?>" type="hidden"
2607
+						       value="<?php echo esc_attr($value); ?>">
2608 2608
 						<?php
2609 2609
 						break;
2610 2610
 					default:
@@ -2626,14 +2626,14 @@  discard block
 block discarded – undo
2626 2626
 		 * @return string
2627 2627
 		 * @todo, need to make its own tooltip script
2628 2628
 		 */
2629
-		public function widget_field_desc( $args ) {
2629
+		public function widget_field_desc($args) {
2630 2630
 
2631 2631
 			$description = '';
2632
-			if ( isset( $args['desc'] ) && $args['desc'] ) {
2633
-				if ( isset( $args['desc_tip'] ) && $args['desc_tip'] ) {
2634
-					$description = $this->desc_tip( $args['desc'] );
2632
+			if (isset($args['desc']) && $args['desc']) {
2633
+				if (isset($args['desc_tip']) && $args['desc_tip']) {
2634
+					$description = $this->desc_tip($args['desc']);
2635 2635
 				} else {
2636
-					$description = '<span class="description">' . wp_kses_post( $args['desc'] ) . '</span>';
2636
+					$description = '<span class="description">' . wp_kses_post($args['desc']) . '</span>';
2637 2637
 				}
2638 2638
 			}
2639 2639
 
@@ -2648,11 +2648,11 @@  discard block
 block discarded – undo
2648 2648
 		 *
2649 2649
 		 * @return string
2650 2650
 		 */
2651
-		function desc_tip( $tip, $allow_html = false ) {
2652
-			if ( $allow_html ) {
2653
-				$tip = $this->sanitize_tooltip( $tip );
2651
+		function desc_tip($tip, $allow_html = false) {
2652
+			if ($allow_html) {
2653
+				$tip = $this->sanitize_tooltip($tip);
2654 2654
 			} else {
2655
-				$tip = esc_attr( $tip );
2655
+				$tip = esc_attr($tip);
2656 2656
 			}
2657 2657
 
2658 2658
 			return '<span class="gd-help-tip dashicons dashicons-editor-help" title="' . $tip . '"></span>';
@@ -2665,8 +2665,8 @@  discard block
 block discarded – undo
2665 2665
 		 *
2666 2666
 		 * @return string
2667 2667
 		 */
2668
-		public function sanitize_tooltip( $var ) {
2669
-			return htmlspecialchars( wp_kses( html_entity_decode( $var ), array(
2668
+		public function sanitize_tooltip($var) {
2669
+			return htmlspecialchars(wp_kses(html_entity_decode($var), array(
2670 2670
 				'br'     => array(),
2671 2671
 				'em'     => array(),
2672 2672
 				'strong' => array(),
@@ -2676,7 +2676,7 @@  discard block
 block discarded – undo
2676 2676
 				'li'     => array(),
2677 2677
 				'ol'     => array(),
2678 2678
 				'p'      => array(),
2679
-			) ) );
2679
+			)));
2680 2680
 		}
2681 2681
 
2682 2682
 		/**
@@ -2688,23 +2688,23 @@  discard block
 block discarded – undo
2688 2688
 		 * @return array
2689 2689
 		 * @todo we should add some sanitation here.
2690 2690
 		 */
2691
-		public function update( $new_instance, $old_instance ) {
2691
+		public function update($new_instance, $old_instance) {
2692 2692
 
2693 2693
 			//save the widget
2694
-			$instance = array_merge( (array) $old_instance, (array) $new_instance );
2694
+			$instance = array_merge((array) $old_instance, (array) $new_instance);
2695 2695
 
2696 2696
 			// set widget instance
2697 2697
 			$this->instance = $instance;
2698 2698
 
2699
-			if ( empty( $this->arguments ) ) {
2699
+			if (empty($this->arguments)) {
2700 2700
 				$this->get_arguments();
2701 2701
 			}
2702 2702
 
2703 2703
 			// check for checkboxes
2704
-			if ( ! empty( $this->arguments ) ) {
2705
-				foreach ( $this->arguments as $argument ) {
2706
-					if ( isset( $argument['type'] ) && $argument['type'] == 'checkbox' && ! isset( $new_instance[ $argument['name'] ] ) ) {
2707
-						$instance[ $argument['name'] ] = '0';
2704
+			if (!empty($this->arguments)) {
2705
+				foreach ($this->arguments as $argument) {
2706
+					if (isset($argument['type']) && $argument['type'] == 'checkbox' && !isset($new_instance[$argument['name']])) {
2707
+						$instance[$argument['name']] = '0';
2708 2708
 					}
2709 2709
 				}
2710 2710
 			}
@@ -2722,7 +2722,7 @@  discard block
 block discarded – undo
2722 2722
 		 */
2723 2723
 		public function is_block_content_call() {
2724 2724
 			$result = false;
2725
-			if ( wp_doing_ajax() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'super_duper_output_shortcode' ) {
2725
+			if (wp_doing_ajax() && isset($_REQUEST['action']) && $_REQUEST['action'] == 'super_duper_output_shortcode') {
2726 2726
 				$result = true;
2727 2727
 			}
2728 2728
 
Please login to merge, or discard this patch.
Braces   +14 added lines, -15 removed lines patch added patch discarded remove patch
@@ -180,9 +180,9 @@  discard block
 block discarded – undo
180 180
 							unset($param['default']);
181 181
 						}
182 182
 						$param['value'] = array(''=>__("No"),'1'=>__("Yes"));
183
-					}elseif($param['type'] == 'select'){
183
+					} elseif($param['type'] == 'select'){
184 184
 						$param['value'] = isset($val['options']) ? $val['options'] : array();
185
-					}else{
185
+					} else{
186 186
 						$param['value'] = isset($val['default']) ? $val['default'] : '';
187 187
 					}
188 188
 
@@ -640,7 +640,7 @@  discard block
 block discarded – undo
640 640
 				<?php
641 641
 				if(! empty( $insert_shortcode_function )){
642 642
 					echo $insert_shortcode_function;
643
-				}else{
643
+				} else{
644 644
 
645 645
 				/**
646 646
 				 * Function for super duper insert shortcode.
@@ -1412,8 +1412,7 @@  discard block
 block discarded – undo
1412 1412
 					$argument_values[ $key ] = isset( $instance[ $key ] ) ? $instance[ $key ] : '';
1413 1413
 					if($args['type']=='checkbox' && $argument_values[ $key ] == ''){
1414 1414
 						// don't set default for an empty checkbox
1415
-					}
1416
-					elseif ( $argument_values[ $key ] == '' && isset( $args['default'] ) ) {
1415
+					} elseif ( $argument_values[ $key ] == '' && isset( $args['default'] ) ) {
1417 1416
 						$argument_values[ $key ] = $args['default'];
1418 1417
 					}
1419 1418
 				}
@@ -1542,11 +1541,11 @@  discard block
 block discarded – undo
1542 1541
 			$fa_type = '';
1543 1542
 			if(substr( $icon, 0, 7 ) === "fas fa-"){
1544 1543
 				$fa_type = 'solid';
1545
-			}elseif(substr( $icon, 0, 7 ) === "far fa-"){
1544
+			} elseif(substr( $icon, 0, 7 ) === "far fa-"){
1546 1545
 				$fa_type = 'regular';
1547
-			}elseif(substr( $icon, 0, 7 ) === "fab fa-"){
1546
+			} elseif(substr( $icon, 0, 7 ) === "fab fa-"){
1548 1547
 				$fa_type = 'brands';
1549
-			}else{
1548
+			} else{
1550 1549
 				$icon = "'".$icon."'";
1551 1550
 			}
1552 1551
 
@@ -1569,7 +1568,7 @@  discard block
 block discarded – undo
1569 1568
 					if(isset($args['group'])){
1570 1569
 						$temp_arguments[$args['group']][$key] = $args;
1571 1570
 						$add_sections = true;
1572
-					}else{
1571
+					} else{
1573 1572
 						$temp_arguments[$general][$key] = $args;
1574 1573
 					}
1575 1574
 				}
@@ -1816,7 +1815,7 @@  discard block
 block discarded – undo
1816 1815
 									?>
1817 1816
 									el(wp.components.PanelBody, {
1818 1817
 											title: '<?php esc_attr_e($key); ?>',
1819
-											initialOpen: <?php if($panel_count){echo "false";}else{echo "true";}?>
1818
+											initialOpen: <?php if($panel_count){echo "false";} else{echo "true";}?>
1820 1819
 										},
1821 1820
 										<?php
1822 1821
 
@@ -1829,7 +1828,7 @@  discard block
 block discarded – undo
1829 1828
 									$panel_count++;
1830 1829
 
1831 1830
 									}
1832
-									}else{
1831
+									} else{
1833 1832
 										foreach($this->arguments as $key => $args){
1834 1833
 											$this->build_block_arguments($key, $args);
1835 1834
 										}
@@ -1846,7 +1845,7 @@  discard block
 block discarded – undo
1846 1845
 								// If the user sets block-output array then build it
1847 1846
 								if ( ! empty( $this->options['block-output'] ) ) {
1848 1847
 								$this->block_element( $this->options['block-output'] );
1849
-							}else{
1848
+							} else{
1850 1849
 								// if no block-output is set then we try and get the shortcode html output via ajax.
1851 1850
 								?>
1852 1851
 								el('div', {
@@ -1916,7 +1915,7 @@  discard block
 block discarded – undo
1916 1915
 							?>
1917 1916
 							return content;
1918 1917
 							<?php
1919
-							}else{
1918
+							} else{
1920 1919
 							?>
1921 1920
 							var block_wrap = 'div';
1922 1921
 							if (attr.hasOwnProperty("block_wrap")) {
@@ -1971,7 +1970,7 @@  discard block
 block discarded – undo
1971 1970
 				$type = 'CheckboxControl';
1972 1971
 				$extra .= "checked: props.attributes.$key,";
1973 1972
 				$onchange = "props.setAttributes({ $key: ! props.attributes.$key } )";
1974
-			}elseif ( $args['type'] == 'textarea' ) {
1973
+			} elseif ( $args['type'] == 'textarea' ) {
1975 1974
 				$type = 'TextareaControl';
1976 1975
 			} elseif ( $args['type'] == 'select' || $args['type'] == 'multiselect' ) {
1977 1976
 				$type = 'SelectControl';
@@ -2415,7 +2414,7 @@  discard block
 block discarded – undo
2415 2414
 						$panel_count++;
2416 2415
 
2417 2416
 					}
2418
-				}else{
2417
+				} else{
2419 2418
 					foreach ( $arguments as $key => $args ) {
2420 2419
 						$this->widget_inputs( $args, $instance );
2421 2420
 					}
Please login to merge, or discard this patch.
includes/data/continents.php 2 patches
Indentation   +285 added lines, -285 removed lines patch added patch discarded remove patch
@@ -11,289 +11,289 @@
 block discarded – undo
11 11
 defined( 'ABSPATH' ) || exit;
12 12
 
13 13
 return array(
14
-	'AF' => array(
15
-		'name'      => __( 'Africa', 'invoicing' ),
16
-		'countries' => array(
17
-			'AO',
18
-			'BF',
19
-			'BI',
20
-			'BJ',
21
-			'BW',
22
-			'CD',
23
-			'CF',
24
-			'CG',
25
-			'CI',
26
-			'CM',
27
-			'CV',
28
-			'DJ',
29
-			'DZ',
30
-			'EG',
31
-			'EH',
32
-			'ER',
33
-			'ET',
34
-			'GA',
35
-			'GH',
36
-			'GM',
37
-			'GN',
38
-			'GQ',
39
-			'GW',
40
-			'KE',
41
-			'KM',
42
-			'LR',
43
-			'LS',
44
-			'LY',
45
-			'MA',
46
-			'MG',
47
-			'ML',
48
-			'MR',
49
-			'MU',
50
-			'MW',
51
-			'MZ',
52
-			'NA',
53
-			'NE',
54
-			'NG',
55
-			'RE',
56
-			'RW',
57
-			'SC',
58
-			'SD',
59
-			'SH',
60
-			'SL',
61
-			'SN',
62
-			'SO',
63
-			'SS',
64
-			'ST',
65
-			'SZ',
66
-			'TD',
67
-			'TG',
68
-			'TN',
69
-			'TZ',
70
-			'UG',
71
-			'YT',
72
-			'ZA',
73
-			'ZM',
74
-			'ZW',
75
-		),
76
-	),
77
-	'AN' => array(
78
-		'name'      => __( 'Antarctica', 'invoicing' ),
79
-		'countries' => array(
80
-			'AQ',
81
-			'BV',
82
-			'GS',
83
-			'HM',
84
-			'TF',
85
-		),
86
-	),
87
-	'AS' => array(
88
-		'name'      => __( 'Asia', 'invoicing' ),
89
-		'countries' => array(
90
-			'AE',
91
-			'AF',
92
-			'AM',
93
-			'AZ',
94
-			'BD',
95
-			'BH',
96
-			'BN',
97
-			'BT',
98
-			'CC',
99
-			'CN',
100
-			'CX',
101
-			'CY',
102
-			'GE',
103
-			'HK',
104
-			'ID',
105
-			'IL',
106
-			'IN',
107
-			'IO',
108
-			'IQ',
109
-			'IR',
110
-			'JO',
111
-			'JP',
112
-			'KG',
113
-			'KH',
114
-			'KP',
115
-			'KR',
116
-			'KW',
117
-			'KZ',
118
-			'LA',
119
-			'LB',
120
-			'LK',
121
-			'MM',
122
-			'MN',
123
-			'MO',
124
-			'MV',
125
-			'MY',
126
-			'NP',
127
-			'OM',
128
-			'PH',
129
-			'PK',
130
-			'PS',
131
-			'QA',
132
-			'SA',
133
-			'SG',
134
-			'SY',
135
-			'TH',
136
-			'TJ',
137
-			'TL',
138
-			'TM',
139
-			'TW',
140
-			'UZ',
141
-			'VN',
142
-			'YE',
143
-		),
144
-	),
145
-	'EU' => array(
146
-		'name'      => __( 'Europe', 'invoicing' ),
147
-		'countries' => array(
148
-			'AD',
149
-			'AL',
150
-			'AT',
151
-			'AX',
152
-			'BA',
153
-			'BE',
154
-			'BG',
155
-			'BY',
156
-			'CH',
157
-			'CY',
158
-			'CZ',
159
-			'DE',
160
-			'DK',
161
-			'EE',
162
-			'ES',
163
-			'FI',
164
-			'FO',
165
-			'FR',
166
-			'GB',
167
-			'GG',
168
-			'GI',
169
-			'GR',
170
-			'HR',
171
-			'HU',
172
-			'IE',
173
-			'IM',
174
-			'IS',
175
-			'IT',
176
-			'JE',
177
-			'LI',
178
-			'LT',
179
-			'LU',
180
-			'LV',
181
-			'MC',
182
-			'MD',
183
-			'ME',
184
-			'MK',
185
-			'MT',
186
-			'NL',
187
-			'NO',
188
-			'PL',
189
-			'PT',
190
-			'RO',
191
-			'RS',
192
-			'RU',
193
-			'SE',
194
-			'SI',
195
-			'SJ',
196
-			'SK',
197
-			'SM',
198
-			'TR',
199
-			'UA',
200
-			'VA',
201
-		),
202
-	),
203
-	'NA' => array(
204
-		'name'      => __( 'North America', 'invoicing' ),
205
-		'countries' => array(
206
-			'AG',
207
-			'AI',
208
-			'AW',
209
-			'BB',
210
-			'BL',
211
-			'BM',
212
-			'BQ',
213
-			'BS',
214
-			'BZ',
215
-			'CA',
216
-			'CR',
217
-			'CU',
218
-			'CW',
219
-			'DM',
220
-			'DO',
221
-			'GD',
222
-			'GL',
223
-			'GP',
224
-			'GT',
225
-			'HN',
226
-			'HT',
227
-			'JM',
228
-			'KN',
229
-			'KY',
230
-			'LC',
231
-			'MF',
232
-			'MQ',
233
-			'MS',
234
-			'MX',
235
-			'NI',
236
-			'PA',
237
-			'PM',
238
-			'PR',
239
-			'SV',
240
-			'SX',
241
-			'TC',
242
-			'TT',
243
-			'US',
244
-			'VC',
245
-			'VG',
246
-			'VI',
247
-		),
248
-	),
249
-	'OC' => array(
250
-		'name'      => __( 'Oceania', 'invoicing' ),
251
-		'countries' => array(
252
-			'AS',
253
-			'AU',
254
-			'CK',
255
-			'FJ',
256
-			'FM',
257
-			'GU',
258
-			'KI',
259
-			'MH',
260
-			'MP',
261
-			'NC',
262
-			'NF',
263
-			'NR',
264
-			'NU',
265
-			'NZ',
266
-			'PF',
267
-			'PG',
268
-			'PN',
269
-			'PW',
270
-			'SB',
271
-			'TK',
272
-			'TO',
273
-			'TV',
274
-			'UM',
275
-			'VU',
276
-			'WF',
277
-			'WS',
278
-		),
279
-	),
280
-	'SA' => array(
281
-		'name'      => __( 'South America', 'invoicing' ),
282
-		'countries' => array(
283
-			'AR',
284
-			'BO',
285
-			'BR',
286
-			'CL',
287
-			'CO',
288
-			'EC',
289
-			'FK',
290
-			'GF',
291
-			'GY',
292
-			'PE',
293
-			'PY',
294
-			'SR',
295
-			'UY',
296
-			'VE',
297
-		),
298
-	),
14
+    'AF' => array(
15
+        'name'      => __( 'Africa', 'invoicing' ),
16
+        'countries' => array(
17
+            'AO',
18
+            'BF',
19
+            'BI',
20
+            'BJ',
21
+            'BW',
22
+            'CD',
23
+            'CF',
24
+            'CG',
25
+            'CI',
26
+            'CM',
27
+            'CV',
28
+            'DJ',
29
+            'DZ',
30
+            'EG',
31
+            'EH',
32
+            'ER',
33
+            'ET',
34
+            'GA',
35
+            'GH',
36
+            'GM',
37
+            'GN',
38
+            'GQ',
39
+            'GW',
40
+            'KE',
41
+            'KM',
42
+            'LR',
43
+            'LS',
44
+            'LY',
45
+            'MA',
46
+            'MG',
47
+            'ML',
48
+            'MR',
49
+            'MU',
50
+            'MW',
51
+            'MZ',
52
+            'NA',
53
+            'NE',
54
+            'NG',
55
+            'RE',
56
+            'RW',
57
+            'SC',
58
+            'SD',
59
+            'SH',
60
+            'SL',
61
+            'SN',
62
+            'SO',
63
+            'SS',
64
+            'ST',
65
+            'SZ',
66
+            'TD',
67
+            'TG',
68
+            'TN',
69
+            'TZ',
70
+            'UG',
71
+            'YT',
72
+            'ZA',
73
+            'ZM',
74
+            'ZW',
75
+        ),
76
+    ),
77
+    'AN' => array(
78
+        'name'      => __( 'Antarctica', 'invoicing' ),
79
+        'countries' => array(
80
+            'AQ',
81
+            'BV',
82
+            'GS',
83
+            'HM',
84
+            'TF',
85
+        ),
86
+    ),
87
+    'AS' => array(
88
+        'name'      => __( 'Asia', 'invoicing' ),
89
+        'countries' => array(
90
+            'AE',
91
+            'AF',
92
+            'AM',
93
+            'AZ',
94
+            'BD',
95
+            'BH',
96
+            'BN',
97
+            'BT',
98
+            'CC',
99
+            'CN',
100
+            'CX',
101
+            'CY',
102
+            'GE',
103
+            'HK',
104
+            'ID',
105
+            'IL',
106
+            'IN',
107
+            'IO',
108
+            'IQ',
109
+            'IR',
110
+            'JO',
111
+            'JP',
112
+            'KG',
113
+            'KH',
114
+            'KP',
115
+            'KR',
116
+            'KW',
117
+            'KZ',
118
+            'LA',
119
+            'LB',
120
+            'LK',
121
+            'MM',
122
+            'MN',
123
+            'MO',
124
+            'MV',
125
+            'MY',
126
+            'NP',
127
+            'OM',
128
+            'PH',
129
+            'PK',
130
+            'PS',
131
+            'QA',
132
+            'SA',
133
+            'SG',
134
+            'SY',
135
+            'TH',
136
+            'TJ',
137
+            'TL',
138
+            'TM',
139
+            'TW',
140
+            'UZ',
141
+            'VN',
142
+            'YE',
143
+        ),
144
+    ),
145
+    'EU' => array(
146
+        'name'      => __( 'Europe', 'invoicing' ),
147
+        'countries' => array(
148
+            'AD',
149
+            'AL',
150
+            'AT',
151
+            'AX',
152
+            'BA',
153
+            'BE',
154
+            'BG',
155
+            'BY',
156
+            'CH',
157
+            'CY',
158
+            'CZ',
159
+            'DE',
160
+            'DK',
161
+            'EE',
162
+            'ES',
163
+            'FI',
164
+            'FO',
165
+            'FR',
166
+            'GB',
167
+            'GG',
168
+            'GI',
169
+            'GR',
170
+            'HR',
171
+            'HU',
172
+            'IE',
173
+            'IM',
174
+            'IS',
175
+            'IT',
176
+            'JE',
177
+            'LI',
178
+            'LT',
179
+            'LU',
180
+            'LV',
181
+            'MC',
182
+            'MD',
183
+            'ME',
184
+            'MK',
185
+            'MT',
186
+            'NL',
187
+            'NO',
188
+            'PL',
189
+            'PT',
190
+            'RO',
191
+            'RS',
192
+            'RU',
193
+            'SE',
194
+            'SI',
195
+            'SJ',
196
+            'SK',
197
+            'SM',
198
+            'TR',
199
+            'UA',
200
+            'VA',
201
+        ),
202
+    ),
203
+    'NA' => array(
204
+        'name'      => __( 'North America', 'invoicing' ),
205
+        'countries' => array(
206
+            'AG',
207
+            'AI',
208
+            'AW',
209
+            'BB',
210
+            'BL',
211
+            'BM',
212
+            'BQ',
213
+            'BS',
214
+            'BZ',
215
+            'CA',
216
+            'CR',
217
+            'CU',
218
+            'CW',
219
+            'DM',
220
+            'DO',
221
+            'GD',
222
+            'GL',
223
+            'GP',
224
+            'GT',
225
+            'HN',
226
+            'HT',
227
+            'JM',
228
+            'KN',
229
+            'KY',
230
+            'LC',
231
+            'MF',
232
+            'MQ',
233
+            'MS',
234
+            'MX',
235
+            'NI',
236
+            'PA',
237
+            'PM',
238
+            'PR',
239
+            'SV',
240
+            'SX',
241
+            'TC',
242
+            'TT',
243
+            'US',
244
+            'VC',
245
+            'VG',
246
+            'VI',
247
+        ),
248
+    ),
249
+    'OC' => array(
250
+        'name'      => __( 'Oceania', 'invoicing' ),
251
+        'countries' => array(
252
+            'AS',
253
+            'AU',
254
+            'CK',
255
+            'FJ',
256
+            'FM',
257
+            'GU',
258
+            'KI',
259
+            'MH',
260
+            'MP',
261
+            'NC',
262
+            'NF',
263
+            'NR',
264
+            'NU',
265
+            'NZ',
266
+            'PF',
267
+            'PG',
268
+            'PN',
269
+            'PW',
270
+            'SB',
271
+            'TK',
272
+            'TO',
273
+            'TV',
274
+            'UM',
275
+            'VU',
276
+            'WF',
277
+            'WS',
278
+        ),
279
+    ),
280
+    'SA' => array(
281
+        'name'      => __( 'South America', 'invoicing' ),
282
+        'countries' => array(
283
+            'AR',
284
+            'BO',
285
+            'BR',
286
+            'CL',
287
+            'CO',
288
+            'EC',
289
+            'FK',
290
+            'GF',
291
+            'GY',
292
+            'PE',
293
+            'PY',
294
+            'SR',
295
+            'UY',
296
+            'VE',
297
+        ),
298
+    ),
299 299
 );
Please login to merge, or discard this patch.
Spacing   +8 added lines, -8 removed lines patch added patch discarded remove patch
@@ -8,11 +8,11 @@  discard block
 block discarded – undo
8 8
  * @version 1.0.14
9 9
  */
10 10
 
11
-defined( 'ABSPATH' ) || exit;
11
+defined('ABSPATH') || exit;
12 12
 
13 13
 return array(
14 14
 	'AF' => array(
15
-		'name'      => __( 'Africa', 'invoicing' ),
15
+		'name'      => __('Africa', 'invoicing'),
16 16
 		'countries' => array(
17 17
 			'AO',
18 18
 			'BF',
@@ -75,7 +75,7 @@  discard block
 block discarded – undo
75 75
 		),
76 76
 	),
77 77
 	'AN' => array(
78
-		'name'      => __( 'Antarctica', 'invoicing' ),
78
+		'name'      => __('Antarctica', 'invoicing'),
79 79
 		'countries' => array(
80 80
 			'AQ',
81 81
 			'BV',
@@ -85,7 +85,7 @@  discard block
 block discarded – undo
85 85
 		),
86 86
 	),
87 87
 	'AS' => array(
88
-		'name'      => __( 'Asia', 'invoicing' ),
88
+		'name'      => __('Asia', 'invoicing'),
89 89
 		'countries' => array(
90 90
 			'AE',
91 91
 			'AF',
@@ -143,7 +143,7 @@  discard block
 block discarded – undo
143 143
 		),
144 144
 	),
145 145
 	'EU' => array(
146
-		'name'      => __( 'Europe', 'invoicing' ),
146
+		'name'      => __('Europe', 'invoicing'),
147 147
 		'countries' => array(
148 148
 			'AD',
149 149
 			'AL',
@@ -201,7 +201,7 @@  discard block
 block discarded – undo
201 201
 		),
202 202
 	),
203 203
 	'NA' => array(
204
-		'name'      => __( 'North America', 'invoicing' ),
204
+		'name'      => __('North America', 'invoicing'),
205 205
 		'countries' => array(
206 206
 			'AG',
207 207
 			'AI',
@@ -247,7 +247,7 @@  discard block
 block discarded – undo
247 247
 		),
248 248
 	),
249 249
 	'OC' => array(
250
-		'name'      => __( 'Oceania', 'invoicing' ),
250
+		'name'      => __('Oceania', 'invoicing'),
251 251
 		'countries' => array(
252 252
 			'AS',
253 253
 			'AU',
@@ -278,7 +278,7 @@  discard block
 block discarded – undo
278 278
 		),
279 279
 	),
280 280
 	'SA' => array(
281
-		'name'      => __( 'South America', 'invoicing' ),
281
+		'name'      => __('South America', 'invoicing'),
282 282
 		'countries' => array(
283 283
 			'AR',
284 284
 			'BO',
Please login to merge, or discard this patch.
includes/data/states.php 2 patches
Indentation   +1531 added lines, -1531 removed lines patch added patch discarded remove patch
@@ -14,1537 +14,1537 @@
 block discarded – undo
14 14
 defined( 'ABSPATH' ) || exit;
15 15
 
16 16
 return array(
17
-	'AF' => array(),
18
-	'AO' => array( // Angola states.
19
-		'BGO' => __( 'Bengo', 'invoicing' ),
20
-		'BLU' => __( 'Benguela', 'invoicing' ),
21
-		'BIE' => __( 'Bié', 'invoicing' ),
22
-		'CAB' => __( 'Cabinda', 'invoicing' ),
23
-		'CNN' => __( 'Cunene', 'invoicing' ),
24
-		'HUA' => __( 'Huambo', 'invoicing' ),
25
-		'HUI' => __( 'Huíla', 'invoicing' ),
26
-		'CCU' => __( 'Kuando Kubango', 'invoicing' ),
27
-		'CNO' => __( 'Kwanza-Norte', 'invoicing' ),
28
-		'CUS' => __( 'Kwanza-Sul', 'invoicing' ),
29
-		'LUA' => __( 'Luanda', 'invoicing' ),
30
-		'LNO' => __( 'Lunda-Norte', 'invoicing' ),
31
-		'LSU' => __( 'Lunda-Sul', 'invoicing' ),
32
-		'MAL' => __( 'Malanje', 'invoicing' ),
33
-		'MOX' => __( 'Moxico', 'invoicing' ),
34
-		'NAM' => __( 'Namibe', 'invoicing' ),
35
-		'UIG' => __( 'Uíge', 'invoicing' ),
36
-		'ZAI' => __( 'Zaire', 'invoicing' ),
37
-	),
38
-	'AR' => array( // Argentinian provinces.
39
-		'C' => __( 'Ciudad Aut&oacute;noma de Buenos Aires', 'invoicing' ),
40
-		'B' => __( 'Buenos Aires', 'invoicing' ),
41
-		'K' => __( 'Catamarca', 'invoicing' ),
42
-		'H' => __( 'Chaco', 'invoicing' ),
43
-		'U' => __( 'Chubut', 'invoicing' ),
44
-		'X' => __( 'C&oacute;rdoba', 'invoicing' ),
45
-		'W' => __( 'Corrientes', 'invoicing' ),
46
-		'E' => __( 'Entre R&iacute;os', 'invoicing' ),
47
-		'P' => __( 'Formosa', 'invoicing' ),
48
-		'Y' => __( 'Jujuy', 'invoicing' ),
49
-		'L' => __( 'La Pampa', 'invoicing' ),
50
-		'F' => __( 'La Rioja', 'invoicing' ),
51
-		'M' => __( 'Mendoza', 'invoicing' ),
52
-		'N' => __( 'Misiones', 'invoicing' ),
53
-		'Q' => __( 'Neuqu&eacute;n', 'invoicing' ),
54
-		'R' => __( 'R&iacute;o Negro', 'invoicing' ),
55
-		'A' => __( 'Salta', 'invoicing' ),
56
-		'J' => __( 'San Juan', 'invoicing' ),
57
-		'D' => __( 'San Luis', 'invoicing' ),
58
-		'Z' => __( 'Santa Cruz', 'invoicing' ),
59
-		'S' => __( 'Santa Fe', 'invoicing' ),
60
-		'G' => __( 'Santiago del Estero', 'invoicing' ),
61
-		'V' => __( 'Tierra del Fuego', 'invoicing' ),
62
-		'T' => __( 'Tucum&aacute;n', 'invoicing' ),
63
-	),
64
-	'AT' => array(),
65
-	'AU' => array( // Australian states.
66
-		'ACT' => __( 'Australian Capital Territory', 'invoicing' ),
67
-		'NSW' => __( 'New South Wales', 'invoicing' ),
68
-		'NT'  => __( 'Northern Territory', 'invoicing' ),
69
-		'QLD' => __( 'Queensland', 'invoicing' ),
70
-		'SA'  => __( 'South Australia', 'invoicing' ),
71
-		'TAS' => __( 'Tasmania', 'invoicing' ),
72
-		'VIC' => __( 'Victoria', 'invoicing' ),
73
-		'WA'  => __( 'Western Australia', 'invoicing' ),
74
-	),
75
-	'AX' => array(),
76
-	'BD' => array( // Bangladeshi states (districts).
77
-		'BD-05' => __( 'Bagerhat', 'invoicing' ),
78
-		'BD-01' => __( 'Bandarban', 'invoicing' ),
79
-		'BD-02' => __( 'Barguna', 'invoicing' ),
80
-		'BD-06' => __( 'Barishal', 'invoicing' ),
81
-		'BD-07' => __( 'Bhola', 'invoicing' ),
82
-		'BD-03' => __( 'Bogura', 'invoicing' ),
83
-		'BD-04' => __( 'Brahmanbaria', 'invoicing' ),
84
-		'BD-09' => __( 'Chandpur', 'invoicing' ),
85
-		'BD-10' => __( 'Chattogram', 'invoicing' ),
86
-		'BD-12' => __( 'Chuadanga', 'invoicing' ),
87
-		'BD-11' => __( "Cox's Bazar", 'invoicing' ),
88
-		'BD-08' => __( 'Cumilla', 'invoicing' ),
89
-		'BD-13' => __( 'Dhaka', 'invoicing' ),
90
-		'BD-14' => __( 'Dinajpur', 'invoicing' ),
91
-		'BD-15' => __( 'Faridpur ', 'invoicing' ),
92
-		'BD-16' => __( 'Feni', 'invoicing' ),
93
-		'BD-19' => __( 'Gaibandha', 'invoicing' ),
94
-		'BD-18' => __( 'Gazipur', 'invoicing' ),
95
-		'BD-17' => __( 'Gopalganj', 'invoicing' ),
96
-		'BD-20' => __( 'Habiganj', 'invoicing' ),
97
-		'BD-21' => __( 'Jamalpur', 'invoicing' ),
98
-		'BD-22' => __( 'Jashore', 'invoicing' ),
99
-		'BD-25' => __( 'Jhalokati', 'invoicing' ),
100
-		'BD-23' => __( 'Jhenaidah', 'invoicing' ),
101
-		'BD-24' => __( 'Joypurhat', 'invoicing' ),
102
-		'BD-29' => __( 'Khagrachhari', 'invoicing' ),
103
-		'BD-27' => __( 'Khulna', 'invoicing' ),
104
-		'BD-26' => __( 'Kishoreganj', 'invoicing' ),
105
-		'BD-28' => __( 'Kurigram', 'invoicing' ),
106
-		'BD-30' => __( 'Kushtia', 'invoicing' ),
107
-		'BD-31' => __( 'Lakshmipur', 'invoicing' ),
108
-		'BD-32' => __( 'Lalmonirhat', 'invoicing' ),
109
-		'BD-36' => __( 'Madaripur', 'invoicing' ),
110
-		'BD-37' => __( 'Magura', 'invoicing' ),
111
-		'BD-33' => __( 'Manikganj ', 'invoicing' ),
112
-		'BD-39' => __( 'Meherpur', 'invoicing' ),
113
-		'BD-38' => __( 'Moulvibazar', 'invoicing' ),
114
-		'BD-35' => __( 'Munshiganj', 'invoicing' ),
115
-		'BD-34' => __( 'Mymensingh', 'invoicing' ),
116
-		'BD-48' => __( 'Naogaon', 'invoicing' ),
117
-		'BD-43' => __( 'Narail', 'invoicing' ),
118
-		'BD-40' => __( 'Narayanganj', 'invoicing' ),
119
-		'BD-42' => __( 'Narsingdi', 'invoicing' ),
120
-		'BD-44' => __( 'Natore', 'invoicing' ),
121
-		'BD-45' => __( 'Nawabganj', 'invoicing' ),
122
-		'BD-41' => __( 'Netrakona', 'invoicing' ),
123
-		'BD-46' => __( 'Nilphamari', 'invoicing' ),
124
-		'BD-47' => __( 'Noakhali', 'invoicing' ),
125
-		'BD-49' => __( 'Pabna', 'invoicing' ),
126
-		'BD-52' => __( 'Panchagarh', 'invoicing' ),
127
-		'BD-51' => __( 'Patuakhali', 'invoicing' ),
128
-		'BD-50' => __( 'Pirojpur', 'invoicing' ),
129
-		'BD-53' => __( 'Rajbari', 'invoicing' ),
130
-		'BD-54' => __( 'Rajshahi', 'invoicing' ),
131
-		'BD-56' => __( 'Rangamati', 'invoicing' ),
132
-		'BD-55' => __( 'Rangpur', 'invoicing' ),
133
-		'BD-58' => __( 'Satkhira', 'invoicing' ),
134
-		'BD-62' => __( 'Shariatpur', 'invoicing' ),
135
-		'BD-57' => __( 'Sherpur', 'invoicing' ),
136
-		'BD-59' => __( 'Sirajganj', 'invoicing' ),
137
-		'BD-61' => __( 'Sunamganj', 'invoicing' ),
138
-		'BD-60' => __( 'Sylhet', 'invoicing' ),
139
-		'BD-63' => __( 'Tangail', 'invoicing' ),
140
-		'BD-64' => __( 'Thakurgaon', 'invoicing' ),
141
-	),
142
-	'BE' => array(),
143
-	'BG' => array( // Bulgarian states.
144
-		'BG-01' => __( 'Blagoevgrad', 'invoicing' ),
145
-		'BG-02' => __( 'Burgas', 'invoicing' ),
146
-		'BG-08' => __( 'Dobrich', 'invoicing' ),
147
-		'BG-07' => __( 'Gabrovo', 'invoicing' ),
148
-		'BG-26' => __( 'Haskovo', 'invoicing' ),
149
-		'BG-09' => __( 'Kardzhali', 'invoicing' ),
150
-		'BG-10' => __( 'Kyustendil', 'invoicing' ),
151
-		'BG-11' => __( 'Lovech', 'invoicing' ),
152
-		'BG-12' => __( 'Montana', 'invoicing' ),
153
-		'BG-13' => __( 'Pazardzhik', 'invoicing' ),
154
-		'BG-14' => __( 'Pernik', 'invoicing' ),
155
-		'BG-15' => __( 'Pleven', 'invoicing' ),
156
-		'BG-16' => __( 'Plovdiv', 'invoicing' ),
157
-		'BG-17' => __( 'Razgrad', 'invoicing' ),
158
-		'BG-18' => __( 'Ruse', 'invoicing' ),
159
-		'BG-27' => __( 'Shumen', 'invoicing' ),
160
-		'BG-19' => __( 'Silistra', 'invoicing' ),
161
-		'BG-20' => __( 'Sliven', 'invoicing' ),
162
-		'BG-21' => __( 'Smolyan', 'invoicing' ),
163
-		'BG-23' => __( 'Sofia', 'invoicing' ),
164
-		'BG-22' => __( 'Sofia-Grad', 'invoicing' ),
165
-		'BG-24' => __( 'Stara Zagora', 'invoicing' ),
166
-		'BG-25' => __( 'Targovishte', 'invoicing' ),
167
-		'BG-03' => __( 'Varna', 'invoicing' ),
168
-		'BG-04' => __( 'Veliko Tarnovo', 'invoicing' ),
169
-		'BG-05' => __( 'Vidin', 'invoicing' ),
170
-		'BG-06' => __( 'Vratsa', 'invoicing' ),
171
-		'BG-28' => __( 'Yambol', 'invoicing' ),
172
-	),
173
-	'BH' => array(),
174
-	'BI' => array(),
175
-	'BO' => array( // Bolivian states.
176
-		'B' => __( 'Chuquisaca', 'invoicing' ),
177
-		'H' => __( 'Beni', 'invoicing' ),
178
-		'C' => __( 'Cochabamba', 'invoicing' ),
179
-		'L' => __( 'La Paz', 'invoicing' ),
180
-		'O' => __( 'Oruro', 'invoicing' ),
181
-		'N' => __( 'Pando', 'invoicing' ),
182
-		'P' => __( 'Potosí', 'invoicing' ),
183
-		'S' => __( 'Santa Cruz', 'invoicing' ),
184
-		'T' => __( 'Tarija', 'invoicing' ),
185
-	),
186
-	'BR' => array( // Brazillian states.
187
-		'AC' => __( 'Acre', 'invoicing' ),
188
-		'AL' => __( 'Alagoas', 'invoicing' ),
189
-		'AP' => __( 'Amap&aacute;', 'invoicing' ),
190
-		'AM' => __( 'Amazonas', 'invoicing' ),
191
-		'BA' => __( 'Bahia', 'invoicing' ),
192
-		'CE' => __( 'Cear&aacute;', 'invoicing' ),
193
-		'DF' => __( 'Distrito Federal', 'invoicing' ),
194
-		'ES' => __( 'Esp&iacute;rito Santo', 'invoicing' ),
195
-		'GO' => __( 'Goi&aacute;s', 'invoicing' ),
196
-		'MA' => __( 'Maranh&atilde;o', 'invoicing' ),
197
-		'MT' => __( 'Mato Grosso', 'invoicing' ),
198
-		'MS' => __( 'Mato Grosso do Sul', 'invoicing' ),
199
-		'MG' => __( 'Minas Gerais', 'invoicing' ),
200
-		'PA' => __( 'Par&aacute;', 'invoicing' ),
201
-		'PB' => __( 'Para&iacute;ba', 'invoicing' ),
202
-		'PR' => __( 'Paran&aacute;', 'invoicing' ),
203
-		'PE' => __( 'Pernambuco', 'invoicing' ),
204
-		'PI' => __( 'Piau&iacute;', 'invoicing' ),
205
-		'RJ' => __( 'Rio de Janeiro', 'invoicing' ),
206
-		'RN' => __( 'Rio Grande do Norte', 'invoicing' ),
207
-		'RS' => __( 'Rio Grande do Sul', 'invoicing' ),
208
-		'RO' => __( 'Rond&ocirc;nia', 'invoicing' ),
209
-		'RR' => __( 'Roraima', 'invoicing' ),
210
-		'SC' => __( 'Santa Catarina', 'invoicing' ),
211
-		'SP' => __( 'S&atilde;o Paulo', 'invoicing' ),
212
-		'SE' => __( 'Sergipe', 'invoicing' ),
213
-		'TO' => __( 'Tocantins', 'invoicing' ),
214
-	),
215
-	'CA' => array( // Canadian states.
216
-		'AB' => __( 'Alberta', 'invoicing' ),
217
-		'BC' => __( 'British Columbia', 'invoicing' ),
218
-		'MB' => __( 'Manitoba', 'invoicing' ),
219
-		'NB' => __( 'New Brunswick', 'invoicing' ),
220
-		'NL' => __( 'Newfoundland and Labrador', 'invoicing' ),
221
-		'NT' => __( 'Northwest Territories', 'invoicing' ),
222
-		'NS' => __( 'Nova Scotia', 'invoicing' ),
223
-		'NU' => __( 'Nunavut', 'invoicing' ),
224
-		'ON' => __( 'Ontario', 'invoicing' ),
225
-		'PE' => __( 'Prince Edward Island', 'invoicing' ),
226
-		'QC' => __( 'Quebec', 'invoicing' ),
227
-		'SK' => __( 'Saskatchewan', 'invoicing' ),
228
-		'YT' => __( 'Yukon Territory', 'invoicing' ),
229
-	),
230
-	'CH' => array( // Cantons of Switzerland.
231
-		'AG' => __( 'Aargau', 'invoicing' ),
232
-		'AR' => __( 'Appenzell Ausserrhoden', 'invoicing' ),
233
-		'AI' => __( 'Appenzell Innerrhoden', 'invoicing' ),
234
-		'BL' => __( 'Basel-Landschaft', 'invoicing' ),
235
-		'BS' => __( 'Basel-Stadt', 'invoicing' ),
236
-		'BE' => __( 'Bern', 'invoicing' ),
237
-		'FR' => __( 'Fribourg', 'invoicing' ),
238
-		'GE' => __( 'Geneva', 'invoicing' ),
239
-		'GL' => __( 'Glarus', 'invoicing' ),
240
-		'GR' => __( 'Graub&uuml;nden', 'invoicing' ),
241
-		'JU' => __( 'Jura', 'invoicing' ),
242
-		'LU' => __( 'Luzern', 'invoicing' ),
243
-		'NE' => __( 'Neuch&acirc;tel', 'invoicing' ),
244
-		'NW' => __( 'Nidwalden', 'invoicing' ),
245
-		'OW' => __( 'Obwalden', 'invoicing' ),
246
-		'SH' => __( 'Schaffhausen', 'invoicing' ),
247
-		'SZ' => __( 'Schwyz', 'invoicing' ),
248
-		'SO' => __( 'Solothurn', 'invoicing' ),
249
-		'SG' => __( 'St. Gallen', 'invoicing' ),
250
-		'TG' => __( 'Thurgau', 'invoicing' ),
251
-		'TI' => __( 'Ticino', 'invoicing' ),
252
-		'UR' => __( 'Uri', 'invoicing' ),
253
-		'VS' => __( 'Valais', 'invoicing' ),
254
-		'VD' => __( 'Vaud', 'invoicing' ),
255
-		'ZG' => __( 'Zug', 'invoicing' ),
256
-		'ZH' => __( 'Z&uuml;rich', 'invoicing' ),
257
-	),
258
-	'CN' => array( // Chinese states.
259
-		'CN1'  => __( 'Yunnan / &#20113;&#21335;', 'invoicing' ),
260
-		'CN2'  => __( 'Beijing / &#21271;&#20140;', 'invoicing' ),
261
-		'CN3'  => __( 'Tianjin / &#22825;&#27941;', 'invoicing' ),
262
-		'CN4'  => __( 'Hebei / &#27827;&#21271;', 'invoicing' ),
263
-		'CN5'  => __( 'Shanxi / &#23665;&#35199;', 'invoicing' ),
264
-		'CN6'  => __( 'Inner Mongolia / &#20839;&#33945;&#21476;', 'invoicing' ),
265
-		'CN7'  => __( 'Liaoning / &#36797;&#23425;', 'invoicing' ),
266
-		'CN8'  => __( 'Jilin / &#21513;&#26519;', 'invoicing' ),
267
-		'CN9'  => __( 'Heilongjiang / &#40657;&#40857;&#27743;', 'invoicing' ),
268
-		'CN10' => __( 'Shanghai / &#19978;&#28023;', 'invoicing' ),
269
-		'CN11' => __( 'Jiangsu / &#27743;&#33487;', 'invoicing' ),
270
-		'CN12' => __( 'Zhejiang / &#27993;&#27743;', 'invoicing' ),
271
-		'CN13' => __( 'Anhui / &#23433;&#24509;', 'invoicing' ),
272
-		'CN14' => __( 'Fujian / &#31119;&#24314;', 'invoicing' ),
273
-		'CN15' => __( 'Jiangxi / &#27743;&#35199;', 'invoicing' ),
274
-		'CN16' => __( 'Shandong / &#23665;&#19996;', 'invoicing' ),
275
-		'CN17' => __( 'Henan / &#27827;&#21335;', 'invoicing' ),
276
-		'CN18' => __( 'Hubei / &#28246;&#21271;', 'invoicing' ),
277
-		'CN19' => __( 'Hunan / &#28246;&#21335;', 'invoicing' ),
278
-		'CN20' => __( 'Guangdong / &#24191;&#19996;', 'invoicing' ),
279
-		'CN21' => __( 'Guangxi Zhuang / &#24191;&#35199;&#22766;&#26063;', 'invoicing' ),
280
-		'CN22' => __( 'Hainan / &#28023;&#21335;', 'invoicing' ),
281
-		'CN23' => __( 'Chongqing / &#37325;&#24198;', 'invoicing' ),
282
-		'CN24' => __( 'Sichuan / &#22235;&#24029;', 'invoicing' ),
283
-		'CN25' => __( 'Guizhou / &#36149;&#24030;', 'invoicing' ),
284
-		'CN26' => __( 'Shaanxi / &#38485;&#35199;', 'invoicing' ),
285
-		'CN27' => __( 'Gansu / &#29976;&#32899;', 'invoicing' ),
286
-		'CN28' => __( 'Qinghai / &#38738;&#28023;', 'invoicing' ),
287
-		'CN29' => __( 'Ningxia Hui / &#23425;&#22799;', 'invoicing' ),
288
-		'CN30' => __( 'Macao / &#28595;&#38376;', 'invoicing' ),
289
-		'CN31' => __( 'Tibet / &#35199;&#34255;', 'invoicing' ),
290
-		'CN32' => __( 'Xinjiang / &#26032;&#30086;', 'invoicing' ),
291
-	),
292
-	'CZ' => array(),
293
-	'DE' => array(),
294
-	'DK' => array(),
295
-	'EE' => array(),
296
-	'ES' => array( // Spanish states.
297
-		'C'  => __( 'A Coru&ntilde;a', 'invoicing' ),
298
-		'VI' => __( 'Araba/&Aacute;lava', 'invoicing' ),
299
-		'AB' => __( 'Albacete', 'invoicing' ),
300
-		'A'  => __( 'Alicante', 'invoicing' ),
301
-		'AL' => __( 'Almer&iacute;a', 'invoicing' ),
302
-		'O'  => __( 'Asturias', 'invoicing' ),
303
-		'AV' => __( '&Aacute;vila', 'invoicing' ),
304
-		'BA' => __( 'Badajoz', 'invoicing' ),
305
-		'PM' => __( 'Baleares', 'invoicing' ),
306
-		'B'  => __( 'Barcelona', 'invoicing' ),
307
-		'BU' => __( 'Burgos', 'invoicing' ),
308
-		'CC' => __( 'C&aacute;ceres', 'invoicing' ),
309
-		'CA' => __( 'C&aacute;diz', 'invoicing' ),
310
-		'S'  => __( 'Cantabria', 'invoicing' ),
311
-		'CS' => __( 'Castell&oacute;n', 'invoicing' ),
312
-		'CE' => __( 'Ceuta', 'invoicing' ),
313
-		'CR' => __( 'Ciudad Real', 'invoicing' ),
314
-		'CO' => __( 'C&oacute;rdoba', 'invoicing' ),
315
-		'CU' => __( 'Cuenca', 'invoicing' ),
316
-		'GI' => __( 'Girona', 'invoicing' ),
317
-		'GR' => __( 'Granada', 'invoicing' ),
318
-		'GU' => __( 'Guadalajara', 'invoicing' ),
319
-		'SS' => __( 'Gipuzkoa', 'invoicing' ),
320
-		'H'  => __( 'Huelva', 'invoicing' ),
321
-		'HU' => __( 'Huesca', 'invoicing' ),
322
-		'J'  => __( 'Ja&eacute;n', 'invoicing' ),
323
-		'LO' => __( 'La Rioja', 'invoicing' ),
324
-		'GC' => __( 'Las Palmas', 'invoicing' ),
325
-		'LE' => __( 'Le&oacute;n', 'invoicing' ),
326
-		'L'  => __( 'Lleida', 'invoicing' ),
327
-		'LU' => __( 'Lugo', 'invoicing' ),
328
-		'M'  => __( 'Madrid', 'invoicing' ),
329
-		'MA' => __( 'M&aacute;laga', 'invoicing' ),
330
-		'ML' => __( 'Melilla', 'invoicing' ),
331
-		'MU' => __( 'Murcia', 'invoicing' ),
332
-		'NA' => __( 'Navarra', 'invoicing' ),
333
-		'OR' => __( 'Ourense', 'invoicing' ),
334
-		'P'  => __( 'Palencia', 'invoicing' ),
335
-		'PO' => __( 'Pontevedra', 'invoicing' ),
336
-		'SA' => __( 'Salamanca', 'invoicing' ),
337
-		'TF' => __( 'Santa Cruz de Tenerife', 'invoicing' ),
338
-		'SG' => __( 'Segovia', 'invoicing' ),
339
-		'SE' => __( 'Sevilla', 'invoicing' ),
340
-		'SO' => __( 'Soria', 'invoicing' ),
341
-		'T'  => __( 'Tarragona', 'invoicing' ),
342
-		'TE' => __( 'Teruel', 'invoicing' ),
343
-		'TO' => __( 'Toledo', 'invoicing' ),
344
-		'V'  => __( 'Valencia', 'invoicing' ),
345
-		'VA' => __( 'Valladolid', 'invoicing' ),
346
-		'BI' => __( 'Bizkaia', 'invoicing' ),
347
-		'ZA' => __( 'Zamora', 'invoicing' ),
348
-		'Z'  => __( 'Zaragoza', 'invoicing' ),
349
-	),
350
-	'FI' => array(),
351
-	'FR' => array(),
352
-	'GP' => array(),
353
-	'GR' => array( // Greek Regions.
354
-		'I' => __( 'Αττική', 'invoicing' ),
355
-		'A' => __( 'Ανατολική Μακεδονία και Θράκη', 'invoicing' ),
356
-		'B' => __( 'Κεντρική Μακεδονία', 'invoicing' ),
357
-		'C' => __( 'Δυτική Μακεδονία', 'invoicing' ),
358
-		'D' => __( 'Ήπειρος', 'invoicing' ),
359
-		'E' => __( 'Θεσσαλία', 'invoicing' ),
360
-		'F' => __( 'Ιόνιοι Νήσοι', 'invoicing' ),
361
-		'G' => __( 'Δυτική Ελλάδα', 'invoicing' ),
362
-		'H' => __( 'Στερεά Ελλάδα', 'invoicing' ),
363
-		'J' => __( 'Πελοπόννησος', 'invoicing' ),
364
-		'K' => __( 'Βόρειο Αιγαίο', 'invoicing' ),
365
-		'L' => __( 'Νότιο Αιγαίο', 'invoicing' ),
366
-		'M' => __( 'Κρήτη', 'invoicing' ),
367
-	),
368
-	'GF' => array(),
369
-	'HK' => array( // Hong Kong states.
370
-		'HONG KONG'       => __( 'Hong Kong Island', 'invoicing' ),
371
-		'KOWLOON'         => __( 'Kowloon', 'invoicing' ),
372
-		'NEW TERRITORIES' => __( 'New Territories', 'invoicing' ),
373
-	),
374
-	'HU' => array( // Hungary states.
375
-		'BK' => __( 'Bács-Kiskun', 'invoicing' ),
376
-		'BE' => __( 'Békés', 'invoicing' ),
377
-		'BA' => __( 'Baranya', 'invoicing' ),
378
-		'BZ' => __( 'Borsod-Abaúj-Zemplén', 'invoicing' ),
379
-		'BU' => __( 'Budapest', 'invoicing' ),
380
-		'CS' => __( 'Csongrád', 'invoicing' ),
381
-		'FE' => __( 'Fejér', 'invoicing' ),
382
-		'GS' => __( 'Győr-Moson-Sopron', 'invoicing' ),
383
-		'HB' => __( 'Hajdú-Bihar', 'invoicing' ),
384
-		'HE' => __( 'Heves', 'invoicing' ),
385
-		'JN' => __( 'Jász-Nagykun-Szolnok', 'invoicing' ),
386
-		'KE' => __( 'Komárom-Esztergom', 'invoicing' ),
387
-		'NO' => __( 'Nógrád', 'invoicing' ),
388
-		'PE' => __( 'Pest', 'invoicing' ),
389
-		'SO' => __( 'Somogy', 'invoicing' ),
390
-		'SZ' => __( 'Szabolcs-Szatmár-Bereg', 'invoicing' ),
391
-		'TO' => __( 'Tolna', 'invoicing' ),
392
-		'VA' => __( 'Vas', 'invoicing' ),
393
-		'VE' => __( 'Veszprém', 'invoicing' ),
394
-		'ZA' => __( 'Zala', 'invoicing' ),
395
-	),
396
-	'ID' => array( // Indonesia Provinces.
397
-		'AC' => __( 'Daerah Istimewa Aceh', 'invoicing' ),
398
-		'SU' => __( 'Sumatera Utara', 'invoicing' ),
399
-		'SB' => __( 'Sumatera Barat', 'invoicing' ),
400
-		'RI' => __( 'Riau', 'invoicing' ),
401
-		'KR' => __( 'Kepulauan Riau', 'invoicing' ),
402
-		'JA' => __( 'Jambi', 'invoicing' ),
403
-		'SS' => __( 'Sumatera Selatan', 'invoicing' ),
404
-		'BB' => __( 'Bangka Belitung', 'invoicing' ),
405
-		'BE' => __( 'Bengkulu', 'invoicing' ),
406
-		'LA' => __( 'Lampung', 'invoicing' ),
407
-		'JK' => __( 'DKI Jakarta', 'invoicing' ),
408
-		'JB' => __( 'Jawa Barat', 'invoicing' ),
409
-		'BT' => __( 'Banten', 'invoicing' ),
410
-		'JT' => __( 'Jawa Tengah', 'invoicing' ),
411
-		'JI' => __( 'Jawa Timur', 'invoicing' ),
412
-		'YO' => __( 'Daerah Istimewa Yogyakarta', 'invoicing' ),
413
-		'BA' => __( 'Bali', 'invoicing' ),
414
-		'NB' => __( 'Nusa Tenggara Barat', 'invoicing' ),
415
-		'NT' => __( 'Nusa Tenggara Timur', 'invoicing' ),
416
-		'KB' => __( 'Kalimantan Barat', 'invoicing' ),
417
-		'KT' => __( 'Kalimantan Tengah', 'invoicing' ),
418
-		'KI' => __( 'Kalimantan Timur', 'invoicing' ),
419
-		'KS' => __( 'Kalimantan Selatan', 'invoicing' ),
420
-		'KU' => __( 'Kalimantan Utara', 'invoicing' ),
421
-		'SA' => __( 'Sulawesi Utara', 'invoicing' ),
422
-		'ST' => __( 'Sulawesi Tengah', 'invoicing' ),
423
-		'SG' => __( 'Sulawesi Tenggara', 'invoicing' ),
424
-		'SR' => __( 'Sulawesi Barat', 'invoicing' ),
425
-		'SN' => __( 'Sulawesi Selatan', 'invoicing' ),
426
-		'GO' => __( 'Gorontalo', 'invoicing' ),
427
-		'MA' => __( 'Maluku', 'invoicing' ),
428
-		'MU' => __( 'Maluku Utara', 'invoicing' ),
429
-		'PA' => __( 'Papua', 'invoicing' ),
430
-		'PB' => __( 'Papua Barat', 'invoicing' ),
431
-	),
432
-	'IE' => array( // Republic of Ireland.
433
-		'CW' => __( 'Carlow', 'invoicing' ),
434
-		'CN' => __( 'Cavan', 'invoicing' ),
435
-		'CE' => __( 'Clare', 'invoicing' ),
436
-		'CO' => __( 'Cork', 'invoicing' ),
437
-		'DL' => __( 'Donegal', 'invoicing' ),
438
-		'D'  => __( 'Dublin', 'invoicing' ),
439
-		'G'  => __( 'Galway', 'invoicing' ),
440
-		'KY' => __( 'Kerry', 'invoicing' ),
441
-		'KE' => __( 'Kildare', 'invoicing' ),
442
-		'KK' => __( 'Kilkenny', 'invoicing' ),
443
-		'LS' => __( 'Laois', 'invoicing' ),
444
-		'LM' => __( 'Leitrim', 'invoicing' ),
445
-		'LK' => __( 'Limerick', 'invoicing' ),
446
-		'LD' => __( 'Longford', 'invoicing' ),
447
-		'LH' => __( 'Louth', 'invoicing' ),
448
-		'MO' => __( 'Mayo', 'invoicing' ),
449
-		'MH' => __( 'Meath', 'invoicing' ),
450
-		'MN' => __( 'Monaghan', 'invoicing' ),
451
-		'OY' => __( 'Offaly', 'invoicing' ),
452
-		'RN' => __( 'Roscommon', 'invoicing' ),
453
-		'SO' => __( 'Sligo', 'invoicing' ),
454
-		'TA' => __( 'Tipperary', 'invoicing' ),
455
-		'WD' => __( 'Waterford', 'invoicing' ),
456
-		'WH' => __( 'Westmeath', 'invoicing' ),
457
-		'WX' => __( 'Wexford', 'invoicing' ),
458
-		'WW' => __( 'Wicklow', 'invoicing' ),
459
-	),
460
-	'IN' => array( // Indian states.
461
-		'AP' => __( 'Andhra Pradesh', 'invoicing' ),
462
-		'AR' => __( 'Arunachal Pradesh', 'invoicing' ),
463
-		'AS' => __( 'Assam', 'invoicing' ),
464
-		'BR' => __( 'Bihar', 'invoicing' ),
465
-		'CT' => __( 'Chhattisgarh', 'invoicing' ),
466
-		'GA' => __( 'Goa', 'invoicing' ),
467
-		'GJ' => __( 'Gujarat', 'invoicing' ),
468
-		'HR' => __( 'Haryana', 'invoicing' ),
469
-		'HP' => __( 'Himachal Pradesh', 'invoicing' ),
470
-		'JK' => __( 'Jammu and Kashmir', 'invoicing' ),
471
-		'JH' => __( 'Jharkhand', 'invoicing' ),
472
-		'KA' => __( 'Karnataka', 'invoicing' ),
473
-		'KL' => __( 'Kerala', 'invoicing' ),
474
-		'MP' => __( 'Madhya Pradesh', 'invoicing' ),
475
-		'MH' => __( 'Maharashtra', 'invoicing' ),
476
-		'MN' => __( 'Manipur', 'invoicing' ),
477
-		'ML' => __( 'Meghalaya', 'invoicing' ),
478
-		'MZ' => __( 'Mizoram', 'invoicing' ),
479
-		'NL' => __( 'Nagaland', 'invoicing' ),
480
-		'OR' => __( 'Orissa', 'invoicing' ),
481
-		'PB' => __( 'Punjab', 'invoicing' ),
482
-		'RJ' => __( 'Rajasthan', 'invoicing' ),
483
-		'SK' => __( 'Sikkim', 'invoicing' ),
484
-		'TN' => __( 'Tamil Nadu', 'invoicing' ),
485
-		'TS' => __( 'Telangana', 'invoicing' ),
486
-		'TR' => __( 'Tripura', 'invoicing' ),
487
-		'UK' => __( 'Uttarakhand', 'invoicing' ),
488
-		'UP' => __( 'Uttar Pradesh', 'invoicing' ),
489
-		'WB' => __( 'West Bengal', 'invoicing' ),
490
-		'AN' => __( 'Andaman and Nicobar Islands', 'invoicing' ),
491
-		'CH' => __( 'Chandigarh', 'invoicing' ),
492
-		'DN' => __( 'Dadra and Nagar Haveli', 'invoicing' ),
493
-		'DD' => __( 'Daman and Diu', 'invoicing' ),
494
-		'DL' => __( 'Delhi', 'invoicing' ),
495
-		'LD' => __( 'Lakshadeep', 'invoicing' ),
496
-		'PY' => __( 'Pondicherry (Puducherry)', 'invoicing' ),
497
-	),
498
-	'IR' => array( // Iran States.
499
-		'KHZ' => __( 'Khuzestan  (خوزستان)', 'invoicing' ),
500
-		'THR' => __( 'Tehran  (تهران)', 'invoicing' ),
501
-		'ILM' => __( 'Ilaam (ایلام)', 'invoicing' ),
502
-		'BHR' => __( 'Bushehr (بوشهر)', 'invoicing' ),
503
-		'ADL' => __( 'Ardabil (اردبیل)', 'invoicing' ),
504
-		'ESF' => __( 'Isfahan (اصفهان)', 'invoicing' ),
505
-		'YZD' => __( 'Yazd (یزد)', 'invoicing' ),
506
-		'KRH' => __( 'Kermanshah (کرمانشاه)', 'invoicing' ),
507
-		'KRN' => __( 'Kerman (کرمان)', 'invoicing' ),
508
-		'HDN' => __( 'Hamadan (همدان)', 'invoicing' ),
509
-		'GZN' => __( 'Ghazvin (قزوین)', 'invoicing' ),
510
-		'ZJN' => __( 'Zanjan (زنجان)', 'invoicing' ),
511
-		'LRS' => __( 'Luristan (لرستان)', 'invoicing' ),
512
-		'ABZ' => __( 'Alborz (البرز)', 'invoicing' ),
513
-		'EAZ' => __( 'East Azarbaijan (آذربایجان شرقی)', 'invoicing' ),
514
-		'WAZ' => __( 'West Azarbaijan (آذربایجان غربی)', 'invoicing' ),
515
-		'CHB' => __( 'Chaharmahal and Bakhtiari (چهارمحال و بختیاری)', 'invoicing' ),
516
-		'SKH' => __( 'South Khorasan (خراسان جنوبی)', 'invoicing' ),
517
-		'RKH' => __( 'Razavi Khorasan (خراسان رضوی)', 'invoicing' ),
518
-		'NKH' => __( 'North Khorasan (خراسان شمالی)', 'invoicing' ),
519
-		'SMN' => __( 'Semnan (سمنان)', 'invoicing' ),
520
-		'FRS' => __( 'Fars (فارس)', 'invoicing' ),
521
-		'QHM' => __( 'Qom (قم)', 'invoicing' ),
522
-		'KRD' => __( 'Kurdistan / کردستان)', 'invoicing' ),
523
-		'KBD' => __( 'Kohgiluyeh and BoyerAhmad (کهگیلوییه و بویراحمد)', 'invoicing' ),
524
-		'GLS' => __( 'Golestan (گلستان)', 'invoicing' ),
525
-		'GIL' => __( 'Gilan (گیلان)', 'invoicing' ),
526
-		'MZN' => __( 'Mazandaran (مازندران)', 'invoicing' ),
527
-		'MKZ' => __( 'Markazi (مرکزی)', 'invoicing' ),
528
-		'HRZ' => __( 'Hormozgan (هرمزگان)', 'invoicing' ),
529
-		'SBN' => __( 'Sistan and Baluchestan (سیستان و بلوچستان)', 'invoicing' ),
530
-	),
531
-	'IS' => array(),
532
-	'IT' => array( // Italy Provinces.
533
-		'AG' => __( 'Agrigento', 'invoicing' ),
534
-		'AL' => __( 'Alessandria', 'invoicing' ),
535
-		'AN' => __( 'Ancona', 'invoicing' ),
536
-		'AO' => __( 'Aosta', 'invoicing' ),
537
-		'AR' => __( 'Arezzo', 'invoicing' ),
538
-		'AP' => __( 'Ascoli Piceno', 'invoicing' ),
539
-		'AT' => __( 'Asti', 'invoicing' ),
540
-		'AV' => __( 'Avellino', 'invoicing' ),
541
-		'BA' => __( 'Bari', 'invoicing' ),
542
-		'BT' => __( 'Barletta-Andria-Trani', 'invoicing' ),
543
-		'BL' => __( 'Belluno', 'invoicing' ),
544
-		'BN' => __( 'Benevento', 'invoicing' ),
545
-		'BG' => __( 'Bergamo', 'invoicing' ),
546
-		'BI' => __( 'Biella', 'invoicing' ),
547
-		'BO' => __( 'Bologna', 'invoicing' ),
548
-		'BZ' => __( 'Bolzano', 'invoicing' ),
549
-		'BS' => __( 'Brescia', 'invoicing' ),
550
-		'BR' => __( 'Brindisi', 'invoicing' ),
551
-		'CA' => __( 'Cagliari', 'invoicing' ),
552
-		'CL' => __( 'Caltanissetta', 'invoicing' ),
553
-		'CB' => __( 'Campobasso', 'invoicing' ),
554
-		'CE' => __( 'Caserta', 'invoicing' ),
555
-		'CT' => __( 'Catania', 'invoicing' ),
556
-		'CZ' => __( 'Catanzaro', 'invoicing' ),
557
-		'CH' => __( 'Chieti', 'invoicing' ),
558
-		'CO' => __( 'Como', 'invoicing' ),
559
-		'CS' => __( 'Cosenza', 'invoicing' ),
560
-		'CR' => __( 'Cremona', 'invoicing' ),
561
-		'KR' => __( 'Crotone', 'invoicing' ),
562
-		'CN' => __( 'Cuneo', 'invoicing' ),
563
-		'EN' => __( 'Enna', 'invoicing' ),
564
-		'FM' => __( 'Fermo', 'invoicing' ),
565
-		'FE' => __( 'Ferrara', 'invoicing' ),
566
-		'FI' => __( 'Firenze', 'invoicing' ),
567
-		'FG' => __( 'Foggia', 'invoicing' ),
568
-		'FC' => __( 'Forlì-Cesena', 'invoicing' ),
569
-		'FR' => __( 'Frosinone', 'invoicing' ),
570
-		'GE' => __( 'Genova', 'invoicing' ),
571
-		'GO' => __( 'Gorizia', 'invoicing' ),
572
-		'GR' => __( 'Grosseto', 'invoicing' ),
573
-		'IM' => __( 'Imperia', 'invoicing' ),
574
-		'IS' => __( 'Isernia', 'invoicing' ),
575
-		'SP' => __( 'La Spezia', 'invoicing' ),
576
-		'AQ' => __( "L'Aquila", 'invoicing' ),
577
-		'LT' => __( 'Latina', 'invoicing' ),
578
-		'LE' => __( 'Lecce', 'invoicing' ),
579
-		'LC' => __( 'Lecco', 'invoicing' ),
580
-		'LI' => __( 'Livorno', 'invoicing' ),
581
-		'LO' => __( 'Lodi', 'invoicing' ),
582
-		'LU' => __( 'Lucca', 'invoicing' ),
583
-		'MC' => __( 'Macerata', 'invoicing' ),
584
-		'MN' => __( 'Mantova', 'invoicing' ),
585
-		'MS' => __( 'Massa-Carrara', 'invoicing' ),
586
-		'MT' => __( 'Matera', 'invoicing' ),
587
-		'ME' => __( 'Messina', 'invoicing' ),
588
-		'MI' => __( 'Milano', 'invoicing' ),
589
-		'MO' => __( 'Modena', 'invoicing' ),
590
-		'MB' => __( 'Monza e della Brianza', 'invoicing' ),
591
-		'NA' => __( 'Napoli', 'invoicing' ),
592
-		'NO' => __( 'Novara', 'invoicing' ),
593
-		'NU' => __( 'Nuoro', 'invoicing' ),
594
-		'OR' => __( 'Oristano', 'invoicing' ),
595
-		'PD' => __( 'Padova', 'invoicing' ),
596
-		'PA' => __( 'Palermo', 'invoicing' ),
597
-		'PR' => __( 'Parma', 'invoicing' ),
598
-		'PV' => __( 'Pavia', 'invoicing' ),
599
-		'PG' => __( 'Perugia', 'invoicing' ),
600
-		'PU' => __( 'Pesaro e Urbino', 'invoicing' ),
601
-		'PE' => __( 'Pescara', 'invoicing' ),
602
-		'PC' => __( 'Piacenza', 'invoicing' ),
603
-		'PI' => __( 'Pisa', 'invoicing' ),
604
-		'PT' => __( 'Pistoia', 'invoicing' ),
605
-		'PN' => __( 'Pordenone', 'invoicing' ),
606
-		'PZ' => __( 'Potenza', 'invoicing' ),
607
-		'PO' => __( 'Prato', 'invoicing' ),
608
-		'RG' => __( 'Ragusa', 'invoicing' ),
609
-		'RA' => __( 'Ravenna', 'invoicing' ),
610
-		'RC' => __( 'Reggio Calabria', 'invoicing' ),
611
-		'RE' => __( 'Reggio Emilia', 'invoicing' ),
612
-		'RI' => __( 'Rieti', 'invoicing' ),
613
-		'RN' => __( 'Rimini', 'invoicing' ),
614
-		'RM' => __( 'Roma', 'invoicing' ),
615
-		'RO' => __( 'Rovigo', 'invoicing' ),
616
-		'SA' => __( 'Salerno', 'invoicing' ),
617
-		'SS' => __( 'Sassari', 'invoicing' ),
618
-		'SV' => __( 'Savona', 'invoicing' ),
619
-		'SI' => __( 'Siena', 'invoicing' ),
620
-		'SR' => __( 'Siracusa', 'invoicing' ),
621
-		'SO' => __( 'Sondrio', 'invoicing' ),
622
-		'SU' => __( 'Sud Sardegna', 'invoicing' ),
623
-		'TA' => __( 'Taranto', 'invoicing' ),
624
-		'TE' => __( 'Teramo', 'invoicing' ),
625
-		'TR' => __( 'Terni', 'invoicing' ),
626
-		'TO' => __( 'Torino', 'invoicing' ),
627
-		'TP' => __( 'Trapani', 'invoicing' ),
628
-		'TN' => __( 'Trento', 'invoicing' ),
629
-		'TV' => __( 'Treviso', 'invoicing' ),
630
-		'TS' => __( 'Trieste', 'invoicing' ),
631
-		'UD' => __( 'Udine', 'invoicing' ),
632
-		'VA' => __( 'Varese', 'invoicing' ),
633
-		'VE' => __( 'Venezia', 'invoicing' ),
634
-		'VB' => __( 'Verbano-Cusio-Ossola', 'invoicing' ),
635
-		'VC' => __( 'Vercelli', 'invoicing' ),
636
-		'VR' => __( 'Verona', 'invoicing' ),
637
-		'VV' => __( 'Vibo Valentia', 'invoicing' ),
638
-		'VI' => __( 'Vicenza', 'invoicing' ),
639
-		'VT' => __( 'Viterbo', 'invoicing' ),
640
-	),
641
-	'IL' => array(),
642
-	'IM' => array(),
17
+    'AF' => array(),
18
+    'AO' => array( // Angola states.
19
+        'BGO' => __( 'Bengo', 'invoicing' ),
20
+        'BLU' => __( 'Benguela', 'invoicing' ),
21
+        'BIE' => __( 'Bié', 'invoicing' ),
22
+        'CAB' => __( 'Cabinda', 'invoicing' ),
23
+        'CNN' => __( 'Cunene', 'invoicing' ),
24
+        'HUA' => __( 'Huambo', 'invoicing' ),
25
+        'HUI' => __( 'Huíla', 'invoicing' ),
26
+        'CCU' => __( 'Kuando Kubango', 'invoicing' ),
27
+        'CNO' => __( 'Kwanza-Norte', 'invoicing' ),
28
+        'CUS' => __( 'Kwanza-Sul', 'invoicing' ),
29
+        'LUA' => __( 'Luanda', 'invoicing' ),
30
+        'LNO' => __( 'Lunda-Norte', 'invoicing' ),
31
+        'LSU' => __( 'Lunda-Sul', 'invoicing' ),
32
+        'MAL' => __( 'Malanje', 'invoicing' ),
33
+        'MOX' => __( 'Moxico', 'invoicing' ),
34
+        'NAM' => __( 'Namibe', 'invoicing' ),
35
+        'UIG' => __( 'Uíge', 'invoicing' ),
36
+        'ZAI' => __( 'Zaire', 'invoicing' ),
37
+    ),
38
+    'AR' => array( // Argentinian provinces.
39
+        'C' => __( 'Ciudad Aut&oacute;noma de Buenos Aires', 'invoicing' ),
40
+        'B' => __( 'Buenos Aires', 'invoicing' ),
41
+        'K' => __( 'Catamarca', 'invoicing' ),
42
+        'H' => __( 'Chaco', 'invoicing' ),
43
+        'U' => __( 'Chubut', 'invoicing' ),
44
+        'X' => __( 'C&oacute;rdoba', 'invoicing' ),
45
+        'W' => __( 'Corrientes', 'invoicing' ),
46
+        'E' => __( 'Entre R&iacute;os', 'invoicing' ),
47
+        'P' => __( 'Formosa', 'invoicing' ),
48
+        'Y' => __( 'Jujuy', 'invoicing' ),
49
+        'L' => __( 'La Pampa', 'invoicing' ),
50
+        'F' => __( 'La Rioja', 'invoicing' ),
51
+        'M' => __( 'Mendoza', 'invoicing' ),
52
+        'N' => __( 'Misiones', 'invoicing' ),
53
+        'Q' => __( 'Neuqu&eacute;n', 'invoicing' ),
54
+        'R' => __( 'R&iacute;o Negro', 'invoicing' ),
55
+        'A' => __( 'Salta', 'invoicing' ),
56
+        'J' => __( 'San Juan', 'invoicing' ),
57
+        'D' => __( 'San Luis', 'invoicing' ),
58
+        'Z' => __( 'Santa Cruz', 'invoicing' ),
59
+        'S' => __( 'Santa Fe', 'invoicing' ),
60
+        'G' => __( 'Santiago del Estero', 'invoicing' ),
61
+        'V' => __( 'Tierra del Fuego', 'invoicing' ),
62
+        'T' => __( 'Tucum&aacute;n', 'invoicing' ),
63
+    ),
64
+    'AT' => array(),
65
+    'AU' => array( // Australian states.
66
+        'ACT' => __( 'Australian Capital Territory', 'invoicing' ),
67
+        'NSW' => __( 'New South Wales', 'invoicing' ),
68
+        'NT'  => __( 'Northern Territory', 'invoicing' ),
69
+        'QLD' => __( 'Queensland', 'invoicing' ),
70
+        'SA'  => __( 'South Australia', 'invoicing' ),
71
+        'TAS' => __( 'Tasmania', 'invoicing' ),
72
+        'VIC' => __( 'Victoria', 'invoicing' ),
73
+        'WA'  => __( 'Western Australia', 'invoicing' ),
74
+    ),
75
+    'AX' => array(),
76
+    'BD' => array( // Bangladeshi states (districts).
77
+        'BD-05' => __( 'Bagerhat', 'invoicing' ),
78
+        'BD-01' => __( 'Bandarban', 'invoicing' ),
79
+        'BD-02' => __( 'Barguna', 'invoicing' ),
80
+        'BD-06' => __( 'Barishal', 'invoicing' ),
81
+        'BD-07' => __( 'Bhola', 'invoicing' ),
82
+        'BD-03' => __( 'Bogura', 'invoicing' ),
83
+        'BD-04' => __( 'Brahmanbaria', 'invoicing' ),
84
+        'BD-09' => __( 'Chandpur', 'invoicing' ),
85
+        'BD-10' => __( 'Chattogram', 'invoicing' ),
86
+        'BD-12' => __( 'Chuadanga', 'invoicing' ),
87
+        'BD-11' => __( "Cox's Bazar", 'invoicing' ),
88
+        'BD-08' => __( 'Cumilla', 'invoicing' ),
89
+        'BD-13' => __( 'Dhaka', 'invoicing' ),
90
+        'BD-14' => __( 'Dinajpur', 'invoicing' ),
91
+        'BD-15' => __( 'Faridpur ', 'invoicing' ),
92
+        'BD-16' => __( 'Feni', 'invoicing' ),
93
+        'BD-19' => __( 'Gaibandha', 'invoicing' ),
94
+        'BD-18' => __( 'Gazipur', 'invoicing' ),
95
+        'BD-17' => __( 'Gopalganj', 'invoicing' ),
96
+        'BD-20' => __( 'Habiganj', 'invoicing' ),
97
+        'BD-21' => __( 'Jamalpur', 'invoicing' ),
98
+        'BD-22' => __( 'Jashore', 'invoicing' ),
99
+        'BD-25' => __( 'Jhalokati', 'invoicing' ),
100
+        'BD-23' => __( 'Jhenaidah', 'invoicing' ),
101
+        'BD-24' => __( 'Joypurhat', 'invoicing' ),
102
+        'BD-29' => __( 'Khagrachhari', 'invoicing' ),
103
+        'BD-27' => __( 'Khulna', 'invoicing' ),
104
+        'BD-26' => __( 'Kishoreganj', 'invoicing' ),
105
+        'BD-28' => __( 'Kurigram', 'invoicing' ),
106
+        'BD-30' => __( 'Kushtia', 'invoicing' ),
107
+        'BD-31' => __( 'Lakshmipur', 'invoicing' ),
108
+        'BD-32' => __( 'Lalmonirhat', 'invoicing' ),
109
+        'BD-36' => __( 'Madaripur', 'invoicing' ),
110
+        'BD-37' => __( 'Magura', 'invoicing' ),
111
+        'BD-33' => __( 'Manikganj ', 'invoicing' ),
112
+        'BD-39' => __( 'Meherpur', 'invoicing' ),
113
+        'BD-38' => __( 'Moulvibazar', 'invoicing' ),
114
+        'BD-35' => __( 'Munshiganj', 'invoicing' ),
115
+        'BD-34' => __( 'Mymensingh', 'invoicing' ),
116
+        'BD-48' => __( 'Naogaon', 'invoicing' ),
117
+        'BD-43' => __( 'Narail', 'invoicing' ),
118
+        'BD-40' => __( 'Narayanganj', 'invoicing' ),
119
+        'BD-42' => __( 'Narsingdi', 'invoicing' ),
120
+        'BD-44' => __( 'Natore', 'invoicing' ),
121
+        'BD-45' => __( 'Nawabganj', 'invoicing' ),
122
+        'BD-41' => __( 'Netrakona', 'invoicing' ),
123
+        'BD-46' => __( 'Nilphamari', 'invoicing' ),
124
+        'BD-47' => __( 'Noakhali', 'invoicing' ),
125
+        'BD-49' => __( 'Pabna', 'invoicing' ),
126
+        'BD-52' => __( 'Panchagarh', 'invoicing' ),
127
+        'BD-51' => __( 'Patuakhali', 'invoicing' ),
128
+        'BD-50' => __( 'Pirojpur', 'invoicing' ),
129
+        'BD-53' => __( 'Rajbari', 'invoicing' ),
130
+        'BD-54' => __( 'Rajshahi', 'invoicing' ),
131
+        'BD-56' => __( 'Rangamati', 'invoicing' ),
132
+        'BD-55' => __( 'Rangpur', 'invoicing' ),
133
+        'BD-58' => __( 'Satkhira', 'invoicing' ),
134
+        'BD-62' => __( 'Shariatpur', 'invoicing' ),
135
+        'BD-57' => __( 'Sherpur', 'invoicing' ),
136
+        'BD-59' => __( 'Sirajganj', 'invoicing' ),
137
+        'BD-61' => __( 'Sunamganj', 'invoicing' ),
138
+        'BD-60' => __( 'Sylhet', 'invoicing' ),
139
+        'BD-63' => __( 'Tangail', 'invoicing' ),
140
+        'BD-64' => __( 'Thakurgaon', 'invoicing' ),
141
+    ),
142
+    'BE' => array(),
143
+    'BG' => array( // Bulgarian states.
144
+        'BG-01' => __( 'Blagoevgrad', 'invoicing' ),
145
+        'BG-02' => __( 'Burgas', 'invoicing' ),
146
+        'BG-08' => __( 'Dobrich', 'invoicing' ),
147
+        'BG-07' => __( 'Gabrovo', 'invoicing' ),
148
+        'BG-26' => __( 'Haskovo', 'invoicing' ),
149
+        'BG-09' => __( 'Kardzhali', 'invoicing' ),
150
+        'BG-10' => __( 'Kyustendil', 'invoicing' ),
151
+        'BG-11' => __( 'Lovech', 'invoicing' ),
152
+        'BG-12' => __( 'Montana', 'invoicing' ),
153
+        'BG-13' => __( 'Pazardzhik', 'invoicing' ),
154
+        'BG-14' => __( 'Pernik', 'invoicing' ),
155
+        'BG-15' => __( 'Pleven', 'invoicing' ),
156
+        'BG-16' => __( 'Plovdiv', 'invoicing' ),
157
+        'BG-17' => __( 'Razgrad', 'invoicing' ),
158
+        'BG-18' => __( 'Ruse', 'invoicing' ),
159
+        'BG-27' => __( 'Shumen', 'invoicing' ),
160
+        'BG-19' => __( 'Silistra', 'invoicing' ),
161
+        'BG-20' => __( 'Sliven', 'invoicing' ),
162
+        'BG-21' => __( 'Smolyan', 'invoicing' ),
163
+        'BG-23' => __( 'Sofia', 'invoicing' ),
164
+        'BG-22' => __( 'Sofia-Grad', 'invoicing' ),
165
+        'BG-24' => __( 'Stara Zagora', 'invoicing' ),
166
+        'BG-25' => __( 'Targovishte', 'invoicing' ),
167
+        'BG-03' => __( 'Varna', 'invoicing' ),
168
+        'BG-04' => __( 'Veliko Tarnovo', 'invoicing' ),
169
+        'BG-05' => __( 'Vidin', 'invoicing' ),
170
+        'BG-06' => __( 'Vratsa', 'invoicing' ),
171
+        'BG-28' => __( 'Yambol', 'invoicing' ),
172
+    ),
173
+    'BH' => array(),
174
+    'BI' => array(),
175
+    'BO' => array( // Bolivian states.
176
+        'B' => __( 'Chuquisaca', 'invoicing' ),
177
+        'H' => __( 'Beni', 'invoicing' ),
178
+        'C' => __( 'Cochabamba', 'invoicing' ),
179
+        'L' => __( 'La Paz', 'invoicing' ),
180
+        'O' => __( 'Oruro', 'invoicing' ),
181
+        'N' => __( 'Pando', 'invoicing' ),
182
+        'P' => __( 'Potosí', 'invoicing' ),
183
+        'S' => __( 'Santa Cruz', 'invoicing' ),
184
+        'T' => __( 'Tarija', 'invoicing' ),
185
+    ),
186
+    'BR' => array( // Brazillian states.
187
+        'AC' => __( 'Acre', 'invoicing' ),
188
+        'AL' => __( 'Alagoas', 'invoicing' ),
189
+        'AP' => __( 'Amap&aacute;', 'invoicing' ),
190
+        'AM' => __( 'Amazonas', 'invoicing' ),
191
+        'BA' => __( 'Bahia', 'invoicing' ),
192
+        'CE' => __( 'Cear&aacute;', 'invoicing' ),
193
+        'DF' => __( 'Distrito Federal', 'invoicing' ),
194
+        'ES' => __( 'Esp&iacute;rito Santo', 'invoicing' ),
195
+        'GO' => __( 'Goi&aacute;s', 'invoicing' ),
196
+        'MA' => __( 'Maranh&atilde;o', 'invoicing' ),
197
+        'MT' => __( 'Mato Grosso', 'invoicing' ),
198
+        'MS' => __( 'Mato Grosso do Sul', 'invoicing' ),
199
+        'MG' => __( 'Minas Gerais', 'invoicing' ),
200
+        'PA' => __( 'Par&aacute;', 'invoicing' ),
201
+        'PB' => __( 'Para&iacute;ba', 'invoicing' ),
202
+        'PR' => __( 'Paran&aacute;', 'invoicing' ),
203
+        'PE' => __( 'Pernambuco', 'invoicing' ),
204
+        'PI' => __( 'Piau&iacute;', 'invoicing' ),
205
+        'RJ' => __( 'Rio de Janeiro', 'invoicing' ),
206
+        'RN' => __( 'Rio Grande do Norte', 'invoicing' ),
207
+        'RS' => __( 'Rio Grande do Sul', 'invoicing' ),
208
+        'RO' => __( 'Rond&ocirc;nia', 'invoicing' ),
209
+        'RR' => __( 'Roraima', 'invoicing' ),
210
+        'SC' => __( 'Santa Catarina', 'invoicing' ),
211
+        'SP' => __( 'S&atilde;o Paulo', 'invoicing' ),
212
+        'SE' => __( 'Sergipe', 'invoicing' ),
213
+        'TO' => __( 'Tocantins', 'invoicing' ),
214
+    ),
215
+    'CA' => array( // Canadian states.
216
+        'AB' => __( 'Alberta', 'invoicing' ),
217
+        'BC' => __( 'British Columbia', 'invoicing' ),
218
+        'MB' => __( 'Manitoba', 'invoicing' ),
219
+        'NB' => __( 'New Brunswick', 'invoicing' ),
220
+        'NL' => __( 'Newfoundland and Labrador', 'invoicing' ),
221
+        'NT' => __( 'Northwest Territories', 'invoicing' ),
222
+        'NS' => __( 'Nova Scotia', 'invoicing' ),
223
+        'NU' => __( 'Nunavut', 'invoicing' ),
224
+        'ON' => __( 'Ontario', 'invoicing' ),
225
+        'PE' => __( 'Prince Edward Island', 'invoicing' ),
226
+        'QC' => __( 'Quebec', 'invoicing' ),
227
+        'SK' => __( 'Saskatchewan', 'invoicing' ),
228
+        'YT' => __( 'Yukon Territory', 'invoicing' ),
229
+    ),
230
+    'CH' => array( // Cantons of Switzerland.
231
+        'AG' => __( 'Aargau', 'invoicing' ),
232
+        'AR' => __( 'Appenzell Ausserrhoden', 'invoicing' ),
233
+        'AI' => __( 'Appenzell Innerrhoden', 'invoicing' ),
234
+        'BL' => __( 'Basel-Landschaft', 'invoicing' ),
235
+        'BS' => __( 'Basel-Stadt', 'invoicing' ),
236
+        'BE' => __( 'Bern', 'invoicing' ),
237
+        'FR' => __( 'Fribourg', 'invoicing' ),
238
+        'GE' => __( 'Geneva', 'invoicing' ),
239
+        'GL' => __( 'Glarus', 'invoicing' ),
240
+        'GR' => __( 'Graub&uuml;nden', 'invoicing' ),
241
+        'JU' => __( 'Jura', 'invoicing' ),
242
+        'LU' => __( 'Luzern', 'invoicing' ),
243
+        'NE' => __( 'Neuch&acirc;tel', 'invoicing' ),
244
+        'NW' => __( 'Nidwalden', 'invoicing' ),
245
+        'OW' => __( 'Obwalden', 'invoicing' ),
246
+        'SH' => __( 'Schaffhausen', 'invoicing' ),
247
+        'SZ' => __( 'Schwyz', 'invoicing' ),
248
+        'SO' => __( 'Solothurn', 'invoicing' ),
249
+        'SG' => __( 'St. Gallen', 'invoicing' ),
250
+        'TG' => __( 'Thurgau', 'invoicing' ),
251
+        'TI' => __( 'Ticino', 'invoicing' ),
252
+        'UR' => __( 'Uri', 'invoicing' ),
253
+        'VS' => __( 'Valais', 'invoicing' ),
254
+        'VD' => __( 'Vaud', 'invoicing' ),
255
+        'ZG' => __( 'Zug', 'invoicing' ),
256
+        'ZH' => __( 'Z&uuml;rich', 'invoicing' ),
257
+    ),
258
+    'CN' => array( // Chinese states.
259
+        'CN1'  => __( 'Yunnan / &#20113;&#21335;', 'invoicing' ),
260
+        'CN2'  => __( 'Beijing / &#21271;&#20140;', 'invoicing' ),
261
+        'CN3'  => __( 'Tianjin / &#22825;&#27941;', 'invoicing' ),
262
+        'CN4'  => __( 'Hebei / &#27827;&#21271;', 'invoicing' ),
263
+        'CN5'  => __( 'Shanxi / &#23665;&#35199;', 'invoicing' ),
264
+        'CN6'  => __( 'Inner Mongolia / &#20839;&#33945;&#21476;', 'invoicing' ),
265
+        'CN7'  => __( 'Liaoning / &#36797;&#23425;', 'invoicing' ),
266
+        'CN8'  => __( 'Jilin / &#21513;&#26519;', 'invoicing' ),
267
+        'CN9'  => __( 'Heilongjiang / &#40657;&#40857;&#27743;', 'invoicing' ),
268
+        'CN10' => __( 'Shanghai / &#19978;&#28023;', 'invoicing' ),
269
+        'CN11' => __( 'Jiangsu / &#27743;&#33487;', 'invoicing' ),
270
+        'CN12' => __( 'Zhejiang / &#27993;&#27743;', 'invoicing' ),
271
+        'CN13' => __( 'Anhui / &#23433;&#24509;', 'invoicing' ),
272
+        'CN14' => __( 'Fujian / &#31119;&#24314;', 'invoicing' ),
273
+        'CN15' => __( 'Jiangxi / &#27743;&#35199;', 'invoicing' ),
274
+        'CN16' => __( 'Shandong / &#23665;&#19996;', 'invoicing' ),
275
+        'CN17' => __( 'Henan / &#27827;&#21335;', 'invoicing' ),
276
+        'CN18' => __( 'Hubei / &#28246;&#21271;', 'invoicing' ),
277
+        'CN19' => __( 'Hunan / &#28246;&#21335;', 'invoicing' ),
278
+        'CN20' => __( 'Guangdong / &#24191;&#19996;', 'invoicing' ),
279
+        'CN21' => __( 'Guangxi Zhuang / &#24191;&#35199;&#22766;&#26063;', 'invoicing' ),
280
+        'CN22' => __( 'Hainan / &#28023;&#21335;', 'invoicing' ),
281
+        'CN23' => __( 'Chongqing / &#37325;&#24198;', 'invoicing' ),
282
+        'CN24' => __( 'Sichuan / &#22235;&#24029;', 'invoicing' ),
283
+        'CN25' => __( 'Guizhou / &#36149;&#24030;', 'invoicing' ),
284
+        'CN26' => __( 'Shaanxi / &#38485;&#35199;', 'invoicing' ),
285
+        'CN27' => __( 'Gansu / &#29976;&#32899;', 'invoicing' ),
286
+        'CN28' => __( 'Qinghai / &#38738;&#28023;', 'invoicing' ),
287
+        'CN29' => __( 'Ningxia Hui / &#23425;&#22799;', 'invoicing' ),
288
+        'CN30' => __( 'Macao / &#28595;&#38376;', 'invoicing' ),
289
+        'CN31' => __( 'Tibet / &#35199;&#34255;', 'invoicing' ),
290
+        'CN32' => __( 'Xinjiang / &#26032;&#30086;', 'invoicing' ),
291
+    ),
292
+    'CZ' => array(),
293
+    'DE' => array(),
294
+    'DK' => array(),
295
+    'EE' => array(),
296
+    'ES' => array( // Spanish states.
297
+        'C'  => __( 'A Coru&ntilde;a', 'invoicing' ),
298
+        'VI' => __( 'Araba/&Aacute;lava', 'invoicing' ),
299
+        'AB' => __( 'Albacete', 'invoicing' ),
300
+        'A'  => __( 'Alicante', 'invoicing' ),
301
+        'AL' => __( 'Almer&iacute;a', 'invoicing' ),
302
+        'O'  => __( 'Asturias', 'invoicing' ),
303
+        'AV' => __( '&Aacute;vila', 'invoicing' ),
304
+        'BA' => __( 'Badajoz', 'invoicing' ),
305
+        'PM' => __( 'Baleares', 'invoicing' ),
306
+        'B'  => __( 'Barcelona', 'invoicing' ),
307
+        'BU' => __( 'Burgos', 'invoicing' ),
308
+        'CC' => __( 'C&aacute;ceres', 'invoicing' ),
309
+        'CA' => __( 'C&aacute;diz', 'invoicing' ),
310
+        'S'  => __( 'Cantabria', 'invoicing' ),
311
+        'CS' => __( 'Castell&oacute;n', 'invoicing' ),
312
+        'CE' => __( 'Ceuta', 'invoicing' ),
313
+        'CR' => __( 'Ciudad Real', 'invoicing' ),
314
+        'CO' => __( 'C&oacute;rdoba', 'invoicing' ),
315
+        'CU' => __( 'Cuenca', 'invoicing' ),
316
+        'GI' => __( 'Girona', 'invoicing' ),
317
+        'GR' => __( 'Granada', 'invoicing' ),
318
+        'GU' => __( 'Guadalajara', 'invoicing' ),
319
+        'SS' => __( 'Gipuzkoa', 'invoicing' ),
320
+        'H'  => __( 'Huelva', 'invoicing' ),
321
+        'HU' => __( 'Huesca', 'invoicing' ),
322
+        'J'  => __( 'Ja&eacute;n', 'invoicing' ),
323
+        'LO' => __( 'La Rioja', 'invoicing' ),
324
+        'GC' => __( 'Las Palmas', 'invoicing' ),
325
+        'LE' => __( 'Le&oacute;n', 'invoicing' ),
326
+        'L'  => __( 'Lleida', 'invoicing' ),
327
+        'LU' => __( 'Lugo', 'invoicing' ),
328
+        'M'  => __( 'Madrid', 'invoicing' ),
329
+        'MA' => __( 'M&aacute;laga', 'invoicing' ),
330
+        'ML' => __( 'Melilla', 'invoicing' ),
331
+        'MU' => __( 'Murcia', 'invoicing' ),
332
+        'NA' => __( 'Navarra', 'invoicing' ),
333
+        'OR' => __( 'Ourense', 'invoicing' ),
334
+        'P'  => __( 'Palencia', 'invoicing' ),
335
+        'PO' => __( 'Pontevedra', 'invoicing' ),
336
+        'SA' => __( 'Salamanca', 'invoicing' ),
337
+        'TF' => __( 'Santa Cruz de Tenerife', 'invoicing' ),
338
+        'SG' => __( 'Segovia', 'invoicing' ),
339
+        'SE' => __( 'Sevilla', 'invoicing' ),
340
+        'SO' => __( 'Soria', 'invoicing' ),
341
+        'T'  => __( 'Tarragona', 'invoicing' ),
342
+        'TE' => __( 'Teruel', 'invoicing' ),
343
+        'TO' => __( 'Toledo', 'invoicing' ),
344
+        'V'  => __( 'Valencia', 'invoicing' ),
345
+        'VA' => __( 'Valladolid', 'invoicing' ),
346
+        'BI' => __( 'Bizkaia', 'invoicing' ),
347
+        'ZA' => __( 'Zamora', 'invoicing' ),
348
+        'Z'  => __( 'Zaragoza', 'invoicing' ),
349
+    ),
350
+    'FI' => array(),
351
+    'FR' => array(),
352
+    'GP' => array(),
353
+    'GR' => array( // Greek Regions.
354
+        'I' => __( 'Αττική', 'invoicing' ),
355
+        'A' => __( 'Ανατολική Μακεδονία και Θράκη', 'invoicing' ),
356
+        'B' => __( 'Κεντρική Μακεδονία', 'invoicing' ),
357
+        'C' => __( 'Δυτική Μακεδονία', 'invoicing' ),
358
+        'D' => __( 'Ήπειρος', 'invoicing' ),
359
+        'E' => __( 'Θεσσαλία', 'invoicing' ),
360
+        'F' => __( 'Ιόνιοι Νήσοι', 'invoicing' ),
361
+        'G' => __( 'Δυτική Ελλάδα', 'invoicing' ),
362
+        'H' => __( 'Στερεά Ελλάδα', 'invoicing' ),
363
+        'J' => __( 'Πελοπόννησος', 'invoicing' ),
364
+        'K' => __( 'Βόρειο Αιγαίο', 'invoicing' ),
365
+        'L' => __( 'Νότιο Αιγαίο', 'invoicing' ),
366
+        'M' => __( 'Κρήτη', 'invoicing' ),
367
+    ),
368
+    'GF' => array(),
369
+    'HK' => array( // Hong Kong states.
370
+        'HONG KONG'       => __( 'Hong Kong Island', 'invoicing' ),
371
+        'KOWLOON'         => __( 'Kowloon', 'invoicing' ),
372
+        'NEW TERRITORIES' => __( 'New Territories', 'invoicing' ),
373
+    ),
374
+    'HU' => array( // Hungary states.
375
+        'BK' => __( 'Bács-Kiskun', 'invoicing' ),
376
+        'BE' => __( 'Békés', 'invoicing' ),
377
+        'BA' => __( 'Baranya', 'invoicing' ),
378
+        'BZ' => __( 'Borsod-Abaúj-Zemplén', 'invoicing' ),
379
+        'BU' => __( 'Budapest', 'invoicing' ),
380
+        'CS' => __( 'Csongrád', 'invoicing' ),
381
+        'FE' => __( 'Fejér', 'invoicing' ),
382
+        'GS' => __( 'Győr-Moson-Sopron', 'invoicing' ),
383
+        'HB' => __( 'Hajdú-Bihar', 'invoicing' ),
384
+        'HE' => __( 'Heves', 'invoicing' ),
385
+        'JN' => __( 'Jász-Nagykun-Szolnok', 'invoicing' ),
386
+        'KE' => __( 'Komárom-Esztergom', 'invoicing' ),
387
+        'NO' => __( 'Nógrád', 'invoicing' ),
388
+        'PE' => __( 'Pest', 'invoicing' ),
389
+        'SO' => __( 'Somogy', 'invoicing' ),
390
+        'SZ' => __( 'Szabolcs-Szatmár-Bereg', 'invoicing' ),
391
+        'TO' => __( 'Tolna', 'invoicing' ),
392
+        'VA' => __( 'Vas', 'invoicing' ),
393
+        'VE' => __( 'Veszprém', 'invoicing' ),
394
+        'ZA' => __( 'Zala', 'invoicing' ),
395
+    ),
396
+    'ID' => array( // Indonesia Provinces.
397
+        'AC' => __( 'Daerah Istimewa Aceh', 'invoicing' ),
398
+        'SU' => __( 'Sumatera Utara', 'invoicing' ),
399
+        'SB' => __( 'Sumatera Barat', 'invoicing' ),
400
+        'RI' => __( 'Riau', 'invoicing' ),
401
+        'KR' => __( 'Kepulauan Riau', 'invoicing' ),
402
+        'JA' => __( 'Jambi', 'invoicing' ),
403
+        'SS' => __( 'Sumatera Selatan', 'invoicing' ),
404
+        'BB' => __( 'Bangka Belitung', 'invoicing' ),
405
+        'BE' => __( 'Bengkulu', 'invoicing' ),
406
+        'LA' => __( 'Lampung', 'invoicing' ),
407
+        'JK' => __( 'DKI Jakarta', 'invoicing' ),
408
+        'JB' => __( 'Jawa Barat', 'invoicing' ),
409
+        'BT' => __( 'Banten', 'invoicing' ),
410
+        'JT' => __( 'Jawa Tengah', 'invoicing' ),
411
+        'JI' => __( 'Jawa Timur', 'invoicing' ),
412
+        'YO' => __( 'Daerah Istimewa Yogyakarta', 'invoicing' ),
413
+        'BA' => __( 'Bali', 'invoicing' ),
414
+        'NB' => __( 'Nusa Tenggara Barat', 'invoicing' ),
415
+        'NT' => __( 'Nusa Tenggara Timur', 'invoicing' ),
416
+        'KB' => __( 'Kalimantan Barat', 'invoicing' ),
417
+        'KT' => __( 'Kalimantan Tengah', 'invoicing' ),
418
+        'KI' => __( 'Kalimantan Timur', 'invoicing' ),
419
+        'KS' => __( 'Kalimantan Selatan', 'invoicing' ),
420
+        'KU' => __( 'Kalimantan Utara', 'invoicing' ),
421
+        'SA' => __( 'Sulawesi Utara', 'invoicing' ),
422
+        'ST' => __( 'Sulawesi Tengah', 'invoicing' ),
423
+        'SG' => __( 'Sulawesi Tenggara', 'invoicing' ),
424
+        'SR' => __( 'Sulawesi Barat', 'invoicing' ),
425
+        'SN' => __( 'Sulawesi Selatan', 'invoicing' ),
426
+        'GO' => __( 'Gorontalo', 'invoicing' ),
427
+        'MA' => __( 'Maluku', 'invoicing' ),
428
+        'MU' => __( 'Maluku Utara', 'invoicing' ),
429
+        'PA' => __( 'Papua', 'invoicing' ),
430
+        'PB' => __( 'Papua Barat', 'invoicing' ),
431
+    ),
432
+    'IE' => array( // Republic of Ireland.
433
+        'CW' => __( 'Carlow', 'invoicing' ),
434
+        'CN' => __( 'Cavan', 'invoicing' ),
435
+        'CE' => __( 'Clare', 'invoicing' ),
436
+        'CO' => __( 'Cork', 'invoicing' ),
437
+        'DL' => __( 'Donegal', 'invoicing' ),
438
+        'D'  => __( 'Dublin', 'invoicing' ),
439
+        'G'  => __( 'Galway', 'invoicing' ),
440
+        'KY' => __( 'Kerry', 'invoicing' ),
441
+        'KE' => __( 'Kildare', 'invoicing' ),
442
+        'KK' => __( 'Kilkenny', 'invoicing' ),
443
+        'LS' => __( 'Laois', 'invoicing' ),
444
+        'LM' => __( 'Leitrim', 'invoicing' ),
445
+        'LK' => __( 'Limerick', 'invoicing' ),
446
+        'LD' => __( 'Longford', 'invoicing' ),
447
+        'LH' => __( 'Louth', 'invoicing' ),
448
+        'MO' => __( 'Mayo', 'invoicing' ),
449
+        'MH' => __( 'Meath', 'invoicing' ),
450
+        'MN' => __( 'Monaghan', 'invoicing' ),
451
+        'OY' => __( 'Offaly', 'invoicing' ),
452
+        'RN' => __( 'Roscommon', 'invoicing' ),
453
+        'SO' => __( 'Sligo', 'invoicing' ),
454
+        'TA' => __( 'Tipperary', 'invoicing' ),
455
+        'WD' => __( 'Waterford', 'invoicing' ),
456
+        'WH' => __( 'Westmeath', 'invoicing' ),
457
+        'WX' => __( 'Wexford', 'invoicing' ),
458
+        'WW' => __( 'Wicklow', 'invoicing' ),
459
+    ),
460
+    'IN' => array( // Indian states.
461
+        'AP' => __( 'Andhra Pradesh', 'invoicing' ),
462
+        'AR' => __( 'Arunachal Pradesh', 'invoicing' ),
463
+        'AS' => __( 'Assam', 'invoicing' ),
464
+        'BR' => __( 'Bihar', 'invoicing' ),
465
+        'CT' => __( 'Chhattisgarh', 'invoicing' ),
466
+        'GA' => __( 'Goa', 'invoicing' ),
467
+        'GJ' => __( 'Gujarat', 'invoicing' ),
468
+        'HR' => __( 'Haryana', 'invoicing' ),
469
+        'HP' => __( 'Himachal Pradesh', 'invoicing' ),
470
+        'JK' => __( 'Jammu and Kashmir', 'invoicing' ),
471
+        'JH' => __( 'Jharkhand', 'invoicing' ),
472
+        'KA' => __( 'Karnataka', 'invoicing' ),
473
+        'KL' => __( 'Kerala', 'invoicing' ),
474
+        'MP' => __( 'Madhya Pradesh', 'invoicing' ),
475
+        'MH' => __( 'Maharashtra', 'invoicing' ),
476
+        'MN' => __( 'Manipur', 'invoicing' ),
477
+        'ML' => __( 'Meghalaya', 'invoicing' ),
478
+        'MZ' => __( 'Mizoram', 'invoicing' ),
479
+        'NL' => __( 'Nagaland', 'invoicing' ),
480
+        'OR' => __( 'Orissa', 'invoicing' ),
481
+        'PB' => __( 'Punjab', 'invoicing' ),
482
+        'RJ' => __( 'Rajasthan', 'invoicing' ),
483
+        'SK' => __( 'Sikkim', 'invoicing' ),
484
+        'TN' => __( 'Tamil Nadu', 'invoicing' ),
485
+        'TS' => __( 'Telangana', 'invoicing' ),
486
+        'TR' => __( 'Tripura', 'invoicing' ),
487
+        'UK' => __( 'Uttarakhand', 'invoicing' ),
488
+        'UP' => __( 'Uttar Pradesh', 'invoicing' ),
489
+        'WB' => __( 'West Bengal', 'invoicing' ),
490
+        'AN' => __( 'Andaman and Nicobar Islands', 'invoicing' ),
491
+        'CH' => __( 'Chandigarh', 'invoicing' ),
492
+        'DN' => __( 'Dadra and Nagar Haveli', 'invoicing' ),
493
+        'DD' => __( 'Daman and Diu', 'invoicing' ),
494
+        'DL' => __( 'Delhi', 'invoicing' ),
495
+        'LD' => __( 'Lakshadeep', 'invoicing' ),
496
+        'PY' => __( 'Pondicherry (Puducherry)', 'invoicing' ),
497
+    ),
498
+    'IR' => array( // Iran States.
499
+        'KHZ' => __( 'Khuzestan  (خوزستان)', 'invoicing' ),
500
+        'THR' => __( 'Tehran  (تهران)', 'invoicing' ),
501
+        'ILM' => __( 'Ilaam (ایلام)', 'invoicing' ),
502
+        'BHR' => __( 'Bushehr (بوشهر)', 'invoicing' ),
503
+        'ADL' => __( 'Ardabil (اردبیل)', 'invoicing' ),
504
+        'ESF' => __( 'Isfahan (اصفهان)', 'invoicing' ),
505
+        'YZD' => __( 'Yazd (یزد)', 'invoicing' ),
506
+        'KRH' => __( 'Kermanshah (کرمانشاه)', 'invoicing' ),
507
+        'KRN' => __( 'Kerman (کرمان)', 'invoicing' ),
508
+        'HDN' => __( 'Hamadan (همدان)', 'invoicing' ),
509
+        'GZN' => __( 'Ghazvin (قزوین)', 'invoicing' ),
510
+        'ZJN' => __( 'Zanjan (زنجان)', 'invoicing' ),
511
+        'LRS' => __( 'Luristan (لرستان)', 'invoicing' ),
512
+        'ABZ' => __( 'Alborz (البرز)', 'invoicing' ),
513
+        'EAZ' => __( 'East Azarbaijan (آذربایجان شرقی)', 'invoicing' ),
514
+        'WAZ' => __( 'West Azarbaijan (آذربایجان غربی)', 'invoicing' ),
515
+        'CHB' => __( 'Chaharmahal and Bakhtiari (چهارمحال و بختیاری)', 'invoicing' ),
516
+        'SKH' => __( 'South Khorasan (خراسان جنوبی)', 'invoicing' ),
517
+        'RKH' => __( 'Razavi Khorasan (خراسان رضوی)', 'invoicing' ),
518
+        'NKH' => __( 'North Khorasan (خراسان شمالی)', 'invoicing' ),
519
+        'SMN' => __( 'Semnan (سمنان)', 'invoicing' ),
520
+        'FRS' => __( 'Fars (فارس)', 'invoicing' ),
521
+        'QHM' => __( 'Qom (قم)', 'invoicing' ),
522
+        'KRD' => __( 'Kurdistan / کردستان)', 'invoicing' ),
523
+        'KBD' => __( 'Kohgiluyeh and BoyerAhmad (کهگیلوییه و بویراحمد)', 'invoicing' ),
524
+        'GLS' => __( 'Golestan (گلستان)', 'invoicing' ),
525
+        'GIL' => __( 'Gilan (گیلان)', 'invoicing' ),
526
+        'MZN' => __( 'Mazandaran (مازندران)', 'invoicing' ),
527
+        'MKZ' => __( 'Markazi (مرکزی)', 'invoicing' ),
528
+        'HRZ' => __( 'Hormozgan (هرمزگان)', 'invoicing' ),
529
+        'SBN' => __( 'Sistan and Baluchestan (سیستان و بلوچستان)', 'invoicing' ),
530
+    ),
531
+    'IS' => array(),
532
+    'IT' => array( // Italy Provinces.
533
+        'AG' => __( 'Agrigento', 'invoicing' ),
534
+        'AL' => __( 'Alessandria', 'invoicing' ),
535
+        'AN' => __( 'Ancona', 'invoicing' ),
536
+        'AO' => __( 'Aosta', 'invoicing' ),
537
+        'AR' => __( 'Arezzo', 'invoicing' ),
538
+        'AP' => __( 'Ascoli Piceno', 'invoicing' ),
539
+        'AT' => __( 'Asti', 'invoicing' ),
540
+        'AV' => __( 'Avellino', 'invoicing' ),
541
+        'BA' => __( 'Bari', 'invoicing' ),
542
+        'BT' => __( 'Barletta-Andria-Trani', 'invoicing' ),
543
+        'BL' => __( 'Belluno', 'invoicing' ),
544
+        'BN' => __( 'Benevento', 'invoicing' ),
545
+        'BG' => __( 'Bergamo', 'invoicing' ),
546
+        'BI' => __( 'Biella', 'invoicing' ),
547
+        'BO' => __( 'Bologna', 'invoicing' ),
548
+        'BZ' => __( 'Bolzano', 'invoicing' ),
549
+        'BS' => __( 'Brescia', 'invoicing' ),
550
+        'BR' => __( 'Brindisi', 'invoicing' ),
551
+        'CA' => __( 'Cagliari', 'invoicing' ),
552
+        'CL' => __( 'Caltanissetta', 'invoicing' ),
553
+        'CB' => __( 'Campobasso', 'invoicing' ),
554
+        'CE' => __( 'Caserta', 'invoicing' ),
555
+        'CT' => __( 'Catania', 'invoicing' ),
556
+        'CZ' => __( 'Catanzaro', 'invoicing' ),
557
+        'CH' => __( 'Chieti', 'invoicing' ),
558
+        'CO' => __( 'Como', 'invoicing' ),
559
+        'CS' => __( 'Cosenza', 'invoicing' ),
560
+        'CR' => __( 'Cremona', 'invoicing' ),
561
+        'KR' => __( 'Crotone', 'invoicing' ),
562
+        'CN' => __( 'Cuneo', 'invoicing' ),
563
+        'EN' => __( 'Enna', 'invoicing' ),
564
+        'FM' => __( 'Fermo', 'invoicing' ),
565
+        'FE' => __( 'Ferrara', 'invoicing' ),
566
+        'FI' => __( 'Firenze', 'invoicing' ),
567
+        'FG' => __( 'Foggia', 'invoicing' ),
568
+        'FC' => __( 'Forlì-Cesena', 'invoicing' ),
569
+        'FR' => __( 'Frosinone', 'invoicing' ),
570
+        'GE' => __( 'Genova', 'invoicing' ),
571
+        'GO' => __( 'Gorizia', 'invoicing' ),
572
+        'GR' => __( 'Grosseto', 'invoicing' ),
573
+        'IM' => __( 'Imperia', 'invoicing' ),
574
+        'IS' => __( 'Isernia', 'invoicing' ),
575
+        'SP' => __( 'La Spezia', 'invoicing' ),
576
+        'AQ' => __( "L'Aquila", 'invoicing' ),
577
+        'LT' => __( 'Latina', 'invoicing' ),
578
+        'LE' => __( 'Lecce', 'invoicing' ),
579
+        'LC' => __( 'Lecco', 'invoicing' ),
580
+        'LI' => __( 'Livorno', 'invoicing' ),
581
+        'LO' => __( 'Lodi', 'invoicing' ),
582
+        'LU' => __( 'Lucca', 'invoicing' ),
583
+        'MC' => __( 'Macerata', 'invoicing' ),
584
+        'MN' => __( 'Mantova', 'invoicing' ),
585
+        'MS' => __( 'Massa-Carrara', 'invoicing' ),
586
+        'MT' => __( 'Matera', 'invoicing' ),
587
+        'ME' => __( 'Messina', 'invoicing' ),
588
+        'MI' => __( 'Milano', 'invoicing' ),
589
+        'MO' => __( 'Modena', 'invoicing' ),
590
+        'MB' => __( 'Monza e della Brianza', 'invoicing' ),
591
+        'NA' => __( 'Napoli', 'invoicing' ),
592
+        'NO' => __( 'Novara', 'invoicing' ),
593
+        'NU' => __( 'Nuoro', 'invoicing' ),
594
+        'OR' => __( 'Oristano', 'invoicing' ),
595
+        'PD' => __( 'Padova', 'invoicing' ),
596
+        'PA' => __( 'Palermo', 'invoicing' ),
597
+        'PR' => __( 'Parma', 'invoicing' ),
598
+        'PV' => __( 'Pavia', 'invoicing' ),
599
+        'PG' => __( 'Perugia', 'invoicing' ),
600
+        'PU' => __( 'Pesaro e Urbino', 'invoicing' ),
601
+        'PE' => __( 'Pescara', 'invoicing' ),
602
+        'PC' => __( 'Piacenza', 'invoicing' ),
603
+        'PI' => __( 'Pisa', 'invoicing' ),
604
+        'PT' => __( 'Pistoia', 'invoicing' ),
605
+        'PN' => __( 'Pordenone', 'invoicing' ),
606
+        'PZ' => __( 'Potenza', 'invoicing' ),
607
+        'PO' => __( 'Prato', 'invoicing' ),
608
+        'RG' => __( 'Ragusa', 'invoicing' ),
609
+        'RA' => __( 'Ravenna', 'invoicing' ),
610
+        'RC' => __( 'Reggio Calabria', 'invoicing' ),
611
+        'RE' => __( 'Reggio Emilia', 'invoicing' ),
612
+        'RI' => __( 'Rieti', 'invoicing' ),
613
+        'RN' => __( 'Rimini', 'invoicing' ),
614
+        'RM' => __( 'Roma', 'invoicing' ),
615
+        'RO' => __( 'Rovigo', 'invoicing' ),
616
+        'SA' => __( 'Salerno', 'invoicing' ),
617
+        'SS' => __( 'Sassari', 'invoicing' ),
618
+        'SV' => __( 'Savona', 'invoicing' ),
619
+        'SI' => __( 'Siena', 'invoicing' ),
620
+        'SR' => __( 'Siracusa', 'invoicing' ),
621
+        'SO' => __( 'Sondrio', 'invoicing' ),
622
+        'SU' => __( 'Sud Sardegna', 'invoicing' ),
623
+        'TA' => __( 'Taranto', 'invoicing' ),
624
+        'TE' => __( 'Teramo', 'invoicing' ),
625
+        'TR' => __( 'Terni', 'invoicing' ),
626
+        'TO' => __( 'Torino', 'invoicing' ),
627
+        'TP' => __( 'Trapani', 'invoicing' ),
628
+        'TN' => __( 'Trento', 'invoicing' ),
629
+        'TV' => __( 'Treviso', 'invoicing' ),
630
+        'TS' => __( 'Trieste', 'invoicing' ),
631
+        'UD' => __( 'Udine', 'invoicing' ),
632
+        'VA' => __( 'Varese', 'invoicing' ),
633
+        'VE' => __( 'Venezia', 'invoicing' ),
634
+        'VB' => __( 'Verbano-Cusio-Ossola', 'invoicing' ),
635
+        'VC' => __( 'Vercelli', 'invoicing' ),
636
+        'VR' => __( 'Verona', 'invoicing' ),
637
+        'VV' => __( 'Vibo Valentia', 'invoicing' ),
638
+        'VI' => __( 'Vicenza', 'invoicing' ),
639
+        'VT' => __( 'Viterbo', 'invoicing' ),
640
+    ),
641
+    'IL' => array(),
642
+    'IM' => array(),
643 643
 
644
-	/**
645
-	 * Japan States.
646
-	 *
647
-	 * English notation of prefectures conform to the notation of Japan Post.
648
-	 * The suffix corresponds with the Japanese translation file.
649
-	 */
650
-	'JP' => array(
651
-		'JP01' => __( 'Hokkaido', 'invoicing' ),
652
-		'JP02' => __( 'Aomori', 'invoicing' ),
653
-		'JP03' => __( 'Iwate', 'invoicing' ),
654
-		'JP04' => __( 'Miyagi', 'invoicing' ),
655
-		'JP05' => __( 'Akita', 'invoicing' ),
656
-		'JP06' => __( 'Yamagata', 'invoicing' ),
657
-		'JP07' => __( 'Fukushima', 'invoicing' ),
658
-		'JP08' => __( 'Ibaraki', 'invoicing' ),
659
-		'JP09' => __( 'Tochigi', 'invoicing' ),
660
-		'JP10' => __( 'Gunma', 'invoicing' ),
661
-		'JP11' => __( 'Saitama', 'invoicing' ),
662
-		'JP12' => __( 'Chiba', 'invoicing' ),
663
-		'JP13' => __( 'Tokyo', 'invoicing' ),
664
-		'JP14' => __( 'Kanagawa', 'invoicing' ),
665
-		'JP15' => __( 'Niigata', 'invoicing' ),
666
-		'JP16' => __( 'Toyama', 'invoicing' ),
667
-		'JP17' => __( 'Ishikawa', 'invoicing' ),
668
-		'JP18' => __( 'Fukui', 'invoicing' ),
669
-		'JP19' => __( 'Yamanashi', 'invoicing' ),
670
-		'JP20' => __( 'Nagano', 'invoicing' ),
671
-		'JP21' => __( 'Gifu', 'invoicing' ),
672
-		'JP22' => __( 'Shizuoka', 'invoicing' ),
673
-		'JP23' => __( 'Aichi', 'invoicing' ),
674
-		'JP24' => __( 'Mie', 'invoicing' ),
675
-		'JP25' => __( 'Shiga', 'invoicing' ),
676
-		'JP26' => __( 'Kyoto', 'invoicing' ),
677
-		'JP27' => __( 'Osaka', 'invoicing' ),
678
-		'JP28' => __( 'Hyogo', 'invoicing' ),
679
-		'JP29' => __( 'Nara', 'invoicing' ),
680
-		'JP30' => __( 'Wakayama', 'invoicing' ),
681
-		'JP31' => __( 'Tottori', 'invoicing' ),
682
-		'JP32' => __( 'Shimane', 'invoicing' ),
683
-		'JP33' => __( 'Okayama', 'invoicing' ),
684
-		'JP34' => __( 'Hiroshima', 'invoicing' ),
685
-		'JP35' => __( 'Yamaguchi', 'invoicing' ),
686
-		'JP36' => __( 'Tokushima', 'invoicing' ),
687
-		'JP37' => __( 'Kagawa', 'invoicing' ),
688
-		'JP38' => __( 'Ehime', 'invoicing' ),
689
-		'JP39' => __( 'Kochi', 'invoicing' ),
690
-		'JP40' => __( 'Fukuoka', 'invoicing' ),
691
-		'JP41' => __( 'Saga', 'invoicing' ),
692
-		'JP42' => __( 'Nagasaki', 'invoicing' ),
693
-		'JP43' => __( 'Kumamoto', 'invoicing' ),
694
-		'JP44' => __( 'Oita', 'invoicing' ),
695
-		'JP45' => __( 'Miyazaki', 'invoicing' ),
696
-		'JP46' => __( 'Kagoshima', 'invoicing' ),
697
-		'JP47' => __( 'Okinawa', 'invoicing' ),
698
-	),
699
-	'KE' => array( // Kenya Counties.
700
-		'1'  => __( 'Mombasa', 'invoicing' ),
701
-		'2'  => __( 'Kwale', 'invoicing' ),
702
-		'3'  => __( 'Kilifi', 'invoicing' ),
703
-		'4'  => __( 'Tana River', 'invoicing' ),
704
-		'5'  => __( 'Lamu', 'invoicing' ),
705
-		'6'  => __( 'Taita-Taveta', 'invoicing' ),
706
-		'7'  => __( 'Garissa', 'invoicing' ),
707
-		'8'  => __( 'Wajir', 'invoicing' ),
708
-		'9'  => __( 'Mandera', 'invoicing' ),
709
-		'10' => __( 'Marsabit', 'invoicing' ),
710
-		'11' => __( 'Isiolo', 'invoicing' ),
711
-		'12' => __( 'Meru', 'invoicing' ),
712
-		'13' => __( 'Tharaka-Nithi', 'invoicing' ),
713
-		'14' => __( 'Embu', 'invoicing' ),
714
-		'15' => __( 'Kitui', 'invoicing' ),
715
-		'16' => __( 'Machakos', 'invoicing' ),
716
-		'17' => __( 'Makueni', 'invoicing' ),
717
-		'18' => __( 'Nyandarua', 'invoicing' ),
718
-		'19' => __( 'Nyeri', 'invoicing' ),
719
-		'20' => __( 'Kirinyaga', 'invoicing' ),
720
-		'21' => __( "Murang'a", 'invoicing' ),
721
-		'22' => __( 'Kiambu', 'invoicing' ),
722
-		'23' => __( 'Turkana', 'invoicing' ),
723
-		'24' => __( 'West Pokot', 'invoicing' ),
724
-		'25' => __( 'Samburu', 'invoicing' ),
725
-		'26' => __( 'Trans-Nzoia', 'invoicing' ),
726
-		'27' => __( 'Uasin Gishu', 'invoicing' ),
727
-		'28' => __( 'Elgeyo-Marakwet', 'invoicing' ),
728
-		'29' => __( 'Nandi', 'invoicing' ),
729
-		'30' => __( 'Baringo', 'invoicing' ),
730
-		'31' => __( 'Laikipia', 'invoicing' ),
731
-		'32' => __( 'Nakuru', 'invoicing' ),
732
-		'33' => __( 'Narok', 'invoicing' ),
733
-		'34' => __( 'Kajiado', 'invoicing' ),
734
-		'35' => __( 'Kericho', 'invoicing' ),
735
-		'36' => __( 'Bomet', 'invoicing' ),
736
-		'37' => __( 'Kakamega', 'invoicing' ),
737
-		'38' => __( 'Vihiga', 'invoicing' ),
738
-		'39' => __( 'Bungoma', 'invoicing' ),
739
-		'40' => __( 'Busia', 'invoicing' ),
740
-		'41' => __( 'Siaya', 'invoicing' ),
741
-		'42' => __( 'Kisumu', 'invoicing' ),
742
-		'43' => __( 'Homa bay', 'invoicing' ),
743
-		'44' => __( 'Migori', 'invoicing' ),
744
-		'45' => __( 'Kisii', 'invoicing' ),
745
-		'46' => __( 'Nyamira', 'invoicing' ),
746
-		'47' => __( 'Nairobi', 'invoicing' ),
747
-	),
748
-	'KR' => array(),
749
-	'KW' => array(),
750
-	'LB' => array(),
751
-	'LR' => array( // Liberia provinces.
752
-		'BM' => __( 'Bomi', 'invoicing' ),
753
-		'BN' => __( 'Bong', 'invoicing' ),
754
-		'GA' => __( 'Gbarpolu', 'invoicing' ),
755
-		'GB' => __( 'Grand Bassa', 'invoicing' ),
756
-		'GC' => __( 'Grand Cape Mount', 'invoicing' ),
757
-		'GG' => __( 'Grand Gedeh', 'invoicing' ),
758
-		'GK' => __( 'Grand Kru', 'invoicing' ),
759
-		'LO' => __( 'Lofa', 'invoicing' ),
760
-		'MA' => __( 'Margibi', 'invoicing' ),
761
-		'MY' => __( 'Maryland', 'invoicing' ),
762
-		'MO' => __( 'Montserrado', 'invoicing' ),
763
-		'NM' => __( 'Nimba', 'invoicing' ),
764
-		'RV' => __( 'Rivercess', 'invoicing' ),
765
-		'RG' => __( 'River Gee', 'invoicing' ),
766
-		'SN' => __( 'Sinoe', 'invoicing' ),
767
-	),
768
-	'LU' => array(),
769
-	'MD' => array( // Moldova states.
770
-		'C'  => __( 'Chi&#537;in&#259;u', 'invoicing' ),
771
-		'BL' => __( 'B&#259;l&#539;i', 'invoicing' ),
772
-		'AN' => __( 'Anenii Noi', 'invoicing' ),
773
-		'BS' => __( 'Basarabeasca', 'invoicing' ),
774
-		'BR' => __( 'Briceni', 'invoicing' ),
775
-		'CH' => __( 'Cahul', 'invoicing' ),
776
-		'CT' => __( 'Cantemir', 'invoicing' ),
777
-		'CL' => __( 'C&#259;l&#259;ra&#537;i', 'invoicing' ),
778
-		'CS' => __( 'C&#259;u&#537;eni', 'invoicing' ),
779
-		'CM' => __( 'Cimi&#537;lia', 'invoicing' ),
780
-		'CR' => __( 'Criuleni', 'invoicing' ),
781
-		'DN' => __( 'Dondu&#537;eni', 'invoicing' ),
782
-		'DR' => __( 'Drochia', 'invoicing' ),
783
-		'DB' => __( 'Dub&#259;sari', 'invoicing' ),
784
-		'ED' => __( 'Edine&#539;', 'invoicing' ),
785
-		'FL' => __( 'F&#259;le&#537;ti', 'invoicing' ),
786
-		'FR' => __( 'Flore&#537;ti', 'invoicing' ),
787
-		'GE' => __( 'UTA G&#259;g&#259;uzia', 'invoicing' ),
788
-		'GL' => __( 'Glodeni', 'invoicing' ),
789
-		'HN' => __( 'H&icirc;nce&#537;ti', 'invoicing' ),
790
-		'IL' => __( 'Ialoveni', 'invoicing' ),
791
-		'LV' => __( 'Leova', 'invoicing' ),
792
-		'NS' => __( 'Nisporeni', 'invoicing' ),
793
-		'OC' => __( 'Ocni&#539;a', 'invoicing' ),
794
-		'OR' => __( 'Orhei', 'invoicing' ),
795
-		'RZ' => __( 'Rezina', 'invoicing' ),
796
-		'RS' => __( 'R&icirc;&#537;cani', 'invoicing' ),
797
-		'SG' => __( 'S&icirc;ngerei', 'invoicing' ),
798
-		'SR' => __( 'Soroca', 'invoicing' ),
799
-		'ST' => __( 'Str&#259;&#537;eni', 'invoicing' ),
800
-		'SD' => __( '&#536;old&#259;ne&#537;ti', 'invoicing' ),
801
-		'SV' => __( '&#536;tefan Vod&#259;', 'invoicing' ),
802
-		'TR' => __( 'Taraclia', 'invoicing' ),
803
-		'TL' => __( 'Telene&#537;ti', 'invoicing' ),
804
-		'UN' => __( 'Ungheni', 'invoicing' ),
805
-	),
806
-	'MQ' => array(),
807
-	'MT' => array(),
808
-	'MX' => array( // Mexico States.
809
-		'DF' => __( 'Ciudad de M&eacute;xico', 'invoicing' ),
810
-		'JA' => __( 'Jalisco', 'invoicing' ),
811
-		'NL' => __( 'Nuevo Le&oacute;n', 'invoicing' ),
812
-		'AG' => __( 'Aguascalientes', 'invoicing' ),
813
-		'BC' => __( 'Baja California', 'invoicing' ),
814
-		'BS' => __( 'Baja California Sur', 'invoicing' ),
815
-		'CM' => __( 'Campeche', 'invoicing' ),
816
-		'CS' => __( 'Chiapas', 'invoicing' ),
817
-		'CH' => __( 'Chihuahua', 'invoicing' ),
818
-		'CO' => __( 'Coahuila', 'invoicing' ),
819
-		'CL' => __( 'Colima', 'invoicing' ),
820
-		'DG' => __( 'Durango', 'invoicing' ),
821
-		'GT' => __( 'Guanajuato', 'invoicing' ),
822
-		'GR' => __( 'Guerrero', 'invoicing' ),
823
-		'HG' => __( 'Hidalgo', 'invoicing' ),
824
-		'MX' => __( 'Estado de M&eacute;xico', 'invoicing' ),
825
-		'MI' => __( 'Michoac&aacute;n', 'invoicing' ),
826
-		'MO' => __( 'Morelos', 'invoicing' ),
827
-		'NA' => __( 'Nayarit', 'invoicing' ),
828
-		'OA' => __( 'Oaxaca', 'invoicing' ),
829
-		'PU' => __( 'Puebla', 'invoicing' ),
830
-		'QT' => __( 'Quer&eacute;taro', 'invoicing' ),
831
-		'QR' => __( 'Quintana Roo', 'invoicing' ),
832
-		'SL' => __( 'San Luis Potos&iacute;', 'invoicing' ),
833
-		'SI' => __( 'Sinaloa', 'invoicing' ),
834
-		'SO' => __( 'Sonora', 'invoicing' ),
835
-		'TB' => __( 'Tabasco', 'invoicing' ),
836
-		'TM' => __( 'Tamaulipas', 'invoicing' ),
837
-		'TL' => __( 'Tlaxcala', 'invoicing' ),
838
-		'VE' => __( 'Veracruz', 'invoicing' ),
839
-		'YU' => __( 'Yucat&aacute;n', 'invoicing' ),
840
-		'ZA' => __( 'Zacatecas', 'invoicing' ),
841
-	),
842
-	'MY' => array( // Malaysian states.
843
-		'JHR' => __( 'Johor', 'invoicing' ),
844
-		'KDH' => __( 'Kedah', 'invoicing' ),
845
-		'KTN' => __( 'Kelantan', 'invoicing' ),
846
-		'LBN' => __( 'Labuan', 'invoicing' ),
847
-		'MLK' => __( 'Malacca (Melaka)', 'invoicing' ),
848
-		'NSN' => __( 'Negeri Sembilan', 'invoicing' ),
849
-		'PHG' => __( 'Pahang', 'invoicing' ),
850
-		'PNG' => __( 'Penang (Pulau Pinang)', 'invoicing' ),
851
-		'PRK' => __( 'Perak', 'invoicing' ),
852
-		'PLS' => __( 'Perlis', 'invoicing' ),
853
-		'SBH' => __( 'Sabah', 'invoicing' ),
854
-		'SWK' => __( 'Sarawak', 'invoicing' ),
855
-		'SGR' => __( 'Selangor', 'invoicing' ),
856
-		'TRG' => __( 'Terengganu', 'invoicing' ),
857
-		'PJY' => __( 'Putrajaya', 'invoicing' ),
858
-		'KUL' => __( 'Kuala Lumpur', 'invoicing' ),
859
-	),
860
-	'NG' => array( // Nigerian provinces.
861
-		'AB' => __( 'Abia', 'invoicing' ),
862
-		'FC' => __( 'Abuja', 'invoicing' ),
863
-		'AD' => __( 'Adamawa', 'invoicing' ),
864
-		'AK' => __( 'Akwa Ibom', 'invoicing' ),
865
-		'AN' => __( 'Anambra', 'invoicing' ),
866
-		'BA' => __( 'Bauchi', 'invoicing' ),
867
-		'BY' => __( 'Bayelsa', 'invoicing' ),
868
-		'BE' => __( 'Benue', 'invoicing' ),
869
-		'BO' => __( 'Borno', 'invoicing' ),
870
-		'CR' => __( 'Cross River', 'invoicing' ),
871
-		'DE' => __( 'Delta', 'invoicing' ),
872
-		'EB' => __( 'Ebonyi', 'invoicing' ),
873
-		'ED' => __( 'Edo', 'invoicing' ),
874
-		'EK' => __( 'Ekiti', 'invoicing' ),
875
-		'EN' => __( 'Enugu', 'invoicing' ),
876
-		'GO' => __( 'Gombe', 'invoicing' ),
877
-		'IM' => __( 'Imo', 'invoicing' ),
878
-		'JI' => __( 'Jigawa', 'invoicing' ),
879
-		'KD' => __( 'Kaduna', 'invoicing' ),
880
-		'KN' => __( 'Kano', 'invoicing' ),
881
-		'KT' => __( 'Katsina', 'invoicing' ),
882
-		'KE' => __( 'Kebbi', 'invoicing' ),
883
-		'KO' => __( 'Kogi', 'invoicing' ),
884
-		'KW' => __( 'Kwara', 'invoicing' ),
885
-		'LA' => __( 'Lagos', 'invoicing' ),
886
-		'NA' => __( 'Nasarawa', 'invoicing' ),
887
-		'NI' => __( 'Niger', 'invoicing' ),
888
-		'OG' => __( 'Ogun', 'invoicing' ),
889
-		'ON' => __( 'Ondo', 'invoicing' ),
890
-		'OS' => __( 'Osun', 'invoicing' ),
891
-		'OY' => __( 'Oyo', 'invoicing' ),
892
-		'PL' => __( 'Plateau', 'invoicing' ),
893
-		'RI' => __( 'Rivers', 'invoicing' ),
894
-		'SO' => __( 'Sokoto', 'invoicing' ),
895
-		'TA' => __( 'Taraba', 'invoicing' ),
896
-		'YO' => __( 'Yobe', 'invoicing' ),
897
-		'ZA' => __( 'Zamfara', 'invoicing' ),
898
-	),
899
-	'NL' => array(),
900
-	'NO' => array(),
901
-	'NP' => array( // Nepal states (Zones).
902
-		'BAG' => __( 'Bagmati', 'invoicing' ),
903
-		'BHE' => __( 'Bheri', 'invoicing' ),
904
-		'DHA' => __( 'Dhaulagiri', 'invoicing' ),
905
-		'GAN' => __( 'Gandaki', 'invoicing' ),
906
-		'JAN' => __( 'Janakpur', 'invoicing' ),
907
-		'KAR' => __( 'Karnali', 'invoicing' ),
908
-		'KOS' => __( 'Koshi', 'invoicing' ),
909
-		'LUM' => __( 'Lumbini', 'invoicing' ),
910
-		'MAH' => __( 'Mahakali', 'invoicing' ),
911
-		'MEC' => __( 'Mechi', 'invoicing' ),
912
-		'NAR' => __( 'Narayani', 'invoicing' ),
913
-		'RAP' => __( 'Rapti', 'invoicing' ),
914
-		'SAG' => __( 'Sagarmatha', 'invoicing' ),
915
-		'SET' => __( 'Seti', 'invoicing' ),
916
-	),
917
-	'NZ' => array( // New Zealand States.
918
-		'NL' => __( 'Northland', 'invoicing' ),
919
-		'AK' => __( 'Auckland', 'invoicing' ),
920
-		'WA' => __( 'Waikato', 'invoicing' ),
921
-		'BP' => __( 'Bay of Plenty', 'invoicing' ),
922
-		'TK' => __( 'Taranaki', 'invoicing' ),
923
-		'GI' => __( 'Gisborne', 'invoicing' ),
924
-		'HB' => __( 'Hawke&rsquo;s Bay', 'invoicing' ),
925
-		'MW' => __( 'Manawatu-Wanganui', 'invoicing' ),
926
-		'WE' => __( 'Wellington', 'invoicing' ),
927
-		'NS' => __( 'Nelson', 'invoicing' ),
928
-		'MB' => __( 'Marlborough', 'invoicing' ),
929
-		'TM' => __( 'Tasman', 'invoicing' ),
930
-		'WC' => __( 'West Coast', 'invoicing' ),
931
-		'CT' => __( 'Canterbury', 'invoicing' ),
932
-		'OT' => __( 'Otago', 'invoicing' ),
933
-		'SL' => __( 'Southland', 'invoicing' ),
934
-	),
935
-	'PE' => array( // Peru states.
936
-		'CAL' => __( 'El Callao', 'invoicing' ),
937
-		'LMA' => __( 'Municipalidad Metropolitana de Lima', 'invoicing' ),
938
-		'AMA' => __( 'Amazonas', 'invoicing' ),
939
-		'ANC' => __( 'Ancash', 'invoicing' ),
940
-		'APU' => __( 'Apur&iacute;mac', 'invoicing' ),
941
-		'ARE' => __( 'Arequipa', 'invoicing' ),
942
-		'AYA' => __( 'Ayacucho', 'invoicing' ),
943
-		'CAJ' => __( 'Cajamarca', 'invoicing' ),
944
-		'CUS' => __( 'Cusco', 'invoicing' ),
945
-		'HUV' => __( 'Huancavelica', 'invoicing' ),
946
-		'HUC' => __( 'Hu&aacute;nuco', 'invoicing' ),
947
-		'ICA' => __( 'Ica', 'invoicing' ),
948
-		'JUN' => __( 'Jun&iacute;n', 'invoicing' ),
949
-		'LAL' => __( 'La Libertad', 'invoicing' ),
950
-		'LAM' => __( 'Lambayeque', 'invoicing' ),
951
-		'LIM' => __( 'Lima', 'invoicing' ),
952
-		'LOR' => __( 'Loreto', 'invoicing' ),
953
-		'MDD' => __( 'Madre de Dios', 'invoicing' ),
954
-		'MOQ' => __( 'Moquegua', 'invoicing' ),
955
-		'PAS' => __( 'Pasco', 'invoicing' ),
956
-		'PIU' => __( 'Piura', 'invoicing' ),
957
-		'PUN' => __( 'Puno', 'invoicing' ),
958
-		'SAM' => __( 'San Mart&iacute;n', 'invoicing' ),
959
-		'TAC' => __( 'Tacna', 'invoicing' ),
960
-		'TUM' => __( 'Tumbes', 'invoicing' ),
961
-		'UCA' => __( 'Ucayali', 'invoicing' ),
962
-	),
644
+    /**
645
+     * Japan States.
646
+     *
647
+     * English notation of prefectures conform to the notation of Japan Post.
648
+     * The suffix corresponds with the Japanese translation file.
649
+     */
650
+    'JP' => array(
651
+        'JP01' => __( 'Hokkaido', 'invoicing' ),
652
+        'JP02' => __( 'Aomori', 'invoicing' ),
653
+        'JP03' => __( 'Iwate', 'invoicing' ),
654
+        'JP04' => __( 'Miyagi', 'invoicing' ),
655
+        'JP05' => __( 'Akita', 'invoicing' ),
656
+        'JP06' => __( 'Yamagata', 'invoicing' ),
657
+        'JP07' => __( 'Fukushima', 'invoicing' ),
658
+        'JP08' => __( 'Ibaraki', 'invoicing' ),
659
+        'JP09' => __( 'Tochigi', 'invoicing' ),
660
+        'JP10' => __( 'Gunma', 'invoicing' ),
661
+        'JP11' => __( 'Saitama', 'invoicing' ),
662
+        'JP12' => __( 'Chiba', 'invoicing' ),
663
+        'JP13' => __( 'Tokyo', 'invoicing' ),
664
+        'JP14' => __( 'Kanagawa', 'invoicing' ),
665
+        'JP15' => __( 'Niigata', 'invoicing' ),
666
+        'JP16' => __( 'Toyama', 'invoicing' ),
667
+        'JP17' => __( 'Ishikawa', 'invoicing' ),
668
+        'JP18' => __( 'Fukui', 'invoicing' ),
669
+        'JP19' => __( 'Yamanashi', 'invoicing' ),
670
+        'JP20' => __( 'Nagano', 'invoicing' ),
671
+        'JP21' => __( 'Gifu', 'invoicing' ),
672
+        'JP22' => __( 'Shizuoka', 'invoicing' ),
673
+        'JP23' => __( 'Aichi', 'invoicing' ),
674
+        'JP24' => __( 'Mie', 'invoicing' ),
675
+        'JP25' => __( 'Shiga', 'invoicing' ),
676
+        'JP26' => __( 'Kyoto', 'invoicing' ),
677
+        'JP27' => __( 'Osaka', 'invoicing' ),
678
+        'JP28' => __( 'Hyogo', 'invoicing' ),
679
+        'JP29' => __( 'Nara', 'invoicing' ),
680
+        'JP30' => __( 'Wakayama', 'invoicing' ),
681
+        'JP31' => __( 'Tottori', 'invoicing' ),
682
+        'JP32' => __( 'Shimane', 'invoicing' ),
683
+        'JP33' => __( 'Okayama', 'invoicing' ),
684
+        'JP34' => __( 'Hiroshima', 'invoicing' ),
685
+        'JP35' => __( 'Yamaguchi', 'invoicing' ),
686
+        'JP36' => __( 'Tokushima', 'invoicing' ),
687
+        'JP37' => __( 'Kagawa', 'invoicing' ),
688
+        'JP38' => __( 'Ehime', 'invoicing' ),
689
+        'JP39' => __( 'Kochi', 'invoicing' ),
690
+        'JP40' => __( 'Fukuoka', 'invoicing' ),
691
+        'JP41' => __( 'Saga', 'invoicing' ),
692
+        'JP42' => __( 'Nagasaki', 'invoicing' ),
693
+        'JP43' => __( 'Kumamoto', 'invoicing' ),
694
+        'JP44' => __( 'Oita', 'invoicing' ),
695
+        'JP45' => __( 'Miyazaki', 'invoicing' ),
696
+        'JP46' => __( 'Kagoshima', 'invoicing' ),
697
+        'JP47' => __( 'Okinawa', 'invoicing' ),
698
+    ),
699
+    'KE' => array( // Kenya Counties.
700
+        '1'  => __( 'Mombasa', 'invoicing' ),
701
+        '2'  => __( 'Kwale', 'invoicing' ),
702
+        '3'  => __( 'Kilifi', 'invoicing' ),
703
+        '4'  => __( 'Tana River', 'invoicing' ),
704
+        '5'  => __( 'Lamu', 'invoicing' ),
705
+        '6'  => __( 'Taita-Taveta', 'invoicing' ),
706
+        '7'  => __( 'Garissa', 'invoicing' ),
707
+        '8'  => __( 'Wajir', 'invoicing' ),
708
+        '9'  => __( 'Mandera', 'invoicing' ),
709
+        '10' => __( 'Marsabit', 'invoicing' ),
710
+        '11' => __( 'Isiolo', 'invoicing' ),
711
+        '12' => __( 'Meru', 'invoicing' ),
712
+        '13' => __( 'Tharaka-Nithi', 'invoicing' ),
713
+        '14' => __( 'Embu', 'invoicing' ),
714
+        '15' => __( 'Kitui', 'invoicing' ),
715
+        '16' => __( 'Machakos', 'invoicing' ),
716
+        '17' => __( 'Makueni', 'invoicing' ),
717
+        '18' => __( 'Nyandarua', 'invoicing' ),
718
+        '19' => __( 'Nyeri', 'invoicing' ),
719
+        '20' => __( 'Kirinyaga', 'invoicing' ),
720
+        '21' => __( "Murang'a", 'invoicing' ),
721
+        '22' => __( 'Kiambu', 'invoicing' ),
722
+        '23' => __( 'Turkana', 'invoicing' ),
723
+        '24' => __( 'West Pokot', 'invoicing' ),
724
+        '25' => __( 'Samburu', 'invoicing' ),
725
+        '26' => __( 'Trans-Nzoia', 'invoicing' ),
726
+        '27' => __( 'Uasin Gishu', 'invoicing' ),
727
+        '28' => __( 'Elgeyo-Marakwet', 'invoicing' ),
728
+        '29' => __( 'Nandi', 'invoicing' ),
729
+        '30' => __( 'Baringo', 'invoicing' ),
730
+        '31' => __( 'Laikipia', 'invoicing' ),
731
+        '32' => __( 'Nakuru', 'invoicing' ),
732
+        '33' => __( 'Narok', 'invoicing' ),
733
+        '34' => __( 'Kajiado', 'invoicing' ),
734
+        '35' => __( 'Kericho', 'invoicing' ),
735
+        '36' => __( 'Bomet', 'invoicing' ),
736
+        '37' => __( 'Kakamega', 'invoicing' ),
737
+        '38' => __( 'Vihiga', 'invoicing' ),
738
+        '39' => __( 'Bungoma', 'invoicing' ),
739
+        '40' => __( 'Busia', 'invoicing' ),
740
+        '41' => __( 'Siaya', 'invoicing' ),
741
+        '42' => __( 'Kisumu', 'invoicing' ),
742
+        '43' => __( 'Homa bay', 'invoicing' ),
743
+        '44' => __( 'Migori', 'invoicing' ),
744
+        '45' => __( 'Kisii', 'invoicing' ),
745
+        '46' => __( 'Nyamira', 'invoicing' ),
746
+        '47' => __( 'Nairobi', 'invoicing' ),
747
+    ),
748
+    'KR' => array(),
749
+    'KW' => array(),
750
+    'LB' => array(),
751
+    'LR' => array( // Liberia provinces.
752
+        'BM' => __( 'Bomi', 'invoicing' ),
753
+        'BN' => __( 'Bong', 'invoicing' ),
754
+        'GA' => __( 'Gbarpolu', 'invoicing' ),
755
+        'GB' => __( 'Grand Bassa', 'invoicing' ),
756
+        'GC' => __( 'Grand Cape Mount', 'invoicing' ),
757
+        'GG' => __( 'Grand Gedeh', 'invoicing' ),
758
+        'GK' => __( 'Grand Kru', 'invoicing' ),
759
+        'LO' => __( 'Lofa', 'invoicing' ),
760
+        'MA' => __( 'Margibi', 'invoicing' ),
761
+        'MY' => __( 'Maryland', 'invoicing' ),
762
+        'MO' => __( 'Montserrado', 'invoicing' ),
763
+        'NM' => __( 'Nimba', 'invoicing' ),
764
+        'RV' => __( 'Rivercess', 'invoicing' ),
765
+        'RG' => __( 'River Gee', 'invoicing' ),
766
+        'SN' => __( 'Sinoe', 'invoicing' ),
767
+    ),
768
+    'LU' => array(),
769
+    'MD' => array( // Moldova states.
770
+        'C'  => __( 'Chi&#537;in&#259;u', 'invoicing' ),
771
+        'BL' => __( 'B&#259;l&#539;i', 'invoicing' ),
772
+        'AN' => __( 'Anenii Noi', 'invoicing' ),
773
+        'BS' => __( 'Basarabeasca', 'invoicing' ),
774
+        'BR' => __( 'Briceni', 'invoicing' ),
775
+        'CH' => __( 'Cahul', 'invoicing' ),
776
+        'CT' => __( 'Cantemir', 'invoicing' ),
777
+        'CL' => __( 'C&#259;l&#259;ra&#537;i', 'invoicing' ),
778
+        'CS' => __( 'C&#259;u&#537;eni', 'invoicing' ),
779
+        'CM' => __( 'Cimi&#537;lia', 'invoicing' ),
780
+        'CR' => __( 'Criuleni', 'invoicing' ),
781
+        'DN' => __( 'Dondu&#537;eni', 'invoicing' ),
782
+        'DR' => __( 'Drochia', 'invoicing' ),
783
+        'DB' => __( 'Dub&#259;sari', 'invoicing' ),
784
+        'ED' => __( 'Edine&#539;', 'invoicing' ),
785
+        'FL' => __( 'F&#259;le&#537;ti', 'invoicing' ),
786
+        'FR' => __( 'Flore&#537;ti', 'invoicing' ),
787
+        'GE' => __( 'UTA G&#259;g&#259;uzia', 'invoicing' ),
788
+        'GL' => __( 'Glodeni', 'invoicing' ),
789
+        'HN' => __( 'H&icirc;nce&#537;ti', 'invoicing' ),
790
+        'IL' => __( 'Ialoveni', 'invoicing' ),
791
+        'LV' => __( 'Leova', 'invoicing' ),
792
+        'NS' => __( 'Nisporeni', 'invoicing' ),
793
+        'OC' => __( 'Ocni&#539;a', 'invoicing' ),
794
+        'OR' => __( 'Orhei', 'invoicing' ),
795
+        'RZ' => __( 'Rezina', 'invoicing' ),
796
+        'RS' => __( 'R&icirc;&#537;cani', 'invoicing' ),
797
+        'SG' => __( 'S&icirc;ngerei', 'invoicing' ),
798
+        'SR' => __( 'Soroca', 'invoicing' ),
799
+        'ST' => __( 'Str&#259;&#537;eni', 'invoicing' ),
800
+        'SD' => __( '&#536;old&#259;ne&#537;ti', 'invoicing' ),
801
+        'SV' => __( '&#536;tefan Vod&#259;', 'invoicing' ),
802
+        'TR' => __( 'Taraclia', 'invoicing' ),
803
+        'TL' => __( 'Telene&#537;ti', 'invoicing' ),
804
+        'UN' => __( 'Ungheni', 'invoicing' ),
805
+    ),
806
+    'MQ' => array(),
807
+    'MT' => array(),
808
+    'MX' => array( // Mexico States.
809
+        'DF' => __( 'Ciudad de M&eacute;xico', 'invoicing' ),
810
+        'JA' => __( 'Jalisco', 'invoicing' ),
811
+        'NL' => __( 'Nuevo Le&oacute;n', 'invoicing' ),
812
+        'AG' => __( 'Aguascalientes', 'invoicing' ),
813
+        'BC' => __( 'Baja California', 'invoicing' ),
814
+        'BS' => __( 'Baja California Sur', 'invoicing' ),
815
+        'CM' => __( 'Campeche', 'invoicing' ),
816
+        'CS' => __( 'Chiapas', 'invoicing' ),
817
+        'CH' => __( 'Chihuahua', 'invoicing' ),
818
+        'CO' => __( 'Coahuila', 'invoicing' ),
819
+        'CL' => __( 'Colima', 'invoicing' ),
820
+        'DG' => __( 'Durango', 'invoicing' ),
821
+        'GT' => __( 'Guanajuato', 'invoicing' ),
822
+        'GR' => __( 'Guerrero', 'invoicing' ),
823
+        'HG' => __( 'Hidalgo', 'invoicing' ),
824
+        'MX' => __( 'Estado de M&eacute;xico', 'invoicing' ),
825
+        'MI' => __( 'Michoac&aacute;n', 'invoicing' ),
826
+        'MO' => __( 'Morelos', 'invoicing' ),
827
+        'NA' => __( 'Nayarit', 'invoicing' ),
828
+        'OA' => __( 'Oaxaca', 'invoicing' ),
829
+        'PU' => __( 'Puebla', 'invoicing' ),
830
+        'QT' => __( 'Quer&eacute;taro', 'invoicing' ),
831
+        'QR' => __( 'Quintana Roo', 'invoicing' ),
832
+        'SL' => __( 'San Luis Potos&iacute;', 'invoicing' ),
833
+        'SI' => __( 'Sinaloa', 'invoicing' ),
834
+        'SO' => __( 'Sonora', 'invoicing' ),
835
+        'TB' => __( 'Tabasco', 'invoicing' ),
836
+        'TM' => __( 'Tamaulipas', 'invoicing' ),
837
+        'TL' => __( 'Tlaxcala', 'invoicing' ),
838
+        'VE' => __( 'Veracruz', 'invoicing' ),
839
+        'YU' => __( 'Yucat&aacute;n', 'invoicing' ),
840
+        'ZA' => __( 'Zacatecas', 'invoicing' ),
841
+    ),
842
+    'MY' => array( // Malaysian states.
843
+        'JHR' => __( 'Johor', 'invoicing' ),
844
+        'KDH' => __( 'Kedah', 'invoicing' ),
845
+        'KTN' => __( 'Kelantan', 'invoicing' ),
846
+        'LBN' => __( 'Labuan', 'invoicing' ),
847
+        'MLK' => __( 'Malacca (Melaka)', 'invoicing' ),
848
+        'NSN' => __( 'Negeri Sembilan', 'invoicing' ),
849
+        'PHG' => __( 'Pahang', 'invoicing' ),
850
+        'PNG' => __( 'Penang (Pulau Pinang)', 'invoicing' ),
851
+        'PRK' => __( 'Perak', 'invoicing' ),
852
+        'PLS' => __( 'Perlis', 'invoicing' ),
853
+        'SBH' => __( 'Sabah', 'invoicing' ),
854
+        'SWK' => __( 'Sarawak', 'invoicing' ),
855
+        'SGR' => __( 'Selangor', 'invoicing' ),
856
+        'TRG' => __( 'Terengganu', 'invoicing' ),
857
+        'PJY' => __( 'Putrajaya', 'invoicing' ),
858
+        'KUL' => __( 'Kuala Lumpur', 'invoicing' ),
859
+    ),
860
+    'NG' => array( // Nigerian provinces.
861
+        'AB' => __( 'Abia', 'invoicing' ),
862
+        'FC' => __( 'Abuja', 'invoicing' ),
863
+        'AD' => __( 'Adamawa', 'invoicing' ),
864
+        'AK' => __( 'Akwa Ibom', 'invoicing' ),
865
+        'AN' => __( 'Anambra', 'invoicing' ),
866
+        'BA' => __( 'Bauchi', 'invoicing' ),
867
+        'BY' => __( 'Bayelsa', 'invoicing' ),
868
+        'BE' => __( 'Benue', 'invoicing' ),
869
+        'BO' => __( 'Borno', 'invoicing' ),
870
+        'CR' => __( 'Cross River', 'invoicing' ),
871
+        'DE' => __( 'Delta', 'invoicing' ),
872
+        'EB' => __( 'Ebonyi', 'invoicing' ),
873
+        'ED' => __( 'Edo', 'invoicing' ),
874
+        'EK' => __( 'Ekiti', 'invoicing' ),
875
+        'EN' => __( 'Enugu', 'invoicing' ),
876
+        'GO' => __( 'Gombe', 'invoicing' ),
877
+        'IM' => __( 'Imo', 'invoicing' ),
878
+        'JI' => __( 'Jigawa', 'invoicing' ),
879
+        'KD' => __( 'Kaduna', 'invoicing' ),
880
+        'KN' => __( 'Kano', 'invoicing' ),
881
+        'KT' => __( 'Katsina', 'invoicing' ),
882
+        'KE' => __( 'Kebbi', 'invoicing' ),
883
+        'KO' => __( 'Kogi', 'invoicing' ),
884
+        'KW' => __( 'Kwara', 'invoicing' ),
885
+        'LA' => __( 'Lagos', 'invoicing' ),
886
+        'NA' => __( 'Nasarawa', 'invoicing' ),
887
+        'NI' => __( 'Niger', 'invoicing' ),
888
+        'OG' => __( 'Ogun', 'invoicing' ),
889
+        'ON' => __( 'Ondo', 'invoicing' ),
890
+        'OS' => __( 'Osun', 'invoicing' ),
891
+        'OY' => __( 'Oyo', 'invoicing' ),
892
+        'PL' => __( 'Plateau', 'invoicing' ),
893
+        'RI' => __( 'Rivers', 'invoicing' ),
894
+        'SO' => __( 'Sokoto', 'invoicing' ),
895
+        'TA' => __( 'Taraba', 'invoicing' ),
896
+        'YO' => __( 'Yobe', 'invoicing' ),
897
+        'ZA' => __( 'Zamfara', 'invoicing' ),
898
+    ),
899
+    'NL' => array(),
900
+    'NO' => array(),
901
+    'NP' => array( // Nepal states (Zones).
902
+        'BAG' => __( 'Bagmati', 'invoicing' ),
903
+        'BHE' => __( 'Bheri', 'invoicing' ),
904
+        'DHA' => __( 'Dhaulagiri', 'invoicing' ),
905
+        'GAN' => __( 'Gandaki', 'invoicing' ),
906
+        'JAN' => __( 'Janakpur', 'invoicing' ),
907
+        'KAR' => __( 'Karnali', 'invoicing' ),
908
+        'KOS' => __( 'Koshi', 'invoicing' ),
909
+        'LUM' => __( 'Lumbini', 'invoicing' ),
910
+        'MAH' => __( 'Mahakali', 'invoicing' ),
911
+        'MEC' => __( 'Mechi', 'invoicing' ),
912
+        'NAR' => __( 'Narayani', 'invoicing' ),
913
+        'RAP' => __( 'Rapti', 'invoicing' ),
914
+        'SAG' => __( 'Sagarmatha', 'invoicing' ),
915
+        'SET' => __( 'Seti', 'invoicing' ),
916
+    ),
917
+    'NZ' => array( // New Zealand States.
918
+        'NL' => __( 'Northland', 'invoicing' ),
919
+        'AK' => __( 'Auckland', 'invoicing' ),
920
+        'WA' => __( 'Waikato', 'invoicing' ),
921
+        'BP' => __( 'Bay of Plenty', 'invoicing' ),
922
+        'TK' => __( 'Taranaki', 'invoicing' ),
923
+        'GI' => __( 'Gisborne', 'invoicing' ),
924
+        'HB' => __( 'Hawke&rsquo;s Bay', 'invoicing' ),
925
+        'MW' => __( 'Manawatu-Wanganui', 'invoicing' ),
926
+        'WE' => __( 'Wellington', 'invoicing' ),
927
+        'NS' => __( 'Nelson', 'invoicing' ),
928
+        'MB' => __( 'Marlborough', 'invoicing' ),
929
+        'TM' => __( 'Tasman', 'invoicing' ),
930
+        'WC' => __( 'West Coast', 'invoicing' ),
931
+        'CT' => __( 'Canterbury', 'invoicing' ),
932
+        'OT' => __( 'Otago', 'invoicing' ),
933
+        'SL' => __( 'Southland', 'invoicing' ),
934
+    ),
935
+    'PE' => array( // Peru states.
936
+        'CAL' => __( 'El Callao', 'invoicing' ),
937
+        'LMA' => __( 'Municipalidad Metropolitana de Lima', 'invoicing' ),
938
+        'AMA' => __( 'Amazonas', 'invoicing' ),
939
+        'ANC' => __( 'Ancash', 'invoicing' ),
940
+        'APU' => __( 'Apur&iacute;mac', 'invoicing' ),
941
+        'ARE' => __( 'Arequipa', 'invoicing' ),
942
+        'AYA' => __( 'Ayacucho', 'invoicing' ),
943
+        'CAJ' => __( 'Cajamarca', 'invoicing' ),
944
+        'CUS' => __( 'Cusco', 'invoicing' ),
945
+        'HUV' => __( 'Huancavelica', 'invoicing' ),
946
+        'HUC' => __( 'Hu&aacute;nuco', 'invoicing' ),
947
+        'ICA' => __( 'Ica', 'invoicing' ),
948
+        'JUN' => __( 'Jun&iacute;n', 'invoicing' ),
949
+        'LAL' => __( 'La Libertad', 'invoicing' ),
950
+        'LAM' => __( 'Lambayeque', 'invoicing' ),
951
+        'LIM' => __( 'Lima', 'invoicing' ),
952
+        'LOR' => __( 'Loreto', 'invoicing' ),
953
+        'MDD' => __( 'Madre de Dios', 'invoicing' ),
954
+        'MOQ' => __( 'Moquegua', 'invoicing' ),
955
+        'PAS' => __( 'Pasco', 'invoicing' ),
956
+        'PIU' => __( 'Piura', 'invoicing' ),
957
+        'PUN' => __( 'Puno', 'invoicing' ),
958
+        'SAM' => __( 'San Mart&iacute;n', 'invoicing' ),
959
+        'TAC' => __( 'Tacna', 'invoicing' ),
960
+        'TUM' => __( 'Tumbes', 'invoicing' ),
961
+        'UCA' => __( 'Ucayali', 'invoicing' ),
962
+    ),
963 963
 
964
-	/**
965
-	 * Philippine Provinces.
966
-	 */
967
-	'PH' => array(
968
-		'ABR' => __( 'Abra', 'invoicing' ),
969
-		'AGN' => __( 'Agusan del Norte', 'invoicing' ),
970
-		'AGS' => __( 'Agusan del Sur', 'invoicing' ),
971
-		'AKL' => __( 'Aklan', 'invoicing' ),
972
-		'ALB' => __( 'Albay', 'invoicing' ),
973
-		'ANT' => __( 'Antique', 'invoicing' ),
974
-		'APA' => __( 'Apayao', 'invoicing' ),
975
-		'AUR' => __( 'Aurora', 'invoicing' ),
976
-		'BAS' => __( 'Basilan', 'invoicing' ),
977
-		'BAN' => __( 'Bataan', 'invoicing' ),
978
-		'BTN' => __( 'Batanes', 'invoicing' ),
979
-		'BTG' => __( 'Batangas', 'invoicing' ),
980
-		'BEN' => __( 'Benguet', 'invoicing' ),
981
-		'BIL' => __( 'Biliran', 'invoicing' ),
982
-		'BOH' => __( 'Bohol', 'invoicing' ),
983
-		'BUK' => __( 'Bukidnon', 'invoicing' ),
984
-		'BUL' => __( 'Bulacan', 'invoicing' ),
985
-		'CAG' => __( 'Cagayan', 'invoicing' ),
986
-		'CAN' => __( 'Camarines Norte', 'invoicing' ),
987
-		'CAS' => __( 'Camarines Sur', 'invoicing' ),
988
-		'CAM' => __( 'Camiguin', 'invoicing' ),
989
-		'CAP' => __( 'Capiz', 'invoicing' ),
990
-		'CAT' => __( 'Catanduanes', 'invoicing' ),
991
-		'CAV' => __( 'Cavite', 'invoicing' ),
992
-		'CEB' => __( 'Cebu', 'invoicing' ),
993
-		'COM' => __( 'Compostela Valley', 'invoicing' ),
994
-		'NCO' => __( 'Cotabato', 'invoicing' ),
995
-		'DAV' => __( 'Davao del Norte', 'invoicing' ),
996
-		'DAS' => __( 'Davao del Sur', 'invoicing' ),
997
-		'DAC' => __( 'Davao Occidental', 'invoicing' ),
998
-		'DAO' => __( 'Davao Oriental', 'invoicing' ),
999
-		'DIN' => __( 'Dinagat Islands', 'invoicing' ),
1000
-		'EAS' => __( 'Eastern Samar', 'invoicing' ),
1001
-		'GUI' => __( 'Guimaras', 'invoicing' ),
1002
-		'IFU' => __( 'Ifugao', 'invoicing' ),
1003
-		'ILN' => __( 'Ilocos Norte', 'invoicing' ),
1004
-		'ILS' => __( 'Ilocos Sur', 'invoicing' ),
1005
-		'ILI' => __( 'Iloilo', 'invoicing' ),
1006
-		'ISA' => __( 'Isabela', 'invoicing' ),
1007
-		'KAL' => __( 'Kalinga', 'invoicing' ),
1008
-		'LUN' => __( 'La Union', 'invoicing' ),
1009
-		'LAG' => __( 'Laguna', 'invoicing' ),
1010
-		'LAN' => __( 'Lanao del Norte', 'invoicing' ),
1011
-		'LAS' => __( 'Lanao del Sur', 'invoicing' ),
1012
-		'LEY' => __( 'Leyte', 'invoicing' ),
1013
-		'MAG' => __( 'Maguindanao', 'invoicing' ),
1014
-		'MAD' => __( 'Marinduque', 'invoicing' ),
1015
-		'MAS' => __( 'Masbate', 'invoicing' ),
1016
-		'MSC' => __( 'Misamis Occidental', 'invoicing' ),
1017
-		'MSR' => __( 'Misamis Oriental', 'invoicing' ),
1018
-		'MOU' => __( 'Mountain Province', 'invoicing' ),
1019
-		'NEC' => __( 'Negros Occidental', 'invoicing' ),
1020
-		'NER' => __( 'Negros Oriental', 'invoicing' ),
1021
-		'NSA' => __( 'Northern Samar', 'invoicing' ),
1022
-		'NUE' => __( 'Nueva Ecija', 'invoicing' ),
1023
-		'NUV' => __( 'Nueva Vizcaya', 'invoicing' ),
1024
-		'MDC' => __( 'Occidental Mindoro', 'invoicing' ),
1025
-		'MDR' => __( 'Oriental Mindoro', 'invoicing' ),
1026
-		'PLW' => __( 'Palawan', 'invoicing' ),
1027
-		'PAM' => __( 'Pampanga', 'invoicing' ),
1028
-		'PAN' => __( 'Pangasinan', 'invoicing' ),
1029
-		'QUE' => __( 'Quezon', 'invoicing' ),
1030
-		'QUI' => __( 'Quirino', 'invoicing' ),
1031
-		'RIZ' => __( 'Rizal', 'invoicing' ),
1032
-		'ROM' => __( 'Romblon', 'invoicing' ),
1033
-		'WSA' => __( 'Samar', 'invoicing' ),
1034
-		'SAR' => __( 'Sarangani', 'invoicing' ),
1035
-		'SIQ' => __( 'Siquijor', 'invoicing' ),
1036
-		'SOR' => __( 'Sorsogon', 'invoicing' ),
1037
-		'SCO' => __( 'South Cotabato', 'invoicing' ),
1038
-		'SLE' => __( 'Southern Leyte', 'invoicing' ),
1039
-		'SUK' => __( 'Sultan Kudarat', 'invoicing' ),
1040
-		'SLU' => __( 'Sulu', 'invoicing' ),
1041
-		'SUN' => __( 'Surigao del Norte', 'invoicing' ),
1042
-		'SUR' => __( 'Surigao del Sur', 'invoicing' ),
1043
-		'TAR' => __( 'Tarlac', 'invoicing' ),
1044
-		'TAW' => __( 'Tawi-Tawi', 'invoicing' ),
1045
-		'ZMB' => __( 'Zambales', 'invoicing' ),
1046
-		'ZAN' => __( 'Zamboanga del Norte', 'invoicing' ),
1047
-		'ZAS' => __( 'Zamboanga del Sur', 'invoicing' ),
1048
-		'ZSI' => __( 'Zamboanga Sibugay', 'invoicing' ),
1049
-		'00'  => __( 'Metro Manila', 'invoicing' ),
1050
-	),
1051
-	'PK' => array( // Pakistan's states.
1052
-		'JK' => __( 'Azad Kashmir', 'invoicing' ),
1053
-		'BA' => __( 'Balochistan', 'invoicing' ),
1054
-		'TA' => __( 'FATA', 'invoicing' ),
1055
-		'GB' => __( 'Gilgit Baltistan', 'invoicing' ),
1056
-		'IS' => __( 'Islamabad Capital Territory', 'invoicing' ),
1057
-		'KP' => __( 'Khyber Pakhtunkhwa', 'invoicing' ),
1058
-		'PB' => __( 'Punjab', 'invoicing' ),
1059
-		'SD' => __( 'Sindh', 'invoicing' ),
1060
-	),
1061
-	'PL' => array(),
1062
-	'PT' => array(),
1063
-	'PY' => array( // Paraguay states.
1064
-		'PY-ASU' => __( 'Asunci&oacute;n', 'invoicing' ),
1065
-		'PY-1'   => __( 'Concepci&oacute;n', 'invoicing' ),
1066
-		'PY-2'   => __( 'San Pedro', 'invoicing' ),
1067
-		'PY-3'   => __( 'Cordillera', 'invoicing' ),
1068
-		'PY-4'   => __( 'Guair&aacute;', 'invoicing' ),
1069
-		'PY-5'   => __( 'Caaguaz&uacute;', 'invoicing' ),
1070
-		'PY-6'   => __( 'Caazap&aacute;', 'invoicing' ),
1071
-		'PY-7'   => __( 'Itap&uacute;a', 'invoicing' ),
1072
-		'PY-8'   => __( 'Misiones', 'invoicing' ),
1073
-		'PY-9'   => __( 'Paraguar&iacute;', 'invoicing' ),
1074
-		'PY-10'  => __( 'Alto Paran&aacute;', 'invoicing' ),
1075
-		'PY-11'  => __( 'Central', 'invoicing' ),
1076
-		'PY-12'  => __( '&Ntilde;eembuc&uacute;', 'invoicing' ),
1077
-		'PY-13'  => __( 'Amambay', 'invoicing' ),
1078
-		'PY-14'  => __( 'Canindey&uacute;', 'invoicing' ),
1079
-		'PY-15'  => __( 'Presidente Hayes', 'invoicing' ),
1080
-		'PY-16'  => __( 'Alto Paraguay', 'invoicing' ),
1081
-		'PY-17'  => __( 'Boquer&oacute;n', 'invoicing' ),
1082
-	),
1083
-	'RE' => array(),
1084
-	'RO' => array( // Romania states.
1085
-		'AB' => __( 'Alba', 'invoicing' ),
1086
-		'AR' => __( 'Arad', 'invoicing' ),
1087
-		'AG' => __( 'Arge&#537;', 'invoicing' ),
1088
-		'BC' => __( 'Bac&#259;u', 'invoicing' ),
1089
-		'BH' => __( 'Bihor', 'invoicing' ),
1090
-		'BN' => __( 'Bistri&#539;a-N&#259;s&#259;ud', 'invoicing' ),
1091
-		'BT' => __( 'Boto&#537;ani', 'invoicing' ),
1092
-		'BR' => __( 'Br&#259;ila', 'invoicing' ),
1093
-		'BV' => __( 'Bra&#537;ov', 'invoicing' ),
1094
-		'B'  => __( 'Bucure&#537;ti', 'invoicing' ),
1095
-		'BZ' => __( 'Buz&#259;u', 'invoicing' ),
1096
-		'CL' => __( 'C&#259;l&#259;ra&#537;i', 'invoicing' ),
1097
-		'CS' => __( 'Cara&#537;-Severin', 'invoicing' ),
1098
-		'CJ' => __( 'Cluj', 'invoicing' ),
1099
-		'CT' => __( 'Constan&#539;a', 'invoicing' ),
1100
-		'CV' => __( 'Covasna', 'invoicing' ),
1101
-		'DB' => __( 'D&acirc;mbovi&#539;a', 'invoicing' ),
1102
-		'DJ' => __( 'Dolj', 'invoicing' ),
1103
-		'GL' => __( 'Gala&#539;i', 'invoicing' ),
1104
-		'GR' => __( 'Giurgiu', 'invoicing' ),
1105
-		'GJ' => __( 'Gorj', 'invoicing' ),
1106
-		'HR' => __( 'Harghita', 'invoicing' ),
1107
-		'HD' => __( 'Hunedoara', 'invoicing' ),
1108
-		'IL' => __( 'Ialomi&#539;a', 'invoicing' ),
1109
-		'IS' => __( 'Ia&#537;i', 'invoicing' ),
1110
-		'IF' => __( 'Ilfov', 'invoicing' ),
1111
-		'MM' => __( 'Maramure&#537;', 'invoicing' ),
1112
-		'MH' => __( 'Mehedin&#539;i', 'invoicing' ),
1113
-		'MS' => __( 'Mure&#537;', 'invoicing' ),
1114
-		'NT' => __( 'Neam&#539;', 'invoicing' ),
1115
-		'OT' => __( 'Olt', 'invoicing' ),
1116
-		'PH' => __( 'Prahova', 'invoicing' ),
1117
-		'SJ' => __( 'S&#259;laj', 'invoicing' ),
1118
-		'SM' => __( 'Satu Mare', 'invoicing' ),
1119
-		'SB' => __( 'Sibiu', 'invoicing' ),
1120
-		'SV' => __( 'Suceava', 'invoicing' ),
1121
-		'TR' => __( 'Teleorman', 'invoicing' ),
1122
-		'TM' => __( 'Timi&#537;', 'invoicing' ),
1123
-		'TL' => __( 'Tulcea', 'invoicing' ),
1124
-		'VL' => __( 'V&acirc;lcea', 'invoicing' ),
1125
-		'VS' => __( 'Vaslui', 'invoicing' ),
1126
-		'VN' => __( 'Vrancea', 'invoicing' ),
1127
-	),
1128
-	'RS' => array(),
1129
-	'SG' => array(),
1130
-	'SK' => array(),
1131
-	'SI' => array(),
1132
-	'TH' => array( // Thailand states.
1133
-		'TH-37' => __( 'Amnat Charoen', 'invoicing' ),
1134
-		'TH-15' => __( 'Ang Thong', 'invoicing' ),
1135
-		'TH-14' => __( 'Ayutthaya', 'invoicing' ),
1136
-		'TH-10' => __( 'Bangkok', 'invoicing' ),
1137
-		'TH-38' => __( 'Bueng Kan', 'invoicing' ),
1138
-		'TH-31' => __( 'Buri Ram', 'invoicing' ),
1139
-		'TH-24' => __( 'Chachoengsao', 'invoicing' ),
1140
-		'TH-18' => __( 'Chai Nat', 'invoicing' ),
1141
-		'TH-36' => __( 'Chaiyaphum', 'invoicing' ),
1142
-		'TH-22' => __( 'Chanthaburi', 'invoicing' ),
1143
-		'TH-50' => __( 'Chiang Mai', 'invoicing' ),
1144
-		'TH-57' => __( 'Chiang Rai', 'invoicing' ),
1145
-		'TH-20' => __( 'Chonburi', 'invoicing' ),
1146
-		'TH-86' => __( 'Chumphon', 'invoicing' ),
1147
-		'TH-46' => __( 'Kalasin', 'invoicing' ),
1148
-		'TH-62' => __( 'Kamphaeng Phet', 'invoicing' ),
1149
-		'TH-71' => __( 'Kanchanaburi', 'invoicing' ),
1150
-		'TH-40' => __( 'Khon Kaen', 'invoicing' ),
1151
-		'TH-81' => __( 'Krabi', 'invoicing' ),
1152
-		'TH-52' => __( 'Lampang', 'invoicing' ),
1153
-		'TH-51' => __( 'Lamphun', 'invoicing' ),
1154
-		'TH-42' => __( 'Loei', 'invoicing' ),
1155
-		'TH-16' => __( 'Lopburi', 'invoicing' ),
1156
-		'TH-58' => __( 'Mae Hong Son', 'invoicing' ),
1157
-		'TH-44' => __( 'Maha Sarakham', 'invoicing' ),
1158
-		'TH-49' => __( 'Mukdahan', 'invoicing' ),
1159
-		'TH-26' => __( 'Nakhon Nayok', 'invoicing' ),
1160
-		'TH-73' => __( 'Nakhon Pathom', 'invoicing' ),
1161
-		'TH-48' => __( 'Nakhon Phanom', 'invoicing' ),
1162
-		'TH-30' => __( 'Nakhon Ratchasima', 'invoicing' ),
1163
-		'TH-60' => __( 'Nakhon Sawan', 'invoicing' ),
1164
-		'TH-80' => __( 'Nakhon Si Thammarat', 'invoicing' ),
1165
-		'TH-55' => __( 'Nan', 'invoicing' ),
1166
-		'TH-96' => __( 'Narathiwat', 'invoicing' ),
1167
-		'TH-39' => __( 'Nong Bua Lam Phu', 'invoicing' ),
1168
-		'TH-43' => __( 'Nong Khai', 'invoicing' ),
1169
-		'TH-12' => __( 'Nonthaburi', 'invoicing' ),
1170
-		'TH-13' => __( 'Pathum Thani', 'invoicing' ),
1171
-		'TH-94' => __( 'Pattani', 'invoicing' ),
1172
-		'TH-82' => __( 'Phang Nga', 'invoicing' ),
1173
-		'TH-93' => __( 'Phatthalung', 'invoicing' ),
1174
-		'TH-56' => __( 'Phayao', 'invoicing' ),
1175
-		'TH-67' => __( 'Phetchabun', 'invoicing' ),
1176
-		'TH-76' => __( 'Phetchaburi', 'invoicing' ),
1177
-		'TH-66' => __( 'Phichit', 'invoicing' ),
1178
-		'TH-65' => __( 'Phitsanulok', 'invoicing' ),
1179
-		'TH-54' => __( 'Phrae', 'invoicing' ),
1180
-		'TH-83' => __( 'Phuket', 'invoicing' ),
1181
-		'TH-25' => __( 'Prachin Buri', 'invoicing' ),
1182
-		'TH-77' => __( 'Prachuap Khiri Khan', 'invoicing' ),
1183
-		'TH-85' => __( 'Ranong', 'invoicing' ),
1184
-		'TH-70' => __( 'Ratchaburi', 'invoicing' ),
1185
-		'TH-21' => __( 'Rayong', 'invoicing' ),
1186
-		'TH-45' => __( 'Roi Et', 'invoicing' ),
1187
-		'TH-27' => __( 'Sa Kaeo', 'invoicing' ),
1188
-		'TH-47' => __( 'Sakon Nakhon', 'invoicing' ),
1189
-		'TH-11' => __( 'Samut Prakan', 'invoicing' ),
1190
-		'TH-74' => __( 'Samut Sakhon', 'invoicing' ),
1191
-		'TH-75' => __( 'Samut Songkhram', 'invoicing' ),
1192
-		'TH-19' => __( 'Saraburi', 'invoicing' ),
1193
-		'TH-91' => __( 'Satun', 'invoicing' ),
1194
-		'TH-17' => __( 'Sing Buri', 'invoicing' ),
1195
-		'TH-33' => __( 'Sisaket', 'invoicing' ),
1196
-		'TH-90' => __( 'Songkhla', 'invoicing' ),
1197
-		'TH-64' => __( 'Sukhothai', 'invoicing' ),
1198
-		'TH-72' => __( 'Suphan Buri', 'invoicing' ),
1199
-		'TH-84' => __( 'Surat Thani', 'invoicing' ),
1200
-		'TH-32' => __( 'Surin', 'invoicing' ),
1201
-		'TH-63' => __( 'Tak', 'invoicing' ),
1202
-		'TH-92' => __( 'Trang', 'invoicing' ),
1203
-		'TH-23' => __( 'Trat', 'invoicing' ),
1204
-		'TH-34' => __( 'Ubon Ratchathani', 'invoicing' ),
1205
-		'TH-41' => __( 'Udon Thani', 'invoicing' ),
1206
-		'TH-61' => __( 'Uthai Thani', 'invoicing' ),
1207
-		'TH-53' => __( 'Uttaradit', 'invoicing' ),
1208
-		'TH-95' => __( 'Yala', 'invoicing' ),
1209
-		'TH-35' => __( 'Yasothon', 'invoicing' ),
1210
-	),
1211
-	'TR' => array( // Turkey States.
1212
-		'TR01' => __( 'Adana', 'invoicing' ),
1213
-		'TR02' => __( 'Ad&#305;yaman', 'invoicing' ),
1214
-		'TR03' => __( 'Afyon', 'invoicing' ),
1215
-		'TR04' => __( 'A&#287;r&#305;', 'invoicing' ),
1216
-		'TR05' => __( 'Amasya', 'invoicing' ),
1217
-		'TR06' => __( 'Ankara', 'invoicing' ),
1218
-		'TR07' => __( 'Antalya', 'invoicing' ),
1219
-		'TR08' => __( 'Artvin', 'invoicing' ),
1220
-		'TR09' => __( 'Ayd&#305;n', 'invoicing' ),
1221
-		'TR10' => __( 'Bal&#305;kesir', 'invoicing' ),
1222
-		'TR11' => __( 'Bilecik', 'invoicing' ),
1223
-		'TR12' => __( 'Bing&#246;l', 'invoicing' ),
1224
-		'TR13' => __( 'Bitlis', 'invoicing' ),
1225
-		'TR14' => __( 'Bolu', 'invoicing' ),
1226
-		'TR15' => __( 'Burdur', 'invoicing' ),
1227
-		'TR16' => __( 'Bursa', 'invoicing' ),
1228
-		'TR17' => __( '&#199;anakkale', 'invoicing' ),
1229
-		'TR18' => __( '&#199;ank&#305;r&#305;', 'invoicing' ),
1230
-		'TR19' => __( '&#199;orum', 'invoicing' ),
1231
-		'TR20' => __( 'Denizli', 'invoicing' ),
1232
-		'TR21' => __( 'Diyarbak&#305;r', 'invoicing' ),
1233
-		'TR22' => __( 'Edirne', 'invoicing' ),
1234
-		'TR23' => __( 'Elaz&#305;&#287;', 'invoicing' ),
1235
-		'TR24' => __( 'Erzincan', 'invoicing' ),
1236
-		'TR25' => __( 'Erzurum', 'invoicing' ),
1237
-		'TR26' => __( 'Eski&#351;ehir', 'invoicing' ),
1238
-		'TR27' => __( 'Gaziantep', 'invoicing' ),
1239
-		'TR28' => __( 'Giresun', 'invoicing' ),
1240
-		'TR29' => __( 'G&#252;m&#252;&#351;hane', 'invoicing' ),
1241
-		'TR30' => __( 'Hakkari', 'invoicing' ),
1242
-		'TR31' => __( 'Hatay', 'invoicing' ),
1243
-		'TR32' => __( 'Isparta', 'invoicing' ),
1244
-		'TR33' => __( '&#304;&#231;el', 'invoicing' ),
1245
-		'TR34' => __( '&#304;stanbul', 'invoicing' ),
1246
-		'TR35' => __( '&#304;zmir', 'invoicing' ),
1247
-		'TR36' => __( 'Kars', 'invoicing' ),
1248
-		'TR37' => __( 'Kastamonu', 'invoicing' ),
1249
-		'TR38' => __( 'Kayseri', 'invoicing' ),
1250
-		'TR39' => __( 'K&#305;rklareli', 'invoicing' ),
1251
-		'TR40' => __( 'K&#305;r&#351;ehir', 'invoicing' ),
1252
-		'TR41' => __( 'Kocaeli', 'invoicing' ),
1253
-		'TR42' => __( 'Konya', 'invoicing' ),
1254
-		'TR43' => __( 'K&#252;tahya', 'invoicing' ),
1255
-		'TR44' => __( 'Malatya', 'invoicing' ),
1256
-		'TR45' => __( 'Manisa', 'invoicing' ),
1257
-		'TR46' => __( 'Kahramanmara&#351;', 'invoicing' ),
1258
-		'TR47' => __( 'Mardin', 'invoicing' ),
1259
-		'TR48' => __( 'Mu&#287;la', 'invoicing' ),
1260
-		'TR49' => __( 'Mu&#351;', 'invoicing' ),
1261
-		'TR50' => __( 'Nev&#351;ehir', 'invoicing' ),
1262
-		'TR51' => __( 'Ni&#287;de', 'invoicing' ),
1263
-		'TR52' => __( 'Ordu', 'invoicing' ),
1264
-		'TR53' => __( 'Rize', 'invoicing' ),
1265
-		'TR54' => __( 'Sakarya', 'invoicing' ),
1266
-		'TR55' => __( 'Samsun', 'invoicing' ),
1267
-		'TR56' => __( 'Siirt', 'invoicing' ),
1268
-		'TR57' => __( 'Sinop', 'invoicing' ),
1269
-		'TR58' => __( 'Sivas', 'invoicing' ),
1270
-		'TR59' => __( 'Tekirda&#287;', 'invoicing' ),
1271
-		'TR60' => __( 'Tokat', 'invoicing' ),
1272
-		'TR61' => __( 'Trabzon', 'invoicing' ),
1273
-		'TR62' => __( 'Tunceli', 'invoicing' ),
1274
-		'TR63' => __( '&#350;anl&#305;urfa', 'invoicing' ),
1275
-		'TR64' => __( 'U&#351;ak', 'invoicing' ),
1276
-		'TR65' => __( 'Van', 'invoicing' ),
1277
-		'TR66' => __( 'Yozgat', 'invoicing' ),
1278
-		'TR67' => __( 'Zonguldak', 'invoicing' ),
1279
-		'TR68' => __( 'Aksaray', 'invoicing' ),
1280
-		'TR69' => __( 'Bayburt', 'invoicing' ),
1281
-		'TR70' => __( 'Karaman', 'invoicing' ),
1282
-		'TR71' => __( 'K&#305;r&#305;kkale', 'invoicing' ),
1283
-		'TR72' => __( 'Batman', 'invoicing' ),
1284
-		'TR73' => __( '&#350;&#305;rnak', 'invoicing' ),
1285
-		'TR74' => __( 'Bart&#305;n', 'invoicing' ),
1286
-		'TR75' => __( 'Ardahan', 'invoicing' ),
1287
-		'TR76' => __( 'I&#287;d&#305;r', 'invoicing' ),
1288
-		'TR77' => __( 'Yalova', 'invoicing' ),
1289
-		'TR78' => __( 'Karab&#252;k', 'invoicing' ),
1290
-		'TR79' => __( 'Kilis', 'invoicing' ),
1291
-		'TR80' => __( 'Osmaniye', 'invoicing' ),
1292
-		'TR81' => __( 'D&#252;zce', 'invoicing' ),
1293
-	),
1294
-	'TZ' => array( // Tanzania States.
1295
-		'TZ01' => __( 'Arusha', 'invoicing' ),
1296
-		'TZ02' => __( 'Dar es Salaam', 'invoicing' ),
1297
-		'TZ03' => __( 'Dodoma', 'invoicing' ),
1298
-		'TZ04' => __( 'Iringa', 'invoicing' ),
1299
-		'TZ05' => __( 'Kagera', 'invoicing' ),
1300
-		'TZ06' => __( 'Pemba North', 'invoicing' ),
1301
-		'TZ07' => __( 'Zanzibar North', 'invoicing' ),
1302
-		'TZ08' => __( 'Kigoma', 'invoicing' ),
1303
-		'TZ09' => __( 'Kilimanjaro', 'invoicing' ),
1304
-		'TZ10' => __( 'Pemba South', 'invoicing' ),
1305
-		'TZ11' => __( 'Zanzibar South', 'invoicing' ),
1306
-		'TZ12' => __( 'Lindi', 'invoicing' ),
1307
-		'TZ13' => __( 'Mara', 'invoicing' ),
1308
-		'TZ14' => __( 'Mbeya', 'invoicing' ),
1309
-		'TZ15' => __( 'Zanzibar West', 'invoicing' ),
1310
-		'TZ16' => __( 'Morogoro', 'invoicing' ),
1311
-		'TZ17' => __( 'Mtwara', 'invoicing' ),
1312
-		'TZ18' => __( 'Mwanza', 'invoicing' ),
1313
-		'TZ19' => __( 'Coast', 'invoicing' ),
1314
-		'TZ20' => __( 'Rukwa', 'invoicing' ),
1315
-		'TZ21' => __( 'Ruvuma', 'invoicing' ),
1316
-		'TZ22' => __( 'Shinyanga', 'invoicing' ),
1317
-		'TZ23' => __( 'Singida', 'invoicing' ),
1318
-		'TZ24' => __( 'Tabora', 'invoicing' ),
1319
-		'TZ25' => __( 'Tanga', 'invoicing' ),
1320
-		'TZ26' => __( 'Manyara', 'invoicing' ),
1321
-		'TZ27' => __( 'Geita', 'invoicing' ),
1322
-		'TZ28' => __( 'Katavi', 'invoicing' ),
1323
-		'TZ29' => __( 'Njombe', 'invoicing' ),
1324
-		'TZ30' => __( 'Simiyu', 'invoicing' ),
1325
-	),
1326
-	'LK' => array(),
1327
-	'SE' => array(),
1328
-	'UG' => array( // Uganda districts. Ref: https://en.wikipedia.org/wiki/ISO_3166-2:UG.
1329
-		'UG314' => __( 'Abim', 'invoicing' ),
1330
-		'UG301' => __( 'Adjumani', 'invoicing' ),
1331
-		'UG322' => __( 'Agago', 'invoicing' ),
1332
-		'UG323' => __( 'Alebtong', 'invoicing' ),
1333
-		'UG315' => __( 'Amolatar', 'invoicing' ),
1334
-		'UG324' => __( 'Amudat', 'invoicing' ),
1335
-		'UG216' => __( 'Amuria', 'invoicing' ),
1336
-		'UG316' => __( 'Amuru', 'invoicing' ),
1337
-		'UG302' => __( 'Apac', 'invoicing' ),
1338
-		'UG303' => __( 'Arua', 'invoicing' ),
1339
-		'UG217' => __( 'Budaka', 'invoicing' ),
1340
-		'UG218' => __( 'Bududa', 'invoicing' ),
1341
-		'UG201' => __( 'Bugiri', 'invoicing' ),
1342
-		'UG235' => __( 'Bugweri', 'invoicing' ),
1343
-		'UG420' => __( 'Buhweju', 'invoicing' ),
1344
-		'UG117' => __( 'Buikwe', 'invoicing' ),
1345
-		'UG219' => __( 'Bukedea', 'invoicing' ),
1346
-		'UG118' => __( 'Bukomansimbi', 'invoicing' ),
1347
-		'UG220' => __( 'Bukwa', 'invoicing' ),
1348
-		'UG225' => __( 'Bulambuli', 'invoicing' ),
1349
-		'UG416' => __( 'Buliisa', 'invoicing' ),
1350
-		'UG401' => __( 'Bundibugyo', 'invoicing' ),
1351
-		'UG430' => __( 'Bunyangabu', 'invoicing' ),
1352
-		'UG402' => __( 'Bushenyi', 'invoicing' ),
1353
-		'UG202' => __( 'Busia', 'invoicing' ),
1354
-		'UG221' => __( 'Butaleja', 'invoicing' ),
1355
-		'UG119' => __( 'Butambala', 'invoicing' ),
1356
-		'UG233' => __( 'Butebo', 'invoicing' ),
1357
-		'UG120' => __( 'Buvuma', 'invoicing' ),
1358
-		'UG226' => __( 'Buyende', 'invoicing' ),
1359
-		'UG317' => __( 'Dokolo', 'invoicing' ),
1360
-		'UG121' => __( 'Gomba', 'invoicing' ),
1361
-		'UG304' => __( 'Gulu', 'invoicing' ),
1362
-		'UG403' => __( 'Hoima', 'invoicing' ),
1363
-		'UG417' => __( 'Ibanda', 'invoicing' ),
1364
-		'UG203' => __( 'Iganga', 'invoicing' ),
1365
-		'UG418' => __( 'Isingiro', 'invoicing' ),
1366
-		'UG204' => __( 'Jinja', 'invoicing' ),
1367
-		'UG318' => __( 'Kaabong', 'invoicing' ),
1368
-		'UG404' => __( 'Kabale', 'invoicing' ),
1369
-		'UG405' => __( 'Kabarole', 'invoicing' ),
1370
-		'UG213' => __( 'Kaberamaido', 'invoicing' ),
1371
-		'UG427' => __( 'Kagadi', 'invoicing' ),
1372
-		'UG428' => __( 'Kakumiro', 'invoicing' ),
1373
-		'UG101' => __( 'Kalangala', 'invoicing' ),
1374
-		'UG222' => __( 'Kaliro', 'invoicing' ),
1375
-		'UG122' => __( 'Kalungu', 'invoicing' ),
1376
-		'UG102' => __( 'Kampala', 'invoicing' ),
1377
-		'UG205' => __( 'Kamuli', 'invoicing' ),
1378
-		'UG413' => __( 'Kamwenge', 'invoicing' ),
1379
-		'UG414' => __( 'Kanungu', 'invoicing' ),
1380
-		'UG206' => __( 'Kapchorwa', 'invoicing' ),
1381
-		'UG236' => __( 'Kapelebyong', 'invoicing' ),
1382
-		'UG126' => __( 'Kasanda', 'invoicing' ),
1383
-		'UG406' => __( 'Kasese', 'invoicing' ),
1384
-		'UG207' => __( 'Katakwi', 'invoicing' ),
1385
-		'UG112' => __( 'Kayunga', 'invoicing' ),
1386
-		'UG407' => __( 'Kibaale', 'invoicing' ),
1387
-		'UG103' => __( 'Kiboga', 'invoicing' ),
1388
-		'UG227' => __( 'Kibuku', 'invoicing' ),
1389
-		'UG432' => __( 'Kikuube', 'invoicing' ),
1390
-		'UG419' => __( 'Kiruhura', 'invoicing' ),
1391
-		'UG421' => __( 'Kiryandongo', 'invoicing' ),
1392
-		'UG408' => __( 'Kisoro', 'invoicing' ),
1393
-		'UG305' => __( 'Kitgum', 'invoicing' ),
1394
-		'UG319' => __( 'Koboko', 'invoicing' ),
1395
-		'UG325' => __( 'Kole', 'invoicing' ),
1396
-		'UG306' => __( 'Kotido', 'invoicing' ),
1397
-		'UG208' => __( 'Kumi', 'invoicing' ),
1398
-		'UG333' => __( 'Kwania', 'invoicing' ),
1399
-		'UG228' => __( 'Kween', 'invoicing' ),
1400
-		'UG123' => __( 'Kyankwanzi', 'invoicing' ),
1401
-		'UG422' => __( 'Kyegegwa', 'invoicing' ),
1402
-		'UG415' => __( 'Kyenjojo', 'invoicing' ),
1403
-		'UG125' => __( 'Kyotera', 'invoicing' ),
1404
-		'UG326' => __( 'Lamwo', 'invoicing' ),
1405
-		'UG307' => __( 'Lira', 'invoicing' ),
1406
-		'UG229' => __( 'Luuka', 'invoicing' ),
1407
-		'UG104' => __( 'Luwero', 'invoicing' ),
1408
-		'UG124' => __( 'Lwengo', 'invoicing' ),
1409
-		'UG114' => __( 'Lyantonde', 'invoicing' ),
1410
-		'UG223' => __( 'Manafwa', 'invoicing' ),
1411
-		'UG320' => __( 'Maracha', 'invoicing' ),
1412
-		'UG105' => __( 'Masaka', 'invoicing' ),
1413
-		'UG409' => __( 'Masindi', 'invoicing' ),
1414
-		'UG214' => __( 'Mayuge', 'invoicing' ),
1415
-		'UG209' => __( 'Mbale', 'invoicing' ),
1416
-		'UG410' => __( 'Mbarara', 'invoicing' ),
1417
-		'UG423' => __( 'Mitooma', 'invoicing' ),
1418
-		'UG115' => __( 'Mityana', 'invoicing' ),
1419
-		'UG308' => __( 'Moroto', 'invoicing' ),
1420
-		'UG309' => __( 'Moyo', 'invoicing' ),
1421
-		'UG106' => __( 'Mpigi', 'invoicing' ),
1422
-		'UG107' => __( 'Mubende', 'invoicing' ),
1423
-		'UG108' => __( 'Mukono', 'invoicing' ),
1424
-		'UG334' => __( 'Nabilatuk', 'invoicing' ),
1425
-		'UG311' => __( 'Nakapiripirit', 'invoicing' ),
1426
-		'UG116' => __( 'Nakaseke', 'invoicing' ),
1427
-		'UG109' => __( 'Nakasongola', 'invoicing' ),
1428
-		'UG230' => __( 'Namayingo', 'invoicing' ),
1429
-		'UG234' => __( 'Namisindwa', 'invoicing' ),
1430
-		'UG224' => __( 'Namutumba', 'invoicing' ),
1431
-		'UG327' => __( 'Napak', 'invoicing' ),
1432
-		'UG310' => __( 'Nebbi', 'invoicing' ),
1433
-		'UG231' => __( 'Ngora', 'invoicing' ),
1434
-		'UG424' => __( 'Ntoroko', 'invoicing' ),
1435
-		'UG411' => __( 'Ntungamo', 'invoicing' ),
1436
-		'UG328' => __( 'Nwoya', 'invoicing' ),
1437
-		'UG331' => __( 'Omoro', 'invoicing' ),
1438
-		'UG329' => __( 'Otuke', 'invoicing' ),
1439
-		'UG321' => __( 'Oyam', 'invoicing' ),
1440
-		'UG312' => __( 'Pader', 'invoicing' ),
1441
-		'UG332' => __( 'Pakwach', 'invoicing' ),
1442
-		'UG210' => __( 'Pallisa', 'invoicing' ),
1443
-		'UG110' => __( 'Rakai', 'invoicing' ),
1444
-		'UG429' => __( 'Rubanda', 'invoicing' ),
1445
-		'UG425' => __( 'Rubirizi', 'invoicing' ),
1446
-		'UG431' => __( 'Rukiga', 'invoicing' ),
1447
-		'UG412' => __( 'Rukungiri', 'invoicing' ),
1448
-		'UG111' => __( 'Sembabule', 'invoicing' ),
1449
-		'UG232' => __( 'Serere', 'invoicing' ),
1450
-		'UG426' => __( 'Sheema', 'invoicing' ),
1451
-		'UG215' => __( 'Sironko', 'invoicing' ),
1452
-		'UG211' => __( 'Soroti', 'invoicing' ),
1453
-		'UG212' => __( 'Tororo', 'invoicing' ),
1454
-		'UG113' => __( 'Wakiso', 'invoicing' ),
1455
-		'UG313' => __( 'Yumbe', 'invoicing' ),
1456
-		'UG330' => __( 'Zombo', 'invoicing' ),
1457
-	),
1458
-	'UM' => array(
1459
-		'81' => __( 'Baker Island', 'invoicing' ),
1460
-		'84' => __( 'Howland Island', 'invoicing' ),
1461
-		'86' => __( 'Jarvis Island', 'invoicing' ),
1462
-		'67' => __( 'Johnston Atoll', 'invoicing' ),
1463
-		'89' => __( 'Kingman Reef', 'invoicing' ),
1464
-		'71' => __( 'Midway Atoll', 'invoicing' ),
1465
-		'76' => __( 'Navassa Island', 'invoicing' ),
1466
-		'95' => __( 'Palmyra Atoll', 'invoicing' ),
1467
-		'79' => __( 'Wake Island', 'invoicing' ),
1468
-	),
1469
-	'US' => array( // United States.
1470
-		'AL' => __( 'Alabama', 'invoicing' ),
1471
-		'AK' => __( 'Alaska', 'invoicing' ),
1472
-		'AZ' => __( 'Arizona', 'invoicing' ),
1473
-		'AR' => __( 'Arkansas', 'invoicing' ),
1474
-		'CA' => __( 'California', 'invoicing' ),
1475
-		'CO' => __( 'Colorado', 'invoicing' ),
1476
-		'CT' => __( 'Connecticut', 'invoicing' ),
1477
-		'DE' => __( 'Delaware', 'invoicing' ),
1478
-		'DC' => __( 'District Of Columbia', 'invoicing' ),
1479
-		'FL' => __( 'Florida', 'invoicing' ),
1480
-		'GA' => _x( 'Georgia', 'US state of Georgia', 'invoicing' ),
1481
-		'HI' => __( 'Hawaii', 'invoicing' ),
1482
-		'ID' => __( 'Idaho', 'invoicing' ),
1483
-		'IL' => __( 'Illinois', 'invoicing' ),
1484
-		'IN' => __( 'Indiana', 'invoicing' ),
1485
-		'IA' => __( 'Iowa', 'invoicing' ),
1486
-		'KS' => __( 'Kansas', 'invoicing' ),
1487
-		'KY' => __( 'Kentucky', 'invoicing' ),
1488
-		'LA' => __( 'Louisiana', 'invoicing' ),
1489
-		'ME' => __( 'Maine', 'invoicing' ),
1490
-		'MD' => __( 'Maryland', 'invoicing' ),
1491
-		'MA' => __( 'Massachusetts', 'invoicing' ),
1492
-		'MI' => __( 'Michigan', 'invoicing' ),
1493
-		'MN' => __( 'Minnesota', 'invoicing' ),
1494
-		'MS' => __( 'Mississippi', 'invoicing' ),
1495
-		'MO' => __( 'Missouri', 'invoicing' ),
1496
-		'MT' => __( 'Montana', 'invoicing' ),
1497
-		'NE' => __( 'Nebraska', 'invoicing' ),
1498
-		'NV' => __( 'Nevada', 'invoicing' ),
1499
-		'NH' => __( 'New Hampshire', 'invoicing' ),
1500
-		'NJ' => __( 'New Jersey', 'invoicing' ),
1501
-		'NM' => __( 'New Mexico', 'invoicing' ),
1502
-		'NY' => __( 'New York', 'invoicing' ),
1503
-		'NC' => __( 'North Carolina', 'invoicing' ),
1504
-		'ND' => __( 'North Dakota', 'invoicing' ),
1505
-		'OH' => __( 'Ohio', 'invoicing' ),
1506
-		'OK' => __( 'Oklahoma', 'invoicing' ),
1507
-		'OR' => __( 'Oregon', 'invoicing' ),
1508
-		'PA' => __( 'Pennsylvania', 'invoicing' ),
1509
-		'RI' => __( 'Rhode Island', 'invoicing' ),
1510
-		'SC' => __( 'South Carolina', 'invoicing' ),
1511
-		'SD' => __( 'South Dakota', 'invoicing' ),
1512
-		'TN' => __( 'Tennessee', 'invoicing' ),
1513
-		'TX' => __( 'Texas', 'invoicing' ),
1514
-		'UT' => __( 'Utah', 'invoicing' ),
1515
-		'VT' => __( 'Vermont', 'invoicing' ),
1516
-		'VA' => __( 'Virginia', 'invoicing' ),
1517
-		'WA' => __( 'Washington', 'invoicing' ),
1518
-		'WV' => __( 'West Virginia', 'invoicing' ),
1519
-		'WI' => __( 'Wisconsin', 'invoicing' ),
1520
-		'WY' => __( 'Wyoming', 'invoicing' ),
1521
-		'AA' => __( 'Armed Forces (AA)', 'invoicing' ),
1522
-		'AE' => __( 'Armed Forces (AE)', 'invoicing' ),
1523
-		'AP' => __( 'Armed Forces (AP)', 'invoicing' ),
1524
-	),
1525
-	'VN' => array(),
1526
-	'YT' => array(),
1527
-	'ZA' => array( // South African states.
1528
-		'EC'  => __( 'Eastern Cape', 'invoicing' ),
1529
-		'FS'  => __( 'Free State', 'invoicing' ),
1530
-		'GP'  => __( 'Gauteng', 'invoicing' ),
1531
-		'KZN' => __( 'KwaZulu-Natal', 'invoicing' ),
1532
-		'LP'  => __( 'Limpopo', 'invoicing' ),
1533
-		'MP'  => __( 'Mpumalanga', 'invoicing' ),
1534
-		'NC'  => __( 'Northern Cape', 'invoicing' ),
1535
-		'NW'  => __( 'North West', 'invoicing' ),
1536
-		'WC'  => __( 'Western Cape', 'invoicing' ),
1537
-	),
1538
-	'ZM' => array( // Zambia's Provinces. Ref: https://en.wikipedia.org/wiki/ISO_3166-2:ZM.
1539
-		'ZM-01' => __( 'Western', 'invoicing' ),
1540
-		'ZM-02' => __( 'Central', 'invoicing' ),
1541
-		'ZM-03' => __( 'Eastern', 'invoicing' ),
1542
-		'ZM-04' => __( 'Luapula', 'invoicing' ),
1543
-		'ZM-05' => __( 'Northern', 'invoicing' ),
1544
-		'ZM-06' => __( 'North-Western', 'invoicing' ),
1545
-		'ZM-07' => __( 'Southern', 'invoicing' ),
1546
-		'ZM-08' => __( 'Copperbelt', 'invoicing' ),
1547
-		'ZM-09' => __( 'Lusaka', 'invoicing' ),
1548
-		'ZM-10' => __( 'Muchinga', 'invoicing' ),
1549
-	),
964
+    /**
965
+     * Philippine Provinces.
966
+     */
967
+    'PH' => array(
968
+        'ABR' => __( 'Abra', 'invoicing' ),
969
+        'AGN' => __( 'Agusan del Norte', 'invoicing' ),
970
+        'AGS' => __( 'Agusan del Sur', 'invoicing' ),
971
+        'AKL' => __( 'Aklan', 'invoicing' ),
972
+        'ALB' => __( 'Albay', 'invoicing' ),
973
+        'ANT' => __( 'Antique', 'invoicing' ),
974
+        'APA' => __( 'Apayao', 'invoicing' ),
975
+        'AUR' => __( 'Aurora', 'invoicing' ),
976
+        'BAS' => __( 'Basilan', 'invoicing' ),
977
+        'BAN' => __( 'Bataan', 'invoicing' ),
978
+        'BTN' => __( 'Batanes', 'invoicing' ),
979
+        'BTG' => __( 'Batangas', 'invoicing' ),
980
+        'BEN' => __( 'Benguet', 'invoicing' ),
981
+        'BIL' => __( 'Biliran', 'invoicing' ),
982
+        'BOH' => __( 'Bohol', 'invoicing' ),
983
+        'BUK' => __( 'Bukidnon', 'invoicing' ),
984
+        'BUL' => __( 'Bulacan', 'invoicing' ),
985
+        'CAG' => __( 'Cagayan', 'invoicing' ),
986
+        'CAN' => __( 'Camarines Norte', 'invoicing' ),
987
+        'CAS' => __( 'Camarines Sur', 'invoicing' ),
988
+        'CAM' => __( 'Camiguin', 'invoicing' ),
989
+        'CAP' => __( 'Capiz', 'invoicing' ),
990
+        'CAT' => __( 'Catanduanes', 'invoicing' ),
991
+        'CAV' => __( 'Cavite', 'invoicing' ),
992
+        'CEB' => __( 'Cebu', 'invoicing' ),
993
+        'COM' => __( 'Compostela Valley', 'invoicing' ),
994
+        'NCO' => __( 'Cotabato', 'invoicing' ),
995
+        'DAV' => __( 'Davao del Norte', 'invoicing' ),
996
+        'DAS' => __( 'Davao del Sur', 'invoicing' ),
997
+        'DAC' => __( 'Davao Occidental', 'invoicing' ),
998
+        'DAO' => __( 'Davao Oriental', 'invoicing' ),
999
+        'DIN' => __( 'Dinagat Islands', 'invoicing' ),
1000
+        'EAS' => __( 'Eastern Samar', 'invoicing' ),
1001
+        'GUI' => __( 'Guimaras', 'invoicing' ),
1002
+        'IFU' => __( 'Ifugao', 'invoicing' ),
1003
+        'ILN' => __( 'Ilocos Norte', 'invoicing' ),
1004
+        'ILS' => __( 'Ilocos Sur', 'invoicing' ),
1005
+        'ILI' => __( 'Iloilo', 'invoicing' ),
1006
+        'ISA' => __( 'Isabela', 'invoicing' ),
1007
+        'KAL' => __( 'Kalinga', 'invoicing' ),
1008
+        'LUN' => __( 'La Union', 'invoicing' ),
1009
+        'LAG' => __( 'Laguna', 'invoicing' ),
1010
+        'LAN' => __( 'Lanao del Norte', 'invoicing' ),
1011
+        'LAS' => __( 'Lanao del Sur', 'invoicing' ),
1012
+        'LEY' => __( 'Leyte', 'invoicing' ),
1013
+        'MAG' => __( 'Maguindanao', 'invoicing' ),
1014
+        'MAD' => __( 'Marinduque', 'invoicing' ),
1015
+        'MAS' => __( 'Masbate', 'invoicing' ),
1016
+        'MSC' => __( 'Misamis Occidental', 'invoicing' ),
1017
+        'MSR' => __( 'Misamis Oriental', 'invoicing' ),
1018
+        'MOU' => __( 'Mountain Province', 'invoicing' ),
1019
+        'NEC' => __( 'Negros Occidental', 'invoicing' ),
1020
+        'NER' => __( 'Negros Oriental', 'invoicing' ),
1021
+        'NSA' => __( 'Northern Samar', 'invoicing' ),
1022
+        'NUE' => __( 'Nueva Ecija', 'invoicing' ),
1023
+        'NUV' => __( 'Nueva Vizcaya', 'invoicing' ),
1024
+        'MDC' => __( 'Occidental Mindoro', 'invoicing' ),
1025
+        'MDR' => __( 'Oriental Mindoro', 'invoicing' ),
1026
+        'PLW' => __( 'Palawan', 'invoicing' ),
1027
+        'PAM' => __( 'Pampanga', 'invoicing' ),
1028
+        'PAN' => __( 'Pangasinan', 'invoicing' ),
1029
+        'QUE' => __( 'Quezon', 'invoicing' ),
1030
+        'QUI' => __( 'Quirino', 'invoicing' ),
1031
+        'RIZ' => __( 'Rizal', 'invoicing' ),
1032
+        'ROM' => __( 'Romblon', 'invoicing' ),
1033
+        'WSA' => __( 'Samar', 'invoicing' ),
1034
+        'SAR' => __( 'Sarangani', 'invoicing' ),
1035
+        'SIQ' => __( 'Siquijor', 'invoicing' ),
1036
+        'SOR' => __( 'Sorsogon', 'invoicing' ),
1037
+        'SCO' => __( 'South Cotabato', 'invoicing' ),
1038
+        'SLE' => __( 'Southern Leyte', 'invoicing' ),
1039
+        'SUK' => __( 'Sultan Kudarat', 'invoicing' ),
1040
+        'SLU' => __( 'Sulu', 'invoicing' ),
1041
+        'SUN' => __( 'Surigao del Norte', 'invoicing' ),
1042
+        'SUR' => __( 'Surigao del Sur', 'invoicing' ),
1043
+        'TAR' => __( 'Tarlac', 'invoicing' ),
1044
+        'TAW' => __( 'Tawi-Tawi', 'invoicing' ),
1045
+        'ZMB' => __( 'Zambales', 'invoicing' ),
1046
+        'ZAN' => __( 'Zamboanga del Norte', 'invoicing' ),
1047
+        'ZAS' => __( 'Zamboanga del Sur', 'invoicing' ),
1048
+        'ZSI' => __( 'Zamboanga Sibugay', 'invoicing' ),
1049
+        '00'  => __( 'Metro Manila', 'invoicing' ),
1050
+    ),
1051
+    'PK' => array( // Pakistan's states.
1052
+        'JK' => __( 'Azad Kashmir', 'invoicing' ),
1053
+        'BA' => __( 'Balochistan', 'invoicing' ),
1054
+        'TA' => __( 'FATA', 'invoicing' ),
1055
+        'GB' => __( 'Gilgit Baltistan', 'invoicing' ),
1056
+        'IS' => __( 'Islamabad Capital Territory', 'invoicing' ),
1057
+        'KP' => __( 'Khyber Pakhtunkhwa', 'invoicing' ),
1058
+        'PB' => __( 'Punjab', 'invoicing' ),
1059
+        'SD' => __( 'Sindh', 'invoicing' ),
1060
+    ),
1061
+    'PL' => array(),
1062
+    'PT' => array(),
1063
+    'PY' => array( // Paraguay states.
1064
+        'PY-ASU' => __( 'Asunci&oacute;n', 'invoicing' ),
1065
+        'PY-1'   => __( 'Concepci&oacute;n', 'invoicing' ),
1066
+        'PY-2'   => __( 'San Pedro', 'invoicing' ),
1067
+        'PY-3'   => __( 'Cordillera', 'invoicing' ),
1068
+        'PY-4'   => __( 'Guair&aacute;', 'invoicing' ),
1069
+        'PY-5'   => __( 'Caaguaz&uacute;', 'invoicing' ),
1070
+        'PY-6'   => __( 'Caazap&aacute;', 'invoicing' ),
1071
+        'PY-7'   => __( 'Itap&uacute;a', 'invoicing' ),
1072
+        'PY-8'   => __( 'Misiones', 'invoicing' ),
1073
+        'PY-9'   => __( 'Paraguar&iacute;', 'invoicing' ),
1074
+        'PY-10'  => __( 'Alto Paran&aacute;', 'invoicing' ),
1075
+        'PY-11'  => __( 'Central', 'invoicing' ),
1076
+        'PY-12'  => __( '&Ntilde;eembuc&uacute;', 'invoicing' ),
1077
+        'PY-13'  => __( 'Amambay', 'invoicing' ),
1078
+        'PY-14'  => __( 'Canindey&uacute;', 'invoicing' ),
1079
+        'PY-15'  => __( 'Presidente Hayes', 'invoicing' ),
1080
+        'PY-16'  => __( 'Alto Paraguay', 'invoicing' ),
1081
+        'PY-17'  => __( 'Boquer&oacute;n', 'invoicing' ),
1082
+    ),
1083
+    'RE' => array(),
1084
+    'RO' => array( // Romania states.
1085
+        'AB' => __( 'Alba', 'invoicing' ),
1086
+        'AR' => __( 'Arad', 'invoicing' ),
1087
+        'AG' => __( 'Arge&#537;', 'invoicing' ),
1088
+        'BC' => __( 'Bac&#259;u', 'invoicing' ),
1089
+        'BH' => __( 'Bihor', 'invoicing' ),
1090
+        'BN' => __( 'Bistri&#539;a-N&#259;s&#259;ud', 'invoicing' ),
1091
+        'BT' => __( 'Boto&#537;ani', 'invoicing' ),
1092
+        'BR' => __( 'Br&#259;ila', 'invoicing' ),
1093
+        'BV' => __( 'Bra&#537;ov', 'invoicing' ),
1094
+        'B'  => __( 'Bucure&#537;ti', 'invoicing' ),
1095
+        'BZ' => __( 'Buz&#259;u', 'invoicing' ),
1096
+        'CL' => __( 'C&#259;l&#259;ra&#537;i', 'invoicing' ),
1097
+        'CS' => __( 'Cara&#537;-Severin', 'invoicing' ),
1098
+        'CJ' => __( 'Cluj', 'invoicing' ),
1099
+        'CT' => __( 'Constan&#539;a', 'invoicing' ),
1100
+        'CV' => __( 'Covasna', 'invoicing' ),
1101
+        'DB' => __( 'D&acirc;mbovi&#539;a', 'invoicing' ),
1102
+        'DJ' => __( 'Dolj', 'invoicing' ),
1103
+        'GL' => __( 'Gala&#539;i', 'invoicing' ),
1104
+        'GR' => __( 'Giurgiu', 'invoicing' ),
1105
+        'GJ' => __( 'Gorj', 'invoicing' ),
1106
+        'HR' => __( 'Harghita', 'invoicing' ),
1107
+        'HD' => __( 'Hunedoara', 'invoicing' ),
1108
+        'IL' => __( 'Ialomi&#539;a', 'invoicing' ),
1109
+        'IS' => __( 'Ia&#537;i', 'invoicing' ),
1110
+        'IF' => __( 'Ilfov', 'invoicing' ),
1111
+        'MM' => __( 'Maramure&#537;', 'invoicing' ),
1112
+        'MH' => __( 'Mehedin&#539;i', 'invoicing' ),
1113
+        'MS' => __( 'Mure&#537;', 'invoicing' ),
1114
+        'NT' => __( 'Neam&#539;', 'invoicing' ),
1115
+        'OT' => __( 'Olt', 'invoicing' ),
1116
+        'PH' => __( 'Prahova', 'invoicing' ),
1117
+        'SJ' => __( 'S&#259;laj', 'invoicing' ),
1118
+        'SM' => __( 'Satu Mare', 'invoicing' ),
1119
+        'SB' => __( 'Sibiu', 'invoicing' ),
1120
+        'SV' => __( 'Suceava', 'invoicing' ),
1121
+        'TR' => __( 'Teleorman', 'invoicing' ),
1122
+        'TM' => __( 'Timi&#537;', 'invoicing' ),
1123
+        'TL' => __( 'Tulcea', 'invoicing' ),
1124
+        'VL' => __( 'V&acirc;lcea', 'invoicing' ),
1125
+        'VS' => __( 'Vaslui', 'invoicing' ),
1126
+        'VN' => __( 'Vrancea', 'invoicing' ),
1127
+    ),
1128
+    'RS' => array(),
1129
+    'SG' => array(),
1130
+    'SK' => array(),
1131
+    'SI' => array(),
1132
+    'TH' => array( // Thailand states.
1133
+        'TH-37' => __( 'Amnat Charoen', 'invoicing' ),
1134
+        'TH-15' => __( 'Ang Thong', 'invoicing' ),
1135
+        'TH-14' => __( 'Ayutthaya', 'invoicing' ),
1136
+        'TH-10' => __( 'Bangkok', 'invoicing' ),
1137
+        'TH-38' => __( 'Bueng Kan', 'invoicing' ),
1138
+        'TH-31' => __( 'Buri Ram', 'invoicing' ),
1139
+        'TH-24' => __( 'Chachoengsao', 'invoicing' ),
1140
+        'TH-18' => __( 'Chai Nat', 'invoicing' ),
1141
+        'TH-36' => __( 'Chaiyaphum', 'invoicing' ),
1142
+        'TH-22' => __( 'Chanthaburi', 'invoicing' ),
1143
+        'TH-50' => __( 'Chiang Mai', 'invoicing' ),
1144
+        'TH-57' => __( 'Chiang Rai', 'invoicing' ),
1145
+        'TH-20' => __( 'Chonburi', 'invoicing' ),
1146
+        'TH-86' => __( 'Chumphon', 'invoicing' ),
1147
+        'TH-46' => __( 'Kalasin', 'invoicing' ),
1148
+        'TH-62' => __( 'Kamphaeng Phet', 'invoicing' ),
1149
+        'TH-71' => __( 'Kanchanaburi', 'invoicing' ),
1150
+        'TH-40' => __( 'Khon Kaen', 'invoicing' ),
1151
+        'TH-81' => __( 'Krabi', 'invoicing' ),
1152
+        'TH-52' => __( 'Lampang', 'invoicing' ),
1153
+        'TH-51' => __( 'Lamphun', 'invoicing' ),
1154
+        'TH-42' => __( 'Loei', 'invoicing' ),
1155
+        'TH-16' => __( 'Lopburi', 'invoicing' ),
1156
+        'TH-58' => __( 'Mae Hong Son', 'invoicing' ),
1157
+        'TH-44' => __( 'Maha Sarakham', 'invoicing' ),
1158
+        'TH-49' => __( 'Mukdahan', 'invoicing' ),
1159
+        'TH-26' => __( 'Nakhon Nayok', 'invoicing' ),
1160
+        'TH-73' => __( 'Nakhon Pathom', 'invoicing' ),
1161
+        'TH-48' => __( 'Nakhon Phanom', 'invoicing' ),
1162
+        'TH-30' => __( 'Nakhon Ratchasima', 'invoicing' ),
1163
+        'TH-60' => __( 'Nakhon Sawan', 'invoicing' ),
1164
+        'TH-80' => __( 'Nakhon Si Thammarat', 'invoicing' ),
1165
+        'TH-55' => __( 'Nan', 'invoicing' ),
1166
+        'TH-96' => __( 'Narathiwat', 'invoicing' ),
1167
+        'TH-39' => __( 'Nong Bua Lam Phu', 'invoicing' ),
1168
+        'TH-43' => __( 'Nong Khai', 'invoicing' ),
1169
+        'TH-12' => __( 'Nonthaburi', 'invoicing' ),
1170
+        'TH-13' => __( 'Pathum Thani', 'invoicing' ),
1171
+        'TH-94' => __( 'Pattani', 'invoicing' ),
1172
+        'TH-82' => __( 'Phang Nga', 'invoicing' ),
1173
+        'TH-93' => __( 'Phatthalung', 'invoicing' ),
1174
+        'TH-56' => __( 'Phayao', 'invoicing' ),
1175
+        'TH-67' => __( 'Phetchabun', 'invoicing' ),
1176
+        'TH-76' => __( 'Phetchaburi', 'invoicing' ),
1177
+        'TH-66' => __( 'Phichit', 'invoicing' ),
1178
+        'TH-65' => __( 'Phitsanulok', 'invoicing' ),
1179
+        'TH-54' => __( 'Phrae', 'invoicing' ),
1180
+        'TH-83' => __( 'Phuket', 'invoicing' ),
1181
+        'TH-25' => __( 'Prachin Buri', 'invoicing' ),
1182
+        'TH-77' => __( 'Prachuap Khiri Khan', 'invoicing' ),
1183
+        'TH-85' => __( 'Ranong', 'invoicing' ),
1184
+        'TH-70' => __( 'Ratchaburi', 'invoicing' ),
1185
+        'TH-21' => __( 'Rayong', 'invoicing' ),
1186
+        'TH-45' => __( 'Roi Et', 'invoicing' ),
1187
+        'TH-27' => __( 'Sa Kaeo', 'invoicing' ),
1188
+        'TH-47' => __( 'Sakon Nakhon', 'invoicing' ),
1189
+        'TH-11' => __( 'Samut Prakan', 'invoicing' ),
1190
+        'TH-74' => __( 'Samut Sakhon', 'invoicing' ),
1191
+        'TH-75' => __( 'Samut Songkhram', 'invoicing' ),
1192
+        'TH-19' => __( 'Saraburi', 'invoicing' ),
1193
+        'TH-91' => __( 'Satun', 'invoicing' ),
1194
+        'TH-17' => __( 'Sing Buri', 'invoicing' ),
1195
+        'TH-33' => __( 'Sisaket', 'invoicing' ),
1196
+        'TH-90' => __( 'Songkhla', 'invoicing' ),
1197
+        'TH-64' => __( 'Sukhothai', 'invoicing' ),
1198
+        'TH-72' => __( 'Suphan Buri', 'invoicing' ),
1199
+        'TH-84' => __( 'Surat Thani', 'invoicing' ),
1200
+        'TH-32' => __( 'Surin', 'invoicing' ),
1201
+        'TH-63' => __( 'Tak', 'invoicing' ),
1202
+        'TH-92' => __( 'Trang', 'invoicing' ),
1203
+        'TH-23' => __( 'Trat', 'invoicing' ),
1204
+        'TH-34' => __( 'Ubon Ratchathani', 'invoicing' ),
1205
+        'TH-41' => __( 'Udon Thani', 'invoicing' ),
1206
+        'TH-61' => __( 'Uthai Thani', 'invoicing' ),
1207
+        'TH-53' => __( 'Uttaradit', 'invoicing' ),
1208
+        'TH-95' => __( 'Yala', 'invoicing' ),
1209
+        'TH-35' => __( 'Yasothon', 'invoicing' ),
1210
+    ),
1211
+    'TR' => array( // Turkey States.
1212
+        'TR01' => __( 'Adana', 'invoicing' ),
1213
+        'TR02' => __( 'Ad&#305;yaman', 'invoicing' ),
1214
+        'TR03' => __( 'Afyon', 'invoicing' ),
1215
+        'TR04' => __( 'A&#287;r&#305;', 'invoicing' ),
1216
+        'TR05' => __( 'Amasya', 'invoicing' ),
1217
+        'TR06' => __( 'Ankara', 'invoicing' ),
1218
+        'TR07' => __( 'Antalya', 'invoicing' ),
1219
+        'TR08' => __( 'Artvin', 'invoicing' ),
1220
+        'TR09' => __( 'Ayd&#305;n', 'invoicing' ),
1221
+        'TR10' => __( 'Bal&#305;kesir', 'invoicing' ),
1222
+        'TR11' => __( 'Bilecik', 'invoicing' ),
1223
+        'TR12' => __( 'Bing&#246;l', 'invoicing' ),
1224
+        'TR13' => __( 'Bitlis', 'invoicing' ),
1225
+        'TR14' => __( 'Bolu', 'invoicing' ),
1226
+        'TR15' => __( 'Burdur', 'invoicing' ),
1227
+        'TR16' => __( 'Bursa', 'invoicing' ),
1228
+        'TR17' => __( '&#199;anakkale', 'invoicing' ),
1229
+        'TR18' => __( '&#199;ank&#305;r&#305;', 'invoicing' ),
1230
+        'TR19' => __( '&#199;orum', 'invoicing' ),
1231
+        'TR20' => __( 'Denizli', 'invoicing' ),
1232
+        'TR21' => __( 'Diyarbak&#305;r', 'invoicing' ),
1233
+        'TR22' => __( 'Edirne', 'invoicing' ),
1234
+        'TR23' => __( 'Elaz&#305;&#287;', 'invoicing' ),
1235
+        'TR24' => __( 'Erzincan', 'invoicing' ),
1236
+        'TR25' => __( 'Erzurum', 'invoicing' ),
1237
+        'TR26' => __( 'Eski&#351;ehir', 'invoicing' ),
1238
+        'TR27' => __( 'Gaziantep', 'invoicing' ),
1239
+        'TR28' => __( 'Giresun', 'invoicing' ),
1240
+        'TR29' => __( 'G&#252;m&#252;&#351;hane', 'invoicing' ),
1241
+        'TR30' => __( 'Hakkari', 'invoicing' ),
1242
+        'TR31' => __( 'Hatay', 'invoicing' ),
1243
+        'TR32' => __( 'Isparta', 'invoicing' ),
1244
+        'TR33' => __( '&#304;&#231;el', 'invoicing' ),
1245
+        'TR34' => __( '&#304;stanbul', 'invoicing' ),
1246
+        'TR35' => __( '&#304;zmir', 'invoicing' ),
1247
+        'TR36' => __( 'Kars', 'invoicing' ),
1248
+        'TR37' => __( 'Kastamonu', 'invoicing' ),
1249
+        'TR38' => __( 'Kayseri', 'invoicing' ),
1250
+        'TR39' => __( 'K&#305;rklareli', 'invoicing' ),
1251
+        'TR40' => __( 'K&#305;r&#351;ehir', 'invoicing' ),
1252
+        'TR41' => __( 'Kocaeli', 'invoicing' ),
1253
+        'TR42' => __( 'Konya', 'invoicing' ),
1254
+        'TR43' => __( 'K&#252;tahya', 'invoicing' ),
1255
+        'TR44' => __( 'Malatya', 'invoicing' ),
1256
+        'TR45' => __( 'Manisa', 'invoicing' ),
1257
+        'TR46' => __( 'Kahramanmara&#351;', 'invoicing' ),
1258
+        'TR47' => __( 'Mardin', 'invoicing' ),
1259
+        'TR48' => __( 'Mu&#287;la', 'invoicing' ),
1260
+        'TR49' => __( 'Mu&#351;', 'invoicing' ),
1261
+        'TR50' => __( 'Nev&#351;ehir', 'invoicing' ),
1262
+        'TR51' => __( 'Ni&#287;de', 'invoicing' ),
1263
+        'TR52' => __( 'Ordu', 'invoicing' ),
1264
+        'TR53' => __( 'Rize', 'invoicing' ),
1265
+        'TR54' => __( 'Sakarya', 'invoicing' ),
1266
+        'TR55' => __( 'Samsun', 'invoicing' ),
1267
+        'TR56' => __( 'Siirt', 'invoicing' ),
1268
+        'TR57' => __( 'Sinop', 'invoicing' ),
1269
+        'TR58' => __( 'Sivas', 'invoicing' ),
1270
+        'TR59' => __( 'Tekirda&#287;', 'invoicing' ),
1271
+        'TR60' => __( 'Tokat', 'invoicing' ),
1272
+        'TR61' => __( 'Trabzon', 'invoicing' ),
1273
+        'TR62' => __( 'Tunceli', 'invoicing' ),
1274
+        'TR63' => __( '&#350;anl&#305;urfa', 'invoicing' ),
1275
+        'TR64' => __( 'U&#351;ak', 'invoicing' ),
1276
+        'TR65' => __( 'Van', 'invoicing' ),
1277
+        'TR66' => __( 'Yozgat', 'invoicing' ),
1278
+        'TR67' => __( 'Zonguldak', 'invoicing' ),
1279
+        'TR68' => __( 'Aksaray', 'invoicing' ),
1280
+        'TR69' => __( 'Bayburt', 'invoicing' ),
1281
+        'TR70' => __( 'Karaman', 'invoicing' ),
1282
+        'TR71' => __( 'K&#305;r&#305;kkale', 'invoicing' ),
1283
+        'TR72' => __( 'Batman', 'invoicing' ),
1284
+        'TR73' => __( '&#350;&#305;rnak', 'invoicing' ),
1285
+        'TR74' => __( 'Bart&#305;n', 'invoicing' ),
1286
+        'TR75' => __( 'Ardahan', 'invoicing' ),
1287
+        'TR76' => __( 'I&#287;d&#305;r', 'invoicing' ),
1288
+        'TR77' => __( 'Yalova', 'invoicing' ),
1289
+        'TR78' => __( 'Karab&#252;k', 'invoicing' ),
1290
+        'TR79' => __( 'Kilis', 'invoicing' ),
1291
+        'TR80' => __( 'Osmaniye', 'invoicing' ),
1292
+        'TR81' => __( 'D&#252;zce', 'invoicing' ),
1293
+    ),
1294
+    'TZ' => array( // Tanzania States.
1295
+        'TZ01' => __( 'Arusha', 'invoicing' ),
1296
+        'TZ02' => __( 'Dar es Salaam', 'invoicing' ),
1297
+        'TZ03' => __( 'Dodoma', 'invoicing' ),
1298
+        'TZ04' => __( 'Iringa', 'invoicing' ),
1299
+        'TZ05' => __( 'Kagera', 'invoicing' ),
1300
+        'TZ06' => __( 'Pemba North', 'invoicing' ),
1301
+        'TZ07' => __( 'Zanzibar North', 'invoicing' ),
1302
+        'TZ08' => __( 'Kigoma', 'invoicing' ),
1303
+        'TZ09' => __( 'Kilimanjaro', 'invoicing' ),
1304
+        'TZ10' => __( 'Pemba South', 'invoicing' ),
1305
+        'TZ11' => __( 'Zanzibar South', 'invoicing' ),
1306
+        'TZ12' => __( 'Lindi', 'invoicing' ),
1307
+        'TZ13' => __( 'Mara', 'invoicing' ),
1308
+        'TZ14' => __( 'Mbeya', 'invoicing' ),
1309
+        'TZ15' => __( 'Zanzibar West', 'invoicing' ),
1310
+        'TZ16' => __( 'Morogoro', 'invoicing' ),
1311
+        'TZ17' => __( 'Mtwara', 'invoicing' ),
1312
+        'TZ18' => __( 'Mwanza', 'invoicing' ),
1313
+        'TZ19' => __( 'Coast', 'invoicing' ),
1314
+        'TZ20' => __( 'Rukwa', 'invoicing' ),
1315
+        'TZ21' => __( 'Ruvuma', 'invoicing' ),
1316
+        'TZ22' => __( 'Shinyanga', 'invoicing' ),
1317
+        'TZ23' => __( 'Singida', 'invoicing' ),
1318
+        'TZ24' => __( 'Tabora', 'invoicing' ),
1319
+        'TZ25' => __( 'Tanga', 'invoicing' ),
1320
+        'TZ26' => __( 'Manyara', 'invoicing' ),
1321
+        'TZ27' => __( 'Geita', 'invoicing' ),
1322
+        'TZ28' => __( 'Katavi', 'invoicing' ),
1323
+        'TZ29' => __( 'Njombe', 'invoicing' ),
1324
+        'TZ30' => __( 'Simiyu', 'invoicing' ),
1325
+    ),
1326
+    'LK' => array(),
1327
+    'SE' => array(),
1328
+    'UG' => array( // Uganda districts. Ref: https://en.wikipedia.org/wiki/ISO_3166-2:UG.
1329
+        'UG314' => __( 'Abim', 'invoicing' ),
1330
+        'UG301' => __( 'Adjumani', 'invoicing' ),
1331
+        'UG322' => __( 'Agago', 'invoicing' ),
1332
+        'UG323' => __( 'Alebtong', 'invoicing' ),
1333
+        'UG315' => __( 'Amolatar', 'invoicing' ),
1334
+        'UG324' => __( 'Amudat', 'invoicing' ),
1335
+        'UG216' => __( 'Amuria', 'invoicing' ),
1336
+        'UG316' => __( 'Amuru', 'invoicing' ),
1337
+        'UG302' => __( 'Apac', 'invoicing' ),
1338
+        'UG303' => __( 'Arua', 'invoicing' ),
1339
+        'UG217' => __( 'Budaka', 'invoicing' ),
1340
+        'UG218' => __( 'Bududa', 'invoicing' ),
1341
+        'UG201' => __( 'Bugiri', 'invoicing' ),
1342
+        'UG235' => __( 'Bugweri', 'invoicing' ),
1343
+        'UG420' => __( 'Buhweju', 'invoicing' ),
1344
+        'UG117' => __( 'Buikwe', 'invoicing' ),
1345
+        'UG219' => __( 'Bukedea', 'invoicing' ),
1346
+        'UG118' => __( 'Bukomansimbi', 'invoicing' ),
1347
+        'UG220' => __( 'Bukwa', 'invoicing' ),
1348
+        'UG225' => __( 'Bulambuli', 'invoicing' ),
1349
+        'UG416' => __( 'Buliisa', 'invoicing' ),
1350
+        'UG401' => __( 'Bundibugyo', 'invoicing' ),
1351
+        'UG430' => __( 'Bunyangabu', 'invoicing' ),
1352
+        'UG402' => __( 'Bushenyi', 'invoicing' ),
1353
+        'UG202' => __( 'Busia', 'invoicing' ),
1354
+        'UG221' => __( 'Butaleja', 'invoicing' ),
1355
+        'UG119' => __( 'Butambala', 'invoicing' ),
1356
+        'UG233' => __( 'Butebo', 'invoicing' ),
1357
+        'UG120' => __( 'Buvuma', 'invoicing' ),
1358
+        'UG226' => __( 'Buyende', 'invoicing' ),
1359
+        'UG317' => __( 'Dokolo', 'invoicing' ),
1360
+        'UG121' => __( 'Gomba', 'invoicing' ),
1361
+        'UG304' => __( 'Gulu', 'invoicing' ),
1362
+        'UG403' => __( 'Hoima', 'invoicing' ),
1363
+        'UG417' => __( 'Ibanda', 'invoicing' ),
1364
+        'UG203' => __( 'Iganga', 'invoicing' ),
1365
+        'UG418' => __( 'Isingiro', 'invoicing' ),
1366
+        'UG204' => __( 'Jinja', 'invoicing' ),
1367
+        'UG318' => __( 'Kaabong', 'invoicing' ),
1368
+        'UG404' => __( 'Kabale', 'invoicing' ),
1369
+        'UG405' => __( 'Kabarole', 'invoicing' ),
1370
+        'UG213' => __( 'Kaberamaido', 'invoicing' ),
1371
+        'UG427' => __( 'Kagadi', 'invoicing' ),
1372
+        'UG428' => __( 'Kakumiro', 'invoicing' ),
1373
+        'UG101' => __( 'Kalangala', 'invoicing' ),
1374
+        'UG222' => __( 'Kaliro', 'invoicing' ),
1375
+        'UG122' => __( 'Kalungu', 'invoicing' ),
1376
+        'UG102' => __( 'Kampala', 'invoicing' ),
1377
+        'UG205' => __( 'Kamuli', 'invoicing' ),
1378
+        'UG413' => __( 'Kamwenge', 'invoicing' ),
1379
+        'UG414' => __( 'Kanungu', 'invoicing' ),
1380
+        'UG206' => __( 'Kapchorwa', 'invoicing' ),
1381
+        'UG236' => __( 'Kapelebyong', 'invoicing' ),
1382
+        'UG126' => __( 'Kasanda', 'invoicing' ),
1383
+        'UG406' => __( 'Kasese', 'invoicing' ),
1384
+        'UG207' => __( 'Katakwi', 'invoicing' ),
1385
+        'UG112' => __( 'Kayunga', 'invoicing' ),
1386
+        'UG407' => __( 'Kibaale', 'invoicing' ),
1387
+        'UG103' => __( 'Kiboga', 'invoicing' ),
1388
+        'UG227' => __( 'Kibuku', 'invoicing' ),
1389
+        'UG432' => __( 'Kikuube', 'invoicing' ),
1390
+        'UG419' => __( 'Kiruhura', 'invoicing' ),
1391
+        'UG421' => __( 'Kiryandongo', 'invoicing' ),
1392
+        'UG408' => __( 'Kisoro', 'invoicing' ),
1393
+        'UG305' => __( 'Kitgum', 'invoicing' ),
1394
+        'UG319' => __( 'Koboko', 'invoicing' ),
1395
+        'UG325' => __( 'Kole', 'invoicing' ),
1396
+        'UG306' => __( 'Kotido', 'invoicing' ),
1397
+        'UG208' => __( 'Kumi', 'invoicing' ),
1398
+        'UG333' => __( 'Kwania', 'invoicing' ),
1399
+        'UG228' => __( 'Kween', 'invoicing' ),
1400
+        'UG123' => __( 'Kyankwanzi', 'invoicing' ),
1401
+        'UG422' => __( 'Kyegegwa', 'invoicing' ),
1402
+        'UG415' => __( 'Kyenjojo', 'invoicing' ),
1403
+        'UG125' => __( 'Kyotera', 'invoicing' ),
1404
+        'UG326' => __( 'Lamwo', 'invoicing' ),
1405
+        'UG307' => __( 'Lira', 'invoicing' ),
1406
+        'UG229' => __( 'Luuka', 'invoicing' ),
1407
+        'UG104' => __( 'Luwero', 'invoicing' ),
1408
+        'UG124' => __( 'Lwengo', 'invoicing' ),
1409
+        'UG114' => __( 'Lyantonde', 'invoicing' ),
1410
+        'UG223' => __( 'Manafwa', 'invoicing' ),
1411
+        'UG320' => __( 'Maracha', 'invoicing' ),
1412
+        'UG105' => __( 'Masaka', 'invoicing' ),
1413
+        'UG409' => __( 'Masindi', 'invoicing' ),
1414
+        'UG214' => __( 'Mayuge', 'invoicing' ),
1415
+        'UG209' => __( 'Mbale', 'invoicing' ),
1416
+        'UG410' => __( 'Mbarara', 'invoicing' ),
1417
+        'UG423' => __( 'Mitooma', 'invoicing' ),
1418
+        'UG115' => __( 'Mityana', 'invoicing' ),
1419
+        'UG308' => __( 'Moroto', 'invoicing' ),
1420
+        'UG309' => __( 'Moyo', 'invoicing' ),
1421
+        'UG106' => __( 'Mpigi', 'invoicing' ),
1422
+        'UG107' => __( 'Mubende', 'invoicing' ),
1423
+        'UG108' => __( 'Mukono', 'invoicing' ),
1424
+        'UG334' => __( 'Nabilatuk', 'invoicing' ),
1425
+        'UG311' => __( 'Nakapiripirit', 'invoicing' ),
1426
+        'UG116' => __( 'Nakaseke', 'invoicing' ),
1427
+        'UG109' => __( 'Nakasongola', 'invoicing' ),
1428
+        'UG230' => __( 'Namayingo', 'invoicing' ),
1429
+        'UG234' => __( 'Namisindwa', 'invoicing' ),
1430
+        'UG224' => __( 'Namutumba', 'invoicing' ),
1431
+        'UG327' => __( 'Napak', 'invoicing' ),
1432
+        'UG310' => __( 'Nebbi', 'invoicing' ),
1433
+        'UG231' => __( 'Ngora', 'invoicing' ),
1434
+        'UG424' => __( 'Ntoroko', 'invoicing' ),
1435
+        'UG411' => __( 'Ntungamo', 'invoicing' ),
1436
+        'UG328' => __( 'Nwoya', 'invoicing' ),
1437
+        'UG331' => __( 'Omoro', 'invoicing' ),
1438
+        'UG329' => __( 'Otuke', 'invoicing' ),
1439
+        'UG321' => __( 'Oyam', 'invoicing' ),
1440
+        'UG312' => __( 'Pader', 'invoicing' ),
1441
+        'UG332' => __( 'Pakwach', 'invoicing' ),
1442
+        'UG210' => __( 'Pallisa', 'invoicing' ),
1443
+        'UG110' => __( 'Rakai', 'invoicing' ),
1444
+        'UG429' => __( 'Rubanda', 'invoicing' ),
1445
+        'UG425' => __( 'Rubirizi', 'invoicing' ),
1446
+        'UG431' => __( 'Rukiga', 'invoicing' ),
1447
+        'UG412' => __( 'Rukungiri', 'invoicing' ),
1448
+        'UG111' => __( 'Sembabule', 'invoicing' ),
1449
+        'UG232' => __( 'Serere', 'invoicing' ),
1450
+        'UG426' => __( 'Sheema', 'invoicing' ),
1451
+        'UG215' => __( 'Sironko', 'invoicing' ),
1452
+        'UG211' => __( 'Soroti', 'invoicing' ),
1453
+        'UG212' => __( 'Tororo', 'invoicing' ),
1454
+        'UG113' => __( 'Wakiso', 'invoicing' ),
1455
+        'UG313' => __( 'Yumbe', 'invoicing' ),
1456
+        'UG330' => __( 'Zombo', 'invoicing' ),
1457
+    ),
1458
+    'UM' => array(
1459
+        '81' => __( 'Baker Island', 'invoicing' ),
1460
+        '84' => __( 'Howland Island', 'invoicing' ),
1461
+        '86' => __( 'Jarvis Island', 'invoicing' ),
1462
+        '67' => __( 'Johnston Atoll', 'invoicing' ),
1463
+        '89' => __( 'Kingman Reef', 'invoicing' ),
1464
+        '71' => __( 'Midway Atoll', 'invoicing' ),
1465
+        '76' => __( 'Navassa Island', 'invoicing' ),
1466
+        '95' => __( 'Palmyra Atoll', 'invoicing' ),
1467
+        '79' => __( 'Wake Island', 'invoicing' ),
1468
+    ),
1469
+    'US' => array( // United States.
1470
+        'AL' => __( 'Alabama', 'invoicing' ),
1471
+        'AK' => __( 'Alaska', 'invoicing' ),
1472
+        'AZ' => __( 'Arizona', 'invoicing' ),
1473
+        'AR' => __( 'Arkansas', 'invoicing' ),
1474
+        'CA' => __( 'California', 'invoicing' ),
1475
+        'CO' => __( 'Colorado', 'invoicing' ),
1476
+        'CT' => __( 'Connecticut', 'invoicing' ),
1477
+        'DE' => __( 'Delaware', 'invoicing' ),
1478
+        'DC' => __( 'District Of Columbia', 'invoicing' ),
1479
+        'FL' => __( 'Florida', 'invoicing' ),
1480
+        'GA' => _x( 'Georgia', 'US state of Georgia', 'invoicing' ),
1481
+        'HI' => __( 'Hawaii', 'invoicing' ),
1482
+        'ID' => __( 'Idaho', 'invoicing' ),
1483
+        'IL' => __( 'Illinois', 'invoicing' ),
1484
+        'IN' => __( 'Indiana', 'invoicing' ),
1485
+        'IA' => __( 'Iowa', 'invoicing' ),
1486
+        'KS' => __( 'Kansas', 'invoicing' ),
1487
+        'KY' => __( 'Kentucky', 'invoicing' ),
1488
+        'LA' => __( 'Louisiana', 'invoicing' ),
1489
+        'ME' => __( 'Maine', 'invoicing' ),
1490
+        'MD' => __( 'Maryland', 'invoicing' ),
1491
+        'MA' => __( 'Massachusetts', 'invoicing' ),
1492
+        'MI' => __( 'Michigan', 'invoicing' ),
1493
+        'MN' => __( 'Minnesota', 'invoicing' ),
1494
+        'MS' => __( 'Mississippi', 'invoicing' ),
1495
+        'MO' => __( 'Missouri', 'invoicing' ),
1496
+        'MT' => __( 'Montana', 'invoicing' ),
1497
+        'NE' => __( 'Nebraska', 'invoicing' ),
1498
+        'NV' => __( 'Nevada', 'invoicing' ),
1499
+        'NH' => __( 'New Hampshire', 'invoicing' ),
1500
+        'NJ' => __( 'New Jersey', 'invoicing' ),
1501
+        'NM' => __( 'New Mexico', 'invoicing' ),
1502
+        'NY' => __( 'New York', 'invoicing' ),
1503
+        'NC' => __( 'North Carolina', 'invoicing' ),
1504
+        'ND' => __( 'North Dakota', 'invoicing' ),
1505
+        'OH' => __( 'Ohio', 'invoicing' ),
1506
+        'OK' => __( 'Oklahoma', 'invoicing' ),
1507
+        'OR' => __( 'Oregon', 'invoicing' ),
1508
+        'PA' => __( 'Pennsylvania', 'invoicing' ),
1509
+        'RI' => __( 'Rhode Island', 'invoicing' ),
1510
+        'SC' => __( 'South Carolina', 'invoicing' ),
1511
+        'SD' => __( 'South Dakota', 'invoicing' ),
1512
+        'TN' => __( 'Tennessee', 'invoicing' ),
1513
+        'TX' => __( 'Texas', 'invoicing' ),
1514
+        'UT' => __( 'Utah', 'invoicing' ),
1515
+        'VT' => __( 'Vermont', 'invoicing' ),
1516
+        'VA' => __( 'Virginia', 'invoicing' ),
1517
+        'WA' => __( 'Washington', 'invoicing' ),
1518
+        'WV' => __( 'West Virginia', 'invoicing' ),
1519
+        'WI' => __( 'Wisconsin', 'invoicing' ),
1520
+        'WY' => __( 'Wyoming', 'invoicing' ),
1521
+        'AA' => __( 'Armed Forces (AA)', 'invoicing' ),
1522
+        'AE' => __( 'Armed Forces (AE)', 'invoicing' ),
1523
+        'AP' => __( 'Armed Forces (AP)', 'invoicing' ),
1524
+    ),
1525
+    'VN' => array(),
1526
+    'YT' => array(),
1527
+    'ZA' => array( // South African states.
1528
+        'EC'  => __( 'Eastern Cape', 'invoicing' ),
1529
+        'FS'  => __( 'Free State', 'invoicing' ),
1530
+        'GP'  => __( 'Gauteng', 'invoicing' ),
1531
+        'KZN' => __( 'KwaZulu-Natal', 'invoicing' ),
1532
+        'LP'  => __( 'Limpopo', 'invoicing' ),
1533
+        'MP'  => __( 'Mpumalanga', 'invoicing' ),
1534
+        'NC'  => __( 'Northern Cape', 'invoicing' ),
1535
+        'NW'  => __( 'North West', 'invoicing' ),
1536
+        'WC'  => __( 'Western Cape', 'invoicing' ),
1537
+    ),
1538
+    'ZM' => array( // Zambia's Provinces. Ref: https://en.wikipedia.org/wiki/ISO_3166-2:ZM.
1539
+        'ZM-01' => __( 'Western', 'invoicing' ),
1540
+        'ZM-02' => __( 'Central', 'invoicing' ),
1541
+        'ZM-03' => __( 'Eastern', 'invoicing' ),
1542
+        'ZM-04' => __( 'Luapula', 'invoicing' ),
1543
+        'ZM-05' => __( 'Northern', 'invoicing' ),
1544
+        'ZM-06' => __( 'North-Western', 'invoicing' ),
1545
+        'ZM-07' => __( 'Southern', 'invoicing' ),
1546
+        'ZM-08' => __( 'Copperbelt', 'invoicing' ),
1547
+        'ZM-09' => __( 'Lusaka', 'invoicing' ),
1548
+        'ZM-10' => __( 'Muchinga', 'invoicing' ),
1549
+    ),
1550 1550
 );
Please login to merge, or discard this patch.
Spacing   +1405 added lines, -1405 removed lines patch added patch discarded remove patch
@@ -11,632 +11,632 @@  discard block
 block discarded – undo
11 11
  * @version 1.0.14
12 12
  */
13 13
 
14
-defined( 'ABSPATH' ) || exit;
14
+defined('ABSPATH') || exit;
15 15
 
16 16
 return array(
17 17
 	'AF' => array(),
18 18
 	'AO' => array( // Angola states.
19
-		'BGO' => __( 'Bengo', 'invoicing' ),
20
-		'BLU' => __( 'Benguela', 'invoicing' ),
21
-		'BIE' => __( 'Bié', 'invoicing' ),
22
-		'CAB' => __( 'Cabinda', 'invoicing' ),
23
-		'CNN' => __( 'Cunene', 'invoicing' ),
24
-		'HUA' => __( 'Huambo', 'invoicing' ),
25
-		'HUI' => __( 'Huíla', 'invoicing' ),
26
-		'CCU' => __( 'Kuando Kubango', 'invoicing' ),
27
-		'CNO' => __( 'Kwanza-Norte', 'invoicing' ),
28
-		'CUS' => __( 'Kwanza-Sul', 'invoicing' ),
29
-		'LUA' => __( 'Luanda', 'invoicing' ),
30
-		'LNO' => __( 'Lunda-Norte', 'invoicing' ),
31
-		'LSU' => __( 'Lunda-Sul', 'invoicing' ),
32
-		'MAL' => __( 'Malanje', 'invoicing' ),
33
-		'MOX' => __( 'Moxico', 'invoicing' ),
34
-		'NAM' => __( 'Namibe', 'invoicing' ),
35
-		'UIG' => __( 'Uíge', 'invoicing' ),
36
-		'ZAI' => __( 'Zaire', 'invoicing' ),
19
+		'BGO' => __('Bengo', 'invoicing'),
20
+		'BLU' => __('Benguela', 'invoicing'),
21
+		'BIE' => __('Bié', 'invoicing'),
22
+		'CAB' => __('Cabinda', 'invoicing'),
23
+		'CNN' => __('Cunene', 'invoicing'),
24
+		'HUA' => __('Huambo', 'invoicing'),
25
+		'HUI' => __('Huíla', 'invoicing'),
26
+		'CCU' => __('Kuando Kubango', 'invoicing'),
27
+		'CNO' => __('Kwanza-Norte', 'invoicing'),
28
+		'CUS' => __('Kwanza-Sul', 'invoicing'),
29
+		'LUA' => __('Luanda', 'invoicing'),
30
+		'LNO' => __('Lunda-Norte', 'invoicing'),
31
+		'LSU' => __('Lunda-Sul', 'invoicing'),
32
+		'MAL' => __('Malanje', 'invoicing'),
33
+		'MOX' => __('Moxico', 'invoicing'),
34
+		'NAM' => __('Namibe', 'invoicing'),
35
+		'UIG' => __('Uíge', 'invoicing'),
36
+		'ZAI' => __('Zaire', 'invoicing'),
37 37
 	),
38 38
 	'AR' => array( // Argentinian provinces.
39
-		'C' => __( 'Ciudad Aut&oacute;noma de Buenos Aires', 'invoicing' ),
40
-		'B' => __( 'Buenos Aires', 'invoicing' ),
41
-		'K' => __( 'Catamarca', 'invoicing' ),
42
-		'H' => __( 'Chaco', 'invoicing' ),
43
-		'U' => __( 'Chubut', 'invoicing' ),
44
-		'X' => __( 'C&oacute;rdoba', 'invoicing' ),
45
-		'W' => __( 'Corrientes', 'invoicing' ),
46
-		'E' => __( 'Entre R&iacute;os', 'invoicing' ),
47
-		'P' => __( 'Formosa', 'invoicing' ),
48
-		'Y' => __( 'Jujuy', 'invoicing' ),
49
-		'L' => __( 'La Pampa', 'invoicing' ),
50
-		'F' => __( 'La Rioja', 'invoicing' ),
51
-		'M' => __( 'Mendoza', 'invoicing' ),
52
-		'N' => __( 'Misiones', 'invoicing' ),
53
-		'Q' => __( 'Neuqu&eacute;n', 'invoicing' ),
54
-		'R' => __( 'R&iacute;o Negro', 'invoicing' ),
55
-		'A' => __( 'Salta', 'invoicing' ),
56
-		'J' => __( 'San Juan', 'invoicing' ),
57
-		'D' => __( 'San Luis', 'invoicing' ),
58
-		'Z' => __( 'Santa Cruz', 'invoicing' ),
59
-		'S' => __( 'Santa Fe', 'invoicing' ),
60
-		'G' => __( 'Santiago del Estero', 'invoicing' ),
61
-		'V' => __( 'Tierra del Fuego', 'invoicing' ),
62
-		'T' => __( 'Tucum&aacute;n', 'invoicing' ),
39
+		'C' => __('Ciudad Aut&oacute;noma de Buenos Aires', 'invoicing'),
40
+		'B' => __('Buenos Aires', 'invoicing'),
41
+		'K' => __('Catamarca', 'invoicing'),
42
+		'H' => __('Chaco', 'invoicing'),
43
+		'U' => __('Chubut', 'invoicing'),
44
+		'X' => __('C&oacute;rdoba', 'invoicing'),
45
+		'W' => __('Corrientes', 'invoicing'),
46
+		'E' => __('Entre R&iacute;os', 'invoicing'),
47
+		'P' => __('Formosa', 'invoicing'),
48
+		'Y' => __('Jujuy', 'invoicing'),
49
+		'L' => __('La Pampa', 'invoicing'),
50
+		'F' => __('La Rioja', 'invoicing'),
51
+		'M' => __('Mendoza', 'invoicing'),
52
+		'N' => __('Misiones', 'invoicing'),
53
+		'Q' => __('Neuqu&eacute;n', 'invoicing'),
54
+		'R' => __('R&iacute;o Negro', 'invoicing'),
55
+		'A' => __('Salta', 'invoicing'),
56
+		'J' => __('San Juan', 'invoicing'),
57
+		'D' => __('San Luis', 'invoicing'),
58
+		'Z' => __('Santa Cruz', 'invoicing'),
59
+		'S' => __('Santa Fe', 'invoicing'),
60
+		'G' => __('Santiago del Estero', 'invoicing'),
61
+		'V' => __('Tierra del Fuego', 'invoicing'),
62
+		'T' => __('Tucum&aacute;n', 'invoicing'),
63 63
 	),
64 64
 	'AT' => array(),
65 65
 	'AU' => array( // Australian states.
66
-		'ACT' => __( 'Australian Capital Territory', 'invoicing' ),
67
-		'NSW' => __( 'New South Wales', 'invoicing' ),
68
-		'NT'  => __( 'Northern Territory', 'invoicing' ),
69
-		'QLD' => __( 'Queensland', 'invoicing' ),
70
-		'SA'  => __( 'South Australia', 'invoicing' ),
71
-		'TAS' => __( 'Tasmania', 'invoicing' ),
72
-		'VIC' => __( 'Victoria', 'invoicing' ),
73
-		'WA'  => __( 'Western Australia', 'invoicing' ),
66
+		'ACT' => __('Australian Capital Territory', 'invoicing'),
67
+		'NSW' => __('New South Wales', 'invoicing'),
68
+		'NT'  => __('Northern Territory', 'invoicing'),
69
+		'QLD' => __('Queensland', 'invoicing'),
70
+		'SA'  => __('South Australia', 'invoicing'),
71
+		'TAS' => __('Tasmania', 'invoicing'),
72
+		'VIC' => __('Victoria', 'invoicing'),
73
+		'WA'  => __('Western Australia', 'invoicing'),
74 74
 	),
75 75
 	'AX' => array(),
76 76
 	'BD' => array( // Bangladeshi states (districts).
77
-		'BD-05' => __( 'Bagerhat', 'invoicing' ),
78
-		'BD-01' => __( 'Bandarban', 'invoicing' ),
79
-		'BD-02' => __( 'Barguna', 'invoicing' ),
80
-		'BD-06' => __( 'Barishal', 'invoicing' ),
81
-		'BD-07' => __( 'Bhola', 'invoicing' ),
82
-		'BD-03' => __( 'Bogura', 'invoicing' ),
83
-		'BD-04' => __( 'Brahmanbaria', 'invoicing' ),
84
-		'BD-09' => __( 'Chandpur', 'invoicing' ),
85
-		'BD-10' => __( 'Chattogram', 'invoicing' ),
86
-		'BD-12' => __( 'Chuadanga', 'invoicing' ),
87
-		'BD-11' => __( "Cox's Bazar", 'invoicing' ),
88
-		'BD-08' => __( 'Cumilla', 'invoicing' ),
89
-		'BD-13' => __( 'Dhaka', 'invoicing' ),
90
-		'BD-14' => __( 'Dinajpur', 'invoicing' ),
91
-		'BD-15' => __( 'Faridpur ', 'invoicing' ),
92
-		'BD-16' => __( 'Feni', 'invoicing' ),
93
-		'BD-19' => __( 'Gaibandha', 'invoicing' ),
94
-		'BD-18' => __( 'Gazipur', 'invoicing' ),
95
-		'BD-17' => __( 'Gopalganj', 'invoicing' ),
96
-		'BD-20' => __( 'Habiganj', 'invoicing' ),
97
-		'BD-21' => __( 'Jamalpur', 'invoicing' ),
98
-		'BD-22' => __( 'Jashore', 'invoicing' ),
99
-		'BD-25' => __( 'Jhalokati', 'invoicing' ),
100
-		'BD-23' => __( 'Jhenaidah', 'invoicing' ),
101
-		'BD-24' => __( 'Joypurhat', 'invoicing' ),
102
-		'BD-29' => __( 'Khagrachhari', 'invoicing' ),
103
-		'BD-27' => __( 'Khulna', 'invoicing' ),
104
-		'BD-26' => __( 'Kishoreganj', 'invoicing' ),
105
-		'BD-28' => __( 'Kurigram', 'invoicing' ),
106
-		'BD-30' => __( 'Kushtia', 'invoicing' ),
107
-		'BD-31' => __( 'Lakshmipur', 'invoicing' ),
108
-		'BD-32' => __( 'Lalmonirhat', 'invoicing' ),
109
-		'BD-36' => __( 'Madaripur', 'invoicing' ),
110
-		'BD-37' => __( 'Magura', 'invoicing' ),
111
-		'BD-33' => __( 'Manikganj ', 'invoicing' ),
112
-		'BD-39' => __( 'Meherpur', 'invoicing' ),
113
-		'BD-38' => __( 'Moulvibazar', 'invoicing' ),
114
-		'BD-35' => __( 'Munshiganj', 'invoicing' ),
115
-		'BD-34' => __( 'Mymensingh', 'invoicing' ),
116
-		'BD-48' => __( 'Naogaon', 'invoicing' ),
117
-		'BD-43' => __( 'Narail', 'invoicing' ),
118
-		'BD-40' => __( 'Narayanganj', 'invoicing' ),
119
-		'BD-42' => __( 'Narsingdi', 'invoicing' ),
120
-		'BD-44' => __( 'Natore', 'invoicing' ),
121
-		'BD-45' => __( 'Nawabganj', 'invoicing' ),
122
-		'BD-41' => __( 'Netrakona', 'invoicing' ),
123
-		'BD-46' => __( 'Nilphamari', 'invoicing' ),
124
-		'BD-47' => __( 'Noakhali', 'invoicing' ),
125
-		'BD-49' => __( 'Pabna', 'invoicing' ),
126
-		'BD-52' => __( 'Panchagarh', 'invoicing' ),
127
-		'BD-51' => __( 'Patuakhali', 'invoicing' ),
128
-		'BD-50' => __( 'Pirojpur', 'invoicing' ),
129
-		'BD-53' => __( 'Rajbari', 'invoicing' ),
130
-		'BD-54' => __( 'Rajshahi', 'invoicing' ),
131
-		'BD-56' => __( 'Rangamati', 'invoicing' ),
132
-		'BD-55' => __( 'Rangpur', 'invoicing' ),
133
-		'BD-58' => __( 'Satkhira', 'invoicing' ),
134
-		'BD-62' => __( 'Shariatpur', 'invoicing' ),
135
-		'BD-57' => __( 'Sherpur', 'invoicing' ),
136
-		'BD-59' => __( 'Sirajganj', 'invoicing' ),
137
-		'BD-61' => __( 'Sunamganj', 'invoicing' ),
138
-		'BD-60' => __( 'Sylhet', 'invoicing' ),
139
-		'BD-63' => __( 'Tangail', 'invoicing' ),
140
-		'BD-64' => __( 'Thakurgaon', 'invoicing' ),
77
+		'BD-05' => __('Bagerhat', 'invoicing'),
78
+		'BD-01' => __('Bandarban', 'invoicing'),
79
+		'BD-02' => __('Barguna', 'invoicing'),
80
+		'BD-06' => __('Barishal', 'invoicing'),
81
+		'BD-07' => __('Bhola', 'invoicing'),
82
+		'BD-03' => __('Bogura', 'invoicing'),
83
+		'BD-04' => __('Brahmanbaria', 'invoicing'),
84
+		'BD-09' => __('Chandpur', 'invoicing'),
85
+		'BD-10' => __('Chattogram', 'invoicing'),
86
+		'BD-12' => __('Chuadanga', 'invoicing'),
87
+		'BD-11' => __("Cox's Bazar", 'invoicing'),
88
+		'BD-08' => __('Cumilla', 'invoicing'),
89
+		'BD-13' => __('Dhaka', 'invoicing'),
90
+		'BD-14' => __('Dinajpur', 'invoicing'),
91
+		'BD-15' => __('Faridpur ', 'invoicing'),
92
+		'BD-16' => __('Feni', 'invoicing'),
93
+		'BD-19' => __('Gaibandha', 'invoicing'),
94
+		'BD-18' => __('Gazipur', 'invoicing'),
95
+		'BD-17' => __('Gopalganj', 'invoicing'),
96
+		'BD-20' => __('Habiganj', 'invoicing'),
97
+		'BD-21' => __('Jamalpur', 'invoicing'),
98
+		'BD-22' => __('Jashore', 'invoicing'),
99
+		'BD-25' => __('Jhalokati', 'invoicing'),
100
+		'BD-23' => __('Jhenaidah', 'invoicing'),
101
+		'BD-24' => __('Joypurhat', 'invoicing'),
102
+		'BD-29' => __('Khagrachhari', 'invoicing'),
103
+		'BD-27' => __('Khulna', 'invoicing'),
104
+		'BD-26' => __('Kishoreganj', 'invoicing'),
105
+		'BD-28' => __('Kurigram', 'invoicing'),
106
+		'BD-30' => __('Kushtia', 'invoicing'),
107
+		'BD-31' => __('Lakshmipur', 'invoicing'),
108
+		'BD-32' => __('Lalmonirhat', 'invoicing'),
109
+		'BD-36' => __('Madaripur', 'invoicing'),
110
+		'BD-37' => __('Magura', 'invoicing'),
111
+		'BD-33' => __('Manikganj ', 'invoicing'),
112
+		'BD-39' => __('Meherpur', 'invoicing'),
113
+		'BD-38' => __('Moulvibazar', 'invoicing'),
114
+		'BD-35' => __('Munshiganj', 'invoicing'),
115
+		'BD-34' => __('Mymensingh', 'invoicing'),
116
+		'BD-48' => __('Naogaon', 'invoicing'),
117
+		'BD-43' => __('Narail', 'invoicing'),
118
+		'BD-40' => __('Narayanganj', 'invoicing'),
119
+		'BD-42' => __('Narsingdi', 'invoicing'),
120
+		'BD-44' => __('Natore', 'invoicing'),
121
+		'BD-45' => __('Nawabganj', 'invoicing'),
122
+		'BD-41' => __('Netrakona', 'invoicing'),
123
+		'BD-46' => __('Nilphamari', 'invoicing'),
124
+		'BD-47' => __('Noakhali', 'invoicing'),
125
+		'BD-49' => __('Pabna', 'invoicing'),
126
+		'BD-52' => __('Panchagarh', 'invoicing'),
127
+		'BD-51' => __('Patuakhali', 'invoicing'),
128
+		'BD-50' => __('Pirojpur', 'invoicing'),
129
+		'BD-53' => __('Rajbari', 'invoicing'),
130
+		'BD-54' => __('Rajshahi', 'invoicing'),
131
+		'BD-56' => __('Rangamati', 'invoicing'),
132
+		'BD-55' => __('Rangpur', 'invoicing'),
133
+		'BD-58' => __('Satkhira', 'invoicing'),
134
+		'BD-62' => __('Shariatpur', 'invoicing'),
135
+		'BD-57' => __('Sherpur', 'invoicing'),
136
+		'BD-59' => __('Sirajganj', 'invoicing'),
137
+		'BD-61' => __('Sunamganj', 'invoicing'),
138
+		'BD-60' => __('Sylhet', 'invoicing'),
139
+		'BD-63' => __('Tangail', 'invoicing'),
140
+		'BD-64' => __('Thakurgaon', 'invoicing'),
141 141
 	),
142 142
 	'BE' => array(),
143 143
 	'BG' => array( // Bulgarian states.
144
-		'BG-01' => __( 'Blagoevgrad', 'invoicing' ),
145
-		'BG-02' => __( 'Burgas', 'invoicing' ),
146
-		'BG-08' => __( 'Dobrich', 'invoicing' ),
147
-		'BG-07' => __( 'Gabrovo', 'invoicing' ),
148
-		'BG-26' => __( 'Haskovo', 'invoicing' ),
149
-		'BG-09' => __( 'Kardzhali', 'invoicing' ),
150
-		'BG-10' => __( 'Kyustendil', 'invoicing' ),
151
-		'BG-11' => __( 'Lovech', 'invoicing' ),
152
-		'BG-12' => __( 'Montana', 'invoicing' ),
153
-		'BG-13' => __( 'Pazardzhik', 'invoicing' ),
154
-		'BG-14' => __( 'Pernik', 'invoicing' ),
155
-		'BG-15' => __( 'Pleven', 'invoicing' ),
156
-		'BG-16' => __( 'Plovdiv', 'invoicing' ),
157
-		'BG-17' => __( 'Razgrad', 'invoicing' ),
158
-		'BG-18' => __( 'Ruse', 'invoicing' ),
159
-		'BG-27' => __( 'Shumen', 'invoicing' ),
160
-		'BG-19' => __( 'Silistra', 'invoicing' ),
161
-		'BG-20' => __( 'Sliven', 'invoicing' ),
162
-		'BG-21' => __( 'Smolyan', 'invoicing' ),
163
-		'BG-23' => __( 'Sofia', 'invoicing' ),
164
-		'BG-22' => __( 'Sofia-Grad', 'invoicing' ),
165
-		'BG-24' => __( 'Stara Zagora', 'invoicing' ),
166
-		'BG-25' => __( 'Targovishte', 'invoicing' ),
167
-		'BG-03' => __( 'Varna', 'invoicing' ),
168
-		'BG-04' => __( 'Veliko Tarnovo', 'invoicing' ),
169
-		'BG-05' => __( 'Vidin', 'invoicing' ),
170
-		'BG-06' => __( 'Vratsa', 'invoicing' ),
171
-		'BG-28' => __( 'Yambol', 'invoicing' ),
144
+		'BG-01' => __('Blagoevgrad', 'invoicing'),
145
+		'BG-02' => __('Burgas', 'invoicing'),
146
+		'BG-08' => __('Dobrich', 'invoicing'),
147
+		'BG-07' => __('Gabrovo', 'invoicing'),
148
+		'BG-26' => __('Haskovo', 'invoicing'),
149
+		'BG-09' => __('Kardzhali', 'invoicing'),
150
+		'BG-10' => __('Kyustendil', 'invoicing'),
151
+		'BG-11' => __('Lovech', 'invoicing'),
152
+		'BG-12' => __('Montana', 'invoicing'),
153
+		'BG-13' => __('Pazardzhik', 'invoicing'),
154
+		'BG-14' => __('Pernik', 'invoicing'),
155
+		'BG-15' => __('Pleven', 'invoicing'),
156
+		'BG-16' => __('Plovdiv', 'invoicing'),
157
+		'BG-17' => __('Razgrad', 'invoicing'),
158
+		'BG-18' => __('Ruse', 'invoicing'),
159
+		'BG-27' => __('Shumen', 'invoicing'),
160
+		'BG-19' => __('Silistra', 'invoicing'),
161
+		'BG-20' => __('Sliven', 'invoicing'),
162
+		'BG-21' => __('Smolyan', 'invoicing'),
163
+		'BG-23' => __('Sofia', 'invoicing'),
164
+		'BG-22' => __('Sofia-Grad', 'invoicing'),
165
+		'BG-24' => __('Stara Zagora', 'invoicing'),
166
+		'BG-25' => __('Targovishte', 'invoicing'),
167
+		'BG-03' => __('Varna', 'invoicing'),
168
+		'BG-04' => __('Veliko Tarnovo', 'invoicing'),
169
+		'BG-05' => __('Vidin', 'invoicing'),
170
+		'BG-06' => __('Vratsa', 'invoicing'),
171
+		'BG-28' => __('Yambol', 'invoicing'),
172 172
 	),
173 173
 	'BH' => array(),
174 174
 	'BI' => array(),
175 175
 	'BO' => array( // Bolivian states.
176
-		'B' => __( 'Chuquisaca', 'invoicing' ),
177
-		'H' => __( 'Beni', 'invoicing' ),
178
-		'C' => __( 'Cochabamba', 'invoicing' ),
179
-		'L' => __( 'La Paz', 'invoicing' ),
180
-		'O' => __( 'Oruro', 'invoicing' ),
181
-		'N' => __( 'Pando', 'invoicing' ),
182
-		'P' => __( 'Potosí', 'invoicing' ),
183
-		'S' => __( 'Santa Cruz', 'invoicing' ),
184
-		'T' => __( 'Tarija', 'invoicing' ),
176
+		'B' => __('Chuquisaca', 'invoicing'),
177
+		'H' => __('Beni', 'invoicing'),
178
+		'C' => __('Cochabamba', 'invoicing'),
179
+		'L' => __('La Paz', 'invoicing'),
180
+		'O' => __('Oruro', 'invoicing'),
181
+		'N' => __('Pando', 'invoicing'),
182
+		'P' => __('Potosí', 'invoicing'),
183
+		'S' => __('Santa Cruz', 'invoicing'),
184
+		'T' => __('Tarija', 'invoicing'),
185 185
 	),
186 186
 	'BR' => array( // Brazillian states.
187
-		'AC' => __( 'Acre', 'invoicing' ),
188
-		'AL' => __( 'Alagoas', 'invoicing' ),
189
-		'AP' => __( 'Amap&aacute;', 'invoicing' ),
190
-		'AM' => __( 'Amazonas', 'invoicing' ),
191
-		'BA' => __( 'Bahia', 'invoicing' ),
192
-		'CE' => __( 'Cear&aacute;', 'invoicing' ),
193
-		'DF' => __( 'Distrito Federal', 'invoicing' ),
194
-		'ES' => __( 'Esp&iacute;rito Santo', 'invoicing' ),
195
-		'GO' => __( 'Goi&aacute;s', 'invoicing' ),
196
-		'MA' => __( 'Maranh&atilde;o', 'invoicing' ),
197
-		'MT' => __( 'Mato Grosso', 'invoicing' ),
198
-		'MS' => __( 'Mato Grosso do Sul', 'invoicing' ),
199
-		'MG' => __( 'Minas Gerais', 'invoicing' ),
200
-		'PA' => __( 'Par&aacute;', 'invoicing' ),
201
-		'PB' => __( 'Para&iacute;ba', 'invoicing' ),
202
-		'PR' => __( 'Paran&aacute;', 'invoicing' ),
203
-		'PE' => __( 'Pernambuco', 'invoicing' ),
204
-		'PI' => __( 'Piau&iacute;', 'invoicing' ),
205
-		'RJ' => __( 'Rio de Janeiro', 'invoicing' ),
206
-		'RN' => __( 'Rio Grande do Norte', 'invoicing' ),
207
-		'RS' => __( 'Rio Grande do Sul', 'invoicing' ),
208
-		'RO' => __( 'Rond&ocirc;nia', 'invoicing' ),
209
-		'RR' => __( 'Roraima', 'invoicing' ),
210
-		'SC' => __( 'Santa Catarina', 'invoicing' ),
211
-		'SP' => __( 'S&atilde;o Paulo', 'invoicing' ),
212
-		'SE' => __( 'Sergipe', 'invoicing' ),
213
-		'TO' => __( 'Tocantins', 'invoicing' ),
187
+		'AC' => __('Acre', 'invoicing'),
188
+		'AL' => __('Alagoas', 'invoicing'),
189
+		'AP' => __('Amap&aacute;', 'invoicing'),
190
+		'AM' => __('Amazonas', 'invoicing'),
191
+		'BA' => __('Bahia', 'invoicing'),
192
+		'CE' => __('Cear&aacute;', 'invoicing'),
193
+		'DF' => __('Distrito Federal', 'invoicing'),
194
+		'ES' => __('Esp&iacute;rito Santo', 'invoicing'),
195
+		'GO' => __('Goi&aacute;s', 'invoicing'),
196
+		'MA' => __('Maranh&atilde;o', 'invoicing'),
197
+		'MT' => __('Mato Grosso', 'invoicing'),
198
+		'MS' => __('Mato Grosso do Sul', 'invoicing'),
199
+		'MG' => __('Minas Gerais', 'invoicing'),
200
+		'PA' => __('Par&aacute;', 'invoicing'),
201
+		'PB' => __('Para&iacute;ba', 'invoicing'),
202
+		'PR' => __('Paran&aacute;', 'invoicing'),
203
+		'PE' => __('Pernambuco', 'invoicing'),
204
+		'PI' => __('Piau&iacute;', 'invoicing'),
205
+		'RJ' => __('Rio de Janeiro', 'invoicing'),
206
+		'RN' => __('Rio Grande do Norte', 'invoicing'),
207
+		'RS' => __('Rio Grande do Sul', 'invoicing'),
208
+		'RO' => __('Rond&ocirc;nia', 'invoicing'),
209
+		'RR' => __('Roraima', 'invoicing'),
210
+		'SC' => __('Santa Catarina', 'invoicing'),
211
+		'SP' => __('S&atilde;o Paulo', 'invoicing'),
212
+		'SE' => __('Sergipe', 'invoicing'),
213
+		'TO' => __('Tocantins', 'invoicing'),
214 214
 	),
215 215
 	'CA' => array( // Canadian states.
216
-		'AB' => __( 'Alberta', 'invoicing' ),
217
-		'BC' => __( 'British Columbia', 'invoicing' ),
218
-		'MB' => __( 'Manitoba', 'invoicing' ),
219
-		'NB' => __( 'New Brunswick', 'invoicing' ),
220
-		'NL' => __( 'Newfoundland and Labrador', 'invoicing' ),
221
-		'NT' => __( 'Northwest Territories', 'invoicing' ),
222
-		'NS' => __( 'Nova Scotia', 'invoicing' ),
223
-		'NU' => __( 'Nunavut', 'invoicing' ),
224
-		'ON' => __( 'Ontario', 'invoicing' ),
225
-		'PE' => __( 'Prince Edward Island', 'invoicing' ),
226
-		'QC' => __( 'Quebec', 'invoicing' ),
227
-		'SK' => __( 'Saskatchewan', 'invoicing' ),
228
-		'YT' => __( 'Yukon Territory', 'invoicing' ),
216
+		'AB' => __('Alberta', 'invoicing'),
217
+		'BC' => __('British Columbia', 'invoicing'),
218
+		'MB' => __('Manitoba', 'invoicing'),
219
+		'NB' => __('New Brunswick', 'invoicing'),
220
+		'NL' => __('Newfoundland and Labrador', 'invoicing'),
221
+		'NT' => __('Northwest Territories', 'invoicing'),
222
+		'NS' => __('Nova Scotia', 'invoicing'),
223
+		'NU' => __('Nunavut', 'invoicing'),
224
+		'ON' => __('Ontario', 'invoicing'),
225
+		'PE' => __('Prince Edward Island', 'invoicing'),
226
+		'QC' => __('Quebec', 'invoicing'),
227
+		'SK' => __('Saskatchewan', 'invoicing'),
228
+		'YT' => __('Yukon Territory', 'invoicing'),
229 229
 	),
230 230
 	'CH' => array( // Cantons of Switzerland.
231
-		'AG' => __( 'Aargau', 'invoicing' ),
232
-		'AR' => __( 'Appenzell Ausserrhoden', 'invoicing' ),
233
-		'AI' => __( 'Appenzell Innerrhoden', 'invoicing' ),
234
-		'BL' => __( 'Basel-Landschaft', 'invoicing' ),
235
-		'BS' => __( 'Basel-Stadt', 'invoicing' ),
236
-		'BE' => __( 'Bern', 'invoicing' ),
237
-		'FR' => __( 'Fribourg', 'invoicing' ),
238
-		'GE' => __( 'Geneva', 'invoicing' ),
239
-		'GL' => __( 'Glarus', 'invoicing' ),
240
-		'GR' => __( 'Graub&uuml;nden', 'invoicing' ),
241
-		'JU' => __( 'Jura', 'invoicing' ),
242
-		'LU' => __( 'Luzern', 'invoicing' ),
243
-		'NE' => __( 'Neuch&acirc;tel', 'invoicing' ),
244
-		'NW' => __( 'Nidwalden', 'invoicing' ),
245
-		'OW' => __( 'Obwalden', 'invoicing' ),
246
-		'SH' => __( 'Schaffhausen', 'invoicing' ),
247
-		'SZ' => __( 'Schwyz', 'invoicing' ),
248
-		'SO' => __( 'Solothurn', 'invoicing' ),
249
-		'SG' => __( 'St. Gallen', 'invoicing' ),
250
-		'TG' => __( 'Thurgau', 'invoicing' ),
251
-		'TI' => __( 'Ticino', 'invoicing' ),
252
-		'UR' => __( 'Uri', 'invoicing' ),
253
-		'VS' => __( 'Valais', 'invoicing' ),
254
-		'VD' => __( 'Vaud', 'invoicing' ),
255
-		'ZG' => __( 'Zug', 'invoicing' ),
256
-		'ZH' => __( 'Z&uuml;rich', 'invoicing' ),
231
+		'AG' => __('Aargau', 'invoicing'),
232
+		'AR' => __('Appenzell Ausserrhoden', 'invoicing'),
233
+		'AI' => __('Appenzell Innerrhoden', 'invoicing'),
234
+		'BL' => __('Basel-Landschaft', 'invoicing'),
235
+		'BS' => __('Basel-Stadt', 'invoicing'),
236
+		'BE' => __('Bern', 'invoicing'),
237
+		'FR' => __('Fribourg', 'invoicing'),
238
+		'GE' => __('Geneva', 'invoicing'),
239
+		'GL' => __('Glarus', 'invoicing'),
240
+		'GR' => __('Graub&uuml;nden', 'invoicing'),
241
+		'JU' => __('Jura', 'invoicing'),
242
+		'LU' => __('Luzern', 'invoicing'),
243
+		'NE' => __('Neuch&acirc;tel', 'invoicing'),
244
+		'NW' => __('Nidwalden', 'invoicing'),
245
+		'OW' => __('Obwalden', 'invoicing'),
246
+		'SH' => __('Schaffhausen', 'invoicing'),
247
+		'SZ' => __('Schwyz', 'invoicing'),
248
+		'SO' => __('Solothurn', 'invoicing'),
249
+		'SG' => __('St. Gallen', 'invoicing'),
250
+		'TG' => __('Thurgau', 'invoicing'),
251
+		'TI' => __('Ticino', 'invoicing'),
252
+		'UR' => __('Uri', 'invoicing'),
253
+		'VS' => __('Valais', 'invoicing'),
254
+		'VD' => __('Vaud', 'invoicing'),
255
+		'ZG' => __('Zug', 'invoicing'),
256
+		'ZH' => __('Z&uuml;rich', 'invoicing'),
257 257
 	),
258 258
 	'CN' => array( // Chinese states.
259
-		'CN1'  => __( 'Yunnan / &#20113;&#21335;', 'invoicing' ),
260
-		'CN2'  => __( 'Beijing / &#21271;&#20140;', 'invoicing' ),
261
-		'CN3'  => __( 'Tianjin / &#22825;&#27941;', 'invoicing' ),
262
-		'CN4'  => __( 'Hebei / &#27827;&#21271;', 'invoicing' ),
263
-		'CN5'  => __( 'Shanxi / &#23665;&#35199;', 'invoicing' ),
264
-		'CN6'  => __( 'Inner Mongolia / &#20839;&#33945;&#21476;', 'invoicing' ),
265
-		'CN7'  => __( 'Liaoning / &#36797;&#23425;', 'invoicing' ),
266
-		'CN8'  => __( 'Jilin / &#21513;&#26519;', 'invoicing' ),
267
-		'CN9'  => __( 'Heilongjiang / &#40657;&#40857;&#27743;', 'invoicing' ),
268
-		'CN10' => __( 'Shanghai / &#19978;&#28023;', 'invoicing' ),
269
-		'CN11' => __( 'Jiangsu / &#27743;&#33487;', 'invoicing' ),
270
-		'CN12' => __( 'Zhejiang / &#27993;&#27743;', 'invoicing' ),
271
-		'CN13' => __( 'Anhui / &#23433;&#24509;', 'invoicing' ),
272
-		'CN14' => __( 'Fujian / &#31119;&#24314;', 'invoicing' ),
273
-		'CN15' => __( 'Jiangxi / &#27743;&#35199;', 'invoicing' ),
274
-		'CN16' => __( 'Shandong / &#23665;&#19996;', 'invoicing' ),
275
-		'CN17' => __( 'Henan / &#27827;&#21335;', 'invoicing' ),
276
-		'CN18' => __( 'Hubei / &#28246;&#21271;', 'invoicing' ),
277
-		'CN19' => __( 'Hunan / &#28246;&#21335;', 'invoicing' ),
278
-		'CN20' => __( 'Guangdong / &#24191;&#19996;', 'invoicing' ),
279
-		'CN21' => __( 'Guangxi Zhuang / &#24191;&#35199;&#22766;&#26063;', 'invoicing' ),
280
-		'CN22' => __( 'Hainan / &#28023;&#21335;', 'invoicing' ),
281
-		'CN23' => __( 'Chongqing / &#37325;&#24198;', 'invoicing' ),
282
-		'CN24' => __( 'Sichuan / &#22235;&#24029;', 'invoicing' ),
283
-		'CN25' => __( 'Guizhou / &#36149;&#24030;', 'invoicing' ),
284
-		'CN26' => __( 'Shaanxi / &#38485;&#35199;', 'invoicing' ),
285
-		'CN27' => __( 'Gansu / &#29976;&#32899;', 'invoicing' ),
286
-		'CN28' => __( 'Qinghai / &#38738;&#28023;', 'invoicing' ),
287
-		'CN29' => __( 'Ningxia Hui / &#23425;&#22799;', 'invoicing' ),
288
-		'CN30' => __( 'Macao / &#28595;&#38376;', 'invoicing' ),
289
-		'CN31' => __( 'Tibet / &#35199;&#34255;', 'invoicing' ),
290
-		'CN32' => __( 'Xinjiang / &#26032;&#30086;', 'invoicing' ),
259
+		'CN1'  => __('Yunnan / &#20113;&#21335;', 'invoicing'),
260
+		'CN2'  => __('Beijing / &#21271;&#20140;', 'invoicing'),
261
+		'CN3'  => __('Tianjin / &#22825;&#27941;', 'invoicing'),
262
+		'CN4'  => __('Hebei / &#27827;&#21271;', 'invoicing'),
263
+		'CN5'  => __('Shanxi / &#23665;&#35199;', 'invoicing'),
264
+		'CN6'  => __('Inner Mongolia / &#20839;&#33945;&#21476;', 'invoicing'),
265
+		'CN7'  => __('Liaoning / &#36797;&#23425;', 'invoicing'),
266
+		'CN8'  => __('Jilin / &#21513;&#26519;', 'invoicing'),
267
+		'CN9'  => __('Heilongjiang / &#40657;&#40857;&#27743;', 'invoicing'),
268
+		'CN10' => __('Shanghai / &#19978;&#28023;', 'invoicing'),
269
+		'CN11' => __('Jiangsu / &#27743;&#33487;', 'invoicing'),
270
+		'CN12' => __('Zhejiang / &#27993;&#27743;', 'invoicing'),
271
+		'CN13' => __('Anhui / &#23433;&#24509;', 'invoicing'),
272
+		'CN14' => __('Fujian / &#31119;&#24314;', 'invoicing'),
273
+		'CN15' => __('Jiangxi / &#27743;&#35199;', 'invoicing'),
274
+		'CN16' => __('Shandong / &#23665;&#19996;', 'invoicing'),
275
+		'CN17' => __('Henan / &#27827;&#21335;', 'invoicing'),
276
+		'CN18' => __('Hubei / &#28246;&#21271;', 'invoicing'),
277
+		'CN19' => __('Hunan / &#28246;&#21335;', 'invoicing'),
278
+		'CN20' => __('Guangdong / &#24191;&#19996;', 'invoicing'),
279
+		'CN21' => __('Guangxi Zhuang / &#24191;&#35199;&#22766;&#26063;', 'invoicing'),
280
+		'CN22' => __('Hainan / &#28023;&#21335;', 'invoicing'),
281
+		'CN23' => __('Chongqing / &#37325;&#24198;', 'invoicing'),
282
+		'CN24' => __('Sichuan / &#22235;&#24029;', 'invoicing'),
283
+		'CN25' => __('Guizhou / &#36149;&#24030;', 'invoicing'),
284
+		'CN26' => __('Shaanxi / &#38485;&#35199;', 'invoicing'),
285
+		'CN27' => __('Gansu / &#29976;&#32899;', 'invoicing'),
286
+		'CN28' => __('Qinghai / &#38738;&#28023;', 'invoicing'),
287
+		'CN29' => __('Ningxia Hui / &#23425;&#22799;', 'invoicing'),
288
+		'CN30' => __('Macao / &#28595;&#38376;', 'invoicing'),
289
+		'CN31' => __('Tibet / &#35199;&#34255;', 'invoicing'),
290
+		'CN32' => __('Xinjiang / &#26032;&#30086;', 'invoicing'),
291 291
 	),
292 292
 	'CZ' => array(),
293 293
 	'DE' => array(),
294 294
 	'DK' => array(),
295 295
 	'EE' => array(),
296 296
 	'ES' => array( // Spanish states.
297
-		'C'  => __( 'A Coru&ntilde;a', 'invoicing' ),
298
-		'VI' => __( 'Araba/&Aacute;lava', 'invoicing' ),
299
-		'AB' => __( 'Albacete', 'invoicing' ),
300
-		'A'  => __( 'Alicante', 'invoicing' ),
301
-		'AL' => __( 'Almer&iacute;a', 'invoicing' ),
302
-		'O'  => __( 'Asturias', 'invoicing' ),
303
-		'AV' => __( '&Aacute;vila', 'invoicing' ),
304
-		'BA' => __( 'Badajoz', 'invoicing' ),
305
-		'PM' => __( 'Baleares', 'invoicing' ),
306
-		'B'  => __( 'Barcelona', 'invoicing' ),
307
-		'BU' => __( 'Burgos', 'invoicing' ),
308
-		'CC' => __( 'C&aacute;ceres', 'invoicing' ),
309
-		'CA' => __( 'C&aacute;diz', 'invoicing' ),
310
-		'S'  => __( 'Cantabria', 'invoicing' ),
311
-		'CS' => __( 'Castell&oacute;n', 'invoicing' ),
312
-		'CE' => __( 'Ceuta', 'invoicing' ),
313
-		'CR' => __( 'Ciudad Real', 'invoicing' ),
314
-		'CO' => __( 'C&oacute;rdoba', 'invoicing' ),
315
-		'CU' => __( 'Cuenca', 'invoicing' ),
316
-		'GI' => __( 'Girona', 'invoicing' ),
317
-		'GR' => __( 'Granada', 'invoicing' ),
318
-		'GU' => __( 'Guadalajara', 'invoicing' ),
319
-		'SS' => __( 'Gipuzkoa', 'invoicing' ),
320
-		'H'  => __( 'Huelva', 'invoicing' ),
321
-		'HU' => __( 'Huesca', 'invoicing' ),
322
-		'J'  => __( 'Ja&eacute;n', 'invoicing' ),
323
-		'LO' => __( 'La Rioja', 'invoicing' ),
324
-		'GC' => __( 'Las Palmas', 'invoicing' ),
325
-		'LE' => __( 'Le&oacute;n', 'invoicing' ),
326
-		'L'  => __( 'Lleida', 'invoicing' ),
327
-		'LU' => __( 'Lugo', 'invoicing' ),
328
-		'M'  => __( 'Madrid', 'invoicing' ),
329
-		'MA' => __( 'M&aacute;laga', 'invoicing' ),
330
-		'ML' => __( 'Melilla', 'invoicing' ),
331
-		'MU' => __( 'Murcia', 'invoicing' ),
332
-		'NA' => __( 'Navarra', 'invoicing' ),
333
-		'OR' => __( 'Ourense', 'invoicing' ),
334
-		'P'  => __( 'Palencia', 'invoicing' ),
335
-		'PO' => __( 'Pontevedra', 'invoicing' ),
336
-		'SA' => __( 'Salamanca', 'invoicing' ),
337
-		'TF' => __( 'Santa Cruz de Tenerife', 'invoicing' ),
338
-		'SG' => __( 'Segovia', 'invoicing' ),
339
-		'SE' => __( 'Sevilla', 'invoicing' ),
340
-		'SO' => __( 'Soria', 'invoicing' ),
341
-		'T'  => __( 'Tarragona', 'invoicing' ),
342
-		'TE' => __( 'Teruel', 'invoicing' ),
343
-		'TO' => __( 'Toledo', 'invoicing' ),
344
-		'V'  => __( 'Valencia', 'invoicing' ),
345
-		'VA' => __( 'Valladolid', 'invoicing' ),
346
-		'BI' => __( 'Bizkaia', 'invoicing' ),
347
-		'ZA' => __( 'Zamora', 'invoicing' ),
348
-		'Z'  => __( 'Zaragoza', 'invoicing' ),
297
+		'C'  => __('A Coru&ntilde;a', 'invoicing'),
298
+		'VI' => __('Araba/&Aacute;lava', 'invoicing'),
299
+		'AB' => __('Albacete', 'invoicing'),
300
+		'A'  => __('Alicante', 'invoicing'),
301
+		'AL' => __('Almer&iacute;a', 'invoicing'),
302
+		'O'  => __('Asturias', 'invoicing'),
303
+		'AV' => __('&Aacute;vila', 'invoicing'),
304
+		'BA' => __('Badajoz', 'invoicing'),
305
+		'PM' => __('Baleares', 'invoicing'),
306
+		'B'  => __('Barcelona', 'invoicing'),
307
+		'BU' => __('Burgos', 'invoicing'),
308
+		'CC' => __('C&aacute;ceres', 'invoicing'),
309
+		'CA' => __('C&aacute;diz', 'invoicing'),
310
+		'S'  => __('Cantabria', 'invoicing'),
311
+		'CS' => __('Castell&oacute;n', 'invoicing'),
312
+		'CE' => __('Ceuta', 'invoicing'),
313
+		'CR' => __('Ciudad Real', 'invoicing'),
314
+		'CO' => __('C&oacute;rdoba', 'invoicing'),
315
+		'CU' => __('Cuenca', 'invoicing'),
316
+		'GI' => __('Girona', 'invoicing'),
317
+		'GR' => __('Granada', 'invoicing'),
318
+		'GU' => __('Guadalajara', 'invoicing'),
319
+		'SS' => __('Gipuzkoa', 'invoicing'),
320
+		'H'  => __('Huelva', 'invoicing'),
321
+		'HU' => __('Huesca', 'invoicing'),
322
+		'J'  => __('Ja&eacute;n', 'invoicing'),
323
+		'LO' => __('La Rioja', 'invoicing'),
324
+		'GC' => __('Las Palmas', 'invoicing'),
325
+		'LE' => __('Le&oacute;n', 'invoicing'),
326
+		'L'  => __('Lleida', 'invoicing'),
327
+		'LU' => __('Lugo', 'invoicing'),
328
+		'M'  => __('Madrid', 'invoicing'),
329
+		'MA' => __('M&aacute;laga', 'invoicing'),
330
+		'ML' => __('Melilla', 'invoicing'),
331
+		'MU' => __('Murcia', 'invoicing'),
332
+		'NA' => __('Navarra', 'invoicing'),
333
+		'OR' => __('Ourense', 'invoicing'),
334
+		'P'  => __('Palencia', 'invoicing'),
335
+		'PO' => __('Pontevedra', 'invoicing'),
336
+		'SA' => __('Salamanca', 'invoicing'),
337
+		'TF' => __('Santa Cruz de Tenerife', 'invoicing'),
338
+		'SG' => __('Segovia', 'invoicing'),
339
+		'SE' => __('Sevilla', 'invoicing'),
340
+		'SO' => __('Soria', 'invoicing'),
341
+		'T'  => __('Tarragona', 'invoicing'),
342
+		'TE' => __('Teruel', 'invoicing'),
343
+		'TO' => __('Toledo', 'invoicing'),
344
+		'V'  => __('Valencia', 'invoicing'),
345
+		'VA' => __('Valladolid', 'invoicing'),
346
+		'BI' => __('Bizkaia', 'invoicing'),
347
+		'ZA' => __('Zamora', 'invoicing'),
348
+		'Z'  => __('Zaragoza', 'invoicing'),
349 349
 	),
350 350
 	'FI' => array(),
351 351
 	'FR' => array(),
352 352
 	'GP' => array(),
353 353
 	'GR' => array( // Greek Regions.
354
-		'I' => __( 'Αττική', 'invoicing' ),
355
-		'A' => __( 'Ανατολική Μακεδονία και Θράκη', 'invoicing' ),
356
-		'B' => __( 'Κεντρική Μακεδονία', 'invoicing' ),
357
-		'C' => __( 'Δυτική Μακεδονία', 'invoicing' ),
358
-		'D' => __( 'Ήπειρος', 'invoicing' ),
359
-		'E' => __( 'Θεσσαλία', 'invoicing' ),
360
-		'F' => __( 'Ιόνιοι Νήσοι', 'invoicing' ),
361
-		'G' => __( 'Δυτική Ελλάδα', 'invoicing' ),
362
-		'H' => __( 'Στερεά Ελλάδα', 'invoicing' ),
363
-		'J' => __( 'Πελοπόννησος', 'invoicing' ),
364
-		'K' => __( 'Βόρειο Αιγαίο', 'invoicing' ),
365
-		'L' => __( 'Νότιο Αιγαίο', 'invoicing' ),
366
-		'M' => __( 'Κρήτη', 'invoicing' ),
354
+		'I' => __('Αττική', 'invoicing'),
355
+		'A' => __('Ανατολική Μακεδονία και Θράκη', 'invoicing'),
356
+		'B' => __('Κεντρική Μακεδονία', 'invoicing'),
357
+		'C' => __('Δυτική Μακεδονία', 'invoicing'),
358
+		'D' => __('Ήπειρος', 'invoicing'),
359
+		'E' => __('Θεσσαλία', 'invoicing'),
360
+		'F' => __('Ιόνιοι Νήσοι', 'invoicing'),
361
+		'G' => __('Δυτική Ελλάδα', 'invoicing'),
362
+		'H' => __('Στερεά Ελλάδα', 'invoicing'),
363
+		'J' => __('Πελοπόννησος', 'invoicing'),
364
+		'K' => __('Βόρειο Αιγαίο', 'invoicing'),
365
+		'L' => __('Νότιο Αιγαίο', 'invoicing'),
366
+		'M' => __('Κρήτη', 'invoicing'),
367 367
 	),
368 368
 	'GF' => array(),
369 369
 	'HK' => array( // Hong Kong states.
370
-		'HONG KONG'       => __( 'Hong Kong Island', 'invoicing' ),
371
-		'KOWLOON'         => __( 'Kowloon', 'invoicing' ),
372
-		'NEW TERRITORIES' => __( 'New Territories', 'invoicing' ),
370
+		'HONG KONG'       => __('Hong Kong Island', 'invoicing'),
371
+		'KOWLOON'         => __('Kowloon', 'invoicing'),
372
+		'NEW TERRITORIES' => __('New Territories', 'invoicing'),
373 373
 	),
374 374
 	'HU' => array( // Hungary states.
375
-		'BK' => __( 'Bács-Kiskun', 'invoicing' ),
376
-		'BE' => __( 'Békés', 'invoicing' ),
377
-		'BA' => __( 'Baranya', 'invoicing' ),
378
-		'BZ' => __( 'Borsod-Abaúj-Zemplén', 'invoicing' ),
379
-		'BU' => __( 'Budapest', 'invoicing' ),
380
-		'CS' => __( 'Csongrád', 'invoicing' ),
381
-		'FE' => __( 'Fejér', 'invoicing' ),
382
-		'GS' => __( 'Győr-Moson-Sopron', 'invoicing' ),
383
-		'HB' => __( 'Hajdú-Bihar', 'invoicing' ),
384
-		'HE' => __( 'Heves', 'invoicing' ),
385
-		'JN' => __( 'Jász-Nagykun-Szolnok', 'invoicing' ),
386
-		'KE' => __( 'Komárom-Esztergom', 'invoicing' ),
387
-		'NO' => __( 'Nógrád', 'invoicing' ),
388
-		'PE' => __( 'Pest', 'invoicing' ),
389
-		'SO' => __( 'Somogy', 'invoicing' ),
390
-		'SZ' => __( 'Szabolcs-Szatmár-Bereg', 'invoicing' ),
391
-		'TO' => __( 'Tolna', 'invoicing' ),
392
-		'VA' => __( 'Vas', 'invoicing' ),
393
-		'VE' => __( 'Veszprém', 'invoicing' ),
394
-		'ZA' => __( 'Zala', 'invoicing' ),
375
+		'BK' => __('Bács-Kiskun', 'invoicing'),
376
+		'BE' => __('Békés', 'invoicing'),
377
+		'BA' => __('Baranya', 'invoicing'),
378
+		'BZ' => __('Borsod-Abaúj-Zemplén', 'invoicing'),
379
+		'BU' => __('Budapest', 'invoicing'),
380
+		'CS' => __('Csongrád', 'invoicing'),
381
+		'FE' => __('Fejér', 'invoicing'),
382
+		'GS' => __('Győr-Moson-Sopron', 'invoicing'),
383
+		'HB' => __('Hajdú-Bihar', 'invoicing'),
384
+		'HE' => __('Heves', 'invoicing'),
385
+		'JN' => __('Jász-Nagykun-Szolnok', 'invoicing'),
386
+		'KE' => __('Komárom-Esztergom', 'invoicing'),
387
+		'NO' => __('Nógrád', 'invoicing'),
388
+		'PE' => __('Pest', 'invoicing'),
389
+		'SO' => __('Somogy', 'invoicing'),
390
+		'SZ' => __('Szabolcs-Szatmár-Bereg', 'invoicing'),
391
+		'TO' => __('Tolna', 'invoicing'),
392
+		'VA' => __('Vas', 'invoicing'),
393
+		'VE' => __('Veszprém', 'invoicing'),
394
+		'ZA' => __('Zala', 'invoicing'),
395 395
 	),
396 396
 	'ID' => array( // Indonesia Provinces.
397
-		'AC' => __( 'Daerah Istimewa Aceh', 'invoicing' ),
398
-		'SU' => __( 'Sumatera Utara', 'invoicing' ),
399
-		'SB' => __( 'Sumatera Barat', 'invoicing' ),
400
-		'RI' => __( 'Riau', 'invoicing' ),
401
-		'KR' => __( 'Kepulauan Riau', 'invoicing' ),
402
-		'JA' => __( 'Jambi', 'invoicing' ),
403
-		'SS' => __( 'Sumatera Selatan', 'invoicing' ),
404
-		'BB' => __( 'Bangka Belitung', 'invoicing' ),
405
-		'BE' => __( 'Bengkulu', 'invoicing' ),
406
-		'LA' => __( 'Lampung', 'invoicing' ),
407
-		'JK' => __( 'DKI Jakarta', 'invoicing' ),
408
-		'JB' => __( 'Jawa Barat', 'invoicing' ),
409
-		'BT' => __( 'Banten', 'invoicing' ),
410
-		'JT' => __( 'Jawa Tengah', 'invoicing' ),
411
-		'JI' => __( 'Jawa Timur', 'invoicing' ),
412
-		'YO' => __( 'Daerah Istimewa Yogyakarta', 'invoicing' ),
413
-		'BA' => __( 'Bali', 'invoicing' ),
414
-		'NB' => __( 'Nusa Tenggara Barat', 'invoicing' ),
415
-		'NT' => __( 'Nusa Tenggara Timur', 'invoicing' ),
416
-		'KB' => __( 'Kalimantan Barat', 'invoicing' ),
417
-		'KT' => __( 'Kalimantan Tengah', 'invoicing' ),
418
-		'KI' => __( 'Kalimantan Timur', 'invoicing' ),
419
-		'KS' => __( 'Kalimantan Selatan', 'invoicing' ),
420
-		'KU' => __( 'Kalimantan Utara', 'invoicing' ),
421
-		'SA' => __( 'Sulawesi Utara', 'invoicing' ),
422
-		'ST' => __( 'Sulawesi Tengah', 'invoicing' ),
423
-		'SG' => __( 'Sulawesi Tenggara', 'invoicing' ),
424
-		'SR' => __( 'Sulawesi Barat', 'invoicing' ),
425
-		'SN' => __( 'Sulawesi Selatan', 'invoicing' ),
426
-		'GO' => __( 'Gorontalo', 'invoicing' ),
427
-		'MA' => __( 'Maluku', 'invoicing' ),
428
-		'MU' => __( 'Maluku Utara', 'invoicing' ),
429
-		'PA' => __( 'Papua', 'invoicing' ),
430
-		'PB' => __( 'Papua Barat', 'invoicing' ),
397
+		'AC' => __('Daerah Istimewa Aceh', 'invoicing'),
398
+		'SU' => __('Sumatera Utara', 'invoicing'),
399
+		'SB' => __('Sumatera Barat', 'invoicing'),
400
+		'RI' => __('Riau', 'invoicing'),
401
+		'KR' => __('Kepulauan Riau', 'invoicing'),
402
+		'JA' => __('Jambi', 'invoicing'),
403
+		'SS' => __('Sumatera Selatan', 'invoicing'),
404
+		'BB' => __('Bangka Belitung', 'invoicing'),
405
+		'BE' => __('Bengkulu', 'invoicing'),
406
+		'LA' => __('Lampung', 'invoicing'),
407
+		'JK' => __('DKI Jakarta', 'invoicing'),
408
+		'JB' => __('Jawa Barat', 'invoicing'),
409
+		'BT' => __('Banten', 'invoicing'),
410
+		'JT' => __('Jawa Tengah', 'invoicing'),
411
+		'JI' => __('Jawa Timur', 'invoicing'),
412
+		'YO' => __('Daerah Istimewa Yogyakarta', 'invoicing'),
413
+		'BA' => __('Bali', 'invoicing'),
414
+		'NB' => __('Nusa Tenggara Barat', 'invoicing'),
415
+		'NT' => __('Nusa Tenggara Timur', 'invoicing'),
416
+		'KB' => __('Kalimantan Barat', 'invoicing'),
417
+		'KT' => __('Kalimantan Tengah', 'invoicing'),
418
+		'KI' => __('Kalimantan Timur', 'invoicing'),
419
+		'KS' => __('Kalimantan Selatan', 'invoicing'),
420
+		'KU' => __('Kalimantan Utara', 'invoicing'),
421
+		'SA' => __('Sulawesi Utara', 'invoicing'),
422
+		'ST' => __('Sulawesi Tengah', 'invoicing'),
423
+		'SG' => __('Sulawesi Tenggara', 'invoicing'),
424
+		'SR' => __('Sulawesi Barat', 'invoicing'),
425
+		'SN' => __('Sulawesi Selatan', 'invoicing'),
426
+		'GO' => __('Gorontalo', 'invoicing'),
427
+		'MA' => __('Maluku', 'invoicing'),
428
+		'MU' => __('Maluku Utara', 'invoicing'),
429
+		'PA' => __('Papua', 'invoicing'),
430
+		'PB' => __('Papua Barat', 'invoicing'),
431 431
 	),
432 432
 	'IE' => array( // Republic of Ireland.
433
-		'CW' => __( 'Carlow', 'invoicing' ),
434
-		'CN' => __( 'Cavan', 'invoicing' ),
435
-		'CE' => __( 'Clare', 'invoicing' ),
436
-		'CO' => __( 'Cork', 'invoicing' ),
437
-		'DL' => __( 'Donegal', 'invoicing' ),
438
-		'D'  => __( 'Dublin', 'invoicing' ),
439
-		'G'  => __( 'Galway', 'invoicing' ),
440
-		'KY' => __( 'Kerry', 'invoicing' ),
441
-		'KE' => __( 'Kildare', 'invoicing' ),
442
-		'KK' => __( 'Kilkenny', 'invoicing' ),
443
-		'LS' => __( 'Laois', 'invoicing' ),
444
-		'LM' => __( 'Leitrim', 'invoicing' ),
445
-		'LK' => __( 'Limerick', 'invoicing' ),
446
-		'LD' => __( 'Longford', 'invoicing' ),
447
-		'LH' => __( 'Louth', 'invoicing' ),
448
-		'MO' => __( 'Mayo', 'invoicing' ),
449
-		'MH' => __( 'Meath', 'invoicing' ),
450
-		'MN' => __( 'Monaghan', 'invoicing' ),
451
-		'OY' => __( 'Offaly', 'invoicing' ),
452
-		'RN' => __( 'Roscommon', 'invoicing' ),
453
-		'SO' => __( 'Sligo', 'invoicing' ),
454
-		'TA' => __( 'Tipperary', 'invoicing' ),
455
-		'WD' => __( 'Waterford', 'invoicing' ),
456
-		'WH' => __( 'Westmeath', 'invoicing' ),
457
-		'WX' => __( 'Wexford', 'invoicing' ),
458
-		'WW' => __( 'Wicklow', 'invoicing' ),
433
+		'CW' => __('Carlow', 'invoicing'),
434
+		'CN' => __('Cavan', 'invoicing'),
435
+		'CE' => __('Clare', 'invoicing'),
436
+		'CO' => __('Cork', 'invoicing'),
437
+		'DL' => __('Donegal', 'invoicing'),
438
+		'D'  => __('Dublin', 'invoicing'),
439
+		'G'  => __('Galway', 'invoicing'),
440
+		'KY' => __('Kerry', 'invoicing'),
441
+		'KE' => __('Kildare', 'invoicing'),
442
+		'KK' => __('Kilkenny', 'invoicing'),
443
+		'LS' => __('Laois', 'invoicing'),
444
+		'LM' => __('Leitrim', 'invoicing'),
445
+		'LK' => __('Limerick', 'invoicing'),
446
+		'LD' => __('Longford', 'invoicing'),
447
+		'LH' => __('Louth', 'invoicing'),
448
+		'MO' => __('Mayo', 'invoicing'),
449
+		'MH' => __('Meath', 'invoicing'),
450
+		'MN' => __('Monaghan', 'invoicing'),
451
+		'OY' => __('Offaly', 'invoicing'),
452
+		'RN' => __('Roscommon', 'invoicing'),
453
+		'SO' => __('Sligo', 'invoicing'),
454
+		'TA' => __('Tipperary', 'invoicing'),
455
+		'WD' => __('Waterford', 'invoicing'),
456
+		'WH' => __('Westmeath', 'invoicing'),
457
+		'WX' => __('Wexford', 'invoicing'),
458
+		'WW' => __('Wicklow', 'invoicing'),
459 459
 	),
460 460
 	'IN' => array( // Indian states.
461
-		'AP' => __( 'Andhra Pradesh', 'invoicing' ),
462
-		'AR' => __( 'Arunachal Pradesh', 'invoicing' ),
463
-		'AS' => __( 'Assam', 'invoicing' ),
464
-		'BR' => __( 'Bihar', 'invoicing' ),
465
-		'CT' => __( 'Chhattisgarh', 'invoicing' ),
466
-		'GA' => __( 'Goa', 'invoicing' ),
467
-		'GJ' => __( 'Gujarat', 'invoicing' ),
468
-		'HR' => __( 'Haryana', 'invoicing' ),
469
-		'HP' => __( 'Himachal Pradesh', 'invoicing' ),
470
-		'JK' => __( 'Jammu and Kashmir', 'invoicing' ),
471
-		'JH' => __( 'Jharkhand', 'invoicing' ),
472
-		'KA' => __( 'Karnataka', 'invoicing' ),
473
-		'KL' => __( 'Kerala', 'invoicing' ),
474
-		'MP' => __( 'Madhya Pradesh', 'invoicing' ),
475
-		'MH' => __( 'Maharashtra', 'invoicing' ),
476
-		'MN' => __( 'Manipur', 'invoicing' ),
477
-		'ML' => __( 'Meghalaya', 'invoicing' ),
478
-		'MZ' => __( 'Mizoram', 'invoicing' ),
479
-		'NL' => __( 'Nagaland', 'invoicing' ),
480
-		'OR' => __( 'Orissa', 'invoicing' ),
481
-		'PB' => __( 'Punjab', 'invoicing' ),
482
-		'RJ' => __( 'Rajasthan', 'invoicing' ),
483
-		'SK' => __( 'Sikkim', 'invoicing' ),
484
-		'TN' => __( 'Tamil Nadu', 'invoicing' ),
485
-		'TS' => __( 'Telangana', 'invoicing' ),
486
-		'TR' => __( 'Tripura', 'invoicing' ),
487
-		'UK' => __( 'Uttarakhand', 'invoicing' ),
488
-		'UP' => __( 'Uttar Pradesh', 'invoicing' ),
489
-		'WB' => __( 'West Bengal', 'invoicing' ),
490
-		'AN' => __( 'Andaman and Nicobar Islands', 'invoicing' ),
491
-		'CH' => __( 'Chandigarh', 'invoicing' ),
492
-		'DN' => __( 'Dadra and Nagar Haveli', 'invoicing' ),
493
-		'DD' => __( 'Daman and Diu', 'invoicing' ),
494
-		'DL' => __( 'Delhi', 'invoicing' ),
495
-		'LD' => __( 'Lakshadeep', 'invoicing' ),
496
-		'PY' => __( 'Pondicherry (Puducherry)', 'invoicing' ),
461
+		'AP' => __('Andhra Pradesh', 'invoicing'),
462
+		'AR' => __('Arunachal Pradesh', 'invoicing'),
463
+		'AS' => __('Assam', 'invoicing'),
464
+		'BR' => __('Bihar', 'invoicing'),
465
+		'CT' => __('Chhattisgarh', 'invoicing'),
466
+		'GA' => __('Goa', 'invoicing'),
467
+		'GJ' => __('Gujarat', 'invoicing'),
468
+		'HR' => __('Haryana', 'invoicing'),
469
+		'HP' => __('Himachal Pradesh', 'invoicing'),
470
+		'JK' => __('Jammu and Kashmir', 'invoicing'),
471
+		'JH' => __('Jharkhand', 'invoicing'),
472
+		'KA' => __('Karnataka', 'invoicing'),
473
+		'KL' => __('Kerala', 'invoicing'),
474
+		'MP' => __('Madhya Pradesh', 'invoicing'),
475
+		'MH' => __('Maharashtra', 'invoicing'),
476
+		'MN' => __('Manipur', 'invoicing'),
477
+		'ML' => __('Meghalaya', 'invoicing'),
478
+		'MZ' => __('Mizoram', 'invoicing'),
479
+		'NL' => __('Nagaland', 'invoicing'),
480
+		'OR' => __('Orissa', 'invoicing'),
481
+		'PB' => __('Punjab', 'invoicing'),
482
+		'RJ' => __('Rajasthan', 'invoicing'),
483
+		'SK' => __('Sikkim', 'invoicing'),
484
+		'TN' => __('Tamil Nadu', 'invoicing'),
485
+		'TS' => __('Telangana', 'invoicing'),
486
+		'TR' => __('Tripura', 'invoicing'),
487
+		'UK' => __('Uttarakhand', 'invoicing'),
488
+		'UP' => __('Uttar Pradesh', 'invoicing'),
489
+		'WB' => __('West Bengal', 'invoicing'),
490
+		'AN' => __('Andaman and Nicobar Islands', 'invoicing'),
491
+		'CH' => __('Chandigarh', 'invoicing'),
492
+		'DN' => __('Dadra and Nagar Haveli', 'invoicing'),
493
+		'DD' => __('Daman and Diu', 'invoicing'),
494
+		'DL' => __('Delhi', 'invoicing'),
495
+		'LD' => __('Lakshadeep', 'invoicing'),
496
+		'PY' => __('Pondicherry (Puducherry)', 'invoicing'),
497 497
 	),
498 498
 	'IR' => array( // Iran States.
499
-		'KHZ' => __( 'Khuzestan  (خوزستان)', 'invoicing' ),
500
-		'THR' => __( 'Tehran  (تهران)', 'invoicing' ),
501
-		'ILM' => __( 'Ilaam (ایلام)', 'invoicing' ),
502
-		'BHR' => __( 'Bushehr (بوشهر)', 'invoicing' ),
503
-		'ADL' => __( 'Ardabil (اردبیل)', 'invoicing' ),
504
-		'ESF' => __( 'Isfahan (اصفهان)', 'invoicing' ),
505
-		'YZD' => __( 'Yazd (یزد)', 'invoicing' ),
506
-		'KRH' => __( 'Kermanshah (کرمانشاه)', 'invoicing' ),
507
-		'KRN' => __( 'Kerman (کرمان)', 'invoicing' ),
508
-		'HDN' => __( 'Hamadan (همدان)', 'invoicing' ),
509
-		'GZN' => __( 'Ghazvin (قزوین)', 'invoicing' ),
510
-		'ZJN' => __( 'Zanjan (زنجان)', 'invoicing' ),
511
-		'LRS' => __( 'Luristan (لرستان)', 'invoicing' ),
512
-		'ABZ' => __( 'Alborz (البرز)', 'invoicing' ),
513
-		'EAZ' => __( 'East Azarbaijan (آذربایجان شرقی)', 'invoicing' ),
514
-		'WAZ' => __( 'West Azarbaijan (آذربایجان غربی)', 'invoicing' ),
515
-		'CHB' => __( 'Chaharmahal and Bakhtiari (چهارمحال و بختیاری)', 'invoicing' ),
516
-		'SKH' => __( 'South Khorasan (خراسان جنوبی)', 'invoicing' ),
517
-		'RKH' => __( 'Razavi Khorasan (خراسان رضوی)', 'invoicing' ),
518
-		'NKH' => __( 'North Khorasan (خراسان شمالی)', 'invoicing' ),
519
-		'SMN' => __( 'Semnan (سمنان)', 'invoicing' ),
520
-		'FRS' => __( 'Fars (فارس)', 'invoicing' ),
521
-		'QHM' => __( 'Qom (قم)', 'invoicing' ),
522
-		'KRD' => __( 'Kurdistan / کردستان)', 'invoicing' ),
523
-		'KBD' => __( 'Kohgiluyeh and BoyerAhmad (کهگیلوییه و بویراحمد)', 'invoicing' ),
524
-		'GLS' => __( 'Golestan (گلستان)', 'invoicing' ),
525
-		'GIL' => __( 'Gilan (گیلان)', 'invoicing' ),
526
-		'MZN' => __( 'Mazandaran (مازندران)', 'invoicing' ),
527
-		'MKZ' => __( 'Markazi (مرکزی)', 'invoicing' ),
528
-		'HRZ' => __( 'Hormozgan (هرمزگان)', 'invoicing' ),
529
-		'SBN' => __( 'Sistan and Baluchestan (سیستان و بلوچستان)', 'invoicing' ),
499
+		'KHZ' => __('Khuzestan  (خوزستان)', 'invoicing'),
500
+		'THR' => __('Tehran  (تهران)', 'invoicing'),
501
+		'ILM' => __('Ilaam (ایلام)', 'invoicing'),
502
+		'BHR' => __('Bushehr (بوشهر)', 'invoicing'),
503
+		'ADL' => __('Ardabil (اردبیل)', 'invoicing'),
504
+		'ESF' => __('Isfahan (اصفهان)', 'invoicing'),
505
+		'YZD' => __('Yazd (یزد)', 'invoicing'),
506
+		'KRH' => __('Kermanshah (کرمانشاه)', 'invoicing'),
507
+		'KRN' => __('Kerman (کرمان)', 'invoicing'),
508
+		'HDN' => __('Hamadan (همدان)', 'invoicing'),
509
+		'GZN' => __('Ghazvin (قزوین)', 'invoicing'),
510
+		'ZJN' => __('Zanjan (زنجان)', 'invoicing'),
511
+		'LRS' => __('Luristan (لرستان)', 'invoicing'),
512
+		'ABZ' => __('Alborz (البرز)', 'invoicing'),
513
+		'EAZ' => __('East Azarbaijan (آذربایجان شرقی)', 'invoicing'),
514
+		'WAZ' => __('West Azarbaijan (آذربایجان غربی)', 'invoicing'),
515
+		'CHB' => __('Chaharmahal and Bakhtiari (چهارمحال و بختیاری)', 'invoicing'),
516
+		'SKH' => __('South Khorasan (خراسان جنوبی)', 'invoicing'),
517
+		'RKH' => __('Razavi Khorasan (خراسان رضوی)', 'invoicing'),
518
+		'NKH' => __('North Khorasan (خراسان شمالی)', 'invoicing'),
519
+		'SMN' => __('Semnan (سمنان)', 'invoicing'),
520
+		'FRS' => __('Fars (فارس)', 'invoicing'),
521
+		'QHM' => __('Qom (قم)', 'invoicing'),
522
+		'KRD' => __('Kurdistan / کردستان)', 'invoicing'),
523
+		'KBD' => __('Kohgiluyeh and BoyerAhmad (کهگیلوییه و بویراحمد)', 'invoicing'),
524
+		'GLS' => __('Golestan (گلستان)', 'invoicing'),
525
+		'GIL' => __('Gilan (گیلان)', 'invoicing'),
526
+		'MZN' => __('Mazandaran (مازندران)', 'invoicing'),
527
+		'MKZ' => __('Markazi (مرکزی)', 'invoicing'),
528
+		'HRZ' => __('Hormozgan (هرمزگان)', 'invoicing'),
529
+		'SBN' => __('Sistan and Baluchestan (سیستان و بلوچستان)', 'invoicing'),
530 530
 	),
531 531
 	'IS' => array(),
532 532
 	'IT' => array( // Italy Provinces.
533
-		'AG' => __( 'Agrigento', 'invoicing' ),
534
-		'AL' => __( 'Alessandria', 'invoicing' ),
535
-		'AN' => __( 'Ancona', 'invoicing' ),
536
-		'AO' => __( 'Aosta', 'invoicing' ),
537
-		'AR' => __( 'Arezzo', 'invoicing' ),
538
-		'AP' => __( 'Ascoli Piceno', 'invoicing' ),
539
-		'AT' => __( 'Asti', 'invoicing' ),
540
-		'AV' => __( 'Avellino', 'invoicing' ),
541
-		'BA' => __( 'Bari', 'invoicing' ),
542
-		'BT' => __( 'Barletta-Andria-Trani', 'invoicing' ),
543
-		'BL' => __( 'Belluno', 'invoicing' ),
544
-		'BN' => __( 'Benevento', 'invoicing' ),
545
-		'BG' => __( 'Bergamo', 'invoicing' ),
546
-		'BI' => __( 'Biella', 'invoicing' ),
547
-		'BO' => __( 'Bologna', 'invoicing' ),
548
-		'BZ' => __( 'Bolzano', 'invoicing' ),
549
-		'BS' => __( 'Brescia', 'invoicing' ),
550
-		'BR' => __( 'Brindisi', 'invoicing' ),
551
-		'CA' => __( 'Cagliari', 'invoicing' ),
552
-		'CL' => __( 'Caltanissetta', 'invoicing' ),
553
-		'CB' => __( 'Campobasso', 'invoicing' ),
554
-		'CE' => __( 'Caserta', 'invoicing' ),
555
-		'CT' => __( 'Catania', 'invoicing' ),
556
-		'CZ' => __( 'Catanzaro', 'invoicing' ),
557
-		'CH' => __( 'Chieti', 'invoicing' ),
558
-		'CO' => __( 'Como', 'invoicing' ),
559
-		'CS' => __( 'Cosenza', 'invoicing' ),
560
-		'CR' => __( 'Cremona', 'invoicing' ),
561
-		'KR' => __( 'Crotone', 'invoicing' ),
562
-		'CN' => __( 'Cuneo', 'invoicing' ),
563
-		'EN' => __( 'Enna', 'invoicing' ),
564
-		'FM' => __( 'Fermo', 'invoicing' ),
565
-		'FE' => __( 'Ferrara', 'invoicing' ),
566
-		'FI' => __( 'Firenze', 'invoicing' ),
567
-		'FG' => __( 'Foggia', 'invoicing' ),
568
-		'FC' => __( 'Forlì-Cesena', 'invoicing' ),
569
-		'FR' => __( 'Frosinone', 'invoicing' ),
570
-		'GE' => __( 'Genova', 'invoicing' ),
571
-		'GO' => __( 'Gorizia', 'invoicing' ),
572
-		'GR' => __( 'Grosseto', 'invoicing' ),
573
-		'IM' => __( 'Imperia', 'invoicing' ),
574
-		'IS' => __( 'Isernia', 'invoicing' ),
575
-		'SP' => __( 'La Spezia', 'invoicing' ),
576
-		'AQ' => __( "L'Aquila", 'invoicing' ),
577
-		'LT' => __( 'Latina', 'invoicing' ),
578
-		'LE' => __( 'Lecce', 'invoicing' ),
579
-		'LC' => __( 'Lecco', 'invoicing' ),
580
-		'LI' => __( 'Livorno', 'invoicing' ),
581
-		'LO' => __( 'Lodi', 'invoicing' ),
582
-		'LU' => __( 'Lucca', 'invoicing' ),
583
-		'MC' => __( 'Macerata', 'invoicing' ),
584
-		'MN' => __( 'Mantova', 'invoicing' ),
585
-		'MS' => __( 'Massa-Carrara', 'invoicing' ),
586
-		'MT' => __( 'Matera', 'invoicing' ),
587
-		'ME' => __( 'Messina', 'invoicing' ),
588
-		'MI' => __( 'Milano', 'invoicing' ),
589
-		'MO' => __( 'Modena', 'invoicing' ),
590
-		'MB' => __( 'Monza e della Brianza', 'invoicing' ),
591
-		'NA' => __( 'Napoli', 'invoicing' ),
592
-		'NO' => __( 'Novara', 'invoicing' ),
593
-		'NU' => __( 'Nuoro', 'invoicing' ),
594
-		'OR' => __( 'Oristano', 'invoicing' ),
595
-		'PD' => __( 'Padova', 'invoicing' ),
596
-		'PA' => __( 'Palermo', 'invoicing' ),
597
-		'PR' => __( 'Parma', 'invoicing' ),
598
-		'PV' => __( 'Pavia', 'invoicing' ),
599
-		'PG' => __( 'Perugia', 'invoicing' ),
600
-		'PU' => __( 'Pesaro e Urbino', 'invoicing' ),
601
-		'PE' => __( 'Pescara', 'invoicing' ),
602
-		'PC' => __( 'Piacenza', 'invoicing' ),
603
-		'PI' => __( 'Pisa', 'invoicing' ),
604
-		'PT' => __( 'Pistoia', 'invoicing' ),
605
-		'PN' => __( 'Pordenone', 'invoicing' ),
606
-		'PZ' => __( 'Potenza', 'invoicing' ),
607
-		'PO' => __( 'Prato', 'invoicing' ),
608
-		'RG' => __( 'Ragusa', 'invoicing' ),
609
-		'RA' => __( 'Ravenna', 'invoicing' ),
610
-		'RC' => __( 'Reggio Calabria', 'invoicing' ),
611
-		'RE' => __( 'Reggio Emilia', 'invoicing' ),
612
-		'RI' => __( 'Rieti', 'invoicing' ),
613
-		'RN' => __( 'Rimini', 'invoicing' ),
614
-		'RM' => __( 'Roma', 'invoicing' ),
615
-		'RO' => __( 'Rovigo', 'invoicing' ),
616
-		'SA' => __( 'Salerno', 'invoicing' ),
617
-		'SS' => __( 'Sassari', 'invoicing' ),
618
-		'SV' => __( 'Savona', 'invoicing' ),
619
-		'SI' => __( 'Siena', 'invoicing' ),
620
-		'SR' => __( 'Siracusa', 'invoicing' ),
621
-		'SO' => __( 'Sondrio', 'invoicing' ),
622
-		'SU' => __( 'Sud Sardegna', 'invoicing' ),
623
-		'TA' => __( 'Taranto', 'invoicing' ),
624
-		'TE' => __( 'Teramo', 'invoicing' ),
625
-		'TR' => __( 'Terni', 'invoicing' ),
626
-		'TO' => __( 'Torino', 'invoicing' ),
627
-		'TP' => __( 'Trapani', 'invoicing' ),
628
-		'TN' => __( 'Trento', 'invoicing' ),
629
-		'TV' => __( 'Treviso', 'invoicing' ),
630
-		'TS' => __( 'Trieste', 'invoicing' ),
631
-		'UD' => __( 'Udine', 'invoicing' ),
632
-		'VA' => __( 'Varese', 'invoicing' ),
633
-		'VE' => __( 'Venezia', 'invoicing' ),
634
-		'VB' => __( 'Verbano-Cusio-Ossola', 'invoicing' ),
635
-		'VC' => __( 'Vercelli', 'invoicing' ),
636
-		'VR' => __( 'Verona', 'invoicing' ),
637
-		'VV' => __( 'Vibo Valentia', 'invoicing' ),
638
-		'VI' => __( 'Vicenza', 'invoicing' ),
639
-		'VT' => __( 'Viterbo', 'invoicing' ),
533
+		'AG' => __('Agrigento', 'invoicing'),
534
+		'AL' => __('Alessandria', 'invoicing'),
535
+		'AN' => __('Ancona', 'invoicing'),
536
+		'AO' => __('Aosta', 'invoicing'),
537
+		'AR' => __('Arezzo', 'invoicing'),
538
+		'AP' => __('Ascoli Piceno', 'invoicing'),
539
+		'AT' => __('Asti', 'invoicing'),
540
+		'AV' => __('Avellino', 'invoicing'),
541
+		'BA' => __('Bari', 'invoicing'),
542
+		'BT' => __('Barletta-Andria-Trani', 'invoicing'),
543
+		'BL' => __('Belluno', 'invoicing'),
544
+		'BN' => __('Benevento', 'invoicing'),
545
+		'BG' => __('Bergamo', 'invoicing'),
546
+		'BI' => __('Biella', 'invoicing'),
547
+		'BO' => __('Bologna', 'invoicing'),
548
+		'BZ' => __('Bolzano', 'invoicing'),
549
+		'BS' => __('Brescia', 'invoicing'),
550
+		'BR' => __('Brindisi', 'invoicing'),
551
+		'CA' => __('Cagliari', 'invoicing'),
552
+		'CL' => __('Caltanissetta', 'invoicing'),
553
+		'CB' => __('Campobasso', 'invoicing'),
554
+		'CE' => __('Caserta', 'invoicing'),
555
+		'CT' => __('Catania', 'invoicing'),
556
+		'CZ' => __('Catanzaro', 'invoicing'),
557
+		'CH' => __('Chieti', 'invoicing'),
558
+		'CO' => __('Como', 'invoicing'),
559
+		'CS' => __('Cosenza', 'invoicing'),
560
+		'CR' => __('Cremona', 'invoicing'),
561
+		'KR' => __('Crotone', 'invoicing'),
562
+		'CN' => __('Cuneo', 'invoicing'),
563
+		'EN' => __('Enna', 'invoicing'),
564
+		'FM' => __('Fermo', 'invoicing'),
565
+		'FE' => __('Ferrara', 'invoicing'),
566
+		'FI' => __('Firenze', 'invoicing'),
567
+		'FG' => __('Foggia', 'invoicing'),
568
+		'FC' => __('Forlì-Cesena', 'invoicing'),
569
+		'FR' => __('Frosinone', 'invoicing'),
570
+		'GE' => __('Genova', 'invoicing'),
571
+		'GO' => __('Gorizia', 'invoicing'),
572
+		'GR' => __('Grosseto', 'invoicing'),
573
+		'IM' => __('Imperia', 'invoicing'),
574
+		'IS' => __('Isernia', 'invoicing'),
575
+		'SP' => __('La Spezia', 'invoicing'),
576
+		'AQ' => __("L'Aquila", 'invoicing'),
577
+		'LT' => __('Latina', 'invoicing'),
578
+		'LE' => __('Lecce', 'invoicing'),
579
+		'LC' => __('Lecco', 'invoicing'),
580
+		'LI' => __('Livorno', 'invoicing'),
581
+		'LO' => __('Lodi', 'invoicing'),
582
+		'LU' => __('Lucca', 'invoicing'),
583
+		'MC' => __('Macerata', 'invoicing'),
584
+		'MN' => __('Mantova', 'invoicing'),
585
+		'MS' => __('Massa-Carrara', 'invoicing'),
586
+		'MT' => __('Matera', 'invoicing'),
587
+		'ME' => __('Messina', 'invoicing'),
588
+		'MI' => __('Milano', 'invoicing'),
589
+		'MO' => __('Modena', 'invoicing'),
590
+		'MB' => __('Monza e della Brianza', 'invoicing'),
591
+		'NA' => __('Napoli', 'invoicing'),
592
+		'NO' => __('Novara', 'invoicing'),
593
+		'NU' => __('Nuoro', 'invoicing'),
594
+		'OR' => __('Oristano', 'invoicing'),
595
+		'PD' => __('Padova', 'invoicing'),
596
+		'PA' => __('Palermo', 'invoicing'),
597
+		'PR' => __('Parma', 'invoicing'),
598
+		'PV' => __('Pavia', 'invoicing'),
599
+		'PG' => __('Perugia', 'invoicing'),
600
+		'PU' => __('Pesaro e Urbino', 'invoicing'),
601
+		'PE' => __('Pescara', 'invoicing'),
602
+		'PC' => __('Piacenza', 'invoicing'),
603
+		'PI' => __('Pisa', 'invoicing'),
604
+		'PT' => __('Pistoia', 'invoicing'),
605
+		'PN' => __('Pordenone', 'invoicing'),
606
+		'PZ' => __('Potenza', 'invoicing'),
607
+		'PO' => __('Prato', 'invoicing'),
608
+		'RG' => __('Ragusa', 'invoicing'),
609
+		'RA' => __('Ravenna', 'invoicing'),
610
+		'RC' => __('Reggio Calabria', 'invoicing'),
611
+		'RE' => __('Reggio Emilia', 'invoicing'),
612
+		'RI' => __('Rieti', 'invoicing'),
613
+		'RN' => __('Rimini', 'invoicing'),
614
+		'RM' => __('Roma', 'invoicing'),
615
+		'RO' => __('Rovigo', 'invoicing'),
616
+		'SA' => __('Salerno', 'invoicing'),
617
+		'SS' => __('Sassari', 'invoicing'),
618
+		'SV' => __('Savona', 'invoicing'),
619
+		'SI' => __('Siena', 'invoicing'),
620
+		'SR' => __('Siracusa', 'invoicing'),
621
+		'SO' => __('Sondrio', 'invoicing'),
622
+		'SU' => __('Sud Sardegna', 'invoicing'),
623
+		'TA' => __('Taranto', 'invoicing'),
624
+		'TE' => __('Teramo', 'invoicing'),
625
+		'TR' => __('Terni', 'invoicing'),
626
+		'TO' => __('Torino', 'invoicing'),
627
+		'TP' => __('Trapani', 'invoicing'),
628
+		'TN' => __('Trento', 'invoicing'),
629
+		'TV' => __('Treviso', 'invoicing'),
630
+		'TS' => __('Trieste', 'invoicing'),
631
+		'UD' => __('Udine', 'invoicing'),
632
+		'VA' => __('Varese', 'invoicing'),
633
+		'VE' => __('Venezia', 'invoicing'),
634
+		'VB' => __('Verbano-Cusio-Ossola', 'invoicing'),
635
+		'VC' => __('Vercelli', 'invoicing'),
636
+		'VR' => __('Verona', 'invoicing'),
637
+		'VV' => __('Vibo Valentia', 'invoicing'),
638
+		'VI' => __('Vicenza', 'invoicing'),
639
+		'VT' => __('Viterbo', 'invoicing'),
640 640
 	),
641 641
 	'IL' => array(),
642 642
 	'IM' => array(),
@@ -648,903 +648,903 @@  discard block
 block discarded – undo
648 648
 	 * The suffix corresponds with the Japanese translation file.
649 649
 	 */
650 650
 	'JP' => array(
651
-		'JP01' => __( 'Hokkaido', 'invoicing' ),
652
-		'JP02' => __( 'Aomori', 'invoicing' ),
653
-		'JP03' => __( 'Iwate', 'invoicing' ),
654
-		'JP04' => __( 'Miyagi', 'invoicing' ),
655
-		'JP05' => __( 'Akita', 'invoicing' ),
656
-		'JP06' => __( 'Yamagata', 'invoicing' ),
657
-		'JP07' => __( 'Fukushima', 'invoicing' ),
658
-		'JP08' => __( 'Ibaraki', 'invoicing' ),
659
-		'JP09' => __( 'Tochigi', 'invoicing' ),
660
-		'JP10' => __( 'Gunma', 'invoicing' ),
661
-		'JP11' => __( 'Saitama', 'invoicing' ),
662
-		'JP12' => __( 'Chiba', 'invoicing' ),
663
-		'JP13' => __( 'Tokyo', 'invoicing' ),
664
-		'JP14' => __( 'Kanagawa', 'invoicing' ),
665
-		'JP15' => __( 'Niigata', 'invoicing' ),
666
-		'JP16' => __( 'Toyama', 'invoicing' ),
667
-		'JP17' => __( 'Ishikawa', 'invoicing' ),
668
-		'JP18' => __( 'Fukui', 'invoicing' ),
669
-		'JP19' => __( 'Yamanashi', 'invoicing' ),
670
-		'JP20' => __( 'Nagano', 'invoicing' ),
671
-		'JP21' => __( 'Gifu', 'invoicing' ),
672
-		'JP22' => __( 'Shizuoka', 'invoicing' ),
673
-		'JP23' => __( 'Aichi', 'invoicing' ),
674
-		'JP24' => __( 'Mie', 'invoicing' ),
675
-		'JP25' => __( 'Shiga', 'invoicing' ),
676
-		'JP26' => __( 'Kyoto', 'invoicing' ),
677
-		'JP27' => __( 'Osaka', 'invoicing' ),
678
-		'JP28' => __( 'Hyogo', 'invoicing' ),
679
-		'JP29' => __( 'Nara', 'invoicing' ),
680
-		'JP30' => __( 'Wakayama', 'invoicing' ),
681
-		'JP31' => __( 'Tottori', 'invoicing' ),
682
-		'JP32' => __( 'Shimane', 'invoicing' ),
683
-		'JP33' => __( 'Okayama', 'invoicing' ),
684
-		'JP34' => __( 'Hiroshima', 'invoicing' ),
685
-		'JP35' => __( 'Yamaguchi', 'invoicing' ),
686
-		'JP36' => __( 'Tokushima', 'invoicing' ),
687
-		'JP37' => __( 'Kagawa', 'invoicing' ),
688
-		'JP38' => __( 'Ehime', 'invoicing' ),
689
-		'JP39' => __( 'Kochi', 'invoicing' ),
690
-		'JP40' => __( 'Fukuoka', 'invoicing' ),
691
-		'JP41' => __( 'Saga', 'invoicing' ),
692
-		'JP42' => __( 'Nagasaki', 'invoicing' ),
693
-		'JP43' => __( 'Kumamoto', 'invoicing' ),
694
-		'JP44' => __( 'Oita', 'invoicing' ),
695
-		'JP45' => __( 'Miyazaki', 'invoicing' ),
696
-		'JP46' => __( 'Kagoshima', 'invoicing' ),
697
-		'JP47' => __( 'Okinawa', 'invoicing' ),
651
+		'JP01' => __('Hokkaido', 'invoicing'),
652
+		'JP02' => __('Aomori', 'invoicing'),
653
+		'JP03' => __('Iwate', 'invoicing'),
654
+		'JP04' => __('Miyagi', 'invoicing'),
655
+		'JP05' => __('Akita', 'invoicing'),
656
+		'JP06' => __('Yamagata', 'invoicing'),
657
+		'JP07' => __('Fukushima', 'invoicing'),
658
+		'JP08' => __('Ibaraki', 'invoicing'),
659
+		'JP09' => __('Tochigi', 'invoicing'),
660
+		'JP10' => __('Gunma', 'invoicing'),
661
+		'JP11' => __('Saitama', 'invoicing'),
662
+		'JP12' => __('Chiba', 'invoicing'),
663
+		'JP13' => __('Tokyo', 'invoicing'),
664
+		'JP14' => __('Kanagawa', 'invoicing'),
665
+		'JP15' => __('Niigata', 'invoicing'),
666
+		'JP16' => __('Toyama', 'invoicing'),
667
+		'JP17' => __('Ishikawa', 'invoicing'),
668
+		'JP18' => __('Fukui', 'invoicing'),
669
+		'JP19' => __('Yamanashi', 'invoicing'),
670
+		'JP20' => __('Nagano', 'invoicing'),
671
+		'JP21' => __('Gifu', 'invoicing'),
672
+		'JP22' => __('Shizuoka', 'invoicing'),
673
+		'JP23' => __('Aichi', 'invoicing'),
674
+		'JP24' => __('Mie', 'invoicing'),
675
+		'JP25' => __('Shiga', 'invoicing'),
676
+		'JP26' => __('Kyoto', 'invoicing'),
677
+		'JP27' => __('Osaka', 'invoicing'),
678
+		'JP28' => __('Hyogo', 'invoicing'),
679
+		'JP29' => __('Nara', 'invoicing'),
680
+		'JP30' => __('Wakayama', 'invoicing'),
681
+		'JP31' => __('Tottori', 'invoicing'),
682
+		'JP32' => __('Shimane', 'invoicing'),
683
+		'JP33' => __('Okayama', 'invoicing'),
684
+		'JP34' => __('Hiroshima', 'invoicing'),
685
+		'JP35' => __('Yamaguchi', 'invoicing'),
686
+		'JP36' => __('Tokushima', 'invoicing'),
687
+		'JP37' => __('Kagawa', 'invoicing'),
688
+		'JP38' => __('Ehime', 'invoicing'),
689
+		'JP39' => __('Kochi', 'invoicing'),
690
+		'JP40' => __('Fukuoka', 'invoicing'),
691
+		'JP41' => __('Saga', 'invoicing'),
692
+		'JP42' => __('Nagasaki', 'invoicing'),
693
+		'JP43' => __('Kumamoto', 'invoicing'),
694
+		'JP44' => __('Oita', 'invoicing'),
695
+		'JP45' => __('Miyazaki', 'invoicing'),
696
+		'JP46' => __('Kagoshima', 'invoicing'),
697
+		'JP47' => __('Okinawa', 'invoicing'),
698 698
 	),
699 699
 	'KE' => array( // Kenya Counties.
700
-		'1'  => __( 'Mombasa', 'invoicing' ),
701
-		'2'  => __( 'Kwale', 'invoicing' ),
702
-		'3'  => __( 'Kilifi', 'invoicing' ),
703
-		'4'  => __( 'Tana River', 'invoicing' ),
704
-		'5'  => __( 'Lamu', 'invoicing' ),
705
-		'6'  => __( 'Taita-Taveta', 'invoicing' ),
706
-		'7'  => __( 'Garissa', 'invoicing' ),
707
-		'8'  => __( 'Wajir', 'invoicing' ),
708
-		'9'  => __( 'Mandera', 'invoicing' ),
709
-		'10' => __( 'Marsabit', 'invoicing' ),
710
-		'11' => __( 'Isiolo', 'invoicing' ),
711
-		'12' => __( 'Meru', 'invoicing' ),
712
-		'13' => __( 'Tharaka-Nithi', 'invoicing' ),
713
-		'14' => __( 'Embu', 'invoicing' ),
714
-		'15' => __( 'Kitui', 'invoicing' ),
715
-		'16' => __( 'Machakos', 'invoicing' ),
716
-		'17' => __( 'Makueni', 'invoicing' ),
717
-		'18' => __( 'Nyandarua', 'invoicing' ),
718
-		'19' => __( 'Nyeri', 'invoicing' ),
719
-		'20' => __( 'Kirinyaga', 'invoicing' ),
720
-		'21' => __( "Murang'a", 'invoicing' ),
721
-		'22' => __( 'Kiambu', 'invoicing' ),
722
-		'23' => __( 'Turkana', 'invoicing' ),
723
-		'24' => __( 'West Pokot', 'invoicing' ),
724
-		'25' => __( 'Samburu', 'invoicing' ),
725
-		'26' => __( 'Trans-Nzoia', 'invoicing' ),
726
-		'27' => __( 'Uasin Gishu', 'invoicing' ),
727
-		'28' => __( 'Elgeyo-Marakwet', 'invoicing' ),
728
-		'29' => __( 'Nandi', 'invoicing' ),
729
-		'30' => __( 'Baringo', 'invoicing' ),
730
-		'31' => __( 'Laikipia', 'invoicing' ),
731
-		'32' => __( 'Nakuru', 'invoicing' ),
732
-		'33' => __( 'Narok', 'invoicing' ),
733
-		'34' => __( 'Kajiado', 'invoicing' ),
734
-		'35' => __( 'Kericho', 'invoicing' ),
735
-		'36' => __( 'Bomet', 'invoicing' ),
736
-		'37' => __( 'Kakamega', 'invoicing' ),
737
-		'38' => __( 'Vihiga', 'invoicing' ),
738
-		'39' => __( 'Bungoma', 'invoicing' ),
739
-		'40' => __( 'Busia', 'invoicing' ),
740
-		'41' => __( 'Siaya', 'invoicing' ),
741
-		'42' => __( 'Kisumu', 'invoicing' ),
742
-		'43' => __( 'Homa bay', 'invoicing' ),
743
-		'44' => __( 'Migori', 'invoicing' ),
744
-		'45' => __( 'Kisii', 'invoicing' ),
745
-		'46' => __( 'Nyamira', 'invoicing' ),
746
-		'47' => __( 'Nairobi', 'invoicing' ),
700
+		'1'  => __('Mombasa', 'invoicing'),
701
+		'2'  => __('Kwale', 'invoicing'),
702
+		'3'  => __('Kilifi', 'invoicing'),
703
+		'4'  => __('Tana River', 'invoicing'),
704
+		'5'  => __('Lamu', 'invoicing'),
705
+		'6'  => __('Taita-Taveta', 'invoicing'),
706
+		'7'  => __('Garissa', 'invoicing'),
707
+		'8'  => __('Wajir', 'invoicing'),
708
+		'9'  => __('Mandera', 'invoicing'),
709
+		'10' => __('Marsabit', 'invoicing'),
710
+		'11' => __('Isiolo', 'invoicing'),
711
+		'12' => __('Meru', 'invoicing'),
712
+		'13' => __('Tharaka-Nithi', 'invoicing'),
713
+		'14' => __('Embu', 'invoicing'),
714
+		'15' => __('Kitui', 'invoicing'),
715
+		'16' => __('Machakos', 'invoicing'),
716
+		'17' => __('Makueni', 'invoicing'),
717
+		'18' => __('Nyandarua', 'invoicing'),
718
+		'19' => __('Nyeri', 'invoicing'),
719
+		'20' => __('Kirinyaga', 'invoicing'),
720
+		'21' => __("Murang'a", 'invoicing'),
721
+		'22' => __('Kiambu', 'invoicing'),
722
+		'23' => __('Turkana', 'invoicing'),
723
+		'24' => __('West Pokot', 'invoicing'),
724
+		'25' => __('Samburu', 'invoicing'),
725
+		'26' => __('Trans-Nzoia', 'invoicing'),
726
+		'27' => __('Uasin Gishu', 'invoicing'),
727
+		'28' => __('Elgeyo-Marakwet', 'invoicing'),
728
+		'29' => __('Nandi', 'invoicing'),
729
+		'30' => __('Baringo', 'invoicing'),
730
+		'31' => __('Laikipia', 'invoicing'),
731
+		'32' => __('Nakuru', 'invoicing'),
732
+		'33' => __('Narok', 'invoicing'),
733
+		'34' => __('Kajiado', 'invoicing'),
734
+		'35' => __('Kericho', 'invoicing'),
735
+		'36' => __('Bomet', 'invoicing'),
736
+		'37' => __('Kakamega', 'invoicing'),
737
+		'38' => __('Vihiga', 'invoicing'),
738
+		'39' => __('Bungoma', 'invoicing'),
739
+		'40' => __('Busia', 'invoicing'),
740
+		'41' => __('Siaya', 'invoicing'),
741
+		'42' => __('Kisumu', 'invoicing'),
742
+		'43' => __('Homa bay', 'invoicing'),
743
+		'44' => __('Migori', 'invoicing'),
744
+		'45' => __('Kisii', 'invoicing'),
745
+		'46' => __('Nyamira', 'invoicing'),
746
+		'47' => __('Nairobi', 'invoicing'),
747 747
 	),
748 748
 	'KR' => array(),
749 749
 	'KW' => array(),
750 750
 	'LB' => array(),
751 751
 	'LR' => array( // Liberia provinces.
752
-		'BM' => __( 'Bomi', 'invoicing' ),
753
-		'BN' => __( 'Bong', 'invoicing' ),
754
-		'GA' => __( 'Gbarpolu', 'invoicing' ),
755
-		'GB' => __( 'Grand Bassa', 'invoicing' ),
756
-		'GC' => __( 'Grand Cape Mount', 'invoicing' ),
757
-		'GG' => __( 'Grand Gedeh', 'invoicing' ),
758
-		'GK' => __( 'Grand Kru', 'invoicing' ),
759
-		'LO' => __( 'Lofa', 'invoicing' ),
760
-		'MA' => __( 'Margibi', 'invoicing' ),
761
-		'MY' => __( 'Maryland', 'invoicing' ),
762
-		'MO' => __( 'Montserrado', 'invoicing' ),
763
-		'NM' => __( 'Nimba', 'invoicing' ),
764
-		'RV' => __( 'Rivercess', 'invoicing' ),
765
-		'RG' => __( 'River Gee', 'invoicing' ),
766
-		'SN' => __( 'Sinoe', 'invoicing' ),
752
+		'BM' => __('Bomi', 'invoicing'),
753
+		'BN' => __('Bong', 'invoicing'),
754
+		'GA' => __('Gbarpolu', 'invoicing'),
755
+		'GB' => __('Grand Bassa', 'invoicing'),
756
+		'GC' => __('Grand Cape Mount', 'invoicing'),
757
+		'GG' => __('Grand Gedeh', 'invoicing'),
758
+		'GK' => __('Grand Kru', 'invoicing'),
759
+		'LO' => __('Lofa', 'invoicing'),
760
+		'MA' => __('Margibi', 'invoicing'),
761
+		'MY' => __('Maryland', 'invoicing'),
762
+		'MO' => __('Montserrado', 'invoicing'),
763
+		'NM' => __('Nimba', 'invoicing'),
764
+		'RV' => __('Rivercess', 'invoicing'),
765
+		'RG' => __('River Gee', 'invoicing'),
766
+		'SN' => __('Sinoe', 'invoicing'),
767 767
 	),
768 768
 	'LU' => array(),
769 769
 	'MD' => array( // Moldova states.
770
-		'C'  => __( 'Chi&#537;in&#259;u', 'invoicing' ),
771
-		'BL' => __( 'B&#259;l&#539;i', 'invoicing' ),
772
-		'AN' => __( 'Anenii Noi', 'invoicing' ),
773
-		'BS' => __( 'Basarabeasca', 'invoicing' ),
774
-		'BR' => __( 'Briceni', 'invoicing' ),
775
-		'CH' => __( 'Cahul', 'invoicing' ),
776
-		'CT' => __( 'Cantemir', 'invoicing' ),
777
-		'CL' => __( 'C&#259;l&#259;ra&#537;i', 'invoicing' ),
778
-		'CS' => __( 'C&#259;u&#537;eni', 'invoicing' ),
779
-		'CM' => __( 'Cimi&#537;lia', 'invoicing' ),
780
-		'CR' => __( 'Criuleni', 'invoicing' ),
781
-		'DN' => __( 'Dondu&#537;eni', 'invoicing' ),
782
-		'DR' => __( 'Drochia', 'invoicing' ),
783
-		'DB' => __( 'Dub&#259;sari', 'invoicing' ),
784
-		'ED' => __( 'Edine&#539;', 'invoicing' ),
785
-		'FL' => __( 'F&#259;le&#537;ti', 'invoicing' ),
786
-		'FR' => __( 'Flore&#537;ti', 'invoicing' ),
787
-		'GE' => __( 'UTA G&#259;g&#259;uzia', 'invoicing' ),
788
-		'GL' => __( 'Glodeni', 'invoicing' ),
789
-		'HN' => __( 'H&icirc;nce&#537;ti', 'invoicing' ),
790
-		'IL' => __( 'Ialoveni', 'invoicing' ),
791
-		'LV' => __( 'Leova', 'invoicing' ),
792
-		'NS' => __( 'Nisporeni', 'invoicing' ),
793
-		'OC' => __( 'Ocni&#539;a', 'invoicing' ),
794
-		'OR' => __( 'Orhei', 'invoicing' ),
795
-		'RZ' => __( 'Rezina', 'invoicing' ),
796
-		'RS' => __( 'R&icirc;&#537;cani', 'invoicing' ),
797
-		'SG' => __( 'S&icirc;ngerei', 'invoicing' ),
798
-		'SR' => __( 'Soroca', 'invoicing' ),
799
-		'ST' => __( 'Str&#259;&#537;eni', 'invoicing' ),
800
-		'SD' => __( '&#536;old&#259;ne&#537;ti', 'invoicing' ),
801
-		'SV' => __( '&#536;tefan Vod&#259;', 'invoicing' ),
802
-		'TR' => __( 'Taraclia', 'invoicing' ),
803
-		'TL' => __( 'Telene&#537;ti', 'invoicing' ),
804
-		'UN' => __( 'Ungheni', 'invoicing' ),
770
+		'C'  => __('Chi&#537;in&#259;u', 'invoicing'),
771
+		'BL' => __('B&#259;l&#539;i', 'invoicing'),
772
+		'AN' => __('Anenii Noi', 'invoicing'),
773
+		'BS' => __('Basarabeasca', 'invoicing'),
774
+		'BR' => __('Briceni', 'invoicing'),
775
+		'CH' => __('Cahul', 'invoicing'),
776
+		'CT' => __('Cantemir', 'invoicing'),
777
+		'CL' => __('C&#259;l&#259;ra&#537;i', 'invoicing'),
778
+		'CS' => __('C&#259;u&#537;eni', 'invoicing'),
779
+		'CM' => __('Cimi&#537;lia', 'invoicing'),
780
+		'CR' => __('Criuleni', 'invoicing'),
781
+		'DN' => __('Dondu&#537;eni', 'invoicing'),
782
+		'DR' => __('Drochia', 'invoicing'),
783
+		'DB' => __('Dub&#259;sari', 'invoicing'),
784
+		'ED' => __('Edine&#539;', 'invoicing'),
785
+		'FL' => __('F&#259;le&#537;ti', 'invoicing'),
786
+		'FR' => __('Flore&#537;ti', 'invoicing'),
787
+		'GE' => __('UTA G&#259;g&#259;uzia', 'invoicing'),
788
+		'GL' => __('Glodeni', 'invoicing'),
789
+		'HN' => __('H&icirc;nce&#537;ti', 'invoicing'),
790
+		'IL' => __('Ialoveni', 'invoicing'),
791
+		'LV' => __('Leova', 'invoicing'),
792
+		'NS' => __('Nisporeni', 'invoicing'),
793
+		'OC' => __('Ocni&#539;a', 'invoicing'),
794
+		'OR' => __('Orhei', 'invoicing'),
795
+		'RZ' => __('Rezina', 'invoicing'),
796
+		'RS' => __('R&icirc;&#537;cani', 'invoicing'),
797
+		'SG' => __('S&icirc;ngerei', 'invoicing'),
798
+		'SR' => __('Soroca', 'invoicing'),
799
+		'ST' => __('Str&#259;&#537;eni', 'invoicing'),
800
+		'SD' => __('&#536;old&#259;ne&#537;ti', 'invoicing'),
801
+		'SV' => __('&#536;tefan Vod&#259;', 'invoicing'),
802
+		'TR' => __('Taraclia', 'invoicing'),
803
+		'TL' => __('Telene&#537;ti', 'invoicing'),
804
+		'UN' => __('Ungheni', 'invoicing'),
805 805
 	),
806 806
 	'MQ' => array(),
807 807
 	'MT' => array(),
808 808
 	'MX' => array( // Mexico States.
809
-		'DF' => __( 'Ciudad de M&eacute;xico', 'invoicing' ),
810
-		'JA' => __( 'Jalisco', 'invoicing' ),
811
-		'NL' => __( 'Nuevo Le&oacute;n', 'invoicing' ),
812
-		'AG' => __( 'Aguascalientes', 'invoicing' ),
813
-		'BC' => __( 'Baja California', 'invoicing' ),
814
-		'BS' => __( 'Baja California Sur', 'invoicing' ),
815
-		'CM' => __( 'Campeche', 'invoicing' ),
816
-		'CS' => __( 'Chiapas', 'invoicing' ),
817
-		'CH' => __( 'Chihuahua', 'invoicing' ),
818
-		'CO' => __( 'Coahuila', 'invoicing' ),
819
-		'CL' => __( 'Colima', 'invoicing' ),
820
-		'DG' => __( 'Durango', 'invoicing' ),
821
-		'GT' => __( 'Guanajuato', 'invoicing' ),
822
-		'GR' => __( 'Guerrero', 'invoicing' ),
823
-		'HG' => __( 'Hidalgo', 'invoicing' ),
824
-		'MX' => __( 'Estado de M&eacute;xico', 'invoicing' ),
825
-		'MI' => __( 'Michoac&aacute;n', 'invoicing' ),
826
-		'MO' => __( 'Morelos', 'invoicing' ),
827
-		'NA' => __( 'Nayarit', 'invoicing' ),
828
-		'OA' => __( 'Oaxaca', 'invoicing' ),
829
-		'PU' => __( 'Puebla', 'invoicing' ),
830
-		'QT' => __( 'Quer&eacute;taro', 'invoicing' ),
831
-		'QR' => __( 'Quintana Roo', 'invoicing' ),
832
-		'SL' => __( 'San Luis Potos&iacute;', 'invoicing' ),
833
-		'SI' => __( 'Sinaloa', 'invoicing' ),
834
-		'SO' => __( 'Sonora', 'invoicing' ),
835
-		'TB' => __( 'Tabasco', 'invoicing' ),
836
-		'TM' => __( 'Tamaulipas', 'invoicing' ),
837
-		'TL' => __( 'Tlaxcala', 'invoicing' ),
838
-		'VE' => __( 'Veracruz', 'invoicing' ),
839
-		'YU' => __( 'Yucat&aacute;n', 'invoicing' ),
840
-		'ZA' => __( 'Zacatecas', 'invoicing' ),
809
+		'DF' => __('Ciudad de M&eacute;xico', 'invoicing'),
810
+		'JA' => __('Jalisco', 'invoicing'),
811
+		'NL' => __('Nuevo Le&oacute;n', 'invoicing'),
812
+		'AG' => __('Aguascalientes', 'invoicing'),
813
+		'BC' => __('Baja California', 'invoicing'),
814
+		'BS' => __('Baja California Sur', 'invoicing'),
815
+		'CM' => __('Campeche', 'invoicing'),
816
+		'CS' => __('Chiapas', 'invoicing'),
817
+		'CH' => __('Chihuahua', 'invoicing'),
818
+		'CO' => __('Coahuila', 'invoicing'),
819
+		'CL' => __('Colima', 'invoicing'),
820
+		'DG' => __('Durango', 'invoicing'),
821
+		'GT' => __('Guanajuato', 'invoicing'),
822
+		'GR' => __('Guerrero', 'invoicing'),
823
+		'HG' => __('Hidalgo', 'invoicing'),
824
+		'MX' => __('Estado de M&eacute;xico', 'invoicing'),
825
+		'MI' => __('Michoac&aacute;n', 'invoicing'),
826
+		'MO' => __('Morelos', 'invoicing'),
827
+		'NA' => __('Nayarit', 'invoicing'),
828
+		'OA' => __('Oaxaca', 'invoicing'),
829
+		'PU' => __('Puebla', 'invoicing'),
830
+		'QT' => __('Quer&eacute;taro', 'invoicing'),
831
+		'QR' => __('Quintana Roo', 'invoicing'),
832
+		'SL' => __('San Luis Potos&iacute;', 'invoicing'),
833
+		'SI' => __('Sinaloa', 'invoicing'),
834
+		'SO' => __('Sonora', 'invoicing'),
835
+		'TB' => __('Tabasco', 'invoicing'),
836
+		'TM' => __('Tamaulipas', 'invoicing'),
837
+		'TL' => __('Tlaxcala', 'invoicing'),
838
+		'VE' => __('Veracruz', 'invoicing'),
839
+		'YU' => __('Yucat&aacute;n', 'invoicing'),
840
+		'ZA' => __('Zacatecas', 'invoicing'),
841 841
 	),
842 842
 	'MY' => array( // Malaysian states.
843
-		'JHR' => __( 'Johor', 'invoicing' ),
844
-		'KDH' => __( 'Kedah', 'invoicing' ),
845
-		'KTN' => __( 'Kelantan', 'invoicing' ),
846
-		'LBN' => __( 'Labuan', 'invoicing' ),
847
-		'MLK' => __( 'Malacca (Melaka)', 'invoicing' ),
848
-		'NSN' => __( 'Negeri Sembilan', 'invoicing' ),
849
-		'PHG' => __( 'Pahang', 'invoicing' ),
850
-		'PNG' => __( 'Penang (Pulau Pinang)', 'invoicing' ),
851
-		'PRK' => __( 'Perak', 'invoicing' ),
852
-		'PLS' => __( 'Perlis', 'invoicing' ),
853
-		'SBH' => __( 'Sabah', 'invoicing' ),
854
-		'SWK' => __( 'Sarawak', 'invoicing' ),
855
-		'SGR' => __( 'Selangor', 'invoicing' ),
856
-		'TRG' => __( 'Terengganu', 'invoicing' ),
857
-		'PJY' => __( 'Putrajaya', 'invoicing' ),
858
-		'KUL' => __( 'Kuala Lumpur', 'invoicing' ),
843
+		'JHR' => __('Johor', 'invoicing'),
844
+		'KDH' => __('Kedah', 'invoicing'),
845
+		'KTN' => __('Kelantan', 'invoicing'),
846
+		'LBN' => __('Labuan', 'invoicing'),
847
+		'MLK' => __('Malacca (Melaka)', 'invoicing'),
848
+		'NSN' => __('Negeri Sembilan', 'invoicing'),
849
+		'PHG' => __('Pahang', 'invoicing'),
850
+		'PNG' => __('Penang (Pulau Pinang)', 'invoicing'),
851
+		'PRK' => __('Perak', 'invoicing'),
852
+		'PLS' => __('Perlis', 'invoicing'),
853
+		'SBH' => __('Sabah', 'invoicing'),
854
+		'SWK' => __('Sarawak', 'invoicing'),
855
+		'SGR' => __('Selangor', 'invoicing'),
856
+		'TRG' => __('Terengganu', 'invoicing'),
857
+		'PJY' => __('Putrajaya', 'invoicing'),
858
+		'KUL' => __('Kuala Lumpur', 'invoicing'),
859 859
 	),
860 860
 	'NG' => array( // Nigerian provinces.
861
-		'AB' => __( 'Abia', 'invoicing' ),
862
-		'FC' => __( 'Abuja', 'invoicing' ),
863
-		'AD' => __( 'Adamawa', 'invoicing' ),
864
-		'AK' => __( 'Akwa Ibom', 'invoicing' ),
865
-		'AN' => __( 'Anambra', 'invoicing' ),
866
-		'BA' => __( 'Bauchi', 'invoicing' ),
867
-		'BY' => __( 'Bayelsa', 'invoicing' ),
868
-		'BE' => __( 'Benue', 'invoicing' ),
869
-		'BO' => __( 'Borno', 'invoicing' ),
870
-		'CR' => __( 'Cross River', 'invoicing' ),
871
-		'DE' => __( 'Delta', 'invoicing' ),
872
-		'EB' => __( 'Ebonyi', 'invoicing' ),
873
-		'ED' => __( 'Edo', 'invoicing' ),
874
-		'EK' => __( 'Ekiti', 'invoicing' ),
875
-		'EN' => __( 'Enugu', 'invoicing' ),
876
-		'GO' => __( 'Gombe', 'invoicing' ),
877
-		'IM' => __( 'Imo', 'invoicing' ),
878
-		'JI' => __( 'Jigawa', 'invoicing' ),
879
-		'KD' => __( 'Kaduna', 'invoicing' ),
880
-		'KN' => __( 'Kano', 'invoicing' ),
881
-		'KT' => __( 'Katsina', 'invoicing' ),
882
-		'KE' => __( 'Kebbi', 'invoicing' ),
883
-		'KO' => __( 'Kogi', 'invoicing' ),
884
-		'KW' => __( 'Kwara', 'invoicing' ),
885
-		'LA' => __( 'Lagos', 'invoicing' ),
886
-		'NA' => __( 'Nasarawa', 'invoicing' ),
887
-		'NI' => __( 'Niger', 'invoicing' ),
888
-		'OG' => __( 'Ogun', 'invoicing' ),
889
-		'ON' => __( 'Ondo', 'invoicing' ),
890
-		'OS' => __( 'Osun', 'invoicing' ),
891
-		'OY' => __( 'Oyo', 'invoicing' ),
892
-		'PL' => __( 'Plateau', 'invoicing' ),
893
-		'RI' => __( 'Rivers', 'invoicing' ),
894
-		'SO' => __( 'Sokoto', 'invoicing' ),
895
-		'TA' => __( 'Taraba', 'invoicing' ),
896
-		'YO' => __( 'Yobe', 'invoicing' ),
897
-		'ZA' => __( 'Zamfara', 'invoicing' ),
861
+		'AB' => __('Abia', 'invoicing'),
862
+		'FC' => __('Abuja', 'invoicing'),
863
+		'AD' => __('Adamawa', 'invoicing'),
864
+		'AK' => __('Akwa Ibom', 'invoicing'),
865
+		'AN' => __('Anambra', 'invoicing'),
866
+		'BA' => __('Bauchi', 'invoicing'),
867
+		'BY' => __('Bayelsa', 'invoicing'),
868
+		'BE' => __('Benue', 'invoicing'),
869
+		'BO' => __('Borno', 'invoicing'),
870
+		'CR' => __('Cross River', 'invoicing'),
871
+		'DE' => __('Delta', 'invoicing'),
872
+		'EB' => __('Ebonyi', 'invoicing'),
873
+		'ED' => __('Edo', 'invoicing'),
874
+		'EK' => __('Ekiti', 'invoicing'),
875
+		'EN' => __('Enugu', 'invoicing'),
876
+		'GO' => __('Gombe', 'invoicing'),
877
+		'IM' => __('Imo', 'invoicing'),
878
+		'JI' => __('Jigawa', 'invoicing'),
879
+		'KD' => __('Kaduna', 'invoicing'),
880
+		'KN' => __('Kano', 'invoicing'),
881
+		'KT' => __('Katsina', 'invoicing'),
882
+		'KE' => __('Kebbi', 'invoicing'),
883
+		'KO' => __('Kogi', 'invoicing'),
884
+		'KW' => __('Kwara', 'invoicing'),
885
+		'LA' => __('Lagos', 'invoicing'),
886
+		'NA' => __('Nasarawa', 'invoicing'),
887
+		'NI' => __('Niger', 'invoicing'),
888
+		'OG' => __('Ogun', 'invoicing'),
889
+		'ON' => __('Ondo', 'invoicing'),
890
+		'OS' => __('Osun', 'invoicing'),
891
+		'OY' => __('Oyo', 'invoicing'),
892
+		'PL' => __('Plateau', 'invoicing'),
893
+		'RI' => __('Rivers', 'invoicing'),
894
+		'SO' => __('Sokoto', 'invoicing'),
895
+		'TA' => __('Taraba', 'invoicing'),
896
+		'YO' => __('Yobe', 'invoicing'),
897
+		'ZA' => __('Zamfara', 'invoicing'),
898 898
 	),
899 899
 	'NL' => array(),
900 900
 	'NO' => array(),
901 901
 	'NP' => array( // Nepal states (Zones).
902
-		'BAG' => __( 'Bagmati', 'invoicing' ),
903
-		'BHE' => __( 'Bheri', 'invoicing' ),
904
-		'DHA' => __( 'Dhaulagiri', 'invoicing' ),
905
-		'GAN' => __( 'Gandaki', 'invoicing' ),
906
-		'JAN' => __( 'Janakpur', 'invoicing' ),
907
-		'KAR' => __( 'Karnali', 'invoicing' ),
908
-		'KOS' => __( 'Koshi', 'invoicing' ),
909
-		'LUM' => __( 'Lumbini', 'invoicing' ),
910
-		'MAH' => __( 'Mahakali', 'invoicing' ),
911
-		'MEC' => __( 'Mechi', 'invoicing' ),
912
-		'NAR' => __( 'Narayani', 'invoicing' ),
913
-		'RAP' => __( 'Rapti', 'invoicing' ),
914
-		'SAG' => __( 'Sagarmatha', 'invoicing' ),
915
-		'SET' => __( 'Seti', 'invoicing' ),
902
+		'BAG' => __('Bagmati', 'invoicing'),
903
+		'BHE' => __('Bheri', 'invoicing'),
904
+		'DHA' => __('Dhaulagiri', 'invoicing'),
905
+		'GAN' => __('Gandaki', 'invoicing'),
906
+		'JAN' => __('Janakpur', 'invoicing'),
907
+		'KAR' => __('Karnali', 'invoicing'),
908
+		'KOS' => __('Koshi', 'invoicing'),
909
+		'LUM' => __('Lumbini', 'invoicing'),
910
+		'MAH' => __('Mahakali', 'invoicing'),
911
+		'MEC' => __('Mechi', 'invoicing'),
912
+		'NAR' => __('Narayani', 'invoicing'),
913
+		'RAP' => __('Rapti', 'invoicing'),
914
+		'SAG' => __('Sagarmatha', 'invoicing'),
915
+		'SET' => __('Seti', 'invoicing'),
916 916
 	),
917 917
 	'NZ' => array( // New Zealand States.
918
-		'NL' => __( 'Northland', 'invoicing' ),
919
-		'AK' => __( 'Auckland', 'invoicing' ),
920
-		'WA' => __( 'Waikato', 'invoicing' ),
921
-		'BP' => __( 'Bay of Plenty', 'invoicing' ),
922
-		'TK' => __( 'Taranaki', 'invoicing' ),
923
-		'GI' => __( 'Gisborne', 'invoicing' ),
924
-		'HB' => __( 'Hawke&rsquo;s Bay', 'invoicing' ),
925
-		'MW' => __( 'Manawatu-Wanganui', 'invoicing' ),
926
-		'WE' => __( 'Wellington', 'invoicing' ),
927
-		'NS' => __( 'Nelson', 'invoicing' ),
928
-		'MB' => __( 'Marlborough', 'invoicing' ),
929
-		'TM' => __( 'Tasman', 'invoicing' ),
930
-		'WC' => __( 'West Coast', 'invoicing' ),
931
-		'CT' => __( 'Canterbury', 'invoicing' ),
932
-		'OT' => __( 'Otago', 'invoicing' ),
933
-		'SL' => __( 'Southland', 'invoicing' ),
918
+		'NL' => __('Northland', 'invoicing'),
919
+		'AK' => __('Auckland', 'invoicing'),
920
+		'WA' => __('Waikato', 'invoicing'),
921
+		'BP' => __('Bay of Plenty', 'invoicing'),
922
+		'TK' => __('Taranaki', 'invoicing'),
923
+		'GI' => __('Gisborne', 'invoicing'),
924
+		'HB' => __('Hawke&rsquo;s Bay', 'invoicing'),
925
+		'MW' => __('Manawatu-Wanganui', 'invoicing'),
926
+		'WE' => __('Wellington', 'invoicing'),
927
+		'NS' => __('Nelson', 'invoicing'),
928
+		'MB' => __('Marlborough', 'invoicing'),
929
+		'TM' => __('Tasman', 'invoicing'),
930
+		'WC' => __('West Coast', 'invoicing'),
931
+		'CT' => __('Canterbury', 'invoicing'),
932
+		'OT' => __('Otago', 'invoicing'),
933
+		'SL' => __('Southland', 'invoicing'),
934 934
 	),
935 935
 	'PE' => array( // Peru states.
936
-		'CAL' => __( 'El Callao', 'invoicing' ),
937
-		'LMA' => __( 'Municipalidad Metropolitana de Lima', 'invoicing' ),
938
-		'AMA' => __( 'Amazonas', 'invoicing' ),
939
-		'ANC' => __( 'Ancash', 'invoicing' ),
940
-		'APU' => __( 'Apur&iacute;mac', 'invoicing' ),
941
-		'ARE' => __( 'Arequipa', 'invoicing' ),
942
-		'AYA' => __( 'Ayacucho', 'invoicing' ),
943
-		'CAJ' => __( 'Cajamarca', 'invoicing' ),
944
-		'CUS' => __( 'Cusco', 'invoicing' ),
945
-		'HUV' => __( 'Huancavelica', 'invoicing' ),
946
-		'HUC' => __( 'Hu&aacute;nuco', 'invoicing' ),
947
-		'ICA' => __( 'Ica', 'invoicing' ),
948
-		'JUN' => __( 'Jun&iacute;n', 'invoicing' ),
949
-		'LAL' => __( 'La Libertad', 'invoicing' ),
950
-		'LAM' => __( 'Lambayeque', 'invoicing' ),
951
-		'LIM' => __( 'Lima', 'invoicing' ),
952
-		'LOR' => __( 'Loreto', 'invoicing' ),
953
-		'MDD' => __( 'Madre de Dios', 'invoicing' ),
954
-		'MOQ' => __( 'Moquegua', 'invoicing' ),
955
-		'PAS' => __( 'Pasco', 'invoicing' ),
956
-		'PIU' => __( 'Piura', 'invoicing' ),
957
-		'PUN' => __( 'Puno', 'invoicing' ),
958
-		'SAM' => __( 'San Mart&iacute;n', 'invoicing' ),
959
-		'TAC' => __( 'Tacna', 'invoicing' ),
960
-		'TUM' => __( 'Tumbes', 'invoicing' ),
961
-		'UCA' => __( 'Ucayali', 'invoicing' ),
936
+		'CAL' => __('El Callao', 'invoicing'),
937
+		'LMA' => __('Municipalidad Metropolitana de Lima', 'invoicing'),
938
+		'AMA' => __('Amazonas', 'invoicing'),
939
+		'ANC' => __('Ancash', 'invoicing'),
940
+		'APU' => __('Apur&iacute;mac', 'invoicing'),
941
+		'ARE' => __('Arequipa', 'invoicing'),
942
+		'AYA' => __('Ayacucho', 'invoicing'),
943
+		'CAJ' => __('Cajamarca', 'invoicing'),
944
+		'CUS' => __('Cusco', 'invoicing'),
945
+		'HUV' => __('Huancavelica', 'invoicing'),
946
+		'HUC' => __('Hu&aacute;nuco', 'invoicing'),
947
+		'ICA' => __('Ica', 'invoicing'),
948
+		'JUN' => __('Jun&iacute;n', 'invoicing'),
949
+		'LAL' => __('La Libertad', 'invoicing'),
950
+		'LAM' => __('Lambayeque', 'invoicing'),
951
+		'LIM' => __('Lima', 'invoicing'),
952
+		'LOR' => __('Loreto', 'invoicing'),
953
+		'MDD' => __('Madre de Dios', 'invoicing'),
954
+		'MOQ' => __('Moquegua', 'invoicing'),
955
+		'PAS' => __('Pasco', 'invoicing'),
956
+		'PIU' => __('Piura', 'invoicing'),
957
+		'PUN' => __('Puno', 'invoicing'),
958
+		'SAM' => __('San Mart&iacute;n', 'invoicing'),
959
+		'TAC' => __('Tacna', 'invoicing'),
960
+		'TUM' => __('Tumbes', 'invoicing'),
961
+		'UCA' => __('Ucayali', 'invoicing'),
962 962
 	),
963 963
 
964 964
 	/**
965 965
 	 * Philippine Provinces.
966 966
 	 */
967 967
 	'PH' => array(
968
-		'ABR' => __( 'Abra', 'invoicing' ),
969
-		'AGN' => __( 'Agusan del Norte', 'invoicing' ),
970
-		'AGS' => __( 'Agusan del Sur', 'invoicing' ),
971
-		'AKL' => __( 'Aklan', 'invoicing' ),
972
-		'ALB' => __( 'Albay', 'invoicing' ),
973
-		'ANT' => __( 'Antique', 'invoicing' ),
974
-		'APA' => __( 'Apayao', 'invoicing' ),
975
-		'AUR' => __( 'Aurora', 'invoicing' ),
976
-		'BAS' => __( 'Basilan', 'invoicing' ),
977
-		'BAN' => __( 'Bataan', 'invoicing' ),
978
-		'BTN' => __( 'Batanes', 'invoicing' ),
979
-		'BTG' => __( 'Batangas', 'invoicing' ),
980
-		'BEN' => __( 'Benguet', 'invoicing' ),
981
-		'BIL' => __( 'Biliran', 'invoicing' ),
982
-		'BOH' => __( 'Bohol', 'invoicing' ),
983
-		'BUK' => __( 'Bukidnon', 'invoicing' ),
984
-		'BUL' => __( 'Bulacan', 'invoicing' ),
985
-		'CAG' => __( 'Cagayan', 'invoicing' ),
986
-		'CAN' => __( 'Camarines Norte', 'invoicing' ),
987
-		'CAS' => __( 'Camarines Sur', 'invoicing' ),
988
-		'CAM' => __( 'Camiguin', 'invoicing' ),
989
-		'CAP' => __( 'Capiz', 'invoicing' ),
990
-		'CAT' => __( 'Catanduanes', 'invoicing' ),
991
-		'CAV' => __( 'Cavite', 'invoicing' ),
992
-		'CEB' => __( 'Cebu', 'invoicing' ),
993
-		'COM' => __( 'Compostela Valley', 'invoicing' ),
994
-		'NCO' => __( 'Cotabato', 'invoicing' ),
995
-		'DAV' => __( 'Davao del Norte', 'invoicing' ),
996
-		'DAS' => __( 'Davao del Sur', 'invoicing' ),
997
-		'DAC' => __( 'Davao Occidental', 'invoicing' ),
998
-		'DAO' => __( 'Davao Oriental', 'invoicing' ),
999
-		'DIN' => __( 'Dinagat Islands', 'invoicing' ),
1000
-		'EAS' => __( 'Eastern Samar', 'invoicing' ),
1001
-		'GUI' => __( 'Guimaras', 'invoicing' ),
1002
-		'IFU' => __( 'Ifugao', 'invoicing' ),
1003
-		'ILN' => __( 'Ilocos Norte', 'invoicing' ),
1004
-		'ILS' => __( 'Ilocos Sur', 'invoicing' ),
1005
-		'ILI' => __( 'Iloilo', 'invoicing' ),
1006
-		'ISA' => __( 'Isabela', 'invoicing' ),
1007
-		'KAL' => __( 'Kalinga', 'invoicing' ),
1008
-		'LUN' => __( 'La Union', 'invoicing' ),
1009
-		'LAG' => __( 'Laguna', 'invoicing' ),
1010
-		'LAN' => __( 'Lanao del Norte', 'invoicing' ),
1011
-		'LAS' => __( 'Lanao del Sur', 'invoicing' ),
1012
-		'LEY' => __( 'Leyte', 'invoicing' ),
1013
-		'MAG' => __( 'Maguindanao', 'invoicing' ),
1014
-		'MAD' => __( 'Marinduque', 'invoicing' ),
1015
-		'MAS' => __( 'Masbate', 'invoicing' ),
1016
-		'MSC' => __( 'Misamis Occidental', 'invoicing' ),
1017
-		'MSR' => __( 'Misamis Oriental', 'invoicing' ),
1018
-		'MOU' => __( 'Mountain Province', 'invoicing' ),
1019
-		'NEC' => __( 'Negros Occidental', 'invoicing' ),
1020
-		'NER' => __( 'Negros Oriental', 'invoicing' ),
1021
-		'NSA' => __( 'Northern Samar', 'invoicing' ),
1022
-		'NUE' => __( 'Nueva Ecija', 'invoicing' ),
1023
-		'NUV' => __( 'Nueva Vizcaya', 'invoicing' ),
1024
-		'MDC' => __( 'Occidental Mindoro', 'invoicing' ),
1025
-		'MDR' => __( 'Oriental Mindoro', 'invoicing' ),
1026
-		'PLW' => __( 'Palawan', 'invoicing' ),
1027
-		'PAM' => __( 'Pampanga', 'invoicing' ),
1028
-		'PAN' => __( 'Pangasinan', 'invoicing' ),
1029
-		'QUE' => __( 'Quezon', 'invoicing' ),
1030
-		'QUI' => __( 'Quirino', 'invoicing' ),
1031
-		'RIZ' => __( 'Rizal', 'invoicing' ),
1032
-		'ROM' => __( 'Romblon', 'invoicing' ),
1033
-		'WSA' => __( 'Samar', 'invoicing' ),
1034
-		'SAR' => __( 'Sarangani', 'invoicing' ),
1035
-		'SIQ' => __( 'Siquijor', 'invoicing' ),
1036
-		'SOR' => __( 'Sorsogon', 'invoicing' ),
1037
-		'SCO' => __( 'South Cotabato', 'invoicing' ),
1038
-		'SLE' => __( 'Southern Leyte', 'invoicing' ),
1039
-		'SUK' => __( 'Sultan Kudarat', 'invoicing' ),
1040
-		'SLU' => __( 'Sulu', 'invoicing' ),
1041
-		'SUN' => __( 'Surigao del Norte', 'invoicing' ),
1042
-		'SUR' => __( 'Surigao del Sur', 'invoicing' ),
1043
-		'TAR' => __( 'Tarlac', 'invoicing' ),
1044
-		'TAW' => __( 'Tawi-Tawi', 'invoicing' ),
1045
-		'ZMB' => __( 'Zambales', 'invoicing' ),
1046
-		'ZAN' => __( 'Zamboanga del Norte', 'invoicing' ),
1047
-		'ZAS' => __( 'Zamboanga del Sur', 'invoicing' ),
1048
-		'ZSI' => __( 'Zamboanga Sibugay', 'invoicing' ),
1049
-		'00'  => __( 'Metro Manila', 'invoicing' ),
968
+		'ABR' => __('Abra', 'invoicing'),
969
+		'AGN' => __('Agusan del Norte', 'invoicing'),
970
+		'AGS' => __('Agusan del Sur', 'invoicing'),
971
+		'AKL' => __('Aklan', 'invoicing'),
972
+		'ALB' => __('Albay', 'invoicing'),
973
+		'ANT' => __('Antique', 'invoicing'),
974
+		'APA' => __('Apayao', 'invoicing'),
975
+		'AUR' => __('Aurora', 'invoicing'),
976
+		'BAS' => __('Basilan', 'invoicing'),
977
+		'BAN' => __('Bataan', 'invoicing'),
978
+		'BTN' => __('Batanes', 'invoicing'),
979
+		'BTG' => __('Batangas', 'invoicing'),
980
+		'BEN' => __('Benguet', 'invoicing'),
981
+		'BIL' => __('Biliran', 'invoicing'),
982
+		'BOH' => __('Bohol', 'invoicing'),
983
+		'BUK' => __('Bukidnon', 'invoicing'),
984
+		'BUL' => __('Bulacan', 'invoicing'),
985
+		'CAG' => __('Cagayan', 'invoicing'),
986
+		'CAN' => __('Camarines Norte', 'invoicing'),
987
+		'CAS' => __('Camarines Sur', 'invoicing'),
988
+		'CAM' => __('Camiguin', 'invoicing'),
989
+		'CAP' => __('Capiz', 'invoicing'),
990
+		'CAT' => __('Catanduanes', 'invoicing'),
991
+		'CAV' => __('Cavite', 'invoicing'),
992
+		'CEB' => __('Cebu', 'invoicing'),
993
+		'COM' => __('Compostela Valley', 'invoicing'),
994
+		'NCO' => __('Cotabato', 'invoicing'),
995
+		'DAV' => __('Davao del Norte', 'invoicing'),
996
+		'DAS' => __('Davao del Sur', 'invoicing'),
997
+		'DAC' => __('Davao Occidental', 'invoicing'),
998
+		'DAO' => __('Davao Oriental', 'invoicing'),
999
+		'DIN' => __('Dinagat Islands', 'invoicing'),
1000
+		'EAS' => __('Eastern Samar', 'invoicing'),
1001
+		'GUI' => __('Guimaras', 'invoicing'),
1002
+		'IFU' => __('Ifugao', 'invoicing'),
1003
+		'ILN' => __('Ilocos Norte', 'invoicing'),
1004
+		'ILS' => __('Ilocos Sur', 'invoicing'),
1005
+		'ILI' => __('Iloilo', 'invoicing'),
1006
+		'ISA' => __('Isabela', 'invoicing'),
1007
+		'KAL' => __('Kalinga', 'invoicing'),
1008
+		'LUN' => __('La Union', 'invoicing'),
1009
+		'LAG' => __('Laguna', 'invoicing'),
1010
+		'LAN' => __('Lanao del Norte', 'invoicing'),
1011
+		'LAS' => __('Lanao del Sur', 'invoicing'),
1012
+		'LEY' => __('Leyte', 'invoicing'),
1013
+		'MAG' => __('Maguindanao', 'invoicing'),
1014
+		'MAD' => __('Marinduque', 'invoicing'),
1015
+		'MAS' => __('Masbate', 'invoicing'),
1016
+		'MSC' => __('Misamis Occidental', 'invoicing'),
1017
+		'MSR' => __('Misamis Oriental', 'invoicing'),
1018
+		'MOU' => __('Mountain Province', 'invoicing'),
1019
+		'NEC' => __('Negros Occidental', 'invoicing'),
1020
+		'NER' => __('Negros Oriental', 'invoicing'),
1021
+		'NSA' => __('Northern Samar', 'invoicing'),
1022
+		'NUE' => __('Nueva Ecija', 'invoicing'),
1023
+		'NUV' => __('Nueva Vizcaya', 'invoicing'),
1024
+		'MDC' => __('Occidental Mindoro', 'invoicing'),
1025
+		'MDR' => __('Oriental Mindoro', 'invoicing'),
1026
+		'PLW' => __('Palawan', 'invoicing'),
1027
+		'PAM' => __('Pampanga', 'invoicing'),
1028
+		'PAN' => __('Pangasinan', 'invoicing'),
1029
+		'QUE' => __('Quezon', 'invoicing'),
1030
+		'QUI' => __('Quirino', 'invoicing'),
1031
+		'RIZ' => __('Rizal', 'invoicing'),
1032
+		'ROM' => __('Romblon', 'invoicing'),
1033
+		'WSA' => __('Samar', 'invoicing'),
1034
+		'SAR' => __('Sarangani', 'invoicing'),
1035
+		'SIQ' => __('Siquijor', 'invoicing'),
1036
+		'SOR' => __('Sorsogon', 'invoicing'),
1037
+		'SCO' => __('South Cotabato', 'invoicing'),
1038
+		'SLE' => __('Southern Leyte', 'invoicing'),
1039
+		'SUK' => __('Sultan Kudarat', 'invoicing'),
1040
+		'SLU' => __('Sulu', 'invoicing'),
1041
+		'SUN' => __('Surigao del Norte', 'invoicing'),
1042
+		'SUR' => __('Surigao del Sur', 'invoicing'),
1043
+		'TAR' => __('Tarlac', 'invoicing'),
1044
+		'TAW' => __('Tawi-Tawi', 'invoicing'),
1045
+		'ZMB' => __('Zambales', 'invoicing'),
1046
+		'ZAN' => __('Zamboanga del Norte', 'invoicing'),
1047
+		'ZAS' => __('Zamboanga del Sur', 'invoicing'),
1048
+		'ZSI' => __('Zamboanga Sibugay', 'invoicing'),
1049
+		'00'  => __('Metro Manila', 'invoicing'),
1050 1050
 	),
1051 1051
 	'PK' => array( // Pakistan's states.
1052
-		'JK' => __( 'Azad Kashmir', 'invoicing' ),
1053
-		'BA' => __( 'Balochistan', 'invoicing' ),
1054
-		'TA' => __( 'FATA', 'invoicing' ),
1055
-		'GB' => __( 'Gilgit Baltistan', 'invoicing' ),
1056
-		'IS' => __( 'Islamabad Capital Territory', 'invoicing' ),
1057
-		'KP' => __( 'Khyber Pakhtunkhwa', 'invoicing' ),
1058
-		'PB' => __( 'Punjab', 'invoicing' ),
1059
-		'SD' => __( 'Sindh', 'invoicing' ),
1052
+		'JK' => __('Azad Kashmir', 'invoicing'),
1053
+		'BA' => __('Balochistan', 'invoicing'),
1054
+		'TA' => __('FATA', 'invoicing'),
1055
+		'GB' => __('Gilgit Baltistan', 'invoicing'),
1056
+		'IS' => __('Islamabad Capital Territory', 'invoicing'),
1057
+		'KP' => __('Khyber Pakhtunkhwa', 'invoicing'),
1058
+		'PB' => __('Punjab', 'invoicing'),
1059
+		'SD' => __('Sindh', 'invoicing'),
1060 1060
 	),
1061 1061
 	'PL' => array(),
1062 1062
 	'PT' => array(),
1063 1063
 	'PY' => array( // Paraguay states.
1064
-		'PY-ASU' => __( 'Asunci&oacute;n', 'invoicing' ),
1065
-		'PY-1'   => __( 'Concepci&oacute;n', 'invoicing' ),
1066
-		'PY-2'   => __( 'San Pedro', 'invoicing' ),
1067
-		'PY-3'   => __( 'Cordillera', 'invoicing' ),
1068
-		'PY-4'   => __( 'Guair&aacute;', 'invoicing' ),
1069
-		'PY-5'   => __( 'Caaguaz&uacute;', 'invoicing' ),
1070
-		'PY-6'   => __( 'Caazap&aacute;', 'invoicing' ),
1071
-		'PY-7'   => __( 'Itap&uacute;a', 'invoicing' ),
1072
-		'PY-8'   => __( 'Misiones', 'invoicing' ),
1073
-		'PY-9'   => __( 'Paraguar&iacute;', 'invoicing' ),
1074
-		'PY-10'  => __( 'Alto Paran&aacute;', 'invoicing' ),
1075
-		'PY-11'  => __( 'Central', 'invoicing' ),
1076
-		'PY-12'  => __( '&Ntilde;eembuc&uacute;', 'invoicing' ),
1077
-		'PY-13'  => __( 'Amambay', 'invoicing' ),
1078
-		'PY-14'  => __( 'Canindey&uacute;', 'invoicing' ),
1079
-		'PY-15'  => __( 'Presidente Hayes', 'invoicing' ),
1080
-		'PY-16'  => __( 'Alto Paraguay', 'invoicing' ),
1081
-		'PY-17'  => __( 'Boquer&oacute;n', 'invoicing' ),
1064
+		'PY-ASU' => __('Asunci&oacute;n', 'invoicing'),
1065
+		'PY-1'   => __('Concepci&oacute;n', 'invoicing'),
1066
+		'PY-2'   => __('San Pedro', 'invoicing'),
1067
+		'PY-3'   => __('Cordillera', 'invoicing'),
1068
+		'PY-4'   => __('Guair&aacute;', 'invoicing'),
1069
+		'PY-5'   => __('Caaguaz&uacute;', 'invoicing'),
1070
+		'PY-6'   => __('Caazap&aacute;', 'invoicing'),
1071
+		'PY-7'   => __('Itap&uacute;a', 'invoicing'),
1072
+		'PY-8'   => __('Misiones', 'invoicing'),
1073
+		'PY-9'   => __('Paraguar&iacute;', 'invoicing'),
1074
+		'PY-10'  => __('Alto Paran&aacute;', 'invoicing'),
1075
+		'PY-11'  => __('Central', 'invoicing'),
1076
+		'PY-12'  => __('&Ntilde;eembuc&uacute;', 'invoicing'),
1077
+		'PY-13'  => __('Amambay', 'invoicing'),
1078
+		'PY-14'  => __('Canindey&uacute;', 'invoicing'),
1079
+		'PY-15'  => __('Presidente Hayes', 'invoicing'),
1080
+		'PY-16'  => __('Alto Paraguay', 'invoicing'),
1081
+		'PY-17'  => __('Boquer&oacute;n', 'invoicing'),
1082 1082
 	),
1083 1083
 	'RE' => array(),
1084 1084
 	'RO' => array( // Romania states.
1085
-		'AB' => __( 'Alba', 'invoicing' ),
1086
-		'AR' => __( 'Arad', 'invoicing' ),
1087
-		'AG' => __( 'Arge&#537;', 'invoicing' ),
1088
-		'BC' => __( 'Bac&#259;u', 'invoicing' ),
1089
-		'BH' => __( 'Bihor', 'invoicing' ),
1090
-		'BN' => __( 'Bistri&#539;a-N&#259;s&#259;ud', 'invoicing' ),
1091
-		'BT' => __( 'Boto&#537;ani', 'invoicing' ),
1092
-		'BR' => __( 'Br&#259;ila', 'invoicing' ),
1093
-		'BV' => __( 'Bra&#537;ov', 'invoicing' ),
1094
-		'B'  => __( 'Bucure&#537;ti', 'invoicing' ),
1095
-		'BZ' => __( 'Buz&#259;u', 'invoicing' ),
1096
-		'CL' => __( 'C&#259;l&#259;ra&#537;i', 'invoicing' ),
1097
-		'CS' => __( 'Cara&#537;-Severin', 'invoicing' ),
1098
-		'CJ' => __( 'Cluj', 'invoicing' ),
1099
-		'CT' => __( 'Constan&#539;a', 'invoicing' ),
1100
-		'CV' => __( 'Covasna', 'invoicing' ),
1101
-		'DB' => __( 'D&acirc;mbovi&#539;a', 'invoicing' ),
1102
-		'DJ' => __( 'Dolj', 'invoicing' ),
1103
-		'GL' => __( 'Gala&#539;i', 'invoicing' ),
1104
-		'GR' => __( 'Giurgiu', 'invoicing' ),
1105
-		'GJ' => __( 'Gorj', 'invoicing' ),
1106
-		'HR' => __( 'Harghita', 'invoicing' ),
1107
-		'HD' => __( 'Hunedoara', 'invoicing' ),
1108
-		'IL' => __( 'Ialomi&#539;a', 'invoicing' ),
1109
-		'IS' => __( 'Ia&#537;i', 'invoicing' ),
1110
-		'IF' => __( 'Ilfov', 'invoicing' ),
1111
-		'MM' => __( 'Maramure&#537;', 'invoicing' ),
1112
-		'MH' => __( 'Mehedin&#539;i', 'invoicing' ),
1113
-		'MS' => __( 'Mure&#537;', 'invoicing' ),
1114
-		'NT' => __( 'Neam&#539;', 'invoicing' ),
1115
-		'OT' => __( 'Olt', 'invoicing' ),
1116
-		'PH' => __( 'Prahova', 'invoicing' ),
1117
-		'SJ' => __( 'S&#259;laj', 'invoicing' ),
1118
-		'SM' => __( 'Satu Mare', 'invoicing' ),
1119
-		'SB' => __( 'Sibiu', 'invoicing' ),
1120
-		'SV' => __( 'Suceava', 'invoicing' ),
1121
-		'TR' => __( 'Teleorman', 'invoicing' ),
1122
-		'TM' => __( 'Timi&#537;', 'invoicing' ),
1123
-		'TL' => __( 'Tulcea', 'invoicing' ),
1124
-		'VL' => __( 'V&acirc;lcea', 'invoicing' ),
1125
-		'VS' => __( 'Vaslui', 'invoicing' ),
1126
-		'VN' => __( 'Vrancea', 'invoicing' ),
1085
+		'AB' => __('Alba', 'invoicing'),
1086
+		'AR' => __('Arad', 'invoicing'),
1087
+		'AG' => __('Arge&#537;', 'invoicing'),
1088
+		'BC' => __('Bac&#259;u', 'invoicing'),
1089
+		'BH' => __('Bihor', 'invoicing'),
1090
+		'BN' => __('Bistri&#539;a-N&#259;s&#259;ud', 'invoicing'),
1091
+		'BT' => __('Boto&#537;ani', 'invoicing'),
1092
+		'BR' => __('Br&#259;ila', 'invoicing'),
1093
+		'BV' => __('Bra&#537;ov', 'invoicing'),
1094
+		'B'  => __('Bucure&#537;ti', 'invoicing'),
1095
+		'BZ' => __('Buz&#259;u', 'invoicing'),
1096
+		'CL' => __('C&#259;l&#259;ra&#537;i', 'invoicing'),
1097
+		'CS' => __('Cara&#537;-Severin', 'invoicing'),
1098
+		'CJ' => __('Cluj', 'invoicing'),
1099
+		'CT' => __('Constan&#539;a', 'invoicing'),
1100
+		'CV' => __('Covasna', 'invoicing'),
1101
+		'DB' => __('D&acirc;mbovi&#539;a', 'invoicing'),
1102
+		'DJ' => __('Dolj', 'invoicing'),
1103
+		'GL' => __('Gala&#539;i', 'invoicing'),
1104
+		'GR' => __('Giurgiu', 'invoicing'),
1105
+		'GJ' => __('Gorj', 'invoicing'),
1106
+		'HR' => __('Harghita', 'invoicing'),
1107
+		'HD' => __('Hunedoara', 'invoicing'),
1108
+		'IL' => __('Ialomi&#539;a', 'invoicing'),
1109
+		'IS' => __('Ia&#537;i', 'invoicing'),
1110
+		'IF' => __('Ilfov', 'invoicing'),
1111
+		'MM' => __('Maramure&#537;', 'invoicing'),
1112
+		'MH' => __('Mehedin&#539;i', 'invoicing'),
1113
+		'MS' => __('Mure&#537;', 'invoicing'),
1114
+		'NT' => __('Neam&#539;', 'invoicing'),
1115
+		'OT' => __('Olt', 'invoicing'),
1116
+		'PH' => __('Prahova', 'invoicing'),
1117
+		'SJ' => __('S&#259;laj', 'invoicing'),
1118
+		'SM' => __('Satu Mare', 'invoicing'),
1119
+		'SB' => __('Sibiu', 'invoicing'),
1120
+		'SV' => __('Suceava', 'invoicing'),
1121
+		'TR' => __('Teleorman', 'invoicing'),
1122
+		'TM' => __('Timi&#537;', 'invoicing'),
1123
+		'TL' => __('Tulcea', 'invoicing'),
1124
+		'VL' => __('V&acirc;lcea', 'invoicing'),
1125
+		'VS' => __('Vaslui', 'invoicing'),
1126
+		'VN' => __('Vrancea', 'invoicing'),
1127 1127
 	),
1128 1128
 	'RS' => array(),
1129 1129
 	'SG' => array(),
1130 1130
 	'SK' => array(),
1131 1131
 	'SI' => array(),
1132 1132
 	'TH' => array( // Thailand states.
1133
-		'TH-37' => __( 'Amnat Charoen', 'invoicing' ),
1134
-		'TH-15' => __( 'Ang Thong', 'invoicing' ),
1135
-		'TH-14' => __( 'Ayutthaya', 'invoicing' ),
1136
-		'TH-10' => __( 'Bangkok', 'invoicing' ),
1137
-		'TH-38' => __( 'Bueng Kan', 'invoicing' ),
1138
-		'TH-31' => __( 'Buri Ram', 'invoicing' ),
1139
-		'TH-24' => __( 'Chachoengsao', 'invoicing' ),
1140
-		'TH-18' => __( 'Chai Nat', 'invoicing' ),
1141
-		'TH-36' => __( 'Chaiyaphum', 'invoicing' ),
1142
-		'TH-22' => __( 'Chanthaburi', 'invoicing' ),
1143
-		'TH-50' => __( 'Chiang Mai', 'invoicing' ),
1144
-		'TH-57' => __( 'Chiang Rai', 'invoicing' ),
1145
-		'TH-20' => __( 'Chonburi', 'invoicing' ),
1146
-		'TH-86' => __( 'Chumphon', 'invoicing' ),
1147
-		'TH-46' => __( 'Kalasin', 'invoicing' ),
1148
-		'TH-62' => __( 'Kamphaeng Phet', 'invoicing' ),
1149
-		'TH-71' => __( 'Kanchanaburi', 'invoicing' ),
1150
-		'TH-40' => __( 'Khon Kaen', 'invoicing' ),
1151
-		'TH-81' => __( 'Krabi', 'invoicing' ),
1152
-		'TH-52' => __( 'Lampang', 'invoicing' ),
1153
-		'TH-51' => __( 'Lamphun', 'invoicing' ),
1154
-		'TH-42' => __( 'Loei', 'invoicing' ),
1155
-		'TH-16' => __( 'Lopburi', 'invoicing' ),
1156
-		'TH-58' => __( 'Mae Hong Son', 'invoicing' ),
1157
-		'TH-44' => __( 'Maha Sarakham', 'invoicing' ),
1158
-		'TH-49' => __( 'Mukdahan', 'invoicing' ),
1159
-		'TH-26' => __( 'Nakhon Nayok', 'invoicing' ),
1160
-		'TH-73' => __( 'Nakhon Pathom', 'invoicing' ),
1161
-		'TH-48' => __( 'Nakhon Phanom', 'invoicing' ),
1162
-		'TH-30' => __( 'Nakhon Ratchasima', 'invoicing' ),
1163
-		'TH-60' => __( 'Nakhon Sawan', 'invoicing' ),
1164
-		'TH-80' => __( 'Nakhon Si Thammarat', 'invoicing' ),
1165
-		'TH-55' => __( 'Nan', 'invoicing' ),
1166
-		'TH-96' => __( 'Narathiwat', 'invoicing' ),
1167
-		'TH-39' => __( 'Nong Bua Lam Phu', 'invoicing' ),
1168
-		'TH-43' => __( 'Nong Khai', 'invoicing' ),
1169
-		'TH-12' => __( 'Nonthaburi', 'invoicing' ),
1170
-		'TH-13' => __( 'Pathum Thani', 'invoicing' ),
1171
-		'TH-94' => __( 'Pattani', 'invoicing' ),
1172
-		'TH-82' => __( 'Phang Nga', 'invoicing' ),
1173
-		'TH-93' => __( 'Phatthalung', 'invoicing' ),
1174
-		'TH-56' => __( 'Phayao', 'invoicing' ),
1175
-		'TH-67' => __( 'Phetchabun', 'invoicing' ),
1176
-		'TH-76' => __( 'Phetchaburi', 'invoicing' ),
1177
-		'TH-66' => __( 'Phichit', 'invoicing' ),
1178
-		'TH-65' => __( 'Phitsanulok', 'invoicing' ),
1179
-		'TH-54' => __( 'Phrae', 'invoicing' ),
1180
-		'TH-83' => __( 'Phuket', 'invoicing' ),
1181
-		'TH-25' => __( 'Prachin Buri', 'invoicing' ),
1182
-		'TH-77' => __( 'Prachuap Khiri Khan', 'invoicing' ),
1183
-		'TH-85' => __( 'Ranong', 'invoicing' ),
1184
-		'TH-70' => __( 'Ratchaburi', 'invoicing' ),
1185
-		'TH-21' => __( 'Rayong', 'invoicing' ),
1186
-		'TH-45' => __( 'Roi Et', 'invoicing' ),
1187
-		'TH-27' => __( 'Sa Kaeo', 'invoicing' ),
1188
-		'TH-47' => __( 'Sakon Nakhon', 'invoicing' ),
1189
-		'TH-11' => __( 'Samut Prakan', 'invoicing' ),
1190
-		'TH-74' => __( 'Samut Sakhon', 'invoicing' ),
1191
-		'TH-75' => __( 'Samut Songkhram', 'invoicing' ),
1192
-		'TH-19' => __( 'Saraburi', 'invoicing' ),
1193
-		'TH-91' => __( 'Satun', 'invoicing' ),
1194
-		'TH-17' => __( 'Sing Buri', 'invoicing' ),
1195
-		'TH-33' => __( 'Sisaket', 'invoicing' ),
1196
-		'TH-90' => __( 'Songkhla', 'invoicing' ),
1197
-		'TH-64' => __( 'Sukhothai', 'invoicing' ),
1198
-		'TH-72' => __( 'Suphan Buri', 'invoicing' ),
1199
-		'TH-84' => __( 'Surat Thani', 'invoicing' ),
1200
-		'TH-32' => __( 'Surin', 'invoicing' ),
1201
-		'TH-63' => __( 'Tak', 'invoicing' ),
1202
-		'TH-92' => __( 'Trang', 'invoicing' ),
1203
-		'TH-23' => __( 'Trat', 'invoicing' ),
1204
-		'TH-34' => __( 'Ubon Ratchathani', 'invoicing' ),
1205
-		'TH-41' => __( 'Udon Thani', 'invoicing' ),
1206
-		'TH-61' => __( 'Uthai Thani', 'invoicing' ),
1207
-		'TH-53' => __( 'Uttaradit', 'invoicing' ),
1208
-		'TH-95' => __( 'Yala', 'invoicing' ),
1209
-		'TH-35' => __( 'Yasothon', 'invoicing' ),
1133
+		'TH-37' => __('Amnat Charoen', 'invoicing'),
1134
+		'TH-15' => __('Ang Thong', 'invoicing'),
1135
+		'TH-14' => __('Ayutthaya', 'invoicing'),
1136
+		'TH-10' => __('Bangkok', 'invoicing'),
1137
+		'TH-38' => __('Bueng Kan', 'invoicing'),
1138
+		'TH-31' => __('Buri Ram', 'invoicing'),
1139
+		'TH-24' => __('Chachoengsao', 'invoicing'),
1140
+		'TH-18' => __('Chai Nat', 'invoicing'),
1141
+		'TH-36' => __('Chaiyaphum', 'invoicing'),
1142
+		'TH-22' => __('Chanthaburi', 'invoicing'),
1143
+		'TH-50' => __('Chiang Mai', 'invoicing'),
1144
+		'TH-57' => __('Chiang Rai', 'invoicing'),
1145
+		'TH-20' => __('Chonburi', 'invoicing'),
1146
+		'TH-86' => __('Chumphon', 'invoicing'),
1147
+		'TH-46' => __('Kalasin', 'invoicing'),
1148
+		'TH-62' => __('Kamphaeng Phet', 'invoicing'),
1149
+		'TH-71' => __('Kanchanaburi', 'invoicing'),
1150
+		'TH-40' => __('Khon Kaen', 'invoicing'),
1151
+		'TH-81' => __('Krabi', 'invoicing'),
1152
+		'TH-52' => __('Lampang', 'invoicing'),
1153
+		'TH-51' => __('Lamphun', 'invoicing'),
1154
+		'TH-42' => __('Loei', 'invoicing'),
1155
+		'TH-16' => __('Lopburi', 'invoicing'),
1156
+		'TH-58' => __('Mae Hong Son', 'invoicing'),
1157
+		'TH-44' => __('Maha Sarakham', 'invoicing'),
1158
+		'TH-49' => __('Mukdahan', 'invoicing'),
1159
+		'TH-26' => __('Nakhon Nayok', 'invoicing'),
1160
+		'TH-73' => __('Nakhon Pathom', 'invoicing'),
1161
+		'TH-48' => __('Nakhon Phanom', 'invoicing'),
1162
+		'TH-30' => __('Nakhon Ratchasima', 'invoicing'),
1163
+		'TH-60' => __('Nakhon Sawan', 'invoicing'),
1164
+		'TH-80' => __('Nakhon Si Thammarat', 'invoicing'),
1165
+		'TH-55' => __('Nan', 'invoicing'),
1166
+		'TH-96' => __('Narathiwat', 'invoicing'),
1167
+		'TH-39' => __('Nong Bua Lam Phu', 'invoicing'),
1168
+		'TH-43' => __('Nong Khai', 'invoicing'),
1169
+		'TH-12' => __('Nonthaburi', 'invoicing'),
1170
+		'TH-13' => __('Pathum Thani', 'invoicing'),
1171
+		'TH-94' => __('Pattani', 'invoicing'),
1172
+		'TH-82' => __('Phang Nga', 'invoicing'),
1173
+		'TH-93' => __('Phatthalung', 'invoicing'),
1174
+		'TH-56' => __('Phayao', 'invoicing'),
1175
+		'TH-67' => __('Phetchabun', 'invoicing'),
1176
+		'TH-76' => __('Phetchaburi', 'invoicing'),
1177
+		'TH-66' => __('Phichit', 'invoicing'),
1178
+		'TH-65' => __('Phitsanulok', 'invoicing'),
1179
+		'TH-54' => __('Phrae', 'invoicing'),
1180
+		'TH-83' => __('Phuket', 'invoicing'),
1181
+		'TH-25' => __('Prachin Buri', 'invoicing'),
1182
+		'TH-77' => __('Prachuap Khiri Khan', 'invoicing'),
1183
+		'TH-85' => __('Ranong', 'invoicing'),
1184
+		'TH-70' => __('Ratchaburi', 'invoicing'),
1185
+		'TH-21' => __('Rayong', 'invoicing'),
1186
+		'TH-45' => __('Roi Et', 'invoicing'),
1187
+		'TH-27' => __('Sa Kaeo', 'invoicing'),
1188
+		'TH-47' => __('Sakon Nakhon', 'invoicing'),
1189
+		'TH-11' => __('Samut Prakan', 'invoicing'),
1190
+		'TH-74' => __('Samut Sakhon', 'invoicing'),
1191
+		'TH-75' => __('Samut Songkhram', 'invoicing'),
1192
+		'TH-19' => __('Saraburi', 'invoicing'),
1193
+		'TH-91' => __('Satun', 'invoicing'),
1194
+		'TH-17' => __('Sing Buri', 'invoicing'),
1195
+		'TH-33' => __('Sisaket', 'invoicing'),
1196
+		'TH-90' => __('Songkhla', 'invoicing'),
1197
+		'TH-64' => __('Sukhothai', 'invoicing'),
1198
+		'TH-72' => __('Suphan Buri', 'invoicing'),
1199
+		'TH-84' => __('Surat Thani', 'invoicing'),
1200
+		'TH-32' => __('Surin', 'invoicing'),
1201
+		'TH-63' => __('Tak', 'invoicing'),
1202
+		'TH-92' => __('Trang', 'invoicing'),
1203
+		'TH-23' => __('Trat', 'invoicing'),
1204
+		'TH-34' => __('Ubon Ratchathani', 'invoicing'),
1205
+		'TH-41' => __('Udon Thani', 'invoicing'),
1206
+		'TH-61' => __('Uthai Thani', 'invoicing'),
1207
+		'TH-53' => __('Uttaradit', 'invoicing'),
1208
+		'TH-95' => __('Yala', 'invoicing'),
1209
+		'TH-35' => __('Yasothon', 'invoicing'),
1210 1210
 	),
1211 1211
 	'TR' => array( // Turkey States.
1212
-		'TR01' => __( 'Adana', 'invoicing' ),
1213
-		'TR02' => __( 'Ad&#305;yaman', 'invoicing' ),
1214
-		'TR03' => __( 'Afyon', 'invoicing' ),
1215
-		'TR04' => __( 'A&#287;r&#305;', 'invoicing' ),
1216
-		'TR05' => __( 'Amasya', 'invoicing' ),
1217
-		'TR06' => __( 'Ankara', 'invoicing' ),
1218
-		'TR07' => __( 'Antalya', 'invoicing' ),
1219
-		'TR08' => __( 'Artvin', 'invoicing' ),
1220
-		'TR09' => __( 'Ayd&#305;n', 'invoicing' ),
1221
-		'TR10' => __( 'Bal&#305;kesir', 'invoicing' ),
1222
-		'TR11' => __( 'Bilecik', 'invoicing' ),
1223
-		'TR12' => __( 'Bing&#246;l', 'invoicing' ),
1224
-		'TR13' => __( 'Bitlis', 'invoicing' ),
1225
-		'TR14' => __( 'Bolu', 'invoicing' ),
1226
-		'TR15' => __( 'Burdur', 'invoicing' ),
1227
-		'TR16' => __( 'Bursa', 'invoicing' ),
1228
-		'TR17' => __( '&#199;anakkale', 'invoicing' ),
1229
-		'TR18' => __( '&#199;ank&#305;r&#305;', 'invoicing' ),
1230
-		'TR19' => __( '&#199;orum', 'invoicing' ),
1231
-		'TR20' => __( 'Denizli', 'invoicing' ),
1232
-		'TR21' => __( 'Diyarbak&#305;r', 'invoicing' ),
1233
-		'TR22' => __( 'Edirne', 'invoicing' ),
1234
-		'TR23' => __( 'Elaz&#305;&#287;', 'invoicing' ),
1235
-		'TR24' => __( 'Erzincan', 'invoicing' ),
1236
-		'TR25' => __( 'Erzurum', 'invoicing' ),
1237
-		'TR26' => __( 'Eski&#351;ehir', 'invoicing' ),
1238
-		'TR27' => __( 'Gaziantep', 'invoicing' ),
1239
-		'TR28' => __( 'Giresun', 'invoicing' ),
1240
-		'TR29' => __( 'G&#252;m&#252;&#351;hane', 'invoicing' ),
1241
-		'TR30' => __( 'Hakkari', 'invoicing' ),
1242
-		'TR31' => __( 'Hatay', 'invoicing' ),
1243
-		'TR32' => __( 'Isparta', 'invoicing' ),
1244
-		'TR33' => __( '&#304;&#231;el', 'invoicing' ),
1245
-		'TR34' => __( '&#304;stanbul', 'invoicing' ),
1246
-		'TR35' => __( '&#304;zmir', 'invoicing' ),
1247
-		'TR36' => __( 'Kars', 'invoicing' ),
1248
-		'TR37' => __( 'Kastamonu', 'invoicing' ),
1249
-		'TR38' => __( 'Kayseri', 'invoicing' ),
1250
-		'TR39' => __( 'K&#305;rklareli', 'invoicing' ),
1251
-		'TR40' => __( 'K&#305;r&#351;ehir', 'invoicing' ),
1252
-		'TR41' => __( 'Kocaeli', 'invoicing' ),
1253
-		'TR42' => __( 'Konya', 'invoicing' ),
1254
-		'TR43' => __( 'K&#252;tahya', 'invoicing' ),
1255
-		'TR44' => __( 'Malatya', 'invoicing' ),
1256
-		'TR45' => __( 'Manisa', 'invoicing' ),
1257
-		'TR46' => __( 'Kahramanmara&#351;', 'invoicing' ),
1258
-		'TR47' => __( 'Mardin', 'invoicing' ),
1259
-		'TR48' => __( 'Mu&#287;la', 'invoicing' ),
1260
-		'TR49' => __( 'Mu&#351;', 'invoicing' ),
1261
-		'TR50' => __( 'Nev&#351;ehir', 'invoicing' ),
1262
-		'TR51' => __( 'Ni&#287;de', 'invoicing' ),
1263
-		'TR52' => __( 'Ordu', 'invoicing' ),
1264
-		'TR53' => __( 'Rize', 'invoicing' ),
1265
-		'TR54' => __( 'Sakarya', 'invoicing' ),
1266
-		'TR55' => __( 'Samsun', 'invoicing' ),
1267
-		'TR56' => __( 'Siirt', 'invoicing' ),
1268
-		'TR57' => __( 'Sinop', 'invoicing' ),
1269
-		'TR58' => __( 'Sivas', 'invoicing' ),
1270
-		'TR59' => __( 'Tekirda&#287;', 'invoicing' ),
1271
-		'TR60' => __( 'Tokat', 'invoicing' ),
1272
-		'TR61' => __( 'Trabzon', 'invoicing' ),
1273
-		'TR62' => __( 'Tunceli', 'invoicing' ),
1274
-		'TR63' => __( '&#350;anl&#305;urfa', 'invoicing' ),
1275
-		'TR64' => __( 'U&#351;ak', 'invoicing' ),
1276
-		'TR65' => __( 'Van', 'invoicing' ),
1277
-		'TR66' => __( 'Yozgat', 'invoicing' ),
1278
-		'TR67' => __( 'Zonguldak', 'invoicing' ),
1279
-		'TR68' => __( 'Aksaray', 'invoicing' ),
1280
-		'TR69' => __( 'Bayburt', 'invoicing' ),
1281
-		'TR70' => __( 'Karaman', 'invoicing' ),
1282
-		'TR71' => __( 'K&#305;r&#305;kkale', 'invoicing' ),
1283
-		'TR72' => __( 'Batman', 'invoicing' ),
1284
-		'TR73' => __( '&#350;&#305;rnak', 'invoicing' ),
1285
-		'TR74' => __( 'Bart&#305;n', 'invoicing' ),
1286
-		'TR75' => __( 'Ardahan', 'invoicing' ),
1287
-		'TR76' => __( 'I&#287;d&#305;r', 'invoicing' ),
1288
-		'TR77' => __( 'Yalova', 'invoicing' ),
1289
-		'TR78' => __( 'Karab&#252;k', 'invoicing' ),
1290
-		'TR79' => __( 'Kilis', 'invoicing' ),
1291
-		'TR80' => __( 'Osmaniye', 'invoicing' ),
1292
-		'TR81' => __( 'D&#252;zce', 'invoicing' ),
1212
+		'TR01' => __('Adana', 'invoicing'),
1213
+		'TR02' => __('Ad&#305;yaman', 'invoicing'),
1214
+		'TR03' => __('Afyon', 'invoicing'),
1215
+		'TR04' => __('A&#287;r&#305;', 'invoicing'),
1216
+		'TR05' => __('Amasya', 'invoicing'),
1217
+		'TR06' => __('Ankara', 'invoicing'),
1218
+		'TR07' => __('Antalya', 'invoicing'),
1219
+		'TR08' => __('Artvin', 'invoicing'),
1220
+		'TR09' => __('Ayd&#305;n', 'invoicing'),
1221
+		'TR10' => __('Bal&#305;kesir', 'invoicing'),
1222
+		'TR11' => __('Bilecik', 'invoicing'),
1223
+		'TR12' => __('Bing&#246;l', 'invoicing'),
1224
+		'TR13' => __('Bitlis', 'invoicing'),
1225
+		'TR14' => __('Bolu', 'invoicing'),
1226
+		'TR15' => __('Burdur', 'invoicing'),
1227
+		'TR16' => __('Bursa', 'invoicing'),
1228
+		'TR17' => __('&#199;anakkale', 'invoicing'),
1229
+		'TR18' => __('&#199;ank&#305;r&#305;', 'invoicing'),
1230
+		'TR19' => __('&#199;orum', 'invoicing'),
1231
+		'TR20' => __('Denizli', 'invoicing'),
1232
+		'TR21' => __('Diyarbak&#305;r', 'invoicing'),
1233
+		'TR22' => __('Edirne', 'invoicing'),
1234
+		'TR23' => __('Elaz&#305;&#287;', 'invoicing'),
1235
+		'TR24' => __('Erzincan', 'invoicing'),
1236
+		'TR25' => __('Erzurum', 'invoicing'),
1237
+		'TR26' => __('Eski&#351;ehir', 'invoicing'),
1238
+		'TR27' => __('Gaziantep', 'invoicing'),
1239
+		'TR28' => __('Giresun', 'invoicing'),
1240
+		'TR29' => __('G&#252;m&#252;&#351;hane', 'invoicing'),
1241
+		'TR30' => __('Hakkari', 'invoicing'),
1242
+		'TR31' => __('Hatay', 'invoicing'),
1243
+		'TR32' => __('Isparta', 'invoicing'),
1244
+		'TR33' => __('&#304;&#231;el', 'invoicing'),
1245
+		'TR34' => __('&#304;stanbul', 'invoicing'),
1246
+		'TR35' => __('&#304;zmir', 'invoicing'),
1247
+		'TR36' => __('Kars', 'invoicing'),
1248
+		'TR37' => __('Kastamonu', 'invoicing'),
1249
+		'TR38' => __('Kayseri', 'invoicing'),
1250
+		'TR39' => __('K&#305;rklareli', 'invoicing'),
1251
+		'TR40' => __('K&#305;r&#351;ehir', 'invoicing'),
1252
+		'TR41' => __('Kocaeli', 'invoicing'),
1253
+		'TR42' => __('Konya', 'invoicing'),
1254
+		'TR43' => __('K&#252;tahya', 'invoicing'),
1255
+		'TR44' => __('Malatya', 'invoicing'),
1256
+		'TR45' => __('Manisa', 'invoicing'),
1257
+		'TR46' => __('Kahramanmara&#351;', 'invoicing'),
1258
+		'TR47' => __('Mardin', 'invoicing'),
1259
+		'TR48' => __('Mu&#287;la', 'invoicing'),
1260
+		'TR49' => __('Mu&#351;', 'invoicing'),
1261
+		'TR50' => __('Nev&#351;ehir', 'invoicing'),
1262
+		'TR51' => __('Ni&#287;de', 'invoicing'),
1263
+		'TR52' => __('Ordu', 'invoicing'),
1264
+		'TR53' => __('Rize', 'invoicing'),
1265
+		'TR54' => __('Sakarya', 'invoicing'),
1266
+		'TR55' => __('Samsun', 'invoicing'),
1267
+		'TR56' => __('Siirt', 'invoicing'),
1268
+		'TR57' => __('Sinop', 'invoicing'),
1269
+		'TR58' => __('Sivas', 'invoicing'),
1270
+		'TR59' => __('Tekirda&#287;', 'invoicing'),
1271
+		'TR60' => __('Tokat', 'invoicing'),
1272
+		'TR61' => __('Trabzon', 'invoicing'),
1273
+		'TR62' => __('Tunceli', 'invoicing'),
1274
+		'TR63' => __('&#350;anl&#305;urfa', 'invoicing'),
1275
+		'TR64' => __('U&#351;ak', 'invoicing'),
1276
+		'TR65' => __('Van', 'invoicing'),
1277
+		'TR66' => __('Yozgat', 'invoicing'),
1278
+		'TR67' => __('Zonguldak', 'invoicing'),
1279
+		'TR68' => __('Aksaray', 'invoicing'),
1280
+		'TR69' => __('Bayburt', 'invoicing'),
1281
+		'TR70' => __('Karaman', 'invoicing'),
1282
+		'TR71' => __('K&#305;r&#305;kkale', 'invoicing'),
1283
+		'TR72' => __('Batman', 'invoicing'),
1284
+		'TR73' => __('&#350;&#305;rnak', 'invoicing'),
1285
+		'TR74' => __('Bart&#305;n', 'invoicing'),
1286
+		'TR75' => __('Ardahan', 'invoicing'),
1287
+		'TR76' => __('I&#287;d&#305;r', 'invoicing'),
1288
+		'TR77' => __('Yalova', 'invoicing'),
1289
+		'TR78' => __('Karab&#252;k', 'invoicing'),
1290
+		'TR79' => __('Kilis', 'invoicing'),
1291
+		'TR80' => __('Osmaniye', 'invoicing'),
1292
+		'TR81' => __('D&#252;zce', 'invoicing'),
1293 1293
 	),
1294 1294
 	'TZ' => array( // Tanzania States.
1295
-		'TZ01' => __( 'Arusha', 'invoicing' ),
1296
-		'TZ02' => __( 'Dar es Salaam', 'invoicing' ),
1297
-		'TZ03' => __( 'Dodoma', 'invoicing' ),
1298
-		'TZ04' => __( 'Iringa', 'invoicing' ),
1299
-		'TZ05' => __( 'Kagera', 'invoicing' ),
1300
-		'TZ06' => __( 'Pemba North', 'invoicing' ),
1301
-		'TZ07' => __( 'Zanzibar North', 'invoicing' ),
1302
-		'TZ08' => __( 'Kigoma', 'invoicing' ),
1303
-		'TZ09' => __( 'Kilimanjaro', 'invoicing' ),
1304
-		'TZ10' => __( 'Pemba South', 'invoicing' ),
1305
-		'TZ11' => __( 'Zanzibar South', 'invoicing' ),
1306
-		'TZ12' => __( 'Lindi', 'invoicing' ),
1307
-		'TZ13' => __( 'Mara', 'invoicing' ),
1308
-		'TZ14' => __( 'Mbeya', 'invoicing' ),
1309
-		'TZ15' => __( 'Zanzibar West', 'invoicing' ),
1310
-		'TZ16' => __( 'Morogoro', 'invoicing' ),
1311
-		'TZ17' => __( 'Mtwara', 'invoicing' ),
1312
-		'TZ18' => __( 'Mwanza', 'invoicing' ),
1313
-		'TZ19' => __( 'Coast', 'invoicing' ),
1314
-		'TZ20' => __( 'Rukwa', 'invoicing' ),
1315
-		'TZ21' => __( 'Ruvuma', 'invoicing' ),
1316
-		'TZ22' => __( 'Shinyanga', 'invoicing' ),
1317
-		'TZ23' => __( 'Singida', 'invoicing' ),
1318
-		'TZ24' => __( 'Tabora', 'invoicing' ),
1319
-		'TZ25' => __( 'Tanga', 'invoicing' ),
1320
-		'TZ26' => __( 'Manyara', 'invoicing' ),
1321
-		'TZ27' => __( 'Geita', 'invoicing' ),
1322
-		'TZ28' => __( 'Katavi', 'invoicing' ),
1323
-		'TZ29' => __( 'Njombe', 'invoicing' ),
1324
-		'TZ30' => __( 'Simiyu', 'invoicing' ),
1295
+		'TZ01' => __('Arusha', 'invoicing'),
1296
+		'TZ02' => __('Dar es Salaam', 'invoicing'),
1297
+		'TZ03' => __('Dodoma', 'invoicing'),
1298
+		'TZ04' => __('Iringa', 'invoicing'),
1299
+		'TZ05' => __('Kagera', 'invoicing'),
1300
+		'TZ06' => __('Pemba North', 'invoicing'),
1301
+		'TZ07' => __('Zanzibar North', 'invoicing'),
1302
+		'TZ08' => __('Kigoma', 'invoicing'),
1303
+		'TZ09' => __('Kilimanjaro', 'invoicing'),
1304
+		'TZ10' => __('Pemba South', 'invoicing'),
1305
+		'TZ11' => __('Zanzibar South', 'invoicing'),
1306
+		'TZ12' => __('Lindi', 'invoicing'),
1307
+		'TZ13' => __('Mara', 'invoicing'),
1308
+		'TZ14' => __('Mbeya', 'invoicing'),
1309
+		'TZ15' => __('Zanzibar West', 'invoicing'),
1310
+		'TZ16' => __('Morogoro', 'invoicing'),
1311
+		'TZ17' => __('Mtwara', 'invoicing'),
1312
+		'TZ18' => __('Mwanza', 'invoicing'),
1313
+		'TZ19' => __('Coast', 'invoicing'),
1314
+		'TZ20' => __('Rukwa', 'invoicing'),
1315
+		'TZ21' => __('Ruvuma', 'invoicing'),
1316
+		'TZ22' => __('Shinyanga', 'invoicing'),
1317
+		'TZ23' => __('Singida', 'invoicing'),
1318
+		'TZ24' => __('Tabora', 'invoicing'),
1319
+		'TZ25' => __('Tanga', 'invoicing'),
1320
+		'TZ26' => __('Manyara', 'invoicing'),
1321
+		'TZ27' => __('Geita', 'invoicing'),
1322
+		'TZ28' => __('Katavi', 'invoicing'),
1323
+		'TZ29' => __('Njombe', 'invoicing'),
1324
+		'TZ30' => __('Simiyu', 'invoicing'),
1325 1325
 	),
1326 1326
 	'LK' => array(),
1327 1327
 	'SE' => array(),
1328 1328
 	'UG' => array( // Uganda districts. Ref: https://en.wikipedia.org/wiki/ISO_3166-2:UG.
1329
-		'UG314' => __( 'Abim', 'invoicing' ),
1330
-		'UG301' => __( 'Adjumani', 'invoicing' ),
1331
-		'UG322' => __( 'Agago', 'invoicing' ),
1332
-		'UG323' => __( 'Alebtong', 'invoicing' ),
1333
-		'UG315' => __( 'Amolatar', 'invoicing' ),
1334
-		'UG324' => __( 'Amudat', 'invoicing' ),
1335
-		'UG216' => __( 'Amuria', 'invoicing' ),
1336
-		'UG316' => __( 'Amuru', 'invoicing' ),
1337
-		'UG302' => __( 'Apac', 'invoicing' ),
1338
-		'UG303' => __( 'Arua', 'invoicing' ),
1339
-		'UG217' => __( 'Budaka', 'invoicing' ),
1340
-		'UG218' => __( 'Bududa', 'invoicing' ),
1341
-		'UG201' => __( 'Bugiri', 'invoicing' ),
1342
-		'UG235' => __( 'Bugweri', 'invoicing' ),
1343
-		'UG420' => __( 'Buhweju', 'invoicing' ),
1344
-		'UG117' => __( 'Buikwe', 'invoicing' ),
1345
-		'UG219' => __( 'Bukedea', 'invoicing' ),
1346
-		'UG118' => __( 'Bukomansimbi', 'invoicing' ),
1347
-		'UG220' => __( 'Bukwa', 'invoicing' ),
1348
-		'UG225' => __( 'Bulambuli', 'invoicing' ),
1349
-		'UG416' => __( 'Buliisa', 'invoicing' ),
1350
-		'UG401' => __( 'Bundibugyo', 'invoicing' ),
1351
-		'UG430' => __( 'Bunyangabu', 'invoicing' ),
1352
-		'UG402' => __( 'Bushenyi', 'invoicing' ),
1353
-		'UG202' => __( 'Busia', 'invoicing' ),
1354
-		'UG221' => __( 'Butaleja', 'invoicing' ),
1355
-		'UG119' => __( 'Butambala', 'invoicing' ),
1356
-		'UG233' => __( 'Butebo', 'invoicing' ),
1357
-		'UG120' => __( 'Buvuma', 'invoicing' ),
1358
-		'UG226' => __( 'Buyende', 'invoicing' ),
1359
-		'UG317' => __( 'Dokolo', 'invoicing' ),
1360
-		'UG121' => __( 'Gomba', 'invoicing' ),
1361
-		'UG304' => __( 'Gulu', 'invoicing' ),
1362
-		'UG403' => __( 'Hoima', 'invoicing' ),
1363
-		'UG417' => __( 'Ibanda', 'invoicing' ),
1364
-		'UG203' => __( 'Iganga', 'invoicing' ),
1365
-		'UG418' => __( 'Isingiro', 'invoicing' ),
1366
-		'UG204' => __( 'Jinja', 'invoicing' ),
1367
-		'UG318' => __( 'Kaabong', 'invoicing' ),
1368
-		'UG404' => __( 'Kabale', 'invoicing' ),
1369
-		'UG405' => __( 'Kabarole', 'invoicing' ),
1370
-		'UG213' => __( 'Kaberamaido', 'invoicing' ),
1371
-		'UG427' => __( 'Kagadi', 'invoicing' ),
1372
-		'UG428' => __( 'Kakumiro', 'invoicing' ),
1373
-		'UG101' => __( 'Kalangala', 'invoicing' ),
1374
-		'UG222' => __( 'Kaliro', 'invoicing' ),
1375
-		'UG122' => __( 'Kalungu', 'invoicing' ),
1376
-		'UG102' => __( 'Kampala', 'invoicing' ),
1377
-		'UG205' => __( 'Kamuli', 'invoicing' ),
1378
-		'UG413' => __( 'Kamwenge', 'invoicing' ),
1379
-		'UG414' => __( 'Kanungu', 'invoicing' ),
1380
-		'UG206' => __( 'Kapchorwa', 'invoicing' ),
1381
-		'UG236' => __( 'Kapelebyong', 'invoicing' ),
1382
-		'UG126' => __( 'Kasanda', 'invoicing' ),
1383
-		'UG406' => __( 'Kasese', 'invoicing' ),
1384
-		'UG207' => __( 'Katakwi', 'invoicing' ),
1385
-		'UG112' => __( 'Kayunga', 'invoicing' ),
1386
-		'UG407' => __( 'Kibaale', 'invoicing' ),
1387
-		'UG103' => __( 'Kiboga', 'invoicing' ),
1388
-		'UG227' => __( 'Kibuku', 'invoicing' ),
1389
-		'UG432' => __( 'Kikuube', 'invoicing' ),
1390
-		'UG419' => __( 'Kiruhura', 'invoicing' ),
1391
-		'UG421' => __( 'Kiryandongo', 'invoicing' ),
1392
-		'UG408' => __( 'Kisoro', 'invoicing' ),
1393
-		'UG305' => __( 'Kitgum', 'invoicing' ),
1394
-		'UG319' => __( 'Koboko', 'invoicing' ),
1395
-		'UG325' => __( 'Kole', 'invoicing' ),
1396
-		'UG306' => __( 'Kotido', 'invoicing' ),
1397
-		'UG208' => __( 'Kumi', 'invoicing' ),
1398
-		'UG333' => __( 'Kwania', 'invoicing' ),
1399
-		'UG228' => __( 'Kween', 'invoicing' ),
1400
-		'UG123' => __( 'Kyankwanzi', 'invoicing' ),
1401
-		'UG422' => __( 'Kyegegwa', 'invoicing' ),
1402
-		'UG415' => __( 'Kyenjojo', 'invoicing' ),
1403
-		'UG125' => __( 'Kyotera', 'invoicing' ),
1404
-		'UG326' => __( 'Lamwo', 'invoicing' ),
1405
-		'UG307' => __( 'Lira', 'invoicing' ),
1406
-		'UG229' => __( 'Luuka', 'invoicing' ),
1407
-		'UG104' => __( 'Luwero', 'invoicing' ),
1408
-		'UG124' => __( 'Lwengo', 'invoicing' ),
1409
-		'UG114' => __( 'Lyantonde', 'invoicing' ),
1410
-		'UG223' => __( 'Manafwa', 'invoicing' ),
1411
-		'UG320' => __( 'Maracha', 'invoicing' ),
1412
-		'UG105' => __( 'Masaka', 'invoicing' ),
1413
-		'UG409' => __( 'Masindi', 'invoicing' ),
1414
-		'UG214' => __( 'Mayuge', 'invoicing' ),
1415
-		'UG209' => __( 'Mbale', 'invoicing' ),
1416
-		'UG410' => __( 'Mbarara', 'invoicing' ),
1417
-		'UG423' => __( 'Mitooma', 'invoicing' ),
1418
-		'UG115' => __( 'Mityana', 'invoicing' ),
1419
-		'UG308' => __( 'Moroto', 'invoicing' ),
1420
-		'UG309' => __( 'Moyo', 'invoicing' ),
1421
-		'UG106' => __( 'Mpigi', 'invoicing' ),
1422
-		'UG107' => __( 'Mubende', 'invoicing' ),
1423
-		'UG108' => __( 'Mukono', 'invoicing' ),
1424
-		'UG334' => __( 'Nabilatuk', 'invoicing' ),
1425
-		'UG311' => __( 'Nakapiripirit', 'invoicing' ),
1426
-		'UG116' => __( 'Nakaseke', 'invoicing' ),
1427
-		'UG109' => __( 'Nakasongola', 'invoicing' ),
1428
-		'UG230' => __( 'Namayingo', 'invoicing' ),
1429
-		'UG234' => __( 'Namisindwa', 'invoicing' ),
1430
-		'UG224' => __( 'Namutumba', 'invoicing' ),
1431
-		'UG327' => __( 'Napak', 'invoicing' ),
1432
-		'UG310' => __( 'Nebbi', 'invoicing' ),
1433
-		'UG231' => __( 'Ngora', 'invoicing' ),
1434
-		'UG424' => __( 'Ntoroko', 'invoicing' ),
1435
-		'UG411' => __( 'Ntungamo', 'invoicing' ),
1436
-		'UG328' => __( 'Nwoya', 'invoicing' ),
1437
-		'UG331' => __( 'Omoro', 'invoicing' ),
1438
-		'UG329' => __( 'Otuke', 'invoicing' ),
1439
-		'UG321' => __( 'Oyam', 'invoicing' ),
1440
-		'UG312' => __( 'Pader', 'invoicing' ),
1441
-		'UG332' => __( 'Pakwach', 'invoicing' ),
1442
-		'UG210' => __( 'Pallisa', 'invoicing' ),
1443
-		'UG110' => __( 'Rakai', 'invoicing' ),
1444
-		'UG429' => __( 'Rubanda', 'invoicing' ),
1445
-		'UG425' => __( 'Rubirizi', 'invoicing' ),
1446
-		'UG431' => __( 'Rukiga', 'invoicing' ),
1447
-		'UG412' => __( 'Rukungiri', 'invoicing' ),
1448
-		'UG111' => __( 'Sembabule', 'invoicing' ),
1449
-		'UG232' => __( 'Serere', 'invoicing' ),
1450
-		'UG426' => __( 'Sheema', 'invoicing' ),
1451
-		'UG215' => __( 'Sironko', 'invoicing' ),
1452
-		'UG211' => __( 'Soroti', 'invoicing' ),
1453
-		'UG212' => __( 'Tororo', 'invoicing' ),
1454
-		'UG113' => __( 'Wakiso', 'invoicing' ),
1455
-		'UG313' => __( 'Yumbe', 'invoicing' ),
1456
-		'UG330' => __( 'Zombo', 'invoicing' ),
1329
+		'UG314' => __('Abim', 'invoicing'),
1330
+		'UG301' => __('Adjumani', 'invoicing'),
1331
+		'UG322' => __('Agago', 'invoicing'),
1332
+		'UG323' => __('Alebtong', 'invoicing'),
1333
+		'UG315' => __('Amolatar', 'invoicing'),
1334
+		'UG324' => __('Amudat', 'invoicing'),
1335
+		'UG216' => __('Amuria', 'invoicing'),
1336
+		'UG316' => __('Amuru', 'invoicing'),
1337
+		'UG302' => __('Apac', 'invoicing'),
1338
+		'UG303' => __('Arua', 'invoicing'),
1339
+		'UG217' => __('Budaka', 'invoicing'),
1340
+		'UG218' => __('Bududa', 'invoicing'),
1341
+		'UG201' => __('Bugiri', 'invoicing'),
1342
+		'UG235' => __('Bugweri', 'invoicing'),
1343
+		'UG420' => __('Buhweju', 'invoicing'),
1344
+		'UG117' => __('Buikwe', 'invoicing'),
1345
+		'UG219' => __('Bukedea', 'invoicing'),
1346
+		'UG118' => __('Bukomansimbi', 'invoicing'),
1347
+		'UG220' => __('Bukwa', 'invoicing'),
1348
+		'UG225' => __('Bulambuli', 'invoicing'),
1349
+		'UG416' => __('Buliisa', 'invoicing'),
1350
+		'UG401' => __('Bundibugyo', 'invoicing'),
1351
+		'UG430' => __('Bunyangabu', 'invoicing'),
1352
+		'UG402' => __('Bushenyi', 'invoicing'),
1353
+		'UG202' => __('Busia', 'invoicing'),
1354
+		'UG221' => __('Butaleja', 'invoicing'),
1355
+		'UG119' => __('Butambala', 'invoicing'),
1356
+		'UG233' => __('Butebo', 'invoicing'),
1357
+		'UG120' => __('Buvuma', 'invoicing'),
1358
+		'UG226' => __('Buyende', 'invoicing'),
1359
+		'UG317' => __('Dokolo', 'invoicing'),
1360
+		'UG121' => __('Gomba', 'invoicing'),
1361
+		'UG304' => __('Gulu', 'invoicing'),
1362
+		'UG403' => __('Hoima', 'invoicing'),
1363
+		'UG417' => __('Ibanda', 'invoicing'),
1364
+		'UG203' => __('Iganga', 'invoicing'),
1365
+		'UG418' => __('Isingiro', 'invoicing'),
1366
+		'UG204' => __('Jinja', 'invoicing'),
1367
+		'UG318' => __('Kaabong', 'invoicing'),
1368
+		'UG404' => __('Kabale', 'invoicing'),
1369
+		'UG405' => __('Kabarole', 'invoicing'),
1370
+		'UG213' => __('Kaberamaido', 'invoicing'),
1371
+		'UG427' => __('Kagadi', 'invoicing'),
1372
+		'UG428' => __('Kakumiro', 'invoicing'),
1373
+		'UG101' => __('Kalangala', 'invoicing'),
1374
+		'UG222' => __('Kaliro', 'invoicing'),
1375
+		'UG122' => __('Kalungu', 'invoicing'),
1376
+		'UG102' => __('Kampala', 'invoicing'),
1377
+		'UG205' => __('Kamuli', 'invoicing'),
1378
+		'UG413' => __('Kamwenge', 'invoicing'),
1379
+		'UG414' => __('Kanungu', 'invoicing'),
1380
+		'UG206' => __('Kapchorwa', 'invoicing'),
1381
+		'UG236' => __('Kapelebyong', 'invoicing'),
1382
+		'UG126' => __('Kasanda', 'invoicing'),
1383
+		'UG406' => __('Kasese', 'invoicing'),
1384
+		'UG207' => __('Katakwi', 'invoicing'),
1385
+		'UG112' => __('Kayunga', 'invoicing'),
1386
+		'UG407' => __('Kibaale', 'invoicing'),
1387
+		'UG103' => __('Kiboga', 'invoicing'),
1388
+		'UG227' => __('Kibuku', 'invoicing'),
1389
+		'UG432' => __('Kikuube', 'invoicing'),
1390
+		'UG419' => __('Kiruhura', 'invoicing'),
1391
+		'UG421' => __('Kiryandongo', 'invoicing'),
1392
+		'UG408' => __('Kisoro', 'invoicing'),
1393
+		'UG305' => __('Kitgum', 'invoicing'),
1394
+		'UG319' => __('Koboko', 'invoicing'),
1395
+		'UG325' => __('Kole', 'invoicing'),
1396
+		'UG306' => __('Kotido', 'invoicing'),
1397
+		'UG208' => __('Kumi', 'invoicing'),
1398
+		'UG333' => __('Kwania', 'invoicing'),
1399
+		'UG228' => __('Kween', 'invoicing'),
1400
+		'UG123' => __('Kyankwanzi', 'invoicing'),
1401
+		'UG422' => __('Kyegegwa', 'invoicing'),
1402
+		'UG415' => __('Kyenjojo', 'invoicing'),
1403
+		'UG125' => __('Kyotera', 'invoicing'),
1404
+		'UG326' => __('Lamwo', 'invoicing'),
1405
+		'UG307' => __('Lira', 'invoicing'),
1406
+		'UG229' => __('Luuka', 'invoicing'),
1407
+		'UG104' => __('Luwero', 'invoicing'),
1408
+		'UG124' => __('Lwengo', 'invoicing'),
1409
+		'UG114' => __('Lyantonde', 'invoicing'),
1410
+		'UG223' => __('Manafwa', 'invoicing'),
1411
+		'UG320' => __('Maracha', 'invoicing'),
1412
+		'UG105' => __('Masaka', 'invoicing'),
1413
+		'UG409' => __('Masindi', 'invoicing'),
1414
+		'UG214' => __('Mayuge', 'invoicing'),
1415
+		'UG209' => __('Mbale', 'invoicing'),
1416
+		'UG410' => __('Mbarara', 'invoicing'),
1417
+		'UG423' => __('Mitooma', 'invoicing'),
1418
+		'UG115' => __('Mityana', 'invoicing'),
1419
+		'UG308' => __('Moroto', 'invoicing'),
1420
+		'UG309' => __('Moyo', 'invoicing'),
1421
+		'UG106' => __('Mpigi', 'invoicing'),
1422
+		'UG107' => __('Mubende', 'invoicing'),
1423
+		'UG108' => __('Mukono', 'invoicing'),
1424
+		'UG334' => __('Nabilatuk', 'invoicing'),
1425
+		'UG311' => __('Nakapiripirit', 'invoicing'),
1426
+		'UG116' => __('Nakaseke', 'invoicing'),
1427
+		'UG109' => __('Nakasongola', 'invoicing'),
1428
+		'UG230' => __('Namayingo', 'invoicing'),
1429
+		'UG234' => __('Namisindwa', 'invoicing'),
1430
+		'UG224' => __('Namutumba', 'invoicing'),
1431
+		'UG327' => __('Napak', 'invoicing'),
1432
+		'UG310' => __('Nebbi', 'invoicing'),
1433
+		'UG231' => __('Ngora', 'invoicing'),
1434
+		'UG424' => __('Ntoroko', 'invoicing'),
1435
+		'UG411' => __('Ntungamo', 'invoicing'),
1436
+		'UG328' => __('Nwoya', 'invoicing'),
1437
+		'UG331' => __('Omoro', 'invoicing'),
1438
+		'UG329' => __('Otuke', 'invoicing'),
1439
+		'UG321' => __('Oyam', 'invoicing'),
1440
+		'UG312' => __('Pader', 'invoicing'),
1441
+		'UG332' => __('Pakwach', 'invoicing'),
1442
+		'UG210' => __('Pallisa', 'invoicing'),
1443
+		'UG110' => __('Rakai', 'invoicing'),
1444
+		'UG429' => __('Rubanda', 'invoicing'),
1445
+		'UG425' => __('Rubirizi', 'invoicing'),
1446
+		'UG431' => __('Rukiga', 'invoicing'),
1447
+		'UG412' => __('Rukungiri', 'invoicing'),
1448
+		'UG111' => __('Sembabule', 'invoicing'),
1449
+		'UG232' => __('Serere', 'invoicing'),
1450
+		'UG426' => __('Sheema', 'invoicing'),
1451
+		'UG215' => __('Sironko', 'invoicing'),
1452
+		'UG211' => __('Soroti', 'invoicing'),
1453
+		'UG212' => __('Tororo', 'invoicing'),
1454
+		'UG113' => __('Wakiso', 'invoicing'),
1455
+		'UG313' => __('Yumbe', 'invoicing'),
1456
+		'UG330' => __('Zombo', 'invoicing'),
1457 1457
 	),
1458 1458
 	'UM' => array(
1459
-		'81' => __( 'Baker Island', 'invoicing' ),
1460
-		'84' => __( 'Howland Island', 'invoicing' ),
1461
-		'86' => __( 'Jarvis Island', 'invoicing' ),
1462
-		'67' => __( 'Johnston Atoll', 'invoicing' ),
1463
-		'89' => __( 'Kingman Reef', 'invoicing' ),
1464
-		'71' => __( 'Midway Atoll', 'invoicing' ),
1465
-		'76' => __( 'Navassa Island', 'invoicing' ),
1466
-		'95' => __( 'Palmyra Atoll', 'invoicing' ),
1467
-		'79' => __( 'Wake Island', 'invoicing' ),
1459
+		'81' => __('Baker Island', 'invoicing'),
1460
+		'84' => __('Howland Island', 'invoicing'),
1461
+		'86' => __('Jarvis Island', 'invoicing'),
1462
+		'67' => __('Johnston Atoll', 'invoicing'),
1463
+		'89' => __('Kingman Reef', 'invoicing'),
1464
+		'71' => __('Midway Atoll', 'invoicing'),
1465
+		'76' => __('Navassa Island', 'invoicing'),
1466
+		'95' => __('Palmyra Atoll', 'invoicing'),
1467
+		'79' => __('Wake Island', 'invoicing'),
1468 1468
 	),
1469 1469
 	'US' => array( // United States.
1470
-		'AL' => __( 'Alabama', 'invoicing' ),
1471
-		'AK' => __( 'Alaska', 'invoicing' ),
1472
-		'AZ' => __( 'Arizona', 'invoicing' ),
1473
-		'AR' => __( 'Arkansas', 'invoicing' ),
1474
-		'CA' => __( 'California', 'invoicing' ),
1475
-		'CO' => __( 'Colorado', 'invoicing' ),
1476
-		'CT' => __( 'Connecticut', 'invoicing' ),
1477
-		'DE' => __( 'Delaware', 'invoicing' ),
1478
-		'DC' => __( 'District Of Columbia', 'invoicing' ),
1479
-		'FL' => __( 'Florida', 'invoicing' ),
1480
-		'GA' => _x( 'Georgia', 'US state of Georgia', 'invoicing' ),
1481
-		'HI' => __( 'Hawaii', 'invoicing' ),
1482
-		'ID' => __( 'Idaho', 'invoicing' ),
1483
-		'IL' => __( 'Illinois', 'invoicing' ),
1484
-		'IN' => __( 'Indiana', 'invoicing' ),
1485
-		'IA' => __( 'Iowa', 'invoicing' ),
1486
-		'KS' => __( 'Kansas', 'invoicing' ),
1487
-		'KY' => __( 'Kentucky', 'invoicing' ),
1488
-		'LA' => __( 'Louisiana', 'invoicing' ),
1489
-		'ME' => __( 'Maine', 'invoicing' ),
1490
-		'MD' => __( 'Maryland', 'invoicing' ),
1491
-		'MA' => __( 'Massachusetts', 'invoicing' ),
1492
-		'MI' => __( 'Michigan', 'invoicing' ),
1493
-		'MN' => __( 'Minnesota', 'invoicing' ),
1494
-		'MS' => __( 'Mississippi', 'invoicing' ),
1495
-		'MO' => __( 'Missouri', 'invoicing' ),
1496
-		'MT' => __( 'Montana', 'invoicing' ),
1497
-		'NE' => __( 'Nebraska', 'invoicing' ),
1498
-		'NV' => __( 'Nevada', 'invoicing' ),
1499
-		'NH' => __( 'New Hampshire', 'invoicing' ),
1500
-		'NJ' => __( 'New Jersey', 'invoicing' ),
1501
-		'NM' => __( 'New Mexico', 'invoicing' ),
1502
-		'NY' => __( 'New York', 'invoicing' ),
1503
-		'NC' => __( 'North Carolina', 'invoicing' ),
1504
-		'ND' => __( 'North Dakota', 'invoicing' ),
1505
-		'OH' => __( 'Ohio', 'invoicing' ),
1506
-		'OK' => __( 'Oklahoma', 'invoicing' ),
1507
-		'OR' => __( 'Oregon', 'invoicing' ),
1508
-		'PA' => __( 'Pennsylvania', 'invoicing' ),
1509
-		'RI' => __( 'Rhode Island', 'invoicing' ),
1510
-		'SC' => __( 'South Carolina', 'invoicing' ),
1511
-		'SD' => __( 'South Dakota', 'invoicing' ),
1512
-		'TN' => __( 'Tennessee', 'invoicing' ),
1513
-		'TX' => __( 'Texas', 'invoicing' ),
1514
-		'UT' => __( 'Utah', 'invoicing' ),
1515
-		'VT' => __( 'Vermont', 'invoicing' ),
1516
-		'VA' => __( 'Virginia', 'invoicing' ),
1517
-		'WA' => __( 'Washington', 'invoicing' ),
1518
-		'WV' => __( 'West Virginia', 'invoicing' ),
1519
-		'WI' => __( 'Wisconsin', 'invoicing' ),
1520
-		'WY' => __( 'Wyoming', 'invoicing' ),
1521
-		'AA' => __( 'Armed Forces (AA)', 'invoicing' ),
1522
-		'AE' => __( 'Armed Forces (AE)', 'invoicing' ),
1523
-		'AP' => __( 'Armed Forces (AP)', 'invoicing' ),
1470
+		'AL' => __('Alabama', 'invoicing'),
1471
+		'AK' => __('Alaska', 'invoicing'),
1472
+		'AZ' => __('Arizona', 'invoicing'),
1473
+		'AR' => __('Arkansas', 'invoicing'),
1474
+		'CA' => __('California', 'invoicing'),
1475
+		'CO' => __('Colorado', 'invoicing'),
1476
+		'CT' => __('Connecticut', 'invoicing'),
1477
+		'DE' => __('Delaware', 'invoicing'),
1478
+		'DC' => __('District Of Columbia', 'invoicing'),
1479
+		'FL' => __('Florida', 'invoicing'),
1480
+		'GA' => _x('Georgia', 'US state of Georgia', 'invoicing'),
1481
+		'HI' => __('Hawaii', 'invoicing'),
1482
+		'ID' => __('Idaho', 'invoicing'),
1483
+		'IL' => __('Illinois', 'invoicing'),
1484
+		'IN' => __('Indiana', 'invoicing'),
1485
+		'IA' => __('Iowa', 'invoicing'),
1486
+		'KS' => __('Kansas', 'invoicing'),
1487
+		'KY' => __('Kentucky', 'invoicing'),
1488
+		'LA' => __('Louisiana', 'invoicing'),
1489
+		'ME' => __('Maine', 'invoicing'),
1490
+		'MD' => __('Maryland', 'invoicing'),
1491
+		'MA' => __('Massachusetts', 'invoicing'),
1492
+		'MI' => __('Michigan', 'invoicing'),
1493
+		'MN' => __('Minnesota', 'invoicing'),
1494
+		'MS' => __('Mississippi', 'invoicing'),
1495
+		'MO' => __('Missouri', 'invoicing'),
1496
+		'MT' => __('Montana', 'invoicing'),
1497
+		'NE' => __('Nebraska', 'invoicing'),
1498
+		'NV' => __('Nevada', 'invoicing'),
1499
+		'NH' => __('New Hampshire', 'invoicing'),
1500
+		'NJ' => __('New Jersey', 'invoicing'),
1501
+		'NM' => __('New Mexico', 'invoicing'),
1502
+		'NY' => __('New York', 'invoicing'),
1503
+		'NC' => __('North Carolina', 'invoicing'),
1504
+		'ND' => __('North Dakota', 'invoicing'),
1505
+		'OH' => __('Ohio', 'invoicing'),
1506
+		'OK' => __('Oklahoma', 'invoicing'),
1507
+		'OR' => __('Oregon', 'invoicing'),
1508
+		'PA' => __('Pennsylvania', 'invoicing'),
1509
+		'RI' => __('Rhode Island', 'invoicing'),
1510
+		'SC' => __('South Carolina', 'invoicing'),
1511
+		'SD' => __('South Dakota', 'invoicing'),
1512
+		'TN' => __('Tennessee', 'invoicing'),
1513
+		'TX' => __('Texas', 'invoicing'),
1514
+		'UT' => __('Utah', 'invoicing'),
1515
+		'VT' => __('Vermont', 'invoicing'),
1516
+		'VA' => __('Virginia', 'invoicing'),
1517
+		'WA' => __('Washington', 'invoicing'),
1518
+		'WV' => __('West Virginia', 'invoicing'),
1519
+		'WI' => __('Wisconsin', 'invoicing'),
1520
+		'WY' => __('Wyoming', 'invoicing'),
1521
+		'AA' => __('Armed Forces (AA)', 'invoicing'),
1522
+		'AE' => __('Armed Forces (AE)', 'invoicing'),
1523
+		'AP' => __('Armed Forces (AP)', 'invoicing'),
1524 1524
 	),
1525 1525
 	'VN' => array(),
1526 1526
 	'YT' => array(),
1527 1527
 	'ZA' => array( // South African states.
1528
-		'EC'  => __( 'Eastern Cape', 'invoicing' ),
1529
-		'FS'  => __( 'Free State', 'invoicing' ),
1530
-		'GP'  => __( 'Gauteng', 'invoicing' ),
1531
-		'KZN' => __( 'KwaZulu-Natal', 'invoicing' ),
1532
-		'LP'  => __( 'Limpopo', 'invoicing' ),
1533
-		'MP'  => __( 'Mpumalanga', 'invoicing' ),
1534
-		'NC'  => __( 'Northern Cape', 'invoicing' ),
1535
-		'NW'  => __( 'North West', 'invoicing' ),
1536
-		'WC'  => __( 'Western Cape', 'invoicing' ),
1528
+		'EC'  => __('Eastern Cape', 'invoicing'),
1529
+		'FS'  => __('Free State', 'invoicing'),
1530
+		'GP'  => __('Gauteng', 'invoicing'),
1531
+		'KZN' => __('KwaZulu-Natal', 'invoicing'),
1532
+		'LP'  => __('Limpopo', 'invoicing'),
1533
+		'MP'  => __('Mpumalanga', 'invoicing'),
1534
+		'NC'  => __('Northern Cape', 'invoicing'),
1535
+		'NW'  => __('North West', 'invoicing'),
1536
+		'WC'  => __('Western Cape', 'invoicing'),
1537 1537
 	),
1538 1538
 	'ZM' => array( // Zambia's Provinces. Ref: https://en.wikipedia.org/wiki/ISO_3166-2:ZM.
1539
-		'ZM-01' => __( 'Western', 'invoicing' ),
1540
-		'ZM-02' => __( 'Central', 'invoicing' ),
1541
-		'ZM-03' => __( 'Eastern', 'invoicing' ),
1542
-		'ZM-04' => __( 'Luapula', 'invoicing' ),
1543
-		'ZM-05' => __( 'Northern', 'invoicing' ),
1544
-		'ZM-06' => __( 'North-Western', 'invoicing' ),
1545
-		'ZM-07' => __( 'Southern', 'invoicing' ),
1546
-		'ZM-08' => __( 'Copperbelt', 'invoicing' ),
1547
-		'ZM-09' => __( 'Lusaka', 'invoicing' ),
1548
-		'ZM-10' => __( 'Muchinga', 'invoicing' ),
1539
+		'ZM-01' => __('Western', 'invoicing'),
1540
+		'ZM-02' => __('Central', 'invoicing'),
1541
+		'ZM-03' => __('Eastern', 'invoicing'),
1542
+		'ZM-04' => __('Luapula', 'invoicing'),
1543
+		'ZM-05' => __('Northern', 'invoicing'),
1544
+		'ZM-06' => __('North-Western', 'invoicing'),
1545
+		'ZM-07' => __('Southern', 'invoicing'),
1546
+		'ZM-08' => __('Copperbelt', 'invoicing'),
1547
+		'ZM-09' => __('Lusaka', 'invoicing'),
1548
+		'ZM-10' => __('Muchinga', 'invoicing'),
1549 1549
 	),
1550 1550
 );
Please login to merge, or discard this patch.
includes/data/phone-codes.php 2 patches
Indentation   +257 added lines, -257 removed lines patch added patch discarded remove patch
@@ -10,261 +10,261 @@
 block discarded – undo
10 10
 defined( 'ABSPATH' ) || exit;
11 11
 
12 12
 return array(
13
-	'BD' => '+880',
14
-	'BE' => '+32',
15
-	'BF' => '+226',
16
-	'BG' => '+359',
17
-	'BA' => '+387',
18
-	'BB' => '+1246',
19
-	'WF' => '+681',
20
-	'BL' => '+590',
21
-	'BM' => '+1441',
22
-	'BN' => '+673',
23
-	'BO' => '+591',
24
-	'BH' => '+973',
25
-	'BI' => '+257',
26
-	'BJ' => '+229',
27
-	'BT' => '+975',
28
-	'JM' => '+1876',
29
-	'BV' => '',
30
-	'BW' => '+267',
31
-	'WS' => '+685',
32
-	'BQ' => '+599',
33
-	'BR' => '+55',
34
-	'BS' => '+1242',
35
-	'JE' => '+441534',
36
-	'BY' => '+375',
37
-	'BZ' => '+501',
38
-	'RU' => '+7',
39
-	'RW' => '+250',
40
-	'RS' => '+381',
41
-	'TL' => '+670',
42
-	'RE' => '+262',
43
-	'TM' => '+993',
44
-	'TJ' => '+992',
45
-	'RO' => '+40',
46
-	'TK' => '+690',
47
-	'GW' => '+245',
48
-	'GU' => '+1671',
49
-	'GT' => '+502',
50
-	'GS' => '',
51
-	'GR' => '+30',
52
-	'GQ' => '+240',
53
-	'GP' => '+590',
54
-	'JP' => '+81',
55
-	'GY' => '+592',
56
-	'GG' => '+441481',
57
-	'GF' => '+594',
58
-	'GE' => '+995',
59
-	'GD' => '+1473',
60
-	'GB' => '+44',
61
-	'GA' => '+241',
62
-	'SV' => '+503',
63
-	'GN' => '+224',
64
-	'GM' => '+220',
65
-	'GL' => '+299',
66
-	'GI' => '+350',
67
-	'GH' => '+233',
68
-	'OM' => '+968',
69
-	'TN' => '+216',
70
-	'JO' => '+962',
71
-	'HR' => '+385',
72
-	'HT' => '+509',
73
-	'HU' => '+36',
74
-	'HK' => '+852',
75
-	'HN' => '+504',
76
-	'HM' => '',
77
-	'VE' => '+58',
78
-	'PR' => array(
79
-		'+1787',
80
-		'+1939',
81
-	),
82
-	'PS' => '+970',
83
-	'PW' => '+680',
84
-	'PT' => '+351',
85
-	'SJ' => '+47',
86
-	'PY' => '+595',
87
-	'IQ' => '+964',
88
-	'PA' => '+507',
89
-	'PF' => '+689',
90
-	'PG' => '+675',
91
-	'PE' => '+51',
92
-	'PK' => '+92',
93
-	'PH' => '+63',
94
-	'PN' => '+870',
95
-	'PL' => '+48',
96
-	'PM' => '+508',
97
-	'ZM' => '+260',
98
-	'EH' => '+212',
99
-	'EE' => '+372',
100
-	'EG' => '+20',
101
-	'ZA' => '+27',
102
-	'EC' => '+593',
103
-	'IT' => '+39',
104
-	'VN' => '+84',
105
-	'SB' => '+677',
106
-	'ET' => '+251',
107
-	'SO' => '+252',
108
-	'ZW' => '+263',
109
-	'SA' => '+966',
110
-	'ES' => '+34',
111
-	'ER' => '+291',
112
-	'ME' => '+382',
113
-	'MD' => '+373',
114
-	'MG' => '+261',
115
-	'MF' => '+590',
116
-	'MA' => '+212',
117
-	'MC' => '+377',
118
-	'UZ' => '+998',
119
-	'MM' => '+95',
120
-	'ML' => '+223',
121
-	'MO' => '+853',
122
-	'MN' => '+976',
123
-	'MH' => '+692',
124
-	'MK' => '+389',
125
-	'MU' => '+230',
126
-	'MT' => '+356',
127
-	'MW' => '+265',
128
-	'MV' => '+960',
129
-	'MQ' => '+596',
130
-	'MP' => '+1670',
131
-	'MS' => '+1664',
132
-	'MR' => '+222',
133
-	'IM' => '+441624',
134
-	'UG' => '+256',
135
-	'TZ' => '+255',
136
-	'MY' => '+60',
137
-	'MX' => '+52',
138
-	'IL' => '+972',
139
-	'FR' => '+33',
140
-	'IO' => '+246',
141
-	'SH' => '+290',
142
-	'FI' => '+358',
143
-	'FJ' => '+679',
144
-	'FK' => '+500',
145
-	'FM' => '+691',
146
-	'FO' => '+298',
147
-	'NI' => '+505',
148
-	'NL' => '+31',
149
-	'NO' => '+47',
150
-	'NA' => '+264',
151
-	'VU' => '+678',
152
-	'NC' => '+687',
153
-	'NE' => '+227',
154
-	'NF' => '+672',
155
-	'NG' => '+234',
156
-	'NZ' => '+64',
157
-	'NP' => '+977',
158
-	'NR' => '+674',
159
-	'NU' => '+683',
160
-	'CK' => '+682',
161
-	'XK' => '',
162
-	'CI' => '+225',
163
-	'CH' => '+41',
164
-	'CO' => '+57',
165
-	'CN' => '+86',
166
-	'CM' => '+237',
167
-	'CL' => '+56',
168
-	'CC' => '+61',
169
-	'CA' => '+1',
170
-	'CG' => '+242',
171
-	'CF' => '+236',
172
-	'CD' => '+243',
173
-	'CZ' => '+420',
174
-	'CY' => '+357',
175
-	'CX' => '+61',
176
-	'CR' => '+506',
177
-	'CW' => '+599',
178
-	'CV' => '+238',
179
-	'CU' => '+53',
180
-	'SZ' => '+268',
181
-	'SY' => '+963',
182
-	'SX' => '+599',
183
-	'KG' => '+996',
184
-	'KE' => '+254',
185
-	'SS' => '+211',
186
-	'SR' => '+597',
187
-	'KI' => '+686',
188
-	'KH' => '+855',
189
-	'KN' => '+1869',
190
-	'KM' => '+269',
191
-	'ST' => '+239',
192
-	'SK' => '+421',
193
-	'KR' => '+82',
194
-	'SI' => '+386',
195
-	'KP' => '+850',
196
-	'KW' => '+965',
197
-	'SN' => '+221',
198
-	'SM' => '+378',
199
-	'SL' => '+232',
200
-	'SC' => '+248',
201
-	'KZ' => '+7',
202
-	'KY' => '+1345',
203
-	'SG' => '+65',
204
-	'SE' => '+46',
205
-	'SD' => '+249',
206
-	'DO' => array(
207
-		'+1809',
208
-		'+1829',
209
-		'+1849',
210
-	),
211
-	'DM' => '+1767',
212
-	'DJ' => '+253',
213
-	'DK' => '+45',
214
-	'VG' => '+1284',
215
-	'DE' => '+49',
216
-	'YE' => '+967',
217
-	'DZ' => '+213',
218
-	'US' => '+1',
219
-	'UY' => '+598',
220
-	'YT' => '+262',
221
-	'UM' => '+1',
222
-	'LB' => '+961',
223
-	'LC' => '+1758',
224
-	'LA' => '+856',
225
-	'TV' => '+688',
226
-	'TW' => '+886',
227
-	'TT' => '+1868',
228
-	'TR' => '+90',
229
-	'LK' => '+94',
230
-	'LI' => '+423',
231
-	'LV' => '+371',
232
-	'TO' => '+676',
233
-	'LT' => '+370',
234
-	'LU' => '+352',
235
-	'LR' => '+231',
236
-	'LS' => '+266',
237
-	'TH' => '+66',
238
-	'TF' => '',
239
-	'TG' => '+228',
240
-	'TD' => '+235',
241
-	'TC' => '+1649',
242
-	'LY' => '+218',
243
-	'VA' => '+379',
244
-	'VC' => '+1784',
245
-	'AE' => '+971',
246
-	'AD' => '+376',
247
-	'AG' => '+1268',
248
-	'AF' => '+93',
249
-	'AI' => '+1264',
250
-	'VI' => '+1340',
251
-	'IS' => '+354',
252
-	'IR' => '+98',
253
-	'AM' => '+374',
254
-	'AL' => '+355',
255
-	'AO' => '+244',
256
-	'AQ' => '',
257
-	'AS' => '+1684',
258
-	'AR' => '+54',
259
-	'AU' => '+61',
260
-	'AT' => '+43',
261
-	'AW' => '+297',
262
-	'IN' => '+91',
263
-	'AX' => '+35818',
264
-	'AZ' => '+994',
265
-	'IE' => '+353',
266
-	'ID' => '+62',
267
-	'UA' => '+380',
268
-	'QA' => '+974',
269
-	'MZ' => '+258',
13
+    'BD' => '+880',
14
+    'BE' => '+32',
15
+    'BF' => '+226',
16
+    'BG' => '+359',
17
+    'BA' => '+387',
18
+    'BB' => '+1246',
19
+    'WF' => '+681',
20
+    'BL' => '+590',
21
+    'BM' => '+1441',
22
+    'BN' => '+673',
23
+    'BO' => '+591',
24
+    'BH' => '+973',
25
+    'BI' => '+257',
26
+    'BJ' => '+229',
27
+    'BT' => '+975',
28
+    'JM' => '+1876',
29
+    'BV' => '',
30
+    'BW' => '+267',
31
+    'WS' => '+685',
32
+    'BQ' => '+599',
33
+    'BR' => '+55',
34
+    'BS' => '+1242',
35
+    'JE' => '+441534',
36
+    'BY' => '+375',
37
+    'BZ' => '+501',
38
+    'RU' => '+7',
39
+    'RW' => '+250',
40
+    'RS' => '+381',
41
+    'TL' => '+670',
42
+    'RE' => '+262',
43
+    'TM' => '+993',
44
+    'TJ' => '+992',
45
+    'RO' => '+40',
46
+    'TK' => '+690',
47
+    'GW' => '+245',
48
+    'GU' => '+1671',
49
+    'GT' => '+502',
50
+    'GS' => '',
51
+    'GR' => '+30',
52
+    'GQ' => '+240',
53
+    'GP' => '+590',
54
+    'JP' => '+81',
55
+    'GY' => '+592',
56
+    'GG' => '+441481',
57
+    'GF' => '+594',
58
+    'GE' => '+995',
59
+    'GD' => '+1473',
60
+    'GB' => '+44',
61
+    'GA' => '+241',
62
+    'SV' => '+503',
63
+    'GN' => '+224',
64
+    'GM' => '+220',
65
+    'GL' => '+299',
66
+    'GI' => '+350',
67
+    'GH' => '+233',
68
+    'OM' => '+968',
69
+    'TN' => '+216',
70
+    'JO' => '+962',
71
+    'HR' => '+385',
72
+    'HT' => '+509',
73
+    'HU' => '+36',
74
+    'HK' => '+852',
75
+    'HN' => '+504',
76
+    'HM' => '',
77
+    'VE' => '+58',
78
+    'PR' => array(
79
+        '+1787',
80
+        '+1939',
81
+    ),
82
+    'PS' => '+970',
83
+    'PW' => '+680',
84
+    'PT' => '+351',
85
+    'SJ' => '+47',
86
+    'PY' => '+595',
87
+    'IQ' => '+964',
88
+    'PA' => '+507',
89
+    'PF' => '+689',
90
+    'PG' => '+675',
91
+    'PE' => '+51',
92
+    'PK' => '+92',
93
+    'PH' => '+63',
94
+    'PN' => '+870',
95
+    'PL' => '+48',
96
+    'PM' => '+508',
97
+    'ZM' => '+260',
98
+    'EH' => '+212',
99
+    'EE' => '+372',
100
+    'EG' => '+20',
101
+    'ZA' => '+27',
102
+    'EC' => '+593',
103
+    'IT' => '+39',
104
+    'VN' => '+84',
105
+    'SB' => '+677',
106
+    'ET' => '+251',
107
+    'SO' => '+252',
108
+    'ZW' => '+263',
109
+    'SA' => '+966',
110
+    'ES' => '+34',
111
+    'ER' => '+291',
112
+    'ME' => '+382',
113
+    'MD' => '+373',
114
+    'MG' => '+261',
115
+    'MF' => '+590',
116
+    'MA' => '+212',
117
+    'MC' => '+377',
118
+    'UZ' => '+998',
119
+    'MM' => '+95',
120
+    'ML' => '+223',
121
+    'MO' => '+853',
122
+    'MN' => '+976',
123
+    'MH' => '+692',
124
+    'MK' => '+389',
125
+    'MU' => '+230',
126
+    'MT' => '+356',
127
+    'MW' => '+265',
128
+    'MV' => '+960',
129
+    'MQ' => '+596',
130
+    'MP' => '+1670',
131
+    'MS' => '+1664',
132
+    'MR' => '+222',
133
+    'IM' => '+441624',
134
+    'UG' => '+256',
135
+    'TZ' => '+255',
136
+    'MY' => '+60',
137
+    'MX' => '+52',
138
+    'IL' => '+972',
139
+    'FR' => '+33',
140
+    'IO' => '+246',
141
+    'SH' => '+290',
142
+    'FI' => '+358',
143
+    'FJ' => '+679',
144
+    'FK' => '+500',
145
+    'FM' => '+691',
146
+    'FO' => '+298',
147
+    'NI' => '+505',
148
+    'NL' => '+31',
149
+    'NO' => '+47',
150
+    'NA' => '+264',
151
+    'VU' => '+678',
152
+    'NC' => '+687',
153
+    'NE' => '+227',
154
+    'NF' => '+672',
155
+    'NG' => '+234',
156
+    'NZ' => '+64',
157
+    'NP' => '+977',
158
+    'NR' => '+674',
159
+    'NU' => '+683',
160
+    'CK' => '+682',
161
+    'XK' => '',
162
+    'CI' => '+225',
163
+    'CH' => '+41',
164
+    'CO' => '+57',
165
+    'CN' => '+86',
166
+    'CM' => '+237',
167
+    'CL' => '+56',
168
+    'CC' => '+61',
169
+    'CA' => '+1',
170
+    'CG' => '+242',
171
+    'CF' => '+236',
172
+    'CD' => '+243',
173
+    'CZ' => '+420',
174
+    'CY' => '+357',
175
+    'CX' => '+61',
176
+    'CR' => '+506',
177
+    'CW' => '+599',
178
+    'CV' => '+238',
179
+    'CU' => '+53',
180
+    'SZ' => '+268',
181
+    'SY' => '+963',
182
+    'SX' => '+599',
183
+    'KG' => '+996',
184
+    'KE' => '+254',
185
+    'SS' => '+211',
186
+    'SR' => '+597',
187
+    'KI' => '+686',
188
+    'KH' => '+855',
189
+    'KN' => '+1869',
190
+    'KM' => '+269',
191
+    'ST' => '+239',
192
+    'SK' => '+421',
193
+    'KR' => '+82',
194
+    'SI' => '+386',
195
+    'KP' => '+850',
196
+    'KW' => '+965',
197
+    'SN' => '+221',
198
+    'SM' => '+378',
199
+    'SL' => '+232',
200
+    'SC' => '+248',
201
+    'KZ' => '+7',
202
+    'KY' => '+1345',
203
+    'SG' => '+65',
204
+    'SE' => '+46',
205
+    'SD' => '+249',
206
+    'DO' => array(
207
+        '+1809',
208
+        '+1829',
209
+        '+1849',
210
+    ),
211
+    'DM' => '+1767',
212
+    'DJ' => '+253',
213
+    'DK' => '+45',
214
+    'VG' => '+1284',
215
+    'DE' => '+49',
216
+    'YE' => '+967',
217
+    'DZ' => '+213',
218
+    'US' => '+1',
219
+    'UY' => '+598',
220
+    'YT' => '+262',
221
+    'UM' => '+1',
222
+    'LB' => '+961',
223
+    'LC' => '+1758',
224
+    'LA' => '+856',
225
+    'TV' => '+688',
226
+    'TW' => '+886',
227
+    'TT' => '+1868',
228
+    'TR' => '+90',
229
+    'LK' => '+94',
230
+    'LI' => '+423',
231
+    'LV' => '+371',
232
+    'TO' => '+676',
233
+    'LT' => '+370',
234
+    'LU' => '+352',
235
+    'LR' => '+231',
236
+    'LS' => '+266',
237
+    'TH' => '+66',
238
+    'TF' => '',
239
+    'TG' => '+228',
240
+    'TD' => '+235',
241
+    'TC' => '+1649',
242
+    'LY' => '+218',
243
+    'VA' => '+379',
244
+    'VC' => '+1784',
245
+    'AE' => '+971',
246
+    'AD' => '+376',
247
+    'AG' => '+1268',
248
+    'AF' => '+93',
249
+    'AI' => '+1264',
250
+    'VI' => '+1340',
251
+    'IS' => '+354',
252
+    'IR' => '+98',
253
+    'AM' => '+374',
254
+    'AL' => '+355',
255
+    'AO' => '+244',
256
+    'AQ' => '',
257
+    'AS' => '+1684',
258
+    'AR' => '+54',
259
+    'AU' => '+61',
260
+    'AT' => '+43',
261
+    'AW' => '+297',
262
+    'IN' => '+91',
263
+    'AX' => '+35818',
264
+    'AZ' => '+994',
265
+    'IE' => '+353',
266
+    'ID' => '+62',
267
+    'UA' => '+380',
268
+    'QA' => '+974',
269
+    'MZ' => '+258',
270 270
 );
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -7,7 +7,7 @@
 block discarded – undo
7 7
  * @package Invoicing/data
8 8
  */
9 9
 
10
-defined( 'ABSPATH' ) || exit;
10
+defined('ABSPATH') || exit;
11 11
 
12 12
 return array(
13 13
 	'BD' => '+880',
Please login to merge, or discard this patch.
includes/data/countries.php 2 patches
Indentation   +252 added lines, -252 removed lines patch added patch discarded remove patch
@@ -12,256 +12,256 @@
 block discarded – undo
12 12
 defined( 'ABSPATH' ) || exit;
13 13
 
14 14
 return array(
15
-	'US' => __('United States', 'invoicing'),
16
-	'CA' => __('Canada', 'invoicing'),
17
-	'GB' => __('United Kingdom', 'invoicing'),
18
-	'AF' => __('Afghanistan', 'invoicing'),
19
-	'AX' => __('Aland Islands', 'invoicing'),
20
-	'AL' => __('Albania', 'invoicing'),
21
-	'DZ' => __('Algeria', 'invoicing'),
22
-	'AS' => __('American Samoa', 'invoicing'),
23
-	'AD' => __('Andorra', 'invoicing'),
24
-	'AO' => __('Angola', 'invoicing'),
25
-	'AI' => __('Anguilla', 'invoicing'),
26
-	'AQ' => __('Antarctica', 'invoicing'),
27
-	'AG' => __('Antigua and Barbuda', 'invoicing'),
28
-	'AR' => __('Argentina', 'invoicing'),
29
-	'AM' => __('Armenia', 'invoicing'),
30
-	'AW' => __('Aruba', 'invoicing'),
31
-	'AU' => __('Australia', 'invoicing'),
32
-	'AT' => __('Austria', 'invoicing'),
33
-	'AZ' => __('Azerbaijan', 'invoicing'),
34
-	'BS' => __('Bahamas', 'invoicing'),
35
-	'BH' => __('Bahrain', 'invoicing'),
36
-	'BD' => __('Bangladesh', 'invoicing'),
37
-	'BB' => __('Barbados', 'invoicing'),
38
-	'BY' => __('Belarus', 'invoicing'),
39
-	'BE' => __('Belgium', 'invoicing'),
40
-	'BZ' => __('Belize', 'invoicing'),
41
-	'BJ' => __('Benin', 'invoicing'),
42
-	'BM' => __('Bermuda', 'invoicing'),
43
-	'BT' => __('Bhutan', 'invoicing'),
44
-	'BO' => __('Bolivia', 'invoicing'),
45
-	'BQ' => __('Bonaire, Saint Eustatius and Saba', 'invoicing'),
46
-	'BA' => __('Bosnia and Herzegovina', 'invoicing'),
47
-	'BW' => __('Botswana', 'invoicing'),
48
-	'BV' => __('Bouvet Island', 'invoicing'),
49
-	'BR' => __('Brazil', 'invoicing'),
50
-	'IO' => __('British Indian Ocean Territory', 'invoicing'),
51
-	'BN' => __('Brunei Darrussalam', 'invoicing'),
52
-	'BG' => __('Bulgaria', 'invoicing'),
53
-	'BF' => __('Burkina Faso', 'invoicing'),
54
-	'BI' => __('Burundi', 'invoicing'),
55
-	'KH' => __('Cambodia', 'invoicing'),
56
-	'CM' => __('Cameroon', 'invoicing'),
57
-	'CV' => __('Cape Verde', 'invoicing'),
58
-	'KY' => __('Cayman Islands', 'invoicing'),
59
-	'CF' => __('Central African Republic', 'invoicing'),
60
-	'TD' => __('Chad', 'invoicing'),
61
-	'CL' => __('Chile', 'invoicing'),
62
-	'CN' => __('China', 'invoicing'),
63
-	'CX' => __('Christmas Island', 'invoicing'),
64
-	'CC' => __('Cocos Islands', 'invoicing'),
65
-	'CO' => __('Colombia', 'invoicing'),
66
-	'KM' => __('Comoros', 'invoicing'),
67
-	'CD' => __('Congo, Democratic People\'s Republic', 'invoicing'),
68
-	'CG' => __('Congo, Republic of', 'invoicing'),
69
-	'CK' => __('Cook Islands', 'invoicing'),
70
-	'CR' => __('Costa Rica', 'invoicing'),
71
-	'CI' => __('Cote d\'Ivoire', 'invoicing'),
72
-	'HR' => __('Croatia/Hrvatska', 'invoicing'),
73
-	'CU' => __('Cuba', 'invoicing'),
74
-	'CW' => __('Cura&Ccedil;ao', 'invoicing'),
75
-	'CY' => __('Cyprus', 'invoicing'),
76
-	'CZ' => __('Czech Republic', 'invoicing'),
77
-	'DK' => __('Denmark', 'invoicing'),
78
-	'DJ' => __('Djibouti', 'invoicing'),
79
-	'DM' => __('Dominica', 'invoicing'),
80
-	'DO' => __('Dominican Republic', 'invoicing'),
81
-	'TP' => __('East Timor', 'invoicing'),
82
-	'EC' => __('Ecuador', 'invoicing'),
83
-	'EG' => __('Egypt', 'invoicing'),
84
-	'GQ' => __('Equatorial Guinea', 'invoicing'),
85
-	'SV' => __('El Salvador', 'invoicing'),
86
-	'ER' => __('Eritrea', 'invoicing'),
87
-	'EE' => __('Estonia', 'invoicing'),
88
-	'ET' => __('Ethiopia', 'invoicing'),
89
-	'FK' => __('Falkland Islands', 'invoicing'),
90
-	'FO' => __('Faroe Islands', 'invoicing'),
91
-	'FJ' => __('Fiji', 'invoicing'),
92
-	'FI' => __('Finland', 'invoicing'),
93
-	'FR' => __('France', 'invoicing'),
94
-	'GF' => __('French Guiana', 'invoicing'),
95
-	'PF' => __('French Polynesia', 'invoicing'),
96
-	'TF' => __('French Southern Territories', 'invoicing'),
97
-	'GA' => __('Gabon', 'invoicing'),
98
-	'GM' => __('Gambia', 'invoicing'),
99
-	'GE' => __('Georgia', 'invoicing'),
100
-	'DE' => __('Germany', 'invoicing'),
101
-	'GR' => __('Greece', 'invoicing'),
102
-	'GH' => __('Ghana', 'invoicing'),
103
-	'GI' => __('Gibraltar', 'invoicing'),
104
-	'GL' => __('Greenland', 'invoicing'),
105
-	'GD' => __('Grenada', 'invoicing'),
106
-	'GP' => __('Guadeloupe', 'invoicing'),
107
-	'GU' => __('Guam', 'invoicing'),
108
-	'GT' => __('Guatemala', 'invoicing'),
109
-	'GG' => __('Guernsey', 'invoicing'),
110
-	'GN' => __('Guinea', 'invoicing'),
111
-	'GW' => __('Guinea-Bissau', 'invoicing'),
112
-	'GY' => __('Guyana', 'invoicing'),
113
-	'HT' => __('Haiti', 'invoicing'),
114
-	'HM' => __('Heard and McDonald Islands', 'invoicing'),
115
-	'VA' => __('Holy See (City Vatican State)', 'invoicing'),
116
-	'HN' => __('Honduras', 'invoicing'),
117
-	'HK' => __('Hong Kong', 'invoicing'),
118
-	'HU' => __('Hungary', 'invoicing'),
119
-	'IS' => __('Iceland', 'invoicing'),
120
-	'IN' => __('India', 'invoicing'),
121
-	'ID' => __('Indonesia', 'invoicing'),
122
-	'IR' => __('Iran', 'invoicing'),
123
-	'IQ' => __('Iraq', 'invoicing'),
124
-	'IE' => __('Ireland', 'invoicing'),
125
-	'IM' => __('Isle of Man', 'invoicing'),
126
-	'IL' => __('Israel', 'invoicing'),
127
-	'IT' => __('Italy', 'invoicing'),
128
-	'JM' => __('Jamaica', 'invoicing'),
129
-	'JP' => __('Japan', 'invoicing'),
130
-	'JE' => __('Jersey', 'invoicing'),
131
-	'JO' => __('Jordan', 'invoicing'),
132
-	'KZ' => __('Kazakhstan', 'invoicing'),
133
-	'KE' => __('Kenya', 'invoicing'),
134
-	'KI' => __('Kiribati', 'invoicing'),
135
-	'KW' => __('Kuwait', 'invoicing'),
136
-	'KG' => __('Kyrgyzstan', 'invoicing'),
137
-	'LA' => __('Lao People\'s Democratic Republic', 'invoicing'),
138
-	'LV' => __('Latvia', 'invoicing'),
139
-	'LB' => __('Lebanon', 'invoicing'),
140
-	'LS' => __('Lesotho', 'invoicing'),
141
-	'LR' => __('Liberia', 'invoicing'),
142
-	'LY' => __('Libyan Arab Jamahiriya', 'invoicing'),
143
-	'LI' => __('Liechtenstein', 'invoicing'),
144
-	'LT' => __('Lithuania', 'invoicing'),
145
-	'LU' => __('Luxembourg', 'invoicing'),
146
-	'MO' => __('Macau', 'invoicing'),
147
-	'MK' => __('Macedonia', 'invoicing'),
148
-	'MG' => __('Madagascar', 'invoicing'),
149
-	'MW' => __('Malawi', 'invoicing'),
150
-	'MY' => __('Malaysia', 'invoicing'),
151
-	'MV' => __('Maldives', 'invoicing'),
152
-	'ML' => __('Mali', 'invoicing'),
153
-	'MT' => __('Malta', 'invoicing'),
154
-	'MH' => __('Marshall Islands', 'invoicing'),
155
-	'MQ' => __('Martinique', 'invoicing'),
156
-	'MR' => __('Mauritania', 'invoicing'),
157
-	'MU' => __('Mauritius', 'invoicing'),
158
-	'YT' => __('Mayotte', 'invoicing'),
159
-	'MX' => __('Mexico', 'invoicing'),
160
-	'FM' => __('Micronesia', 'invoicing'),
161
-	'MD' => __('Moldova, Republic of', 'invoicing'),
162
-	'MC' => __('Monaco', 'invoicing'),
163
-	'MN' => __('Mongolia', 'invoicing'),
164
-	'ME' => __('Montenegro', 'invoicing'),
165
-	'MS' => __('Montserrat', 'invoicing'),
166
-	'MA' => __('Morocco', 'invoicing'),
167
-	'MZ' => __('Mozambique', 'invoicing'),
168
-	'MM' => __('Myanmar', 'invoicing'),
169
-	'NA' => __('Namibia', 'invoicing'),
170
-	'NR' => __('Nauru', 'invoicing'),
171
-	'NP' => __('Nepal', 'invoicing'),
172
-	'NL' => __('Netherlands', 'invoicing'),
173
-	'AN' => __('Netherlands Antilles', 'invoicing'),
174
-	'NC' => __('New Caledonia', 'invoicing'),
175
-	'NZ' => __('New Zealand', 'invoicing'),
176
-	'NI' => __('Nicaragua', 'invoicing'),
177
-	'NE' => __('Niger', 'invoicing'),
178
-	'NG' => __('Nigeria', 'invoicing'),
179
-	'NU' => __('Niue', 'invoicing'),
180
-	'NF' => __('Norfolk Island', 'invoicing'),
181
-	'KP' => __('North Korea', 'invoicing'),
182
-	'MP' => __('Northern Mariana Islands', 'invoicing'),
183
-	'NO' => __('Norway', 'invoicing'),
184
-	'OM' => __('Oman', 'invoicing'),
185
-	'PK' => __('Pakistan', 'invoicing'),
186
-	'PW' => __('Palau', 'invoicing'),
187
-	'PS' => __('Palestinian Territories', 'invoicing'),
188
-	'PA' => __('Panama', 'invoicing'),
189
-	'PG' => __('Papua New Guinea', 'invoicing'),
190
-	'PY' => __('Paraguay', 'invoicing'),
191
-	'PE' => __('Peru', 'invoicing'),
192
-	'PH' => __('Phillipines', 'invoicing'),
193
-	'PN' => __('Pitcairn Island', 'invoicing'),
194
-	'PL' => __('Poland', 'invoicing'),
195
-	'PT' => __('Portugal', 'invoicing'),
196
-	'PR' => __('Puerto Rico', 'invoicing'),
197
-	'QA' => __('Qatar', 'invoicing'),
198
-	'XK' => __('Republic of Kosovo', 'invoicing'),
199
-	'RE' => __('Reunion Island', 'invoicing'),
200
-	'RO' => __('Romania', 'invoicing'),
201
-	'RU' => __('Russian Federation', 'invoicing'),
202
-	'RW' => __('Rwanda', 'invoicing'),
203
-	'BL' => __('Saint Barth&eacute;lemy', 'invoicing'),
204
-	'SH' => __('Saint Helena', 'invoicing'),
205
-	'KN' => __('Saint Kitts and Nevis', 'invoicing'),
206
-	'LC' => __('Saint Lucia', 'invoicing'),
207
-	'MF' => __('Saint Martin (French)', 'invoicing'),
208
-	'SX' => __('Saint Martin (Dutch)', 'invoicing'),
209
-	'PM' => __('Saint Pierre and Miquelon', 'invoicing'),
210
-	'VC' => __('Saint Vincent and the Grenadines', 'invoicing'),
211
-	'SM' => __('San Marino', 'invoicing'),
212
-	'ST' => __('S&atilde;o Tom&eacute; and Pr&iacute;ncipe', 'invoicing'),
213
-	'SA' => __('Saudi Arabia', 'invoicing'),
214
-	'SN' => __('Senegal', 'invoicing'),
215
-	'RS' => __('Serbia', 'invoicing'),
216
-	'SC' => __('Seychelles', 'invoicing'),
217
-	'SL' => __('Sierra Leone', 'invoicing'),
218
-	'SG' => __('Singapore', 'invoicing'),
219
-	'SK' => __('Slovak Republic', 'invoicing'),
220
-	'SI' => __('Slovenia', 'invoicing'),
221
-	'SB' => __('Solomon Islands', 'invoicing'),
222
-	'SO' => __('Somalia', 'invoicing'),
223
-	'ZA' => __('South Africa', 'invoicing'),
224
-	'GS' => __('South Georgia', 'invoicing'),
225
-	'KR' => __('South Korea', 'invoicing'),
226
-	'SS' => __('South Sudan', 'invoicing'),
227
-	'ES' => __('Spain', 'invoicing'),
228
-	'LK' => __('Sri Lanka', 'invoicing'),
229
-	'SD' => __('Sudan', 'invoicing'),
230
-	'SR' => __('Suriname', 'invoicing'),
231
-	'SJ' => __('Svalbard and Jan Mayen Islands', 'invoicing'),
232
-	'SZ' => __('Swaziland', 'invoicing'),
233
-	'SE' => __('Sweden', 'invoicing'),
234
-	'CH' => __('Switzerland', 'invoicing'),
235
-	'SY' => __('Syrian Arab Republic', 'invoicing'),
236
-	'TW' => __('Taiwan', 'invoicing'),
237
-	'TJ' => __('Tajikistan', 'invoicing'),
238
-	'TZ' => __('Tanzania', 'invoicing'),
239
-	'TH' => __('Thailand', 'invoicing'),
240
-	'TL' => __('Timor-Leste', 'invoicing'),
241
-	'TG' => __('Togo', 'invoicing'),
242
-	'TK' => __('Tokelau', 'invoicing'),
243
-	'TO' => __('Tonga', 'invoicing'),
244
-	'TT' => __('Trinidad and Tobago', 'invoicing'),
245
-	'TN' => __('Tunisia', 'invoicing'),
246
-	'TR' => __('Turkey', 'invoicing'),
247
-	'TM' => __('Turkmenistan', 'invoicing'),
248
-	'TC' => __('Turks and Caicos Islands', 'invoicing'),
249
-	'TV' => __('Tuvalu', 'invoicing'),
250
-	'UG' => __('Uganda', 'invoicing'),
251
-	'UA' => __('Ukraine', 'invoicing'),
252
-	'AE' => __('United Arab Emirates', 'invoicing'),
253
-	'UY' => __('Uruguay', 'invoicing'),
254
-	'UM' => __('US Minor Outlying Islands', 'invoicing'),
255
-	'UZ' => __('Uzbekistan', 'invoicing'),
256
-	'VU' => __('Vanuatu', 'invoicing'),
257
-	'VE' => __('Venezuela', 'invoicing'),
258
-	'VN' => __('Vietnam', 'invoicing'),
259
-	'VG' => __('Virgin Islands (British)', 'invoicing'),
260
-	'VI' => __('Virgin Islands (USA)', 'invoicing'),
261
-	'WF' => __('Wallis and Futuna Islands', 'invoicing'),
262
-	'EH' => __('Western Sahara', 'invoicing'),
263
-	'WS' => __('Western Samoa', 'invoicing'),
264
-	'YE' => __('Yemen', 'invoicing'),
265
-	'ZM' => __('Zambia', 'invoicing'),
266
-	'ZW' => __('Zimbabwe', 'invoicing'),
15
+    'US' => __('United States', 'invoicing'),
16
+    'CA' => __('Canada', 'invoicing'),
17
+    'GB' => __('United Kingdom', 'invoicing'),
18
+    'AF' => __('Afghanistan', 'invoicing'),
19
+    'AX' => __('Aland Islands', 'invoicing'),
20
+    'AL' => __('Albania', 'invoicing'),
21
+    'DZ' => __('Algeria', 'invoicing'),
22
+    'AS' => __('American Samoa', 'invoicing'),
23
+    'AD' => __('Andorra', 'invoicing'),
24
+    'AO' => __('Angola', 'invoicing'),
25
+    'AI' => __('Anguilla', 'invoicing'),
26
+    'AQ' => __('Antarctica', 'invoicing'),
27
+    'AG' => __('Antigua and Barbuda', 'invoicing'),
28
+    'AR' => __('Argentina', 'invoicing'),
29
+    'AM' => __('Armenia', 'invoicing'),
30
+    'AW' => __('Aruba', 'invoicing'),
31
+    'AU' => __('Australia', 'invoicing'),
32
+    'AT' => __('Austria', 'invoicing'),
33
+    'AZ' => __('Azerbaijan', 'invoicing'),
34
+    'BS' => __('Bahamas', 'invoicing'),
35
+    'BH' => __('Bahrain', 'invoicing'),
36
+    'BD' => __('Bangladesh', 'invoicing'),
37
+    'BB' => __('Barbados', 'invoicing'),
38
+    'BY' => __('Belarus', 'invoicing'),
39
+    'BE' => __('Belgium', 'invoicing'),
40
+    'BZ' => __('Belize', 'invoicing'),
41
+    'BJ' => __('Benin', 'invoicing'),
42
+    'BM' => __('Bermuda', 'invoicing'),
43
+    'BT' => __('Bhutan', 'invoicing'),
44
+    'BO' => __('Bolivia', 'invoicing'),
45
+    'BQ' => __('Bonaire, Saint Eustatius and Saba', 'invoicing'),
46
+    'BA' => __('Bosnia and Herzegovina', 'invoicing'),
47
+    'BW' => __('Botswana', 'invoicing'),
48
+    'BV' => __('Bouvet Island', 'invoicing'),
49
+    'BR' => __('Brazil', 'invoicing'),
50
+    'IO' => __('British Indian Ocean Territory', 'invoicing'),
51
+    'BN' => __('Brunei Darrussalam', 'invoicing'),
52
+    'BG' => __('Bulgaria', 'invoicing'),
53
+    'BF' => __('Burkina Faso', 'invoicing'),
54
+    'BI' => __('Burundi', 'invoicing'),
55
+    'KH' => __('Cambodia', 'invoicing'),
56
+    'CM' => __('Cameroon', 'invoicing'),
57
+    'CV' => __('Cape Verde', 'invoicing'),
58
+    'KY' => __('Cayman Islands', 'invoicing'),
59
+    'CF' => __('Central African Republic', 'invoicing'),
60
+    'TD' => __('Chad', 'invoicing'),
61
+    'CL' => __('Chile', 'invoicing'),
62
+    'CN' => __('China', 'invoicing'),
63
+    'CX' => __('Christmas Island', 'invoicing'),
64
+    'CC' => __('Cocos Islands', 'invoicing'),
65
+    'CO' => __('Colombia', 'invoicing'),
66
+    'KM' => __('Comoros', 'invoicing'),
67
+    'CD' => __('Congo, Democratic People\'s Republic', 'invoicing'),
68
+    'CG' => __('Congo, Republic of', 'invoicing'),
69
+    'CK' => __('Cook Islands', 'invoicing'),
70
+    'CR' => __('Costa Rica', 'invoicing'),
71
+    'CI' => __('Cote d\'Ivoire', 'invoicing'),
72
+    'HR' => __('Croatia/Hrvatska', 'invoicing'),
73
+    'CU' => __('Cuba', 'invoicing'),
74
+    'CW' => __('Cura&Ccedil;ao', 'invoicing'),
75
+    'CY' => __('Cyprus', 'invoicing'),
76
+    'CZ' => __('Czech Republic', 'invoicing'),
77
+    'DK' => __('Denmark', 'invoicing'),
78
+    'DJ' => __('Djibouti', 'invoicing'),
79
+    'DM' => __('Dominica', 'invoicing'),
80
+    'DO' => __('Dominican Republic', 'invoicing'),
81
+    'TP' => __('East Timor', 'invoicing'),
82
+    'EC' => __('Ecuador', 'invoicing'),
83
+    'EG' => __('Egypt', 'invoicing'),
84
+    'GQ' => __('Equatorial Guinea', 'invoicing'),
85
+    'SV' => __('El Salvador', 'invoicing'),
86
+    'ER' => __('Eritrea', 'invoicing'),
87
+    'EE' => __('Estonia', 'invoicing'),
88
+    'ET' => __('Ethiopia', 'invoicing'),
89
+    'FK' => __('Falkland Islands', 'invoicing'),
90
+    'FO' => __('Faroe Islands', 'invoicing'),
91
+    'FJ' => __('Fiji', 'invoicing'),
92
+    'FI' => __('Finland', 'invoicing'),
93
+    'FR' => __('France', 'invoicing'),
94
+    'GF' => __('French Guiana', 'invoicing'),
95
+    'PF' => __('French Polynesia', 'invoicing'),
96
+    'TF' => __('French Southern Territories', 'invoicing'),
97
+    'GA' => __('Gabon', 'invoicing'),
98
+    'GM' => __('Gambia', 'invoicing'),
99
+    'GE' => __('Georgia', 'invoicing'),
100
+    'DE' => __('Germany', 'invoicing'),
101
+    'GR' => __('Greece', 'invoicing'),
102
+    'GH' => __('Ghana', 'invoicing'),
103
+    'GI' => __('Gibraltar', 'invoicing'),
104
+    'GL' => __('Greenland', 'invoicing'),
105
+    'GD' => __('Grenada', 'invoicing'),
106
+    'GP' => __('Guadeloupe', 'invoicing'),
107
+    'GU' => __('Guam', 'invoicing'),
108
+    'GT' => __('Guatemala', 'invoicing'),
109
+    'GG' => __('Guernsey', 'invoicing'),
110
+    'GN' => __('Guinea', 'invoicing'),
111
+    'GW' => __('Guinea-Bissau', 'invoicing'),
112
+    'GY' => __('Guyana', 'invoicing'),
113
+    'HT' => __('Haiti', 'invoicing'),
114
+    'HM' => __('Heard and McDonald Islands', 'invoicing'),
115
+    'VA' => __('Holy See (City Vatican State)', 'invoicing'),
116
+    'HN' => __('Honduras', 'invoicing'),
117
+    'HK' => __('Hong Kong', 'invoicing'),
118
+    'HU' => __('Hungary', 'invoicing'),
119
+    'IS' => __('Iceland', 'invoicing'),
120
+    'IN' => __('India', 'invoicing'),
121
+    'ID' => __('Indonesia', 'invoicing'),
122
+    'IR' => __('Iran', 'invoicing'),
123
+    'IQ' => __('Iraq', 'invoicing'),
124
+    'IE' => __('Ireland', 'invoicing'),
125
+    'IM' => __('Isle of Man', 'invoicing'),
126
+    'IL' => __('Israel', 'invoicing'),
127
+    'IT' => __('Italy', 'invoicing'),
128
+    'JM' => __('Jamaica', 'invoicing'),
129
+    'JP' => __('Japan', 'invoicing'),
130
+    'JE' => __('Jersey', 'invoicing'),
131
+    'JO' => __('Jordan', 'invoicing'),
132
+    'KZ' => __('Kazakhstan', 'invoicing'),
133
+    'KE' => __('Kenya', 'invoicing'),
134
+    'KI' => __('Kiribati', 'invoicing'),
135
+    'KW' => __('Kuwait', 'invoicing'),
136
+    'KG' => __('Kyrgyzstan', 'invoicing'),
137
+    'LA' => __('Lao People\'s Democratic Republic', 'invoicing'),
138
+    'LV' => __('Latvia', 'invoicing'),
139
+    'LB' => __('Lebanon', 'invoicing'),
140
+    'LS' => __('Lesotho', 'invoicing'),
141
+    'LR' => __('Liberia', 'invoicing'),
142
+    'LY' => __('Libyan Arab Jamahiriya', 'invoicing'),
143
+    'LI' => __('Liechtenstein', 'invoicing'),
144
+    'LT' => __('Lithuania', 'invoicing'),
145
+    'LU' => __('Luxembourg', 'invoicing'),
146
+    'MO' => __('Macau', 'invoicing'),
147
+    'MK' => __('Macedonia', 'invoicing'),
148
+    'MG' => __('Madagascar', 'invoicing'),
149
+    'MW' => __('Malawi', 'invoicing'),
150
+    'MY' => __('Malaysia', 'invoicing'),
151
+    'MV' => __('Maldives', 'invoicing'),
152
+    'ML' => __('Mali', 'invoicing'),
153
+    'MT' => __('Malta', 'invoicing'),
154
+    'MH' => __('Marshall Islands', 'invoicing'),
155
+    'MQ' => __('Martinique', 'invoicing'),
156
+    'MR' => __('Mauritania', 'invoicing'),
157
+    'MU' => __('Mauritius', 'invoicing'),
158
+    'YT' => __('Mayotte', 'invoicing'),
159
+    'MX' => __('Mexico', 'invoicing'),
160
+    'FM' => __('Micronesia', 'invoicing'),
161
+    'MD' => __('Moldova, Republic of', 'invoicing'),
162
+    'MC' => __('Monaco', 'invoicing'),
163
+    'MN' => __('Mongolia', 'invoicing'),
164
+    'ME' => __('Montenegro', 'invoicing'),
165
+    'MS' => __('Montserrat', 'invoicing'),
166
+    'MA' => __('Morocco', 'invoicing'),
167
+    'MZ' => __('Mozambique', 'invoicing'),
168
+    'MM' => __('Myanmar', 'invoicing'),
169
+    'NA' => __('Namibia', 'invoicing'),
170
+    'NR' => __('Nauru', 'invoicing'),
171
+    'NP' => __('Nepal', 'invoicing'),
172
+    'NL' => __('Netherlands', 'invoicing'),
173
+    'AN' => __('Netherlands Antilles', 'invoicing'),
174
+    'NC' => __('New Caledonia', 'invoicing'),
175
+    'NZ' => __('New Zealand', 'invoicing'),
176
+    'NI' => __('Nicaragua', 'invoicing'),
177
+    'NE' => __('Niger', 'invoicing'),
178
+    'NG' => __('Nigeria', 'invoicing'),
179
+    'NU' => __('Niue', 'invoicing'),
180
+    'NF' => __('Norfolk Island', 'invoicing'),
181
+    'KP' => __('North Korea', 'invoicing'),
182
+    'MP' => __('Northern Mariana Islands', 'invoicing'),
183
+    'NO' => __('Norway', 'invoicing'),
184
+    'OM' => __('Oman', 'invoicing'),
185
+    'PK' => __('Pakistan', 'invoicing'),
186
+    'PW' => __('Palau', 'invoicing'),
187
+    'PS' => __('Palestinian Territories', 'invoicing'),
188
+    'PA' => __('Panama', 'invoicing'),
189
+    'PG' => __('Papua New Guinea', 'invoicing'),
190
+    'PY' => __('Paraguay', 'invoicing'),
191
+    'PE' => __('Peru', 'invoicing'),
192
+    'PH' => __('Phillipines', 'invoicing'),
193
+    'PN' => __('Pitcairn Island', 'invoicing'),
194
+    'PL' => __('Poland', 'invoicing'),
195
+    'PT' => __('Portugal', 'invoicing'),
196
+    'PR' => __('Puerto Rico', 'invoicing'),
197
+    'QA' => __('Qatar', 'invoicing'),
198
+    'XK' => __('Republic of Kosovo', 'invoicing'),
199
+    'RE' => __('Reunion Island', 'invoicing'),
200
+    'RO' => __('Romania', 'invoicing'),
201
+    'RU' => __('Russian Federation', 'invoicing'),
202
+    'RW' => __('Rwanda', 'invoicing'),
203
+    'BL' => __('Saint Barth&eacute;lemy', 'invoicing'),
204
+    'SH' => __('Saint Helena', 'invoicing'),
205
+    'KN' => __('Saint Kitts and Nevis', 'invoicing'),
206
+    'LC' => __('Saint Lucia', 'invoicing'),
207
+    'MF' => __('Saint Martin (French)', 'invoicing'),
208
+    'SX' => __('Saint Martin (Dutch)', 'invoicing'),
209
+    'PM' => __('Saint Pierre and Miquelon', 'invoicing'),
210
+    'VC' => __('Saint Vincent and the Grenadines', 'invoicing'),
211
+    'SM' => __('San Marino', 'invoicing'),
212
+    'ST' => __('S&atilde;o Tom&eacute; and Pr&iacute;ncipe', 'invoicing'),
213
+    'SA' => __('Saudi Arabia', 'invoicing'),
214
+    'SN' => __('Senegal', 'invoicing'),
215
+    'RS' => __('Serbia', 'invoicing'),
216
+    'SC' => __('Seychelles', 'invoicing'),
217
+    'SL' => __('Sierra Leone', 'invoicing'),
218
+    'SG' => __('Singapore', 'invoicing'),
219
+    'SK' => __('Slovak Republic', 'invoicing'),
220
+    'SI' => __('Slovenia', 'invoicing'),
221
+    'SB' => __('Solomon Islands', 'invoicing'),
222
+    'SO' => __('Somalia', 'invoicing'),
223
+    'ZA' => __('South Africa', 'invoicing'),
224
+    'GS' => __('South Georgia', 'invoicing'),
225
+    'KR' => __('South Korea', 'invoicing'),
226
+    'SS' => __('South Sudan', 'invoicing'),
227
+    'ES' => __('Spain', 'invoicing'),
228
+    'LK' => __('Sri Lanka', 'invoicing'),
229
+    'SD' => __('Sudan', 'invoicing'),
230
+    'SR' => __('Suriname', 'invoicing'),
231
+    'SJ' => __('Svalbard and Jan Mayen Islands', 'invoicing'),
232
+    'SZ' => __('Swaziland', 'invoicing'),
233
+    'SE' => __('Sweden', 'invoicing'),
234
+    'CH' => __('Switzerland', 'invoicing'),
235
+    'SY' => __('Syrian Arab Republic', 'invoicing'),
236
+    'TW' => __('Taiwan', 'invoicing'),
237
+    'TJ' => __('Tajikistan', 'invoicing'),
238
+    'TZ' => __('Tanzania', 'invoicing'),
239
+    'TH' => __('Thailand', 'invoicing'),
240
+    'TL' => __('Timor-Leste', 'invoicing'),
241
+    'TG' => __('Togo', 'invoicing'),
242
+    'TK' => __('Tokelau', 'invoicing'),
243
+    'TO' => __('Tonga', 'invoicing'),
244
+    'TT' => __('Trinidad and Tobago', 'invoicing'),
245
+    'TN' => __('Tunisia', 'invoicing'),
246
+    'TR' => __('Turkey', 'invoicing'),
247
+    'TM' => __('Turkmenistan', 'invoicing'),
248
+    'TC' => __('Turks and Caicos Islands', 'invoicing'),
249
+    'TV' => __('Tuvalu', 'invoicing'),
250
+    'UG' => __('Uganda', 'invoicing'),
251
+    'UA' => __('Ukraine', 'invoicing'),
252
+    'AE' => __('United Arab Emirates', 'invoicing'),
253
+    'UY' => __('Uruguay', 'invoicing'),
254
+    'UM' => __('US Minor Outlying Islands', 'invoicing'),
255
+    'UZ' => __('Uzbekistan', 'invoicing'),
256
+    'VU' => __('Vanuatu', 'invoicing'),
257
+    'VE' => __('Venezuela', 'invoicing'),
258
+    'VN' => __('Vietnam', 'invoicing'),
259
+    'VG' => __('Virgin Islands (British)', 'invoicing'),
260
+    'VI' => __('Virgin Islands (USA)', 'invoicing'),
261
+    'WF' => __('Wallis and Futuna Islands', 'invoicing'),
262
+    'EH' => __('Western Sahara', 'invoicing'),
263
+    'WS' => __('Western Samoa', 'invoicing'),
264
+    'YE' => __('Yemen', 'invoicing'),
265
+    'ZM' => __('Zambia', 'invoicing'),
266
+    'ZW' => __('Zimbabwe', 'invoicing'),
267 267
 );
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -9,7 +9,7 @@
 block discarded – undo
9 9
  * @version 1.0.14
10 10
  */
11 11
 
12
-defined( 'ABSPATH' ) || exit;
12
+defined('ABSPATH') || exit;
13 13
 
14 14
 return array(
15 15
 	'US' => __('United States', 'invoicing'),
Please login to merge, or discard this patch.
includes/class-wpinv-privacy.php 2 patches
Indentation   +19 added lines, -19 removed lines patch added patch discarded remove patch
@@ -31,25 +31,25 @@
 block discarded – undo
31 31
     public function get_privacy_message() {
32 32
 
33 33
         $content = '<div class="wp-suggested-text">' .
34
-                   '<h2>' . __( 'Invoices and checkout', 'invoicing' ) . '</h2>' .
35
-                   '<p class="privacy-policy-tutorial">' . __( 'Example privacy texts.', 'invoicing' ) . '</p>' .
36
-                   '<p>' . __( 'We collect information about you during the checkout process on our site. This information may include, but is not limited to, your name, email address, phone number, address, IP and any other details that might be requested from you for the purpose of processing your payment and retaining your invoice details for legal reasons.', 'invoicing' ) . '</p>' .
37
-                   '<p>' . __( 'Handling this data also allows us to:', 'invoicing' ) . '</p>' .
38
-                   '<ul>' .
39
-                   '<li>' . __( '- Send you important account/order/service information.', 'invoicing' ) . '</li>' .
40
-                   '<li>' . __( '- Estimate taxes based on your location.', 'invoicing' ) . '</li>' .
41
-                   '<li>' . __( '- Respond to your queries or complaints.', 'invoicing' ) . '</li>' .
42
-                   '<li>' . __( '- Process payments and to prevent fraudulent transactions. We do this on the basis of our legitimate business interests.', 'invoicing' ) . '</li>' .
43
-                   '<li>' . __( '- Retain historical payment and invoice history. We do this on the basis of legal obligations.', 'invoicing' ) . '</li>' .
44
-                   '<li>' . __( '- Set up and administer your account, provide technical and/or customer support, and to verify your identity. We do this on the basis of our legitimate business interests.', 'invoicing' ) . '</li>' .
45
-                   '</ul>' .
46
-                   '<p>' . __( 'In addition to collecting information at checkout we may also use and store your contact details when manually creating invoices for require payments relating to prior contractual agreements or agreed terms.', 'invoicing' ) . '</p>' .
47
-                   '<h2>' . __( 'What we share with others', 'invoicing' ) . '</h2>' .
48
-                   '<p>' . __( 'We share information with third parties who help us provide our payment and invoicing services to you; for example --', 'invoicing' ) . '</p>' .
49
-                   '<p class="privacy-policy-tutorial">' . __( 'In this subsection you should list which third party payment processors you’re using to take payments since these may handle customer data. We’ve included PayPal as an example, but you should remove this if you’re not using PayPal.', 'invoicing' ) . '</p>' .
50
-                   '<p>' . __( 'We accept payments through PayPal. When processing payments, some of your data will be passed to PayPal, including information required to process or support the payment, such as the purchase total and billing information.', 'invoicing' ) . '</p>' .
51
-                   '<p>' . __( 'Please see the <a href="https://www.paypal.com/us/webapps/mpp/ua/privacy-full">PayPal Privacy Policy</a> for more details.', 'invoicing' ) . '</p>' .
52
-                   '</div>';
34
+                    '<h2>' . __( 'Invoices and checkout', 'invoicing' ) . '</h2>' .
35
+                    '<p class="privacy-policy-tutorial">' . __( 'Example privacy texts.', 'invoicing' ) . '</p>' .
36
+                    '<p>' . __( 'We collect information about you during the checkout process on our site. This information may include, but is not limited to, your name, email address, phone number, address, IP and any other details that might be requested from you for the purpose of processing your payment and retaining your invoice details for legal reasons.', 'invoicing' ) . '</p>' .
37
+                    '<p>' . __( 'Handling this data also allows us to:', 'invoicing' ) . '</p>' .
38
+                    '<ul>' .
39
+                    '<li>' . __( '- Send you important account/order/service information.', 'invoicing' ) . '</li>' .
40
+                    '<li>' . __( '- Estimate taxes based on your location.', 'invoicing' ) . '</li>' .
41
+                    '<li>' . __( '- Respond to your queries or complaints.', 'invoicing' ) . '</li>' .
42
+                    '<li>' . __( '- Process payments and to prevent fraudulent transactions. We do this on the basis of our legitimate business interests.', 'invoicing' ) . '</li>' .
43
+                    '<li>' . __( '- Retain historical payment and invoice history. We do this on the basis of legal obligations.', 'invoicing' ) . '</li>' .
44
+                    '<li>' . __( '- Set up and administer your account, provide technical and/or customer support, and to verify your identity. We do this on the basis of our legitimate business interests.', 'invoicing' ) . '</li>' .
45
+                    '</ul>' .
46
+                    '<p>' . __( 'In addition to collecting information at checkout we may also use and store your contact details when manually creating invoices for require payments relating to prior contractual agreements or agreed terms.', 'invoicing' ) . '</p>' .
47
+                    '<h2>' . __( 'What we share with others', 'invoicing' ) . '</h2>' .
48
+                    '<p>' . __( 'We share information with third parties who help us provide our payment and invoicing services to you; for example --', 'invoicing' ) . '</p>' .
49
+                    '<p class="privacy-policy-tutorial">' . __( 'In this subsection you should list which third party payment processors you’re using to take payments since these may handle customer data. We’ve included PayPal as an example, but you should remove this if you’re not using PayPal.', 'invoicing' ) . '</p>' .
50
+                    '<p>' . __( 'We accept payments through PayPal. When processing payments, some of your data will be passed to PayPal, including information required to process or support the payment, such as the purchase total and billing information.', 'invoicing' ) . '</p>' .
51
+                    '<p>' . __( 'Please see the <a href="https://www.paypal.com/us/webapps/mpp/ua/privacy-full">PayPal Privacy Policy</a> for more details.', 'invoicing' ) . '</p>' .
52
+                    '</div>';
53 53
 
54 54
         return apply_filters( 'wpinv_privacy_policy_content', $content );
55 55
     }
Please login to merge, or discard this patch.
Spacing   +20 added lines, -20 removed lines patch added patch discarded remove patch
@@ -3,7 +3,7 @@  discard block
 block discarded – undo
3 3
  * Privacy/GDPR related functionality which ties into WordPress functionality.
4 4
  */
5 5
 
6
-defined( 'ABSPATH' ) || exit;
6
+defined('ABSPATH') || exit;
7 7
 
8 8
 /**
9 9
  * WPInv_Privacy Class.
@@ -14,13 +14,13 @@  discard block
 block discarded – undo
14 14
      * Init - hook into events.
15 15
      */
16 16
     public function __construct() {
17
-        parent::__construct( __( 'Invoicing', 'invoicing' ) );
17
+        parent::__construct(__('Invoicing', 'invoicing'));
18 18
 
19 19
         // Include supporting classes.
20 20
         include_once 'class-wpinv-privacy-exporters.php';
21 21
 
22 22
         // This hook registers Invoicing data exporters.
23
-        $this->add_exporter( 'wpinv-customer-invoices', __( 'Customer Invoices', 'invoicing' ), array( 'WPInv_Privacy_Exporters', 'customer_invoice_data_exporter' ) );
23
+        $this->add_exporter('wpinv-customer-invoices', __('Customer Invoices', 'invoicing'), array('WPInv_Privacy_Exporters', 'customer_invoice_data_exporter'));
24 24
     }
25 25
 
26 26
     /**
@@ -31,27 +31,27 @@  discard block
 block discarded – undo
31 31
     public function get_privacy_message() {
32 32
 
33 33
         $content = '<div class="wp-suggested-text">' .
34
-                   '<h2>' . __( 'Invoices and checkout', 'invoicing' ) . '</h2>' .
35
-                   '<p class="privacy-policy-tutorial">' . __( 'Example privacy texts.', 'invoicing' ) . '</p>' .
36
-                   '<p>' . __( 'We collect information about you during the checkout process on our site. This information may include, but is not limited to, your name, email address, phone number, address, IP and any other details that might be requested from you for the purpose of processing your payment and retaining your invoice details for legal reasons.', 'invoicing' ) . '</p>' .
37
-                   '<p>' . __( 'Handling this data also allows us to:', 'invoicing' ) . '</p>' .
34
+                   '<h2>' . __('Invoices and checkout', 'invoicing') . '</h2>' .
35
+                   '<p class="privacy-policy-tutorial">' . __('Example privacy texts.', 'invoicing') . '</p>' .
36
+                   '<p>' . __('We collect information about you during the checkout process on our site. This information may include, but is not limited to, your name, email address, phone number, address, IP and any other details that might be requested from you for the purpose of processing your payment and retaining your invoice details for legal reasons.', 'invoicing') . '</p>' .
37
+                   '<p>' . __('Handling this data also allows us to:', 'invoicing') . '</p>' .
38 38
                    '<ul>' .
39
-                   '<li>' . __( '- Send you important account/order/service information.', 'invoicing' ) . '</li>' .
40
-                   '<li>' . __( '- Estimate taxes based on your location.', 'invoicing' ) . '</li>' .
41
-                   '<li>' . __( '- Respond to your queries or complaints.', 'invoicing' ) . '</li>' .
42
-                   '<li>' . __( '- Process payments and to prevent fraudulent transactions. We do this on the basis of our legitimate business interests.', 'invoicing' ) . '</li>' .
43
-                   '<li>' . __( '- Retain historical payment and invoice history. We do this on the basis of legal obligations.', 'invoicing' ) . '</li>' .
44
-                   '<li>' . __( '- Set up and administer your account, provide technical and/or customer support, and to verify your identity. We do this on the basis of our legitimate business interests.', 'invoicing' ) . '</li>' .
39
+                   '<li>' . __('- Send you important account/order/service information.', 'invoicing') . '</li>' .
40
+                   '<li>' . __('- Estimate taxes based on your location.', 'invoicing') . '</li>' .
41
+                   '<li>' . __('- Respond to your queries or complaints.', 'invoicing') . '</li>' .
42
+                   '<li>' . __('- Process payments and to prevent fraudulent transactions. We do this on the basis of our legitimate business interests.', 'invoicing') . '</li>' .
43
+                   '<li>' . __('- Retain historical payment and invoice history. We do this on the basis of legal obligations.', 'invoicing') . '</li>' .
44
+                   '<li>' . __('- Set up and administer your account, provide technical and/or customer support, and to verify your identity. We do this on the basis of our legitimate business interests.', 'invoicing') . '</li>' .
45 45
                    '</ul>' .
46
-                   '<p>' . __( 'In addition to collecting information at checkout we may also use and store your contact details when manually creating invoices for require payments relating to prior contractual agreements or agreed terms.', 'invoicing' ) . '</p>' .
47
-                   '<h2>' . __( 'What we share with others', 'invoicing' ) . '</h2>' .
48
-                   '<p>' . __( 'We share information with third parties who help us provide our payment and invoicing services to you; for example --', 'invoicing' ) . '</p>' .
49
-                   '<p class="privacy-policy-tutorial">' . __( 'In this subsection you should list which third party payment processors you’re using to take payments since these may handle customer data. We’ve included PayPal as an example, but you should remove this if you’re not using PayPal.', 'invoicing' ) . '</p>' .
50
-                   '<p>' . __( 'We accept payments through PayPal. When processing payments, some of your data will be passed to PayPal, including information required to process or support the payment, such as the purchase total and billing information.', 'invoicing' ) . '</p>' .
51
-                   '<p>' . __( 'Please see the <a href="https://www.paypal.com/us/webapps/mpp/ua/privacy-full">PayPal Privacy Policy</a> for more details.', 'invoicing' ) . '</p>' .
46
+                   '<p>' . __('In addition to collecting information at checkout we may also use and store your contact details when manually creating invoices for require payments relating to prior contractual agreements or agreed terms.', 'invoicing') . '</p>' .
47
+                   '<h2>' . __('What we share with others', 'invoicing') . '</h2>' .
48
+                   '<p>' . __('We share information with third parties who help us provide our payment and invoicing services to you; for example --', 'invoicing') . '</p>' .
49
+                   '<p class="privacy-policy-tutorial">' . __('In this subsection you should list which third party payment processors you’re using to take payments since these may handle customer data. We’ve included PayPal as an example, but you should remove this if you’re not using PayPal.', 'invoicing') . '</p>' .
50
+                   '<p>' . __('We accept payments through PayPal. When processing payments, some of your data will be passed to PayPal, including information required to process or support the payment, such as the purchase total and billing information.', 'invoicing') . '</p>' .
51
+                   '<p>' . __('Please see the <a href="https://www.paypal.com/us/webapps/mpp/ua/privacy-full">PayPal Privacy Policy</a> for more details.', 'invoicing') . '</p>' .
52 52
                    '</div>';
53 53
 
54
-        return apply_filters( 'wpinv_privacy_policy_content', $content );
54
+        return apply_filters('wpinv_privacy_policy_content', $content);
55 55
     }
56 56
 
57 57
 }
Please login to merge, or discard this patch.
includes/class-wpinv-privacy-exporters.php 1 patch
Spacing   +52 added lines, -52 removed lines patch added patch discarded remove patch
@@ -3,7 +3,7 @@  discard block
 block discarded – undo
3 3
  * Personal data exporters.
4 4
  */
5 5
 
6
-defined( 'ABSPATH' ) || exit;
6
+defined('ABSPATH') || exit;
7 7
 
8 8
 /**
9 9
  * WPInv_Privacy_Exporters Class.
@@ -17,38 +17,38 @@  discard block
 block discarded – undo
17 17
      * @param int    $page  Page.
18 18
      * @return array An array of invoice data in name value pairs
19 19
      */
20
-    public static function customer_invoice_data_exporter( $email_address, $page ) {
20
+    public static function customer_invoice_data_exporter($email_address, $page) {
21 21
         $done           = false;
22 22
         $page           = (int) $page;
23 23
         $data_to_export = array();
24 24
 
25
-        $user           = get_user_by( 'email', $email_address );
26
-        if ( ! $user instanceof WP_User ) {
25
+        $user           = get_user_by('email', $email_address);
26
+        if (!$user instanceof WP_User) {
27 27
             return array(
28 28
                 'data' => $data_to_export,
29 29
                 'done' => true,
30 30
             );
31 31
         }
32 32
 
33
-        $args    = array(
33
+        $args = array(
34 34
             'limit'    => 30,
35 35
             'page'     => $page,
36 36
             'user'     => $user->ID,
37 37
         );
38 38
 
39
-        $invoices = wpinv_get_invoices( $args );
39
+        $invoices = wpinv_get_invoices($args);
40 40
 
41
-        if ( 0 < count( $invoices ) ) {
42
-            foreach ( $invoices as $invoice ) {
41
+        if (0 < count($invoices)) {
42
+            foreach ($invoices as $invoice) {
43 43
                 $data_to_export[] = array(
44 44
                     'group_id'          => 'customer_invoices',
45
-                    'group_label'       => __( 'Invoicing Data', 'invoicing' ),
46
-                    'group_description' => __( 'Customer invoicing data.', 'invoicing' ),
45
+                    'group_label'       => __('Invoicing Data', 'invoicing'),
46
+                    'group_description' => __('Customer invoicing data.', 'invoicing'),
47 47
                     'item_id'           => "wpinv-{$invoice->ID}",
48
-                    'data'              => self::get_customer_invoice_data( $invoice ),
48
+                    'data'              => self::get_customer_invoice_data($invoice),
49 49
                 );
50 50
             }
51
-            $done = 30 > count( $invoices );
51
+            $done = 30 > count($invoices);
52 52
         } else {
53 53
             $done = true;
54 54
         }
@@ -66,59 +66,59 @@  discard block
 block discarded – undo
66 66
      * @param WPInv_Invoice $invoice invoice object.
67 67
      * @return array
68 68
      */
69
-    public static function get_customer_invoice_data( $invoice ) {
69
+    public static function get_customer_invoice_data($invoice) {
70 70
         $personal_data = array();
71 71
 
72 72
         $props_to_export = array(
73
-            'number'               => __( 'Invoice Number', 'invoicing' ),
74
-            'created_date'         => __( 'Invoice Date', 'invoicing' ),
75
-            'status'               => __( 'Invoice Status', 'invoicing' ),
76
-            'total'                => __( 'Invoice Total', 'invoicing' ),
77
-            'items'                => __( 'Invoice Items', 'invoicing' ),
78
-            'first_name'           => __( 'First Name', 'invoicing' ),
79
-            'last_name'            => __( 'Last Name', 'invoicing' ),
80
-            'email'                => __( 'Email Address', 'invoicing' ),
81
-            '_wpinv_company'       => __( 'Company', 'invoicing' ),
82
-            'phone'                => __( 'Phone Number', 'invoicing' ),
83
-            'address'              => __( 'Address', 'invoicing' ),
84
-            '_wpinv_city'          => __( 'City', 'invoicing' ),
85
-            '_wpinv_country'       => __( 'Country', 'invoicing' ),
86
-            '_wpinv_state'         => __( 'State', 'invoicing' ),
87
-            '_wpinv_zip'           => __( 'Zip Code', 'invoicing' ),
73
+            'number'               => __('Invoice Number', 'invoicing'),
74
+            'created_date'         => __('Invoice Date', 'invoicing'),
75
+            'status'               => __('Invoice Status', 'invoicing'),
76
+            'total'                => __('Invoice Total', 'invoicing'),
77
+            'items'                => __('Invoice Items', 'invoicing'),
78
+            'first_name'           => __('First Name', 'invoicing'),
79
+            'last_name'            => __('Last Name', 'invoicing'),
80
+            'email'                => __('Email Address', 'invoicing'),
81
+            '_wpinv_company'       => __('Company', 'invoicing'),
82
+            'phone'                => __('Phone Number', 'invoicing'),
83
+            'address'              => __('Address', 'invoicing'),
84
+            '_wpinv_city'          => __('City', 'invoicing'),
85
+            '_wpinv_country'       => __('Country', 'invoicing'),
86
+            '_wpinv_state'         => __('State', 'invoicing'),
87
+            '_wpinv_zip'           => __('Zip Code', 'invoicing'),
88 88
         );
89 89
 
90
-        $subscription = wpinv_get_subscription( $invoice );
90
+        $subscription = wpinv_get_subscription($invoice);
91 91
         $period = $initial_amt = $bill_times = $billed = $renewal_date = '';
92 92
 
93
-        if ( $invoice->is_recurring() && !empty( $subscription ) ) {
94
-            $frequency = WPInv_Subscriptions::wpinv_get_pretty_subscription_frequency( $subscription->period,$subscription->frequency );
95
-            $period = wpinv_price( wpinv_format_amount( $subscription->recurring_amount ), wpinv_get_invoice_currency_code( $subscription->parent_payment_id ) ) . ' / ' . $frequency;
96
-            $initial_amt = wpinv_price( wpinv_format_amount( $subscription->initial_amount ), wpinv_get_invoice_currency_code( $subscription->parent_payment_id ) );
97
-            $bill_times = $subscription->get_times_billed() . ' / ' . ( ( $subscription->bill_times == 0 ) ? 'Until Cancelled' : $subscription->bill_times );
98
-            $renewal_date = ! empty( $subscription->expiration ) ? date_i18n( get_option( 'date_format' ), strtotime( $subscription->expiration ) ) : __( 'N/A', 'invoicing' );
99
-
100
-            $props_to_export['period'] = __( 'Billing Cycle', 'invoicing' );
101
-            $props_to_export['initial_amount'] = __( 'Initial Amount', 'invoicing' );
102
-            $props_to_export['bill_times'] = __( 'Times Billed', 'invoicing' );
103
-            $props_to_export['renewal_date'] = __( 'Renewal Date', 'invoicing' );
93
+        if ($invoice->is_recurring() && !empty($subscription)) {
94
+            $frequency = WPInv_Subscriptions::wpinv_get_pretty_subscription_frequency($subscription->period, $subscription->frequency);
95
+            $period = wpinv_price(wpinv_format_amount($subscription->recurring_amount), wpinv_get_invoice_currency_code($subscription->parent_payment_id)) . ' / ' . $frequency;
96
+            $initial_amt = wpinv_price(wpinv_format_amount($subscription->initial_amount), wpinv_get_invoice_currency_code($subscription->parent_payment_id));
97
+            $bill_times = $subscription->get_times_billed() . ' / ' . (($subscription->bill_times == 0) ? 'Until Cancelled' : $subscription->bill_times);
98
+            $renewal_date = !empty($subscription->expiration) ? date_i18n(get_option('date_format'), strtotime($subscription->expiration)) : __('N/A', 'invoicing');
99
+
100
+            $props_to_export['period'] = __('Billing Cycle', 'invoicing');
101
+            $props_to_export['initial_amount'] = __('Initial Amount', 'invoicing');
102
+            $props_to_export['bill_times'] = __('Times Billed', 'invoicing');
103
+            $props_to_export['renewal_date'] = __('Renewal Date', 'invoicing');
104 104
         }
105 105
 
106
-        $props_to_export['ip'] = __( 'IP Address', 'invoicing' );
107
-        $props_to_export['view_url'] = __( 'Invoice Link', 'invoicing' );
106
+        $props_to_export['ip'] = __('IP Address', 'invoicing');
107
+        $props_to_export['view_url'] = __('Invoice Link', 'invoicing');
108 108
 
109
-        $props_to_export = apply_filters( 'wpinv_privacy_export_invoice_personal_data_props', $props_to_export, $invoice, $subscription);
109
+        $props_to_export = apply_filters('wpinv_privacy_export_invoice_personal_data_props', $props_to_export, $invoice, $subscription);
110 110
 
111
-        foreach ( $props_to_export as $prop => $name ) {
111
+        foreach ($props_to_export as $prop => $name) {
112 112
             $value = '';
113 113
 
114
-            switch ( $prop ) {
114
+            switch ($prop) {
115 115
                 case 'items':
116 116
                     $item_names = array();
117
-                    foreach ( $invoice->get_cart_details() as $key => $cart_item ) {
118
-                        $item_quantity  = $cart_item['quantity'] > 0 ? absint( $cart_item['quantity'] ) : 1;
117
+                    foreach ($invoice->get_cart_details() as $key => $cart_item) {
118
+                        $item_quantity = $cart_item['quantity'] > 0 ? absint($cart_item['quantity']) : 1;
119 119
                         $item_names[] = $cart_item['name'] . ' x ' . $item_quantity;
120 120
                     }
121
-                    $value = implode( ', ', $item_names );
121
+                    $value = implode(', ', $item_names);
122 122
                     break;
123 123
                 case 'status':
124 124
                     $value = $invoice->get_status(true);
@@ -139,7 +139,7 @@  discard block
 block discarded – undo
139 139
                     $value = $renewal_date;
140 140
                     break;
141 141
                 default:
142
-                    if ( is_callable( array( $invoice, 'get_' . $prop ) ) ) {
142
+                    if (is_callable(array($invoice, 'get_' . $prop))) {
143 143
                         $value = $invoice->{"get_$prop"}();
144 144
                     } else {
145 145
                         $value = $invoice->get_meta($prop);
@@ -147,9 +147,9 @@  discard block
 block discarded – undo
147 147
                     break;
148 148
             }
149 149
 
150
-            $value = apply_filters( 'wpi_privacy_export_invoice_personal_data_prop', $value, $prop, $invoice );
150
+            $value = apply_filters('wpi_privacy_export_invoice_personal_data_prop', $value, $prop, $invoice);
151 151
 
152
-            if ( $value ) {
152
+            if ($value) {
153 153
                 $personal_data[] = array(
154 154
                     'name'  => $name,
155 155
                     'value' => $value,
@@ -158,7 +158,7 @@  discard block
 block discarded – undo
158 158
 
159 159
         }
160 160
 
161
-        $personal_data = apply_filters( 'wpinv_privacy_export_invoice_personal_data', $personal_data, $invoice );
161
+        $personal_data = apply_filters('wpinv_privacy_export_invoice_personal_data', $personal_data, $invoice);
162 162
 
163 163
         return $personal_data;
164 164
 
Please login to merge, or discard this patch.