Passed
Push — master ( dd948d...2b23ec )
by Kiran
14:42 queued 08:32
created
includes/admin/admin-pages.php 1 patch
Indentation   +80 added lines, -80 removed lines patch added patch discarded remove patch
@@ -57,8 +57,8 @@  discard block
 block discarded – undo
57 57
             'getpaid-nonce',
58 58
             'getpaid-nonce'
59 59
         );
60
-		$anchor = __( 'Deactivate', 'invoicing' );
61
-		$title  = esc_attr__( 'Are you sure you want to deactivate this discount?', 'invoicing' );
60
+        $anchor = __( 'Deactivate', 'invoicing' );
61
+        $title  = esc_attr__( 'Are you sure you want to deactivate this discount?', 'invoicing' );
62 62
         $row_actions['deactivate'] = "<a href='$url' onclick='return confirm(\"$title\")'>$anchor</a>";
63 63
 
64 64
     } elseif ( in_array( strtolower( $discount->post_status ), array( 'pending', 'draft' ) ) && wpinv_current_user_can( 'activate_discount', array( 'discount' => (int) $discount->ID ) ) ) {
@@ -73,8 +73,8 @@  discard block
 block discarded – undo
73 73
             'getpaid-nonce',
74 74
             'getpaid-nonce'
75 75
         );
76
-		$anchor = __( 'Activate', 'invoicing' );
77
-		$title  = esc_attr__( 'Are you sure you want to activate this discount?', 'invoicing' );
76
+        $anchor = __( 'Activate', 'invoicing' );
77
+        $title  = esc_attr__( 'Are you sure you want to activate this discount?', 'invoicing' );
78 78
         $row_actions['activate'] = "<a href='$url' onclick='return confirm(\"$title\")'>$anchor</a>";
79 79
 
80 80
     }
@@ -121,13 +121,13 @@  discard block
 block discarded – undo
121 121
             $types = wpinv_get_discount_types();
122 122
 
123 123
             foreach ( $types as $name => $type ) {
124
-			echo '<option value="' . esc_attr( $name ) . '"';
124
+            echo '<option value="' . esc_attr( $name ) . '"';
125 125
 
126
-			if ( isset( $_GET['discount_type'] ) ) {
127
-				selected( $name, sanitize_text_field( $_GET['discount_type'] ) );
126
+            if ( isset( $_GET['discount_type'] ) ) {
127
+                selected( $name, sanitize_text_field( $_GET['discount_type'] ) );
128 128
                 }
129 129
 
130
-			echo '>' . esc_html__( $type, 'invoicing' ) . '</option>';
130
+            echo '>' . esc_html__( $type, 'invoicing' ) . '</option>';
131 131
             }
132 132
         ?>
133 133
     </select>
@@ -154,15 +154,15 @@  discard block
 block discarded – undo
154 154
         // Filter vat rule type
155 155
         if ( isset( $_GET['discount_type'] ) && $_GET['discount_type'] !== '' ) {
156 156
             $meta_query[] = array(
157
-				'key'     => '_wpi_discount_type',
158
-				'value'   => sanitize_key( urldecode( $_GET['discount_type'] ) ),
159
-				'compare' => '=',
160
-			);
161
-			}
157
+                'key'     => '_wpi_discount_type',
158
+                'value'   => sanitize_key( urldecode( $_GET['discount_type'] ) ),
159
+                'compare' => '=',
160
+            );
161
+            }
162 162
 
163 163
         if ( ! empty( $meta_query ) ) {
164 164
             $vars['meta_query'] = $meta_query;
165
-			}
165
+            }
166 166
     }
167 167
 
168 168
     return $vars;
@@ -180,72 +180,72 @@  discard block
 block discarded – undo
180 180
  * @return int page ID
181 181
  */
182 182
 function wpinv_create_page( $slug, $option = '', $page_title = '', $page_content = '', $post_parent = 0 ) {
183
-	global $wpdb;
184
-
185
-	$option_value = wpinv_get_option( $option );
186
-
187
-	if ( ! empty( $option_value ) && ( $page_object = get_post( $option_value ) ) ) {
188
-		if ( 'page' === $page_object->post_type && ! in_array( $page_object->post_status, array( 'pending', 'trash', 'future', 'auto-draft' ) ) ) {
189
-			// Valid page is already in place
190
-			return $page_object->ID;
191
-		}
192
-	}
193
-
194
-	if ( ! empty( $post_parent ) ) {
195
-		$page = get_page_by_path( $post_parent );
196
-		if ( $page ) {
197
-			$post_parent = $page->ID;
198
-		} else {
199
-			$post_parent = '';
200
-		}
201
-	}
202
-
203
-	// Search for an existing page with the specified page slug
204
-	$valid_page_found = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_type='page' AND post_status NOT IN ( 'pending', 'future', 'auto-draft' )  AND post_name = %s LIMIT 1;", $slug ) );
205
-
206
-	$valid_page_found = apply_filters( 'wpinv_create_page_id', $valid_page_found, $slug, $page_content );
207
-
208
-	if ( $valid_page_found ) {
209
-		if ( $option ) {
210
-			wpinv_update_option( $option, $valid_page_found );
211
-		}
212
-
213
-		return $valid_page_found;
214
-	}
215
-
216
-	// Search for an existing page with the specified page slug
217
-	$trashed_page_found = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_type='page' AND post_status = 'trash' AND post_name = %s LIMIT 1;", $slug ) );
218
-
219
-	if ( $trashed_page_found ) {
220
-		$page_id   = $trashed_page_found;
221
-
222
-		$page_data = array(
223
-			'ID'          => $page_id,
224
-			'post_status' => 'publish',
225
-			'post_parent' => $post_parent,
226
-		);
227
-
228
-		wp_update_post( $page_data );
229
-	} else {
230
-		$page_data = array(
231
-			'post_status'    => 'publish',
232
-			'post_type'      => 'page',
233
-			'post_author'    => 1,
234
-			'post_name'      => $slug,
235
-			'post_title'     => $page_title,
236
-			'post_content'   => $page_content,
237
-			'post_parent'    => $post_parent,
238
-			'comment_status' => 'closed',
239
-		);
240
-
241
-		$page_id = wp_insert_post( $page_data );
242
-	}
243
-
244
-	if ( $option ) {
245
-		wpinv_update_option( $option, (int) $page_id );
246
-	}
247
-
248
-	return $page_id;
183
+    global $wpdb;
184
+
185
+    $option_value = wpinv_get_option( $option );
186
+
187
+    if ( ! empty( $option_value ) && ( $page_object = get_post( $option_value ) ) ) {
188
+        if ( 'page' === $page_object->post_type && ! in_array( $page_object->post_status, array( 'pending', 'trash', 'future', 'auto-draft' ) ) ) {
189
+            // Valid page is already in place
190
+            return $page_object->ID;
191
+        }
192
+    }
193
+
194
+    if ( ! empty( $post_parent ) ) {
195
+        $page = get_page_by_path( $post_parent );
196
+        if ( $page ) {
197
+            $post_parent = $page->ID;
198
+        } else {
199
+            $post_parent = '';
200
+        }
201
+    }
202
+
203
+    // Search for an existing page with the specified page slug
204
+    $valid_page_found = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_type='page' AND post_status NOT IN ( 'pending', 'future', 'auto-draft' )  AND post_name = %s LIMIT 1;", $slug ) );
205
+
206
+    $valid_page_found = apply_filters( 'wpinv_create_page_id', $valid_page_found, $slug, $page_content );
207
+
208
+    if ( $valid_page_found ) {
209
+        if ( $option ) {
210
+            wpinv_update_option( $option, $valid_page_found );
211
+        }
212
+
213
+        return $valid_page_found;
214
+    }
215
+
216
+    // Search for an existing page with the specified page slug
217
+    $trashed_page_found = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_type='page' AND post_status = 'trash' AND post_name = %s LIMIT 1;", $slug ) );
218
+
219
+    if ( $trashed_page_found ) {
220
+        $page_id   = $trashed_page_found;
221
+
222
+        $page_data = array(
223
+            'ID'          => $page_id,
224
+            'post_status' => 'publish',
225
+            'post_parent' => $post_parent,
226
+        );
227
+
228
+        wp_update_post( $page_data );
229
+    } else {
230
+        $page_data = array(
231
+            'post_status'    => 'publish',
232
+            'post_type'      => 'page',
233
+            'post_author'    => 1,
234
+            'post_name'      => $slug,
235
+            'post_title'     => $page_title,
236
+            'post_content'   => $page_content,
237
+            'post_parent'    => $post_parent,
238
+            'comment_status' => 'closed',
239
+        );
240
+
241
+        $page_id = wp_insert_post( $page_data );
242
+    }
243
+
244
+    if ( $option ) {
245
+        wpinv_update_option( $option, (int) $page_id );
246
+    }
247
+
248
+    return $page_id;
249 249
 }
250 250
 
251 251
 /**
Please login to merge, or discard this patch.
includes/admin/class-getpaid-installer.php 1 patch
Indentation   +493 added lines, -493 removed lines patch added patch discarded remove patch
@@ -20,392 +20,392 @@  discard block
 block discarded – undo
20 20
  */
21 21
 class GetPaid_Installer {
22 22
 
23
-	private static $schema = null;
24
-	private static $schema_version = null;
25
-
26
-	/**
27
-	 * Upgrades the install.
28
-	 *
29
-	 * @param string $upgrade_from The current invoicing version.
30
-	 */
31
-	public function upgrade_db( $upgrade_from ) {
32
-
33
-		// Save the current invoicing version.
34
-		update_option( 'wpinv_version', WPINV_VERSION );
35
-
36
-		// Setup the invoice Custom Post Type.
37
-		GetPaid_Post_Types::register_post_types();
38
-
39
-		// Clear the permalinks
40
-		flush_rewrite_rules();
41
-
42
-		// Maybe create new/missing pages.
43
-		$this->create_pages();
44
-
45
-		// Maybe re(add) admin capabilities.
46
-		$this->add_capabilities();
47
-
48
-		// Maybe create the default payment form.
49
-		wpinv_get_default_payment_form();
50
-
51
-		// Create any missing database tables.
52
-		$method = "upgrade_from_$upgrade_from";
53
-
54
-		$installed = get_option( 'gepaid_installed_on' );
55
-
56
-		if ( empty( $installed ) ) {
57
-			update_option( 'gepaid_installed_on', time() );
58
-		}
59
-
60
-		if ( method_exists( $this, $method ) ) {
61
-			$this->$method();
62
-		}
63
-
64
-	}
65
-
66
-	/**
67
-	 * Do a fresh install.
68
-	 *
69
-	 */
70
-	public function upgrade_from_0() {
71
-
72
-		// Save default tax rates.
73
-		update_option( 'wpinv_tax_rates', wpinv_get_data( 'tax-rates' ) );
74
-	}
75
-
76
-	/**
77
-	 * Upgrade to 0.0.5
78
-	 *
79
-	 */
80
-	public function upgrade_from_004() {
81
-		global $wpdb;
82
-
83
-		// Invoices.
84
-		$results = $wpdb->get_results( "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'wpi_invoice' AND post_status IN( 'pending', 'processing', 'onhold', 'refunded', 'cancelled', 'failed', 'renewal' )" );
85
-		if ( ! empty( $results ) ) {
86
-			$wpdb->query( "UPDATE {$wpdb->posts} SET post_status = CONCAT( 'wpi-', post_status ) WHERE post_type = 'wpi_invoice' AND post_status IN( 'pending', 'processing', 'onhold', 'refunded', 'cancelled', 'failed', 'renewal' )" );
87
-
88
-			// Clean post cache
89
-			foreach ( $results as $row ) {
90
-				clean_post_cache( $row->ID );
91
-			}
92
-		}
93
-
94
-		// Item meta key changes
95
-		$query = 'SELECT DISTINCT post_id FROM ' . $wpdb->postmeta . " WHERE meta_key IN( '_wpinv_item_id', '_wpinv_package_id', '_wpinv_post_id', '_wpinv_cpt_name', '_wpinv_cpt_singular_name' )";
96
-		$results = $wpdb->get_results( $query );
97
-
98
-		if ( ! empty( $results ) ) {
99
-			$wpdb->query( 'UPDATE ' . $wpdb->postmeta . " SET meta_key = '_wpinv_custom_id' WHERE meta_key IN( '_wpinv_item_id', '_wpinv_package_id', '_wpinv_post_id' )" );
100
-			$wpdb->query( 'UPDATE ' . $wpdb->postmeta . " SET meta_key = '_wpinv_custom_name' WHERE meta_key = '_wpinv_cpt_name'" );
101
-			$wpdb->query( 'UPDATE ' . $wpdb->postmeta . " SET meta_key = '_wpinv_custom_singular_name' WHERE meta_key = '_wpinv_cpt_singular_name'" );
102
-
103
-			foreach ( $results as $row ) {
104
-				clean_post_cache( $row->post_id );
105
-			}
106
-		}
107
-
108
-		$this->upgrade_from_118();
109
-	}
110
-
111
-	/**
112
-	 * Upgrade to version 2.0.0.
113
-	 *
114
-	 */
115
-	public function upgrade_from_118() {
116
-		$this->migrate_old_invoices();
117
-		$this->upgrade_from_279();
118
-	}
119
-
120
-	/**
121
-	 * Upgrade to version 2.0.0.
122
-	 *
123
-	 */
124
-	public function upgrade_from_279() {
125
-		self::migrate_old_customers();
126
-	}
127
-
128
-	/**
129
-	 * Give administrators the capability to manage GetPaid.
130
-	 *
131
-	 */
132
-	public function add_capabilities() {
133
-		$GLOBALS['wp_roles']->add_cap( 'administrator', 'manage_invoicing' );
134
-	}
135
-
136
-	/**
137
-	 * Retreives GetPaid pages.
138
-	 *
139
-	 */
140
-	public static function get_pages( $filtered = false ) {
141
-		$gutenberg = getpaid_is_gutenberg();
142
-
143
-		return apply_filters(
144
-			'wpinv_create_pages',
145
-			array(
146
-				// Checkout page.
147
-				'checkout_page' => array(
148
-					'name'    => _x( 'gp-checkout', 'Page slug', 'invoicing' ),
149
-					'title'   => _x( 'Checkout', 'Page title', 'invoicing' ),
150
-					'content' => getpaid_page_content_checkout( $filtered, $gutenberg ),
151
-					'parent'  => ''
152
-				),
153
-
154
-				// Invoice history page.
155
-				'invoice_history_page' => array(
156
-					'name'    => _x( 'gp-invoices', 'Page slug', 'invoicing' ),
157
-					'title'   => _x( 'My Invoices', 'Page title', 'invoicing' ),
158
-					'content' => getpaid_page_content_invoice_history( $filtered, $gutenberg ),
159
-					'parent'  => ''
160
-				),
161
-
162
-				// Success page content.
163
-				'success_page' => array(
164
-					'name'    => _x( 'gp-receipt', 'Page slug', 'invoicing' ),
165
-					'title'   => _x( 'Payment Confirmation', 'Page title', 'invoicing' ),
166
-					'content' => getpaid_page_content_receipt( $filtered, $gutenberg ),
167
-					'parent'  => 'gp-checkout'
168
-				),
169
-
170
-				// Failure page content.
171
-				'failure_page' => array(
172
-					'name'    => _x( 'gp-transaction-failed', 'Page slug', 'invoicing' ),
173
-					'title'   => _x( 'Transaction Failed', 'Page title', 'invoicing' ),
174
-					'content' => getpaid_page_content_failure( $filtered, $gutenberg ),
175
-					'parent'  => 'gp-checkout'
176
-				),
177
-
178
-				// Subscriptions history page.
179
-				'invoice_subscription_page' => array(
180
-					'name'    => _x( 'gp-subscriptions', 'Page slug', 'invoicing' ),
181
-					'title'   => _x( 'My Subscriptions', 'Page title', 'invoicing' ),
182
-					'content' => getpaid_page_content_subscriptions( $filtered, $gutenberg ),
183
-					'parent'  => ''
184
-				)
185
-			)
186
-		);
187
-	}
188
-
189
-	/**
190
-	 * Re-create GetPaid pages.
191
-	 *
192
-	 */
193
-	public function create_pages() {
194
-		foreach ( self::get_pages() as $key => $page ) {
195
-			wpinv_create_page( esc_sql( $page['name'] ), $key, $page['title'], $page['content'], $page['parent'] );
196
-		}
197
-
198
-	}
199
-
200
-	/**
201
-	 * Migrates old invoices to new invoices.
202
-	 *
203
-	 */
204
-	public function migrate_old_invoices() {
205
-		global $wpdb;
206
-
207
-		$invoices_table      = $wpdb->prefix . 'getpaid_invoices';
208
-		$invoice_items_table = $wpdb->prefix . 'getpaid_invoice_items';
209
-		$migrated            = $wpdb->get_col( "SELECT post_id FROM $invoices_table" );
210
-		$invoices            = array_unique(
211
-			get_posts(
212
-				array(
213
-					'post_type'      => array( 'wpi_invoice', 'wpi_quote' ),
214
-					'posts_per_page' => -1,
215
-					'fields'         => 'ids',
216
-					'post_status'    => array_keys( get_post_stati() ),
217
-					'exclude'        => (array) $migrated,
218
-				)
219
-			)
220
-		);
221
-
222
-		// Abort if we do not have any invoices.
223
-		if ( empty( $invoices ) ) {
224
-			return;
225
-		}
226
-
227
-		require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-legacy-invoice.php';
228
-
229
-		$invoice_rows = array();
230
-		foreach ( $invoices as $invoice ) {
231
-
232
-			$invoice = new WPInv_Legacy_Invoice( $invoice );
233
-
234
-			if ( empty( $invoice->ID ) ) {
235
-				return;
236
-			}
237
-
238
-			$fields = array(
239
-				'post_id'            => $invoice->ID,
240
-				'number'             => $invoice->get_number(),
241
-				'key'                => $invoice->get_key(),
242
-				'type'               => str_replace( 'wpi_', '', $invoice->post_type ),
243
-				'mode'               => $invoice->mode,
244
-				'user_ip'            => $invoice->get_ip(),
245
-				'first_name'         => $invoice->get_first_name(),
246
-				'last_name'          => $invoice->get_last_name(),
247
-				'address'            => $invoice->get_address(),
248
-				'city'               => $invoice->city,
249
-				'state'              => $invoice->state,
250
-				'country'            => $invoice->country,
251
-				'zip'                => $invoice->zip,
252
-				'adddress_confirmed' => (int) $invoice->adddress_confirmed,
253
-				'gateway'            => $invoice->get_gateway(),
254
-				'transaction_id'     => $invoice->get_transaction_id(),
255
-				'currency'           => $invoice->get_currency(),
256
-				'subtotal'           => $invoice->get_subtotal(),
257
-				'tax'                => $invoice->get_tax(),
258
-				'fees_total'         => $invoice->get_fees_total(),
259
-				'total'              => $invoice->get_total(),
260
-				'discount'           => $invoice->get_discount(),
261
-				'discount_code'      => $invoice->get_discount_code(),
262
-				'disable_taxes'      => $invoice->disable_taxes,
263
-				'due_date'           => $invoice->get_due_date(),
264
-				'completed_date'     => $invoice->get_completed_date(),
265
-				'company'            => $invoice->company,
266
-				'vat_number'         => $invoice->vat_number,
267
-				'vat_rate'           => $invoice->vat_rate,
268
-				'custom_meta'        => $invoice->payment_meta,
269
-			);
270
-
271
-			foreach ( $fields as $key => $val ) {
272
-				if ( is_null( $val ) ) {
273
-					$val = '';
274
-				}
275
-				$val = maybe_serialize( $val );
276
-				$fields[ $key ] = $wpdb->prepare( '%s', $val );
277
-			}
278
-
279
-			$fields = implode( ', ', $fields );
280
-			$invoice_rows[] = "($fields)";
281
-
282
-			$item_rows    = array();
283
-			$item_columns = array();
284
-			foreach ( $invoice->get_cart_details() as $details ) {
285
-				$fields = array(
286
-					'post_id'          => $invoice->ID,
287
-					'item_id'          => $details['id'],
288
-					'item_name'        => $details['name'],
289
-					'item_description' => empty( $details['meta']['description'] ) ? '' : $details['meta']['description'],
290
-					'vat_rate'         => $details['vat_rate'],
291
-					'vat_class'        => empty( $details['vat_class'] ) ? '_standard' : $details['vat_class'],
292
-					'tax'              => $details['tax'],
293
-					'item_price'       => $details['item_price'],
294
-					'custom_price'     => $details['custom_price'],
295
-					'quantity'         => $details['quantity'],
296
-					'discount'         => $details['discount'],
297
-					'subtotal'         => $details['subtotal'],
298
-					'price'            => $details['price'],
299
-					'meta'             => $details['meta'],
300
-					'fees'             => $details['fees'],
301
-				);
302
-
303
-				$item_columns = array_keys( $fields );
304
-
305
-				foreach ( $fields as $key => $val ) {
306
-					if ( is_null( $val ) ) {
307
-						$val = '';
308
-					}
309
-					$val = maybe_serialize( $val );
310
-					$fields[ $key ] = $wpdb->prepare( '%s', $val );
311
-				}
312
-
313
-				$fields = implode( ', ', $fields );
314
-				$item_rows[] = "($fields)";
315
-			}
316
-
317
-			$item_rows    = implode( ', ', $item_rows );
318
-			$item_columns = implode( ', ', $item_columns );
319
-			$wpdb->query( "INSERT INTO $invoice_items_table ($item_columns) VALUES $item_rows" );
320
-		}
321
-
322
-		if ( empty( $invoice_rows ) ) {
323
-			return;
324
-		}
325
-
326
-		$invoice_rows = implode( ', ', $invoice_rows );
327
-		$wpdb->query( "INSERT INTO $invoices_table VALUES $invoice_rows" );
328
-
329
-	}
330
-
331
-	/**
332
-	 * Migrates old customers to new table.
333
-	 *
334
-	 */
335
-	public static function migrate_old_customers() {
336
-		global $wpdb;
337
-
338
-		// Fetch post_id from $wpdb->prefix . 'getpaid_invoices' where customer_id = 0 or null.
339
-		$invoice_ids = $wpdb->get_col( "SELECT post_id FROM {$wpdb->prefix}getpaid_invoices WHERE customer_id = 0 OR customer_id IS NULL" );
340
-
341
-		foreach ( $invoice_ids as $invoice_id ) {
342
-			$invoice = wpinv_get_invoice( $invoice_id );
343
-
344
-			if ( empty( $invoice ) ) {
345
-				continue;
346
-			}
347
-
348
-			// Fetch customer from the user ID.
349
-			$user_id = $invoice->get_user_id();
350
-
351
-			if ( empty( $user_id ) ) {
352
-				continue;
353
-			}
354
-
355
-			$customer = getpaid_get_customer_by_user_id( $user_id );
356
-
357
-			// Create if not exists.
358
-			if ( empty( $customer ) ) {
359
-				$customer = new GetPaid_Customer( 0 );
360
-				$customer->clone_user( $user_id );
361
-				$customer->save();
362
-			}
363
-
364
-			$invoice->set_customer_id( $customer->get_id() );
365
-			$invoice->save();
366
-		}
367
-
368
-	}
369
-
370
-	/**
371
-	 * Migrates old invoices to new invoices.
372
-	 *
373
-	 */
374
-	public static function rename_gateways_label() {
375
-		global $wpdb;
376
-
377
-		foreach ( array_keys( wpinv_get_payment_gateways() ) as $gateway ) {
378
-
379
-			$wpdb->update(
380
-				$wpdb->prefix . 'getpaid_invoices',
381
-				array( 'gateway' => $gateway ),
382
-				array( 'gateway' => wpinv_get_gateway_admin_label( $gateway ) ),
383
-				'%s',
384
-				'%s'
385
-			);
386
-
387
-		}
388
-	}
389
-
390
-	/**
391
-	 * Returns the DB schema.
392
-	 *
393
-	 */
394
-	public static function get_db_schema() {
395
-		global $wpdb;
396
-
397
-		if ( ! empty( self::$schema ) ) {
398
-			return self::$schema;
399
-		}
23
+    private static $schema = null;
24
+    private static $schema_version = null;
25
+
26
+    /**
27
+     * Upgrades the install.
28
+     *
29
+     * @param string $upgrade_from The current invoicing version.
30
+     */
31
+    public function upgrade_db( $upgrade_from ) {
32
+
33
+        // Save the current invoicing version.
34
+        update_option( 'wpinv_version', WPINV_VERSION );
35
+
36
+        // Setup the invoice Custom Post Type.
37
+        GetPaid_Post_Types::register_post_types();
38
+
39
+        // Clear the permalinks
40
+        flush_rewrite_rules();
41
+
42
+        // Maybe create new/missing pages.
43
+        $this->create_pages();
44
+
45
+        // Maybe re(add) admin capabilities.
46
+        $this->add_capabilities();
47
+
48
+        // Maybe create the default payment form.
49
+        wpinv_get_default_payment_form();
50
+
51
+        // Create any missing database tables.
52
+        $method = "upgrade_from_$upgrade_from";
53
+
54
+        $installed = get_option( 'gepaid_installed_on' );
55
+
56
+        if ( empty( $installed ) ) {
57
+            update_option( 'gepaid_installed_on', time() );
58
+        }
59
+
60
+        if ( method_exists( $this, $method ) ) {
61
+            $this->$method();
62
+        }
63
+
64
+    }
65
+
66
+    /**
67
+     * Do a fresh install.
68
+     *
69
+     */
70
+    public function upgrade_from_0() {
71
+
72
+        // Save default tax rates.
73
+        update_option( 'wpinv_tax_rates', wpinv_get_data( 'tax-rates' ) );
74
+    }
75
+
76
+    /**
77
+     * Upgrade to 0.0.5
78
+     *
79
+     */
80
+    public function upgrade_from_004() {
81
+        global $wpdb;
82
+
83
+        // Invoices.
84
+        $results = $wpdb->get_results( "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'wpi_invoice' AND post_status IN( 'pending', 'processing', 'onhold', 'refunded', 'cancelled', 'failed', 'renewal' )" );
85
+        if ( ! empty( $results ) ) {
86
+            $wpdb->query( "UPDATE {$wpdb->posts} SET post_status = CONCAT( 'wpi-', post_status ) WHERE post_type = 'wpi_invoice' AND post_status IN( 'pending', 'processing', 'onhold', 'refunded', 'cancelled', 'failed', 'renewal' )" );
87
+
88
+            // Clean post cache
89
+            foreach ( $results as $row ) {
90
+                clean_post_cache( $row->ID );
91
+            }
92
+        }
93
+
94
+        // Item meta key changes
95
+        $query = 'SELECT DISTINCT post_id FROM ' . $wpdb->postmeta . " WHERE meta_key IN( '_wpinv_item_id', '_wpinv_package_id', '_wpinv_post_id', '_wpinv_cpt_name', '_wpinv_cpt_singular_name' )";
96
+        $results = $wpdb->get_results( $query );
97
+
98
+        if ( ! empty( $results ) ) {
99
+            $wpdb->query( 'UPDATE ' . $wpdb->postmeta . " SET meta_key = '_wpinv_custom_id' WHERE meta_key IN( '_wpinv_item_id', '_wpinv_package_id', '_wpinv_post_id' )" );
100
+            $wpdb->query( 'UPDATE ' . $wpdb->postmeta . " SET meta_key = '_wpinv_custom_name' WHERE meta_key = '_wpinv_cpt_name'" );
101
+            $wpdb->query( 'UPDATE ' . $wpdb->postmeta . " SET meta_key = '_wpinv_custom_singular_name' WHERE meta_key = '_wpinv_cpt_singular_name'" );
102
+
103
+            foreach ( $results as $row ) {
104
+                clean_post_cache( $row->post_id );
105
+            }
106
+        }
107
+
108
+        $this->upgrade_from_118();
109
+    }
110
+
111
+    /**
112
+     * Upgrade to version 2.0.0.
113
+     *
114
+     */
115
+    public function upgrade_from_118() {
116
+        $this->migrate_old_invoices();
117
+        $this->upgrade_from_279();
118
+    }
119
+
120
+    /**
121
+     * Upgrade to version 2.0.0.
122
+     *
123
+     */
124
+    public function upgrade_from_279() {
125
+        self::migrate_old_customers();
126
+    }
127
+
128
+    /**
129
+     * Give administrators the capability to manage GetPaid.
130
+     *
131
+     */
132
+    public function add_capabilities() {
133
+        $GLOBALS['wp_roles']->add_cap( 'administrator', 'manage_invoicing' );
134
+    }
135
+
136
+    /**
137
+     * Retreives GetPaid pages.
138
+     *
139
+     */
140
+    public static function get_pages( $filtered = false ) {
141
+        $gutenberg = getpaid_is_gutenberg();
142
+
143
+        return apply_filters(
144
+            'wpinv_create_pages',
145
+            array(
146
+                // Checkout page.
147
+                'checkout_page' => array(
148
+                    'name'    => _x( 'gp-checkout', 'Page slug', 'invoicing' ),
149
+                    'title'   => _x( 'Checkout', 'Page title', 'invoicing' ),
150
+                    'content' => getpaid_page_content_checkout( $filtered, $gutenberg ),
151
+                    'parent'  => ''
152
+                ),
153
+
154
+                // Invoice history page.
155
+                'invoice_history_page' => array(
156
+                    'name'    => _x( 'gp-invoices', 'Page slug', 'invoicing' ),
157
+                    'title'   => _x( 'My Invoices', 'Page title', 'invoicing' ),
158
+                    'content' => getpaid_page_content_invoice_history( $filtered, $gutenberg ),
159
+                    'parent'  => ''
160
+                ),
161
+
162
+                // Success page content.
163
+                'success_page' => array(
164
+                    'name'    => _x( 'gp-receipt', 'Page slug', 'invoicing' ),
165
+                    'title'   => _x( 'Payment Confirmation', 'Page title', 'invoicing' ),
166
+                    'content' => getpaid_page_content_receipt( $filtered, $gutenberg ),
167
+                    'parent'  => 'gp-checkout'
168
+                ),
169
+
170
+                // Failure page content.
171
+                'failure_page' => array(
172
+                    'name'    => _x( 'gp-transaction-failed', 'Page slug', 'invoicing' ),
173
+                    'title'   => _x( 'Transaction Failed', 'Page title', 'invoicing' ),
174
+                    'content' => getpaid_page_content_failure( $filtered, $gutenberg ),
175
+                    'parent'  => 'gp-checkout'
176
+                ),
177
+
178
+                // Subscriptions history page.
179
+                'invoice_subscription_page' => array(
180
+                    'name'    => _x( 'gp-subscriptions', 'Page slug', 'invoicing' ),
181
+                    'title'   => _x( 'My Subscriptions', 'Page title', 'invoicing' ),
182
+                    'content' => getpaid_page_content_subscriptions( $filtered, $gutenberg ),
183
+                    'parent'  => ''
184
+                )
185
+            )
186
+        );
187
+    }
188
+
189
+    /**
190
+     * Re-create GetPaid pages.
191
+     *
192
+     */
193
+    public function create_pages() {
194
+        foreach ( self::get_pages() as $key => $page ) {
195
+            wpinv_create_page( esc_sql( $page['name'] ), $key, $page['title'], $page['content'], $page['parent'] );
196
+        }
197
+
198
+    }
199
+
200
+    /**
201
+     * Migrates old invoices to new invoices.
202
+     *
203
+     */
204
+    public function migrate_old_invoices() {
205
+        global $wpdb;
206
+
207
+        $invoices_table      = $wpdb->prefix . 'getpaid_invoices';
208
+        $invoice_items_table = $wpdb->prefix . 'getpaid_invoice_items';
209
+        $migrated            = $wpdb->get_col( "SELECT post_id FROM $invoices_table" );
210
+        $invoices            = array_unique(
211
+            get_posts(
212
+                array(
213
+                    'post_type'      => array( 'wpi_invoice', 'wpi_quote' ),
214
+                    'posts_per_page' => -1,
215
+                    'fields'         => 'ids',
216
+                    'post_status'    => array_keys( get_post_stati() ),
217
+                    'exclude'        => (array) $migrated,
218
+                )
219
+            )
220
+        );
221
+
222
+        // Abort if we do not have any invoices.
223
+        if ( empty( $invoices ) ) {
224
+            return;
225
+        }
226
+
227
+        require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-legacy-invoice.php';
228
+
229
+        $invoice_rows = array();
230
+        foreach ( $invoices as $invoice ) {
231
+
232
+            $invoice = new WPInv_Legacy_Invoice( $invoice );
233
+
234
+            if ( empty( $invoice->ID ) ) {
235
+                return;
236
+            }
237
+
238
+            $fields = array(
239
+                'post_id'            => $invoice->ID,
240
+                'number'             => $invoice->get_number(),
241
+                'key'                => $invoice->get_key(),
242
+                'type'               => str_replace( 'wpi_', '', $invoice->post_type ),
243
+                'mode'               => $invoice->mode,
244
+                'user_ip'            => $invoice->get_ip(),
245
+                'first_name'         => $invoice->get_first_name(),
246
+                'last_name'          => $invoice->get_last_name(),
247
+                'address'            => $invoice->get_address(),
248
+                'city'               => $invoice->city,
249
+                'state'              => $invoice->state,
250
+                'country'            => $invoice->country,
251
+                'zip'                => $invoice->zip,
252
+                'adddress_confirmed' => (int) $invoice->adddress_confirmed,
253
+                'gateway'            => $invoice->get_gateway(),
254
+                'transaction_id'     => $invoice->get_transaction_id(),
255
+                'currency'           => $invoice->get_currency(),
256
+                'subtotal'           => $invoice->get_subtotal(),
257
+                'tax'                => $invoice->get_tax(),
258
+                'fees_total'         => $invoice->get_fees_total(),
259
+                'total'              => $invoice->get_total(),
260
+                'discount'           => $invoice->get_discount(),
261
+                'discount_code'      => $invoice->get_discount_code(),
262
+                'disable_taxes'      => $invoice->disable_taxes,
263
+                'due_date'           => $invoice->get_due_date(),
264
+                'completed_date'     => $invoice->get_completed_date(),
265
+                'company'            => $invoice->company,
266
+                'vat_number'         => $invoice->vat_number,
267
+                'vat_rate'           => $invoice->vat_rate,
268
+                'custom_meta'        => $invoice->payment_meta,
269
+            );
270
+
271
+            foreach ( $fields as $key => $val ) {
272
+                if ( is_null( $val ) ) {
273
+                    $val = '';
274
+                }
275
+                $val = maybe_serialize( $val );
276
+                $fields[ $key ] = $wpdb->prepare( '%s', $val );
277
+            }
278
+
279
+            $fields = implode( ', ', $fields );
280
+            $invoice_rows[] = "($fields)";
281
+
282
+            $item_rows    = array();
283
+            $item_columns = array();
284
+            foreach ( $invoice->get_cart_details() as $details ) {
285
+                $fields = array(
286
+                    'post_id'          => $invoice->ID,
287
+                    'item_id'          => $details['id'],
288
+                    'item_name'        => $details['name'],
289
+                    'item_description' => empty( $details['meta']['description'] ) ? '' : $details['meta']['description'],
290
+                    'vat_rate'         => $details['vat_rate'],
291
+                    'vat_class'        => empty( $details['vat_class'] ) ? '_standard' : $details['vat_class'],
292
+                    'tax'              => $details['tax'],
293
+                    'item_price'       => $details['item_price'],
294
+                    'custom_price'     => $details['custom_price'],
295
+                    'quantity'         => $details['quantity'],
296
+                    'discount'         => $details['discount'],
297
+                    'subtotal'         => $details['subtotal'],
298
+                    'price'            => $details['price'],
299
+                    'meta'             => $details['meta'],
300
+                    'fees'             => $details['fees'],
301
+                );
302
+
303
+                $item_columns = array_keys( $fields );
304
+
305
+                foreach ( $fields as $key => $val ) {
306
+                    if ( is_null( $val ) ) {
307
+                        $val = '';
308
+                    }
309
+                    $val = maybe_serialize( $val );
310
+                    $fields[ $key ] = $wpdb->prepare( '%s', $val );
311
+                }
312
+
313
+                $fields = implode( ', ', $fields );
314
+                $item_rows[] = "($fields)";
315
+            }
316
+
317
+            $item_rows    = implode( ', ', $item_rows );
318
+            $item_columns = implode( ', ', $item_columns );
319
+            $wpdb->query( "INSERT INTO $invoice_items_table ($item_columns) VALUES $item_rows" );
320
+        }
321
+
322
+        if ( empty( $invoice_rows ) ) {
323
+            return;
324
+        }
325
+
326
+        $invoice_rows = implode( ', ', $invoice_rows );
327
+        $wpdb->query( "INSERT INTO $invoices_table VALUES $invoice_rows" );
328
+
329
+    }
330
+
331
+    /**
332
+     * Migrates old customers to new table.
333
+     *
334
+     */
335
+    public static function migrate_old_customers() {
336
+        global $wpdb;
337
+
338
+        // Fetch post_id from $wpdb->prefix . 'getpaid_invoices' where customer_id = 0 or null.
339
+        $invoice_ids = $wpdb->get_col( "SELECT post_id FROM {$wpdb->prefix}getpaid_invoices WHERE customer_id = 0 OR customer_id IS NULL" );
340
+
341
+        foreach ( $invoice_ids as $invoice_id ) {
342
+            $invoice = wpinv_get_invoice( $invoice_id );
343
+
344
+            if ( empty( $invoice ) ) {
345
+                continue;
346
+            }
347
+
348
+            // Fetch customer from the user ID.
349
+            $user_id = $invoice->get_user_id();
350
+
351
+            if ( empty( $user_id ) ) {
352
+                continue;
353
+            }
354
+
355
+            $customer = getpaid_get_customer_by_user_id( $user_id );
356
+
357
+            // Create if not exists.
358
+            if ( empty( $customer ) ) {
359
+                $customer = new GetPaid_Customer( 0 );
360
+                $customer->clone_user( $user_id );
361
+                $customer->save();
362
+            }
363
+
364
+            $invoice->set_customer_id( $customer->get_id() );
365
+            $invoice->save();
366
+        }
367
+
368
+    }
369
+
370
+    /**
371
+     * Migrates old invoices to new invoices.
372
+     *
373
+     */
374
+    public static function rename_gateways_label() {
375
+        global $wpdb;
376
+
377
+        foreach ( array_keys( wpinv_get_payment_gateways() ) as $gateway ) {
378
+
379
+            $wpdb->update(
380
+                $wpdb->prefix . 'getpaid_invoices',
381
+                array( 'gateway' => $gateway ),
382
+                array( 'gateway' => wpinv_get_gateway_admin_label( $gateway ) ),
383
+                '%s',
384
+                '%s'
385
+            );
386
+
387
+        }
388
+    }
389
+
390
+    /**
391
+     * Returns the DB schema.
392
+     *
393
+     */
394
+    public static function get_db_schema() {
395
+        global $wpdb;
396
+
397
+        if ( ! empty( self::$schema ) ) {
398
+            return self::$schema;
399
+        }
400 400
 
401
-		require_once ABSPATH . 'wp-admin/includes/upgrade.php';
401
+        require_once ABSPATH . 'wp-admin/includes/upgrade.php';
402 402
 
403
-		$charset_collate = $wpdb->get_charset_collate();
403
+        $charset_collate = $wpdb->get_charset_collate();
404 404
 
405
-		$schema = array();
405
+        $schema = array();
406 406
 
407
-		// Subscriptions.
408
-		$schema['subscriptions'] = "CREATE TABLE {$wpdb->prefix}wpinv_subscriptions (
407
+        // Subscriptions.
408
+        $schema['subscriptions'] = "CREATE TABLE {$wpdb->prefix}wpinv_subscriptions (
409 409
 			id bigint(20) unsigned NOT NULL auto_increment,
410 410
 			customer_id bigint(20) NOT NULL,
411 411
 			frequency int(11) NOT NULL DEFAULT '1',
@@ -428,8 +428,8 @@  discard block
 block discarded – undo
428 428
 			KEY customer_and_status (customer_id, status)
429 429
 		  ) $charset_collate;";
430 430
 
431
-		// Invoices.
432
-		$schema['invoices'] = "CREATE TABLE {$wpdb->prefix}getpaid_invoices (
431
+        // Invoices.
432
+        $schema['invoices'] = "CREATE TABLE {$wpdb->prefix}getpaid_invoices (
433 433
 			post_id BIGINT(20) NOT NULL,
434 434
 			customer_id BIGINT(20) NOT NULL DEFAULT 0,
435 435
             `number` VARCHAR(100),
@@ -467,8 +467,8 @@  discard block
 block discarded – undo
467 467
 			KEY invoice_key (invoice_key)
468 468
 		  ) $charset_collate;";
469 469
 
470
-		// Invoice items.
471
-		$schema['items'] = "CREATE TABLE {$wpdb->prefix}getpaid_invoice_items (
470
+        // Invoice items.
471
+        $schema['items'] = "CREATE TABLE {$wpdb->prefix}getpaid_invoice_items (
472 472
 			ID BIGINT(20) NOT NULL AUTO_INCREMENT,
473 473
             post_id BIGINT(20) NOT NULL,
474 474
             item_id BIGINT(20) NOT NULL,
@@ -490,8 +490,8 @@  discard block
 block discarded – undo
490 490
 			KEY post_id (post_id)
491 491
 		  ) $charset_collate;";
492 492
 
493
-		// Customers.
494
-		$schema['customers'] = "CREATE TABLE {$wpdb->prefix}getpaid_customers (
493
+        // Customers.
494
+        $schema['customers'] = "CREATE TABLE {$wpdb->prefix}getpaid_customers (
495 495
 			id BIGINT(20) NOT NULL AUTO_INCREMENT,
496 496
 			user_id BIGINT(20) NOT NULL,
497 497
 			email VARCHAR(100) NOT NULL,
@@ -501,38 +501,38 @@  discard block
 block discarded – undo
501 501
 			purchase_count BIGINT(20) NOT NULL DEFAULT 0,
502 502
 			";
503 503
 
504
-		// Add address fields.
505
-		foreach ( array_keys( getpaid_user_address_fields( true ) ) as $field ) {
506
-			// Skip id, user_id and email.
507
-			if ( in_array( $field, array( 'id', 'user_id', 'email', 'purchase_value', 'purchase_count', 'date_created', 'date_modified', 'uuid' ), true ) ) {
508
-				continue;
509
-			}
510
-
511
-			$field   = sanitize_key( $field );
512
-			$length  = 100;
513
-			$default = '';
514
-
515
-			// Country.
516
-			if ( 'country' === $field ) {
517
-				$length  = 2;
518
-				$default = wpinv_get_default_country();
519
-			}
520
-
521
-			// State.
522
-			if ( 'state' === $field ) {
523
-				$default = wpinv_get_default_state();
524
-			}
525
-
526
-			// Phone, zip.
527
-			if ( in_array( $field, array( 'phone', 'zip' ), true ) ) {
528
-				$length = 20;
529
-			}
530
-
531
-			$schema['customers'] .= "`$field` VARCHAR($length) NOT NULL DEFAULT '$default',
504
+        // Add address fields.
505
+        foreach ( array_keys( getpaid_user_address_fields( true ) ) as $field ) {
506
+            // Skip id, user_id and email.
507
+            if ( in_array( $field, array( 'id', 'user_id', 'email', 'purchase_value', 'purchase_count', 'date_created', 'date_modified', 'uuid' ), true ) ) {
508
+                continue;
509
+            }
510
+
511
+            $field   = sanitize_key( $field );
512
+            $length  = 100;
513
+            $default = '';
514
+
515
+            // Country.
516
+            if ( 'country' === $field ) {
517
+                $length  = 2;
518
+                $default = wpinv_get_default_country();
519
+            }
520
+
521
+            // State.
522
+            if ( 'state' === $field ) {
523
+                $default = wpinv_get_default_state();
524
+            }
525
+
526
+            // Phone, zip.
527
+            if ( in_array( $field, array( 'phone', 'zip' ), true ) ) {
528
+                $length = 20;
529
+            }
530
+
531
+            $schema['customers'] .= "`$field` VARCHAR($length) NOT NULL DEFAULT '$default',
532 532
 			";
533
-		}
533
+        }
534 534
 
535
-		$schema['customers'] .= "date_created DATETIME NOT NULL,
535
+        $schema['customers'] .= "date_created DATETIME NOT NULL,
536 536
 			date_modified DATETIME NOT NULL,
537 537
 			uuid VARCHAR(100) NOT NULL,
538 538
 			is_anonymized INT(2) NOT NULL DEFAULT 0,
@@ -542,8 +542,8 @@  discard block
 block discarded – undo
542 542
 			KEY email (email)
543 543
 		  ) $charset_collate;";
544 544
 
545
-		// Customer meta.
546
-		$schema['customer_meta'] = "CREATE TABLE {$wpdb->prefix}getpaid_customer_meta (
545
+        // Customer meta.
546
+        $schema['customer_meta'] = "CREATE TABLE {$wpdb->prefix}getpaid_customer_meta (
547 547
 			meta_id BIGINT(20) NOT NULL AUTO_INCREMENT,
548 548
 			customer_id BIGINT(20) NOT NULL,
549 549
 			meta_key VARCHAR(255) NOT NULL,
@@ -553,8 +553,8 @@  discard block
 block discarded – undo
553 553
 			KEY meta_key (meta_key(191))
554 554
 		  ) $charset_collate;";
555 555
 
556
-		// Anonymization Logs.
557
-		$schema['anonymization_logs'] = "CREATE TABLE {$wpdb->prefix}getpaid_anonymization_logs (
556
+        // Anonymization Logs.
557
+        $schema['anonymization_logs'] = "CREATE TABLE {$wpdb->prefix}getpaid_anonymization_logs (
558 558
 			log_id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
559 559
 			user_id BIGINT(20) UNSIGNED NOT NULL,
560 560
 			action VARCHAR(50) NOT NULL,
@@ -568,75 +568,75 @@  discard block
 block discarded – undo
568 568
 			KEY timestamp (timestamp)
569 569
 		) $charset_collate;";
570 570
 
571
-		// Filter.
572
-		$schema = apply_filters( 'getpaid_db_schema', $schema );
573
-
574
-		self::$schema         = implode( "\n", array_values( $schema ) );
575
-		self::$schema_version = md5( sanitize_key( self::$schema ) );
576
-
577
-		return self::$schema;
578
-	}
579
-
580
-	/**
581
-	 * Returns the DB schema version.
582
-	 *
583
-	 */
584
-	public static function get_db_schema_version() {
585
-		if ( ! empty( self::$schema_version ) ) {
586
-			return self::$schema_version;
587
-		}
588
-
589
-		self::get_db_schema();
590
-
591
-		return self::$schema_version;
592
-	}
593
-
594
-	/**
595
-	 * Checks if the db schema is up to date.
596
-	 *
597
-	 * @return bool
598
-	 */
599
-	public static function is_db_schema_up_to_date() {
600
-		return self::get_db_schema_version() === get_option( 'getpaid_db_schema' );
601
-	}
602
-
603
-	/**
604
-	 * Set up the database tables which the plugin needs to function.
605
-	 */
606
-	public static function create_db_tables() {
607
-		global $wpdb;
608
-
609
-		$wpdb->hide_errors();
610
-
611
-		require_once ABSPATH . 'wp-admin/includes/upgrade.php';
612
-
613
-		$schema = self::get_db_schema();
614
-
615
-		// If invoices table exists, rename key to invoice_key.
616
-		$invoices_table = "{$wpdb->prefix}getpaid_invoices";
617
-
618
-		if ( $wpdb->get_var( "SHOW TABLES LIKE '{$wpdb->prefix}getpaid_invoices'" ) === $invoices_table ) {
619
-			$fields = $wpdb->get_results( "SHOW COLUMNS FROM {$wpdb->prefix}getpaid_invoices" );
620
-
621
-			foreach ( $fields as $field ) {
622
-				if ( 'key' === $field->Field ) {
623
-					$wpdb->query( "ALTER TABLE {$wpdb->prefix}getpaid_invoices CHANGE `key` `invoice_key` VARCHAR(100)" );
624
-					break;
625
-				}
626
-			}
627
-		}
628
-
629
-		dbDelta( $schema );
630
-		wp_cache_flush();
631
-		update_option( 'getpaid_db_schema', self::get_db_schema_version() );
632
-	}
633
-
634
-	/**
635
-	 * Creates tables if schema is not up to date.
636
-	 */
637
-	public static function maybe_create_db_tables() {
638
-		if ( ! self::is_db_schema_up_to_date() ) {
639
-			self::create_db_tables();
640
-		}
641
-	}
571
+        // Filter.
572
+        $schema = apply_filters( 'getpaid_db_schema', $schema );
573
+
574
+        self::$schema         = implode( "\n", array_values( $schema ) );
575
+        self::$schema_version = md5( sanitize_key( self::$schema ) );
576
+
577
+        return self::$schema;
578
+    }
579
+
580
+    /**
581
+     * Returns the DB schema version.
582
+     *
583
+     */
584
+    public static function get_db_schema_version() {
585
+        if ( ! empty( self::$schema_version ) ) {
586
+            return self::$schema_version;
587
+        }
588
+
589
+        self::get_db_schema();
590
+
591
+        return self::$schema_version;
592
+    }
593
+
594
+    /**
595
+     * Checks if the db schema is up to date.
596
+     *
597
+     * @return bool
598
+     */
599
+    public static function is_db_schema_up_to_date() {
600
+        return self::get_db_schema_version() === get_option( 'getpaid_db_schema' );
601
+    }
602
+
603
+    /**
604
+     * Set up the database tables which the plugin needs to function.
605
+     */
606
+    public static function create_db_tables() {
607
+        global $wpdb;
608
+
609
+        $wpdb->hide_errors();
610
+
611
+        require_once ABSPATH . 'wp-admin/includes/upgrade.php';
612
+
613
+        $schema = self::get_db_schema();
614
+
615
+        // If invoices table exists, rename key to invoice_key.
616
+        $invoices_table = "{$wpdb->prefix}getpaid_invoices";
617
+
618
+        if ( $wpdb->get_var( "SHOW TABLES LIKE '{$wpdb->prefix}getpaid_invoices'" ) === $invoices_table ) {
619
+            $fields = $wpdb->get_results( "SHOW COLUMNS FROM {$wpdb->prefix}getpaid_invoices" );
620
+
621
+            foreach ( $fields as $field ) {
622
+                if ( 'key' === $field->Field ) {
623
+                    $wpdb->query( "ALTER TABLE {$wpdb->prefix}getpaid_invoices CHANGE `key` `invoice_key` VARCHAR(100)" );
624
+                    break;
625
+                }
626
+            }
627
+        }
628
+
629
+        dbDelta( $schema );
630
+        wp_cache_flush();
631
+        update_option( 'getpaid_db_schema', self::get_db_schema_version() );
632
+    }
633
+
634
+    /**
635
+     * Creates tables if schema is not up to date.
636
+     */
637
+    public static function maybe_create_db_tables() {
638
+        if ( ! self::is_db_schema_up_to_date() ) {
639
+            self::create_db_tables();
640
+        }
641
+    }
642 642
 }
Please login to merge, or discard this patch.
includes/admin/class-getpaid-post-types-admin.php 1 patch
Indentation   +848 added lines, -848 removed lines patch added patch discarded remove patch
@@ -13,755 +13,755 @@  discard block
 block discarded – undo
13 13
 class GetPaid_Post_Types_Admin {
14 14
 
15 15
     /**
16
-	 * Hook in methods.
17
-	 */
18
-	public static function init() {
19
-
20
-		// Init metaboxes.
21
-		GetPaid_Metaboxes::init();
22
-
23
-		// Filter the post updated messages.
24
-		add_filter( 'post_updated_messages', 'GetPaid_Post_Types_Admin::post_updated_messages' );
25
-
26
-		// Filter post actions.
27
-		add_filter( 'post_row_actions', 'GetPaid_Post_Types_Admin::post_row_actions', 10, 2 );
28
-		add_filter( 'post_row_actions', 'GetPaid_Post_Types_Admin::filter_invoice_row_actions', 90, 2 );
29
-
30
-		// Invoice table columns.
31
-		add_filter( 'manage_wpi_invoice_posts_columns', array( __CLASS__, 'invoice_columns' ), 100 );
32
-		add_action( 'manage_wpi_invoice_posts_custom_column', array( __CLASS__, 'display_invoice_columns' ), 10, 2 );
33
-		add_filter( 'bulk_actions-edit-wpi_invoice', array( __CLASS__, 'invoice_bulk_actions' ) );
34
-		add_filter( 'handle_bulk_actions-edit-wpi_invoice', array( __CLASS__, 'handle_invoice_bulk_actions' ), 10, 3 );
35
-
36
-		// Items table columns.
37
-		add_filter( 'manage_wpi_item_posts_columns', array( __CLASS__, 'item_columns' ), 100 );
38
-		add_filter( 'manage_edit-wpi_item_sortable_columns', array( __CLASS__, 'sortable_item_columns' ), 20 );
39
-		add_action( 'manage_wpi_item_posts_custom_column', array( __CLASS__, 'display_item_columns' ), 10, 2 );
40
-		add_action( 'restrict_manage_posts', array( __CLASS__, 'add_item_filters' ), 100 );
41
-		add_action( 'parse_query', array( __CLASS__, 'filter_item_query' ), 100 );
42
-		add_action( 'request', array( __CLASS__, 'reorder_items' ), 100 );
43
-
44
-		// Payment forms columns.
45
-		add_filter( 'manage_wpi_payment_form_posts_columns', array( __CLASS__, 'payment_form_columns' ), 100 );
46
-		add_action( 'manage_wpi_payment_form_posts_custom_column', array( __CLASS__, 'display_payment_form_columns' ), 10, 2 );
47
-		add_filter( 'display_post_states', array( __CLASS__, 'filter_payment_form_state' ), 10, 2 );
48
-
49
-		// Discount table columns.
50
-		add_filter( 'manage_wpi_discount_posts_columns', array( __CLASS__, 'discount_columns' ), 100 );
51
-		add_filter( 'bulk_actions-edit-wpi_discount', '__return_empty_array', 100 );
52
-
53
-		// Deleting posts.
54
-		add_action( 'delete_post', array( __CLASS__, 'delete_post' ) );
55
-		add_filter( 'display_post_states', array( __CLASS__, 'filter_discount_state' ), 10, 2 );
56
-
57
-		add_filter( 'display_post_states', array( __CLASS__, 'add_display_post_states' ), 10, 2 );
58
-	}
59
-
60
-	/**
61
-	 * Post updated messages.
62
-	 */
63
-	public static function post_updated_messages( $messages ) {
64
-		global $post;
65
-
66
-		$messages['wpi_discount'] = array(
67
-			0  => '',
68
-			1  => __( 'Discount updated.', 'invoicing' ),
69
-			2  => __( 'Custom field updated.', 'invoicing' ),
70
-			3  => __( 'Custom field deleted.', 'invoicing' ),
71
-			4  => __( 'Discount updated.', 'invoicing' ),
72
-			5  => isset( $_GET['revision'] ) ? wp_sprintf( __( 'Discount restored to revision from %s', 'invoicing' ), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
73
-			6  => __( 'Discount updated.', 'invoicing' ),
74
-			7  => __( 'Discount saved.', 'invoicing' ),
75
-			8  => __( 'Discount submitted.', 'invoicing' ),
76
-			9  => wp_sprintf( __( 'Discount scheduled for: <strong>%1$s</strong>.', 'invoicing' ), date_i18n( __( 'M j, Y @ G:i', 'invoicing' ), strtotime( $post->post_date ) ) ),
77
-			10 => __( 'Discount draft updated.', 'invoicing' ),
78
-		);
79
-
80
-		$messages['wpi_payment_form'] = array(
81
-			0  => '',
82
-			1  => __( 'Payment Form updated.', 'invoicing' ),
83
-			2  => __( 'Custom field updated.', 'invoicing' ),
84
-			3  => __( 'Custom field deleted.', 'invoicing' ),
85
-			4  => __( 'Payment Form updated.', 'invoicing' ),
86
-			5  => isset( $_GET['revision'] ) ? wp_sprintf( __( 'Payment Form restored to revision from %s', 'invoicing' ), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
87
-			6  => __( 'Payment Form updated.', 'invoicing' ),
88
-			7  => __( 'Payment Form saved.', 'invoicing' ),
89
-			8  => __( 'Payment Form submitted.', 'invoicing' ),
90
-			9  => wp_sprintf( __( 'Payment Form scheduled for: <strong>%1$s</strong>.', 'invoicing' ), date_i18n( __( 'M j, Y @ G:i', 'invoicing' ), strtotime( $post->post_date ) ) ),
91
-			10 => __( 'Payment Form draft updated.', 'invoicing' ),
92
-		);
93
-
94
-		return $messages;
95
-
96
-	}
97
-
98
-	/**
99
-	 * Post row actions.
100
-	 */
101
-	public static function post_row_actions( $actions, $post ) {
102
-
103
-		$post = get_post( $post );
104
-
105
-		// We do not want to edit the default payment form.
106
-		if ( 'wpi_payment_form' == $post->post_type ) {
107
-
108
-			if ( wpinv_get_default_payment_form() === $post->ID ) {
109
-				unset( $actions['trash'] );
110
-				unset( $actions['inline hide-if-no-js'] );
111
-			}
112
-
113
-			$actions['duplicate'] = sprintf(
114
-				'<a href="%1$s">%2$s</a>',
115
-				esc_url(
116
-					wp_nonce_url(
117
-						add_query_arg(
118
-							array(
119
-								'getpaid-admin-action' => 'duplicate_form',
120
-								'form_id'              => $post->ID,
121
-							)
122
-						),
123
-						'getpaid-nonce',
124
-						'getpaid-nonce'
125
-					)
126
-				),
127
-				esc_html( __( 'Duplicate', 'invoicing' ) )
128
-			);
129
-
130
-			$actions['reset'] = sprintf(
131
-				'<a href="%1$s" style="color: #800">%2$s</a>',
132
-				esc_url(
133
-					wp_nonce_url(
134
-						add_query_arg(
135
-							array(
136
-								'getpaid-admin-action' => 'reset_form_stats',
137
-								'form_id'              => $post->ID,
138
-							)
139
-						),
140
-						'getpaid-nonce',
141
-						'getpaid-nonce'
142
-					)
143
-				),
144
-				esc_html( __( 'Reset Stats', 'invoicing' ) )
145
-			);
146
-		}
147
-
148
-		// Link to item payment form.
149
-		if ( 'wpi_item' == $post->post_type ) {
150
-			if ( getpaid_item_type_supports( get_post_meta( $post->ID, '_wpinv_type', true ), 'buy_now' ) ) {
151
-				$actions['buy'] = sprintf(
152
-					'<a href="%1$s">%2$s</a>',
153
-					esc_url( getpaid_embed_url( false, $post->ID . '|0' ) ),
154
-					esc_html( __( 'Buy', 'invoicing' ) )
155
-				);
156
-			}
157
-		}
158
-
159
-		return $actions;
160
-	}
161
-
162
-	/**
16
+     * Hook in methods.
17
+     */
18
+    public static function init() {
19
+
20
+        // Init metaboxes.
21
+        GetPaid_Metaboxes::init();
22
+
23
+        // Filter the post updated messages.
24
+        add_filter( 'post_updated_messages', 'GetPaid_Post_Types_Admin::post_updated_messages' );
25
+
26
+        // Filter post actions.
27
+        add_filter( 'post_row_actions', 'GetPaid_Post_Types_Admin::post_row_actions', 10, 2 );
28
+        add_filter( 'post_row_actions', 'GetPaid_Post_Types_Admin::filter_invoice_row_actions', 90, 2 );
29
+
30
+        // Invoice table columns.
31
+        add_filter( 'manage_wpi_invoice_posts_columns', array( __CLASS__, 'invoice_columns' ), 100 );
32
+        add_action( 'manage_wpi_invoice_posts_custom_column', array( __CLASS__, 'display_invoice_columns' ), 10, 2 );
33
+        add_filter( 'bulk_actions-edit-wpi_invoice', array( __CLASS__, 'invoice_bulk_actions' ) );
34
+        add_filter( 'handle_bulk_actions-edit-wpi_invoice', array( __CLASS__, 'handle_invoice_bulk_actions' ), 10, 3 );
35
+
36
+        // Items table columns.
37
+        add_filter( 'manage_wpi_item_posts_columns', array( __CLASS__, 'item_columns' ), 100 );
38
+        add_filter( 'manage_edit-wpi_item_sortable_columns', array( __CLASS__, 'sortable_item_columns' ), 20 );
39
+        add_action( 'manage_wpi_item_posts_custom_column', array( __CLASS__, 'display_item_columns' ), 10, 2 );
40
+        add_action( 'restrict_manage_posts', array( __CLASS__, 'add_item_filters' ), 100 );
41
+        add_action( 'parse_query', array( __CLASS__, 'filter_item_query' ), 100 );
42
+        add_action( 'request', array( __CLASS__, 'reorder_items' ), 100 );
43
+
44
+        // Payment forms columns.
45
+        add_filter( 'manage_wpi_payment_form_posts_columns', array( __CLASS__, 'payment_form_columns' ), 100 );
46
+        add_action( 'manage_wpi_payment_form_posts_custom_column', array( __CLASS__, 'display_payment_form_columns' ), 10, 2 );
47
+        add_filter( 'display_post_states', array( __CLASS__, 'filter_payment_form_state' ), 10, 2 );
48
+
49
+        // Discount table columns.
50
+        add_filter( 'manage_wpi_discount_posts_columns', array( __CLASS__, 'discount_columns' ), 100 );
51
+        add_filter( 'bulk_actions-edit-wpi_discount', '__return_empty_array', 100 );
52
+
53
+        // Deleting posts.
54
+        add_action( 'delete_post', array( __CLASS__, 'delete_post' ) );
55
+        add_filter( 'display_post_states', array( __CLASS__, 'filter_discount_state' ), 10, 2 );
56
+
57
+        add_filter( 'display_post_states', array( __CLASS__, 'add_display_post_states' ), 10, 2 );
58
+    }
59
+
60
+    /**
61
+     * Post updated messages.
62
+     */
63
+    public static function post_updated_messages( $messages ) {
64
+        global $post;
65
+
66
+        $messages['wpi_discount'] = array(
67
+            0  => '',
68
+            1  => __( 'Discount updated.', 'invoicing' ),
69
+            2  => __( 'Custom field updated.', 'invoicing' ),
70
+            3  => __( 'Custom field deleted.', 'invoicing' ),
71
+            4  => __( 'Discount updated.', 'invoicing' ),
72
+            5  => isset( $_GET['revision'] ) ? wp_sprintf( __( 'Discount restored to revision from %s', 'invoicing' ), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
73
+            6  => __( 'Discount updated.', 'invoicing' ),
74
+            7  => __( 'Discount saved.', 'invoicing' ),
75
+            8  => __( 'Discount submitted.', 'invoicing' ),
76
+            9  => wp_sprintf( __( 'Discount scheduled for: <strong>%1$s</strong>.', 'invoicing' ), date_i18n( __( 'M j, Y @ G:i', 'invoicing' ), strtotime( $post->post_date ) ) ),
77
+            10 => __( 'Discount draft updated.', 'invoicing' ),
78
+        );
79
+
80
+        $messages['wpi_payment_form'] = array(
81
+            0  => '',
82
+            1  => __( 'Payment Form updated.', 'invoicing' ),
83
+            2  => __( 'Custom field updated.', 'invoicing' ),
84
+            3  => __( 'Custom field deleted.', 'invoicing' ),
85
+            4  => __( 'Payment Form updated.', 'invoicing' ),
86
+            5  => isset( $_GET['revision'] ) ? wp_sprintf( __( 'Payment Form restored to revision from %s', 'invoicing' ), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
87
+            6  => __( 'Payment Form updated.', 'invoicing' ),
88
+            7  => __( 'Payment Form saved.', 'invoicing' ),
89
+            8  => __( 'Payment Form submitted.', 'invoicing' ),
90
+            9  => wp_sprintf( __( 'Payment Form scheduled for: <strong>%1$s</strong>.', 'invoicing' ), date_i18n( __( 'M j, Y @ G:i', 'invoicing' ), strtotime( $post->post_date ) ) ),
91
+            10 => __( 'Payment Form draft updated.', 'invoicing' ),
92
+        );
93
+
94
+        return $messages;
95
+
96
+    }
97
+
98
+    /**
99
+     * Post row actions.
100
+     */
101
+    public static function post_row_actions( $actions, $post ) {
102
+
103
+        $post = get_post( $post );
104
+
105
+        // We do not want to edit the default payment form.
106
+        if ( 'wpi_payment_form' == $post->post_type ) {
107
+
108
+            if ( wpinv_get_default_payment_form() === $post->ID ) {
109
+                unset( $actions['trash'] );
110
+                unset( $actions['inline hide-if-no-js'] );
111
+            }
112
+
113
+            $actions['duplicate'] = sprintf(
114
+                '<a href="%1$s">%2$s</a>',
115
+                esc_url(
116
+                    wp_nonce_url(
117
+                        add_query_arg(
118
+                            array(
119
+                                'getpaid-admin-action' => 'duplicate_form',
120
+                                'form_id'              => $post->ID,
121
+                            )
122
+                        ),
123
+                        'getpaid-nonce',
124
+                        'getpaid-nonce'
125
+                    )
126
+                ),
127
+                esc_html( __( 'Duplicate', 'invoicing' ) )
128
+            );
129
+
130
+            $actions['reset'] = sprintf(
131
+                '<a href="%1$s" style="color: #800">%2$s</a>',
132
+                esc_url(
133
+                    wp_nonce_url(
134
+                        add_query_arg(
135
+                            array(
136
+                                'getpaid-admin-action' => 'reset_form_stats',
137
+                                'form_id'              => $post->ID,
138
+                            )
139
+                        ),
140
+                        'getpaid-nonce',
141
+                        'getpaid-nonce'
142
+                    )
143
+                ),
144
+                esc_html( __( 'Reset Stats', 'invoicing' ) )
145
+            );
146
+        }
147
+
148
+        // Link to item payment form.
149
+        if ( 'wpi_item' == $post->post_type ) {
150
+            if ( getpaid_item_type_supports( get_post_meta( $post->ID, '_wpinv_type', true ), 'buy_now' ) ) {
151
+                $actions['buy'] = sprintf(
152
+                    '<a href="%1$s">%2$s</a>',
153
+                    esc_url( getpaid_embed_url( false, $post->ID . '|0' ) ),
154
+                    esc_html( __( 'Buy', 'invoicing' ) )
155
+                );
156
+            }
157
+        }
158
+
159
+        return $actions;
160
+    }
161
+
162
+    /**
163 163
      * Remove bulk edit option from admin side quote listing
164 164
      *
165 165
      * @since    1.0.0
166 166
      * @param array $actions post actions
167
-	 * @param WP_Post $post
167
+     * @param WP_Post $post
168 168
      * @return array $actions actions without edit option
169 169
      */
170 170
     public static function filter_invoice_row_actions( $actions, $post ) {
171 171
 
172 172
         if ( getpaid_is_invoice_post_type( $post->post_type ) ) {
173 173
 
174
-			$actions = array();
175
-			$invoice = new WPInv_Invoice( $post );
176
-
177
-			$actions['edit'] = sprintf(
178
-				'<a href="%1$s">%2$s</a>',
179
-				esc_url( get_edit_post_link( $invoice->get_id() ) ),
180
-				esc_html( __( 'Edit', 'invoicing' ) )
181
-			);
182
-
183
-			if ( ! $invoice->is_draft() ) {
184
-
185
-				$actions['view'] = sprintf(
186
-					'<a href="%1$s">%2$s</a>',
187
-					esc_url( $invoice->get_view_url() ),
188
-					sprintf(
189
-						// translators: %s is the invoice type
190
-						esc_html__( 'View %s', 'invoicing' ),
191
-						getpaid_get_post_type_label( $invoice->get_post_type(), false )
192
-					)
193
-				);
194
-
195
-				$actions['send'] = sprintf(
196
-					'<a href="%1$s">%2$s</a>',
197
-					esc_url(
198
-						wp_nonce_url(
199
-							add_query_arg(
200
-								array(
201
-									'getpaid-admin-action' => 'send_invoice',
202
-									'invoice_id'           => $invoice->get_id(),
203
-								)
204
-							),
205
-							'getpaid-nonce',
206
-							'getpaid-nonce'
207
-						)
208
-					),
209
-					esc_html( __( 'Send to Customer', 'invoicing' ) )
210
-				);
211
-
212
-			}
213
-
214
-			$actions['duplicate'] = sprintf(
215
-				'<a href="%1$s">%2$s</a>',
216
-				esc_url(
217
-					wp_nonce_url(
218
-						add_query_arg(
219
-							array(
220
-								'getpaid-admin-action' => 'duplicate_invoice',
221
-								'invoice_id'           => $post->ID,
222
-							)
223
-						),
224
-						'getpaid-nonce',
225
-						'getpaid-nonce'
226
-					)
227
-				),
228
-				esc_html( __( 'Duplicate', 'invoicing' ) )
229
-			);
174
+            $actions = array();
175
+            $invoice = new WPInv_Invoice( $post );
176
+
177
+            $actions['edit'] = sprintf(
178
+                '<a href="%1$s">%2$s</a>',
179
+                esc_url( get_edit_post_link( $invoice->get_id() ) ),
180
+                esc_html( __( 'Edit', 'invoicing' ) )
181
+            );
182
+
183
+            if ( ! $invoice->is_draft() ) {
184
+
185
+                $actions['view'] = sprintf(
186
+                    '<a href="%1$s">%2$s</a>',
187
+                    esc_url( $invoice->get_view_url() ),
188
+                    sprintf(
189
+                        // translators: %s is the invoice type
190
+                        esc_html__( 'View %s', 'invoicing' ),
191
+                        getpaid_get_post_type_label( $invoice->get_post_type(), false )
192
+                    )
193
+                );
194
+
195
+                $actions['send'] = sprintf(
196
+                    '<a href="%1$s">%2$s</a>',
197
+                    esc_url(
198
+                        wp_nonce_url(
199
+                            add_query_arg(
200
+                                array(
201
+                                    'getpaid-admin-action' => 'send_invoice',
202
+                                    'invoice_id'           => $invoice->get_id(),
203
+                                )
204
+                            ),
205
+                            'getpaid-nonce',
206
+                            'getpaid-nonce'
207
+                        )
208
+                    ),
209
+                    esc_html( __( 'Send to Customer', 'invoicing' ) )
210
+                );
211
+
212
+            }
213
+
214
+            $actions['duplicate'] = sprintf(
215
+                '<a href="%1$s">%2$s</a>',
216
+                esc_url(
217
+                    wp_nonce_url(
218
+                        add_query_arg(
219
+                            array(
220
+                                'getpaid-admin-action' => 'duplicate_invoice',
221
+                                'invoice_id'           => $post->ID,
222
+                            )
223
+                        ),
224
+                        'getpaid-nonce',
225
+                        'getpaid-nonce'
226
+                    )
227
+                ),
228
+                esc_html( __( 'Duplicate', 'invoicing' ) )
229
+            );
230 230
 
231 231
         }
232 232
 
233 233
         return $actions;
234
-	}
235
-
236
-	/**
237
-	 * Returns an array of invoice table columns.
238
-	 */
239
-	public static function invoice_columns( $columns ) {
240
-
241
-		$columns = array(
242
-			'cb'           => $columns['cb'],
243
-			'number'       => __( 'Invoice', 'invoicing' ),
244
-			'customer'     => __( 'Customer', 'invoicing' ),
245
-			'invoice_date' => __( 'Created', 'invoicing' ),
246
-			'payment_date' => __( 'Completed', 'invoicing' ),
247
-			'amount'       => __( 'Amount', 'invoicing' ),
248
-			'recurring'    => __( 'Recurring', 'invoicing' ),
249
-			'status'       => __( 'Status', 'invoicing' ),
250
-		);
251
-
252
-		return apply_filters( 'wpi_invoice_table_columns', $columns );
253
-	}
254
-
255
-	/**
256
-	 * Displays invoice table columns.
257
-	 */
258
-	public static function display_invoice_columns( $column_name, $post_id ) {
259
-
260
-		$invoice = new WPInv_Invoice( $post_id );
261
-
262
-		switch ( $column_name ) {
263
-
264
-			case 'invoice_date':
265
-				$date_time = esc_attr( $invoice->get_created_date() );
266
-				$date      = esc_html( getpaid_format_date_value( $date_time, '&mdash;', true ) );
267
-				echo wp_kses_post( "<span title='$date_time'>$date</span>" );
268
-				break;
269
-
270
-			case 'payment_date':
271
-				if ( $invoice->is_paid() || $invoice->is_refunded() ) {
272
-					$date_time = esc_attr( $invoice->get_completed_date() );
273
-					$date      = esc_html( getpaid_format_date_value( $date_time, '&mdash;', true ) );
274
-					echo wp_kses_post( "<span title='$date_time'>$date</span>" );
275
-
276
-					if ( $_gateway = $invoice->get_gateway() ) {
277
-						$gateway_label = wpinv_get_gateway_admin_label( $_gateway );
278
-
279
-						if ( $transaction_url = $invoice->get_transaction_url() ) {
280
-							$gateway_label = '<a href="' . esc_url( $transaction_url ) . '" target="_blank" title="' . esc_attr__( 'Open transaction link', 'invoicing' ) . '">' . $gateway_label . '</a>';
281
-						}
282
-
283
-						$gateway = '<small class="meta bsui"><span class="fs-xs text-muted fst-normal">' . wp_sprintf( _x( 'Via %s', 'Paid via gateway', 'invoicing' ), $gateway_label ) . '</span></small>';
284
-					} else {
285
-						$gateway = '';
286
-					}
287
-
288
-					$gateway = apply_filters( 'getpaid_admin_invoices_list_table_gateway', $gateway, $invoice );
289
-
290
-					if ( $gateway ) {
291
-						echo wp_kses_post( $gateway ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
292
-					}
293
-				} else {
294
-					echo '&mdash;';
295
-				}
296
-
297
-				break;
298
-
299
-			case 'amount':
300
-				$amount = $invoice->get_total();
301
-				$formated_amount = wp_kses_post( wpinv_price( $amount, $invoice->get_currency() ) );
302
-
303
-				if ( $invoice->is_refunded() ) {
304
-					$refunded_amount = wpinv_price( 0, $invoice->get_currency() );
305
-					echo wp_kses_post( "<del>$formated_amount</del>&nbsp;<ins>$refunded_amount</ins>" );
306
-				} else {
307
-
308
-					$discount = $invoice->get_total_discount();
309
-
310
-					if ( ! empty( $discount ) ) {
311
-						$new_amount = wpinv_price( $amount + $discount, $invoice->get_currency() );
312
-						echo wp_kses_post( "<del>$new_amount</del>&nbsp;<ins>$formated_amount</ins>" );
313
-					} else {
314
-						echo wp_kses_post( $formated_amount );
315
-					}
316
-				}
317
-
318
-				break;
319
-
320
-			case 'status':
321
-				$status = esc_html( $invoice->get_status() );
322
-
323
-				// If it is paid, show the gateway title.
324
-				if ( $invoice->is_paid() ) {
325
-					$gateway = esc_html( $invoice->get_gateway_title() );
326
-					$gateway = wp_sprintf( esc_attr__( 'Paid via %s', 'invoicing' ), esc_html( $gateway ) );
327
-
328
-					echo wp_kses_post( "<span class='bsui wpi-help-tip getpaid-invoice-statuss $status' title='$gateway'><span class='fs-base'>" . $invoice->get_status_label_html() . "</span></span>" );
329
-				} else {
330
-					echo wp_kses_post( "<span class='bsui getpaid-invoice-statuss $status'><span class='fs-base'>" . $invoice->get_status_label_html() . "</span></span>" );
331
-				}
332
-
333
-				// If it is not paid, display the overdue and view status.
334
-				if ( ! $invoice->is_paid() && ! $invoice->is_refunded() ) {
335
-
336
-					// Invoice view status.
337
-					if ( wpinv_is_invoice_viewed( $invoice->get_id() ) ) {
338
-						echo '&nbsp;&nbsp;<i class="fa fa-eye wpi-help-tip" title="' . esc_attr__( 'Viewed by Customer', 'invoicing' ) . '"></i>';
339
-					} else {
340
-						echo '&nbsp;&nbsp;<i class="fa fa-eye-slash wpi-help-tip" title="' . esc_attr__( 'Not Viewed by Customer', 'invoicing' ) . '"></i>';
341
-					}
342
-
343
-					// Display the overview status.
344
-					if ( wpinv_get_option( 'overdue_active' ) ) {
345
-						$due_date = $invoice->get_due_date();
346
-						$fomatted = getpaid_format_date( $due_date );
347
-
348
-						if ( ! empty( $fomatted ) ) {
349
-							$date = wp_sprintf(
350
-								// translators: %s is the due date.
351
-								__( 'Due %s', 'invoicing' ),
352
-								$fomatted
353
-							);
354
-							echo wp_kses_post( "<p class='description' style='color: #888;' title='$due_date'>$fomatted</p>" );
355
-						}
356
-					}
357
-				}
358
-
359
-				break;
360
-
361
-			case 'recurring':
362
-				if ( $invoice->is_recurring() ) {
363
-					echo '<i class="fa fa-check" style="color:#43850a;"></i>';
364
-				} else {
365
-					echo '<i class="fa fa-times" style="color:#616161;"></i>';
366
-				}
367
-				break;
368
-
369
-			case 'number':
370
-				$edit_link       = esc_url( get_edit_post_link( $invoice->get_id() ) );
371
-				$invoice_number  = esc_html( $invoice->get_number() );
372
-				$invoice_details = esc_attr__( 'View Invoice Details', 'invoicing' );
373
-
374
-				echo wp_kses_post( "<a href='$edit_link' title='$invoice_details'><strong>$invoice_number</strong></a>" );
375
-
376
-				do_action( 'getpaid_admin_table_invoice_number_column', $invoice );
377
-				break;
378
-
379
-			case 'customer':
380
-				$customer_name = $invoice->get_user_full_name();
381
-
382
-				if ( empty( $customer_name ) ) {
383
-					$customer_name = $invoice->get_email();
384
-				}
385
-
386
-				if ( ! empty( $customer_name ) ) {
387
-					$customer_details = esc_attr__( 'View Customer Details', 'invoicing' );
388
-					$view_link        = esc_url( add_query_arg( 'user_id', $invoice->get_user_id(), admin_url( 'user-edit.php' ) ) );
389
-					echo wp_kses_post( "<a href='$view_link' title='$customer_details'><span>$customer_name</span></a>" );
390
-				} else {
391
-					echo '<div>&mdash;</div>';
392
-				}
393
-
394
-				break;
395
-
396
-		}
397
-
398
-	}
399
-
400
-	/**
401
-	 * Displays invoice bulk actions.
402
-	 */
403
-	public static function invoice_bulk_actions( $actions ) {
404
-		$actions['resend-invoice'] = __( 'Send to Customer', 'invoicing' );
405
-		return $actions;
406
-	}
407
-
408
-	/**
409
-	 * Processes invoice bulk actions.
410
-	 */
411
-	public static function handle_invoice_bulk_actions( $redirect_url, $action, $post_ids ) {
412
-
413
-		if ( 'resend-invoice' === $action ) {
414
-			foreach ( $post_ids as $post_id ) {
415
-				getpaid()->get( 'invoice_emails' )->user_invoice( new WPInv_Invoice( $post_id ), true );
416
-			}
417
-		}
418
-
419
-		return $redirect_url;
420
-
421
-	}
422
-
423
-	/**
424
-	 * Returns an array of payment forms table columns.
425
-	 */
426
-	public static function payment_form_columns( $columns ) {
427
-
428
-		$columns = array(
429
-			'cb'        => $columns['cb'],
430
-			'title'     => __( 'Name', 'invoicing' ),
431
-			'shortcode' => __( 'Shortcode', 'invoicing' ),
432
-			'earnings'  => __( 'Revenue', 'invoicing' ),
433
-			'refunds'   => __( 'Refunded', 'invoicing' ),
434
-			'items'     => __( 'Items', 'invoicing' ),
435
-			'date'      => __( 'Date', 'invoicing' ),
436
-		);
437
-
438
-		return apply_filters( 'wpi_payment_form_table_columns', $columns );
439
-
440
-	}
441
-
442
-	/**
443
-	 * Displays payment form table columns.
444
-	 */
445
-	public static function display_payment_form_columns( $column_name, $post_id ) {
446
-
447
-		// Retrieve the payment form.
448
-		$form = new GetPaid_Payment_Form( $post_id );
449
-
450
-		switch ( $column_name ) {
451
-
452
-			case 'earnings':
453
-				echo wp_kses_post( wpinv_price( $form->get_earned() ) );
454
-				break;
455
-
456
-			case 'refunds':
457
-				echo wp_kses_post( wpinv_price( $form->get_refunded() ) );
458
-				break;
459
-
460
-			case 'refunds':
461
-				echo wp_kses_post( wpinv_price( $form->get_refunded() ) );
462
-				break;
463
-
464
-			case 'shortcode':
465
-				if ( $form->is_default() ) {
466
-					echo '&mdash;';
467
-				} else {
468
-					echo '<input onClick="this.select()" type="text" value="[getpaid form=' . esc_attr( $form->get_id() ) . ']" style="width: 100%;" readonly/>';
469
-				}
470
-
471
-				break;
234
+    }
235
+
236
+    /**
237
+     * Returns an array of invoice table columns.
238
+     */
239
+    public static function invoice_columns( $columns ) {
240
+
241
+        $columns = array(
242
+            'cb'           => $columns['cb'],
243
+            'number'       => __( 'Invoice', 'invoicing' ),
244
+            'customer'     => __( 'Customer', 'invoicing' ),
245
+            'invoice_date' => __( 'Created', 'invoicing' ),
246
+            'payment_date' => __( 'Completed', 'invoicing' ),
247
+            'amount'       => __( 'Amount', 'invoicing' ),
248
+            'recurring'    => __( 'Recurring', 'invoicing' ),
249
+            'status'       => __( 'Status', 'invoicing' ),
250
+        );
251
+
252
+        return apply_filters( 'wpi_invoice_table_columns', $columns );
253
+    }
254
+
255
+    /**
256
+     * Displays invoice table columns.
257
+     */
258
+    public static function display_invoice_columns( $column_name, $post_id ) {
259
+
260
+        $invoice = new WPInv_Invoice( $post_id );
261
+
262
+        switch ( $column_name ) {
263
+
264
+            case 'invoice_date':
265
+                $date_time = esc_attr( $invoice->get_created_date() );
266
+                $date      = esc_html( getpaid_format_date_value( $date_time, '&mdash;', true ) );
267
+                echo wp_kses_post( "<span title='$date_time'>$date</span>" );
268
+                break;
269
+
270
+            case 'payment_date':
271
+                if ( $invoice->is_paid() || $invoice->is_refunded() ) {
272
+                    $date_time = esc_attr( $invoice->get_completed_date() );
273
+                    $date      = esc_html( getpaid_format_date_value( $date_time, '&mdash;', true ) );
274
+                    echo wp_kses_post( "<span title='$date_time'>$date</span>" );
275
+
276
+                    if ( $_gateway = $invoice->get_gateway() ) {
277
+                        $gateway_label = wpinv_get_gateway_admin_label( $_gateway );
278
+
279
+                        if ( $transaction_url = $invoice->get_transaction_url() ) {
280
+                            $gateway_label = '<a href="' . esc_url( $transaction_url ) . '" target="_blank" title="' . esc_attr__( 'Open transaction link', 'invoicing' ) . '">' . $gateway_label . '</a>';
281
+                        }
282
+
283
+                        $gateway = '<small class="meta bsui"><span class="fs-xs text-muted fst-normal">' . wp_sprintf( _x( 'Via %s', 'Paid via gateway', 'invoicing' ), $gateway_label ) . '</span></small>';
284
+                    } else {
285
+                        $gateway = '';
286
+                    }
287
+
288
+                    $gateway = apply_filters( 'getpaid_admin_invoices_list_table_gateway', $gateway, $invoice );
289
+
290
+                    if ( $gateway ) {
291
+                        echo wp_kses_post( $gateway ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
292
+                    }
293
+                } else {
294
+                    echo '&mdash;';
295
+                }
296
+
297
+                break;
298
+
299
+            case 'amount':
300
+                $amount = $invoice->get_total();
301
+                $formated_amount = wp_kses_post( wpinv_price( $amount, $invoice->get_currency() ) );
302
+
303
+                if ( $invoice->is_refunded() ) {
304
+                    $refunded_amount = wpinv_price( 0, $invoice->get_currency() );
305
+                    echo wp_kses_post( "<del>$formated_amount</del>&nbsp;<ins>$refunded_amount</ins>" );
306
+                } else {
307
+
308
+                    $discount = $invoice->get_total_discount();
309
+
310
+                    if ( ! empty( $discount ) ) {
311
+                        $new_amount = wpinv_price( $amount + $discount, $invoice->get_currency() );
312
+                        echo wp_kses_post( "<del>$new_amount</del>&nbsp;<ins>$formated_amount</ins>" );
313
+                    } else {
314
+                        echo wp_kses_post( $formated_amount );
315
+                    }
316
+                }
317
+
318
+                break;
319
+
320
+            case 'status':
321
+                $status = esc_html( $invoice->get_status() );
322
+
323
+                // If it is paid, show the gateway title.
324
+                if ( $invoice->is_paid() ) {
325
+                    $gateway = esc_html( $invoice->get_gateway_title() );
326
+                    $gateway = wp_sprintf( esc_attr__( 'Paid via %s', 'invoicing' ), esc_html( $gateway ) );
327
+
328
+                    echo wp_kses_post( "<span class='bsui wpi-help-tip getpaid-invoice-statuss $status' title='$gateway'><span class='fs-base'>" . $invoice->get_status_label_html() . "</span></span>" );
329
+                } else {
330
+                    echo wp_kses_post( "<span class='bsui getpaid-invoice-statuss $status'><span class='fs-base'>" . $invoice->get_status_label_html() . "</span></span>" );
331
+                }
332
+
333
+                // If it is not paid, display the overdue and view status.
334
+                if ( ! $invoice->is_paid() && ! $invoice->is_refunded() ) {
335
+
336
+                    // Invoice view status.
337
+                    if ( wpinv_is_invoice_viewed( $invoice->get_id() ) ) {
338
+                        echo '&nbsp;&nbsp;<i class="fa fa-eye wpi-help-tip" title="' . esc_attr__( 'Viewed by Customer', 'invoicing' ) . '"></i>';
339
+                    } else {
340
+                        echo '&nbsp;&nbsp;<i class="fa fa-eye-slash wpi-help-tip" title="' . esc_attr__( 'Not Viewed by Customer', 'invoicing' ) . '"></i>';
341
+                    }
342
+
343
+                    // Display the overview status.
344
+                    if ( wpinv_get_option( 'overdue_active' ) ) {
345
+                        $due_date = $invoice->get_due_date();
346
+                        $fomatted = getpaid_format_date( $due_date );
347
+
348
+                        if ( ! empty( $fomatted ) ) {
349
+                            $date = wp_sprintf(
350
+                                // translators: %s is the due date.
351
+                                __( 'Due %s', 'invoicing' ),
352
+                                $fomatted
353
+                            );
354
+                            echo wp_kses_post( "<p class='description' style='color: #888;' title='$due_date'>$fomatted</p>" );
355
+                        }
356
+                    }
357
+                }
358
+
359
+                break;
360
+
361
+            case 'recurring':
362
+                if ( $invoice->is_recurring() ) {
363
+                    echo '<i class="fa fa-check" style="color:#43850a;"></i>';
364
+                } else {
365
+                    echo '<i class="fa fa-times" style="color:#616161;"></i>';
366
+                }
367
+                break;
368
+
369
+            case 'number':
370
+                $edit_link       = esc_url( get_edit_post_link( $invoice->get_id() ) );
371
+                $invoice_number  = esc_html( $invoice->get_number() );
372
+                $invoice_details = esc_attr__( 'View Invoice Details', 'invoicing' );
373
+
374
+                echo wp_kses_post( "<a href='$edit_link' title='$invoice_details'><strong>$invoice_number</strong></a>" );
375
+
376
+                do_action( 'getpaid_admin_table_invoice_number_column', $invoice );
377
+                break;
378
+
379
+            case 'customer':
380
+                $customer_name = $invoice->get_user_full_name();
381
+
382
+                if ( empty( $customer_name ) ) {
383
+                    $customer_name = $invoice->get_email();
384
+                }
385
+
386
+                if ( ! empty( $customer_name ) ) {
387
+                    $customer_details = esc_attr__( 'View Customer Details', 'invoicing' );
388
+                    $view_link        = esc_url( add_query_arg( 'user_id', $invoice->get_user_id(), admin_url( 'user-edit.php' ) ) );
389
+                    echo wp_kses_post( "<a href='$view_link' title='$customer_details'><span>$customer_name</span></a>" );
390
+                } else {
391
+                    echo '<div>&mdash;</div>';
392
+                }
393
+
394
+                break;
395
+
396
+        }
397
+
398
+    }
399
+
400
+    /**
401
+     * Displays invoice bulk actions.
402
+     */
403
+    public static function invoice_bulk_actions( $actions ) {
404
+        $actions['resend-invoice'] = __( 'Send to Customer', 'invoicing' );
405
+        return $actions;
406
+    }
407
+
408
+    /**
409
+     * Processes invoice bulk actions.
410
+     */
411
+    public static function handle_invoice_bulk_actions( $redirect_url, $action, $post_ids ) {
412
+
413
+        if ( 'resend-invoice' === $action ) {
414
+            foreach ( $post_ids as $post_id ) {
415
+                getpaid()->get( 'invoice_emails' )->user_invoice( new WPInv_Invoice( $post_id ), true );
416
+            }
417
+        }
418
+
419
+        return $redirect_url;
420
+
421
+    }
422
+
423
+    /**
424
+     * Returns an array of payment forms table columns.
425
+     */
426
+    public static function payment_form_columns( $columns ) {
427
+
428
+        $columns = array(
429
+            'cb'        => $columns['cb'],
430
+            'title'     => __( 'Name', 'invoicing' ),
431
+            'shortcode' => __( 'Shortcode', 'invoicing' ),
432
+            'earnings'  => __( 'Revenue', 'invoicing' ),
433
+            'refunds'   => __( 'Refunded', 'invoicing' ),
434
+            'items'     => __( 'Items', 'invoicing' ),
435
+            'date'      => __( 'Date', 'invoicing' ),
436
+        );
437
+
438
+        return apply_filters( 'wpi_payment_form_table_columns', $columns );
439
+
440
+    }
441
+
442
+    /**
443
+     * Displays payment form table columns.
444
+     */
445
+    public static function display_payment_form_columns( $column_name, $post_id ) {
446
+
447
+        // Retrieve the payment form.
448
+        $form = new GetPaid_Payment_Form( $post_id );
449
+
450
+        switch ( $column_name ) {
451
+
452
+            case 'earnings':
453
+                echo wp_kses_post( wpinv_price( $form->get_earned() ) );
454
+                break;
455
+
456
+            case 'refunds':
457
+                echo wp_kses_post( wpinv_price( $form->get_refunded() ) );
458
+                break;
459
+
460
+            case 'refunds':
461
+                echo wp_kses_post( wpinv_price( $form->get_refunded() ) );
462
+                break;
463
+
464
+            case 'shortcode':
465
+                if ( $form->is_default() ) {
466
+                    echo '&mdash;';
467
+                } else {
468
+                    echo '<input onClick="this.select()" type="text" value="[getpaid form=' . esc_attr( $form->get_id() ) . ']" style="width: 100%;" readonly/>';
469
+                }
470
+
471
+                break;
472
+
473
+            case 'items':
474
+                $items = $form->get_items();
475
+
476
+                if ( $form->is_default() || empty( $items ) ) {
477
+                    echo '&mdash;';
478
+                    return;
479
+                }
472 480
 
473
-			case 'items':
474
-				$items = $form->get_items();
475
-
476
-				if ( $form->is_default() || empty( $items ) ) {
477
-					echo '&mdash;';
478
-					return;
479
-				}
480
-
481
-				$_items = array();
482
-
483
-				foreach ( $items as $item ) {
484
-					$url = $item->get_edit_url();
485
-
486
-					if ( empty( $url ) ) {
487
-						$_items[] = esc_html( $item->get_name() );
488
-					} else {
489
-						$_items[] = sprintf(
490
-							'<a href="%s">%s</a>',
491
-							esc_url( $url ),
492
-							esc_html( $item->get_name() )
493
-						);
494
-					}
481
+                $_items = array();
482
+
483
+                foreach ( $items as $item ) {
484
+                    $url = $item->get_edit_url();
485
+
486
+                    if ( empty( $url ) ) {
487
+                        $_items[] = esc_html( $item->get_name() );
488
+                    } else {
489
+                        $_items[] = sprintf(
490
+                            '<a href="%s">%s</a>',
491
+                            esc_url( $url ),
492
+                            esc_html( $item->get_name() )
493
+                        );
494
+                    }
495 495
 }
496 496
 
497
-				echo wp_kses_post( implode( '<br>', $_items ) );
497
+                echo wp_kses_post( implode( '<br>', $_items ) );
498 498
 
499
-				break;
499
+                break;
500 500
 
501
-		}
501
+        }
502 502
 
503
-	}
503
+    }
504 504
 
505
-	/**
506
-	 * Filters post states.
507
-	 */
508
-	public static function filter_payment_form_state( $post_states, $post ) {
505
+    /**
506
+     * Filters post states.
507
+     */
508
+    public static function filter_payment_form_state( $post_states, $post ) {
509 509
 
510
-		if ( 'wpi_payment_form' === $post->post_type && wpinv_get_default_payment_form() === $post->ID ) {
511
-			$post_states['default_form'] = __( 'Default Payment Form', 'invoicing' );
512
-		}
510
+        if ( 'wpi_payment_form' === $post->post_type && wpinv_get_default_payment_form() === $post->ID ) {
511
+            $post_states['default_form'] = __( 'Default Payment Form', 'invoicing' );
512
+        }
513 513
 
514
-		return $post_states;
514
+        return $post_states;
515 515
 
516
-	}
516
+    }
517 517
 
518
-	/**
519
-	 * Returns an array of coupon table columns.
520
-	 */
521
-	public static function discount_columns( $columns ) {
518
+    /**
519
+     * Returns an array of coupon table columns.
520
+     */
521
+    public static function discount_columns( $columns ) {
522
+
523
+        $columns = array(
524
+            'cb'          => $columns['cb'],
525
+            'title'       => __( 'Name', 'invoicing' ),
526
+            'code'        => __( 'Code', 'invoicing' ),
527
+            'amount'      => __( 'Amount', 'invoicing' ),
528
+            'usage'       => __( 'Usage / Limit', 'invoicing' ),
529
+            'start_date'  => __( 'Start Date', 'invoicing' ),
530
+            'expiry_date' => __( 'Expiry Date', 'invoicing' ),
531
+        );
532
+
533
+        return apply_filters( 'wpi_discount_table_columns', $columns );
534
+    }
522 535
 
523
-		$columns = array(
524
-			'cb'          => $columns['cb'],
525
-			'title'       => __( 'Name', 'invoicing' ),
526
-			'code'        => __( 'Code', 'invoicing' ),
527
-			'amount'      => __( 'Amount', 'invoicing' ),
528
-			'usage'       => __( 'Usage / Limit', 'invoicing' ),
529
-			'start_date'  => __( 'Start Date', 'invoicing' ),
530
-			'expiry_date' => __( 'Expiry Date', 'invoicing' ),
531
-		);
536
+    /**
537
+     * Filters post states.
538
+     */
539
+    public static function filter_discount_state( $post_states, $post ) {
532 540
 
533
-		return apply_filters( 'wpi_discount_table_columns', $columns );
534
-	}
541
+        if ( 'wpi_discount' === $post->post_type ) {
535 542
 
536
-	/**
537
-	 * Filters post states.
538
-	 */
539
-	public static function filter_discount_state( $post_states, $post ) {
543
+            $discount = new WPInv_Discount( $post );
540 544
 
541
-		if ( 'wpi_discount' === $post->post_type ) {
545
+            $status = $discount->is_expired() ? 'expired' : $discount->get_status();
542 546
 
543
-			$discount = new WPInv_Discount( $post );
547
+            if ( 'publish' !== $status ) {
548
+                return array(
549
+                    'discount_status' => wpinv_discount_status( $status ),
550
+                );
551
+            }
544 552
 
545
-			$status = $discount->is_expired() ? 'expired' : $discount->get_status();
553
+            return array();
546 554
 
547
-			if ( 'publish' !== $status ) {
548
-				return array(
549
-					'discount_status' => wpinv_discount_status( $status ),
550
-				);
551
-			}
555
+        }
552 556
 
553
-			return array();
557
+        return $post_states;
554 558
 
555
-		}
559
+    }
556 560
 
557
-		return $post_states;
561
+    /**
562
+     * Returns an array of items table columns.
563
+     */
564
+    public static function item_columns( $columns ) {
565
+
566
+        $columns = array(
567
+            'cb'        => $columns['cb'],
568
+            'title'     => __( 'Name', 'invoicing' ),
569
+            'price'     => __( 'Price', 'invoicing' ),
570
+            'vat_rule'  => __( 'Tax Rule', 'invoicing' ),
571
+            'vat_class' => __( 'Tax Class', 'invoicing' ),
572
+            'type'      => __( 'Type', 'invoicing' ),
573
+            'shortcode' => __( 'Shortcode', 'invoicing' ),
574
+        );
575
+
576
+        if ( ! wpinv_use_taxes() ) {
577
+            unset( $columns['vat_rule'] );
578
+            unset( $columns['vat_class'] );
579
+        }
558 580
 
559
-	}
581
+        return apply_filters( 'wpi_item_table_columns', $columns );
582
+    }
560 583
 
561
-	/**
562
-	 * Returns an array of items table columns.
563
-	 */
564
-	public static function item_columns( $columns ) {
584
+    /**
585
+     * Returns an array of sortable items table columns.
586
+     */
587
+    public static function sortable_item_columns( $columns ) {
588
+
589
+        return array_merge(
590
+            $columns,
591
+            array(
592
+                'price'     => 'price',
593
+                'vat_rule'  => 'vat_rule',
594
+                'vat_class' => 'vat_class',
595
+                'type'      => 'type',
596
+            )
597
+        );
565 598
 
566
-		$columns = array(
567
-			'cb'        => $columns['cb'],
568
-			'title'     => __( 'Name', 'invoicing' ),
569
-			'price'     => __( 'Price', 'invoicing' ),
570
-			'vat_rule'  => __( 'Tax Rule', 'invoicing' ),
571
-			'vat_class' => __( 'Tax Class', 'invoicing' ),
572
-			'type'      => __( 'Type', 'invoicing' ),
573
-			'shortcode' => __( 'Shortcode', 'invoicing' ),
574
-		);
599
+    }
575 600
 
576
-		if ( ! wpinv_use_taxes() ) {
577
-			unset( $columns['vat_rule'] );
578
-			unset( $columns['vat_class'] );
579
-		}
601
+    /**
602
+     * Displays items table columns.
603
+     */
604
+    public static function display_item_columns( $column_name, $post_id ) {
605
+
606
+        $item = new WPInv_Item( $post_id );
607
+
608
+        switch ( $column_name ) {
609
+
610
+            case 'price':
611
+                if ( ! $item->is_recurring() ) {
612
+                    echo wp_kses_post( $item->get_the_price() );
613
+                    break;
614
+                }
615
+
616
+                $price = wp_sprintf(
617
+                    __( '%1$s / %2$s', 'invoicing' ),
618
+                    $item->get_the_price(),
619
+                    getpaid_get_subscription_period_label( $item->get_recurring_period(), $item->get_recurring_interval(), '' )
620
+                );
621
+
622
+                if ( $item->get_the_price() == $item->get_the_initial_price() ) {
623
+                    echo wp_kses_post( $price );
624
+                    break;
625
+                }
626
+
627
+                echo wp_kses_post( $item->get_the_initial_price() );
628
+
629
+                echo '<span class="meta">' . wp_sprintf( esc_html__( 'then %s', 'invoicing' ), wp_kses_post( $price ) ) . '</span>';
630
+                break;
631
+
632
+            case 'vat_rule':
633
+                echo wp_kses_post( getpaid_get_tax_rule_label( $item->get_vat_rule() ) );
634
+                break;
635
+
636
+            case 'vat_class':
637
+                echo wp_kses_post( getpaid_get_tax_class_label( $item->get_vat_class() ) );
638
+                break;
639
+
640
+            case 'shortcode':
641
+                if ( $item->is_type( array( '', 'fee', 'custom' ) ) ) {
642
+                    echo '<input onClick="this.select()" type="text" value="[getpaid item=' . esc_attr( $item->get_id() ) . ' button=\'Buy Now\']" style="width: 100%;" readonly/>';
643
+                } else {
644
+                    echo '&mdash;';
645
+                }
646
+
647
+                break;
648
+
649
+            case 'type':
650
+                echo wp_kses_post( wpinv_item_type( $item->get_id() ) . '<span class="meta">' . $item->get_custom_singular_name() . '</span>' );
651
+                break;
652
+
653
+        }
654
+
655
+    }
656
+
657
+    /**
658
+     * Lets users filter items using taxes.
659
+     */
660
+    public static function add_item_filters( $post_type ) {
661
+
662
+        // Abort if we're not dealing with items.
663
+        if ( 'wpi_item' !== $post_type ) {
664
+            return;
665
+        }
666
+
667
+        // Filter by vat rules.
668
+        if ( wpinv_use_taxes() ) {
669
+
670
+            // Sanitize selected vat rule.
671
+            $vat_rule   = '';
672
+            $vat_rules  = getpaid_get_tax_rules();
673
+            if ( isset( $_GET['vat_rule'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
674
+                $vat_rule   = sanitize_text_field( $_GET['vat_rule'] ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended
675
+            }
676
+
677
+            // Filter by VAT rule.
678
+            wpinv_html_select(
679
+                array(
680
+                    'options'          => array_merge(
681
+                        array(
682
+                            '' => __( 'All Tax Rules', 'invoicing' ),
683
+                        ),
684
+                        $vat_rules
685
+                    ),
686
+                    'name'             => 'vat_rule',
687
+                    'id'               => 'vat_rule',
688
+                    'selected'         => in_array( $vat_rule, array_keys( $vat_rules ), true ) ? $vat_rule : '',
689
+                    'show_option_all'  => false,
690
+                    'show_option_none' => false,
691
+                )
692
+            );
693
+
694
+            // Filter by VAT class.
695
+
696
+            // Sanitize selected vat rule.
697
+            $vat_class   = '';
698
+            $vat_classes = getpaid_get_tax_classes();
699
+            if ( isset( $_GET['vat_class'] ) ) {  // phpcs:ignore WordPress.Security.NonceVerification.Recommended
700
+                $vat_class   = sanitize_text_field( $_GET['vat_class'] );  // phpcs:ignore WordPress.Security.NonceVerification.Recommended
701
+            }
702
+
703
+            wpinv_html_select(
704
+                array(
705
+                    'options'          => array_merge(
706
+                        array(
707
+                            '' => __( 'All Tax Classes', 'invoicing' ),
708
+                        ),
709
+                        $vat_classes
710
+                    ),
711
+                    'name'             => 'vat_class',
712
+                    'id'               => 'vat_class',
713
+                    'selected'         => in_array( $vat_class, array_keys( $vat_classes ), true ) ? $vat_class : '',
714
+                    'show_option_all'  => false,
715
+                    'show_option_none' => false,
716
+                )
717
+            );
718
+
719
+        }
720
+
721
+        // Filter by item type.
722
+        $type   = '';
723
+        if ( isset( $_GET['type'] ) ) {  // phpcs:ignore WordPress.Security.NonceVerification.Recommended
724
+            $type   = sanitize_text_field( $_GET['type'] );  // phpcs:ignore WordPress.Security.NonceVerification.Recommended
725
+        }
726
+
727
+        wpinv_html_select(
728
+            array(
729
+                'options'          => array_merge(
730
+                    array(
731
+                        '' => __( 'All item types', 'invoicing' ),
732
+                    ),
733
+                    wpinv_get_item_types()
734
+                ),
735
+                'name'             => 'type',
736
+                'id'               => 'type',
737
+                'selected'         => in_array( $type, wpinv_item_types(), true ) ? $type : '',
738
+                'show_option_all'  => false,
739
+                'show_option_none' => false,
740
+            )
741
+        );
742
+
743
+    }
580 744
 
581
-		return apply_filters( 'wpi_item_table_columns', $columns );
582
-	}
745
+    /**
746
+     * Filters the item query.
747
+     */
748
+    public static function filter_item_query( $query ) {
583 749
 
584
-	/**
585
-	 * Returns an array of sortable items table columns.
586
-	 */
587
-	public static function sortable_item_columns( $columns ) {
588
-
589
-		return array_merge(
590
-			$columns,
591
-			array(
592
-				'price'     => 'price',
593
-				'vat_rule'  => 'vat_rule',
594
-				'vat_class' => 'vat_class',
595
-				'type'      => 'type',
596
-			)
597
-		);
598
-
599
-	}
600
-
601
-	/**
602
-	 * Displays items table columns.
603
-	 */
604
-	public static function display_item_columns( $column_name, $post_id ) {
605
-
606
-		$item = new WPInv_Item( $post_id );
607
-
608
-		switch ( $column_name ) {
609
-
610
-			case 'price':
611
-				if ( ! $item->is_recurring() ) {
612
-					echo wp_kses_post( $item->get_the_price() );
613
-					break;
614
-				}
615
-
616
-				$price = wp_sprintf(
617
-					__( '%1$s / %2$s', 'invoicing' ),
618
-					$item->get_the_price(),
619
-					getpaid_get_subscription_period_label( $item->get_recurring_period(), $item->get_recurring_interval(), '' )
620
-				);
621
-
622
-				if ( $item->get_the_price() == $item->get_the_initial_price() ) {
623
-					echo wp_kses_post( $price );
624
-					break;
625
-				}
626
-
627
-				echo wp_kses_post( $item->get_the_initial_price() );
628
-
629
-				echo '<span class="meta">' . wp_sprintf( esc_html__( 'then %s', 'invoicing' ), wp_kses_post( $price ) ) . '</span>';
630
-				break;
631
-
632
-			case 'vat_rule':
633
-				echo wp_kses_post( getpaid_get_tax_rule_label( $item->get_vat_rule() ) );
634
-				break;
635
-
636
-			case 'vat_class':
637
-				echo wp_kses_post( getpaid_get_tax_class_label( $item->get_vat_class() ) );
638
-				break;
639
-
640
-			case 'shortcode':
641
-				if ( $item->is_type( array( '', 'fee', 'custom' ) ) ) {
642
-					echo '<input onClick="this.select()" type="text" value="[getpaid item=' . esc_attr( $item->get_id() ) . ' button=\'Buy Now\']" style="width: 100%;" readonly/>';
643
-				} else {
644
-					echo '&mdash;';
645
-				}
646
-
647
-				break;
648
-
649
-			case 'type':
650
-				echo wp_kses_post( wpinv_item_type( $item->get_id() ) . '<span class="meta">' . $item->get_custom_singular_name() . '</span>' );
651
-				break;
652
-
653
-		}
654
-
655
-	}
656
-
657
-	/**
658
-	 * Lets users filter items using taxes.
659
-	 */
660
-	public static function add_item_filters( $post_type ) {
661
-
662
-		// Abort if we're not dealing with items.
663
-		if ( 'wpi_item' !== $post_type ) {
664
-			return;
665
-		}
666
-
667
-		// Filter by vat rules.
668
-		if ( wpinv_use_taxes() ) {
669
-
670
-			// Sanitize selected vat rule.
671
-			$vat_rule   = '';
672
-			$vat_rules  = getpaid_get_tax_rules();
673
-			if ( isset( $_GET['vat_rule'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
674
-				$vat_rule   = sanitize_text_field( $_GET['vat_rule'] ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended
675
-			}
676
-
677
-			// Filter by VAT rule.
678
-			wpinv_html_select(
679
-				array(
680
-					'options'          => array_merge(
681
-						array(
682
-							'' => __( 'All Tax Rules', 'invoicing' ),
683
-						),
684
-						$vat_rules
685
-					),
686
-					'name'             => 'vat_rule',
687
-					'id'               => 'vat_rule',
688
-					'selected'         => in_array( $vat_rule, array_keys( $vat_rules ), true ) ? $vat_rule : '',
689
-					'show_option_all'  => false,
690
-					'show_option_none' => false,
691
-				)
692
-			);
693
-
694
-			// Filter by VAT class.
695
-
696
-			// Sanitize selected vat rule.
697
-			$vat_class   = '';
698
-			$vat_classes = getpaid_get_tax_classes();
699
-			if ( isset( $_GET['vat_class'] ) ) {  // phpcs:ignore WordPress.Security.NonceVerification.Recommended
700
-				$vat_class   = sanitize_text_field( $_GET['vat_class'] );  // phpcs:ignore WordPress.Security.NonceVerification.Recommended
701
-			}
702
-
703
-			wpinv_html_select(
704
-				array(
705
-					'options'          => array_merge(
706
-						array(
707
-							'' => __( 'All Tax Classes', 'invoicing' ),
708
-						),
709
-						$vat_classes
710
-					),
711
-					'name'             => 'vat_class',
712
-					'id'               => 'vat_class',
713
-					'selected'         => in_array( $vat_class, array_keys( $vat_classes ), true ) ? $vat_class : '',
714
-					'show_option_all'  => false,
715
-					'show_option_none' => false,
716
-				)
717
-			);
718
-
719
-		}
720
-
721
-		// Filter by item type.
722
-		$type   = '';
723
-		if ( isset( $_GET['type'] ) ) {  // phpcs:ignore WordPress.Security.NonceVerification.Recommended
724
-			$type   = sanitize_text_field( $_GET['type'] );  // phpcs:ignore WordPress.Security.NonceVerification.Recommended
725
-		}
726
-
727
-		wpinv_html_select(
728
-			array(
729
-				'options'          => array_merge(
730
-					array(
731
-						'' => __( 'All item types', 'invoicing' ),
732
-					),
733
-					wpinv_get_item_types()
734
-				),
735
-				'name'             => 'type',
736
-				'id'               => 'type',
737
-				'selected'         => in_array( $type, wpinv_item_types(), true ) ? $type : '',
738
-				'show_option_all'  => false,
739
-				'show_option_none' => false,
740
-			)
741
-		);
742
-
743
-	}
744
-
745
-	/**
746
-	 * Filters the item query.
747
-	 */
748
-	public static function filter_item_query( $query ) {
749
-
750
-		// modify the query only if it admin and main query.
751
-		if ( ! ( is_admin() && $query->is_main_query() ) ) {
752
-			return $query;
753
-		}
754
-
755
-		// we want to modify the query for our items.
756
-		if ( empty( $query->query['post_type'] ) || 'wpi_item' !== $query->query['post_type'] ) {
757
-			return $query;
758
-		}
759
-
760
-		if ( empty( $query->query_vars['meta_query'] ) ) {
761
-			$query->query_vars['meta_query'] = array();
762
-		}
763
-
764
-		// Filter vat rule type
750
+        // modify the query only if it admin and main query.
751
+        if ( ! ( is_admin() && $query->is_main_query() ) ) {
752
+            return $query;
753
+        }
754
+
755
+        // we want to modify the query for our items.
756
+        if ( empty( $query->query['post_type'] ) || 'wpi_item' !== $query->query['post_type'] ) {
757
+            return $query;
758
+        }
759
+
760
+        if ( empty( $query->query_vars['meta_query'] ) ) {
761
+            $query->query_vars['meta_query'] = array();
762
+        }
763
+
764
+        // Filter vat rule type
765 765
         if ( ! empty( $_GET['vat_rule'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
766 766
             $query->query_vars['meta_query'][] = array(
767 767
                 'key'     => '_wpinv_vat_rule',
@@ -786,146 +786,146 @@  discard block
 block discarded – undo
786 786
                 'value'   => sanitize_text_field( $_GET['type'] ), // phpcs:ignore WordPress.Security.NonceVerification.Recommended
787 787
                 'compare' => '=',
788 788
             );
789
-		}
790
-
791
-		$query->query_vars['meta_query'][] = array(
792
-			'key'     => '_wpinv_one_time',
793
-			'compare' => 'NOT EXISTS',
794
-		);
795
-	}
796
-
797
-	/**
798
-	 * Reorders items.
799
-	 */
800
-	public static function reorder_items( $vars ) {
801
-		global $typenow;
802
-
803
-		if ( 'wpi_item' !== $typenow || empty( $vars['orderby'] ) ) {
804
-			return $vars;
805
-		}
806
-
807
-		// By item type.
808
-		if ( 'type' === $vars['orderby'] ) {
809
-			return array_merge(
810
-				$vars,
811
-				array(
812
-					'meta_key' => '_wpinv_type',
813
-					'orderby'  => 'meta_value',
814
-				)
815
-			);
816
-		}
817
-
818
-		// By vat class.
819
-		if ( 'vat_class' === $vars['orderby'] ) {
820
-			return array_merge(
821
-				$vars,
822
-				array(
823
-					'meta_key' => '_wpinv_vat_class',
824
-					'orderby'  => 'meta_value',
825
-				)
826
-			);
827
-		}
828
-
829
-		// By vat rule.
830
-		if ( 'vat_rule' === $vars['orderby'] ) {
831
-			return array_merge(
832
-				$vars,
833
-				array(
834
-					'meta_key' => '_wpinv_vat_rule',
835
-					'orderby'  => 'meta_value',
836
-				)
837
-			);
838
-		}
839
-
840
-		// By price.
841
-		if ( 'price' === $vars['orderby'] ) {
842
-			return array_merge(
843
-				$vars,
844
-				array(
845
-					'meta_key' => '_wpinv_price',
846
-					'orderby'  => 'meta_value_num',
847
-				)
848
-			);
849
-		}
850
-
851
-		return $vars;
852
-
853
-	}
854
-
855
-	/**
856
-	 * Fired when deleting a post.
857
-	 */
858
-	public static function delete_post( $post_id ) {
859
-
860
-		switch ( get_post_type( $post_id ) ) {
861
-
862
-			case 'wpi_item':
863
-				do_action( 'getpaid_before_delete_item', new WPInv_Item( $post_id ) );
864
-				break;
865
-
866
-			case 'wpi_payment_form':
867
-				do_action( 'getpaid_before_delete_payment_form', new GetPaid_Payment_Form( $post_id ) );
868
-				break;
869
-
870
-			case 'wpi_discount':
871
-				do_action( 'getpaid_before_delete_discount', new WPInv_Discount( $post_id ) );
872
-				break;
873
-
874
-			case 'wpi_invoice':
875
-				$invoice = new WPInv_Invoice( $post_id );
876
-				do_action( 'getpaid_before_delete_invoice', $invoice );
877
-				$invoice->get_data_store()->delete_items( $invoice );
878
-				$invoice->get_data_store()->delete_special_fields( $invoice );
879
-				break;
880
-		}
881
-	}
882
-
883
-	/**
884
-	 * Add a post display state for special GetPaid pages in the page list table.
885
-	 *
886
-	 * @param array   $post_states An array of post display states.
887
-	 * @param WP_Post $post        The current post object.
888
-	 *
889
-	 * @return mixed
890
-	 */
891
-	public static function add_display_post_states( $post_states, $post ) {
892
-		if ( wpinv_get_option( 'success_page', 0 ) == $post->ID ) {
893
-			$post_states['getpaid_success_page'] = __( 'GetPaid Receipt Page', 'invoicing' );
894
-		}
895
-
896
-		foreach ( getpaid_get_invoice_post_types() as $post_type => $label ) {
897
-			$_post_type = str_replace( "wpi_", "", $post_type );
898
-
899
-			if ( wpinv_get_option( "{$post_type}_history_page", 0 ) == $post->ID ) {
900
-				$post_states[ "getpaid_{$post_type}_history_page" ] = wp_sprintf(
901
-					__( 'GetPaid %s History Page', 'invoicing' ),
902
-					$label
903
-				);
904
-			} else if ( wpinv_get_option( "{$_post_type}_history_page", 0 ) == $post->ID ) {
905
-				$post_states[ "getpaid_{$_post_type}_history_page" ] = wp_sprintf(
906
-					__( 'GetPaid %s History Page', 'invoicing' ),
907
-					$label
908
-				);
909
-			}
910
-		}
911
-
912
-		if ( wpinv_get_option( 'invoice_subscription_page', 0 ) == $post->ID ) {
913
-			$post_states['getpaid_invoice_subscription_page'] = __( 'GetPaid Subscriptions Page', 'invoicing' );
914
-		}
915
-
916
-		if ( wpinv_get_option( 'checkout_page', 0 ) == $post->ID ) {
917
-			$post_states['getpaid_checkout_page'] = __( 'GetPaid Checkout Page', 'invoicing' );
918
-		}
919
-
920
-		if ( wpinv_get_option( 'checkout_page', 0 ) == $post->ID ) {
921
-			$post_states['getpaid_checkout_page'] = __( 'GetPaid Checkout Page', 'invoicing' );
922
-		}
923
-
924
-		if ( wpinv_get_option( 'failure_page', 0 ) == $post->ID ) {
925
-			$post_states['getpaid_failure_page'] = __( 'GetPaid Transaction Failed Page', 'invoicing' );
926
-		}
927
-
928
-		return $post_states;
789
+        }
790
+
791
+        $query->query_vars['meta_query'][] = array(
792
+            'key'     => '_wpinv_one_time',
793
+            'compare' => 'NOT EXISTS',
794
+        );
795
+    }
796
+
797
+    /**
798
+     * Reorders items.
799
+     */
800
+    public static function reorder_items( $vars ) {
801
+        global $typenow;
802
+
803
+        if ( 'wpi_item' !== $typenow || empty( $vars['orderby'] ) ) {
804
+            return $vars;
805
+        }
806
+
807
+        // By item type.
808
+        if ( 'type' === $vars['orderby'] ) {
809
+            return array_merge(
810
+                $vars,
811
+                array(
812
+                    'meta_key' => '_wpinv_type',
813
+                    'orderby'  => 'meta_value',
814
+                )
815
+            );
816
+        }
817
+
818
+        // By vat class.
819
+        if ( 'vat_class' === $vars['orderby'] ) {
820
+            return array_merge(
821
+                $vars,
822
+                array(
823
+                    'meta_key' => '_wpinv_vat_class',
824
+                    'orderby'  => 'meta_value',
825
+                )
826
+            );
827
+        }
828
+
829
+        // By vat rule.
830
+        if ( 'vat_rule' === $vars['orderby'] ) {
831
+            return array_merge(
832
+                $vars,
833
+                array(
834
+                    'meta_key' => '_wpinv_vat_rule',
835
+                    'orderby'  => 'meta_value',
836
+                )
837
+            );
838
+        }
839
+
840
+        // By price.
841
+        if ( 'price' === $vars['orderby'] ) {
842
+            return array_merge(
843
+                $vars,
844
+                array(
845
+                    'meta_key' => '_wpinv_price',
846
+                    'orderby'  => 'meta_value_num',
847
+                )
848
+            );
849
+        }
850
+
851
+        return $vars;
852
+
853
+    }
854
+
855
+    /**
856
+     * Fired when deleting a post.
857
+     */
858
+    public static function delete_post( $post_id ) {
859
+
860
+        switch ( get_post_type( $post_id ) ) {
861
+
862
+            case 'wpi_item':
863
+                do_action( 'getpaid_before_delete_item', new WPInv_Item( $post_id ) );
864
+                break;
865
+
866
+            case 'wpi_payment_form':
867
+                do_action( 'getpaid_before_delete_payment_form', new GetPaid_Payment_Form( $post_id ) );
868
+                break;
869
+
870
+            case 'wpi_discount':
871
+                do_action( 'getpaid_before_delete_discount', new WPInv_Discount( $post_id ) );
872
+                break;
873
+
874
+            case 'wpi_invoice':
875
+                $invoice = new WPInv_Invoice( $post_id );
876
+                do_action( 'getpaid_before_delete_invoice', $invoice );
877
+                $invoice->get_data_store()->delete_items( $invoice );
878
+                $invoice->get_data_store()->delete_special_fields( $invoice );
879
+                break;
880
+        }
881
+    }
882
+
883
+    /**
884
+     * Add a post display state for special GetPaid pages in the page list table.
885
+     *
886
+     * @param array   $post_states An array of post display states.
887
+     * @param WP_Post $post        The current post object.
888
+     *
889
+     * @return mixed
890
+     */
891
+    public static function add_display_post_states( $post_states, $post ) {
892
+        if ( wpinv_get_option( 'success_page', 0 ) == $post->ID ) {
893
+            $post_states['getpaid_success_page'] = __( 'GetPaid Receipt Page', 'invoicing' );
894
+        }
895
+
896
+        foreach ( getpaid_get_invoice_post_types() as $post_type => $label ) {
897
+            $_post_type = str_replace( "wpi_", "", $post_type );
898
+
899
+            if ( wpinv_get_option( "{$post_type}_history_page", 0 ) == $post->ID ) {
900
+                $post_states[ "getpaid_{$post_type}_history_page" ] = wp_sprintf(
901
+                    __( 'GetPaid %s History Page', 'invoicing' ),
902
+                    $label
903
+                );
904
+            } else if ( wpinv_get_option( "{$_post_type}_history_page", 0 ) == $post->ID ) {
905
+                $post_states[ "getpaid_{$_post_type}_history_page" ] = wp_sprintf(
906
+                    __( 'GetPaid %s History Page', 'invoicing' ),
907
+                    $label
908
+                );
909
+            }
910
+        }
911
+
912
+        if ( wpinv_get_option( 'invoice_subscription_page', 0 ) == $post->ID ) {
913
+            $post_states['getpaid_invoice_subscription_page'] = __( 'GetPaid Subscriptions Page', 'invoicing' );
914
+        }
915
+
916
+        if ( wpinv_get_option( 'checkout_page', 0 ) == $post->ID ) {
917
+            $post_states['getpaid_checkout_page'] = __( 'GetPaid Checkout Page', 'invoicing' );
918
+        }
919
+
920
+        if ( wpinv_get_option( 'checkout_page', 0 ) == $post->ID ) {
921
+            $post_states['getpaid_checkout_page'] = __( 'GetPaid Checkout Page', 'invoicing' );
922
+        }
923
+
924
+        if ( wpinv_get_option( 'failure_page', 0 ) == $post->ID ) {
925
+            $post_states['getpaid_failure_page'] = __( 'GetPaid Transaction Failed Page', 'invoicing' );
926
+        }
927
+
928
+        return $post_states;
929 929
     }
930 930
 
931 931
 }
Please login to merge, or discard this patch.
includes/wpinv-template-functions.php 1 patch
Indentation   +215 added lines, -215 removed lines patch added patch discarded remove patch
@@ -140,7 +140,7 @@  discard block
 block discarded – undo
140 140
  * @param string $default_path The root path to the default template. Defaults to invoicing/templates
141 141
  */
142 142
 function wpinv_get_template_html( $template_name, $args = array(), $template_path = '', $default_path = '' ) {
143
-	return getpaid_template()->get_template( $template_name, $args, $template_path, $default_path );
143
+    return getpaid_template()->get_template( $template_name, $args, $template_path, $default_path );
144 144
 }
145 145
 
146 146
 /**
@@ -158,7 +158,7 @@  discard block
 block discarded – undo
158 158
  * @return string
159 159
  */
160 160
 function wpinv_get_theme_template_dir_name() {
161
-	return trailingslashit( apply_filters( 'wpinv_templates_dir', 'invoicing' ) );
161
+    return trailingslashit( apply_filters( 'wpinv_templates_dir', 'invoicing' ) );
162 162
 }
163 163
 
164 164
 /**
@@ -175,125 +175,125 @@  discard block
 block discarded – undo
175 175
 }
176 176
 
177 177
 function wpinv_get_template_part( $slug, $name = null, $load = true ) {
178
-	do_action( 'get_template_part_' . $slug, $slug, $name );
178
+    do_action( 'get_template_part_' . $slug, $slug, $name );
179 179
 
180
-	// Setup possible parts
181
-	$templates = array();
182
-	if ( isset( $name ) ) {
183
-		$templates[] = $slug . '-' . $name . '.php';
180
+    // Setup possible parts
181
+    $templates = array();
182
+    if ( isset( $name ) ) {
183
+        $templates[] = $slug . '-' . $name . '.php';
184 184
     }
185
-	$templates[] = $slug . '.php';
185
+    $templates[] = $slug . '.php';
186 186
 
187
-	// Allow template parts to be filtered
188
-	$templates = apply_filters( 'wpinv_get_template_part', $templates, $slug, $name );
187
+    // Allow template parts to be filtered
188
+    $templates = apply_filters( 'wpinv_get_template_part', $templates, $slug, $name );
189 189
 
190
-	// Return the part that is found
191
-	return wpinv_locate_tmpl( $templates, $load, false );
190
+    // Return the part that is found
191
+    return wpinv_locate_tmpl( $templates, $load, false );
192 192
 }
193 193
 
194 194
 function wpinv_locate_tmpl( $template_names, $load = false, $require_once = true ) {
195
-	// No file found yet
196
-	$located = false;
195
+    // No file found yet
196
+    $located = false;
197 197
 
198
-	// Try to find a template file
199
-	foreach ( (array)$template_names as $template_name ) {
198
+    // Try to find a template file
199
+    foreach ( (array)$template_names as $template_name ) {
200 200
 
201
-		// Continue if template is empty
202
-		if ( empty( $template_name ) ) {
203
-			continue;
201
+        // Continue if template is empty
202
+        if ( empty( $template_name ) ) {
203
+            continue;
204 204
         }
205 205
 
206
-		// Trim off any slashes from the template name
207
-		$template_name = ltrim( $template_name, '/' );
206
+        // Trim off any slashes from the template name
207
+        $template_name = ltrim( $template_name, '/' );
208 208
 
209
-		// try locating this template file by looping through the template paths
210
-		foreach ( wpinv_get_theme_template_paths() as $template_path ) {
209
+        // try locating this template file by looping through the template paths
210
+        foreach ( wpinv_get_theme_template_paths() as $template_path ) {
211 211
 
212
-			if ( file_exists( $template_path . $template_name ) ) {
213
-				$located = $template_path . $template_name;
214
-				break;
215
-			}
216
-		}
212
+            if ( file_exists( $template_path . $template_name ) ) {
213
+                $located = $template_path . $template_name;
214
+                break;
215
+            }
216
+        }
217 217
 
218
-		if ( ! empty( $located ) ) {
219
-			break;
220
-		}
221
-	}
218
+        if ( ! empty( $located ) ) {
219
+            break;
220
+        }
221
+    }
222 222
 
223
-	if ( ( true == $load ) && ! empty( $located ) ) {
224
-		load_template( $located, $require_once );
223
+    if ( ( true == $load ) && ! empty( $located ) ) {
224
+        load_template( $located, $require_once );
225 225
     }
226 226
 
227
-	return $located;
227
+    return $located;
228 228
 }
229 229
 
230 230
 function wpinv_get_theme_template_paths() {
231
-	$template_dir = wpinv_get_theme_template_dir_name();
231
+    $template_dir = wpinv_get_theme_template_dir_name();
232 232
 
233
-	$file_paths = array(
234
-		1   => trailingslashit( get_stylesheet_directory() ) . $template_dir,
235
-		10  => trailingslashit( get_template_directory() ) . $template_dir,
236
-		100 => wpinv_get_templates_dir(),
237
-	);
233
+    $file_paths = array(
234
+        1   => trailingslashit( get_stylesheet_directory() ) . $template_dir,
235
+        10  => trailingslashit( get_template_directory() ) . $template_dir,
236
+        100 => wpinv_get_templates_dir(),
237
+    );
238 238
 
239
-	$file_paths = apply_filters( 'wpinv_template_paths', $file_paths );
239
+    $file_paths = apply_filters( 'wpinv_template_paths', $file_paths );
240 240
 
241
-	// sort the file paths based on priority
242
-	ksort( $file_paths, SORT_NUMERIC );
241
+    // sort the file paths based on priority
242
+    ksort( $file_paths, SORT_NUMERIC );
243 243
 
244
-	return array_map( 'trailingslashit', $file_paths );
244
+    return array_map( 'trailingslashit', $file_paths );
245 245
 }
246 246
 
247 247
 function wpinv_checkout_meta_tags() {
248 248
 
249
-	$pages   = array();
250
-	$pages[] = wpinv_get_option( 'success_page' );
251
-	$pages[] = wpinv_get_option( 'failure_page' );
252
-	$pages[] = wpinv_get_option( 'invoice_history_page' );
253
-	$pages[] = wpinv_get_option( 'invoice_subscription_page' );
249
+    $pages   = array();
250
+    $pages[] = wpinv_get_option( 'success_page' );
251
+    $pages[] = wpinv_get_option( 'failure_page' );
252
+    $pages[] = wpinv_get_option( 'invoice_history_page' );
253
+    $pages[] = wpinv_get_option( 'invoice_subscription_page' );
254 254
 
255
-	if ( ! wpinv_is_checkout() && ! is_page( $pages ) ) {
256
-		return;
257
-	}
255
+    if ( ! wpinv_is_checkout() && ! is_page( $pages ) ) {
256
+        return;
257
+    }
258 258
 
259
-	echo '<meta name="robots" content="noindex,nofollow" />' . "\n";
259
+    echo '<meta name="robots" content="noindex,nofollow" />' . "\n";
260 260
 }
261 261
 add_action( 'wp_head', 'wpinv_checkout_meta_tags' );
262 262
 
263 263
 function wpinv_add_body_classes( $class ) {
264
-	$classes = (array)$class;
264
+    $classes = (array)$class;
265 265
 
266
-	if ( wpinv_is_checkout() ) {
267
-		$classes[] = 'wpinv-checkout';
268
-		$classes[] = 'wpinv-page';
269
-	}
266
+    if ( wpinv_is_checkout() ) {
267
+        $classes[] = 'wpinv-checkout';
268
+        $classes[] = 'wpinv-page';
269
+    }
270 270
 
271
-	if ( wpinv_is_success_page() ) {
272
-		$classes[] = 'wpinv-success';
273
-		$classes[] = 'wpinv-page';
274
-	}
271
+    if ( wpinv_is_success_page() ) {
272
+        $classes[] = 'wpinv-success';
273
+        $classes[] = 'wpinv-page';
274
+    }
275 275
 
276
-	if ( wpinv_is_failed_transaction_page() ) {
277
-		$classes[] = 'wpinv-failed-transaction';
278
-		$classes[] = 'wpinv-page';
279
-	}
276
+    if ( wpinv_is_failed_transaction_page() ) {
277
+        $classes[] = 'wpinv-failed-transaction';
278
+        $classes[] = 'wpinv-page';
279
+    }
280 280
 
281
-	if ( wpinv_is_invoice_history_page() ) {
282
-		$classes[] = 'wpinv-history';
283
-		$classes[] = 'wpinv-page';
284
-	}
281
+    if ( wpinv_is_invoice_history_page() ) {
282
+        $classes[] = 'wpinv-history';
283
+        $classes[] = 'wpinv-page';
284
+    }
285 285
 
286
-	if ( wpinv_is_subscriptions_history_page() ) {
287
-		$classes[] = 'wpinv-subscription';
288
-		$classes[] = 'wpinv-page';
289
-	}
286
+    if ( wpinv_is_subscriptions_history_page() ) {
287
+        $classes[] = 'wpinv-subscription';
288
+        $classes[] = 'wpinv-page';
289
+    }
290 290
 
291
-	if ( wpinv_is_test_mode() ) {
292
-		$classes[] = 'wpinv-test-mode';
293
-		$classes[] = 'wpinv-page';
294
-	}
291
+    if ( wpinv_is_test_mode() ) {
292
+        $classes[] = 'wpinv-test-mode';
293
+        $classes[] = 'wpinv-page';
294
+    }
295 295
 
296
-	return array_unique( $classes );
296
+    return array_unique( $classes );
297 297
 }
298 298
 add_filter( 'body_class', 'wpinv_add_body_classes' );
299 299
 
@@ -467,16 +467,16 @@  discard block
 block discarded – undo
467 467
 
468 468
     wpinv_html_select(
469 469
         array(
470
-			'name'             => $args['name'],
471
-			'selected'         => $args['selected'],
472
-			'id'               => $args['id'],
473
-			'class'            => $args['class'],
474
-			'options'          => $options,
475
-			'multiple'         => $args['multiple'],
476
-			'placeholder'      => $args['placeholder'],
477
-			'show_option_all'  => $args['show_option_all'],
478
-			'show_option_none' => $args['show_option_none'],
479
-			'data'             => $args['data'],
470
+            'name'             => $args['name'],
471
+            'selected'         => $args['selected'],
472
+            'id'               => $args['id'],
473
+            'class'            => $args['class'],
474
+            'options'          => $options,
475
+            'multiple'         => $args['multiple'],
476
+            'placeholder'      => $args['placeholder'],
477
+            'show_option_all'  => $args['show_option_all'],
478
+            'show_option_none' => $args['show_option_none'],
479
+            'data'             => $args['data'],
480 480
         )
481 481
     );
482 482
 
@@ -776,21 +776,21 @@  discard block
 block discarded – undo
776 776
 
777 777
     $formatted_address = str_ireplace( array_keys( $replacements ), $replacements, $format );
778 778
 
779
-	// Remove unavailable tags.
779
+    // Remove unavailable tags.
780 780
     $formatted_address = preg_replace( '/\{\{\w+\}\}/', '', $formatted_address );
781 781
 
782 782
     // Clean up white space.
783
-	$formatted_address = preg_replace( '/  +/', ' ', trim( $formatted_address ) );
783
+    $formatted_address = preg_replace( '/  +/', ' ', trim( $formatted_address ) );
784 784
     $formatted_address = preg_replace( '/\n\n+/', "\n", $formatted_address );
785 785
 
786 786
     // Break newlines apart and remove empty lines/trim commas and white space.
787
-	$formatted_address = array_filter( array_map( 'wpinv_trim_formatted_address_line', explode( "\n", $formatted_address ) ) );
787
+    $formatted_address = array_filter( array_map( 'wpinv_trim_formatted_address_line', explode( "\n", $formatted_address ) ) );
788 788
 
789 789
     // Add html breaks.
790
-	$formatted_address = implode( $separator, $formatted_address );
790
+    $formatted_address = implode( $separator, $formatted_address );
791 791
 
792
-	// We're done!
793
-	return $formatted_address;
792
+    // We're done!
793
+    return $formatted_address;
794 794
 
795 795
 }
796 796
 
@@ -836,7 +836,7 @@  discard block
 block discarded – undo
836 836
 function getpaid_display_invoice_subscriptions( $invoice ) {
837 837
 
838 838
     // Subscriptions.
839
-	$subscriptions = getpaid_get_invoice_subscriptions( $invoice );
839
+    $subscriptions = getpaid_get_invoice_subscriptions( $invoice );
840 840
 
841 841
     if ( empty( $subscriptions ) || ! $invoice->is_recurring() ) {
842 842
         return;
@@ -1052,7 +1052,7 @@  discard block
 block discarded – undo
1052 1052
 }
1053 1053
 
1054 1054
 function wpinv_empty_cart_message() {
1055
-	return apply_filters( 'wpinv_empty_cart_message', '<span class="wpinv_empty_cart">' . __( 'Your cart is empty.', 'invoicing' ) . '</span>' );
1055
+    return apply_filters( 'wpinv_empty_cart_message', '<span class="wpinv_empty_cart">' . __( 'Your cart is empty.', 'invoicing' ) . '</span>' );
1056 1056
 }
1057 1057
 
1058 1058
 /**
@@ -1250,9 +1250,9 @@  discard block
 block discarded – undo
1250 1250
 
1251 1251
     if ( 0 == count( $form->get_items() ) ) {
1252 1252
         aui()->alert(
1253
-			array(
1254
-				'type'    => 'warning',
1255
-				'content' => __( 'No published items found', 'invoicing' ),
1253
+            array(
1254
+                'type'    => 'warning',
1255
+                'content' => __( 'No published items found', 'invoicing' ),
1256 1256
             ),
1257 1257
             true
1258 1258
         );
@@ -1275,10 +1275,10 @@  discard block
 block discarded – undo
1275 1275
     $invoice = wpinv_get_invoice( $invoice_id );
1276 1276
 
1277 1277
     if ( empty( $invoice ) ) {
1278
-		aui()->alert(
1279
-			array(
1280
-				'type'    => 'warning',
1281
-				'content' => __( 'Invoice not found', 'invoicing' ),
1278
+        aui()->alert(
1279
+            array(
1280
+                'type'    => 'warning',
1281
+                'content' => __( 'Invoice not found', 'invoicing' ),
1282 1282
             ),
1283 1283
             true
1284 1284
         );
@@ -1286,10 +1286,10 @@  discard block
 block discarded – undo
1286 1286
     }
1287 1287
 
1288 1288
     if ( $invoice->is_paid() ) {
1289
-		aui()->alert(
1290
-			array(
1291
-				'type'    => 'warning',
1292
-				'content' => __( 'Invoice has already been paid', 'invoicing' ),
1289
+        aui()->alert(
1290
+            array(
1291
+                'type'    => 'warning',
1292
+                'content' => __( 'Invoice has already been paid', 'invoicing' ),
1293 1293
             ),
1294 1294
             true
1295 1295
         );
@@ -1354,7 +1354,7 @@  discard block
 block discarded – undo
1354 1354
         return "<button class='btn btn-primary getpaid-payment-button' type='button' data-form='$form'>$label</button>";
1355 1355
     }
1356 1356
 
1357
-	if ( ! empty( $items ) ) {
1357
+    if ( ! empty( $items ) ) {
1358 1358
         $items  = esc_attr( $items );
1359 1359
         return "<button class='btn btn-primary getpaid-payment-button' type='button' data-item='$items'>$label</button>";
1360 1360
     }
@@ -1554,21 +1554,21 @@  discard block
 block discarded – undo
1554 1554
 
1555 1555
         return aui()->select(
1556 1556
             array(
1557
-				'options'          => $states,
1558
-				'name'             => esc_attr( $field_name ),
1559
-				'id'               => sanitize_html_class( $field_name ) . $uniqid,
1560
-				'value'            => sanitize_text_field( $state ),
1561
-				'placeholder'      => $placeholder,
1562
-				'required'         => $required,
1563
-				'label'            => wp_kses_post( $label ),
1564
-				'label_type'       => 'vertical',
1565
-				'help_text'        => $help_text,
1566
-				'class'            => 'getpaid-address-field wpinv_state',
1567
-				'wrap_class'       => "$wrapper_class getpaid-address-field-wrapper__state",
1568
-				'label_class'      => 'getpaid-address-field-label getpaid-address-field-label__state',
1569
-				'extra_attributes' => array(
1570
-					'autocomplete' => 'address-level1',
1571
-				),
1557
+                'options'          => $states,
1558
+                'name'             => esc_attr( $field_name ),
1559
+                'id'               => sanitize_html_class( $field_name ) . $uniqid,
1560
+                'value'            => sanitize_text_field( $state ),
1561
+                'placeholder'      => $placeholder,
1562
+                'required'         => $required,
1563
+                'label'            => wp_kses_post( $label ),
1564
+                'label_type'       => 'vertical',
1565
+                'help_text'        => $help_text,
1566
+                'class'            => 'getpaid-address-field wpinv_state',
1567
+                'wrap_class'       => "$wrapper_class getpaid-address-field-wrapper__state",
1568
+                'label_class'      => 'getpaid-address-field-label getpaid-address-field-label__state',
1569
+                'extra_attributes' => array(
1570
+                    'autocomplete' => 'address-level1',
1571
+                ),
1572 1572
             ),
1573 1573
             $echo
1574 1574
         );
@@ -1664,36 +1664,36 @@  discard block
 block discarded – undo
1664 1664
  * @return array Array of custom fields.
1665 1665
  */
1666 1666
 function getpaid_get_payment_form_custom_fields() {
1667
-	global $wpdb, $payment_form_meta_fields;
1667
+    global $wpdb, $payment_form_meta_fields;
1668 1668
 
1669
-	if ( ! empty( $payment_form_meta_fields ) ) {
1670
-		return $payment_form_meta_fields;
1671
-	}
1669
+    if ( ! empty( $payment_form_meta_fields ) ) {
1670
+        return $payment_form_meta_fields;
1671
+    }
1672 1672
 
1673
-	$results = $wpdb->get_results( "SELECT `pm`.`meta_value` FROM `{$wpdb->postmeta}` AS pm LEFT JOIN `{$wpdb->posts}` AS p ON p.ID = pm.post_id WHERE `pm`.`meta_key` = 'wpinv_form_elements' AND `p`.`post_type` = 'wpi_payment_form'" );
1673
+    $results = $wpdb->get_results( "SELECT `pm`.`meta_value` FROM `{$wpdb->postmeta}` AS pm LEFT JOIN `{$wpdb->posts}` AS p ON p.ID = pm.post_id WHERE `pm`.`meta_key` = 'wpinv_form_elements' AND `p`.`post_type` = 'wpi_payment_form'" );
1674 1674
 
1675
-	$meta_fields = array();
1675
+    $meta_fields = array();
1676 1676
 
1677
-	if ( ! empty( $results ) ) {
1678
-		foreach ( $results as $row ) {
1679
-			$fields = maybe_unserialize( $row->meta_value );
1677
+    if ( ! empty( $results ) ) {
1678
+        foreach ( $results as $row ) {
1679
+            $fields = maybe_unserialize( $row->meta_value );
1680 1680
 
1681
-			if ( ! empty( $fields ) && is_array( $fields ) ) {
1682
-				foreach ( $fields as $field ) {
1683
-					$label = ! empty( $field['add_meta'] ) && ! empty( $field['label'] ) ? wpinv_clean( wp_unslash( $field['label'] ) ) : '';
1681
+            if ( ! empty( $fields ) && is_array( $fields ) ) {
1682
+                foreach ( $fields as $field ) {
1683
+                    $label = ! empty( $field['add_meta'] ) && ! empty( $field['label'] ) ? wpinv_clean( wp_unslash( $field['label'] ) ) : '';
1684 1684
 
1685
-					if ( $label ) {
1686
-						$field_key = '_' . str_replace( array( ' ', "'", '"', ',' ), array( '_', '', '', '_' ), getpaid_strtolower( $label ) );
1687
-						$meta_fields[ $field_key ] = $label;
1688
-					}
1689
-				}
1690
-			}
1691
-		}
1692
-	}
1685
+                    if ( $label ) {
1686
+                        $field_key = '_' . str_replace( array( ' ', "'", '"', ',' ), array( '_', '', '', '_' ), getpaid_strtolower( $label ) );
1687
+                        $meta_fields[ $field_key ] = $label;
1688
+                    }
1689
+                }
1690
+            }
1691
+        }
1692
+    }
1693 1693
 
1694
-	$payment_form_meta_fields = $meta_fields;
1694
+    $payment_form_meta_fields = $meta_fields;
1695 1695
 
1696
-	return $meta_fields;
1696
+    return $meta_fields;
1697 1697
 }
1698 1698
 
1699 1699
 /**
@@ -1704,22 +1704,22 @@  discard block
 block discarded – undo
1704 1704
  * @return bool True if site uses Gutenberg else False.
1705 1705
  */
1706 1706
 function getpaid_is_gutenberg() {
1707
-	global $wp_version;
1707
+    global $wp_version;
1708 1708
 
1709
-	$is_gutenberg = true;
1709
+    $is_gutenberg = true;
1710 1710
 
1711
-	// If less than v5.
1712
-	if ( version_compare( $wp_version, '5.0.0', '<' ) ) {
1713
-		$is_gutenberg = false;
1714
-	}
1711
+    // If less than v5.
1712
+    if ( version_compare( $wp_version, '5.0.0', '<' ) ) {
1713
+        $is_gutenberg = false;
1714
+    }
1715 1715
 
1716
-	if ( class_exists( 'Classic_Editor' ) ) {
1717
-		$is_gutenberg = false; // Classic Editor plugin is active.
1718
-	} else if ( getpaid_is_classicpress() ) {
1719
-		$is_gutenberg = false; // Site is using ClassicPress.
1720
-	}
1716
+    if ( class_exists( 'Classic_Editor' ) ) {
1717
+        $is_gutenberg = false; // Classic Editor plugin is active.
1718
+    } else if ( getpaid_is_classicpress() ) {
1719
+        $is_gutenberg = false; // Site is using ClassicPress.
1720
+    }
1721 1721
 
1722
-	return $is_gutenberg;
1722
+    return $is_gutenberg;
1723 1723
 }
1724 1724
 
1725 1725
 /**
@@ -1730,13 +1730,13 @@  discard block
 block discarded – undo
1730 1730
  * @return bool True if site uses ClassicPress else False.
1731 1731
  */
1732 1732
 function getpaid_is_classicpress() {
1733
-	if ( function_exists( 'classicpress_version' ) ) {
1734
-		$is_classicpress = true;
1735
-	} else {
1736
-		$is_classicpress = false;
1737
-	}
1733
+    if ( function_exists( 'classicpress_version' ) ) {
1734
+        $is_classicpress = true;
1735
+    } else {
1736
+        $is_classicpress = false;
1737
+    }
1738 1738
 
1739
-	return $is_classicpress;
1739
+    return $is_classicpress;
1740 1740
 }
1741 1741
 
1742 1742
 /**
@@ -1748,20 +1748,20 @@  discard block
 block discarded – undo
1748 1748
  * @param @bool $blocks True to use blocks.
1749 1749
  * @return string Page content.
1750 1750
  */
1751
- function getpaid_page_content_checkout( $filtered = false, $blocks = false ) {
1752
-	if ( $blocks ) {
1753
-		$content = "<!-- wp:invoicing/wpinv-checkout-widget {\"content\":\"\",\"sd_shortcode\":\"[wpinv_checkout title='' ]\"} -->
1751
+    function getpaid_page_content_checkout( $filtered = false, $blocks = false ) {
1752
+    if ( $blocks ) {
1753
+        $content = "<!-- wp:invoicing/wpinv-checkout-widget {\"content\":\"\",\"sd_shortcode\":\"[wpinv_checkout title='' ]\"} -->
1754 1754
 <div class=\"wp-block-invoicing-wpinv-checkout-widget\"></div>
1755 1755
 <!-- /wp:invoicing/wpinv-checkout-widget -->";
1756
-	} else {
1757
-		$content = "[wpinv_checkout]";
1758
-	}
1756
+    } else {
1757
+        $content = "[wpinv_checkout]";
1758
+    }
1759 1759
 
1760
-	if ( $filtered ) {
1761
-		$content = apply_filters( 'getpaid_page_default_content_checkout', $content, $blocks );
1762
-	}
1760
+    if ( $filtered ) {
1761
+        $content = apply_filters( 'getpaid_page_default_content_checkout', $content, $blocks );
1762
+    }
1763 1763
 
1764
-	return $content;
1764
+    return $content;
1765 1765
 }
1766 1766
 
1767 1767
 /**
@@ -1773,20 +1773,20 @@  discard block
 block discarded – undo
1773 1773
  * @param @bool $blocks True to use blocks.
1774 1774
  * @return string Page content.
1775 1775
  */
1776
- function getpaid_page_content_invoice_history( $filtered = false, $blocks = false ) {
1777
-	if ( $blocks ) {
1778
-		$content = "<!-- wp:invoicing/wpinv-history-widget {\"content\":\"\",\"sd_shortcode\":\"[wpinv_history title='' ]\"} -->
1776
+    function getpaid_page_content_invoice_history( $filtered = false, $blocks = false ) {
1777
+    if ( $blocks ) {
1778
+        $content = "<!-- wp:invoicing/wpinv-history-widget {\"content\":\"\",\"sd_shortcode\":\"[wpinv_history title='' ]\"} -->
1779 1779
 <div class=\"wp-block-invoicing-wpinv-history-widget\"></div>
1780 1780
 <!-- /wp:invoicing/wpinv-history-widget -->";
1781
-	} else {
1782
-		$content = "[wpinv_history]";
1783
-	}
1781
+    } else {
1782
+        $content = "[wpinv_history]";
1783
+    }
1784 1784
 
1785
-	if ( $filtered ) {
1786
-		$content = apply_filters( 'getpaid_page_default_content_invoice_history', $content, $blocks );
1787
-	}
1785
+    if ( $filtered ) {
1786
+        $content = apply_filters( 'getpaid_page_default_content_invoice_history', $content, $blocks );
1787
+    }
1788 1788
 
1789
-	return $content;
1789
+    return $content;
1790 1790
 }
1791 1791
 
1792 1792
 /**
@@ -1798,20 +1798,20 @@  discard block
 block discarded – undo
1798 1798
  * @param @bool $blocks True to use blocks.
1799 1799
  * @return string Page content.
1800 1800
  */
1801
- function getpaid_page_content_receipt( $filtered = false, $blocks = false ) {
1802
-	if ( $blocks ) {
1803
-		$content = "<!-- wp:invoicing/wpinv-receipt-widget {\"content\":\"\",\"sd_shortcode\":\"[wpinv_receipt title='' ]\"} -->
1801
+    function getpaid_page_content_receipt( $filtered = false, $blocks = false ) {
1802
+    if ( $blocks ) {
1803
+        $content = "<!-- wp:invoicing/wpinv-receipt-widget {\"content\":\"\",\"sd_shortcode\":\"[wpinv_receipt title='' ]\"} -->
1804 1804
 <div class=\"wp-block-invoicing-wpinv-receipt-widget\"></div>
1805 1805
 <!-- /wp:invoicing/wpinv-receipt-widget -->";
1806
-	} else {
1807
-		$content = "[wpinv_receipt]";
1808
-	}
1806
+    } else {
1807
+        $content = "[wpinv_receipt]";
1808
+    }
1809 1809
 
1810
-	if ( $filtered ) {
1811
-		$content = apply_filters( 'getpaid_page_default_content_receipt', $content, $blocks );
1812
-	}
1810
+    if ( $filtered ) {
1811
+        $content = apply_filters( 'getpaid_page_default_content_receipt', $content, $blocks );
1812
+    }
1813 1813
 
1814
-	return $content;
1814
+    return $content;
1815 1815
 }
1816 1816
 
1817 1817
 /**
@@ -1823,20 +1823,20 @@  discard block
 block discarded – undo
1823 1823
  * @param @bool $blocks True to use blocks.
1824 1824
  * @return string Page content.
1825 1825
  */
1826
- function getpaid_page_content_failure( $filtered = false, $blocks = false ) {
1827
-	if ( $blocks ) {
1828
-		$content = "<!-- wp:html -->
1826
+    function getpaid_page_content_failure( $filtered = false, $blocks = false ) {
1827
+    if ( $blocks ) {
1828
+        $content = "<!-- wp:html -->
1829 1829
 " . __( 'Your transaction failed, please try again or contact site support.', 'invoicing' ) . "
1830 1830
 <!-- /wp:html -->";
1831
-	} else {
1832
-		$content = __( 'Your transaction failed, please try again or contact site support.', 'invoicing' );
1833
-	}
1831
+    } else {
1832
+        $content = __( 'Your transaction failed, please try again or contact site support.', 'invoicing' );
1833
+    }
1834 1834
 
1835
-	if ( $filtered ) {
1836
-		$content = apply_filters( 'getpaid_page_default_content_failure', $content, $blocks );
1837
-	}
1835
+    if ( $filtered ) {
1836
+        $content = apply_filters( 'getpaid_page_default_content_failure', $content, $blocks );
1837
+    }
1838 1838
 
1839
-	return $content;
1839
+    return $content;
1840 1840
 }
1841 1841
 
1842 1842
 /**
@@ -1848,18 +1848,18 @@  discard block
 block discarded – undo
1848 1848
  * @param @bool $blocks True to use blocks.
1849 1849
  * @return string Page content.
1850 1850
  */
1851
- function getpaid_page_content_subscriptions( $filtered = false, $blocks = false ) {
1852
-	if ( $blocks ) {
1853
-		$content = "<!-- wp:invoicing/wpinv-subscriptions-widget {\"content\":\"\",\"sd_shortcode\":\"[wpinv_subscriptions title='' ]\"} -->
1851
+    function getpaid_page_content_subscriptions( $filtered = false, $blocks = false ) {
1852
+    if ( $blocks ) {
1853
+        $content = "<!-- wp:invoicing/wpinv-subscriptions-widget {\"content\":\"\",\"sd_shortcode\":\"[wpinv_subscriptions title='' ]\"} -->
1854 1854
 <div class=\"wp-block-invoicing-wpinv-subscriptions-widget\"></div>
1855 1855
 <!-- /wp:invoicing/wpinv-subscriptions-widget -->";
1856
-	} else {
1857
-		$content = "[wpinv_subscriptions]";
1858
-	}
1856
+    } else {
1857
+        $content = "[wpinv_subscriptions]";
1858
+    }
1859 1859
 
1860
-	if ( $filtered ) {
1861
-		$content = apply_filters( 'getpaid_page_default_content_subscriptions', $content, $blocks );
1862
-	}
1860
+    if ( $filtered ) {
1861
+        $content = apply_filters( 'getpaid_page_default_content_subscriptions', $content, $blocks );
1862
+    }
1863 1863
 
1864
-	return $content;
1864
+    return $content;
1865 1865
 }
1866 1866
\ No newline at end of file
Please login to merge, or discard this patch.
widgets/checkout.php 1 patch
Indentation   +100 added lines, -100 removed lines patch added patch discarded remove patch
@@ -9,117 +9,117 @@
 block discarded – undo
9 9
  */
10 10
 class WPInv_Checkout_Widget extends WP_Super_Duper {
11 11
 
12
-	/**
13
-	 * Register the widget with WordPress.
14
-	 *
15
-	 */
16
-	public function __construct() {
12
+    /**
13
+     * Register the widget with WordPress.
14
+     *
15
+     */
16
+    public function __construct() {
17 17
 
18
-		$options = array(
19
-			'textdomain'     => 'invoicing',
20
-			'block-icon'     => 'admin-site',
21
-			'block-category' => 'widgets',
22
-			'block-keywords' => "['invoicing','checkout']",
23
-			'class_name'     => __CLASS__,
24
-			'base_id'        => 'wpinv_checkout',
25
-			'name'           => __( 'GetPaid > Checkout', 'invoicing' ),
26
-			'widget_ops'     => array(
27
-				'classname'   => 'getpaid-checkout bsui',
28
-				'description' => esc_html__( 'Displays a checkout form.', 'invoicing' ),
29
-			),
30
-			'arguments'      => array(
31
-				'title' => array(
32
-					'title'    => __( 'Widget title', 'invoicing' ),
33
-					'desc'     => __( 'Enter widget title.', 'invoicing' ),
34
-					'type'     => 'text',
35
-					'desc_tip' => true,
36
-					'default'  => '',
37
-					'advanced' => false,
38
-				),
39
-			),
18
+        $options = array(
19
+            'textdomain'     => 'invoicing',
20
+            'block-icon'     => 'admin-site',
21
+            'block-category' => 'widgets',
22
+            'block-keywords' => "['invoicing','checkout']",
23
+            'class_name'     => __CLASS__,
24
+            'base_id'        => 'wpinv_checkout',
25
+            'name'           => __( 'GetPaid > Checkout', 'invoicing' ),
26
+            'widget_ops'     => array(
27
+                'classname'   => 'getpaid-checkout bsui',
28
+                'description' => esc_html__( 'Displays a checkout form.', 'invoicing' ),
29
+            ),
30
+            'arguments'      => array(
31
+                'title' => array(
32
+                    'title'    => __( 'Widget title', 'invoicing' ),
33
+                    'desc'     => __( 'Enter widget title.', 'invoicing' ),
34
+                    'type'     => 'text',
35
+                    'desc_tip' => true,
36
+                    'default'  => '',
37
+                    'advanced' => false,
38
+                ),
39
+            ),
40 40
 
41
-		);
41
+        );
42 42
 
43
-		parent::__construct( $options );
44
-	}
43
+        parent::__construct( $options );
44
+    }
45 45
 
46
-	/**
47
-	 * The Super block output function.
48
-	 *
49
-	 * @param array $args
50
-	 * @param array $widget_args
51
-	 * @param string $content
52
-	 *
53
-	 * @return mixed|string|bool
54
-	 */
55
-	public function output( $args = array(), $widget_args = array(), $content = '' ) {
56
-		if ( $this->is_preview() ) {
57
-			return $this->get_dummy_preview( $args );
58
-		}
46
+    /**
47
+     * The Super block output function.
48
+     *
49
+     * @param array $args
50
+     * @param array $widget_args
51
+     * @param string $content
52
+     *
53
+     * @return mixed|string|bool
54
+     */
55
+    public function output( $args = array(), $widget_args = array(), $content = '' ) {
56
+        if ( $this->is_preview() ) {
57
+            return $this->get_dummy_preview( $args );
58
+        }
59 59
 
60
-		return wpinv_checkout_form();
61
-	}
60
+        return wpinv_checkout_form();
61
+    }
62 62
 
63
-	public function get_dummy_preview( $args ) {
64
-		$output = '<form><div class="col-12">';
63
+    public function get_dummy_preview( $args ) {
64
+        $output = '<form><div class="col-12">';
65 65
 
66
-		$output .= aui()->alert(
67
-			array(
68
-				'type'=> 'info',
69
-				'content' => __( 'This is a simple preview for a checkout form.', 'invoicing' )
70
-			)
71
-		);
66
+        $output .= aui()->alert(
67
+            array(
68
+                'type'=> 'info',
69
+                'content' => __( 'This is a simple preview for a checkout form.', 'invoicing' )
70
+            )
71
+        );
72 72
 
73
-		$output .= aui()->input(
74
-			array(
75
-				'name'        => 'mmdwqzpox',
76
-				'required'    => true,
77
-				'label'       => __( 'Billing Email', 'invoicing' ),
78
-				'label_type'  => 'vertical',
79
-				'type'        => 'text',
80
-				'placeholder' => '[email protected]',
81
-				'class'       => '',
82
-				'value'       => ''
83
-			)
84
-		);
73
+        $output .= aui()->input(
74
+            array(
75
+                'name'        => 'mmdwqzpox',
76
+                'required'    => true,
77
+                'label'       => __( 'Billing Email', 'invoicing' ),
78
+                'label_type'  => 'vertical',
79
+                'type'        => 'text',
80
+                'placeholder' => '[email protected]',
81
+                'class'       => '',
82
+                'value'       => ''
83
+            )
84
+        );
85 85
 
86
-		$output .= aui()->input(
87
-			array(
88
-				'name'        => 'mmdwqzpoy',
89
-				'required'    => true,
90
-				'label'       => __( 'First Name', 'invoicing' ),
91
-				'label_type'  => 'vertical',
92
-				'type'        => 'text',
93
-				'placeholder' => 'Jon',
94
-				'class'       => '',
95
-				'value'       => ''
96
-			)
97
-		);
86
+        $output .= aui()->input(
87
+            array(
88
+                'name'        => 'mmdwqzpoy',
89
+                'required'    => true,
90
+                'label'       => __( 'First Name', 'invoicing' ),
91
+                'label_type'  => 'vertical',
92
+                'type'        => 'text',
93
+                'placeholder' => 'Jon',
94
+                'class'       => '',
95
+                'value'       => ''
96
+            )
97
+        );
98 98
 
99
-		$output .= aui()->input(
100
-			array(
101
-				'name'        => 'mmdwqzpoz',
102
-				'required'    => true,
103
-				'label'       => __( 'Last Name', 'invoicing' ),
104
-				'label_type'  => 'vertical',
105
-				'type'        => 'text',
106
-				'placeholder' => 'Snow',
107
-				'class'       => '',
108
-				'value'       => ''
109
-			)
110
-		);
99
+        $output .= aui()->input(
100
+            array(
101
+                'name'        => 'mmdwqzpoz',
102
+                'required'    => true,
103
+                'label'       => __( 'Last Name', 'invoicing' ),
104
+                'label_type'  => 'vertical',
105
+                'type'        => 'text',
106
+                'placeholder' => 'Snow',
107
+                'class'       => '',
108
+                'value'       => ''
109
+            )
110
+        );
111 111
 
112
-		$output .= aui()->button(
113
-			array(
114
-				'type'        => 'button',
115
-				'class'       => 'btn btn-primary w-100',
116
-				'content'     => __( 'Pay Now »', 'invoicing' ),
117
-				'description' => __( 'By continuing with your payment, you are agreeing to our privacy policy and terms of service.', 'invoicing' )
118
-			)
119
-		);
112
+        $output .= aui()->button(
113
+            array(
114
+                'type'        => 'button',
115
+                'class'       => 'btn btn-primary w-100',
116
+                'content'     => __( 'Pay Now »', 'invoicing' ),
117
+                'description' => __( 'By continuing with your payment, you are agreeing to our privacy policy and terms of service.', 'invoicing' )
118
+            )
119
+        );
120 120
 
121
-		$output .= '</div></form>';
121
+        $output .= '</div></form>';
122 122
 
123
-		return $output;
124
-	}
123
+        return $output;
124
+    }
125 125
 }
Please login to merge, or discard this patch.
widgets/invoice-receipt.php 1 patch
Indentation   +82 added lines, -82 removed lines patch added patch discarded remove patch
@@ -8,86 +8,86 @@
 block discarded – undo
8 8
  */
9 9
 class WPInv_Receipt_Widget extends WP_Super_Duper {
10 10
 
11
-	/**
12
-	 * Register the widget with WordPress.
13
-	 *
14
-	 */
15
-	public function __construct() {
16
-
17
-		$options = array(
18
-			'textdomain'     => 'invoicing',
19
-			'block-icon'     => 'admin-site',
20
-			'block-category' => 'widgets',
21
-			'block-keywords' => "['invoicing','receipt']",
22
-			'class_name'     => __CLASS__,
23
-			'base_id'        => 'wpinv_receipt',
24
-			'name'           => __( 'GetPaid > Invoice Receipt', 'invoicing' ),
25
-			'widget_ops'     => array(
26
-				'classname'   => 'wpinv-receipt-class bsui',
27
-				'description' => esc_html__( 'Displays invoice receipt after checkout.', 'invoicing' ),
28
-			),
29
-			'arguments'      => array(
30
-				'title' => array(
31
-					'title'    => __( 'Widget title', 'invoicing' ),
32
-					'desc'     => __( 'Enter widget title.', 'invoicing' ),
33
-					'type'     => 'text',
34
-					'desc_tip' => true,
35
-					'default'  => '',
36
-					'advanced' => false,
37
-				),
38
-			),
39
-
40
-		);
41
-
42
-		parent::__construct( $options );
43
-	}
44
-
45
-	/**
46
-	 * The Super block output function.
47
-	 *
48
-	 * @param array $args
49
-	 * @param array $widget_args
50
-	 * @param string $content
51
-	 *
52
-	 * @return mixed|string|bool
53
-	 */
54
-	public function output( $args = array(), $widget_args = array(), $content = '' ) {
55
-		if ( $this->is_preview() ) {
56
-			return $this->get_dummy_preview( $args );
57
-		}
58
-
59
-		return wpinv_payment_receipt();
60
-	}
61
-
62
-	public function get_dummy_preview( $args ) {
63
-		global $wpdb;
64
-
65
-		$output = aui()->alert( array(
66
-				'type'=> 'info',
67
-				'content' => __( 'This is a simple preview for a invoice receipt.', 'invoicing' )
68
-			)
69
-		);
70
-
71
-		if ( ! current_user_can( 'manage_options' ) ) {
72
-			return $output;
73
-		}
74
-
75
-		$invoice_id = $wpdb->get_var( $wpdb->prepare( "SELECT `ID` FROM `{$wpdb->posts}` WHERE `post_type` = %s AND `post_status` IN( 'wpi-pending', 'publish', 'wpi-processing', 'wpi-onhold' ) ORDER BY `post_status` ASC, `ID` ASC LIMIT 1;", 'wpi_invoice' ) );
76
-
77
-		if ( ! $invoice_id ) {
78
-			return $output;
79
-		}
80
-
81
-		$invoice = new WPInv_Invoice( $invoice_id );
82
-
83
-		if ( empty( $invoice ) ) {
84
-			return $output;
85
-		}
86
-
87
-		$output .= wpinv_get_template_html( 'invoice-receipt.php', array( 'invoice' => $invoice ) );
88
-
89
-		$output = preg_replace( '/<a([^>]*)href=(["\'])(.*?)\2([^>]*)>/is', '<a\\1href="javascript:void(0)"\\4>', $output );
90
-
91
-		return $output;
92
-	}
11
+    /**
12
+     * Register the widget with WordPress.
13
+     *
14
+     */
15
+    public function __construct() {
16
+
17
+        $options = array(
18
+            'textdomain'     => 'invoicing',
19
+            'block-icon'     => 'admin-site',
20
+            'block-category' => 'widgets',
21
+            'block-keywords' => "['invoicing','receipt']",
22
+            'class_name'     => __CLASS__,
23
+            'base_id'        => 'wpinv_receipt',
24
+            'name'           => __( 'GetPaid > Invoice Receipt', 'invoicing' ),
25
+            'widget_ops'     => array(
26
+                'classname'   => 'wpinv-receipt-class bsui',
27
+                'description' => esc_html__( 'Displays invoice receipt after checkout.', 'invoicing' ),
28
+            ),
29
+            'arguments'      => array(
30
+                'title' => array(
31
+                    'title'    => __( 'Widget title', 'invoicing' ),
32
+                    'desc'     => __( 'Enter widget title.', 'invoicing' ),
33
+                    'type'     => 'text',
34
+                    'desc_tip' => true,
35
+                    'default'  => '',
36
+                    'advanced' => false,
37
+                ),
38
+            ),
39
+
40
+        );
41
+
42
+        parent::__construct( $options );
43
+    }
44
+
45
+    /**
46
+     * The Super block output function.
47
+     *
48
+     * @param array $args
49
+     * @param array $widget_args
50
+     * @param string $content
51
+     *
52
+     * @return mixed|string|bool
53
+     */
54
+    public function output( $args = array(), $widget_args = array(), $content = '' ) {
55
+        if ( $this->is_preview() ) {
56
+            return $this->get_dummy_preview( $args );
57
+        }
58
+
59
+        return wpinv_payment_receipt();
60
+    }
61
+
62
+    public function get_dummy_preview( $args ) {
63
+        global $wpdb;
64
+
65
+        $output = aui()->alert( array(
66
+                'type'=> 'info',
67
+                'content' => __( 'This is a simple preview for a invoice receipt.', 'invoicing' )
68
+            )
69
+        );
70
+
71
+        if ( ! current_user_can( 'manage_options' ) ) {
72
+            return $output;
73
+        }
74
+
75
+        $invoice_id = $wpdb->get_var( $wpdb->prepare( "SELECT `ID` FROM `{$wpdb->posts}` WHERE `post_type` = %s AND `post_status` IN( 'wpi-pending', 'publish', 'wpi-processing', 'wpi-onhold' ) ORDER BY `post_status` ASC, `ID` ASC LIMIT 1;", 'wpi_invoice' ) );
76
+
77
+        if ( ! $invoice_id ) {
78
+            return $output;
79
+        }
80
+
81
+        $invoice = new WPInv_Invoice( $invoice_id );
82
+
83
+        if ( empty( $invoice ) ) {
84
+            return $output;
85
+        }
86
+
87
+        $output .= wpinv_get_template_html( 'invoice-receipt.php', array( 'invoice' => $invoice ) );
88
+
89
+        $output = preg_replace( '/<a([^>]*)href=(["\'])(.*?)\2([^>]*)>/is', '<a\\1href="javascript:void(0)"\\4>', $output );
90
+
91
+        return $output;
92
+    }
93 93
 }
Please login to merge, or discard this patch.