Passed
Push — master ( c29213...6daaec )
by Stiofan
05:18
created
templates/payment-forms/cart-totals.php 1 patch
Spacing   +18 added lines, -18 removed lines patch added patch discarded remove patch
@@ -7,16 +7,16 @@  discard block
 block discarded – undo
7 7
  * @version 1.0.19
8 8
  */
9 9
 
10
-defined( 'ABSPATH' ) || exit;
10
+defined('ABSPATH') || exit;
11 11
 
12 12
 // Totals rows.
13 13
 $totals = apply_filters(
14 14
     'getpaid_payment_form_cart_table_totals',
15 15
     array(
16
-        'subtotal' => __( 'Subtotal', 'invoicing' ),
17
-        'tax'      => __( 'Tax', 'invoicing' ),
18
-        'discount' => __( 'Discount', 'invoicing' ),
19
-        'total'    => __( 'Total', 'invoicing' ),
16
+        'subtotal' => __('Subtotal', 'invoicing'),
17
+        'tax'      => __('Tax', 'invoicing'),
18
+        'discount' => __('Discount', 'invoicing'),
19
+        'total'    => __('Total', 'invoicing'),
20 20
     ),
21 21
     $form
22 22
 );
@@ -24,31 +24,31 @@  discard block
 block discarded – undo
24 24
 $currency = $form->get_currency();
25 25
 $country  = wpinv_get_default_country();
26 26
 
27
-if ( ! empty( $form->invoice ) ) {
28
-    $country  = $form->invoice->get_country();
27
+if (!empty($form->invoice)) {
28
+    $country = $form->invoice->get_country();
29 29
 }
30 30
 
31
-if ( ! wpinv_use_taxes() && isset( $totals['tax'] ) ) {
32
-    unset( $totals['tax'] );
31
+if (!wpinv_use_taxes() && isset($totals['tax'])) {
32
+    unset($totals['tax']);
33 33
 }
34 34
 
35
-do_action( 'getpaid_before_payment_form_cart_totals', $form, $totals );
35
+do_action('getpaid_before_payment_form_cart_totals', $form, $totals);
36 36
 
37 37
 ?>
38 38
 <div class='border-top getpaid-payment-form-items-cart-totals'>
39
-    <?php foreach ( $totals as $key => $label ) : ?>
40
-        <div class="getpaid-form-cart-totals-col px-3 py-2 getpaid-form-cart-totals-<?php echo esc_attr( $key ); ?>">
39
+    <?php foreach ($totals as $key => $label) : ?>
40
+        <div class="getpaid-form-cart-totals-col px-3 py-2 getpaid-form-cart-totals-<?php echo esc_attr($key); ?>">
41 41
             <div class="row">
42 42
                 <div class="col-12 offset-sm-5 col-sm-3">
43
-                    <?php echo sanitize_text_field( $label ); ?>
43
+                    <?php echo sanitize_text_field($label); ?>
44 44
                 </div>
45
-                <div class="col-12 col-sm-4 getpaid-form-cart-totals-total-<?php echo esc_attr( $key ); ?>">
45
+                <div class="col-12 col-sm-4 getpaid-form-cart-totals-total-<?php echo esc_attr($key); ?>">
46 46
                     <?php
47
-                        do_action( "getpaid_payment_form_cart_totals_$key", $form );
47
+                        do_action("getpaid_payment_form_cart_totals_$key", $form);
48 48
 
49 49
                         // Total tax.
50
-                        if ( in_array( $key, array( 'tax', 'discount', 'subtotal', 'total' ) ) ) {
51
-                            echo wpinv_price( 0, $currency );
50
+                        if (in_array($key, array('tax', 'discount', 'subtotal', 'total'))) {
51
+                            echo wpinv_price(0, $currency);
52 52
                         }
53 53
 
54 54
                     ?>
@@ -59,4 +59,4 @@  discard block
 block discarded – undo
59 59
 </div>
60 60
 
61 61
 <?php
62
-do_action(  'getpaid_payment_form_cart_totals', $form, $totals );
62
+do_action('getpaid_payment_form_cart_totals', $form, $totals);
Please login to merge, or discard this patch.
templates/payment-forms/cart.php 1 patch
Spacing   +16 added lines, -16 removed lines patch added patch discarded remove patch
@@ -7,31 +7,31 @@  discard block
 block discarded – undo
7 7
  * @version 1.0.19
8 8
  */
9 9
 
10
-defined( 'ABSPATH' ) || exit;
10
+defined('ABSPATH') || exit;
11 11
 
12 12
 // Cart table columns.
13 13
 $columns = array(
14
-    'name'     => __( 'Item', 'invoicing' ),
15
-    'price'    => __( 'Price', 'invoicing' ),
16
-    'quantity' => __( 'Quantity', 'invoicing' ),
17
-    'subtotal' => __( 'Subtotal', 'invoicing' ),
14
+    'name'     => __('Item', 'invoicing'),
15
+    'price'    => __('Price', 'invoicing'),
16
+    'quantity' => __('Quantity', 'invoicing'),
17
+    'subtotal' => __('Subtotal', 'invoicing'),
18 18
 );
19 19
 
20
-if ( ! empty( $form->invoice ) ) {
21
-    $columns = getpaid_invoice_item_columns( $form->invoice );
20
+if (!empty($form->invoice)) {
21
+    $columns = getpaid_invoice_item_columns($form->invoice);
22 22
 }
23 23
 
24
-$columns = apply_filters( 'getpaid_payment_form_cart_table_columns', $columns, $form );
24
+$columns = apply_filters('getpaid_payment_form_cart_table_columns', $columns, $form);
25 25
 
26
-do_action( 'getpaid_before_payment_form_cart', $form );
26
+do_action('getpaid_before_payment_form_cart', $form);
27 27
 
28 28
 ?>
29 29
     <div class="getpaid-payment-form-items-cart border form-group">
30 30
         <div class="getpaid-payment-form-items-cart-header border-bottom py-2 px-3 font-weight-bold bg-light">
31 31
             <div class="form-row">
32
-            <?php foreach ( $columns as $key => $label ) : ?>
33
-                <div class="<?php echo 'name' == $key ? 'col-12 col-sm-5' : 'col-12 col-sm' ?> getpaid-form-cart-item-<?php echo esc_attr( $key ); ?>">
34
-                    <?php echo sanitize_text_field( $label ); ?>
32
+            <?php foreach ($columns as $key => $label) : ?>
33
+                <div class="<?php echo 'name' == $key ? 'col-12 col-sm-5' : 'col-12 col-sm' ?> getpaid-form-cart-item-<?php echo esc_attr($key); ?>">
34
+                    <?php echo sanitize_text_field($label); ?>
35 35
                 </div>
36 36
             <?php endforeach; ?>
37 37
             </div>
@@ -39,16 +39,16 @@  discard block
 block discarded – undo
39 39
         <?php
40 40
 
41 41
             // Display the item totals.
42
-            foreach ( $form->get_items() as $item ) {
43
-                wpinv_get_template( 'payment-forms/cart-item.php', compact( 'form', 'item', 'columns' ) );
42
+            foreach ($form->get_items() as $item) {
43
+                wpinv_get_template('payment-forms/cart-item.php', compact('form', 'item', 'columns'));
44 44
             }
45 45
 
46 46
             // Display the cart totals.
47
-            wpinv_get_template( 'payment-forms/cart-totals.php', compact( 'form' ) );
47
+            wpinv_get_template('payment-forms/cart-totals.php', compact('form'));
48 48
 
49 49
         ?>
50 50
     </div>
51 51
 
52 52
 <?php 
53 53
 
54
-do_action( 'getpaid_after_payment_form_cart', $form );
54
+do_action('getpaid_after_payment_form_cart', $form);
Please login to merge, or discard this patch.
invoicing.php 2 patches
Indentation   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -19,16 +19,16 @@  discard block
 block discarded – undo
19 19
 
20 20
 // Define constants.
21 21
 if ( ! defined( 'WPINV_PLUGIN_FILE' ) ) {
22
-	define( 'WPINV_PLUGIN_FILE', __FILE__ );
22
+    define( 'WPINV_PLUGIN_FILE', __FILE__ );
23 23
 }
24 24
 
25 25
 if ( ! defined( 'WPINV_VERSION' ) ) {
26
-	define( 'WPINV_VERSION', '2.0.2-beta' );
26
+    define( 'WPINV_VERSION', '2.0.2-beta' );
27 27
 }
28 28
 
29 29
 // Include the main Invoicing class.
30 30
 if ( ! class_exists( 'WPInv_Plugin', false ) ) {
31
-	require_once plugin_dir_path( WPINV_PLUGIN_FILE ) . 'includes/class-wpinv.php';
31
+    require_once plugin_dir_path( WPINV_PLUGIN_FILE ) . 'includes/class-wpinv.php';
32 32
 }
33 33
 
34 34
 /**
@@ -43,7 +43,7 @@  discard block
 block discarded – undo
43 43
         $GLOBALS['invoicing'] = new WPInv_Plugin();
44 44
     }
45 45
 
46
-	return $GLOBALS['invoicing'];
46
+    return $GLOBALS['invoicing'];
47 47
 }
48 48
 
49 49
 /**
Please login to merge, or discard this patch.
Spacing   +9 added lines, -9 removed lines patch added patch discarded remove patch
@@ -15,20 +15,20 @@  discard block
 block discarded – undo
15 15
  * @package GetPaid
16 16
  */
17 17
 
18
-defined( 'ABSPATH' ) || exit;
18
+defined('ABSPATH') || exit;
19 19
 
20 20
 // Define constants.
21
-if ( ! defined( 'WPINV_PLUGIN_FILE' ) ) {
22
-	define( 'WPINV_PLUGIN_FILE', __FILE__ );
21
+if (!defined('WPINV_PLUGIN_FILE')) {
22
+	define('WPINV_PLUGIN_FILE', __FILE__);
23 23
 }
24 24
 
25
-if ( ! defined( 'WPINV_VERSION' ) ) {
26
-	define( 'WPINV_VERSION', '2.0.2-beta' );
25
+if (!defined('WPINV_VERSION')) {
26
+	define('WPINV_VERSION', '2.0.2-beta');
27 27
 }
28 28
 
29 29
 // Include the main Invoicing class.
30
-if ( ! class_exists( 'WPInv_Plugin', false ) ) {
31
-	require_once plugin_dir_path( WPINV_PLUGIN_FILE ) . 'includes/class-wpinv.php';
30
+if (!class_exists('WPInv_Plugin', false)) {
31
+	require_once plugin_dir_path(WPINV_PLUGIN_FILE) . 'includes/class-wpinv.php';
32 32
 }
33 33
 
34 34
 /**
@@ -39,7 +39,7 @@  discard block
 block discarded – undo
39 39
  */
40 40
 function getpaid() {
41 41
 
42
-    if ( empty( $GLOBALS['invoicing'] ) ) {
42
+    if (empty($GLOBALS['invoicing'])) {
43 43
         $GLOBALS['invoicing'] = new WPInv_Plugin();
44 44
     }
45 45
 
@@ -54,4 +54,4 @@  discard block
 block discarded – undo
54 54
 }
55 55
 
56 56
 // Kickstart the plugin.
57
-add_action( 'plugins_loaded', 'getpaid', -100 );
57
+add_action('plugins_loaded', 'getpaid', -100);
Please login to merge, or discard this patch.
includes/gateways/class-getpaid-bank-transfer-gateway.php 2 patches
Indentation   +175 added lines, -175 removed lines patch added patch discarded remove patch
@@ -13,30 +13,30 @@  discard block
 block discarded – undo
13 13
 class GetPaid_Bank_Transfer_Gateway extends GetPaid_Payment_Gateway {
14 14
 
15 15
     /**
16
-	 * Payment method id.
17
-	 *
18
-	 * @var string
19
-	 */
16
+     * Payment method id.
17
+     *
18
+     * @var string
19
+     */
20 20
     public $id = 'bank_transfer';
21 21
 
22
-	/**
23
-	 * An array of features that this gateway supports.
24
-	 *
25
-	 * @var array
26
-	 */
27
-	protected $supports = array( 'addons' );
22
+    /**
23
+     * An array of features that this gateway supports.
24
+     *
25
+     * @var array
26
+     */
27
+    protected $supports = array( 'addons' );
28 28
 
29 29
     /**
30
-	 * Payment method order.
31
-	 *
32
-	 * @var int
33
-	 */
34
-	public $order = 8;
30
+     * Payment method order.
31
+     *
32
+     * @var int
33
+     */
34
+    public $order = 8;
35 35
 
36 36
     /**
37
-	 * Class constructor.
38
-	 */
39
-	public function __construct() {
37
+     * Class constructor.
38
+     */
39
+    public function __construct() {
40 40
         parent::__construct();
41 41
 
42 42
         $this->title                = __( 'Direct bank transfer', 'invoicing' );
@@ -44,23 +44,23 @@  discard block
 block discarded – undo
44 44
         $this->checkout_button_text = __( 'Proceed', 'invoicing' );
45 45
         $this->instructions         = apply_filters( 'wpinv_bank_instructions', $this->get_option( 'info' ) );
46 46
 
47
-		add_action( 'wpinv_receipt_end', array( $this, 'thankyou_page' ) );
48
-		add_action( 'getpaid_invoice_line_items', array( $this, 'thankyou_page' ), 40 );
49
-		add_action( 'wpinv_pdf_content_billing', array( $this, 'thankyou_page' ), 11 );
50
-		add_action( 'wpinv_email_invoice_details', array( $this, 'email_instructions' ), 10, 3 );
47
+        add_action( 'wpinv_receipt_end', array( $this, 'thankyou_page' ) );
48
+        add_action( 'getpaid_invoice_line_items', array( $this, 'thankyou_page' ), 40 );
49
+        add_action( 'wpinv_pdf_content_billing', array( $this, 'thankyou_page' ), 11 );
50
+        add_action( 'wpinv_email_invoice_details', array( $this, 'email_instructions' ), 10, 3 );
51 51
 
52 52
     }
53 53
 
54 54
     /**
55
-	 * Process Payment.
56
-	 *
57
-	 *
58
-	 * @param WPInv_Invoice $invoice Invoice.
59
-	 * @param array $submission_data Posted checkout fields.
60
-	 * @param GetPaid_Payment_Form_Submission $submission Checkout submission.
61
-	 * @return array
62
-	 */
63
-	public function process_payment( $invoice, $submission_data, $submission ) {
55
+     * Process Payment.
56
+     *
57
+     *
58
+     * @param WPInv_Invoice $invoice Invoice.
59
+     * @param array $submission_data Posted checkout fields.
60
+     * @param GetPaid_Payment_Form_Submission $submission Checkout submission.
61
+     * @return array
62
+     */
63
+    public function process_payment( $invoice, $submission_data, $submission ) {
64 64
 
65 65
         // Add a transaction id.
66 66
         $invoice->set_transaction_id( $invoice->generate_key('trans_') );
@@ -81,66 +81,66 @@  discard block
 block discarded – undo
81 81
     }
82 82
 
83 83
     /**
84
-	 * Output for the order received page.
85
-	 *
86
-	 * @param WPInv_Invoice $invoice Invoice.
87
-	 */
88
-	public function thankyou_page( $invoice ) {
84
+     * Output for the order received page.
85
+     *
86
+     * @param WPInv_Invoice $invoice Invoice.
87
+     */
88
+    public function thankyou_page( $invoice ) {
89 89
 
90 90
         if ( 'bank_transfer' === $invoice->get_gateway() && $invoice->needs_payment() ) {
91 91
 
92
-			echo '<div class="mt-4 mb-2 getpaid-bank-transfer-details">' . PHP_EOL;
92
+            echo '<div class="mt-4 mb-2 getpaid-bank-transfer-details">' . PHP_EOL;
93 93
 
94 94
             if ( ! empty( $this->instructions ) ) {
95 95
                 echo wp_kses_post( wpautop( wptexturize( $this->instructions ) ) );
96
-			}
96
+            }
97 97
 
98
-			$this->bank_details( $invoice );
98
+            $this->bank_details( $invoice );
99 99
 
100
-			echo '</div>';
100
+            echo '</div>';
101 101
 
102 102
         }
103 103
 
104
-	}
104
+    }
105 105
 
106 106
     /**
107
-	 * Add content to the WPI emails.
108
-	 *
109
-	 * @param WPInv_Invoice $invoice Invoice.
110
-	 * @param string     $email_type Email format: plain text or HTML.
111
-	 * @param bool     $sent_to_admin Sent to admin.
112
-	 */
113
-	public function email_instructions( $invoice, $email_type, $sent_to_admin ) {
107
+     * Add content to the WPI emails.
108
+     *
109
+     * @param WPInv_Invoice $invoice Invoice.
110
+     * @param string     $email_type Email format: plain text or HTML.
111
+     * @param bool     $sent_to_admin Sent to admin.
112
+     */
113
+    public function email_instructions( $invoice, $email_type, $sent_to_admin ) {
114 114
 
115
-		if ( ! $sent_to_admin && 'bank_transfer' === $invoice->get_gateway() && $invoice->needs_payment() ) {
115
+        if ( ! $sent_to_admin && 'bank_transfer' === $invoice->get_gateway() && $invoice->needs_payment() ) {
116 116
 
117
-			echo '<div class="wpi-email-row getpaid-bank-transfer-details">';
117
+            echo '<div class="wpi-email-row getpaid-bank-transfer-details">';
118 118
 
119
-			if ( $this->instructions ) {
120
-				echo wp_kses_post( wpautop( wptexturize( $this->instructions ) ) . PHP_EOL );
119
+            if ( $this->instructions ) {
120
+                echo wp_kses_post( wpautop( wptexturize( $this->instructions ) ) . PHP_EOL );
121 121
             }
122 122
 
123
-			$this->bank_details( $invoice );
123
+            $this->bank_details( $invoice );
124 124
 			
125
-			echo '</div>';
125
+            echo '</div>';
126 126
 
127
-		}
127
+        }
128 128
 
129 129
     }
130 130
     
131 131
     /**
132
-	 * Get bank details and place into a list format.
133
-	 *
134
-	 * @param WPInv_Invoice $invoice Invoice.
135
-	 */
136
-	protected function bank_details( $invoice ) {
132
+     * Get bank details and place into a list format.
133
+     *
134
+     * @param WPInv_Invoice $invoice Invoice.
135
+     */
136
+    protected function bank_details( $invoice ) {
137 137
 
138
-		// Get the invoice country and country $locale.
139
-		$country = $invoice->get_country();
140
-		$locale  = $this->get_country_locale();
138
+        // Get the invoice country and country $locale.
139
+        $country = $invoice->get_country();
140
+        $locale  = $this->get_country_locale();
141 141
 
142
-		// Get sortcode label in the $locale array and use appropriate one.
143
-		$sortcode = isset( $locale[ $country ]['sortcode']['label'] ) ? $locale[ $country ]['sortcode']['label'] : __( 'Sort code', 'invoicing' );
142
+        // Get sortcode label in the $locale array and use appropriate one.
143
+        $sortcode = isset( $locale[ $country ]['sortcode']['label'] ) ? $locale[ $country ]['sortcode']['label'] : __( 'Sort code', 'invoicing' );
144 144
 
145 145
         $bank_fields = array(
146 146
             'ac_name'     => __( 'Account Name', 'invoicing' ),
@@ -169,144 +169,144 @@  discard block
 block discarded – undo
169 169
             return;
170 170
         }
171 171
 
172
-		echo '<h3 class="getpaid-bank-transfer-title"> ' . apply_filters( 'wpinv_receipt_bank_details_title', __( 'Bank Details', 'invoicing' ) ) . '</h3>' . PHP_EOL;
172
+        echo '<h3 class="getpaid-bank-transfer-title"> ' . apply_filters( 'wpinv_receipt_bank_details_title', __( 'Bank Details', 'invoicing' ) ) . '</h3>' . PHP_EOL;
173 173
 
174
-		echo '<table class="table table-bordered getpaid-bank-transfer-details">' . PHP_EOL;
174
+        echo '<table class="table table-bordered getpaid-bank-transfer-details">' . PHP_EOL;
175 175
 
176
-		foreach ( $bank_info as $key => $data ) {
176
+        foreach ( $bank_info as $key => $data ) {
177 177
 
178
-			$key   = sanitize_html_class( $key );
179
-			$label = wp_kses_post( $data['label'] );
180
-			$value = wp_kses_post( wptexturize( $data['value'] ) );
178
+            $key   = sanitize_html_class( $key );
179
+            $label = wp_kses_post( $data['label'] );
180
+            $value = wp_kses_post( wptexturize( $data['value'] ) );
181 181
 
182
-			echo "<tr class='getpaid-bank-transfer-$key'><th>$label</th><td>$value</td></tr>" . PHP_EOL;
183
-		}
182
+            echo "<tr class='getpaid-bank-transfer-$key'><th>$label</th><td>$value</td></tr>" . PHP_EOL;
183
+        }
184 184
 
185
-		echo '</table>';
185
+        echo '</table>';
186 186
 
187 187
     }
188 188
     
189 189
     /**
190
-	 * Get country locale if localized.
191
-	 *
192
-	 * @return array
193
-	 */
194
-	public function get_country_locale() {
195
-
196
-		if ( empty( $this->locale ) ) {
197
-
198
-			// Locale information to be used - only those that are not 'Sort Code'.
199
-			$this->locale = apply_filters(
200
-				'getpaid_get_bank_transfer_locale',
201
-				array(
202
-					'AU' => array(
203
-						'sortcode' => array(
204
-							'label' => __( 'BSB', 'invoicing' ),
205
-						),
206
-					),
207
-					'CA' => array(
208
-						'sortcode' => array(
209
-							'label' => __( 'Bank transit number', 'invoicing' ),
210
-						),
211
-					),
212
-					'IN' => array(
213
-						'sortcode' => array(
214
-							'label' => __( 'IFSC', 'invoicing' ),
215
-						),
216
-					),
217
-					'IT' => array(
218
-						'sortcode' => array(
219
-							'label' => __( 'Branch sort', 'invoicing' ),
220
-						),
221
-					),
222
-					'NZ' => array(
223
-						'sortcode' => array(
224
-							'label' => __( 'Bank code', 'invoicing' ),
225
-						),
226
-					),
227
-					'SE' => array(
228
-						'sortcode' => array(
229
-							'label' => __( 'Bank code', 'invoicing' ),
230
-						),
231
-					),
232
-					'US' => array(
233
-						'sortcode' => array(
234
-							'label' => __( 'Routing number', 'invoicing' ),
235
-						),
236
-					),
237
-					'ZA' => array(
238
-						'sortcode' => array(
239
-							'label' => __( 'Branch code', 'invoicing' ),
240
-						),
241
-					),
242
-				)
243
-			);
244
-
245
-		}
246
-
247
-		return $this->locale;
248
-
249
-	}
250
-
251
-	/**
252
-	 * Filters the gateway settings.
253
-	 * 
254
-	 * @param array $admin_settings
255
-	 */
256
-	public function admin_settings( $admin_settings ) {
190
+     * Get country locale if localized.
191
+     *
192
+     * @return array
193
+     */
194
+    public function get_country_locale() {
195
+
196
+        if ( empty( $this->locale ) ) {
197
+
198
+            // Locale information to be used - only those that are not 'Sort Code'.
199
+            $this->locale = apply_filters(
200
+                'getpaid_get_bank_transfer_locale',
201
+                array(
202
+                    'AU' => array(
203
+                        'sortcode' => array(
204
+                            'label' => __( 'BSB', 'invoicing' ),
205
+                        ),
206
+                    ),
207
+                    'CA' => array(
208
+                        'sortcode' => array(
209
+                            'label' => __( 'Bank transit number', 'invoicing' ),
210
+                        ),
211
+                    ),
212
+                    'IN' => array(
213
+                        'sortcode' => array(
214
+                            'label' => __( 'IFSC', 'invoicing' ),
215
+                        ),
216
+                    ),
217
+                    'IT' => array(
218
+                        'sortcode' => array(
219
+                            'label' => __( 'Branch sort', 'invoicing' ),
220
+                        ),
221
+                    ),
222
+                    'NZ' => array(
223
+                        'sortcode' => array(
224
+                            'label' => __( 'Bank code', 'invoicing' ),
225
+                        ),
226
+                    ),
227
+                    'SE' => array(
228
+                        'sortcode' => array(
229
+                            'label' => __( 'Bank code', 'invoicing' ),
230
+                        ),
231
+                    ),
232
+                    'US' => array(
233
+                        'sortcode' => array(
234
+                            'label' => __( 'Routing number', 'invoicing' ),
235
+                        ),
236
+                    ),
237
+                    'ZA' => array(
238
+                        'sortcode' => array(
239
+                            'label' => __( 'Branch code', 'invoicing' ),
240
+                        ),
241
+                    ),
242
+                )
243
+            );
244
+
245
+        }
246
+
247
+        return $this->locale;
248
+
249
+    }
250
+
251
+    /**
252
+     * Filters the gateway settings.
253
+     * 
254
+     * @param array $admin_settings
255
+     */
256
+    public function admin_settings( $admin_settings ) {
257 257
 
258 258
         $admin_settings['bank_transfer_desc']['std']    = __( "Make your payment directly into our bank account. Please use your Invoice Number as the payment reference. Your invoice won't be processed until the funds have cleared in our account.", 'invoicing' );
259
-		$admin_settings['bank_transfer_active']['desc'] = __( 'Enable bank transfer', 'invoicing' );
259
+        $admin_settings['bank_transfer_active']['desc'] = __( 'Enable bank transfer', 'invoicing' );
260 260
 
261
-		$locale  = $this->get_country_locale();
261
+        $locale  = $this->get_country_locale();
262 262
 
263
-		// Get sortcode label in the $locale array and use appropriate one.
264
-		$country  = wpinv_default_billing_country();
265
-		$sortcode = isset( $locale[ $country ]['sortcode']['label'] ) ? $locale[ $country ]['sortcode']['label'] : __( 'Sort code', 'invoicing' );
263
+        // Get sortcode label in the $locale array and use appropriate one.
264
+        $country  = wpinv_default_billing_country();
265
+        $sortcode = isset( $locale[ $country ]['sortcode']['label'] ) ? $locale[ $country ]['sortcode']['label'] : __( 'Sort code', 'invoicing' );
266 266
 
267
-		$admin_settings['bank_transfer_ac_name'] = array(
267
+        $admin_settings['bank_transfer_ac_name'] = array(
268 268
             'type' => 'text',
269 269
             'id'   => 'bank_transfer_ac_name',
270 270
             'name' => __( 'Account Name', 'invoicing' ),
271
-		);
271
+        );
272 272
 		
273
-		$admin_settings['bank_transfer_ac_no'] = array(
273
+        $admin_settings['bank_transfer_ac_no'] = array(
274 274
             'type' => 'text',
275 275
             'id'   => 'bank_transfer_ac_no',
276 276
             'name' => __( 'Account Number', 'invoicing' ),
277
-		);
277
+        );
278 278
 		
279
-		$admin_settings['bank_transfer_bank_name'] = array(
279
+        $admin_settings['bank_transfer_bank_name'] = array(
280 280
             'type' => 'text',
281 281
             'id'   => 'bank_transfer_bank_name',
282 282
             'name' => __( 'Bank Name', 'invoicing' ),
283
-		);
283
+        );
284 284
 
285
-		$admin_settings['bank_transfer_ifsc'] = array(
285
+        $admin_settings['bank_transfer_ifsc'] = array(
286 286
             'type' => 'text',
287 287
             'id'   => 'bank_transfer_ifsc',
288 288
             'name' => __( 'IFSC Code', 'invoicing' ),
289
-		);
289
+        );
290 290
 
291
-		$admin_settings['bank_transfer_iban'] = array(
291
+        $admin_settings['bank_transfer_iban'] = array(
292 292
             'type' => 'text',
293 293
             'id'   => 'bank_transfer_iban',
294 294
             'name' => __( 'IBAN', 'invoicing' ),
295
-		);
295
+        );
296 296
 
297
-		$admin_settings['bank_transfer_bic'] = array(
297
+        $admin_settings['bank_transfer_bic'] = array(
298 298
             'type' => 'text',
299 299
             'id'   => 'bank_transfer_bic',
300 300
             'name' => __( 'BIC/Swift Code', 'invoicing' ),
301
-		);
301
+        );
302 302
 		
303
-		$admin_settings['bank_transfer_sort_code'] = array(
304
-			'type' => 'text',
305
-			'id'   => 'bank_transfer_sort_code',
306
-			'name' => $sortcode,
307
-		);
303
+        $admin_settings['bank_transfer_sort_code'] = array(
304
+            'type' => 'text',
305
+            'id'   => 'bank_transfer_sort_code',
306
+            'name' => $sortcode,
307
+        );
308 308
 
309
-		$admin_settings['bank_transfer_info'] = array(
309
+        $admin_settings['bank_transfer_info'] = array(
310 310
             'id'   => 'bank_transfer_info',
311 311
             'name' => __( 'Instructions', 'invoicing' ),
312 312
             'desc' => __( 'Instructions that will be added to the thank you page and emails.', 'invoicing' ),
@@ -316,17 +316,17 @@  discard block
 block discarded – undo
316 316
             'rows' => 5
317 317
         );
318 318
 
319
-		return $admin_settings;
320
-	}
319
+        return $admin_settings;
320
+    }
321 321
 
322
-	/**
323
-	 * Processes invoice addons.
324
-	 *
325
-	 * @param WPInv_Invoice $invoice
326
-	 * @param GetPaid_Form_Item[] $items
327
-	 * @return WPInv_Invoice
328
-	 */
329
-	public function process_addons( $invoice, $items ) {
322
+    /**
323
+     * Processes invoice addons.
324
+     *
325
+     * @param WPInv_Invoice $invoice
326
+     * @param GetPaid_Form_Item[] $items
327
+     * @return WPInv_Invoice
328
+     */
329
+    public function process_addons( $invoice, $items ) {
330 330
 
331 331
         foreach ( $items as $item ) {
332 332
             $invoice->add_item( $item );
@@ -334,6 +334,6 @@  discard block
 block discarded – undo
334 334
 
335 335
         $invoice->recalculate_total();
336 336
         $invoice->save();
337
-	}
337
+    }
338 338
 
339 339
 }
Please login to merge, or discard this patch.
Spacing   +71 added lines, -71 removed lines patch added patch discarded remove patch
@@ -4,7 +4,7 @@  discard block
 block discarded – undo
4 4
  *
5 5
  */
6 6
 
7
-defined( 'ABSPATH' ) || exit;
7
+defined('ABSPATH') || exit;
8 8
 
9 9
 /**
10 10
  * Bank transfer Payment Gateway class.
@@ -24,7 +24,7 @@  discard block
 block discarded – undo
24 24
 	 *
25 25
 	 * @var array
26 26
 	 */
27
-	protected $supports = array( 'addons' );
27
+	protected $supports = array('addons');
28 28
 
29 29
     /**
30 30
 	 * Payment method order.
@@ -39,15 +39,15 @@  discard block
 block discarded – undo
39 39
 	public function __construct() {
40 40
         parent::__construct();
41 41
 
42
-        $this->title                = __( 'Direct bank transfer', 'invoicing' );
43
-        $this->method_title         = __( 'Bank transfer', 'invoicing' );
44
-        $this->checkout_button_text = __( 'Proceed', 'invoicing' );
45
-        $this->instructions         = apply_filters( 'wpinv_bank_instructions', $this->get_option( 'info' ) );
42
+        $this->title                = __('Direct bank transfer', 'invoicing');
43
+        $this->method_title         = __('Bank transfer', 'invoicing');
44
+        $this->checkout_button_text = __('Proceed', 'invoicing');
45
+        $this->instructions         = apply_filters('wpinv_bank_instructions', $this->get_option('info'));
46 46
 
47
-		add_action( 'wpinv_receipt_end', array( $this, 'thankyou_page' ) );
48
-		add_action( 'getpaid_invoice_line_items', array( $this, 'thankyou_page' ), 40 );
49
-		add_action( 'wpinv_pdf_content_billing', array( $this, 'thankyou_page' ), 11 );
50
-		add_action( 'wpinv_email_invoice_details', array( $this, 'email_instructions' ), 10, 3 );
47
+		add_action('wpinv_receipt_end', array($this, 'thankyou_page'));
48
+		add_action('getpaid_invoice_line_items', array($this, 'thankyou_page'), 40);
49
+		add_action('wpinv_pdf_content_billing', array($this, 'thankyou_page'), 11);
50
+		add_action('wpinv_email_invoice_details', array($this, 'email_instructions'), 10, 3);
51 51
 
52 52
     }
53 53
 
@@ -60,23 +60,23 @@  discard block
 block discarded – undo
60 60
 	 * @param GetPaid_Payment_Form_Submission $submission Checkout submission.
61 61
 	 * @return array
62 62
 	 */
63
-	public function process_payment( $invoice, $submission_data, $submission ) {
63
+	public function process_payment($invoice, $submission_data, $submission) {
64 64
 
65 65
         // Add a transaction id.
66
-        $invoice->set_transaction_id( $invoice->generate_key('trans_') );
66
+        $invoice->set_transaction_id($invoice->generate_key('trans_'));
67 67
 
68 68
         // Set it as pending payment.
69
-        if ( ! $invoice->needs_payment() ) {
69
+        if (!$invoice->needs_payment()) {
70 70
             $invoice->mark_paid();
71
-        } else if ( ! $invoice->is_paid() ) {
72
-            $invoice->set_status( 'wpi-onhold' );
71
+        } else if (!$invoice->is_paid()) {
72
+            $invoice->set_status('wpi-onhold');
73 73
         }
74 74
 
75 75
         // Save it.
76 76
         $invoice->save();
77 77
 
78 78
         // Send to the success page.
79
-        wpinv_send_to_success_page( array( 'invoice_key' => $invoice->get_key() ) );
79
+        wpinv_send_to_success_page(array('invoice_key' => $invoice->get_key()));
80 80
 
81 81
     }
82 82
 
@@ -85,17 +85,17 @@  discard block
 block discarded – undo
85 85
 	 *
86 86
 	 * @param WPInv_Invoice $invoice Invoice.
87 87
 	 */
88
-	public function thankyou_page( $invoice ) {
88
+	public function thankyou_page($invoice) {
89 89
 
90
-        if ( 'bank_transfer' === $invoice->get_gateway() && $invoice->needs_payment() ) {
90
+        if ('bank_transfer' === $invoice->get_gateway() && $invoice->needs_payment()) {
91 91
 
92 92
 			echo '<div class="mt-4 mb-2 getpaid-bank-transfer-details">' . PHP_EOL;
93 93
 
94
-            if ( ! empty( $this->instructions ) ) {
95
-                echo wp_kses_post( wpautop( wptexturize( $this->instructions ) ) );
94
+            if (!empty($this->instructions)) {
95
+                echo wp_kses_post(wpautop(wptexturize($this->instructions)));
96 96
 			}
97 97
 
98
-			$this->bank_details( $invoice );
98
+			$this->bank_details($invoice);
99 99
 
100 100
 			echo '</div>';
101 101
 
@@ -110,17 +110,17 @@  discard block
 block discarded – undo
110 110
 	 * @param string     $email_type Email format: plain text or HTML.
111 111
 	 * @param bool     $sent_to_admin Sent to admin.
112 112
 	 */
113
-	public function email_instructions( $invoice, $email_type, $sent_to_admin ) {
113
+	public function email_instructions($invoice, $email_type, $sent_to_admin) {
114 114
 
115
-		if ( ! $sent_to_admin && 'bank_transfer' === $invoice->get_gateway() && $invoice->needs_payment() ) {
115
+		if (!$sent_to_admin && 'bank_transfer' === $invoice->get_gateway() && $invoice->needs_payment()) {
116 116
 
117 117
 			echo '<div class="wpi-email-row getpaid-bank-transfer-details">';
118 118
 
119
-			if ( $this->instructions ) {
120
-				echo wp_kses_post( wpautop( wptexturize( $this->instructions ) ) . PHP_EOL );
119
+			if ($this->instructions) {
120
+				echo wp_kses_post(wpautop(wptexturize($this->instructions)) . PHP_EOL);
121 121
             }
122 122
 
123
-			$this->bank_details( $invoice );
123
+			$this->bank_details($invoice);
124 124
 			
125 125
 			echo '</div>';
126 126
 
@@ -133,51 +133,51 @@  discard block
 block discarded – undo
133 133
 	 *
134 134
 	 * @param WPInv_Invoice $invoice Invoice.
135 135
 	 */
136
-	protected function bank_details( $invoice ) {
136
+	protected function bank_details($invoice) {
137 137
 
138 138
 		// Get the invoice country and country $locale.
139 139
 		$country = $invoice->get_country();
140 140
 		$locale  = $this->get_country_locale();
141 141
 
142 142
 		// Get sortcode label in the $locale array and use appropriate one.
143
-		$sortcode = isset( $locale[ $country ]['sortcode']['label'] ) ? $locale[ $country ]['sortcode']['label'] : __( 'Sort code', 'invoicing' );
143
+		$sortcode = isset($locale[$country]['sortcode']['label']) ? $locale[$country]['sortcode']['label'] : __('Sort code', 'invoicing');
144 144
 
145 145
         $bank_fields = array(
146
-            'ac_name'     => __( 'Account Name', 'invoicing' ),
147
-            'ac_no'       => __( 'Account Number', 'invoicing' ),
148
-            'bank_name'   => __( 'Bank Name', 'invoicing' ),
149
-            'ifsc'        => __( 'IFSC code', 'invoicing' ),
150
-            'iban'        => __( 'IBAN', 'invoicing' ),
151
-            'bic'         => __( 'BIC/Swift code', 'invoicing' ),
146
+            'ac_name'     => __('Account Name', 'invoicing'),
147
+            'ac_no'       => __('Account Number', 'invoicing'),
148
+            'bank_name'   => __('Bank Name', 'invoicing'),
149
+            'ifsc'        => __('IFSC code', 'invoicing'),
150
+            'iban'        => __('IBAN', 'invoicing'),
151
+            'bic'         => __('BIC/Swift code', 'invoicing'),
152 152
             'sort_code'   => $sortcode,
153 153
         );
154 154
 
155 155
         $bank_info = array();
156 156
 
157
-        foreach ( $bank_fields as $field => $label ) {
158
-            $value = $this->get_option( $field );
157
+        foreach ($bank_fields as $field => $label) {
158
+            $value = $this->get_option($field);
159 159
 
160
-            if ( ! empty( $value ) ) {
161
-                $bank_info[$field] = array( 'label' => $label, 'value' => $value );
160
+            if (!empty($value)) {
161
+                $bank_info[$field] = array('label' => $label, 'value' => $value);
162 162
             }
163 163
 
164 164
         }
165 165
 
166
-        $bank_info = apply_filters( 'wpinv_bank_info', $bank_info );
166
+        $bank_info = apply_filters('wpinv_bank_info', $bank_info);
167 167
 
168
-        if ( empty( $bank_info ) ) {
168
+        if (empty($bank_info)) {
169 169
             return;
170 170
         }
171 171
 
172
-		echo '<h3 class="getpaid-bank-transfer-title"> ' . apply_filters( 'wpinv_receipt_bank_details_title', __( 'Bank Details', 'invoicing' ) ) . '</h3>' . PHP_EOL;
172
+		echo '<h3 class="getpaid-bank-transfer-title"> ' . apply_filters('wpinv_receipt_bank_details_title', __('Bank Details', 'invoicing')) . '</h3>' . PHP_EOL;
173 173
 
174 174
 		echo '<table class="table table-bordered getpaid-bank-transfer-details">' . PHP_EOL;
175 175
 
176
-		foreach ( $bank_info as $key => $data ) {
176
+		foreach ($bank_info as $key => $data) {
177 177
 
178
-			$key   = sanitize_html_class( $key );
179
-			$label = wp_kses_post( $data['label'] );
180
-			$value = wp_kses_post( wptexturize( $data['value'] ) );
178
+			$key   = sanitize_html_class($key);
179
+			$label = wp_kses_post($data['label']);
180
+			$value = wp_kses_post(wptexturize($data['value']));
181 181
 
182 182
 			echo "<tr class='getpaid-bank-transfer-$key'><th>$label</th><td>$value</td></tr>" . PHP_EOL;
183 183
 		}
@@ -193,7 +193,7 @@  discard block
 block discarded – undo
193 193
 	 */
194 194
 	public function get_country_locale() {
195 195
 
196
-		if ( empty( $this->locale ) ) {
196
+		if (empty($this->locale)) {
197 197
 
198 198
 			// Locale information to be used - only those that are not 'Sort Code'.
199 199
 			$this->locale = apply_filters(
@@ -201,42 +201,42 @@  discard block
 block discarded – undo
201 201
 				array(
202 202
 					'AU' => array(
203 203
 						'sortcode' => array(
204
-							'label' => __( 'BSB', 'invoicing' ),
204
+							'label' => __('BSB', 'invoicing'),
205 205
 						),
206 206
 					),
207 207
 					'CA' => array(
208 208
 						'sortcode' => array(
209
-							'label' => __( 'Bank transit number', 'invoicing' ),
209
+							'label' => __('Bank transit number', 'invoicing'),
210 210
 						),
211 211
 					),
212 212
 					'IN' => array(
213 213
 						'sortcode' => array(
214
-							'label' => __( 'IFSC', 'invoicing' ),
214
+							'label' => __('IFSC', 'invoicing'),
215 215
 						),
216 216
 					),
217 217
 					'IT' => array(
218 218
 						'sortcode' => array(
219
-							'label' => __( 'Branch sort', 'invoicing' ),
219
+							'label' => __('Branch sort', 'invoicing'),
220 220
 						),
221 221
 					),
222 222
 					'NZ' => array(
223 223
 						'sortcode' => array(
224
-							'label' => __( 'Bank code', 'invoicing' ),
224
+							'label' => __('Bank code', 'invoicing'),
225 225
 						),
226 226
 					),
227 227
 					'SE' => array(
228 228
 						'sortcode' => array(
229
-							'label' => __( 'Bank code', 'invoicing' ),
229
+							'label' => __('Bank code', 'invoicing'),
230 230
 						),
231 231
 					),
232 232
 					'US' => array(
233 233
 						'sortcode' => array(
234
-							'label' => __( 'Routing number', 'invoicing' ),
234
+							'label' => __('Routing number', 'invoicing'),
235 235
 						),
236 236
 					),
237 237
 					'ZA' => array(
238 238
 						'sortcode' => array(
239
-							'label' => __( 'Branch code', 'invoicing' ),
239
+							'label' => __('Branch code', 'invoicing'),
240 240
 						),
241 241
 					),
242 242
 				)
@@ -253,51 +253,51 @@  discard block
 block discarded – undo
253 253
 	 * 
254 254
 	 * @param array $admin_settings
255 255
 	 */
256
-	public function admin_settings( $admin_settings ) {
256
+	public function admin_settings($admin_settings) {
257 257
 
258
-        $admin_settings['bank_transfer_desc']['std']    = __( "Make your payment directly into our bank account. Please use your Invoice Number as the payment reference. Your invoice won't be processed until the funds have cleared in our account.", 'invoicing' );
259
-		$admin_settings['bank_transfer_active']['desc'] = __( 'Enable bank transfer', 'invoicing' );
258
+        $admin_settings['bank_transfer_desc']['std'] = __("Make your payment directly into our bank account. Please use your Invoice Number as the payment reference. Your invoice won't be processed until the funds have cleared in our account.", 'invoicing');
259
+		$admin_settings['bank_transfer_active']['desc'] = __('Enable bank transfer', 'invoicing');
260 260
 
261
-		$locale  = $this->get_country_locale();
261
+		$locale = $this->get_country_locale();
262 262
 
263 263
 		// Get sortcode label in the $locale array and use appropriate one.
264 264
 		$country  = wpinv_default_billing_country();
265
-		$sortcode = isset( $locale[ $country ]['sortcode']['label'] ) ? $locale[ $country ]['sortcode']['label'] : __( 'Sort code', 'invoicing' );
265
+		$sortcode = isset($locale[$country]['sortcode']['label']) ? $locale[$country]['sortcode']['label'] : __('Sort code', 'invoicing');
266 266
 
267 267
 		$admin_settings['bank_transfer_ac_name'] = array(
268 268
             'type' => 'text',
269 269
             'id'   => 'bank_transfer_ac_name',
270
-            'name' => __( 'Account Name', 'invoicing' ),
270
+            'name' => __('Account Name', 'invoicing'),
271 271
 		);
272 272
 		
273 273
 		$admin_settings['bank_transfer_ac_no'] = array(
274 274
             'type' => 'text',
275 275
             'id'   => 'bank_transfer_ac_no',
276
-            'name' => __( 'Account Number', 'invoicing' ),
276
+            'name' => __('Account Number', 'invoicing'),
277 277
 		);
278 278
 		
279 279
 		$admin_settings['bank_transfer_bank_name'] = array(
280 280
             'type' => 'text',
281 281
             'id'   => 'bank_transfer_bank_name',
282
-            'name' => __( 'Bank Name', 'invoicing' ),
282
+            'name' => __('Bank Name', 'invoicing'),
283 283
 		);
284 284
 
285 285
 		$admin_settings['bank_transfer_ifsc'] = array(
286 286
             'type' => 'text',
287 287
             'id'   => 'bank_transfer_ifsc',
288
-            'name' => __( 'IFSC Code', 'invoicing' ),
288
+            'name' => __('IFSC Code', 'invoicing'),
289 289
 		);
290 290
 
291 291
 		$admin_settings['bank_transfer_iban'] = array(
292 292
             'type' => 'text',
293 293
             'id'   => 'bank_transfer_iban',
294
-            'name' => __( 'IBAN', 'invoicing' ),
294
+            'name' => __('IBAN', 'invoicing'),
295 295
 		);
296 296
 
297 297
 		$admin_settings['bank_transfer_bic'] = array(
298 298
             'type' => 'text',
299 299
             'id'   => 'bank_transfer_bic',
300
-            'name' => __( 'BIC/Swift Code', 'invoicing' ),
300
+            'name' => __('BIC/Swift Code', 'invoicing'),
301 301
 		);
302 302
 		
303 303
 		$admin_settings['bank_transfer_sort_code'] = array(
@@ -308,10 +308,10 @@  discard block
 block discarded – undo
308 308
 
309 309
 		$admin_settings['bank_transfer_info'] = array(
310 310
             'id'   => 'bank_transfer_info',
311
-            'name' => __( 'Instructions', 'invoicing' ),
312
-            'desc' => __( 'Instructions that will be added to the thank you page and emails.', 'invoicing' ),
311
+            'name' => __('Instructions', 'invoicing'),
312
+            'desc' => __('Instructions that will be added to the thank you page and emails.', 'invoicing'),
313 313
             'type' => 'textarea',
314
-            'std'  => __( "Make your payment directly into our bank account. Please use your Invoice Number as the payment reference. Your invoice won't be processed until the funds have cleared in our account.", 'invoicing' ),
314
+            'std'  => __("Make your payment directly into our bank account. Please use your Invoice Number as the payment reference. Your invoice won't be processed until the funds have cleared in our account.", 'invoicing'),
315 315
             'cols' => 50,
316 316
             'rows' => 5
317 317
         );
@@ -326,10 +326,10 @@  discard block
 block discarded – undo
326 326
 	 * @param GetPaid_Form_Item[] $items
327 327
 	 * @return WPInv_Invoice
328 328
 	 */
329
-	public function process_addons( $invoice, $items ) {
329
+	public function process_addons($invoice, $items) {
330 330
 
331
-        foreach ( $items as $item ) {
332
-            $invoice->add_item( $item );
331
+        foreach ($items as $item) {
332
+            $invoice->add_item($item);
333 333
         }
334 334
 
335 335
         $invoice->recalculate_total();
Please login to merge, or discard this patch.
includes/data/admin-settings.php 1 patch
Spacing   +161 added lines, -161 removed lines patch added patch discarded remove patch
@@ -8,197 +8,197 @@  discard block
 block discarded – undo
8 8
  * @version 1.0.19
9 9
  */
10 10
 
11
-defined( 'ABSPATH' ) || exit;
11
+defined('ABSPATH') || exit;
12 12
 
13
-$pages = wpinv_get_pages( true );
13
+$pages = wpinv_get_pages(true);
14 14
     
15 15
 $currencies = wpinv_get_currencies();
16 16
     
17 17
 $currency_code_options = array();
18
-foreach ( $currencies as $code => $name ) {
19
-    $currency_code_options[ $code ] = $code . ' - ' . $name . ' (' . wpinv_currency_symbol( $code ) . ')';
18
+foreach ($currencies as $code => $name) {
19
+    $currency_code_options[$code] = $code . ' - ' . $name . ' (' . wpinv_currency_symbol($code) . ')';
20 20
 }
21 21
     
22 22
 $due_payment_options       = array();
23
-$due_payment_options[0]    = __( 'Now', 'invoicing' );
24
-for ( $i = 1; $i <= 30; $i++ ) {
23
+$due_payment_options[0]    = __('Now', 'invoicing');
24
+for ($i = 1; $i <= 30; $i++) {
25 25
     $due_payment_options[$i] = $i;
26 26
 }
27 27
     
28 28
 $invoice_number_padd_options = array();
29
-for ( $i = 0; $i <= 20; $i++ ) {
29
+for ($i = 0; $i <= 20; $i++) {
30 30
     $invoice_number_padd_options[$i] = $i;
31 31
 }
32 32
     
33 33
 $currency_symbol = wpinv_currency_symbol();
34 34
     
35 35
 $last_number = $reset_number = '';
36
-if ( $last_invoice_number = get_option( 'wpinv_last_invoice_number' ) ) {
37
-    $last_invoice_number = preg_replace( '/[^0-9]/', '', $last_invoice_number );
36
+if ($last_invoice_number = get_option('wpinv_last_invoice_number')) {
37
+    $last_invoice_number = preg_replace('/[^0-9]/', '', $last_invoice_number);
38 38
 
39
-    if ( !empty( $last_invoice_number ) ) {
40
-        $last_number = ' ' . wp_sprintf( __( "( Last Invoice's sequential number: <b>%s</b> )", 'invoicing' ), $last_invoice_number );
39
+    if (!empty($last_invoice_number)) {
40
+        $last_number = ' ' . wp_sprintf(__("( Last Invoice's sequential number: <b>%s</b> )", 'invoicing'), $last_invoice_number);
41 41
     }
42 42
 
43 43
     $nonce = wp_create_nonce('reset_invoice_count');
44
-    $reset_number = '<a href="'.add_query_arg(array('reset_invoice_count' => 1, '_nonce' => $nonce)).'" class="btn button">'.__('Force Reset Sequence', 'invoicing' ). '</a>';
44
+    $reset_number = '<a href="' . add_query_arg(array('reset_invoice_count' => 1, '_nonce' => $nonce)) . '" class="btn button">' . __('Force Reset Sequence', 'invoicing') . '</a>';
45 45
 }
46 46
     
47 47
 $alert_wrapper_start = '<p style="color: #F00">';
48 48
 $alert_wrapper_close = '</p>';
49 49
 
50 50
 return array(
51
-    'general' => apply_filters( 'wpinv_settings_general',
51
+    'general' => apply_filters('wpinv_settings_general',
52 52
         array(
53 53
             'main' => array(
54 54
                 'location_settings' => array(
55 55
                     'id'   => 'location_settings',
56
-                    'name' => '<h3>' . __( 'Default Location', 'invoicing' ) . '</h3>',
56
+                    'name' => '<h3>' . __('Default Location', 'invoicing') . '</h3>',
57 57
                     'desc' => '',
58 58
                     'type' => 'header',
59 59
                 ),
60 60
                 'default_country' => array(
61 61
                     'id'      => 'default_country',
62
-                    'name'    => __( 'Default Country', 'invoicing' ),
63
-                    'desc'    => __( 'Where does your store operate from?', 'invoicing' ),
62
+                    'name'    => __('Default Country', 'invoicing'),
63
+                    'desc'    => __('Where does your store operate from?', 'invoicing'),
64 64
                     'type'    => 'select',
65 65
                     'options' => wpinv_get_country_list(),
66 66
                     'std'     => 'GB',
67 67
                     'class'   => 'wpi_select2',
68
-                    'placeholder' => __( 'Select a country', 'invoicing' ),
68
+                    'placeholder' => __('Select a country', 'invoicing'),
69 69
                 ),
70 70
                 'default_state' => array(
71 71
                     'id'      => 'default_state',
72
-                    'name'    => __( 'Default State / Province', 'invoicing' ),
73
-                    'desc'    => __( 'What state / province does your store operate from?', 'invoicing' ),
72
+                    'name'    => __('Default State / Province', 'invoicing'),
73
+                    'desc'    => __('What state / province does your store operate from?', 'invoicing'),
74 74
                     'type'    => 'country_states',
75 75
                     'class'   => 'wpi_select2',
76
-                    'placeholder' => __( 'Select a state', 'invoicing' ),
76
+                    'placeholder' => __('Select a state', 'invoicing'),
77 77
                 ),
78 78
                 'store_name' => array(
79 79
                     'id'   => 'store_name',
80
-                    'name' => __( 'Store Name', 'invoicing' ),
81
-                    'desc' => __( 'Store name to print on invoices.', 'invoicing' ),
80
+                    'name' => __('Store Name', 'invoicing'),
81
+                    'desc' => __('Store name to print on invoices.', 'invoicing'),
82 82
                     'std'     => get_option('blogname'),
83 83
                     'type' => 'text',
84 84
                 ),
85 85
                 'logo' => array(
86 86
                     'id'   => 'logo',
87
-                    'name' => __( 'Logo URL', 'invoicing' ),
88
-                    'desc' => __( 'Store logo to print on invoices.', 'invoicing' ),
87
+                    'name' => __('Logo URL', 'invoicing'),
88
+                    'desc' => __('Store logo to print on invoices.', 'invoicing'),
89 89
                     'type' => 'text',
90 90
                 ),
91 91
                 'store_address' => array(
92 92
                     'id'   => 'store_address',
93
-                    'name' => __( 'Store Address', 'invoicing' ),
94
-                    'desc' => __( 'Enter the store address to display on invoice', 'invoicing' ),
93
+                    'name' => __('Store Address', 'invoicing'),
94
+                    'desc' => __('Enter the store address to display on invoice', 'invoicing'),
95 95
                     'type' => 'textarea',
96 96
                 ),
97 97
                 'page_settings' => array(
98 98
                     'id'   => 'page_settings',
99
-                    'name' => '<h3>' . __( 'Page Settings', 'invoicing' ) . '</h3>',
99
+                    'name' => '<h3>' . __('Page Settings', 'invoicing') . '</h3>',
100 100
                     'desc' => '',
101 101
                     'type' => 'header',
102 102
                 ),
103 103
                 'checkout_page' => array(
104 104
                     'id'          => 'checkout_page',
105
-                    'name'        => __( 'Checkout Page', 'invoicing' ),
106
-                    'desc'        => __( 'This is the checkout page where buyers will complete their payments. The <b>[wpinv_checkout]</b> short code must be on this page.', 'invoicing' ),
105
+                    'name'        => __('Checkout Page', 'invoicing'),
106
+                    'desc'        => __('This is the checkout page where buyers will complete their payments. The <b>[wpinv_checkout]</b> short code must be on this page.', 'invoicing'),
107 107
                     'type'        => 'select',
108 108
                     'options'     => $pages,
109 109
                     'class'       => 'wpi_select2',
110
-                    'placeholder' => __( 'Select a page', 'invoicing' ),
110
+                    'placeholder' => __('Select a page', 'invoicing'),
111 111
                     'help-tip'    => true,
112 112
                 ),
113 113
                 'success_page' => array(
114 114
                     'id'          => 'success_page',
115
-                    'name'        => __( 'Success Page', 'invoicing' ),
116
-                    'desc'        => __( 'This is the page buyers are sent to after completing their payments. The <b>[wpinv_receipt]</b> short code should be on this page.', 'invoicing' ),
115
+                    'name'        => __('Success Page', 'invoicing'),
116
+                    'desc'        => __('This is the page buyers are sent to after completing their payments. The <b>[wpinv_receipt]</b> short code should be on this page.', 'invoicing'),
117 117
                     'type'        => 'select',
118 118
                     'options'     => $pages,
119 119
                     'class'       => 'wpi_select2',
120
-                    'placeholder' => __( 'Select a page', 'invoicing' ),
120
+                    'placeholder' => __('Select a page', 'invoicing'),
121 121
                     'help-tip'    => true,
122 122
                 ),
123 123
                 'failure_page' => array(
124 124
                     'id'          => 'failure_page',
125
-                    'name'        => __( 'Failed Transaction Page', 'invoicing' ),
126
-                    'desc'        => __( 'This is the page buyers are sent to if their transaction is cancelled or fails.', 'invoicing' ),
125
+                    'name'        => __('Failed Transaction Page', 'invoicing'),
126
+                    'desc'        => __('This is the page buyers are sent to if their transaction is cancelled or fails.', 'invoicing'),
127 127
                     'type'        => 'select',
128 128
                     'options'     => $pages,
129 129
                     'class'       => 'wpi_select2',
130
-                    'placeholder' => __( 'Select a page', 'invoicing' ),
130
+                    'placeholder' => __('Select a page', 'invoicing'),
131 131
                     'help-tip'    => true,
132 132
                 ),
133 133
                 'invoice_history_page' => array(
134 134
                     'id'          => 'invoice_history_page',
135
-                    'name'        => __( 'Invoice History Page', 'invoicing' ),
136
-                    'desc'        => __( 'This page shows an invoice history for the current user. The <b>[wpinv_history]</b> short code should be on this page.', 'invoicing' ),
135
+                    'name'        => __('Invoice History Page', 'invoicing'),
136
+                    'desc'        => __('This page shows an invoice history for the current user. The <b>[wpinv_history]</b> short code should be on this page.', 'invoicing'),
137 137
                     'type'        => 'select',
138 138
                     'options'     => $pages,
139 139
                     'class'       => 'wpi_select2',
140
-                    'placeholder' => __( 'Select a page', 'invoicing' ),
140
+                    'placeholder' => __('Select a page', 'invoicing'),
141 141
                     'help-tip'    => true,
142 142
                 ),
143 143
                 'invoice_subscription_page' => array(
144 144
                     'id'          => 'invoice_subscription_page',
145
-                    'name'        => __( 'Invoice Subscriptions Page', 'invoicing' ),
146
-                    'desc'        => __( 'This page shows subscriptions history for the current user. The <b>[wpinv_subscriptions]</b> short code should be on this page.', 'invoicing' ),
145
+                    'name'        => __('Invoice Subscriptions Page', 'invoicing'),
146
+                    'desc'        => __('This page shows subscriptions history for the current user. The <b>[wpinv_subscriptions]</b> short code should be on this page.', 'invoicing'),
147 147
                     'type'        => 'select',
148 148
                     'options'     => $pages,
149 149
                     'class'       => 'wpi_select2',
150
-                    'placeholder' => __( 'Select a page', 'invoicing' ),
150
+                    'placeholder' => __('Select a page', 'invoicing'),
151 151
                     'help-tip'    => true,
152 152
                 ),
153 153
             ),
154 154
             'currency_section' => array(
155 155
                 'currency_settings' => array(
156 156
                     'id'   => 'currency_settings',
157
-                    'name' => '<h3>' . __( 'Currency Settings', 'invoicing' ) . '</h3>',
157
+                    'name' => '<h3>' . __('Currency Settings', 'invoicing') . '</h3>',
158 158
                     'desc' => '',
159 159
                     'type' => 'header',
160 160
                 ),
161 161
                 'currency' => array(
162 162
                     'id'      => 'currency',
163
-                    'name'    => __( 'Currency', 'invoicing' ),
164
-                    'desc'    => __( 'Choose your currency. Note that some payment gateways have currency restrictions.', 'invoicing' ),
163
+                    'name'    => __('Currency', 'invoicing'),
164
+                    'desc'    => __('Choose your currency. Note that some payment gateways have currency restrictions.', 'invoicing'),
165 165
                     'type'    => 'select',
166 166
                     'class'       => 'wpi_select2',
167 167
                     'options' => $currency_code_options,
168 168
                 ),
169 169
                 'currency_position' => array(
170 170
                     'id'      => 'currency_position',
171
-                    'name'    => __( 'Currency Position', 'invoicing' ),
172
-                    'desc'    => __( 'Choose the location of the currency sign.', 'invoicing' ),
171
+                    'name'    => __('Currency Position', 'invoicing'),
172
+                    'desc'    => __('Choose the location of the currency sign.', 'invoicing'),
173 173
                     'type'    => 'select',
174 174
                     'class'   => 'wpi_select2',
175 175
                     'options'  => array(
176
-                        'left'        => __( 'Left', 'invoicing' ) . ' (' . $currency_symbol . wpinv_format_amount( '99.99' ) . ')',
177
-                        'right'       => __( 'Right', 'invoicing' ) . ' ('. wpinv_format_amount( '99.99' ) . $currency_symbol . ')',
178
-                        'left_space'  => __( 'Left with space', 'invoicing' ) . ' (' . $currency_symbol . ' ' . wpinv_format_amount( '99.99' ) . ')',
179
-                        'right_space' => __( 'Right with space', 'invoicing' ) . ' (' . wpinv_format_amount( '99.99' ) . ' ' . $currency_symbol . ')'
176
+                        'left'        => __('Left', 'invoicing') . ' (' . $currency_symbol . wpinv_format_amount('99.99') . ')',
177
+                        'right'       => __('Right', 'invoicing') . ' (' . wpinv_format_amount('99.99') . $currency_symbol . ')',
178
+                        'left_space'  => __('Left with space', 'invoicing') . ' (' . $currency_symbol . ' ' . wpinv_format_amount('99.99') . ')',
179
+                        'right_space' => __('Right with space', 'invoicing') . ' (' . wpinv_format_amount('99.99') . ' ' . $currency_symbol . ')'
180 180
                     )
181 181
                 ),
182 182
                 'thousands_separator' => array(
183 183
                     'id'   => 'thousands_separator',
184
-                    'name' => __( 'Thousands Separator', 'invoicing' ),
185
-                    'desc' => __( 'The symbol (usually , or .) to separate thousands', 'invoicing' ),
184
+                    'name' => __('Thousands Separator', 'invoicing'),
185
+                    'desc' => __('The symbol (usually , or .) to separate thousands', 'invoicing'),
186 186
                     'type' => 'text',
187 187
                     'size' => 'small',
188 188
                     'std'  => ',',
189 189
                 ),
190 190
                 'decimal_separator' => array(
191 191
                     'id'   => 'decimal_separator',
192
-                    'name' => __( 'Decimal Separator', 'invoicing' ),
193
-                    'desc' => __( 'The symbol (usually , or .) to separate decimal points', 'invoicing' ),
192
+                    'name' => __('Decimal Separator', 'invoicing'),
193
+                    'desc' => __('The symbol (usually , or .) to separate decimal points', 'invoicing'),
194 194
                     'type' => 'text',
195 195
                     'size' => 'small',
196 196
                     'std'  => '.',
197 197
                 ),
198 198
                 'decimals' => array(
199 199
                     'id'   => 'decimals',
200
-                    'name' => __( 'Number of Decimals', 'invoicing' ),
201
-                    'desc' => __( 'This sets the number of decimal points shown in displayed prices.', 'invoicing' ),
200
+                    'name' => __('Number of Decimals', 'invoicing'),
201
+                    'desc' => __('This sets the number of decimal points shown in displayed prices.', 'invoicing'),
202 202
                     'type' => 'number',
203 203
                     'size' => 'small',
204 204
                     'std'  => '2',
@@ -210,29 +210,29 @@  discard block
 block discarded – undo
210 210
             'labels' => array(
211 211
                 'labels' => array(
212 212
                     'id'   => 'labels_settings',
213
-                    'name' => '<h3>' . __( 'Invoice Labels', 'invoicing' ) . '</h3>',
213
+                    'name' => '<h3>' . __('Invoice Labels', 'invoicing') . '</h3>',
214 214
                     'desc' => '',
215 215
                     'type' => 'header',
216 216
                 ),
217 217
                 'vat_name' => array(
218 218
                     'id' => 'vat_name',
219
-                    'name' => __( 'VAT Name', 'invoicing' ),
220
-                    'desc' => __( 'Enter the VAT name', 'invoicing' ),
219
+                    'name' => __('VAT Name', 'invoicing'),
220
+                    'desc' => __('Enter the VAT name', 'invoicing'),
221 221
                     'type' => 'text',
222 222
                     'size' => 'regular',
223
-                    'std' => __( 'VAT', 'invoicing' ),
223
+                    'std' => __('VAT', 'invoicing'),
224 224
                 ),
225 225
                 'vat_invoice_notice_label' => array(
226 226
                     'id' => 'vat_invoice_notice_label',
227
-                    'name' => __( 'Invoice Notice Label', 'invoicing' ),
228
-                    'desc' => __( 'Use this to add an invoice notice section (label) to your invoices', 'invoicing' ),
227
+                    'name' => __('Invoice Notice Label', 'invoicing'),
228
+                    'desc' => __('Use this to add an invoice notice section (label) to your invoices', 'invoicing'),
229 229
                     'type' => 'text',
230 230
                     'size' => 'regular',
231 231
                 ),
232 232
                 'vat_invoice_notice' => array(
233 233
                     'id' => 'vat_invoice_notice',
234
-                    'name' => __( 'Invoice notice', 'invoicing' ),
235
-                    'desc' =>   __( 'Use this to add an invoice notice section (description) to your invoices', 'invoicing' ),
234
+                    'name' => __('Invoice notice', 'invoicing'),
235
+                    'desc' =>   __('Use this to add an invoice notice section (description) to your invoices', 'invoicing'),
236 236
                     'type' => 'text',
237 237
                     'size' => 'regular',
238 238
                 ),
@@ -244,22 +244,22 @@  discard block
 block discarded – undo
244 244
             'main' => array(
245 245
                 'gateway_settings' => array(
246 246
                     'id'   => 'api_header',
247
-                    'name' => '<h3>' . __( 'Gateway Settings', 'invoicing' ) . '</h3>',
247
+                    'name' => '<h3>' . __('Gateway Settings', 'invoicing') . '</h3>',
248 248
                     'desc' => '',
249 249
                     'type' => 'header',
250 250
                 ),
251 251
                 'gateways' => array(
252 252
                     'id'      => 'gateways',
253
-                    'name'    => __( 'Payment Gateways', 'invoicing' ),
254
-                    'desc'    => __( 'Choose the payment gateways you want to enable.', 'invoicing' ),
253
+                    'name'    => __('Payment Gateways', 'invoicing'),
254
+                    'desc'    => __('Choose the payment gateways you want to enable.', 'invoicing'),
255 255
                     'type'    => 'gateways',
256 256
                     'std'     => array('manual'=>1),
257 257
                     'options' => wpinv_get_payment_gateways(),
258 258
                 ),
259 259
                 'default_gateway' => array(
260 260
                     'id'      => 'default_gateway',
261
-                    'name'    => __( 'Default Gateway', 'invoicing' ),
262
-                    'desc'    => __( 'This gateway will be loaded automatically with the checkout page.', 'invoicing' ),
261
+                    'name'    => __('Default Gateway', 'invoicing'),
262
+                    'desc'    => __('This gateway will be loaded automatically with the checkout page.', 'invoicing'),
263 263
                     'type'    => 'gateway_select',
264 264
                     'std'     => 'manual',
265 265
                     'class'   => 'wpi_select2',
@@ -274,32 +274,32 @@  discard block
 block discarded – undo
274 274
             'main' => array(
275 275
                 'tax_settings' => array(
276 276
                     'id'   => 'tax_settings',
277
-                    'name' => '<h3>' . __( 'Tax Settings', 'invoicing' ) . '</h3>',
277
+                    'name' => '<h3>' . __('Tax Settings', 'invoicing') . '</h3>',
278 278
                     'type' => 'header',
279 279
                 ),
280 280
 
281 281
                 'enable_taxes' => array(
282 282
                     'id'       => 'enable_taxes',
283
-                    'name'     => __( 'Enable Taxes', 'invoicing' ),
284
-                    'desc'     => __( 'Enable tax rates and calculations.', 'invoicing' ),
283
+                    'name'     => __('Enable Taxes', 'invoicing'),
284
+                    'desc'     => __('Enable tax rates and calculations.', 'invoicing'),
285 285
                     'type'     => 'checkbox',
286 286
                     'std'      => 0,
287 287
                 ),
288 288
 
289 289
                 'tax_subtotal_rounding' => array(
290 290
                     'id'                => 'tax_subtotal_rounding',
291
-                    'name'              => __( 'Rounding', 'invoicing' ),
292
-                    'desc'              => __( 'Round tax at subtotal level, instead of rounding per tax rate', 'invoicing' ),
291
+                    'name'              => __('Rounding', 'invoicing'),
292
+                    'desc'              => __('Round tax at subtotal level, instead of rounding per tax rate', 'invoicing'),
293 293
                     'type'              => 'checkbox',
294 294
                     'std'               => 1,
295 295
                 ),
296 296
 
297 297
                 'prices_include_tax' => array(
298 298
                     'id'      => 'prices_include_tax',
299
-                    'name'    => __( 'Prices entered with tax', 'invoicing' ),
299
+                    'name'    => __('Prices entered with tax', 'invoicing'),
300 300
                     'options' => array(
301
-                        'yes' => __( 'Yes, I will enter prices inclusive of tax', 'invoicing' ),
302
-                        'no'  => __( 'No, I will enter prices exclusive of tax', 'invoicing' ),
301
+                        'yes' => __('Yes, I will enter prices inclusive of tax', 'invoicing'),
302
+                        'no'  => __('No, I will enter prices exclusive of tax', 'invoicing'),
303 303
                     ),
304 304
                     'type'    => 'select',
305 305
                     'std'     => 'no',
@@ -307,10 +307,10 @@  discard block
 block discarded – undo
307 307
 
308 308
                 'tax_base'              => array(
309 309
                     'id'                => 'tax_base',
310
-                    'name'              => __( 'Calculate tax based on', 'invoicing' ),
310
+                    'name'              => __('Calculate tax based on', 'invoicing'),
311 311
                     'options'           => array(
312
-                        'billing'       => __( 'Customer billing address', 'invoicing' ),
313
-                        'base'          => __( 'Shop base address', 'invoicing' ),
312
+                        'billing'       => __('Customer billing address', 'invoicing'),
313
+                        'base'          => __('Shop base address', 'invoicing'),
314 314
                     ),
315 315
                     'type'              => 'select',
316 316
                     'std'               => 'billing',
@@ -318,10 +318,10 @@  discard block
 block discarded – undo
318 318
 
319 319
                 'tax_display_totals'    => array(
320 320
                     'id'                => 'tax_display_totals',
321
-                    'name'              => __( 'Display tax totals', 'invoicing' ),
321
+                    'name'              => __('Display tax totals', 'invoicing'),
322 322
                     'options'           => array(
323
-                        'single'        => __( 'As a single total', 'invoicing' ),
324
-                        'individual'    => __( 'As individual tax rates', 'invoicing' ),
323
+                        'single'        => __('As a single total', 'invoicing'),
324
+                        'individual'    => __('As individual tax rates', 'invoicing'),
325 325
                     ),
326 326
                     'type'              => 'select',
327 327
                     'std'               => 'individual',
@@ -329,8 +329,8 @@  discard block
 block discarded – undo
329 329
 
330 330
                 'tax_rate' => array(
331 331
                     'id'   => 'tax_rate',
332
-                    'name' => __( 'Fallback Tax Rate', 'invoicing' ),
333
-                    'desc' => __( 'Enter a percentage, such as 6.5. Customers not in a specific rate will be charged this rate.', 'invoicing' ),
332
+                    'name' => __('Fallback Tax Rate', 'invoicing'),
333
+                    'desc' => __('Enter a percentage, such as 6.5. Customers not in a specific rate will be charged this rate.', 'invoicing'),
334 334
                     'type' => 'number',
335 335
                     'size' => 'small',
336 336
                     'min'  => '0',
@@ -342,8 +342,8 @@  discard block
 block discarded – undo
342 342
             'rates' => array(
343 343
                 'tax_rates' => array(
344 344
                     'id'   => 'tax_rates',
345
-                    'name' => '<h3>' . __( 'Tax Rates', 'invoicing' ) . '</h3>',
346
-                    'desc' => __( 'Enter tax rates for specific regions.', 'invoicing' ),
345
+                    'name' => '<h3>' . __('Tax Rates', 'invoicing') . '</h3>',
346
+                    'desc' => __('Enter tax rates for specific regions.', 'invoicing'),
347 347
                     'type' => 'tax_rates',
348 348
                 ),
349 349
             ),
@@ -352,44 +352,44 @@  discard block
 block discarded – undo
352 352
 
353 353
                 'vat_company_name' => array(
354 354
                     'id' => 'vat_company_name',
355
-                    'name' => __( 'Company Name', 'invoicing' ),
356
-                    'desc' => wp_sprintf(__( 'Verify your company name and  VAT number on the %sEU VIES System.%s', 'invoicing' ), '<a href="http://ec.europa.eu/taxation_customs/vies/" target="_blank">', '</a>' ),
355
+                    'name' => __('Company Name', 'invoicing'),
356
+                    'desc' => wp_sprintf(__('Verify your company name and  VAT number on the %sEU VIES System.%s', 'invoicing'), '<a href="http://ec.europa.eu/taxation_customs/vies/" target="_blank">', '</a>'),
357 357
                     'type' => 'text',
358 358
                     'size' => 'regular',
359 359
                 ),
360 360
 
361 361
                 'vat_number' => array(
362 362
                     'id'   => 'vat_number',
363
-                    'name' => __( 'VAT Number', 'invoicing' ),
364
-                    'desc' => __( 'Enter your VAT number including the country identifier, eg: GB123456789', 'invoicing' ),
363
+                    'name' => __('VAT Number', 'invoicing'),
364
+                    'desc' => __('Enter your VAT number including the country identifier, eg: GB123456789', 'invoicing'),
365 365
                     'type' => 'text',
366 366
                     'size' => 'regular',
367 367
                 ),
368 368
 
369 369
                 'vat_prevent_b2c_purchase' => array(
370 370
                     'id' => 'vat_prevent_b2c_purchase',
371
-                    'name' => __( 'Prevent B2C Sales', 'invoicing' ),
372
-                    'desc' => __( 'Require everyone in the EU to provide a VAT number.', 'invoicing' ),
371
+                    'name' => __('Prevent B2C Sales', 'invoicing'),
372
+                    'desc' => __('Require everyone in the EU to provide a VAT number.', 'invoicing'),
373 373
                     'type' => 'checkbox'
374 374
                 ),
375 375
 
376 376
                 'validate_vat_number' => array(
377 377
                     'id'   => 'validate_vat_number',
378
-                    'name' => __( 'Validate VAT Number', 'invoicing' ),
379
-                    'desc' => __( 'Validate VAT numbers with VIES.', 'invoicing' ),
378
+                    'name' => __('Validate VAT Number', 'invoicing'),
379
+                    'desc' => __('Validate VAT numbers with VIES.', 'invoicing'),
380 380
                     'type' => 'checkbox'
381 381
                 ),
382 382
 
383 383
                 'vat_same_country_rule' => array(
384 384
                     'id'          => 'vat_same_country_rule',
385
-                    'name'        => __( 'Same Country Rule', 'invoicing' ),
386
-                    'desc'        => __( 'What should happen if a customer is from the same country as your business?', 'invoicing' ),
385
+                    'name'        => __('Same Country Rule', 'invoicing'),
386
+                    'desc'        => __('What should happen if a customer is from the same country as your business?', 'invoicing'),
387 387
                     'type'        => 'select',
388 388
                     'options'     => array(
389
-                        'no'        => __( 'Do not charge Tax', 'invoicing' ),
390
-                        'always'    => __( 'Charge Tax', 'invoicing' ),
389
+                        'no'        => __('Do not charge Tax', 'invoicing'),
390
+                        'always'    => __('Charge Tax', 'invoicing'),
391 391
                     ),
392
-                    'placeholder' => __( 'Select an option', 'invoicing' ),
392
+                    'placeholder' => __('Select an option', 'invoicing'),
393 393
                     'std'         => 'always',
394 394
                 ),
395 395
 
@@ -403,68 +403,68 @@  discard block
 block discarded – undo
403 403
             'main' => array(
404 404
                 'email_settings_header' => array(
405 405
                     'id'   => 'email_settings_header',
406
-                    'name' => '<h3>' . __( 'Email Sender Options', 'invoicing' ) . '</h3>',
406
+                    'name' => '<h3>' . __('Email Sender Options', 'invoicing') . '</h3>',
407 407
                     'type' => 'header',
408 408
                 ),
409 409
                 'email_from_name' => array(
410 410
                     'id'   => 'email_from_name',
411
-                    'name' => __( 'From Name', 'invoicing' ),
412
-                    'desc' => __( 'Enter the sender\'s name appears in outgoing invoice emails. This should be your site name.', 'invoicing' ),
413
-                    'std' => esc_attr( get_bloginfo( 'name', 'display' ) ),
411
+                    'name' => __('From Name', 'invoicing'),
412
+                    'desc' => __('Enter the sender\'s name appears in outgoing invoice emails. This should be your site name.', 'invoicing'),
413
+                    'std' => esc_attr(get_bloginfo('name', 'display')),
414 414
                     'type' => 'text',
415 415
                 ),
416 416
                 'email_from' => array(
417 417
                     'id'   => 'email_from',
418
-                    'name' => __( 'From Email', 'invoicing' ),
419
-                    'desc' => sprintf (__( 'Email address to send invoice emails from. This will act as the "from" and "reply-to" address. %s If emails are not being sent it may be that your hosting prevents emails being sent if the email domains do not match.%s', 'invoicing' ), $alert_wrapper_start, $alert_wrapper_close),
420
-                    'std' => get_option( 'admin_email' ),
418
+                    'name' => __('From Email', 'invoicing'),
419
+                    'desc' => sprintf(__('Email address to send invoice emails from. This will act as the "from" and "reply-to" address. %s If emails are not being sent it may be that your hosting prevents emails being sent if the email domains do not match.%s', 'invoicing'), $alert_wrapper_start, $alert_wrapper_close),
420
+                    'std' => get_option('admin_email'),
421 421
                     'type' => 'text',
422 422
                 ),
423 423
                 'admin_email' => array(
424 424
                     'id'   => 'admin_email',
425
-                    'name' => __( 'Admin Email', 'invoicing' ),
426
-                    'desc' => __( 'Where should we send admin notifications?', 'invoicing' ),
427
-                    'std' => get_option( 'admin_email' ),
425
+                    'name' => __('Admin Email', 'invoicing'),
426
+                    'desc' => __('Where should we send admin notifications?', 'invoicing'),
427
+                    'std' => get_option('admin_email'),
428 428
                     'type' => 'text',
429 429
                 ),
430 430
                 'overdue_settings_header' => array(
431 431
                     'id'   => 'overdue_settings_header',
432
-                    'name' => '<h3>' . __( 'Due Date Settings', 'invoicing' ) . '</h3>',
432
+                    'name' => '<h3>' . __('Due Date Settings', 'invoicing') . '</h3>',
433 433
                     'type' => 'header',
434 434
                 ),
435 435
                 'overdue_active' => array(
436 436
                     'id'   => 'overdue_active',
437
-                    'name' => __( 'Enable Due Date', 'invoicing' ),
438
-                    'desc' => __( 'Check this to enable due date option for invoices.', 'invoicing' ),
437
+                    'name' => __('Enable Due Date', 'invoicing'),
438
+                    'desc' => __('Check this to enable due date option for invoices.', 'invoicing'),
439 439
                     'type' => 'checkbox',
440 440
                     'std'  => false,
441 441
                 ),
442 442
                 'overdue_days' => array(
443 443
                     'id'          => 'overdue_days',
444
-                    'name'        => __( 'Default Due Date', 'invoicing' ),
445
-                    'desc'        => __( 'Number of days each Invoice is due after the created date. This will automatically set the date in the "Due Date" field. Can be overridden on individual Invoices.', 'invoicing' ),
444
+                    'name'        => __('Default Due Date', 'invoicing'),
445
+                    'desc'        => __('Number of days each Invoice is due after the created date. This will automatically set the date in the "Due Date" field. Can be overridden on individual Invoices.', 'invoicing'),
446 446
                     'type'        => 'select',
447 447
                     'options'     => $due_payment_options,
448 448
                     'std'         => 0,
449
-                    'placeholder' => __( 'Select a page', 'invoicing' ),
449
+                    'placeholder' => __('Select a page', 'invoicing'),
450 450
                 ),
451 451
                 'email_template_header' => array(
452 452
                     'id'   => 'email_template_header',
453
-                    'name' => '<h3>' . __( 'Email Template', 'invoicing' ) . '</h3>',
453
+                    'name' => '<h3>' . __('Email Template', 'invoicing') . '</h3>',
454 454
                     'type' => 'header',
455 455
                 ),
456 456
                 'email_header_image' => array(
457 457
                     'id'   => 'email_header_image',
458
-                    'name' => __( 'Header Image', 'invoicing' ),
459
-                    'desc' => __( 'URL to an image you want to show in the email header. Upload images using the media uploader (Admin > Media).', 'invoicing' ),
458
+                    'name' => __('Header Image', 'invoicing'),
459
+                    'desc' => __('URL to an image you want to show in the email header. Upload images using the media uploader (Admin > Media).', 'invoicing'),
460 460
                     'std' => '',
461 461
                     'type' => 'text',
462 462
                 ),
463 463
                 'email_footer_text' => array(
464 464
                     'id'   => 'email_footer_text',
465
-                    'name' => __( 'Footer Text', 'invoicing' ),
466
-                    'desc' => __( 'The text to appear in the footer of all invoice emails.', 'invoicing' ),
467
-                    'std' => get_bloginfo( 'name', 'display' ) . ' - ' . __( 'Powered by GeoDirectory', 'invoicing' ),
465
+                    'name' => __('Footer Text', 'invoicing'),
466
+                    'desc' => __('The text to appear in the footer of all invoice emails.', 'invoicing'),
467
+                    'std' => get_bloginfo('name', 'display') . ' - ' . __('Powered by GeoDirectory', 'invoicing'),
468 468
                     'type' => 'textarea',
469 469
                     'class' => 'regular-text',
470 470
                     'rows' => 2,
@@ -472,29 +472,29 @@  discard block
 block discarded – undo
472 472
                 ),
473 473
                 'email_base_color' => array(
474 474
                     'id'   => 'email_base_color',
475
-                    'name' => __( 'Base Color', 'invoicing' ),
476
-                    'desc' => __( 'The base color for invoice email template. Default <code>#557da2</code>.', 'invoicing' ),
475
+                    'name' => __('Base Color', 'invoicing'),
476
+                    'desc' => __('The base color for invoice email template. Default <code>#557da2</code>.', 'invoicing'),
477 477
                     'std' => '#557da2',
478 478
                     'type' => 'color',
479 479
                 ),
480 480
                 'email_background_color' => array(
481 481
                     'id'   => 'email_background_color',
482
-                    'name' => __( 'Background Color', 'invoicing' ),
483
-                    'desc' => __( 'The background color of email template. Default <code>#f5f5f5</code>.', 'invoicing' ),
482
+                    'name' => __('Background Color', 'invoicing'),
483
+                    'desc' => __('The background color of email template. Default <code>#f5f5f5</code>.', 'invoicing'),
484 484
                     'std' => '#f5f5f5',
485 485
                     'type' => 'color',
486 486
                 ),
487 487
                 'email_body_background_color' => array(
488 488
                     'id'   => 'email_body_background_color',
489
-                    'name' => __( 'Body Background Color', 'invoicing' ),
490
-                    'desc' => __( 'The main body background color of email template. Default <code>#fdfdfd</code>.', 'invoicing' ),
489
+                    'name' => __('Body Background Color', 'invoicing'),
490
+                    'desc' => __('The main body background color of email template. Default <code>#fdfdfd</code>.', 'invoicing'),
491 491
                     'std' => '#fdfdfd',
492 492
                     'type' => 'color',
493 493
                 ),
494 494
                 'email_text_color' => array(
495 495
                     'id'   => 'email_text_color',
496
-                    'name' => __( 'Body Text Color', 'invoicing' ),
497
-                    'desc' => __( 'The main body text color. Default <code>#505050</code>.', 'invoicing' ),
496
+                    'name' => __('Body Text Color', 'invoicing'),
497
+                    'desc' => __('The main body text color. Default <code>#505050</code>.', 'invoicing'),
498 498
                     'std' => '#505050',
499 499
                     'type' => 'color',
500 500
                 ),
@@ -509,7 +509,7 @@  discard block
 block discarded – undo
509 509
     ),
510 510
 
511 511
     // Integrations.
512
-    'integrations' => wp_list_pluck( getpaid_get_integration_settings(), 'settings', 'id' ),
512
+    'integrations' => wp_list_pluck(getpaid_get_integration_settings(), 'settings', 'id'),
513 513
 
514 514
     /** Privacy Settings */
515 515
     'privacy' => apply_filters('wpinv_settings_privacy',
@@ -517,17 +517,17 @@  discard block
 block discarded – undo
517 517
             'main' => array(
518 518
                 'invoicing_privacy_policy_settings' => array(
519 519
                     'id'   => 'invoicing_privacy_policy_settings',
520
-                    'name' => '<h3>' . __( 'Privacy Policy', 'invoicing' ) . '</h3>',
520
+                    'name' => '<h3>' . __('Privacy Policy', 'invoicing') . '</h3>',
521 521
                     'type' => 'header',
522 522
                 ),
523 523
                 'privacy_page' => array(
524 524
                     'id'          => 'privacy_page',
525
-                    'name'        => __( 'Privacy Page', 'invoicing' ),
526
-                    'desc'        => __( 'If no privacy policy page set in Settings->Privacy default settings, this page will be used on checkout page.', 'invoicing' ),
525
+                    'name'        => __('Privacy Page', 'invoicing'),
526
+                    'desc'        => __('If no privacy policy page set in Settings->Privacy default settings, this page will be used on checkout page.', 'invoicing'),
527 527
                     'type'        => 'select',
528
-                    'options'     => wpinv_get_pages( true,  __( 'Select a page', 'invoicing' )),
528
+                    'options'     => wpinv_get_pages(true, __('Select a page', 'invoicing')),
529 529
                     'class'       => 'wpi_select2',
530
-                    'placeholder' => __( 'Select a page', 'invoicing' ),
530
+                    'placeholder' => __('Select a page', 'invoicing'),
531 531
                 ),
532 532
             ),
533 533
         )
@@ -538,19 +538,19 @@  discard block
 block discarded – undo
538 538
             'main' => array(
539 539
                 'invoice_number_format_settings' => array(
540 540
                     'id'   => 'invoice_number_format_settings',
541
-                    'name' => '<h3>' . __( 'Invoice Number', 'invoicing' ) . '</h3>',
541
+                    'name' => '<h3>' . __('Invoice Number', 'invoicing') . '</h3>',
542 542
                     'type' => 'header',
543 543
                 ),
544 544
                 'sequential_invoice_number' => array(
545 545
                     'id'   => 'sequential_invoice_number',
546
-                    'name' => __( 'Sequential Invoice Numbers', 'invoicing' ),
547
-                    'desc' => __('Check this box to enable sequential invoice numbers.', 'invoicing' ) . $reset_number,
546
+                    'name' => __('Sequential Invoice Numbers', 'invoicing'),
547
+                    'desc' => __('Check this box to enable sequential invoice numbers.', 'invoicing') . $reset_number,
548 548
                     'type' => 'checkbox',
549 549
                 ),
550 550
                 'invoice_sequence_start' => array(
551 551
                     'id'   => 'invoice_sequence_start',
552
-                    'name' => __( 'Sequential Starting Number', 'invoicing' ),
553
-                    'desc' => __( 'The number at which the invoice number sequence should begin.', 'invoicing' ) . $last_number,
552
+                    'name' => __('Sequential Starting Number', 'invoicing'),
553
+                    'desc' => __('The number at which the invoice number sequence should begin.', 'invoicing') . $last_number,
554 554
                     'type' => 'number',
555 555
                     'size' => 'small',
556 556
                     'std'  => '1',
@@ -558,8 +558,8 @@  discard block
 block discarded – undo
558 558
                 ),
559 559
                 'invoice_number_padd' => array(
560 560
                     'id'      => 'invoice_number_padd',
561
-                    'name'    => __( 'Minimum Digits', 'invoicing' ),
562
-                    'desc'    => __( 'If the invoice number has less digits than this number, it is left padded with 0s. Ex: invoice number 108 will padded to 00108 if digits set to 5. The default 0 means no padding.', 'invoicing' ),
561
+                    'name'    => __('Minimum Digits', 'invoicing'),
562
+                    'desc'    => __('If the invoice number has less digits than this number, it is left padded with 0s. Ex: invoice number 108 will padded to 00108 if digits set to 5. The default 0 means no padding.', 'invoicing'),
563 563
                     'type'    => 'select',
564 564
                     'options' => $invoice_number_padd_options,
565 565
                     'std'     => 5,
@@ -567,8 +567,8 @@  discard block
 block discarded – undo
567 567
                 ),
568 568
                 'invoice_number_prefix' => array(
569 569
                     'id' => 'invoice_number_prefix',
570
-                    'name' => __( 'Invoice Number Prefix', 'invoicing' ),
571
-                    'desc' => __( 'Prefix for all invoice numbers. Ex: INV-', 'invoicing' ),
570
+                    'name' => __('Invoice Number Prefix', 'invoicing'),
571
+                    'desc' => __('Prefix for all invoice numbers. Ex: INV-', 'invoicing'),
572 572
                     'type' => 'text',
573 573
                     'size' => 'regular',
574 574
                     'std' => 'INV-',
@@ -576,41 +576,41 @@  discard block
 block discarded – undo
576 576
                 ),
577 577
                 'invoice_number_postfix' => array(
578 578
                     'id' => 'invoice_number_postfix',
579
-                    'name' => __( 'Invoice Number Postfix', 'invoicing' ),
580
-                    'desc' => __( 'Postfix for all invoice numbers.', 'invoicing' ),
579
+                    'name' => __('Invoice Number Postfix', 'invoicing'),
580
+                    'desc' => __('Postfix for all invoice numbers.', 'invoicing'),
581 581
                     'type' => 'text',
582 582
                     'size' => 'regular',
583 583
                     'std' => ''
584 584
                 ),
585 585
                 'checkout_settings' => array(
586 586
                     'id'   => 'checkout_settings',
587
-                    'name' => '<h3>' . __( 'Checkout Settings', 'invoicing' ) . '</h3>',
587
+                    'name' => '<h3>' . __('Checkout Settings', 'invoicing') . '</h3>',
588 588
                     'type' => 'header',
589 589
                 ),
590 590
                 'login_to_checkout' => array(
591 591
                     'id'   => 'login_to_checkout',
592
-                    'name' => __( 'Require Login To Checkout', 'invoicing' ),
593
-                    'desc' => __( 'If ticked then user needs to be logged in to view or pay invoice, can only view or pay their own invoice. If unticked then anyone can view or pay the invoice.', 'invoicing' ),
592
+                    'name' => __('Require Login To Checkout', 'invoicing'),
593
+                    'desc' => __('If ticked then user needs to be logged in to view or pay invoice, can only view or pay their own invoice. If unticked then anyone can view or pay the invoice.', 'invoicing'),
594 594
                     'type' => 'checkbox',
595 595
                 ),
596 596
 
597 597
                 'maxmind_license_key' => array(
598 598
                     'id'   => 'maxmind_license_key',
599
-                    'name' => __( 'MaxMind License Key', 'invoicing' ),
599
+                    'name' => __('MaxMind License Key', 'invoicing'),
600 600
                     'type' => 'text',
601 601
                     'size' => 'regular',
602
-                    'desc' => __( "Enter you license key if you would like to use MaxMind to automatically detect a customer's country.", 'invoicing' ) . ' <a href="https://support.maxmind.com/account-faq/license-keys/how-do-i-generate-a-license-key/">' . __( 'How to generate a free license key.', 'invoicing' ) . '</a>',
602
+                    'desc' => __("Enter you license key if you would like to use MaxMind to automatically detect a customer's country.", 'invoicing') . ' <a href="https://support.maxmind.com/account-faq/license-keys/how-do-i-generate-a-license-key/">' . __('How to generate a free license key.', 'invoicing') . '</a>',
603 603
                 ),
604 604
 
605 605
                 'uninstall_settings' => array(
606 606
                     'id'   => 'uninstall_settings',
607
-                    'name' => '<h3>' . __( 'Uninstall Settings', 'invoicing' ) . '</h3>',
607
+                    'name' => '<h3>' . __('Uninstall Settings', 'invoicing') . '</h3>',
608 608
                     'type' => 'header',
609 609
                 ),
610 610
                 'remove_data_on_unistall' => array(
611 611
                     'id'   => 'remove_data_on_unistall',
612
-                    'name' => __( 'Remove Data on Uninstall?', 'invoicing' ),
613
-                    'desc' => __( 'Check this box if you would like Invoicing plugin to completely remove all of its data when the plugin is deleted/uninstalled.', 'invoicing' ),
612
+                    'name' => __('Remove Data on Uninstall?', 'invoicing'),
613
+                    'desc' => __('Check this box if you would like Invoicing plugin to completely remove all of its data when the plugin is deleted/uninstalled.', 'invoicing'),
614 614
                     'type' => 'checkbox',
615 615
                     'std'  => ''
616 616
                 ),
@@ -619,13 +619,13 @@  discard block
 block discarded – undo
619 619
             'custom-css' => array(
620 620
                 'css_settings' => array(
621 621
                     'id'   => 'css_settings',
622
-                    'name' => '<h3>' . __( 'Custom CSS', 'invoicing' ) . '</h3>',
622
+                    'name' => '<h3>' . __('Custom CSS', 'invoicing') . '</h3>',
623 623
                     'type' => 'header',
624 624
                 ),
625 625
                 'template_custom_css' => array(
626 626
                     'id' => 'template_custom_css',
627
-                    'name' => __( 'Invoice Template CSS', 'invoicing' ),
628
-                    'desc' => __( 'Add CSS to modify appearance of the print invoice page.', 'invoicing' ),
627
+                    'name' => __('Invoice Template CSS', 'invoicing'),
628
+                    'desc' => __('Add CSS to modify appearance of the print invoice page.', 'invoicing'),
629 629
                     'type' => 'textarea',
630 630
                     'class'=> 'regular-text',
631 631
                     'rows' => 10,
@@ -639,8 +639,8 @@  discard block
 block discarded – undo
639 639
             'main' => array(
640 640
                 'tool_settings' => array(
641 641
                     'id'   => 'tool_settings',
642
-                    'name' => '<h3>' . __( 'Diagnostic Tools', 'invoicing' ) . '</h3>',
643
-                    'desc' => __( 'Invoicing diagnostic tools', 'invoicing' ),
642
+                    'name' => '<h3>' . __('Diagnostic Tools', 'invoicing') . '</h3>',
643
+                    'desc' => __('Invoicing diagnostic tools', 'invoicing'),
644 644
                     'type' => 'tools',
645 645
                 ),
646 646
             ),
Please login to merge, or discard this patch.
includes/class-wpinv.php 2 patches
Indentation   +456 added lines, -456 removed lines patch added patch discarded remove patch
@@ -14,485 +14,485 @@  discard block
 block discarded – undo
14 14
  */
15 15
 class WPInv_Plugin {
16 16
 
17
-	/**
18
-	 * GetPaid version.
19
-	 *
20
-	 * @var string
21
-	 */
22
-	public $version;
23
-
24
-	/**
25
-	 * Data container.
26
-	 *
27
-	 * @var array
28
-	 */
29
-	protected $data = array();
30
-
31
-	/**
32
-	 * Form elements instance.
33
-	 *
34
-	 * @var WPInv_Payment_Form_Elements
35
-	 */
36
-	public $form_elements;
37
-
38
-	/**
39
-	 * @param array An array of payment gateways.
40
-	 */
41
-	public $gateways;
42
-
43
-	/**
44
-	 * Class constructor.
45
-	 */
46
-	public function __construct() {
47
-		$this->define_constants();
48
-		$this->includes();
49
-		$this->init_hooks();
50
-		$this->set_properties();
51
-	}
52
-
53
-	/**
54
-	 * Sets a custom data property.
55
-	 * 
56
-	 * @param string $prop The prop to set.
57
-	 * @param mixed $value The value to retrieve.
58
-	 */
59
-	public function set( $prop, $value ) {
60
-		$this->data[ $prop ] = $value;
61
-	}
62
-
63
-	/**
64
-	 * Gets a custom data property.
65
-	 *
66
-	 * @param string $prop The prop to set.
67
-	 * @return mixed The value.
68
-	 */
69
-	public function get( $prop ) {
70
-
71
-		if ( isset( $this->data[ $prop ] ) ) {
72
-			return $this->data[ $prop ];
73
-		}
74
-
75
-		return null;
76
-	}
77
-
78
-	/**
79
-	 * Define class properties.
80
-	 */
81
-	public function set_properties() {
82
-
83
-		// Sessions.
84
-		$this->set( 'session', new WPInv_Session_Handler() );
85
-		$GLOBALS['wpi_session'] = $this->get( 'session' ); // Backwards compatibility.
86
-		$GLOBALS['wpinv_euvat'] = new WPInv_EUVat(); // Backwards compatibility.
87
-
88
-		// Init other objects.
89
-		$this->set( 'session', new WPInv_Session_Handler() );
90
-		$this->set( 'notes', new WPInv_Notes() );
91
-		$this->set( 'api', new WPInv_API() );
92
-		$this->set( 'post_types', new GetPaid_Post_Types() );
93
-		$this->set( 'template', new GetPaid_Template() );
94
-		$this->set( 'admin', new GetPaid_Admin() );
95
-		$this->set( 'subscriptions', new WPInv_Subscriptions() );
96
-		$this->set( 'invoice_emails', new GetPaid_Invoice_Notification_Emails() );
97
-		$this->set( 'subscription_emails', new GetPaid_Subscription_Notification_Emails() );
98
-		$this->set( 'daily_maintenace', new GetPaid_Daily_Maintenance() );
99
-		$this->set( 'payment_forms', new GetPaid_Payment_Forms() );
100
-		$this->set( 'maxmind', new GetPaid_MaxMind_Geolocation() );
101
-
102
-	}
103
-
104
-	 /**
105
-	 * Define plugin constants.
106
-	 */
107
-	public function define_constants() {
108
-		define( 'WPINV_PLUGIN_DIR', plugin_dir_path( WPINV_PLUGIN_FILE ) );
109
-		define( 'WPINV_PLUGIN_URL', plugin_dir_url( WPINV_PLUGIN_FILE ) );
110
-		$this->version = WPINV_VERSION;
111
-	}
112
-
113
-	/**
114
-	 * Hook into actions and filters.
115
-	 *
116
-	 * @since 1.0.19
117
-	 */
118
-	protected function init_hooks() {
119
-		/* Internationalize the text strings used. */
120
-		add_action( 'plugins_loaded', array( &$this, 'plugins_loaded' ) );
121
-
122
-		// Init the plugin after WordPress inits.
123
-		add_action( 'init', array( $this, 'init' ), 1 );
124
-		add_action( 'init', array( $this, 'maybe_process_ipn' ), 10 );
125
-		add_action( 'init', array( $this, 'wpinv_actions' ) );
126
-		add_action( 'init', array( $this, 'maybe_do_authenticated_action' ), 100 );
127
-
128
-		if ( class_exists( 'BuddyPress' ) ) {
129
-			add_action( 'bp_include', array( &$this, 'bp_invoicing_init' ) );
130
-		}
131
-
132
-		add_action( 'wp_enqueue_scripts', array( &$this, 'enqueue_scripts' ) );
133
-		add_action( 'wp_footer', array( &$this, 'wp_footer' ) );
134
-		add_action( 'widgets_init', array( &$this, 'register_widgets' ) );
135
-		add_filter( 'wpseo_exclude_from_sitemap_by_post_ids', array( $this, 'wpseo_exclude_from_sitemap_by_post_ids' ) );
136
-		add_filter( 'pre_get_posts', array( &$this, 'pre_get_posts' ) );
137
-
138
-		// Fires after registering actions.
139
-		do_action( 'wpinv_actions', $this );
140
-		do_action( 'getpaid_actions', $this );
141
-
142
-	}
143
-
144
-	public function plugins_loaded() {
145
-		/* Internationalize the text strings used. */
146
-		$this->load_textdomain();
147
-
148
-		do_action( 'wpinv_loaded' );
149
-
150
-		// Fix oxygen page builder conflict
151
-		if ( function_exists( 'ct_css_output' ) ) {
152
-			wpinv_oxygen_fix_conflict();
153
-		}
154
-	}
155
-
156
-	/**
157
-	 * Load the translation of the plugin.
158
-	 *
159
-	 * @since 1.0
160
-	 */
161
-	public function load_textdomain( $locale = NULL ) {
162
-		if ( empty( $locale ) ) {
163
-			$locale = is_admin() && function_exists( 'get_user_locale' ) ? get_user_locale() : get_locale();
164
-		}
165
-
166
-		$locale = apply_filters( 'plugin_locale', $locale, 'invoicing' );
167
-
168
-		unload_textdomain( 'invoicing' );
169
-		load_textdomain( 'invoicing', WP_LANG_DIR . '/invoicing/invoicing-' . $locale . '.mo' );
170
-		load_plugin_textdomain( 'invoicing', false, WPINV_PLUGIN_DIR . 'languages' );
171
-
172
-		/**
173
-		 * Define language constants.
174
-		 */
175
-		require_once( WPINV_PLUGIN_DIR . 'language.php' );
176
-	}
177
-
178
-	/**
179
-	 * Include required core files used in admin and on the frontend.
180
-	 */
181
-	public function includes() {
182
-
183
-		// Start with the settings.
184
-		require_once( WPINV_PLUGIN_DIR . 'includes/admin/register-settings.php' );
185
-
186
-		// Packages/libraries.
187
-		require_once( WPINV_PLUGIN_DIR . 'vendor/autoload.php' );
188
-		require_once( WPINV_PLUGIN_DIR . 'vendor/ayecode/wp-ayecode-ui/ayecode-ui-loader.php' );
189
-
190
-		// Load functions.
191
-		require_once( WPINV_PLUGIN_DIR . 'includes/deprecated-functions.php' );
192
-		require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-email-functions.php' );
193
-		require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-general-functions.php' );
194
-		require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-helper-functions.php' );
195
-		require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-tax-functions.php' );
196
-		require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-template-functions.php' );
197
-		require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-address-functions.php' );
198
-		require_once( WPINV_PLUGIN_DIR . 'includes/invoice-functions.php' );
199
-		require_once( WPINV_PLUGIN_DIR . 'includes/subscription-functions.php' );
200
-		require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-item-functions.php' );
201
-		require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-discount-functions.php' );
202
-		require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-gateway-functions.php' );
203
-		require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-payment-functions.php' );
204
-		require_once( WPINV_PLUGIN_DIR . 'includes/user-functions.php' );
205
-		require_once( WPINV_PLUGIN_DIR . 'includes/error-functions.php' );
206
-
207
-		// Register autoloader.
208
-		try {
209
-			spl_autoload_register( array( $this, 'autoload' ), true );
210
-		} catch ( Exception $e ) {
211
-			wpinv_error_log( $e->getMessage(), '', __FILE__, 149, true );
212
-		}
213
-
214
-		require_once( WPINV_PLUGIN_DIR . 'includes/abstracts/abstract-wpinv-session.php' );
215
-		require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-session-handler.php' );
216
-		require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-ajax.php' );
217
-		require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-api.php' );
218
-		require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-cache-helper.php' );
219
-		require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-db.php' );
220
-		require_once( WPINV_PLUGIN_DIR . 'includes/admin/subscriptions.php' );
221
-		require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-subscriptions-db.php' );
222
-		require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-subscription.php' );
223
-		require_once( WPINV_PLUGIN_DIR . 'includes/abstracts/abstract-wpinv-privacy.php' );
224
-		require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-privacy.php' );
225
-		require_once( WPINV_PLUGIN_DIR . 'includes/libraries/class-ayecode-addons.php' );
226
-		require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-addons.php' );
227
-		require_once( WPINV_PLUGIN_DIR . 'widgets/checkout.php' );
228
-		require_once( WPINV_PLUGIN_DIR . 'widgets/invoice-history.php' );
229
-		require_once( WPINV_PLUGIN_DIR . 'widgets/invoice-receipt.php' );
230
-		require_once( WPINV_PLUGIN_DIR . 'widgets/invoice-messages.php' );
231
-		require_once( WPINV_PLUGIN_DIR . 'widgets/subscriptions.php' );
232
-		require_once( WPINV_PLUGIN_DIR . 'widgets/buy-item.php' );
233
-		require_once( WPINV_PLUGIN_DIR . 'widgets/getpaid.php' );
234
-
235
-		if ( is_admin() || ( defined( 'WP_CLI' ) && WP_CLI ) ) {
236
-			GetPaid_Post_Types_Admin::init();
237
-
238
-			require_once( WPINV_PLUGIN_DIR . 'includes/admin/wpinv-upgrade-functions.php' );
239
-			require_once( WPINV_PLUGIN_DIR . 'includes/admin/wpinv-admin-functions.php' );
240
-			require_once( WPINV_PLUGIN_DIR . 'includes/admin/meta-boxes/class-mb-payment-form.php' );
241
-			require_once( WPINV_PLUGIN_DIR . 'includes/admin/meta-boxes/class-mb-invoice-notes.php' );
242
-			require_once( WPINV_PLUGIN_DIR . 'includes/admin/admin-pages.php' );
243
-			require_once( WPINV_PLUGIN_DIR . 'includes/admin/class-wpinv-admin-menus.php' );
244
-			require_once( WPINV_PLUGIN_DIR . 'includes/admin/class-wpinv-users.php' );
245
-			require_once( WPINV_PLUGIN_DIR . 'includes/admin/class-getpaid-admin-profile.php' );
246
-			// load the user class only on the users.php page
247
-			global $pagenow;
248
-			if($pagenow=='users.php'){
249
-				new WPInv_Admin_Users();
250
-			}
251
-		}
252
-
253
-		// Register cli commands
254
-		if ( defined( 'WP_CLI' ) && WP_CLI ) {
255
-			require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-cli.php' );
256
-			WP_CLI::add_command( 'invoicing', 'WPInv_CLI' );
257
-		}
258
-
259
-		require_once( WPINV_PLUGIN_DIR . 'includes/admin/install.php' );
260
-	}
261
-
262
-	/**
263
-	 * Class autoloader
264
-	 *
265
-	 * @param       string $class_name The name of the class to load.
266
-	 * @access      public
267
-	 * @since       1.0.19
268
-	 * @return      void
269
-	 */
270
-	public function autoload( $class_name ) {
271
-
272
-		// Normalize the class name...
273
-		$class_name  = strtolower( $class_name );
274
-
275
-		// ... and make sure it is our class.
276
-		if ( false === strpos( $class_name, 'getpaid_' ) && false === strpos( $class_name, 'wpinv_' ) ) {
277
-			return;
278
-		}
279
-
280
-		// Next, prepare the file name from the class.
281
-		$file_name = 'class-' . str_replace( '_', '-', $class_name ) . '.php';
282
-
283
-		// Base path of the classes.
284
-		$plugin_path = untrailingslashit( WPINV_PLUGIN_DIR );
285
-
286
-		// And an array of possible locations in order of importance.
287
-		$locations = array(
288
-			"$plugin_path/includes",
289
-			"$plugin_path/includes/data-stores",
290
-			"$plugin_path/includes/gateways",
291
-			"$plugin_path/includes/payments",
292
-			"$plugin_path/includes/geolocation",
293
-			"$plugin_path/includes/reports",
294
-			"$plugin_path/includes/api",
295
-			"$plugin_path/includes/admin",
296
-			"$plugin_path/includes/admin/meta-boxes",
297
-		);
298
-
299
-		foreach ( apply_filters( 'getpaid_autoload_locations', $locations ) as $location ) {
300
-
301
-			if ( file_exists( trailingslashit( $location ) . $file_name ) ) {
302
-				include trailingslashit( $location ) . $file_name;
303
-				break;
304
-			}
305
-
306
-		}
307
-
308
-	}
309
-
310
-	/**
311
-	 * Inits hooks etc.
312
-	 */
313
-	public function init() {
314
-
315
-		// Fires before getpaid inits.
316
-		do_action( 'before_getpaid_init', $this );
317
-
318
-		// Load default gateways.
319
-		$gateways = apply_filters(
320
-			'getpaid_default_gateways',
321
-			array(
322
-				'manual'        => 'GetPaid_Manual_Gateway',
323
-				'paypal'        => 'GetPaid_Paypal_Gateway',
324
-				'worldpay'      => 'GetPaid_Worldpay_Gateway',
325
-				'bank_transfer' => 'GetPaid_Bank_Transfer_Gateway',
326
-				'authorizenet'  => 'GetPaid_Authorize_Net_Gateway',
327
-			)
328
-		);
329
-
330
-		foreach ( $gateways as $id => $class ) {
331
-			$this->gateways[ $id ] = new $class();
332
-		}
333
-
334
-		// Fires after getpaid inits.
335
-		do_action( 'getpaid_init', $this );
336
-
337
-	}
338
-
339
-	/**
340
-	 * Checks if this is an IPN request and processes it.
341
-	 */
342
-	public function maybe_process_ipn() {
343
-
344
-		// Ensure that this is an IPN request.
345
-		if ( empty( $_GET['wpi-listener'] ) || 'IPN' !== $_GET['wpi-listener'] || empty( $_GET['wpi-gateway'] ) ) {
346
-			return;
347
-		}
348
-
349
-		$gateway = wpinv_clean( $_GET['wpi-gateway'] );
350
-
351
-		do_action( 'wpinv_verify_payment_ipn', $gateway );
352
-		do_action( "wpinv_verify_{$gateway}_ipn" );
353
-		exit;
354
-
355
-	}
356
-
357
-	public function enqueue_scripts() {
358
-		$suffix       = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
359
-
360
-		$version = filemtime( WPINV_PLUGIN_DIR . 'assets/css/invoice-front.css' );
361
-		wp_register_style( 'wpinv_front_style', WPINV_PLUGIN_URL . 'assets/css/invoice-front.css', array(), $version );
362
-		wp_enqueue_style( 'wpinv_front_style' );
363
-
364
-		// Register scripts
365
-		wp_register_script( 'jquery-blockui', WPINV_PLUGIN_URL . 'assets/js/jquery.blockUI.min.js', array( 'jquery' ), '2.70', true );
366
-		wp_register_script( 'wpinv-front-script', WPINV_PLUGIN_URL . 'assets/js/invoice-front.js', array( 'jquery' ),  filemtime( WPINV_PLUGIN_DIR . 'assets/js/invoice-front.js' ) );
367
-
368
-		$localize                         = array();
369
-		$localize['ajax_url']             = admin_url( 'admin-ajax.php' );
370
-		$localize['nonce']                = wp_create_nonce( 'wpinv-nonce' );
371
-		$localize['txtComplete']          = __( 'Continue', 'invoicing' );
372
-		$localize['UseTaxes']             = wpinv_use_taxes();
373
-		$localize['checkoutNonce']        = wp_create_nonce( 'wpinv_checkout_nonce' );
374
-		$localize['formNonce']            = wp_create_nonce( 'getpaid_form_nonce' );
375
-		$localize['connectionError']      = __( 'Could not establish a connection to the server.', 'invoicing' );
376
-
377
-		$localize = apply_filters( 'wpinv_front_js_localize', $localize );
378
-
379
-		wp_enqueue_script( 'jquery-blockui' );
380
-
381
-		wp_enqueue_style( "select2", WPINV_PLUGIN_URL . 'assets/css/select2/select2.min.css', array(), WPINV_VERSION, 'all' );
382
-		wp_enqueue_script('select2', WPINV_PLUGIN_URL . 'assets/js/select2/select2.full' . $suffix . '.js', array( 'jquery' ), WPINV_VERSION );
383
-
384
-		wp_enqueue_script( 'wpinv-front-script' );
385
-		wp_localize_script( 'wpinv-front-script', 'WPInv', $localize );
386
-
387
-		$version = filemtime( WPINV_PLUGIN_DIR . 'assets/js/payment-forms.js' );
388
-		wp_enqueue_script( 'wpinv-payment-form-script', WPINV_PLUGIN_URL . 'assets/js/payment-forms.js', array( 'wpinv-front-script' ),  $version, true );
389
-	}
390
-
391
-	public function wpinv_actions() {
392
-		if ( isset( $_REQUEST['wpi_action'] ) ) {
393
-			do_action( 'wpinv_' . wpinv_sanitize_key( $_REQUEST['wpi_action'] ), $_REQUEST );
394
-		}
395
-	}
17
+    /**
18
+     * GetPaid version.
19
+     *
20
+     * @var string
21
+     */
22
+    public $version;
23
+
24
+    /**
25
+     * Data container.
26
+     *
27
+     * @var array
28
+     */
29
+    protected $data = array();
30
+
31
+    /**
32
+     * Form elements instance.
33
+     *
34
+     * @var WPInv_Payment_Form_Elements
35
+     */
36
+    public $form_elements;
37
+
38
+    /**
39
+     * @param array An array of payment gateways.
40
+     */
41
+    public $gateways;
42
+
43
+    /**
44
+     * Class constructor.
45
+     */
46
+    public function __construct() {
47
+        $this->define_constants();
48
+        $this->includes();
49
+        $this->init_hooks();
50
+        $this->set_properties();
51
+    }
52
+
53
+    /**
54
+     * Sets a custom data property.
55
+     * 
56
+     * @param string $prop The prop to set.
57
+     * @param mixed $value The value to retrieve.
58
+     */
59
+    public function set( $prop, $value ) {
60
+        $this->data[ $prop ] = $value;
61
+    }
62
+
63
+    /**
64
+     * Gets a custom data property.
65
+     *
66
+     * @param string $prop The prop to set.
67
+     * @return mixed The value.
68
+     */
69
+    public function get( $prop ) {
70
+
71
+        if ( isset( $this->data[ $prop ] ) ) {
72
+            return $this->data[ $prop ];
73
+        }
74
+
75
+        return null;
76
+    }
77
+
78
+    /**
79
+     * Define class properties.
80
+     */
81
+    public function set_properties() {
82
+
83
+        // Sessions.
84
+        $this->set( 'session', new WPInv_Session_Handler() );
85
+        $GLOBALS['wpi_session'] = $this->get( 'session' ); // Backwards compatibility.
86
+        $GLOBALS['wpinv_euvat'] = new WPInv_EUVat(); // Backwards compatibility.
87
+
88
+        // Init other objects.
89
+        $this->set( 'session', new WPInv_Session_Handler() );
90
+        $this->set( 'notes', new WPInv_Notes() );
91
+        $this->set( 'api', new WPInv_API() );
92
+        $this->set( 'post_types', new GetPaid_Post_Types() );
93
+        $this->set( 'template', new GetPaid_Template() );
94
+        $this->set( 'admin', new GetPaid_Admin() );
95
+        $this->set( 'subscriptions', new WPInv_Subscriptions() );
96
+        $this->set( 'invoice_emails', new GetPaid_Invoice_Notification_Emails() );
97
+        $this->set( 'subscription_emails', new GetPaid_Subscription_Notification_Emails() );
98
+        $this->set( 'daily_maintenace', new GetPaid_Daily_Maintenance() );
99
+        $this->set( 'payment_forms', new GetPaid_Payment_Forms() );
100
+        $this->set( 'maxmind', new GetPaid_MaxMind_Geolocation() );
101
+
102
+    }
103
+
104
+        /**
105
+         * Define plugin constants.
106
+         */
107
+    public function define_constants() {
108
+        define( 'WPINV_PLUGIN_DIR', plugin_dir_path( WPINV_PLUGIN_FILE ) );
109
+        define( 'WPINV_PLUGIN_URL', plugin_dir_url( WPINV_PLUGIN_FILE ) );
110
+        $this->version = WPINV_VERSION;
111
+    }
112
+
113
+    /**
114
+     * Hook into actions and filters.
115
+     *
116
+     * @since 1.0.19
117
+     */
118
+    protected function init_hooks() {
119
+        /* Internationalize the text strings used. */
120
+        add_action( 'plugins_loaded', array( &$this, 'plugins_loaded' ) );
121
+
122
+        // Init the plugin after WordPress inits.
123
+        add_action( 'init', array( $this, 'init' ), 1 );
124
+        add_action( 'init', array( $this, 'maybe_process_ipn' ), 10 );
125
+        add_action( 'init', array( $this, 'wpinv_actions' ) );
126
+        add_action( 'init', array( $this, 'maybe_do_authenticated_action' ), 100 );
127
+
128
+        if ( class_exists( 'BuddyPress' ) ) {
129
+            add_action( 'bp_include', array( &$this, 'bp_invoicing_init' ) );
130
+        }
131
+
132
+        add_action( 'wp_enqueue_scripts', array( &$this, 'enqueue_scripts' ) );
133
+        add_action( 'wp_footer', array( &$this, 'wp_footer' ) );
134
+        add_action( 'widgets_init', array( &$this, 'register_widgets' ) );
135
+        add_filter( 'wpseo_exclude_from_sitemap_by_post_ids', array( $this, 'wpseo_exclude_from_sitemap_by_post_ids' ) );
136
+        add_filter( 'pre_get_posts', array( &$this, 'pre_get_posts' ) );
137
+
138
+        // Fires after registering actions.
139
+        do_action( 'wpinv_actions', $this );
140
+        do_action( 'getpaid_actions', $this );
141
+
142
+    }
143
+
144
+    public function plugins_loaded() {
145
+        /* Internationalize the text strings used. */
146
+        $this->load_textdomain();
147
+
148
+        do_action( 'wpinv_loaded' );
149
+
150
+        // Fix oxygen page builder conflict
151
+        if ( function_exists( 'ct_css_output' ) ) {
152
+            wpinv_oxygen_fix_conflict();
153
+        }
154
+    }
155
+
156
+    /**
157
+     * Load the translation of the plugin.
158
+     *
159
+     * @since 1.0
160
+     */
161
+    public function load_textdomain( $locale = NULL ) {
162
+        if ( empty( $locale ) ) {
163
+            $locale = is_admin() && function_exists( 'get_user_locale' ) ? get_user_locale() : get_locale();
164
+        }
165
+
166
+        $locale = apply_filters( 'plugin_locale', $locale, 'invoicing' );
167
+
168
+        unload_textdomain( 'invoicing' );
169
+        load_textdomain( 'invoicing', WP_LANG_DIR . '/invoicing/invoicing-' . $locale . '.mo' );
170
+        load_plugin_textdomain( 'invoicing', false, WPINV_PLUGIN_DIR . 'languages' );
171
+
172
+        /**
173
+         * Define language constants.
174
+         */
175
+        require_once( WPINV_PLUGIN_DIR . 'language.php' );
176
+    }
177
+
178
+    /**
179
+     * Include required core files used in admin and on the frontend.
180
+     */
181
+    public function includes() {
182
+
183
+        // Start with the settings.
184
+        require_once( WPINV_PLUGIN_DIR . 'includes/admin/register-settings.php' );
185
+
186
+        // Packages/libraries.
187
+        require_once( WPINV_PLUGIN_DIR . 'vendor/autoload.php' );
188
+        require_once( WPINV_PLUGIN_DIR . 'vendor/ayecode/wp-ayecode-ui/ayecode-ui-loader.php' );
189
+
190
+        // Load functions.
191
+        require_once( WPINV_PLUGIN_DIR . 'includes/deprecated-functions.php' );
192
+        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-email-functions.php' );
193
+        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-general-functions.php' );
194
+        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-helper-functions.php' );
195
+        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-tax-functions.php' );
196
+        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-template-functions.php' );
197
+        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-address-functions.php' );
198
+        require_once( WPINV_PLUGIN_DIR . 'includes/invoice-functions.php' );
199
+        require_once( WPINV_PLUGIN_DIR . 'includes/subscription-functions.php' );
200
+        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-item-functions.php' );
201
+        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-discount-functions.php' );
202
+        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-gateway-functions.php' );
203
+        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-payment-functions.php' );
204
+        require_once( WPINV_PLUGIN_DIR . 'includes/user-functions.php' );
205
+        require_once( WPINV_PLUGIN_DIR . 'includes/error-functions.php' );
206
+
207
+        // Register autoloader.
208
+        try {
209
+            spl_autoload_register( array( $this, 'autoload' ), true );
210
+        } catch ( Exception $e ) {
211
+            wpinv_error_log( $e->getMessage(), '', __FILE__, 149, true );
212
+        }
213
+
214
+        require_once( WPINV_PLUGIN_DIR . 'includes/abstracts/abstract-wpinv-session.php' );
215
+        require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-session-handler.php' );
216
+        require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-ajax.php' );
217
+        require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-api.php' );
218
+        require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-cache-helper.php' );
219
+        require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-db.php' );
220
+        require_once( WPINV_PLUGIN_DIR . 'includes/admin/subscriptions.php' );
221
+        require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-subscriptions-db.php' );
222
+        require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-subscription.php' );
223
+        require_once( WPINV_PLUGIN_DIR . 'includes/abstracts/abstract-wpinv-privacy.php' );
224
+        require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-privacy.php' );
225
+        require_once( WPINV_PLUGIN_DIR . 'includes/libraries/class-ayecode-addons.php' );
226
+        require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-addons.php' );
227
+        require_once( WPINV_PLUGIN_DIR . 'widgets/checkout.php' );
228
+        require_once( WPINV_PLUGIN_DIR . 'widgets/invoice-history.php' );
229
+        require_once( WPINV_PLUGIN_DIR . 'widgets/invoice-receipt.php' );
230
+        require_once( WPINV_PLUGIN_DIR . 'widgets/invoice-messages.php' );
231
+        require_once( WPINV_PLUGIN_DIR . 'widgets/subscriptions.php' );
232
+        require_once( WPINV_PLUGIN_DIR . 'widgets/buy-item.php' );
233
+        require_once( WPINV_PLUGIN_DIR . 'widgets/getpaid.php' );
234
+
235
+        if ( is_admin() || ( defined( 'WP_CLI' ) && WP_CLI ) ) {
236
+            GetPaid_Post_Types_Admin::init();
237
+
238
+            require_once( WPINV_PLUGIN_DIR . 'includes/admin/wpinv-upgrade-functions.php' );
239
+            require_once( WPINV_PLUGIN_DIR . 'includes/admin/wpinv-admin-functions.php' );
240
+            require_once( WPINV_PLUGIN_DIR . 'includes/admin/meta-boxes/class-mb-payment-form.php' );
241
+            require_once( WPINV_PLUGIN_DIR . 'includes/admin/meta-boxes/class-mb-invoice-notes.php' );
242
+            require_once( WPINV_PLUGIN_DIR . 'includes/admin/admin-pages.php' );
243
+            require_once( WPINV_PLUGIN_DIR . 'includes/admin/class-wpinv-admin-menus.php' );
244
+            require_once( WPINV_PLUGIN_DIR . 'includes/admin/class-wpinv-users.php' );
245
+            require_once( WPINV_PLUGIN_DIR . 'includes/admin/class-getpaid-admin-profile.php' );
246
+            // load the user class only on the users.php page
247
+            global $pagenow;
248
+            if($pagenow=='users.php'){
249
+                new WPInv_Admin_Users();
250
+            }
251
+        }
252
+
253
+        // Register cli commands
254
+        if ( defined( 'WP_CLI' ) && WP_CLI ) {
255
+            require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-cli.php' );
256
+            WP_CLI::add_command( 'invoicing', 'WPInv_CLI' );
257
+        }
258
+
259
+        require_once( WPINV_PLUGIN_DIR . 'includes/admin/install.php' );
260
+    }
261
+
262
+    /**
263
+     * Class autoloader
264
+     *
265
+     * @param       string $class_name The name of the class to load.
266
+     * @access      public
267
+     * @since       1.0.19
268
+     * @return      void
269
+     */
270
+    public function autoload( $class_name ) {
271
+
272
+        // Normalize the class name...
273
+        $class_name  = strtolower( $class_name );
396 274
 
397
-	/**
275
+        // ... and make sure it is our class.
276
+        if ( false === strpos( $class_name, 'getpaid_' ) && false === strpos( $class_name, 'wpinv_' ) ) {
277
+            return;
278
+        }
279
+
280
+        // Next, prepare the file name from the class.
281
+        $file_name = 'class-' . str_replace( '_', '-', $class_name ) . '.php';
282
+
283
+        // Base path of the classes.
284
+        $plugin_path = untrailingslashit( WPINV_PLUGIN_DIR );
285
+
286
+        // And an array of possible locations in order of importance.
287
+        $locations = array(
288
+            "$plugin_path/includes",
289
+            "$plugin_path/includes/data-stores",
290
+            "$plugin_path/includes/gateways",
291
+            "$plugin_path/includes/payments",
292
+            "$plugin_path/includes/geolocation",
293
+            "$plugin_path/includes/reports",
294
+            "$plugin_path/includes/api",
295
+            "$plugin_path/includes/admin",
296
+            "$plugin_path/includes/admin/meta-boxes",
297
+        );
298
+
299
+        foreach ( apply_filters( 'getpaid_autoload_locations', $locations ) as $location ) {
300
+
301
+            if ( file_exists( trailingslashit( $location ) . $file_name ) ) {
302
+                include trailingslashit( $location ) . $file_name;
303
+                break;
304
+            }
305
+
306
+        }
307
+
308
+    }
309
+
310
+    /**
311
+     * Inits hooks etc.
312
+     */
313
+    public function init() {
314
+
315
+        // Fires before getpaid inits.
316
+        do_action( 'before_getpaid_init', $this );
317
+
318
+        // Load default gateways.
319
+        $gateways = apply_filters(
320
+            'getpaid_default_gateways',
321
+            array(
322
+                'manual'        => 'GetPaid_Manual_Gateway',
323
+                'paypal'        => 'GetPaid_Paypal_Gateway',
324
+                'worldpay'      => 'GetPaid_Worldpay_Gateway',
325
+                'bank_transfer' => 'GetPaid_Bank_Transfer_Gateway',
326
+                'authorizenet'  => 'GetPaid_Authorize_Net_Gateway',
327
+            )
328
+        );
329
+
330
+        foreach ( $gateways as $id => $class ) {
331
+            $this->gateways[ $id ] = new $class();
332
+        }
333
+
334
+        // Fires after getpaid inits.
335
+        do_action( 'getpaid_init', $this );
336
+
337
+    }
338
+
339
+    /**
340
+     * Checks if this is an IPN request and processes it.
341
+     */
342
+    public function maybe_process_ipn() {
343
+
344
+        // Ensure that this is an IPN request.
345
+        if ( empty( $_GET['wpi-listener'] ) || 'IPN' !== $_GET['wpi-listener'] || empty( $_GET['wpi-gateway'] ) ) {
346
+            return;
347
+        }
348
+
349
+        $gateway = wpinv_clean( $_GET['wpi-gateway'] );
350
+
351
+        do_action( 'wpinv_verify_payment_ipn', $gateway );
352
+        do_action( "wpinv_verify_{$gateway}_ipn" );
353
+        exit;
354
+
355
+    }
356
+
357
+    public function enqueue_scripts() {
358
+        $suffix       = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
359
+
360
+        $version = filemtime( WPINV_PLUGIN_DIR . 'assets/css/invoice-front.css' );
361
+        wp_register_style( 'wpinv_front_style', WPINV_PLUGIN_URL . 'assets/css/invoice-front.css', array(), $version );
362
+        wp_enqueue_style( 'wpinv_front_style' );
363
+
364
+        // Register scripts
365
+        wp_register_script( 'jquery-blockui', WPINV_PLUGIN_URL . 'assets/js/jquery.blockUI.min.js', array( 'jquery' ), '2.70', true );
366
+        wp_register_script( 'wpinv-front-script', WPINV_PLUGIN_URL . 'assets/js/invoice-front.js', array( 'jquery' ),  filemtime( WPINV_PLUGIN_DIR . 'assets/js/invoice-front.js' ) );
367
+
368
+        $localize                         = array();
369
+        $localize['ajax_url']             = admin_url( 'admin-ajax.php' );
370
+        $localize['nonce']                = wp_create_nonce( 'wpinv-nonce' );
371
+        $localize['txtComplete']          = __( 'Continue', 'invoicing' );
372
+        $localize['UseTaxes']             = wpinv_use_taxes();
373
+        $localize['checkoutNonce']        = wp_create_nonce( 'wpinv_checkout_nonce' );
374
+        $localize['formNonce']            = wp_create_nonce( 'getpaid_form_nonce' );
375
+        $localize['connectionError']      = __( 'Could not establish a connection to the server.', 'invoicing' );
376
+
377
+        $localize = apply_filters( 'wpinv_front_js_localize', $localize );
378
+
379
+        wp_enqueue_script( 'jquery-blockui' );
380
+
381
+        wp_enqueue_style( "select2", WPINV_PLUGIN_URL . 'assets/css/select2/select2.min.css', array(), WPINV_VERSION, 'all' );
382
+        wp_enqueue_script('select2', WPINV_PLUGIN_URL . 'assets/js/select2/select2.full' . $suffix . '.js', array( 'jquery' ), WPINV_VERSION );
383
+
384
+        wp_enqueue_script( 'wpinv-front-script' );
385
+        wp_localize_script( 'wpinv-front-script', 'WPInv', $localize );
386
+
387
+        $version = filemtime( WPINV_PLUGIN_DIR . 'assets/js/payment-forms.js' );
388
+        wp_enqueue_script( 'wpinv-payment-form-script', WPINV_PLUGIN_URL . 'assets/js/payment-forms.js', array( 'wpinv-front-script' ),  $version, true );
389
+    }
390
+
391
+    public function wpinv_actions() {
392
+        if ( isset( $_REQUEST['wpi_action'] ) ) {
393
+            do_action( 'wpinv_' . wpinv_sanitize_key( $_REQUEST['wpi_action'] ), $_REQUEST );
394
+        }
395
+    }
396
+
397
+    /**
398 398
      * Fires an action after verifying that a user can fire them.
399
-	 *
400
-	 * Note: If the action is on an invoice, subscription etc, esure that the
401
-	 * current user owns the invoice/subscription.
399
+     *
400
+     * Note: If the action is on an invoice, subscription etc, esure that the
401
+     * current user owns the invoice/subscription.
402 402
      */
403 403
     public function maybe_do_authenticated_action() {
404 404
 
405
-		if ( isset( $_REQUEST['getpaid-action'] ) && isset( $_REQUEST['getpaid-nonce'] ) && wp_verify_nonce( $_REQUEST['getpaid-nonce'], 'getpaid-nonce' ) ) {
405
+        if ( isset( $_REQUEST['getpaid-action'] ) && isset( $_REQUEST['getpaid-nonce'] ) && wp_verify_nonce( $_REQUEST['getpaid-nonce'], 'getpaid-nonce' ) ) {
406 406
 
407
-			$key  = sanitize_key( $_REQUEST['getpaid-action'] );
408
-			$data = wp_unslash( $_REQUEST );
409
-			if ( is_user_logged_in() ) {
410
-				do_action( "getpaid_authenticated_action_$key", $data );
411
-			}
407
+            $key  = sanitize_key( $_REQUEST['getpaid-action'] );
408
+            $data = wp_unslash( $_REQUEST );
409
+            if ( is_user_logged_in() ) {
410
+                do_action( "getpaid_authenticated_action_$key", $data );
411
+            }
412 412
 
413
-			do_action( "getpaid_unauthenticated_action_$key", $data );
413
+            do_action( "getpaid_unauthenticated_action_$key", $data );
414 414
 
415
-		}
415
+        }
416 416
 
417 417
     }
418 418
 
419
-	public function pre_get_posts( $wp_query ) {
420
-
421
-		if ( ! is_admin() && ! empty( $wp_query->query_vars['post_type'] ) && getpaid_is_invoice_post_type( $wp_query->query_vars['post_type'] ) && is_user_logged_in() && is_single() && $wp_query->is_main_query() ) {
422
-			$wp_query->query_vars['post_status'] = array_keys( wpinv_get_invoice_statuses( false, false, $wp_query->query_vars['post_type'] ) );
423
-		}
424
-
425
-		return $wp_query;
426
-	}
427
-
428
-	public function bp_invoicing_init() {
429
-		require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-bp-core.php' );
430
-	}
431
-
432
-	/**
433
-	 * Register widgets
434
-	 *
435
-	 */
436
-	public function register_widgets() {
437
-		$widgets = apply_filters(
438
-			'getpaid_widget_classes',
439
-			array(
440
-				'WPInv_Checkout_Widget',
441
-				'WPInv_History_Widget',
442
-				'WPInv_Receipt_Widget',
443
-				'WPInv_Subscriptions_Widget',
444
-				'WPInv_Buy_Item_Widget',
445
-				'WPInv_Messages_Widget',
446
-				'WPInv_GetPaid_Widget'
447
-			)
448
-		);
449
-
450
-		foreach ( $widgets as $widget ) {
451
-			register_widget( $widget );
452
-		}
419
+    public function pre_get_posts( $wp_query ) {
420
+
421
+        if ( ! is_admin() && ! empty( $wp_query->query_vars['post_type'] ) && getpaid_is_invoice_post_type( $wp_query->query_vars['post_type'] ) && is_user_logged_in() && is_single() && $wp_query->is_main_query() ) {
422
+            $wp_query->query_vars['post_status'] = array_keys( wpinv_get_invoice_statuses( false, false, $wp_query->query_vars['post_type'] ) );
423
+        }
424
+
425
+        return $wp_query;
426
+    }
427
+
428
+    public function bp_invoicing_init() {
429
+        require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-bp-core.php' );
430
+    }
431
+
432
+    /**
433
+     * Register widgets
434
+     *
435
+     */
436
+    public function register_widgets() {
437
+        $widgets = apply_filters(
438
+            'getpaid_widget_classes',
439
+            array(
440
+                'WPInv_Checkout_Widget',
441
+                'WPInv_History_Widget',
442
+                'WPInv_Receipt_Widget',
443
+                'WPInv_Subscriptions_Widget',
444
+                'WPInv_Buy_Item_Widget',
445
+                'WPInv_Messages_Widget',
446
+                'WPInv_GetPaid_Widget'
447
+            )
448
+        );
449
+
450
+        foreach ( $widgets as $widget ) {
451
+            register_widget( $widget );
452
+        }
453 453
 		
454
-	}
454
+    }
455 455
 
456
-	/**
457
-	 * Remove our pages from yoast sitemaps.
458
-	 *
459
-	 * @since 1.0.19
460
-	 * @param int[] $excluded_posts_ids
461
-	 */
462
-	public function wpseo_exclude_from_sitemap_by_post_ids( $excluded_posts_ids ){
456
+    /**
457
+     * Remove our pages from yoast sitemaps.
458
+     *
459
+     * @since 1.0.19
460
+     * @param int[] $excluded_posts_ids
461
+     */
462
+    public function wpseo_exclude_from_sitemap_by_post_ids( $excluded_posts_ids ){
463 463
 
464
-		// Ensure that we have an array.
465
-		if ( ! is_array( $excluded_posts_ids ) ) {
466
-			$excluded_posts_ids = array();
467
-		}
464
+        // Ensure that we have an array.
465
+        if ( ! is_array( $excluded_posts_ids ) ) {
466
+            $excluded_posts_ids = array();
467
+        }
468 468
 
469
-		// Prepare our pages.
470
-		$our_pages = array();
469
+        // Prepare our pages.
470
+        $our_pages = array();
471 471
 
472
-		// Checkout page.
473
-		$our_pages[] = wpinv_get_option( 'checkout_page', false );
472
+        // Checkout page.
473
+        $our_pages[] = wpinv_get_option( 'checkout_page', false );
474 474
 
475
-		// Success page.
476
-		$our_pages[] = wpinv_get_option( 'success_page', false );
475
+        // Success page.
476
+        $our_pages[] = wpinv_get_option( 'success_page', false );
477 477
 
478
-		// Failure page.
479
-		$our_pages[] = wpinv_get_option( 'failure_page', false );
478
+        // Failure page.
479
+        $our_pages[] = wpinv_get_option( 'failure_page', false );
480 480
 
481
-		// History page.
482
-		$our_pages[] = wpinv_get_option( 'invoice_history_page', false );
481
+        // History page.
482
+        $our_pages[] = wpinv_get_option( 'invoice_history_page', false );
483 483
 
484
-		// Subscriptions page.
485
-		$our_pages[] = wpinv_get_option( 'invoice_subscription_page', false );
484
+        // Subscriptions page.
485
+        $our_pages[] = wpinv_get_option( 'invoice_subscription_page', false );
486 486
 
487
-		$our_pages   = array_map( 'intval', array_filter( $our_pages ) );
487
+        $our_pages   = array_map( 'intval', array_filter( $our_pages ) );
488 488
 
489
-		$excluded_posts_ids = $excluded_posts_ids + $our_pages;
490
-		return array_unique( $excluded_posts_ids );
489
+        $excluded_posts_ids = $excluded_posts_ids + $our_pages;
490
+        return array_unique( $excluded_posts_ids );
491 491
 
492
-	}
492
+    }
493 493
 
494
-	public function wp_footer() {
495
-		echo '
494
+    public function wp_footer() {
495
+        echo '
496 496
 			<div class="bsui">
497 497
 				<div  id="getpaid-payment-modal" class="modal" tabindex="-1" role="dialog">
498 498
 					<div class="modal-dialog modal-dialog-centered modal-lg" role="checkout" style="max-width: 650px;">
@@ -508,6 +508,6 @@  discard block
 block discarded – undo
508 508
 				</div>
509 509
 			</div>
510 510
 		';
511
-	}
511
+    }
512 512
 
513 513
 }
Please login to merge, or discard this patch.
Spacing   +162 added lines, -162 removed lines patch added patch discarded remove patch
@@ -6,7 +6,7 @@  discard block
 block discarded – undo
6 6
  * @since   1.0.0
7 7
  */
8 8
 
9
-defined( 'ABSPATH' ) || exit;
9
+defined('ABSPATH') || exit;
10 10
 
11 11
 /**
12 12
  * Main Invoicing class.
@@ -56,8 +56,8 @@  discard block
 block discarded – undo
56 56
 	 * @param string $prop The prop to set.
57 57
 	 * @param mixed $value The value to retrieve.
58 58
 	 */
59
-	public function set( $prop, $value ) {
60
-		$this->data[ $prop ] = $value;
59
+	public function set($prop, $value) {
60
+		$this->data[$prop] = $value;
61 61
 	}
62 62
 
63 63
 	/**
@@ -66,10 +66,10 @@  discard block
 block discarded – undo
66 66
 	 * @param string $prop The prop to set.
67 67
 	 * @return mixed The value.
68 68
 	 */
69
-	public function get( $prop ) {
69
+	public function get($prop) {
70 70
 
71
-		if ( isset( $this->data[ $prop ] ) ) {
72
-			return $this->data[ $prop ];
71
+		if (isset($this->data[$prop])) {
72
+			return $this->data[$prop];
73 73
 		}
74 74
 
75 75
 		return null;
@@ -81,23 +81,23 @@  discard block
 block discarded – undo
81 81
 	public function set_properties() {
82 82
 
83 83
 		// Sessions.
84
-		$this->set( 'session', new WPInv_Session_Handler() );
85
-		$GLOBALS['wpi_session'] = $this->get( 'session' ); // Backwards compatibility.
84
+		$this->set('session', new WPInv_Session_Handler());
85
+		$GLOBALS['wpi_session'] = $this->get('session'); // Backwards compatibility.
86 86
 		$GLOBALS['wpinv_euvat'] = new WPInv_EUVat(); // Backwards compatibility.
87 87
 
88 88
 		// Init other objects.
89
-		$this->set( 'session', new WPInv_Session_Handler() );
90
-		$this->set( 'notes', new WPInv_Notes() );
91
-		$this->set( 'api', new WPInv_API() );
92
-		$this->set( 'post_types', new GetPaid_Post_Types() );
93
-		$this->set( 'template', new GetPaid_Template() );
94
-		$this->set( 'admin', new GetPaid_Admin() );
95
-		$this->set( 'subscriptions', new WPInv_Subscriptions() );
96
-		$this->set( 'invoice_emails', new GetPaid_Invoice_Notification_Emails() );
97
-		$this->set( 'subscription_emails', new GetPaid_Subscription_Notification_Emails() );
98
-		$this->set( 'daily_maintenace', new GetPaid_Daily_Maintenance() );
99
-		$this->set( 'payment_forms', new GetPaid_Payment_Forms() );
100
-		$this->set( 'maxmind', new GetPaid_MaxMind_Geolocation() );
89
+		$this->set('session', new WPInv_Session_Handler());
90
+		$this->set('notes', new WPInv_Notes());
91
+		$this->set('api', new WPInv_API());
92
+		$this->set('post_types', new GetPaid_Post_Types());
93
+		$this->set('template', new GetPaid_Template());
94
+		$this->set('admin', new GetPaid_Admin());
95
+		$this->set('subscriptions', new WPInv_Subscriptions());
96
+		$this->set('invoice_emails', new GetPaid_Invoice_Notification_Emails());
97
+		$this->set('subscription_emails', new GetPaid_Subscription_Notification_Emails());
98
+		$this->set('daily_maintenace', new GetPaid_Daily_Maintenance());
99
+		$this->set('payment_forms', new GetPaid_Payment_Forms());
100
+		$this->set('maxmind', new GetPaid_MaxMind_Geolocation());
101 101
 
102 102
 	}
103 103
 
@@ -105,8 +105,8 @@  discard block
 block discarded – undo
105 105
 	 * Define plugin constants.
106 106
 	 */
107 107
 	public function define_constants() {
108
-		define( 'WPINV_PLUGIN_DIR', plugin_dir_path( WPINV_PLUGIN_FILE ) );
109
-		define( 'WPINV_PLUGIN_URL', plugin_dir_url( WPINV_PLUGIN_FILE ) );
108
+		define('WPINV_PLUGIN_DIR', plugin_dir_path(WPINV_PLUGIN_FILE));
109
+		define('WPINV_PLUGIN_URL', plugin_dir_url(WPINV_PLUGIN_FILE));
110 110
 		$this->version = WPINV_VERSION;
111 111
 	}
112 112
 
@@ -117,27 +117,27 @@  discard block
 block discarded – undo
117 117
 	 */
118 118
 	protected function init_hooks() {
119 119
 		/* Internationalize the text strings used. */
120
-		add_action( 'plugins_loaded', array( &$this, 'plugins_loaded' ) );
120
+		add_action('plugins_loaded', array(&$this, 'plugins_loaded'));
121 121
 
122 122
 		// Init the plugin after WordPress inits.
123
-		add_action( 'init', array( $this, 'init' ), 1 );
124
-		add_action( 'init', array( $this, 'maybe_process_ipn' ), 10 );
125
-		add_action( 'init', array( $this, 'wpinv_actions' ) );
126
-		add_action( 'init', array( $this, 'maybe_do_authenticated_action' ), 100 );
123
+		add_action('init', array($this, 'init'), 1);
124
+		add_action('init', array($this, 'maybe_process_ipn'), 10);
125
+		add_action('init', array($this, 'wpinv_actions'));
126
+		add_action('init', array($this, 'maybe_do_authenticated_action'), 100);
127 127
 
128
-		if ( class_exists( 'BuddyPress' ) ) {
129
-			add_action( 'bp_include', array( &$this, 'bp_invoicing_init' ) );
128
+		if (class_exists('BuddyPress')) {
129
+			add_action('bp_include', array(&$this, 'bp_invoicing_init'));
130 130
 		}
131 131
 
132
-		add_action( 'wp_enqueue_scripts', array( &$this, 'enqueue_scripts' ) );
133
-		add_action( 'wp_footer', array( &$this, 'wp_footer' ) );
134
-		add_action( 'widgets_init', array( &$this, 'register_widgets' ) );
135
-		add_filter( 'wpseo_exclude_from_sitemap_by_post_ids', array( $this, 'wpseo_exclude_from_sitemap_by_post_ids' ) );
136
-		add_filter( 'pre_get_posts', array( &$this, 'pre_get_posts' ) );
132
+		add_action('wp_enqueue_scripts', array(&$this, 'enqueue_scripts'));
133
+		add_action('wp_footer', array(&$this, 'wp_footer'));
134
+		add_action('widgets_init', array(&$this, 'register_widgets'));
135
+		add_filter('wpseo_exclude_from_sitemap_by_post_ids', array($this, 'wpseo_exclude_from_sitemap_by_post_ids'));
136
+		add_filter('pre_get_posts', array(&$this, 'pre_get_posts'));
137 137
 
138 138
 		// Fires after registering actions.
139
-		do_action( 'wpinv_actions', $this );
140
-		do_action( 'getpaid_actions', $this );
139
+		do_action('wpinv_actions', $this);
140
+		do_action('getpaid_actions', $this);
141 141
 
142 142
 	}
143 143
 
@@ -145,10 +145,10 @@  discard block
 block discarded – undo
145 145
 		/* Internationalize the text strings used. */
146 146
 		$this->load_textdomain();
147 147
 
148
-		do_action( 'wpinv_loaded' );
148
+		do_action('wpinv_loaded');
149 149
 
150 150
 		// Fix oxygen page builder conflict
151
-		if ( function_exists( 'ct_css_output' ) ) {
151
+		if (function_exists('ct_css_output')) {
152 152
 			wpinv_oxygen_fix_conflict();
153 153
 		}
154 154
 	}
@@ -158,21 +158,21 @@  discard block
 block discarded – undo
158 158
 	 *
159 159
 	 * @since 1.0
160 160
 	 */
161
-	public function load_textdomain( $locale = NULL ) {
162
-		if ( empty( $locale ) ) {
163
-			$locale = is_admin() && function_exists( 'get_user_locale' ) ? get_user_locale() : get_locale();
161
+	public function load_textdomain($locale = NULL) {
162
+		if (empty($locale)) {
163
+			$locale = is_admin() && function_exists('get_user_locale') ? get_user_locale() : get_locale();
164 164
 		}
165 165
 
166
-		$locale = apply_filters( 'plugin_locale', $locale, 'invoicing' );
166
+		$locale = apply_filters('plugin_locale', $locale, 'invoicing');
167 167
 
168
-		unload_textdomain( 'invoicing' );
169
-		load_textdomain( 'invoicing', WP_LANG_DIR . '/invoicing/invoicing-' . $locale . '.mo' );
170
-		load_plugin_textdomain( 'invoicing', false, WPINV_PLUGIN_DIR . 'languages' );
168
+		unload_textdomain('invoicing');
169
+		load_textdomain('invoicing', WP_LANG_DIR . '/invoicing/invoicing-' . $locale . '.mo');
170
+		load_plugin_textdomain('invoicing', false, WPINV_PLUGIN_DIR . 'languages');
171 171
 
172 172
 		/**
173 173
 		 * Define language constants.
174 174
 		 */
175
-		require_once( WPINV_PLUGIN_DIR . 'language.php' );
175
+		require_once(WPINV_PLUGIN_DIR . 'language.php');
176 176
 	}
177 177
 
178 178
 	/**
@@ -181,82 +181,82 @@  discard block
 block discarded – undo
181 181
 	public function includes() {
182 182
 
183 183
 		// Start with the settings.
184
-		require_once( WPINV_PLUGIN_DIR . 'includes/admin/register-settings.php' );
184
+		require_once(WPINV_PLUGIN_DIR . 'includes/admin/register-settings.php');
185 185
 
186 186
 		// Packages/libraries.
187
-		require_once( WPINV_PLUGIN_DIR . 'vendor/autoload.php' );
188
-		require_once( WPINV_PLUGIN_DIR . 'vendor/ayecode/wp-ayecode-ui/ayecode-ui-loader.php' );
187
+		require_once(WPINV_PLUGIN_DIR . 'vendor/autoload.php');
188
+		require_once(WPINV_PLUGIN_DIR . 'vendor/ayecode/wp-ayecode-ui/ayecode-ui-loader.php');
189 189
 
190 190
 		// Load functions.
191
-		require_once( WPINV_PLUGIN_DIR . 'includes/deprecated-functions.php' );
192
-		require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-email-functions.php' );
193
-		require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-general-functions.php' );
194
-		require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-helper-functions.php' );
195
-		require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-tax-functions.php' );
196
-		require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-template-functions.php' );
197
-		require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-address-functions.php' );
198
-		require_once( WPINV_PLUGIN_DIR . 'includes/invoice-functions.php' );
199
-		require_once( WPINV_PLUGIN_DIR . 'includes/subscription-functions.php' );
200
-		require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-item-functions.php' );
201
-		require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-discount-functions.php' );
202
-		require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-gateway-functions.php' );
203
-		require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-payment-functions.php' );
204
-		require_once( WPINV_PLUGIN_DIR . 'includes/user-functions.php' );
205
-		require_once( WPINV_PLUGIN_DIR . 'includes/error-functions.php' );
191
+		require_once(WPINV_PLUGIN_DIR . 'includes/deprecated-functions.php');
192
+		require_once(WPINV_PLUGIN_DIR . 'includes/wpinv-email-functions.php');
193
+		require_once(WPINV_PLUGIN_DIR . 'includes/wpinv-general-functions.php');
194
+		require_once(WPINV_PLUGIN_DIR . 'includes/wpinv-helper-functions.php');
195
+		require_once(WPINV_PLUGIN_DIR . 'includes/wpinv-tax-functions.php');
196
+		require_once(WPINV_PLUGIN_DIR . 'includes/wpinv-template-functions.php');
197
+		require_once(WPINV_PLUGIN_DIR . 'includes/wpinv-address-functions.php');
198
+		require_once(WPINV_PLUGIN_DIR . 'includes/invoice-functions.php');
199
+		require_once(WPINV_PLUGIN_DIR . 'includes/subscription-functions.php');
200
+		require_once(WPINV_PLUGIN_DIR . 'includes/wpinv-item-functions.php');
201
+		require_once(WPINV_PLUGIN_DIR . 'includes/wpinv-discount-functions.php');
202
+		require_once(WPINV_PLUGIN_DIR . 'includes/wpinv-gateway-functions.php');
203
+		require_once(WPINV_PLUGIN_DIR . 'includes/wpinv-payment-functions.php');
204
+		require_once(WPINV_PLUGIN_DIR . 'includes/user-functions.php');
205
+		require_once(WPINV_PLUGIN_DIR . 'includes/error-functions.php');
206 206
 
207 207
 		// Register autoloader.
208 208
 		try {
209
-			spl_autoload_register( array( $this, 'autoload' ), true );
210
-		} catch ( Exception $e ) {
211
-			wpinv_error_log( $e->getMessage(), '', __FILE__, 149, true );
209
+			spl_autoload_register(array($this, 'autoload'), true);
210
+		} catch (Exception $e) {
211
+			wpinv_error_log($e->getMessage(), '', __FILE__, 149, true);
212 212
 		}
213 213
 
214
-		require_once( WPINV_PLUGIN_DIR . 'includes/abstracts/abstract-wpinv-session.php' );
215
-		require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-session-handler.php' );
216
-		require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-ajax.php' );
217
-		require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-api.php' );
218
-		require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-cache-helper.php' );
219
-		require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-db.php' );
220
-		require_once( WPINV_PLUGIN_DIR . 'includes/admin/subscriptions.php' );
221
-		require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-subscriptions-db.php' );
222
-		require_once( WPINV_PLUGIN_DIR . 'includes/wpinv-subscription.php' );
223
-		require_once( WPINV_PLUGIN_DIR . 'includes/abstracts/abstract-wpinv-privacy.php' );
224
-		require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-privacy.php' );
225
-		require_once( WPINV_PLUGIN_DIR . 'includes/libraries/class-ayecode-addons.php' );
226
-		require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-addons.php' );
227
-		require_once( WPINV_PLUGIN_DIR . 'widgets/checkout.php' );
228
-		require_once( WPINV_PLUGIN_DIR . 'widgets/invoice-history.php' );
229
-		require_once( WPINV_PLUGIN_DIR . 'widgets/invoice-receipt.php' );
230
-		require_once( WPINV_PLUGIN_DIR . 'widgets/invoice-messages.php' );
231
-		require_once( WPINV_PLUGIN_DIR . 'widgets/subscriptions.php' );
232
-		require_once( WPINV_PLUGIN_DIR . 'widgets/buy-item.php' );
233
-		require_once( WPINV_PLUGIN_DIR . 'widgets/getpaid.php' );
234
-
235
-		if ( is_admin() || ( defined( 'WP_CLI' ) && WP_CLI ) ) {
214
+		require_once(WPINV_PLUGIN_DIR . 'includes/abstracts/abstract-wpinv-session.php');
215
+		require_once(WPINV_PLUGIN_DIR . 'includes/class-wpinv-session-handler.php');
216
+		require_once(WPINV_PLUGIN_DIR . 'includes/class-wpinv-ajax.php');
217
+		require_once(WPINV_PLUGIN_DIR . 'includes/class-wpinv-api.php');
218
+		require_once(WPINV_PLUGIN_DIR . 'includes/class-wpinv-cache-helper.php');
219
+		require_once(WPINV_PLUGIN_DIR . 'includes/class-wpinv-db.php');
220
+		require_once(WPINV_PLUGIN_DIR . 'includes/admin/subscriptions.php');
221
+		require_once(WPINV_PLUGIN_DIR . 'includes/class-wpinv-subscriptions-db.php');
222
+		require_once(WPINV_PLUGIN_DIR . 'includes/wpinv-subscription.php');
223
+		require_once(WPINV_PLUGIN_DIR . 'includes/abstracts/abstract-wpinv-privacy.php');
224
+		require_once(WPINV_PLUGIN_DIR . 'includes/class-wpinv-privacy.php');
225
+		require_once(WPINV_PLUGIN_DIR . 'includes/libraries/class-ayecode-addons.php');
226
+		require_once(WPINV_PLUGIN_DIR . 'includes/class-wpinv-addons.php');
227
+		require_once(WPINV_PLUGIN_DIR . 'widgets/checkout.php');
228
+		require_once(WPINV_PLUGIN_DIR . 'widgets/invoice-history.php');
229
+		require_once(WPINV_PLUGIN_DIR . 'widgets/invoice-receipt.php');
230
+		require_once(WPINV_PLUGIN_DIR . 'widgets/invoice-messages.php');
231
+		require_once(WPINV_PLUGIN_DIR . 'widgets/subscriptions.php');
232
+		require_once(WPINV_PLUGIN_DIR . 'widgets/buy-item.php');
233
+		require_once(WPINV_PLUGIN_DIR . 'widgets/getpaid.php');
234
+
235
+		if (is_admin() || (defined('WP_CLI') && WP_CLI)) {
236 236
 			GetPaid_Post_Types_Admin::init();
237 237
 
238
-			require_once( WPINV_PLUGIN_DIR . 'includes/admin/wpinv-upgrade-functions.php' );
239
-			require_once( WPINV_PLUGIN_DIR . 'includes/admin/wpinv-admin-functions.php' );
240
-			require_once( WPINV_PLUGIN_DIR . 'includes/admin/meta-boxes/class-mb-payment-form.php' );
241
-			require_once( WPINV_PLUGIN_DIR . 'includes/admin/meta-boxes/class-mb-invoice-notes.php' );
242
-			require_once( WPINV_PLUGIN_DIR . 'includes/admin/admin-pages.php' );
243
-			require_once( WPINV_PLUGIN_DIR . 'includes/admin/class-wpinv-admin-menus.php' );
244
-			require_once( WPINV_PLUGIN_DIR . 'includes/admin/class-wpinv-users.php' );
245
-			require_once( WPINV_PLUGIN_DIR . 'includes/admin/class-getpaid-admin-profile.php' );
238
+			require_once(WPINV_PLUGIN_DIR . 'includes/admin/wpinv-upgrade-functions.php');
239
+			require_once(WPINV_PLUGIN_DIR . 'includes/admin/wpinv-admin-functions.php');
240
+			require_once(WPINV_PLUGIN_DIR . 'includes/admin/meta-boxes/class-mb-payment-form.php');
241
+			require_once(WPINV_PLUGIN_DIR . 'includes/admin/meta-boxes/class-mb-invoice-notes.php');
242
+			require_once(WPINV_PLUGIN_DIR . 'includes/admin/admin-pages.php');
243
+			require_once(WPINV_PLUGIN_DIR . 'includes/admin/class-wpinv-admin-menus.php');
244
+			require_once(WPINV_PLUGIN_DIR . 'includes/admin/class-wpinv-users.php');
245
+			require_once(WPINV_PLUGIN_DIR . 'includes/admin/class-getpaid-admin-profile.php');
246 246
 			// load the user class only on the users.php page
247 247
 			global $pagenow;
248
-			if($pagenow=='users.php'){
248
+			if ($pagenow == 'users.php') {
249 249
 				new WPInv_Admin_Users();
250 250
 			}
251 251
 		}
252 252
 
253 253
 		// Register cli commands
254
-		if ( defined( 'WP_CLI' ) && WP_CLI ) {
255
-			require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-cli.php' );
256
-			WP_CLI::add_command( 'invoicing', 'WPInv_CLI' );
254
+		if (defined('WP_CLI') && WP_CLI) {
255
+			require_once(WPINV_PLUGIN_DIR . 'includes/class-wpinv-cli.php');
256
+			WP_CLI::add_command('invoicing', 'WPInv_CLI');
257 257
 		}
258 258
 
259
-		require_once( WPINV_PLUGIN_DIR . 'includes/admin/install.php' );
259
+		require_once(WPINV_PLUGIN_DIR . 'includes/admin/install.php');
260 260
 	}
261 261
 
262 262
 	/**
@@ -267,21 +267,21 @@  discard block
 block discarded – undo
267 267
 	 * @since       1.0.19
268 268
 	 * @return      void
269 269
 	 */
270
-	public function autoload( $class_name ) {
270
+	public function autoload($class_name) {
271 271
 
272 272
 		// Normalize the class name...
273
-		$class_name  = strtolower( $class_name );
273
+		$class_name = strtolower($class_name);
274 274
 
275 275
 		// ... and make sure it is our class.
276
-		if ( false === strpos( $class_name, 'getpaid_' ) && false === strpos( $class_name, 'wpinv_' ) ) {
276
+		if (false === strpos($class_name, 'getpaid_') && false === strpos($class_name, 'wpinv_')) {
277 277
 			return;
278 278
 		}
279 279
 
280 280
 		// Next, prepare the file name from the class.
281
-		$file_name = 'class-' . str_replace( '_', '-', $class_name ) . '.php';
281
+		$file_name = 'class-' . str_replace('_', '-', $class_name) . '.php';
282 282
 
283 283
 		// Base path of the classes.
284
-		$plugin_path = untrailingslashit( WPINV_PLUGIN_DIR );
284
+		$plugin_path = untrailingslashit(WPINV_PLUGIN_DIR);
285 285
 
286 286
 		// And an array of possible locations in order of importance.
287 287
 		$locations = array(
@@ -296,10 +296,10 @@  discard block
 block discarded – undo
296 296
 			"$plugin_path/includes/admin/meta-boxes",
297 297
 		);
298 298
 
299
-		foreach ( apply_filters( 'getpaid_autoload_locations', $locations ) as $location ) {
299
+		foreach (apply_filters('getpaid_autoload_locations', $locations) as $location) {
300 300
 
301
-			if ( file_exists( trailingslashit( $location ) . $file_name ) ) {
302
-				include trailingslashit( $location ) . $file_name;
301
+			if (file_exists(trailingslashit($location) . $file_name)) {
302
+				include trailingslashit($location) . $file_name;
303 303
 				break;
304 304
 			}
305 305
 
@@ -313,7 +313,7 @@  discard block
 block discarded – undo
313 313
 	public function init() {
314 314
 
315 315
 		// Fires before getpaid inits.
316
-		do_action( 'before_getpaid_init', $this );
316
+		do_action('before_getpaid_init', $this);
317 317
 
318 318
 		// Load default gateways.
319 319
 		$gateways = apply_filters(
@@ -327,12 +327,12 @@  discard block
 block discarded – undo
327 327
 			)
328 328
 		);
329 329
 
330
-		foreach ( $gateways as $id => $class ) {
331
-			$this->gateways[ $id ] = new $class();
330
+		foreach ($gateways as $id => $class) {
331
+			$this->gateways[$id] = new $class();
332 332
 		}
333 333
 
334 334
 		// Fires after getpaid inits.
335
-		do_action( 'getpaid_init', $this );
335
+		do_action('getpaid_init', $this);
336 336
 
337 337
 	}
338 338
 
@@ -342,55 +342,55 @@  discard block
 block discarded – undo
342 342
 	public function maybe_process_ipn() {
343 343
 
344 344
 		// Ensure that this is an IPN request.
345
-		if ( empty( $_GET['wpi-listener'] ) || 'IPN' !== $_GET['wpi-listener'] || empty( $_GET['wpi-gateway'] ) ) {
345
+		if (empty($_GET['wpi-listener']) || 'IPN' !== $_GET['wpi-listener'] || empty($_GET['wpi-gateway'])) {
346 346
 			return;
347 347
 		}
348 348
 
349
-		$gateway = wpinv_clean( $_GET['wpi-gateway'] );
349
+		$gateway = wpinv_clean($_GET['wpi-gateway']);
350 350
 
351
-		do_action( 'wpinv_verify_payment_ipn', $gateway );
352
-		do_action( "wpinv_verify_{$gateway}_ipn" );
351
+		do_action('wpinv_verify_payment_ipn', $gateway);
352
+		do_action("wpinv_verify_{$gateway}_ipn");
353 353
 		exit;
354 354
 
355 355
 	}
356 356
 
357 357
 	public function enqueue_scripts() {
358
-		$suffix       = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
358
+		$suffix = defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ? '' : '.min';
359 359
 
360
-		$version = filemtime( WPINV_PLUGIN_DIR . 'assets/css/invoice-front.css' );
361
-		wp_register_style( 'wpinv_front_style', WPINV_PLUGIN_URL . 'assets/css/invoice-front.css', array(), $version );
362
-		wp_enqueue_style( 'wpinv_front_style' );
360
+		$version = filemtime(WPINV_PLUGIN_DIR . 'assets/css/invoice-front.css');
361
+		wp_register_style('wpinv_front_style', WPINV_PLUGIN_URL . 'assets/css/invoice-front.css', array(), $version);
362
+		wp_enqueue_style('wpinv_front_style');
363 363
 
364 364
 		// Register scripts
365
-		wp_register_script( 'jquery-blockui', WPINV_PLUGIN_URL . 'assets/js/jquery.blockUI.min.js', array( 'jquery' ), '2.70', true );
366
-		wp_register_script( 'wpinv-front-script', WPINV_PLUGIN_URL . 'assets/js/invoice-front.js', array( 'jquery' ),  filemtime( WPINV_PLUGIN_DIR . 'assets/js/invoice-front.js' ) );
365
+		wp_register_script('jquery-blockui', WPINV_PLUGIN_URL . 'assets/js/jquery.blockUI.min.js', array('jquery'), '2.70', true);
366
+		wp_register_script('wpinv-front-script', WPINV_PLUGIN_URL . 'assets/js/invoice-front.js', array('jquery'), filemtime(WPINV_PLUGIN_DIR . 'assets/js/invoice-front.js'));
367 367
 
368 368
 		$localize                         = array();
369
-		$localize['ajax_url']             = admin_url( 'admin-ajax.php' );
370
-		$localize['nonce']                = wp_create_nonce( 'wpinv-nonce' );
371
-		$localize['txtComplete']          = __( 'Continue', 'invoicing' );
369
+		$localize['ajax_url']             = admin_url('admin-ajax.php');
370
+		$localize['nonce']                = wp_create_nonce('wpinv-nonce');
371
+		$localize['txtComplete']          = __('Continue', 'invoicing');
372 372
 		$localize['UseTaxes']             = wpinv_use_taxes();
373
-		$localize['checkoutNonce']        = wp_create_nonce( 'wpinv_checkout_nonce' );
374
-		$localize['formNonce']            = wp_create_nonce( 'getpaid_form_nonce' );
375
-		$localize['connectionError']      = __( 'Could not establish a connection to the server.', 'invoicing' );
373
+		$localize['checkoutNonce']        = wp_create_nonce('wpinv_checkout_nonce');
374
+		$localize['formNonce']            = wp_create_nonce('getpaid_form_nonce');
375
+		$localize['connectionError']      = __('Could not establish a connection to the server.', 'invoicing');
376 376
 
377
-		$localize = apply_filters( 'wpinv_front_js_localize', $localize );
377
+		$localize = apply_filters('wpinv_front_js_localize', $localize);
378 378
 
379
-		wp_enqueue_script( 'jquery-blockui' );
379
+		wp_enqueue_script('jquery-blockui');
380 380
 
381
-		wp_enqueue_style( "select2", WPINV_PLUGIN_URL . 'assets/css/select2/select2.min.css', array(), WPINV_VERSION, 'all' );
382
-		wp_enqueue_script('select2', WPINV_PLUGIN_URL . 'assets/js/select2/select2.full' . $suffix . '.js', array( 'jquery' ), WPINV_VERSION );
381
+		wp_enqueue_style("select2", WPINV_PLUGIN_URL . 'assets/css/select2/select2.min.css', array(), WPINV_VERSION, 'all');
382
+		wp_enqueue_script('select2', WPINV_PLUGIN_URL . 'assets/js/select2/select2.full' . $suffix . '.js', array('jquery'), WPINV_VERSION);
383 383
 
384
-		wp_enqueue_script( 'wpinv-front-script' );
385
-		wp_localize_script( 'wpinv-front-script', 'WPInv', $localize );
384
+		wp_enqueue_script('wpinv-front-script');
385
+		wp_localize_script('wpinv-front-script', 'WPInv', $localize);
386 386
 
387
-		$version = filemtime( WPINV_PLUGIN_DIR . 'assets/js/payment-forms.js' );
388
-		wp_enqueue_script( 'wpinv-payment-form-script', WPINV_PLUGIN_URL . 'assets/js/payment-forms.js', array( 'wpinv-front-script' ),  $version, true );
387
+		$version = filemtime(WPINV_PLUGIN_DIR . 'assets/js/payment-forms.js');
388
+		wp_enqueue_script('wpinv-payment-form-script', WPINV_PLUGIN_URL . 'assets/js/payment-forms.js', array('wpinv-front-script'), $version, true);
389 389
 	}
390 390
 
391 391
 	public function wpinv_actions() {
392
-		if ( isset( $_REQUEST['wpi_action'] ) ) {
393
-			do_action( 'wpinv_' . wpinv_sanitize_key( $_REQUEST['wpi_action'] ), $_REQUEST );
392
+		if (isset($_REQUEST['wpi_action'])) {
393
+			do_action('wpinv_' . wpinv_sanitize_key($_REQUEST['wpi_action']), $_REQUEST);
394 394
 		}
395 395
 	}
396 396
 
@@ -402,31 +402,31 @@  discard block
 block discarded – undo
402 402
      */
403 403
     public function maybe_do_authenticated_action() {
404 404
 
405
-		if ( isset( $_REQUEST['getpaid-action'] ) && isset( $_REQUEST['getpaid-nonce'] ) && wp_verify_nonce( $_REQUEST['getpaid-nonce'], 'getpaid-nonce' ) ) {
405
+		if (isset($_REQUEST['getpaid-action']) && isset($_REQUEST['getpaid-nonce']) && wp_verify_nonce($_REQUEST['getpaid-nonce'], 'getpaid-nonce')) {
406 406
 
407
-			$key  = sanitize_key( $_REQUEST['getpaid-action'] );
408
-			$data = wp_unslash( $_REQUEST );
409
-			if ( is_user_logged_in() ) {
410
-				do_action( "getpaid_authenticated_action_$key", $data );
407
+			$key  = sanitize_key($_REQUEST['getpaid-action']);
408
+			$data = wp_unslash($_REQUEST);
409
+			if (is_user_logged_in()) {
410
+				do_action("getpaid_authenticated_action_$key", $data);
411 411
 			}
412 412
 
413
-			do_action( "getpaid_unauthenticated_action_$key", $data );
413
+			do_action("getpaid_unauthenticated_action_$key", $data);
414 414
 
415 415
 		}
416 416
 
417 417
     }
418 418
 
419
-	public function pre_get_posts( $wp_query ) {
419
+	public function pre_get_posts($wp_query) {
420 420
 
421
-		if ( ! is_admin() && ! empty( $wp_query->query_vars['post_type'] ) && getpaid_is_invoice_post_type( $wp_query->query_vars['post_type'] ) && is_user_logged_in() && is_single() && $wp_query->is_main_query() ) {
422
-			$wp_query->query_vars['post_status'] = array_keys( wpinv_get_invoice_statuses( false, false, $wp_query->query_vars['post_type'] ) );
421
+		if (!is_admin() && !empty($wp_query->query_vars['post_type']) && getpaid_is_invoice_post_type($wp_query->query_vars['post_type']) && is_user_logged_in() && is_single() && $wp_query->is_main_query()) {
422
+			$wp_query->query_vars['post_status'] = array_keys(wpinv_get_invoice_statuses(false, false, $wp_query->query_vars['post_type']));
423 423
 		}
424 424
 
425 425
 		return $wp_query;
426 426
 	}
427 427
 
428 428
 	public function bp_invoicing_init() {
429
-		require_once( WPINV_PLUGIN_DIR . 'includes/class-wpinv-bp-core.php' );
429
+		require_once(WPINV_PLUGIN_DIR . 'includes/class-wpinv-bp-core.php');
430 430
 	}
431 431
 
432 432
 	/**
@@ -447,8 +447,8 @@  discard block
 block discarded – undo
447 447
 			)
448 448
 		);
449 449
 
450
-		foreach ( $widgets as $widget ) {
451
-			register_widget( $widget );
450
+		foreach ($widgets as $widget) {
451
+			register_widget($widget);
452 452
 		}
453 453
 		
454 454
 	}
@@ -459,10 +459,10 @@  discard block
 block discarded – undo
459 459
 	 * @since 1.0.19
460 460
 	 * @param int[] $excluded_posts_ids
461 461
 	 */
462
-	public function wpseo_exclude_from_sitemap_by_post_ids( $excluded_posts_ids ){
462
+	public function wpseo_exclude_from_sitemap_by_post_ids($excluded_posts_ids) {
463 463
 
464 464
 		// Ensure that we have an array.
465
-		if ( ! is_array( $excluded_posts_ids ) ) {
465
+		if (!is_array($excluded_posts_ids)) {
466 466
 			$excluded_posts_ids = array();
467 467
 		}
468 468
 
@@ -470,24 +470,24 @@  discard block
 block discarded – undo
470 470
 		$our_pages = array();
471 471
 
472 472
 		// Checkout page.
473
-		$our_pages[] = wpinv_get_option( 'checkout_page', false );
473
+		$our_pages[] = wpinv_get_option('checkout_page', false);
474 474
 
475 475
 		// Success page.
476
-		$our_pages[] = wpinv_get_option( 'success_page', false );
476
+		$our_pages[] = wpinv_get_option('success_page', false);
477 477
 
478 478
 		// Failure page.
479
-		$our_pages[] = wpinv_get_option( 'failure_page', false );
479
+		$our_pages[] = wpinv_get_option('failure_page', false);
480 480
 
481 481
 		// History page.
482
-		$our_pages[] = wpinv_get_option( 'invoice_history_page', false );
482
+		$our_pages[] = wpinv_get_option('invoice_history_page', false);
483 483
 
484 484
 		// Subscriptions page.
485
-		$our_pages[] = wpinv_get_option( 'invoice_subscription_page', false );
485
+		$our_pages[] = wpinv_get_option('invoice_subscription_page', false);
486 486
 
487
-		$our_pages   = array_map( 'intval', array_filter( $our_pages ) );
487
+		$our_pages   = array_map('intval', array_filter($our_pages));
488 488
 
489 489
 		$excluded_posts_ids = $excluded_posts_ids + $our_pages;
490
-		return array_unique( $excluded_posts_ids );
490
+		return array_unique($excluded_posts_ids);
491 491
 
492 492
 	}
493 493
 
@@ -498,7 +498,7 @@  discard block
 block discarded – undo
498 498
 					<div class="modal-dialog modal-dialog-centered modal-lg" role="checkout" style="max-width: 650px;">
499 499
 						<div class="modal-content">
500 500
 							<div class="modal-body">
501
-								<button type="button" class="close p-2 getpaid-payment-modal-close d-sm-none" data-dismiss="modal" aria-label="' . esc_attr__( 'Close', 'invoicing' ) . '">
501
+								<button type="button" class="close p-2 getpaid-payment-modal-close d-sm-none" data-dismiss="modal" aria-label="' . esc_attr__('Close', 'invoicing') . '">
502 502
 									<i class="fa fa-times" aria-hidden="true"></i>
503 503
 								</button>
504 504
 								<div class="modal-body-wrapper"></div>
Please login to merge, or discard this patch.
includes/api/class-getpaid-rest-settings-controller.php 2 patches
Indentation   +749 added lines, -749 removed lines patch added patch discarded remove patch
@@ -18,758 +18,758 @@
 block discarded – undo
18 18
  */
19 19
 class GetPaid_REST_Settings_Controller extends GetPaid_REST_Controller {
20 20
 
21
-	/**
22
-	 * An array of available settings.
23
-	 *
24
-	 * @var string
25
-	 */
26
-	protected $settings;
27
-
28
-	/**
29
-	 * Route base.
30
-	 *
31
-	 * @var string
32
-	 */
33
-	protected $rest_base = 'settings';
34
-
35
-	/**
36
-	 * Registers the routes for the objects of the controller.
37
-	 *
38
-	 * @since 2.0.0
39
-	 *
40
-	 * @see register_rest_route()
41
-	 */
42
-	public function register_namespace_routes( $namespace ) {
43
-
44
-		// List all registered tabs.
45
-		register_rest_route(
46
-			$namespace,
47
-			$this->rest_base,
48
-			array(
49
-				array(
50
-					'methods'             => WP_REST_Server::READABLE,
51
-					'callback'            => array( $this, 'get_tabs' ),
52
-					'permission_callback' => array( $this, 'get_items_permissions_check' ),
53
-				),
54
-				'schema' => '__return_empty_array',
55
-			)
56
-		);
57
-
58
-		// View/Update a single setting.
59
-		register_rest_route(
60
-			$namespace,
61
-			$this->rest_base . '/setting/(?P<id>[\w-]+)',
62
-			array(
63
-				'args'   => array(
64
-					'id'    => array(
65
-						'description' => __( 'Unique identifier for the setting.', 'invoicing' ),
66
-						'type'        => 'string',
67
-						'required'    => true,
68
-					),
69
-				),
70
-				array(
71
-					'methods'             => WP_REST_Server::READABLE,
72
-					'callback'            => array( $this, 'get_item' ),
73
-					'permission_callback' => array( $this, 'get_items_permissions_check' ),
74
-				),
75
-				array(
76
-					'methods'             => WP_REST_Server::EDITABLE,
77
-					'callback'            => array( $this, 'update_item' ),
78
-					'permission_callback' => array( $this, 'update_items_permissions_check' ),
79
-					'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),
80
-				),
81
-				'schema' => array( $this, 'get_public_item_schema' ),
82
-			)
83
-		);
84
-
85
-		// List registered sections for a given tab.
86
-		register_rest_route(
87
-			$namespace,
88
-			$this->rest_base . '/(?P<tab>[\w-]+)',
89
-			array(
90
-				'args'   => array(
91
-					'tab'    => array(
92
-						'description' => __( 'Unique identifier for the tab whose sections should be retrieved.', 'invoicing' ),
93
-						'type'        => 'string',
94
-						'required'    => true,
95
-						'enum'        => array_keys( wpinv_get_settings_tabs() ),
96
-					),
97
-				),
98
-				array(
99
-					'methods'             => WP_REST_Server::READABLE,
100
-					'callback'            => array( $this, 'get_sections' ),
101
-					'permission_callback' => array( $this, 'get_items_permissions_check' ),
102
-				),
103
-				'schema' => '__return_empty_array',
104
-			)
105
-		);
106
-
107
-		// List all registered settings for a given tab.
108
-		register_rest_route(
109
-			$namespace,
110
-			$this->rest_base . '/(?P<tab>[\w-]+)/(?P<section>[\w-]+)',
111
-			array(
112
-				'args'   => array(
113
-					'tab'    => array(
114
-						'description' => __( 'Unique identifier for the tab whose settings should be retrieved.', 'invoicing' ),
115
-						'type'        => 'string',
116
-						'required'    => true,
117
-						'enum'        => array_keys( wpinv_get_settings_tabs() ),
118
-					),
119
-					'section'    => array(
120
-						'description' => __( 'The section in the tab whose settings should be retrieved.', 'invoicing' ),
121
-						'type'        => 'string',
122
-						'required'    => true,
123
-					),
124
-				),
125
-				array(
126
-					'methods'             => WP_REST_Server::READABLE,
127
-					'callback'            => array( $this, 'get_items' ),
128
-					'permission_callback' => array( $this, 'get_items_permissions_check' ),
129
-				),
130
-				'schema' => array( $this, 'get_public_item_schema' ),
131
-			)
132
-		);
133
-
134
-		register_rest_route(
135
-			$namespace,
136
-			'/' . $this->rest_base . '/batch',
137
-			array(
138
-				'args'   => array(
139
-					'id'              => array(
140
-						'description' => __( 'Setting ID.', 'invoicing' ),
141
-						'type'        => 'string',
142
-					),
143
-				),
144
-				array(
145
-					'methods'             => WP_REST_Server::EDITABLE,
146
-					'callback'            => array( $this, 'batch_items' ),
147
-					'permission_callback' => array( $this, 'batch_items_permissions_check' ),
148
-					'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),
149
-				),
150
-				'schema' => array( $this, 'get_public_batch_schema' ),
151
-			)
152
-		);
153
-
154
-	}
21
+    /**
22
+     * An array of available settings.
23
+     *
24
+     * @var string
25
+     */
26
+    protected $settings;
27
+
28
+    /**
29
+     * Route base.
30
+     *
31
+     * @var string
32
+     */
33
+    protected $rest_base = 'settings';
34
+
35
+    /**
36
+     * Registers the routes for the objects of the controller.
37
+     *
38
+     * @since 2.0.0
39
+     *
40
+     * @see register_rest_route()
41
+     */
42
+    public function register_namespace_routes( $namespace ) {
43
+
44
+        // List all registered tabs.
45
+        register_rest_route(
46
+            $namespace,
47
+            $this->rest_base,
48
+            array(
49
+                array(
50
+                    'methods'             => WP_REST_Server::READABLE,
51
+                    'callback'            => array( $this, 'get_tabs' ),
52
+                    'permission_callback' => array( $this, 'get_items_permissions_check' ),
53
+                ),
54
+                'schema' => '__return_empty_array',
55
+            )
56
+        );
57
+
58
+        // View/Update a single setting.
59
+        register_rest_route(
60
+            $namespace,
61
+            $this->rest_base . '/setting/(?P<id>[\w-]+)',
62
+            array(
63
+                'args'   => array(
64
+                    'id'    => array(
65
+                        'description' => __( 'Unique identifier for the setting.', 'invoicing' ),
66
+                        'type'        => 'string',
67
+                        'required'    => true,
68
+                    ),
69
+                ),
70
+                array(
71
+                    'methods'             => WP_REST_Server::READABLE,
72
+                    'callback'            => array( $this, 'get_item' ),
73
+                    'permission_callback' => array( $this, 'get_items_permissions_check' ),
74
+                ),
75
+                array(
76
+                    'methods'             => WP_REST_Server::EDITABLE,
77
+                    'callback'            => array( $this, 'update_item' ),
78
+                    'permission_callback' => array( $this, 'update_items_permissions_check' ),
79
+                    'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),
80
+                ),
81
+                'schema' => array( $this, 'get_public_item_schema' ),
82
+            )
83
+        );
84
+
85
+        // List registered sections for a given tab.
86
+        register_rest_route(
87
+            $namespace,
88
+            $this->rest_base . '/(?P<tab>[\w-]+)',
89
+            array(
90
+                'args'   => array(
91
+                    'tab'    => array(
92
+                        'description' => __( 'Unique identifier for the tab whose sections should be retrieved.', 'invoicing' ),
93
+                        'type'        => 'string',
94
+                        'required'    => true,
95
+                        'enum'        => array_keys( wpinv_get_settings_tabs() ),
96
+                    ),
97
+                ),
98
+                array(
99
+                    'methods'             => WP_REST_Server::READABLE,
100
+                    'callback'            => array( $this, 'get_sections' ),
101
+                    'permission_callback' => array( $this, 'get_items_permissions_check' ),
102
+                ),
103
+                'schema' => '__return_empty_array',
104
+            )
105
+        );
106
+
107
+        // List all registered settings for a given tab.
108
+        register_rest_route(
109
+            $namespace,
110
+            $this->rest_base . '/(?P<tab>[\w-]+)/(?P<section>[\w-]+)',
111
+            array(
112
+                'args'   => array(
113
+                    'tab'    => array(
114
+                        'description' => __( 'Unique identifier for the tab whose settings should be retrieved.', 'invoicing' ),
115
+                        'type'        => 'string',
116
+                        'required'    => true,
117
+                        'enum'        => array_keys( wpinv_get_settings_tabs() ),
118
+                    ),
119
+                    'section'    => array(
120
+                        'description' => __( 'The section in the tab whose settings should be retrieved.', 'invoicing' ),
121
+                        'type'        => 'string',
122
+                        'required'    => true,
123
+                    ),
124
+                ),
125
+                array(
126
+                    'methods'             => WP_REST_Server::READABLE,
127
+                    'callback'            => array( $this, 'get_items' ),
128
+                    'permission_callback' => array( $this, 'get_items_permissions_check' ),
129
+                ),
130
+                'schema' => array( $this, 'get_public_item_schema' ),
131
+            )
132
+        );
133
+
134
+        register_rest_route(
135
+            $namespace,
136
+            '/' . $this->rest_base . '/batch',
137
+            array(
138
+                'args'   => array(
139
+                    'id'              => array(
140
+                        'description' => __( 'Setting ID.', 'invoicing' ),
141
+                        'type'        => 'string',
142
+                    ),
143
+                ),
144
+                array(
145
+                    'methods'             => WP_REST_Server::EDITABLE,
146
+                    'callback'            => array( $this, 'batch_items' ),
147
+                    'permission_callback' => array( $this, 'batch_items_permissions_check' ),
148
+                    'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),
149
+                ),
150
+                'schema' => array( $this, 'get_public_batch_schema' ),
151
+            )
152
+        );
153
+
154
+    }
155 155
 	
156
-	/**
157
-	 * Return all settings.
158
-	 *
159
-	 * @since  2.0.0
160
-	 * @param  WP_REST_Request $request Request data.
161
-	 * @return WP_Error|WP_REST_Response
162
-	 */
163
-	public function get_items( $request ) {
164
-
165
-		$settings = $this->get_settings();
166
-
167
-		if ( ! isset( $settings[ $request['tab'] ] ) ) {
168
-			return new WP_Error( 'rest_invalid_tab', __( 'Invalid tab.', 'invoicing' ), array( 'status' => 400 ) );
169
-		}
170
-
171
-		if ( ! isset( $settings[ $request['tab'] ][ $request['section'] ] ) ) {
172
-			return new WP_Error( 'rest_invalid_section', __( 'Invalid section.', 'invoicing' ), array( 'status' => 400 ) );
173
-		}
174
-
175
-		$settings = $settings[ $request['tab'] ][ $request['section'] ];
176
-		$prepared = array();
177
-
178
-		foreach ( $settings as $setting ) {
179
-
180
-			$setting      = $this->sanitize_setting( $setting );
181
-			$setting_data = $this->prepare_item_for_response( $setting, $request );
182
-			$setting_data = $this->prepare_response_for_collection( $setting_data );
183
-
184
-			if ( $this->is_setting_type_valid( $setting['type'] ) ) {
185
-				$prepared[]   = $setting_data;
186
-			}
187
-
188
-		}
189
-
190
-		return rest_ensure_response( $prepared );
191
-	}
192
-
193
-	/**
194
-	 * Return a single setting.
195
-	 *
196
-	 * @since  2.0.0
197
-	 * @param  WP_REST_Request $request Request data.
198
-	 * @return WP_Error|WP_REST_Response
199
-	 */
200
-	public function get_item( $request ) {
201
-		$setting  = $this->get_setting( $request['id'] );
202
-
203
-		if ( is_wp_error( $setting ) ) {
204
-			return $setting;
205
-		}
206
-
207
-		$setting  = $this->sanitize_setting( $setting );
208
-		$response = $this->prepare_item_for_response( $setting, $request );
209
-		return rest_ensure_response( $response );
210
-	}
211
-
212
-	/**
213
-	 * Update a single setting.
214
-	 *
215
-	 * @since  2.0.0
216
-	 * @param  WP_REST_Request $request Request data.
217
-	 * @return WP_Error|WP_REST_Response
218
-	 */
219
-	public function update_item( $request ) {
220
-		$setting = $this->get_setting( $request['id'] );
221
-
222
-		if ( is_wp_error( $setting ) ) {
223
-			return $setting;
224
-		}
225
-
226
-		if ( is_callable( array( $this, 'validate_setting_' . $setting['type'] . '_field' ) ) ) {
227
-			$value = $this->{'validate_setting_' . $setting['type'] . '_field'}( $request['value'], $setting );
228
-		} else {
229
-			$value = $this->validate_setting_text_field( $request['value'], $setting );
230
-		}
231
-
232
-		if ( is_wp_error( $value ) ) {
233
-			return $value;
234
-		}
235
-
236
-		wpinv_update_option( $request['id'], $value );
237
-		$setting['value'] = $value;
238
-		$setting          = $this->sanitize_setting( $setting );
239
-		$response         = $this->prepare_item_for_response( $setting, $request );
240
-
241
-		return rest_ensure_response( $response );
242
-	}
243
-
244
-	/**
245
-	 * Makes sure the current user has access to READ the settings APIs.
246
-	 *
247
-	 * @since  2.0.0
248
-	 * @param WP_REST_Request $request Full data about the request.
249
-	 * @return WP_Error|boolean
250
-	 */
251
-	public function get_items_permissions_check( $request ) {
252
-		if ( ! wpinv_current_user_can_manage_invoicing() ) {
253
-			return new WP_Error( 'rest_cannot_view', __( 'Sorry, you cannot list resources.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
254
-		}
255
-
256
-		return true;
257
-	}
258
-
259
-	/**
260
-	 * Makes sure the current user has access to WRITE the settings APIs.
261
-	 *
262
-	 * @since  2.0.0
263
-	 * @param WP_REST_Request $request Full data about the request.
264
-	 * @return WP_Error|boolean
265
-	 */
266
-	public function update_items_permissions_check( $request ) {
267
-		if ( ! wpinv_current_user_can_manage_invoicing() ) {
268
-			return new WP_Error( 'rest_cannot_edit', __( 'Sorry, you cannot edit this resource.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
269
-		}
270
-
271
-		return true;
272
-	}
273
-
274
-	/**
275
-	 * Check if a given request has access batch create, update and delete items.
276
-	 *
277
-	 * @param  WP_REST_Request $request Full details about the request.
278
-	 *
279
-	 * @return boolean|WP_Error
280
-	 */
281
-	public function batch_items_permissions_check( $request ) {
282
-		return wpinv_current_user_can_manage_invoicing() ? true : new WP_Error( 'rest_cannot_batch', __( 'Sorry, you are not allowed to batch manipulate this resource.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
283
-	}
284
-
285
-	/**
286
-	 * Prepare links for the request.
287
-	 *
288
-	 * @param string $setting_id Setting ID.
289
-	 * @return array Links for the given setting.
290
-	 */
291
-	protected function prepare_links( $setting_id ) {
292
-
293
-		$links = array(
294
-			'self'       => array(
295
-				'href'   => rest_url( sprintf( '/%s/%s/setting/%s', $this->namespace, $this->rest_base, $setting_id ) ),
296
-			),
297
-			'collection' => array(
298
-				'href'   => rest_url( sprintf( '/%s/%s', $this->namespace, $this->rest_base ) ),
299
-			),
300
-		);
301
-
302
-		return $links;
303
-	}
304
-
305
-	/**
306
-	 * Prepare a settings object for serialization.
307
-	 *
308
-	 * @since  2.0.0
309
-	 * @param array           $item Setting object.
310
-	 * @param WP_REST_Request $request Request object.
311
-	 * @return WP_REST_Response $response Response data.
312
-	 */
313
-	public function prepare_item_for_response( $item, $request ) {
314
-		$context = empty( $request['context'] ) ? 'view' : $request['context'];
315
-		$data    = $this->add_additional_fields_to_object( $item, $request );
316
-		$data    = $this->filter_response_by_context( $data, $context );
317
-
318
-		$response = rest_ensure_response( $data );
319
-
320
-		$response->add_links( $this->prepare_links( $item['id'] ) );
321
-
322
-		return $response;
323
-	}
324
-
325
-	/**
326
-	 * Filters out bad values from the settings array/filter so we
327
-	 * only return known values via the API.
328
-	 *
329
-	 * @since 2.0.0
330
-	 * @param  array $setting Setting.
331
-	 * @return array
332
-	 */
333
-	public function filter_setting( $setting ) {
334
-		return array_intersect_key(
335
-			$setting,
336
-			array_flip( array_filter( array_keys( $setting ), array( $this, 'allowed_setting_keys' ) ) )
337
-		);
338
-	}
339
-
340
-	/**
341
-	 * Callback for allowed keys for each setting response.
342
-	 *
343
-	 * @param  string $key Key to check.
344
-	 * @return boolean
345
-	 */
346
-	public function allowed_setting_keys( $key ) {
347
-		return in_array( $key, array_keys( $this->setting_defaults() ), true );
348
-	}
349
-
350
-	/**
351
-	 * Returns default options for a setting. null means the field is required.
352
-	 *
353
-	 * @since  2.0.0
354
-	 * @return array
355
-	 */
356
-	protected function setting_defaults() {
357
-		return array(
358
-			'id'          => null,
359
-			'name'        => null,
360
-			'desc'        => '',
361
-			'options'     => array(),
362
-			'std'         => false,
363
-			'value'       => false,
364
-			'placeholder' => '',
365
-			'readonly'    => false,
366
-			'faux'        => false,
367
-			'section'     => 'main',
368
-			'tab'         => 'general',
369
-			'type'        => 'text',
370
-		);
371
-	}
372
-
373
-	/**
374
-	 * Sanitizes a setting's field.
375
-	 *
376
-	 * @param  array $setting The setting to sanitize.
377
-	 * @return array
378
-	 */
379
-	public function sanitize_setting( $setting ) {
156
+    /**
157
+     * Return all settings.
158
+     *
159
+     * @since  2.0.0
160
+     * @param  WP_REST_Request $request Request data.
161
+     * @return WP_Error|WP_REST_Response
162
+     */
163
+    public function get_items( $request ) {
164
+
165
+        $settings = $this->get_settings();
166
+
167
+        if ( ! isset( $settings[ $request['tab'] ] ) ) {
168
+            return new WP_Error( 'rest_invalid_tab', __( 'Invalid tab.', 'invoicing' ), array( 'status' => 400 ) );
169
+        }
170
+
171
+        if ( ! isset( $settings[ $request['tab'] ][ $request['section'] ] ) ) {
172
+            return new WP_Error( 'rest_invalid_section', __( 'Invalid section.', 'invoicing' ), array( 'status' => 400 ) );
173
+        }
174
+
175
+        $settings = $settings[ $request['tab'] ][ $request['section'] ];
176
+        $prepared = array();
177
+
178
+        foreach ( $settings as $setting ) {
179
+
180
+            $setting      = $this->sanitize_setting( $setting );
181
+            $setting_data = $this->prepare_item_for_response( $setting, $request );
182
+            $setting_data = $this->prepare_response_for_collection( $setting_data );
183
+
184
+            if ( $this->is_setting_type_valid( $setting['type'] ) ) {
185
+                $prepared[]   = $setting_data;
186
+            }
187
+
188
+        }
189
+
190
+        return rest_ensure_response( $prepared );
191
+    }
192
+
193
+    /**
194
+     * Return a single setting.
195
+     *
196
+     * @since  2.0.0
197
+     * @param  WP_REST_Request $request Request data.
198
+     * @return WP_Error|WP_REST_Response
199
+     */
200
+    public function get_item( $request ) {
201
+        $setting  = $this->get_setting( $request['id'] );
202
+
203
+        if ( is_wp_error( $setting ) ) {
204
+            return $setting;
205
+        }
206
+
207
+        $setting  = $this->sanitize_setting( $setting );
208
+        $response = $this->prepare_item_for_response( $setting, $request );
209
+        return rest_ensure_response( $response );
210
+    }
211
+
212
+    /**
213
+     * Update a single setting.
214
+     *
215
+     * @since  2.0.0
216
+     * @param  WP_REST_Request $request Request data.
217
+     * @return WP_Error|WP_REST_Response
218
+     */
219
+    public function update_item( $request ) {
220
+        $setting = $this->get_setting( $request['id'] );
221
+
222
+        if ( is_wp_error( $setting ) ) {
223
+            return $setting;
224
+        }
225
+
226
+        if ( is_callable( array( $this, 'validate_setting_' . $setting['type'] . '_field' ) ) ) {
227
+            $value = $this->{'validate_setting_' . $setting['type'] . '_field'}( $request['value'], $setting );
228
+        } else {
229
+            $value = $this->validate_setting_text_field( $request['value'], $setting );
230
+        }
231
+
232
+        if ( is_wp_error( $value ) ) {
233
+            return $value;
234
+        }
235
+
236
+        wpinv_update_option( $request['id'], $value );
237
+        $setting['value'] = $value;
238
+        $setting          = $this->sanitize_setting( $setting );
239
+        $response         = $this->prepare_item_for_response( $setting, $request );
240
+
241
+        return rest_ensure_response( $response );
242
+    }
243
+
244
+    /**
245
+     * Makes sure the current user has access to READ the settings APIs.
246
+     *
247
+     * @since  2.0.0
248
+     * @param WP_REST_Request $request Full data about the request.
249
+     * @return WP_Error|boolean
250
+     */
251
+    public function get_items_permissions_check( $request ) {
252
+        if ( ! wpinv_current_user_can_manage_invoicing() ) {
253
+            return new WP_Error( 'rest_cannot_view', __( 'Sorry, you cannot list resources.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
254
+        }
255
+
256
+        return true;
257
+    }
258
+
259
+    /**
260
+     * Makes sure the current user has access to WRITE the settings APIs.
261
+     *
262
+     * @since  2.0.0
263
+     * @param WP_REST_Request $request Full data about the request.
264
+     * @return WP_Error|boolean
265
+     */
266
+    public function update_items_permissions_check( $request ) {
267
+        if ( ! wpinv_current_user_can_manage_invoicing() ) {
268
+            return new WP_Error( 'rest_cannot_edit', __( 'Sorry, you cannot edit this resource.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
269
+        }
270
+
271
+        return true;
272
+    }
273
+
274
+    /**
275
+     * Check if a given request has access batch create, update and delete items.
276
+     *
277
+     * @param  WP_REST_Request $request Full details about the request.
278
+     *
279
+     * @return boolean|WP_Error
280
+     */
281
+    public function batch_items_permissions_check( $request ) {
282
+        return wpinv_current_user_can_manage_invoicing() ? true : new WP_Error( 'rest_cannot_batch', __( 'Sorry, you are not allowed to batch manipulate this resource.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
283
+    }
284
+
285
+    /**
286
+     * Prepare links for the request.
287
+     *
288
+     * @param string $setting_id Setting ID.
289
+     * @return array Links for the given setting.
290
+     */
291
+    protected function prepare_links( $setting_id ) {
292
+
293
+        $links = array(
294
+            'self'       => array(
295
+                'href'   => rest_url( sprintf( '/%s/%s/setting/%s', $this->namespace, $this->rest_base, $setting_id ) ),
296
+            ),
297
+            'collection' => array(
298
+                'href'   => rest_url( sprintf( '/%s/%s', $this->namespace, $this->rest_base ) ),
299
+            ),
300
+        );
301
+
302
+        return $links;
303
+    }
304
+
305
+    /**
306
+     * Prepare a settings object for serialization.
307
+     *
308
+     * @since  2.0.0
309
+     * @param array           $item Setting object.
310
+     * @param WP_REST_Request $request Request object.
311
+     * @return WP_REST_Response $response Response data.
312
+     */
313
+    public function prepare_item_for_response( $item, $request ) {
314
+        $context = empty( $request['context'] ) ? 'view' : $request['context'];
315
+        $data    = $this->add_additional_fields_to_object( $item, $request );
316
+        $data    = $this->filter_response_by_context( $data, $context );
317
+
318
+        $response = rest_ensure_response( $data );
319
+
320
+        $response->add_links( $this->prepare_links( $item['id'] ) );
321
+
322
+        return $response;
323
+    }
324
+
325
+    /**
326
+     * Filters out bad values from the settings array/filter so we
327
+     * only return known values via the API.
328
+     *
329
+     * @since 2.0.0
330
+     * @param  array $setting Setting.
331
+     * @return array
332
+     */
333
+    public function filter_setting( $setting ) {
334
+        return array_intersect_key(
335
+            $setting,
336
+            array_flip( array_filter( array_keys( $setting ), array( $this, 'allowed_setting_keys' ) ) )
337
+        );
338
+    }
339
+
340
+    /**
341
+     * Callback for allowed keys for each setting response.
342
+     *
343
+     * @param  string $key Key to check.
344
+     * @return boolean
345
+     */
346
+    public function allowed_setting_keys( $key ) {
347
+        return in_array( $key, array_keys( $this->setting_defaults() ), true );
348
+    }
349
+
350
+    /**
351
+     * Returns default options for a setting. null means the field is required.
352
+     *
353
+     * @since  2.0.0
354
+     * @return array
355
+     */
356
+    protected function setting_defaults() {
357
+        return array(
358
+            'id'          => null,
359
+            'name'        => null,
360
+            'desc'        => '',
361
+            'options'     => array(),
362
+            'std'         => false,
363
+            'value'       => false,
364
+            'placeholder' => '',
365
+            'readonly'    => false,
366
+            'faux'        => false,
367
+            'section'     => 'main',
368
+            'tab'         => 'general',
369
+            'type'        => 'text',
370
+        );
371
+    }
372
+
373
+    /**
374
+     * Sanitizes a setting's field.
375
+     *
376
+     * @param  array $setting The setting to sanitize.
377
+     * @return array
378
+     */
379
+    public function sanitize_setting( $setting ) {
380 380
 		
381
-		$setting          = wp_parse_args( $setting, $this->setting_defaults() );
382
-		$setting['value'] = wpinv_get_option( $setting['id'], $setting['std'] );
383
-		return $this->filter_setting( $setting );
384
-
385
-	}
386
-
387
-	/**
388
-	 * Get setting data.
389
-	 *
390
-	 * @since  2.0.0
391
-	 * @param string $setting_id Setting ID.
392
-	 * @return array|WP_Error
393
-	 */
394
-	public function get_setting( $setting_id ) {
395
-
396
-		if ( empty( $setting_id ) ) {
397
-			return new WP_Error( 'rest_setting_setting_invalid', __( 'Invalid setting.', 'invoicing' ), array( 'status' => 404 ) );
398
-		}
399
-
400
-		$settings  = $this->get_settings();
401
-
402
-		foreach ( $settings as $tabs ) {
403
-
404
-			foreach ( $tabs as $sections ) {
405
-
406
-				if ( isset( $sections[ $setting_id ] ) ) {
407
-					if ( ! $this->is_setting_type_valid( $sections[ $setting_id ]['type'] ) ) {
408
-						return new WP_Error( 'rest_setting_setting_type_invalid', __( 'Invalid setting type.', 'invoicing' ), array( 'status' => 404 ) );
409
-					}
410
-
411
-					return $sections[ $setting_id ];
412
-				}
413
-
414
-			}
415
-
416
-		}
417
-
418
-		return new WP_Error( 'rest_setting_setting_invalid', __( 'Invalid setting.', 'invoicing' ), array( 'status' => 404 ) );
419
-	}
420
-
421
-	/**
422
-	 * Get all tabs.
423
-	 *
424
-	 * @param  WP_REST_Request $request Request data.
425
-	 * @return array
426
-	 */
427
-	public function get_tabs( $request ) {
428
-		$tabs     = wpinv_get_settings_tabs();
429
-		$prepared = array();
430
-
431
-		foreach ( $tabs as $id => $tab ) {
432
-
433
-			$_request        = $request;
434
-			$_request['tab'] = sanitize_title( $id );
435
-			$data            = array(
436
-				'id'       => sanitize_title( $id ),
437
-				'label'    => sanitize_text_field( $tab ),
438
-				'sections' => $this->get_sections( $_request ),
439
-			);
440
-
441
-			$data     = $this->add_additional_fields_to_object( $data, $request );
442
-			$response = rest_ensure_response( $data );
443
-
444
-			if ( ! is_wp_error( $response ) ) {
445
-				$links = array(
446
-					'sections'   => array(
447
-						'href'   => rest_url( sprintf( '/%s/%s/%s', $this->namespace, $this->rest_base, $id ) ),
448
-					),
449
-					'collection' => array(
450
-						'href'   => rest_url( sprintf( '/%s/%s', $this->namespace, $this->rest_base ) ),
451
-					),
452
-				);
453
-				$response->add_links( $links );
454
-				$response = $this->prepare_response_for_collection( $response );
455
-			}
456
-
457
-			$prepared[] = $response;
458
-
459
-		}
460
-
461
-		return rest_ensure_response( $prepared );
462
-	}
463
-
464
-	/**
465
-	 * Get all sections.
466
-	 *
467
-	 * @param  WP_REST_Request $request Request data.
468
-	 * @return array
469
-	 */
470
-	public function get_sections( $request ) {
471
-
472
-		$tab      = sanitize_title( $request['tab'] );
473
-		$sections = wpinv_get_settings_tab_sections( $tab );
474
-		$prepared = array();
475
-
476
-		foreach ( $sections as $id => $section ) {
477
-
478
-			$data            = array(
479
-				'id'       => sanitize_title( $id ),
480
-				'label'    => sanitize_text_field( $section ),
481
-			);
482
-
483
-			$data     = $this->add_additional_fields_to_object( $data, $request );
484
-			$response = rest_ensure_response( $data );
485
-
486
-			if ( ! is_wp_error( $response ) ) {
487
-				$links = array(
488
-					'settings'   => array(
489
-						'href'   => rest_url( sprintf( '/%s/%s/%s/%s', $this->namespace, $this->rest_base, $tab, $id ) ),
490
-					),
491
-					'collection' => array(
492
-						'href'   => rest_url( sprintf( '/%s/%s/%s', $this->namespace, $this->rest_base, $tab ) ),
493
-					),
494
-					'tabs'       => array(
495
-						'href'   => rest_url( sprintf( '/%s/%s', $this->namespace, $this->rest_base ) ),
496
-					),
497
-				);
498
-				$response->add_links( $links );
499
-				$response = $this->prepare_response_for_collection( $response );
500
-			}
501
-
502
-			$prepared[] = $response;
503
-
504
-		}
505
-
506
-		return rest_ensure_response( $prepared );
507
-	}
508
-
509
-	/**
510
-	 * Get all settings.
511
-	 *
512
-	 * @return array
513
-	 */
514
-	public function get_settings() {
515
-
516
-		if ( empty( $this->settings ) ) {
517
-			$this->settings = wpinv_get_registered_settings();
518
-		}
519
-
520
-		return $this->settings;
521
-
522
-	}
523
-
524
-	/**
525
-	 * Boolean for if a setting type is a valid supported setting type.
526
-	 *
527
-	 * @since  2.0.0
528
-	 * @param  string $type Type.
529
-	 * @return bool
530
-	 */
531
-	public function is_setting_type_valid( $type ) {
532
-
533
-		return in_array(
534
-			$type, array(
535
-				'text',         // Validates with validate_setting_text_field.
536
-				'email',        // Validates with validate_setting_text_field.
537
-				'number',       // Validates with validate_setting_text_field.
538
-				'color',        // Validates with validate_setting_text_field.
539
-				'password',     // Validates with validate_setting_text_field.
540
-				'textarea',     // Validates with validate_setting_textarea_field.
541
-				'select',       // Validates with validate_setting_select_field.
542
-				'multiselect',  // Validates with validate_setting_multiselect_field.
543
-				'radio',        // Validates with validate_setting_radio_field (-> validate_setting_select_field).
544
-				'checkbox',     // Validates with validate_setting_checkbox_field.
545
-				'header',       // Validates with validate_setting_text_field.
546
-			)
547
-		);
548
-
549
-	}
550
-
551
-	/**
552
-	 * Get the settings schema, conforming to JSON Schema.
553
-	 *
554
-	 * @return array
555
-	 */
556
-	public function get_item_schema() {
557
-
558
-		// Maybe retrieve the schema from cache.
559
-		if ( ! empty( $this->schema ) ) {
560
-			return $this->add_additional_fields_schema( $this->schema );
561
-		}
562
-
563
-		$schema = array(
564
-			'$schema'    => 'http://json-schema.org/draft-04/schema#',
565
-			'title'      => 'setting',
566
-			'type'       => 'object',
567
-			'properties' => array(
568
-				'id'          => array(
569
-					'description' => __( 'A unique identifier for the setting.', 'invoicing' ),
570
-					'type'        => 'string',
571
-					'arg_options' => array(
572
-						'sanitize_callback' => 'sanitize_title',
573
-					),
574
-					'context'     => array( 'view', 'edit' ),
575
-					'readonly'    => true,
576
-				),
577
-				'tab'         => array(
578
-					'description' => __( 'An identifier for the tab this setting belongs to.', 'invoicing' ),
579
-					'type'        => 'string',
580
-					'arg_options' => array(
581
-						'sanitize_callback' => 'sanitize_title',
582
-					),
583
-					'context'     => array( 'view', 'edit' ),
584
-					'readonly'    => true,
585
-				),
586
-				'section'     => array(
587
-					'description' => __( 'An identifier for the section this setting belongs to.', 'invoicing' ),
588
-					'type'        => 'string',
589
-					'arg_options' => array(
590
-						'sanitize_callback' => 'sanitize_title',
591
-					),
592
-					'context'     => array( 'view', 'edit' ),
593
-					'readonly'    => true,
594
-				),
595
-				'name'       => array(
596
-					'description' => __( 'A human readable label for the setting used in interfaces.', 'invoicing' ),
597
-					'type'        => 'string',
598
-					'arg_options' => array(
599
-						'sanitize_callback' => 'sanitize_text_field',
600
-					),
601
-					'context'     => array( 'view', 'edit' ),
602
-					'readonly'    => true,
603
-				),
604
-				'desc'        => array(
605
-					'description' => __( 'A human readable description for the setting used in interfaces.', 'invoicing' ),
606
-					'type'        => 'string',
607
-					'context'     => array( 'view', 'edit' ),
608
-					'readonly'    => true,
609
-				),
610
-				'value'       => array(
611
-					'description' => __( 'The current value of this setting.', 'invoicing' ),
612
-					'type'        => 'mixed',
613
-					'context'     => array( 'view', 'edit' ),
614
-				),
615
-				'default'     => array(
616
-					'description' => __( 'Default value for the setting.', 'invoicing' ),
617
-					'type'        => 'mixed',
618
-					'context'     => array( 'view', 'edit' ),
619
-					'readonly'    => true,
620
-				),
621
-				'placeholder' => array(
622
-					'description' => __( 'Placeholder text to be displayed in text inputs.', 'invoicing' ),
623
-					'type'        => 'string',
624
-					'arg_options' => array(
625
-						'sanitize_callback' => 'sanitize_text_field',
626
-					),
627
-					'context'     => array( 'view', 'edit' ),
628
-					'readonly'    => true,
629
-				),
630
-				'type'        => array(
631
-					'description' => __( 'Type of setting.', 'invoicing' ),
632
-					'type'        => 'string',
633
-					'arg_options' => array(
634
-						'sanitize_callback' => 'sanitize_text_field',
635
-					),
636
-					'context'     => array( 'view', 'edit' ),
637
-					'enum'        => array( 'text', 'email', 'number', 'color', 'password', 'textarea', 'select', 'multiselect', 'radio', 'image_width', 'checkbox', 'raw_html' ),
638
-					'readonly'    => true,
639
-				),
640
-				'options'     => array(
641
-					'description' => __( 'Array of options (key value pairs) for inputs such as select, multiselect, and radio buttons.', 'invoicing' ),
642
-					'type'        => 'object',
643
-					'context'     => array( 'view', 'edit' ),
644
-					'readonly'    => true,
645
-				),
646
-				'readonly'        => array(
647
-					'description' => __( 'Whether or not this setting is readonly', 'invoicing' ),
648
-					'type'        => 'string',
649
-					'context'     => array( 'view' ),
650
-					'readonly'    => true,
651
-				),
652
-				'faux'            => array(
653
-					'description' => __( 'Whether or not this setting is readonly/faux', 'invoicing' ),
654
-					'type'        => 'string',
655
-					'context'     => array( 'view' ),
656
-					'readonly'    => true,
657
-				),
658
-			),
659
-		);
660
-
661
-		// Filters the settings schema for the REST API.
381
+        $setting          = wp_parse_args( $setting, $this->setting_defaults() );
382
+        $setting['value'] = wpinv_get_option( $setting['id'], $setting['std'] );
383
+        return $this->filter_setting( $setting );
384
+
385
+    }
386
+
387
+    /**
388
+     * Get setting data.
389
+     *
390
+     * @since  2.0.0
391
+     * @param string $setting_id Setting ID.
392
+     * @return array|WP_Error
393
+     */
394
+    public function get_setting( $setting_id ) {
395
+
396
+        if ( empty( $setting_id ) ) {
397
+            return new WP_Error( 'rest_setting_setting_invalid', __( 'Invalid setting.', 'invoicing' ), array( 'status' => 404 ) );
398
+        }
399
+
400
+        $settings  = $this->get_settings();
401
+
402
+        foreach ( $settings as $tabs ) {
403
+
404
+            foreach ( $tabs as $sections ) {
405
+
406
+                if ( isset( $sections[ $setting_id ] ) ) {
407
+                    if ( ! $this->is_setting_type_valid( $sections[ $setting_id ]['type'] ) ) {
408
+                        return new WP_Error( 'rest_setting_setting_type_invalid', __( 'Invalid setting type.', 'invoicing' ), array( 'status' => 404 ) );
409
+                    }
410
+
411
+                    return $sections[ $setting_id ];
412
+                }
413
+
414
+            }
415
+
416
+        }
417
+
418
+        return new WP_Error( 'rest_setting_setting_invalid', __( 'Invalid setting.', 'invoicing' ), array( 'status' => 404 ) );
419
+    }
420
+
421
+    /**
422
+     * Get all tabs.
423
+     *
424
+     * @param  WP_REST_Request $request Request data.
425
+     * @return array
426
+     */
427
+    public function get_tabs( $request ) {
428
+        $tabs     = wpinv_get_settings_tabs();
429
+        $prepared = array();
430
+
431
+        foreach ( $tabs as $id => $tab ) {
432
+
433
+            $_request        = $request;
434
+            $_request['tab'] = sanitize_title( $id );
435
+            $data            = array(
436
+                'id'       => sanitize_title( $id ),
437
+                'label'    => sanitize_text_field( $tab ),
438
+                'sections' => $this->get_sections( $_request ),
439
+            );
440
+
441
+            $data     = $this->add_additional_fields_to_object( $data, $request );
442
+            $response = rest_ensure_response( $data );
443
+
444
+            if ( ! is_wp_error( $response ) ) {
445
+                $links = array(
446
+                    'sections'   => array(
447
+                        'href'   => rest_url( sprintf( '/%s/%s/%s', $this->namespace, $this->rest_base, $id ) ),
448
+                    ),
449
+                    'collection' => array(
450
+                        'href'   => rest_url( sprintf( '/%s/%s', $this->namespace, $this->rest_base ) ),
451
+                    ),
452
+                );
453
+                $response->add_links( $links );
454
+                $response = $this->prepare_response_for_collection( $response );
455
+            }
456
+
457
+            $prepared[] = $response;
458
+
459
+        }
460
+
461
+        return rest_ensure_response( $prepared );
462
+    }
463
+
464
+    /**
465
+     * Get all sections.
466
+     *
467
+     * @param  WP_REST_Request $request Request data.
468
+     * @return array
469
+     */
470
+    public function get_sections( $request ) {
471
+
472
+        $tab      = sanitize_title( $request['tab'] );
473
+        $sections = wpinv_get_settings_tab_sections( $tab );
474
+        $prepared = array();
475
+
476
+        foreach ( $sections as $id => $section ) {
477
+
478
+            $data            = array(
479
+                'id'       => sanitize_title( $id ),
480
+                'label'    => sanitize_text_field( $section ),
481
+            );
482
+
483
+            $data     = $this->add_additional_fields_to_object( $data, $request );
484
+            $response = rest_ensure_response( $data );
485
+
486
+            if ( ! is_wp_error( $response ) ) {
487
+                $links = array(
488
+                    'settings'   => array(
489
+                        'href'   => rest_url( sprintf( '/%s/%s/%s/%s', $this->namespace, $this->rest_base, $tab, $id ) ),
490
+                    ),
491
+                    'collection' => array(
492
+                        'href'   => rest_url( sprintf( '/%s/%s/%s', $this->namespace, $this->rest_base, $tab ) ),
493
+                    ),
494
+                    'tabs'       => array(
495
+                        'href'   => rest_url( sprintf( '/%s/%s', $this->namespace, $this->rest_base ) ),
496
+                    ),
497
+                );
498
+                $response->add_links( $links );
499
+                $response = $this->prepare_response_for_collection( $response );
500
+            }
501
+
502
+            $prepared[] = $response;
503
+
504
+        }
505
+
506
+        return rest_ensure_response( $prepared );
507
+    }
508
+
509
+    /**
510
+     * Get all settings.
511
+     *
512
+     * @return array
513
+     */
514
+    public function get_settings() {
515
+
516
+        if ( empty( $this->settings ) ) {
517
+            $this->settings = wpinv_get_registered_settings();
518
+        }
519
+
520
+        return $this->settings;
521
+
522
+    }
523
+
524
+    /**
525
+     * Boolean for if a setting type is a valid supported setting type.
526
+     *
527
+     * @since  2.0.0
528
+     * @param  string $type Type.
529
+     * @return bool
530
+     */
531
+    public function is_setting_type_valid( $type ) {
532
+
533
+        return in_array(
534
+            $type, array(
535
+                'text',         // Validates with validate_setting_text_field.
536
+                'email',        // Validates with validate_setting_text_field.
537
+                'number',       // Validates with validate_setting_text_field.
538
+                'color',        // Validates with validate_setting_text_field.
539
+                'password',     // Validates with validate_setting_text_field.
540
+                'textarea',     // Validates with validate_setting_textarea_field.
541
+                'select',       // Validates with validate_setting_select_field.
542
+                'multiselect',  // Validates with validate_setting_multiselect_field.
543
+                'radio',        // Validates with validate_setting_radio_field (-> validate_setting_select_field).
544
+                'checkbox',     // Validates with validate_setting_checkbox_field.
545
+                'header',       // Validates with validate_setting_text_field.
546
+            )
547
+        );
548
+
549
+    }
550
+
551
+    /**
552
+     * Get the settings schema, conforming to JSON Schema.
553
+     *
554
+     * @return array
555
+     */
556
+    public function get_item_schema() {
557
+
558
+        // Maybe retrieve the schema from cache.
559
+        if ( ! empty( $this->schema ) ) {
560
+            return $this->add_additional_fields_schema( $this->schema );
561
+        }
562
+
563
+        $schema = array(
564
+            '$schema'    => 'http://json-schema.org/draft-04/schema#',
565
+            'title'      => 'setting',
566
+            'type'       => 'object',
567
+            'properties' => array(
568
+                'id'          => array(
569
+                    'description' => __( 'A unique identifier for the setting.', 'invoicing' ),
570
+                    'type'        => 'string',
571
+                    'arg_options' => array(
572
+                        'sanitize_callback' => 'sanitize_title',
573
+                    ),
574
+                    'context'     => array( 'view', 'edit' ),
575
+                    'readonly'    => true,
576
+                ),
577
+                'tab'         => array(
578
+                    'description' => __( 'An identifier for the tab this setting belongs to.', 'invoicing' ),
579
+                    'type'        => 'string',
580
+                    'arg_options' => array(
581
+                        'sanitize_callback' => 'sanitize_title',
582
+                    ),
583
+                    'context'     => array( 'view', 'edit' ),
584
+                    'readonly'    => true,
585
+                ),
586
+                'section'     => array(
587
+                    'description' => __( 'An identifier for the section this setting belongs to.', 'invoicing' ),
588
+                    'type'        => 'string',
589
+                    'arg_options' => array(
590
+                        'sanitize_callback' => 'sanitize_title',
591
+                    ),
592
+                    'context'     => array( 'view', 'edit' ),
593
+                    'readonly'    => true,
594
+                ),
595
+                'name'       => array(
596
+                    'description' => __( 'A human readable label for the setting used in interfaces.', 'invoicing' ),
597
+                    'type'        => 'string',
598
+                    'arg_options' => array(
599
+                        'sanitize_callback' => 'sanitize_text_field',
600
+                    ),
601
+                    'context'     => array( 'view', 'edit' ),
602
+                    'readonly'    => true,
603
+                ),
604
+                'desc'        => array(
605
+                    'description' => __( 'A human readable description for the setting used in interfaces.', 'invoicing' ),
606
+                    'type'        => 'string',
607
+                    'context'     => array( 'view', 'edit' ),
608
+                    'readonly'    => true,
609
+                ),
610
+                'value'       => array(
611
+                    'description' => __( 'The current value of this setting.', 'invoicing' ),
612
+                    'type'        => 'mixed',
613
+                    'context'     => array( 'view', 'edit' ),
614
+                ),
615
+                'default'     => array(
616
+                    'description' => __( 'Default value for the setting.', 'invoicing' ),
617
+                    'type'        => 'mixed',
618
+                    'context'     => array( 'view', 'edit' ),
619
+                    'readonly'    => true,
620
+                ),
621
+                'placeholder' => array(
622
+                    'description' => __( 'Placeholder text to be displayed in text inputs.', 'invoicing' ),
623
+                    'type'        => 'string',
624
+                    'arg_options' => array(
625
+                        'sanitize_callback' => 'sanitize_text_field',
626
+                    ),
627
+                    'context'     => array( 'view', 'edit' ),
628
+                    'readonly'    => true,
629
+                ),
630
+                'type'        => array(
631
+                    'description' => __( 'Type of setting.', 'invoicing' ),
632
+                    'type'        => 'string',
633
+                    'arg_options' => array(
634
+                        'sanitize_callback' => 'sanitize_text_field',
635
+                    ),
636
+                    'context'     => array( 'view', 'edit' ),
637
+                    'enum'        => array( 'text', 'email', 'number', 'color', 'password', 'textarea', 'select', 'multiselect', 'radio', 'image_width', 'checkbox', 'raw_html' ),
638
+                    'readonly'    => true,
639
+                ),
640
+                'options'     => array(
641
+                    'description' => __( 'Array of options (key value pairs) for inputs such as select, multiselect, and radio buttons.', 'invoicing' ),
642
+                    'type'        => 'object',
643
+                    'context'     => array( 'view', 'edit' ),
644
+                    'readonly'    => true,
645
+                ),
646
+                'readonly'        => array(
647
+                    'description' => __( 'Whether or not this setting is readonly', 'invoicing' ),
648
+                    'type'        => 'string',
649
+                    'context'     => array( 'view' ),
650
+                    'readonly'    => true,
651
+                ),
652
+                'faux'            => array(
653
+                    'description' => __( 'Whether or not this setting is readonly/faux', 'invoicing' ),
654
+                    'type'        => 'string',
655
+                    'context'     => array( 'view' ),
656
+                    'readonly'    => true,
657
+                ),
658
+            ),
659
+        );
660
+
661
+        // Filters the settings schema for the REST API.
662 662
         $schema = apply_filters( 'getpaid_rest_settings_schema', $schema );
663 663
 
664
-		// Cache the settings schema.
665
-		$this->schema = $schema;
666
-
667
-		return $this->add_additional_fields_schema( $this->schema );
668
-
669
-	}
670
-
671
-	/**
672
-	 * Validate a text value for a text based setting.
673
-	 *
674
-	 * @since 2.0.0
675
-	 * @param string $value Value.
676
-	 * @param array  $setting Setting.
677
-	 * @return string
678
-	 */
679
-	public function validate_setting_text_field( $value ) {
680
-		$value = is_null( $value ) ? '' : $value;
681
-		return wp_kses_post( trim( stripslashes( $value ) ) );
682
-	}
683
-
684
-	/**
685
-	 * Validate select based settings.
686
-	 *
687
-	 * @since 2.0.0
688
-	 * @param string $value Value.
689
-	 * @param array  $setting Setting.
690
-	 * @return string|WP_Error
691
-	 */
692
-	public function validate_setting_select_field( $value, $setting ) {
693
-		if ( array_key_exists( $value, $setting['options'] ) ) {
694
-			return $value;
695
-		} else {
696
-			return new WP_Error( 'rest_setting_value_invalid', __( 'An invalid setting value was passed.', 'invoicing' ), array( 'status' => 400 ) );
697
-		}
698
-	}
699
-
700
-	/**
701
-	 * Validate multiselect based settings.
702
-	 *
703
-	 * @since 2.0.0
704
-	 * @param array $values Values.
705
-	 * @param array $setting Setting.
706
-	 * @return array|WP_Error
707
-	 */
708
-	public function validate_setting_multiselect_field( $values, $setting ) {
709
-		if ( empty( $values ) ) {
710
-			return array();
711
-		}
712
-
713
-		if ( ! is_array( $values ) ) {
714
-			return new WP_Error( 'rest_setting_value_invalid', __( 'An invalid setting value was passed.', 'invoicing' ), array( 'status' => 400 ) );
715
-		}
716
-
717
-		$final_values = array();
718
-		foreach ( $values as $value ) {
719
-			if ( array_key_exists( $value, $setting['options'] ) ) {
720
-				$final_values[] = $value;
721
-			}
722
-		}
723
-
724
-		return $final_values;
725
-	}
726
-
727
-	/**
728
-	 * Validate radio based settings.
729
-	 *
730
-	 * @since 2.0.0
731
-	 * @param string $value Value.
732
-	 * @param array  $setting Setting.
733
-	 * @return string|WP_Error
734
-	 */
735
-	public function validate_setting_radio_field( $value, $setting ) {
736
-		return $this->validate_setting_select_field( $value, $setting );
737
-	}
738
-
739
-	/**
740
-	 * Validate checkbox based settings.
741
-	 *
742
-	 * @since 2.0.0
743
-	 * @param string $value Value.
744
-	 * @return int
745
-	 */
746
-	public function validate_setting_checkbox_field( $value ) {
747
-		return (int) ! empty( $value );
748
-	}
749
-
750
-	/**
751
-	 * Validate textarea based settings.
752
-	 *
753
-	 * @since 2.0.0
754
-	 * @param string $value Value.
755
-	 * @return string
756
-	 */
757
-	public function validate_setting_textarea_field( $value ) {
758
-		$value = is_null( $value ) ? '' : $value;
759
-		return wp_kses(
760
-			trim( stripslashes( $value ) ),
761
-			array_merge(
762
-				array(
763
-					'iframe' => array(
764
-						'src'   => true,
765
-						'style' => true,
766
-						'id'    => true,
767
-						'class' => true,
768
-					),
769
-				),
770
-				wp_kses_allowed_html( 'post' )
771
-			)
772
-		);
773
-	}
664
+        // Cache the settings schema.
665
+        $this->schema = $schema;
666
+
667
+        return $this->add_additional_fields_schema( $this->schema );
668
+
669
+    }
670
+
671
+    /**
672
+     * Validate a text value for a text based setting.
673
+     *
674
+     * @since 2.0.0
675
+     * @param string $value Value.
676
+     * @param array  $setting Setting.
677
+     * @return string
678
+     */
679
+    public function validate_setting_text_field( $value ) {
680
+        $value = is_null( $value ) ? '' : $value;
681
+        return wp_kses_post( trim( stripslashes( $value ) ) );
682
+    }
683
+
684
+    /**
685
+     * Validate select based settings.
686
+     *
687
+     * @since 2.0.0
688
+     * @param string $value Value.
689
+     * @param array  $setting Setting.
690
+     * @return string|WP_Error
691
+     */
692
+    public function validate_setting_select_field( $value, $setting ) {
693
+        if ( array_key_exists( $value, $setting['options'] ) ) {
694
+            return $value;
695
+        } else {
696
+            return new WP_Error( 'rest_setting_value_invalid', __( 'An invalid setting value was passed.', 'invoicing' ), array( 'status' => 400 ) );
697
+        }
698
+    }
699
+
700
+    /**
701
+     * Validate multiselect based settings.
702
+     *
703
+     * @since 2.0.0
704
+     * @param array $values Values.
705
+     * @param array $setting Setting.
706
+     * @return array|WP_Error
707
+     */
708
+    public function validate_setting_multiselect_field( $values, $setting ) {
709
+        if ( empty( $values ) ) {
710
+            return array();
711
+        }
712
+
713
+        if ( ! is_array( $values ) ) {
714
+            return new WP_Error( 'rest_setting_value_invalid', __( 'An invalid setting value was passed.', 'invoicing' ), array( 'status' => 400 ) );
715
+        }
716
+
717
+        $final_values = array();
718
+        foreach ( $values as $value ) {
719
+            if ( array_key_exists( $value, $setting['options'] ) ) {
720
+                $final_values[] = $value;
721
+            }
722
+        }
723
+
724
+        return $final_values;
725
+    }
726
+
727
+    /**
728
+     * Validate radio based settings.
729
+     *
730
+     * @since 2.0.0
731
+     * @param string $value Value.
732
+     * @param array  $setting Setting.
733
+     * @return string|WP_Error
734
+     */
735
+    public function validate_setting_radio_field( $value, $setting ) {
736
+        return $this->validate_setting_select_field( $value, $setting );
737
+    }
738
+
739
+    /**
740
+     * Validate checkbox based settings.
741
+     *
742
+     * @since 2.0.0
743
+     * @param string $value Value.
744
+     * @return int
745
+     */
746
+    public function validate_setting_checkbox_field( $value ) {
747
+        return (int) ! empty( $value );
748
+    }
749
+
750
+    /**
751
+     * Validate textarea based settings.
752
+     *
753
+     * @since 2.0.0
754
+     * @param string $value Value.
755
+     * @return string
756
+     */
757
+    public function validate_setting_textarea_field( $value ) {
758
+        $value = is_null( $value ) ? '' : $value;
759
+        return wp_kses(
760
+            trim( stripslashes( $value ) ),
761
+            array_merge(
762
+                array(
763
+                    'iframe' => array(
764
+                        'src'   => true,
765
+                        'style' => true,
766
+                        'id'    => true,
767
+                        'class' => true,
768
+                    ),
769
+                ),
770
+                wp_kses_allowed_html( 'post' )
771
+            )
772
+        );
773
+    }
774 774
 
775 775
 }
Please login to merge, or discard this patch.
Spacing   +184 added lines, -184 removed lines patch added patch discarded remove patch
@@ -9,7 +9,7 @@  discard block
 block discarded – undo
9 9
  * @since   2.0.0
10 10
  */
11 11
 
12
-defined( 'ABSPATH' ) || exit;
12
+defined('ABSPATH') || exit;
13 13
 
14 14
 /**
15 15
  * GetPaid REST Setting controller class.
@@ -39,7 +39,7 @@  discard block
 block discarded – undo
39 39
 	 *
40 40
 	 * @see register_rest_route()
41 41
 	 */
42
-	public function register_namespace_routes( $namespace ) {
42
+	public function register_namespace_routes($namespace) {
43 43
 
44 44
 		// List all registered tabs.
45 45
 		register_rest_route(
@@ -48,8 +48,8 @@  discard block
 block discarded – undo
48 48
 			array(
49 49
 				array(
50 50
 					'methods'             => WP_REST_Server::READABLE,
51
-					'callback'            => array( $this, 'get_tabs' ),
52
-					'permission_callback' => array( $this, 'get_items_permissions_check' ),
51
+					'callback'            => array($this, 'get_tabs'),
52
+					'permission_callback' => array($this, 'get_items_permissions_check'),
53 53
 				),
54 54
 				'schema' => '__return_empty_array',
55 55
 			)
@@ -62,23 +62,23 @@  discard block
 block discarded – undo
62 62
 			array(
63 63
 				'args'   => array(
64 64
 					'id'    => array(
65
-						'description' => __( 'Unique identifier for the setting.', 'invoicing' ),
65
+						'description' => __('Unique identifier for the setting.', 'invoicing'),
66 66
 						'type'        => 'string',
67 67
 						'required'    => true,
68 68
 					),
69 69
 				),
70 70
 				array(
71 71
 					'methods'             => WP_REST_Server::READABLE,
72
-					'callback'            => array( $this, 'get_item' ),
73
-					'permission_callback' => array( $this, 'get_items_permissions_check' ),
72
+					'callback'            => array($this, 'get_item'),
73
+					'permission_callback' => array($this, 'get_items_permissions_check'),
74 74
 				),
75 75
 				array(
76 76
 					'methods'             => WP_REST_Server::EDITABLE,
77
-					'callback'            => array( $this, 'update_item' ),
78
-					'permission_callback' => array( $this, 'update_items_permissions_check' ),
79
-					'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),
77
+					'callback'            => array($this, 'update_item'),
78
+					'permission_callback' => array($this, 'update_items_permissions_check'),
79
+					'args'                => $this->get_endpoint_args_for_item_schema(WP_REST_Server::EDITABLE),
80 80
 				),
81
-				'schema' => array( $this, 'get_public_item_schema' ),
81
+				'schema' => array($this, 'get_public_item_schema'),
82 82
 			)
83 83
 		);
84 84
 
@@ -89,16 +89,16 @@  discard block
 block discarded – undo
89 89
 			array(
90 90
 				'args'   => array(
91 91
 					'tab'    => array(
92
-						'description' => __( 'Unique identifier for the tab whose sections should be retrieved.', 'invoicing' ),
92
+						'description' => __('Unique identifier for the tab whose sections should be retrieved.', 'invoicing'),
93 93
 						'type'        => 'string',
94 94
 						'required'    => true,
95
-						'enum'        => array_keys( wpinv_get_settings_tabs() ),
95
+						'enum'        => array_keys(wpinv_get_settings_tabs()),
96 96
 					),
97 97
 				),
98 98
 				array(
99 99
 					'methods'             => WP_REST_Server::READABLE,
100
-					'callback'            => array( $this, 'get_sections' ),
101
-					'permission_callback' => array( $this, 'get_items_permissions_check' ),
100
+					'callback'            => array($this, 'get_sections'),
101
+					'permission_callback' => array($this, 'get_items_permissions_check'),
102 102
 				),
103 103
 				'schema' => '__return_empty_array',
104 104
 			)
@@ -111,23 +111,23 @@  discard block
 block discarded – undo
111 111
 			array(
112 112
 				'args'   => array(
113 113
 					'tab'    => array(
114
-						'description' => __( 'Unique identifier for the tab whose settings should be retrieved.', 'invoicing' ),
114
+						'description' => __('Unique identifier for the tab whose settings should be retrieved.', 'invoicing'),
115 115
 						'type'        => 'string',
116 116
 						'required'    => true,
117
-						'enum'        => array_keys( wpinv_get_settings_tabs() ),
117
+						'enum'        => array_keys(wpinv_get_settings_tabs()),
118 118
 					),
119 119
 					'section'    => array(
120
-						'description' => __( 'The section in the tab whose settings should be retrieved.', 'invoicing' ),
120
+						'description' => __('The section in the tab whose settings should be retrieved.', 'invoicing'),
121 121
 						'type'        => 'string',
122 122
 						'required'    => true,
123 123
 					),
124 124
 				),
125 125
 				array(
126 126
 					'methods'             => WP_REST_Server::READABLE,
127
-					'callback'            => array( $this, 'get_items' ),
128
-					'permission_callback' => array( $this, 'get_items_permissions_check' ),
127
+					'callback'            => array($this, 'get_items'),
128
+					'permission_callback' => array($this, 'get_items_permissions_check'),
129 129
 				),
130
-				'schema' => array( $this, 'get_public_item_schema' ),
130
+				'schema' => array($this, 'get_public_item_schema'),
131 131
 			)
132 132
 		);
133 133
 
@@ -137,17 +137,17 @@  discard block
 block discarded – undo
137 137
 			array(
138 138
 				'args'   => array(
139 139
 					'id'              => array(
140
-						'description' => __( 'Setting ID.', 'invoicing' ),
140
+						'description' => __('Setting ID.', 'invoicing'),
141 141
 						'type'        => 'string',
142 142
 					),
143 143
 				),
144 144
 				array(
145 145
 					'methods'             => WP_REST_Server::EDITABLE,
146
-					'callback'            => array( $this, 'batch_items' ),
147
-					'permission_callback' => array( $this, 'batch_items_permissions_check' ),
148
-					'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),
146
+					'callback'            => array($this, 'batch_items'),
147
+					'permission_callback' => array($this, 'batch_items_permissions_check'),
148
+					'args'                => $this->get_endpoint_args_for_item_schema(WP_REST_Server::EDITABLE),
149 149
 				),
150
-				'schema' => array( $this, 'get_public_batch_schema' ),
150
+				'schema' => array($this, 'get_public_batch_schema'),
151 151
 			)
152 152
 		);
153 153
 
@@ -160,34 +160,34 @@  discard block
 block discarded – undo
160 160
 	 * @param  WP_REST_Request $request Request data.
161 161
 	 * @return WP_Error|WP_REST_Response
162 162
 	 */
163
-	public function get_items( $request ) {
163
+	public function get_items($request) {
164 164
 
165 165
 		$settings = $this->get_settings();
166 166
 
167
-		if ( ! isset( $settings[ $request['tab'] ] ) ) {
168
-			return new WP_Error( 'rest_invalid_tab', __( 'Invalid tab.', 'invoicing' ), array( 'status' => 400 ) );
167
+		if (!isset($settings[$request['tab']])) {
168
+			return new WP_Error('rest_invalid_tab', __('Invalid tab.', 'invoicing'), array('status' => 400));
169 169
 		}
170 170
 
171
-		if ( ! isset( $settings[ $request['tab'] ][ $request['section'] ] ) ) {
172
-			return new WP_Error( 'rest_invalid_section', __( 'Invalid section.', 'invoicing' ), array( 'status' => 400 ) );
171
+		if (!isset($settings[$request['tab']][$request['section']])) {
172
+			return new WP_Error('rest_invalid_section', __('Invalid section.', 'invoicing'), array('status' => 400));
173 173
 		}
174 174
 
175
-		$settings = $settings[ $request['tab'] ][ $request['section'] ];
175
+		$settings = $settings[$request['tab']][$request['section']];
176 176
 		$prepared = array();
177 177
 
178
-		foreach ( $settings as $setting ) {
178
+		foreach ($settings as $setting) {
179 179
 
180
-			$setting      = $this->sanitize_setting( $setting );
181
-			$setting_data = $this->prepare_item_for_response( $setting, $request );
182
-			$setting_data = $this->prepare_response_for_collection( $setting_data );
180
+			$setting      = $this->sanitize_setting($setting);
181
+			$setting_data = $this->prepare_item_for_response($setting, $request);
182
+			$setting_data = $this->prepare_response_for_collection($setting_data);
183 183
 
184
-			if ( $this->is_setting_type_valid( $setting['type'] ) ) {
185
-				$prepared[]   = $setting_data;
184
+			if ($this->is_setting_type_valid($setting['type'])) {
185
+				$prepared[] = $setting_data;
186 186
 			}
187 187
 
188 188
 		}
189 189
 
190
-		return rest_ensure_response( $prepared );
190
+		return rest_ensure_response($prepared);
191 191
 	}
192 192
 
193 193
 	/**
@@ -197,16 +197,16 @@  discard block
 block discarded – undo
197 197
 	 * @param  WP_REST_Request $request Request data.
198 198
 	 * @return WP_Error|WP_REST_Response
199 199
 	 */
200
-	public function get_item( $request ) {
201
-		$setting  = $this->get_setting( $request['id'] );
200
+	public function get_item($request) {
201
+		$setting = $this->get_setting($request['id']);
202 202
 
203
-		if ( is_wp_error( $setting ) ) {
203
+		if (is_wp_error($setting)) {
204 204
 			return $setting;
205 205
 		}
206 206
 
207
-		$setting  = $this->sanitize_setting( $setting );
208
-		$response = $this->prepare_item_for_response( $setting, $request );
209
-		return rest_ensure_response( $response );
207
+		$setting  = $this->sanitize_setting($setting);
208
+		$response = $this->prepare_item_for_response($setting, $request);
209
+		return rest_ensure_response($response);
210 210
 	}
211 211
 
212 212
 	/**
@@ -216,29 +216,29 @@  discard block
 block discarded – undo
216 216
 	 * @param  WP_REST_Request $request Request data.
217 217
 	 * @return WP_Error|WP_REST_Response
218 218
 	 */
219
-	public function update_item( $request ) {
220
-		$setting = $this->get_setting( $request['id'] );
219
+	public function update_item($request) {
220
+		$setting = $this->get_setting($request['id']);
221 221
 
222
-		if ( is_wp_error( $setting ) ) {
222
+		if (is_wp_error($setting)) {
223 223
 			return $setting;
224 224
 		}
225 225
 
226
-		if ( is_callable( array( $this, 'validate_setting_' . $setting['type'] . '_field' ) ) ) {
227
-			$value = $this->{'validate_setting_' . $setting['type'] . '_field'}( $request['value'], $setting );
226
+		if (is_callable(array($this, 'validate_setting_' . $setting['type'] . '_field'))) {
227
+			$value = $this->{'validate_setting_' . $setting['type'] . '_field'}($request['value'], $setting);
228 228
 		} else {
229
-			$value = $this->validate_setting_text_field( $request['value'], $setting );
229
+			$value = $this->validate_setting_text_field($request['value'], $setting);
230 230
 		}
231 231
 
232
-		if ( is_wp_error( $value ) ) {
232
+		if (is_wp_error($value)) {
233 233
 			return $value;
234 234
 		}
235 235
 
236
-		wpinv_update_option( $request['id'], $value );
236
+		wpinv_update_option($request['id'], $value);
237 237
 		$setting['value'] = $value;
238
-		$setting          = $this->sanitize_setting( $setting );
239
-		$response         = $this->prepare_item_for_response( $setting, $request );
238
+		$setting          = $this->sanitize_setting($setting);
239
+		$response         = $this->prepare_item_for_response($setting, $request);
240 240
 
241
-		return rest_ensure_response( $response );
241
+		return rest_ensure_response($response);
242 242
 	}
243 243
 
244 244
 	/**
@@ -248,9 +248,9 @@  discard block
 block discarded – undo
248 248
 	 * @param WP_REST_Request $request Full data about the request.
249 249
 	 * @return WP_Error|boolean
250 250
 	 */
251
-	public function get_items_permissions_check( $request ) {
252
-		if ( ! wpinv_current_user_can_manage_invoicing() ) {
253
-			return new WP_Error( 'rest_cannot_view', __( 'Sorry, you cannot list resources.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
251
+	public function get_items_permissions_check($request) {
252
+		if (!wpinv_current_user_can_manage_invoicing()) {
253
+			return new WP_Error('rest_cannot_view', __('Sorry, you cannot list resources.', 'invoicing'), array('status' => rest_authorization_required_code()));
254 254
 		}
255 255
 
256 256
 		return true;
@@ -263,9 +263,9 @@  discard block
 block discarded – undo
263 263
 	 * @param WP_REST_Request $request Full data about the request.
264 264
 	 * @return WP_Error|boolean
265 265
 	 */
266
-	public function update_items_permissions_check( $request ) {
267
-		if ( ! wpinv_current_user_can_manage_invoicing() ) {
268
-			return new WP_Error( 'rest_cannot_edit', __( 'Sorry, you cannot edit this resource.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
266
+	public function update_items_permissions_check($request) {
267
+		if (!wpinv_current_user_can_manage_invoicing()) {
268
+			return new WP_Error('rest_cannot_edit', __('Sorry, you cannot edit this resource.', 'invoicing'), array('status' => rest_authorization_required_code()));
269 269
 		}
270 270
 
271 271
 		return true;
@@ -278,8 +278,8 @@  discard block
 block discarded – undo
278 278
 	 *
279 279
 	 * @return boolean|WP_Error
280 280
 	 */
281
-	public function batch_items_permissions_check( $request ) {
282
-		return wpinv_current_user_can_manage_invoicing() ? true : new WP_Error( 'rest_cannot_batch', __( 'Sorry, you are not allowed to batch manipulate this resource.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
281
+	public function batch_items_permissions_check($request) {
282
+		return wpinv_current_user_can_manage_invoicing() ? true : new WP_Error('rest_cannot_batch', __('Sorry, you are not allowed to batch manipulate this resource.', 'invoicing'), array('status' => rest_authorization_required_code()));
283 283
 	}
284 284
 
285 285
 	/**
@@ -288,14 +288,14 @@  discard block
 block discarded – undo
288 288
 	 * @param string $setting_id Setting ID.
289 289
 	 * @return array Links for the given setting.
290 290
 	 */
291
-	protected function prepare_links( $setting_id ) {
291
+	protected function prepare_links($setting_id) {
292 292
 
293 293
 		$links = array(
294 294
 			'self'       => array(
295
-				'href'   => rest_url( sprintf( '/%s/%s/setting/%s', $this->namespace, $this->rest_base, $setting_id ) ),
295
+				'href'   => rest_url(sprintf('/%s/%s/setting/%s', $this->namespace, $this->rest_base, $setting_id)),
296 296
 			),
297 297
 			'collection' => array(
298
-				'href'   => rest_url( sprintf( '/%s/%s', $this->namespace, $this->rest_base ) ),
298
+				'href'   => rest_url(sprintf('/%s/%s', $this->namespace, $this->rest_base)),
299 299
 			),
300 300
 		);
301 301
 
@@ -310,14 +310,14 @@  discard block
 block discarded – undo
310 310
 	 * @param WP_REST_Request $request Request object.
311 311
 	 * @return WP_REST_Response $response Response data.
312 312
 	 */
313
-	public function prepare_item_for_response( $item, $request ) {
314
-		$context = empty( $request['context'] ) ? 'view' : $request['context'];
315
-		$data    = $this->add_additional_fields_to_object( $item, $request );
316
-		$data    = $this->filter_response_by_context( $data, $context );
313
+	public function prepare_item_for_response($item, $request) {
314
+		$context = empty($request['context']) ? 'view' : $request['context'];
315
+		$data    = $this->add_additional_fields_to_object($item, $request);
316
+		$data    = $this->filter_response_by_context($data, $context);
317 317
 
318
-		$response = rest_ensure_response( $data );
318
+		$response = rest_ensure_response($data);
319 319
 
320
-		$response->add_links( $this->prepare_links( $item['id'] ) );
320
+		$response->add_links($this->prepare_links($item['id']));
321 321
 
322 322
 		return $response;
323 323
 	}
@@ -330,10 +330,10 @@  discard block
 block discarded – undo
330 330
 	 * @param  array $setting Setting.
331 331
 	 * @return array
332 332
 	 */
333
-	public function filter_setting( $setting ) {
333
+	public function filter_setting($setting) {
334 334
 		return array_intersect_key(
335 335
 			$setting,
336
-			array_flip( array_filter( array_keys( $setting ), array( $this, 'allowed_setting_keys' ) ) )
336
+			array_flip(array_filter(array_keys($setting), array($this, 'allowed_setting_keys')))
337 337
 		);
338 338
 	}
339 339
 
@@ -343,8 +343,8 @@  discard block
 block discarded – undo
343 343
 	 * @param  string $key Key to check.
344 344
 	 * @return boolean
345 345
 	 */
346
-	public function allowed_setting_keys( $key ) {
347
-		return in_array( $key, array_keys( $this->setting_defaults() ), true );
346
+	public function allowed_setting_keys($key) {
347
+		return in_array($key, array_keys($this->setting_defaults()), true);
348 348
 	}
349 349
 
350 350
 	/**
@@ -376,11 +376,11 @@  discard block
 block discarded – undo
376 376
 	 * @param  array $setting The setting to sanitize.
377 377
 	 * @return array
378 378
 	 */
379
-	public function sanitize_setting( $setting ) {
379
+	public function sanitize_setting($setting) {
380 380
 		
381
-		$setting          = wp_parse_args( $setting, $this->setting_defaults() );
382
-		$setting['value'] = wpinv_get_option( $setting['id'], $setting['std'] );
383
-		return $this->filter_setting( $setting );
381
+		$setting          = wp_parse_args($setting, $this->setting_defaults());
382
+		$setting['value'] = wpinv_get_option($setting['id'], $setting['std']);
383
+		return $this->filter_setting($setting);
384 384
 
385 385
 	}
386 386
 
@@ -391,31 +391,31 @@  discard block
 block discarded – undo
391 391
 	 * @param string $setting_id Setting ID.
392 392
 	 * @return array|WP_Error
393 393
 	 */
394
-	public function get_setting( $setting_id ) {
394
+	public function get_setting($setting_id) {
395 395
 
396
-		if ( empty( $setting_id ) ) {
397
-			return new WP_Error( 'rest_setting_setting_invalid', __( 'Invalid setting.', 'invoicing' ), array( 'status' => 404 ) );
396
+		if (empty($setting_id)) {
397
+			return new WP_Error('rest_setting_setting_invalid', __('Invalid setting.', 'invoicing'), array('status' => 404));
398 398
 		}
399 399
 
400
-		$settings  = $this->get_settings();
400
+		$settings = $this->get_settings();
401 401
 
402
-		foreach ( $settings as $tabs ) {
402
+		foreach ($settings as $tabs) {
403 403
 
404
-			foreach ( $tabs as $sections ) {
404
+			foreach ($tabs as $sections) {
405 405
 
406
-				if ( isset( $sections[ $setting_id ] ) ) {
407
-					if ( ! $this->is_setting_type_valid( $sections[ $setting_id ]['type'] ) ) {
408
-						return new WP_Error( 'rest_setting_setting_type_invalid', __( 'Invalid setting type.', 'invoicing' ), array( 'status' => 404 ) );
406
+				if (isset($sections[$setting_id])) {
407
+					if (!$this->is_setting_type_valid($sections[$setting_id]['type'])) {
408
+						return new WP_Error('rest_setting_setting_type_invalid', __('Invalid setting type.', 'invoicing'), array('status' => 404));
409 409
 					}
410 410
 
411
-					return $sections[ $setting_id ];
411
+					return $sections[$setting_id];
412 412
 				}
413 413
 
414 414
 			}
415 415
 
416 416
 		}
417 417
 
418
-		return new WP_Error( 'rest_setting_setting_invalid', __( 'Invalid setting.', 'invoicing' ), array( 'status' => 404 ) );
418
+		return new WP_Error('rest_setting_setting_invalid', __('Invalid setting.', 'invoicing'), array('status' => 404));
419 419
 	}
420 420
 
421 421
 	/**
@@ -424,41 +424,41 @@  discard block
 block discarded – undo
424 424
 	 * @param  WP_REST_Request $request Request data.
425 425
 	 * @return array
426 426
 	 */
427
-	public function get_tabs( $request ) {
427
+	public function get_tabs($request) {
428 428
 		$tabs     = wpinv_get_settings_tabs();
429 429
 		$prepared = array();
430 430
 
431
-		foreach ( $tabs as $id => $tab ) {
431
+		foreach ($tabs as $id => $tab) {
432 432
 
433 433
 			$_request        = $request;
434
-			$_request['tab'] = sanitize_title( $id );
434
+			$_request['tab'] = sanitize_title($id);
435 435
 			$data            = array(
436
-				'id'       => sanitize_title( $id ),
437
-				'label'    => sanitize_text_field( $tab ),
438
-				'sections' => $this->get_sections( $_request ),
436
+				'id'       => sanitize_title($id),
437
+				'label'    => sanitize_text_field($tab),
438
+				'sections' => $this->get_sections($_request),
439 439
 			);
440 440
 
441
-			$data     = $this->add_additional_fields_to_object( $data, $request );
442
-			$response = rest_ensure_response( $data );
441
+			$data     = $this->add_additional_fields_to_object($data, $request);
442
+			$response = rest_ensure_response($data);
443 443
 
444
-			if ( ! is_wp_error( $response ) ) {
444
+			if (!is_wp_error($response)) {
445 445
 				$links = array(
446 446
 					'sections'   => array(
447
-						'href'   => rest_url( sprintf( '/%s/%s/%s', $this->namespace, $this->rest_base, $id ) ),
447
+						'href'   => rest_url(sprintf('/%s/%s/%s', $this->namespace, $this->rest_base, $id)),
448 448
 					),
449 449
 					'collection' => array(
450
-						'href'   => rest_url( sprintf( '/%s/%s', $this->namespace, $this->rest_base ) ),
450
+						'href'   => rest_url(sprintf('/%s/%s', $this->namespace, $this->rest_base)),
451 451
 					),
452 452
 				);
453
-				$response->add_links( $links );
454
-				$response = $this->prepare_response_for_collection( $response );
453
+				$response->add_links($links);
454
+				$response = $this->prepare_response_for_collection($response);
455 455
 			}
456 456
 
457 457
 			$prepared[] = $response;
458 458
 
459 459
 		}
460 460
 
461
-		return rest_ensure_response( $prepared );
461
+		return rest_ensure_response($prepared);
462 462
 	}
463 463
 
464 464
 	/**
@@ -467,43 +467,43 @@  discard block
 block discarded – undo
467 467
 	 * @param  WP_REST_Request $request Request data.
468 468
 	 * @return array
469 469
 	 */
470
-	public function get_sections( $request ) {
470
+	public function get_sections($request) {
471 471
 
472
-		$tab      = sanitize_title( $request['tab'] );
473
-		$sections = wpinv_get_settings_tab_sections( $tab );
472
+		$tab      = sanitize_title($request['tab']);
473
+		$sections = wpinv_get_settings_tab_sections($tab);
474 474
 		$prepared = array();
475 475
 
476
-		foreach ( $sections as $id => $section ) {
476
+		foreach ($sections as $id => $section) {
477 477
 
478
-			$data            = array(
479
-				'id'       => sanitize_title( $id ),
480
-				'label'    => sanitize_text_field( $section ),
478
+			$data = array(
479
+				'id'       => sanitize_title($id),
480
+				'label'    => sanitize_text_field($section),
481 481
 			);
482 482
 
483
-			$data     = $this->add_additional_fields_to_object( $data, $request );
484
-			$response = rest_ensure_response( $data );
483
+			$data     = $this->add_additional_fields_to_object($data, $request);
484
+			$response = rest_ensure_response($data);
485 485
 
486
-			if ( ! is_wp_error( $response ) ) {
486
+			if (!is_wp_error($response)) {
487 487
 				$links = array(
488 488
 					'settings'   => array(
489
-						'href'   => rest_url( sprintf( '/%s/%s/%s/%s', $this->namespace, $this->rest_base, $tab, $id ) ),
489
+						'href'   => rest_url(sprintf('/%s/%s/%s/%s', $this->namespace, $this->rest_base, $tab, $id)),
490 490
 					),
491 491
 					'collection' => array(
492
-						'href'   => rest_url( sprintf( '/%s/%s/%s', $this->namespace, $this->rest_base, $tab ) ),
492
+						'href'   => rest_url(sprintf('/%s/%s/%s', $this->namespace, $this->rest_base, $tab)),
493 493
 					),
494 494
 					'tabs'       => array(
495
-						'href'   => rest_url( sprintf( '/%s/%s', $this->namespace, $this->rest_base ) ),
495
+						'href'   => rest_url(sprintf('/%s/%s', $this->namespace, $this->rest_base)),
496 496
 					),
497 497
 				);
498
-				$response->add_links( $links );
499
-				$response = $this->prepare_response_for_collection( $response );
498
+				$response->add_links($links);
499
+				$response = $this->prepare_response_for_collection($response);
500 500
 			}
501 501
 
502 502
 			$prepared[] = $response;
503 503
 
504 504
 		}
505 505
 
506
-		return rest_ensure_response( $prepared );
506
+		return rest_ensure_response($prepared);
507 507
 	}
508 508
 
509 509
 	/**
@@ -513,7 +513,7 @@  discard block
 block discarded – undo
513 513
 	 */
514 514
 	public function get_settings() {
515 515
 
516
-		if ( empty( $this->settings ) ) {
516
+		if (empty($this->settings)) {
517 517
 			$this->settings = wpinv_get_registered_settings();
518 518
 		}
519 519
 
@@ -528,21 +528,21 @@  discard block
 block discarded – undo
528 528
 	 * @param  string $type Type.
529 529
 	 * @return bool
530 530
 	 */
531
-	public function is_setting_type_valid( $type ) {
531
+	public function is_setting_type_valid($type) {
532 532
 
533 533
 		return in_array(
534 534
 			$type, array(
535
-				'text',         // Validates with validate_setting_text_field.
536
-				'email',        // Validates with validate_setting_text_field.
537
-				'number',       // Validates with validate_setting_text_field.
538
-				'color',        // Validates with validate_setting_text_field.
539
-				'password',     // Validates with validate_setting_text_field.
540
-				'textarea',     // Validates with validate_setting_textarea_field.
541
-				'select',       // Validates with validate_setting_select_field.
542
-				'multiselect',  // Validates with validate_setting_multiselect_field.
543
-				'radio',        // Validates with validate_setting_radio_field (-> validate_setting_select_field).
544
-				'checkbox',     // Validates with validate_setting_checkbox_field.
545
-				'header',       // Validates with validate_setting_text_field.
535
+				'text', // Validates with validate_setting_text_field.
536
+				'email', // Validates with validate_setting_text_field.
537
+				'number', // Validates with validate_setting_text_field.
538
+				'color', // Validates with validate_setting_text_field.
539
+				'password', // Validates with validate_setting_text_field.
540
+				'textarea', // Validates with validate_setting_textarea_field.
541
+				'select', // Validates with validate_setting_select_field.
542
+				'multiselect', // Validates with validate_setting_multiselect_field.
543
+				'radio', // Validates with validate_setting_radio_field (-> validate_setting_select_field).
544
+				'checkbox', // Validates with validate_setting_checkbox_field.
545
+				'header', // Validates with validate_setting_text_field.
546 546
 			)
547 547
 		);
548 548
 
@@ -556,8 +556,8 @@  discard block
 block discarded – undo
556 556
 	public function get_item_schema() {
557 557
 
558 558
 		// Maybe retrieve the schema from cache.
559
-		if ( ! empty( $this->schema ) ) {
560
-			return $this->add_additional_fields_schema( $this->schema );
559
+		if (!empty($this->schema)) {
560
+			return $this->add_additional_fields_schema($this->schema);
561 561
 		}
562 562
 
563 563
 		$schema = array(
@@ -566,105 +566,105 @@  discard block
 block discarded – undo
566 566
 			'type'       => 'object',
567 567
 			'properties' => array(
568 568
 				'id'          => array(
569
-					'description' => __( 'A unique identifier for the setting.', 'invoicing' ),
569
+					'description' => __('A unique identifier for the setting.', 'invoicing'),
570 570
 					'type'        => 'string',
571 571
 					'arg_options' => array(
572 572
 						'sanitize_callback' => 'sanitize_title',
573 573
 					),
574
-					'context'     => array( 'view', 'edit' ),
574
+					'context'     => array('view', 'edit'),
575 575
 					'readonly'    => true,
576 576
 				),
577 577
 				'tab'         => array(
578
-					'description' => __( 'An identifier for the tab this setting belongs to.', 'invoicing' ),
578
+					'description' => __('An identifier for the tab this setting belongs to.', 'invoicing'),
579 579
 					'type'        => 'string',
580 580
 					'arg_options' => array(
581 581
 						'sanitize_callback' => 'sanitize_title',
582 582
 					),
583
-					'context'     => array( 'view', 'edit' ),
583
+					'context'     => array('view', 'edit'),
584 584
 					'readonly'    => true,
585 585
 				),
586 586
 				'section'     => array(
587
-					'description' => __( 'An identifier for the section this setting belongs to.', 'invoicing' ),
587
+					'description' => __('An identifier for the section this setting belongs to.', 'invoicing'),
588 588
 					'type'        => 'string',
589 589
 					'arg_options' => array(
590 590
 						'sanitize_callback' => 'sanitize_title',
591 591
 					),
592
-					'context'     => array( 'view', 'edit' ),
592
+					'context'     => array('view', 'edit'),
593 593
 					'readonly'    => true,
594 594
 				),
595 595
 				'name'       => array(
596
-					'description' => __( 'A human readable label for the setting used in interfaces.', 'invoicing' ),
596
+					'description' => __('A human readable label for the setting used in interfaces.', 'invoicing'),
597 597
 					'type'        => 'string',
598 598
 					'arg_options' => array(
599 599
 						'sanitize_callback' => 'sanitize_text_field',
600 600
 					),
601
-					'context'     => array( 'view', 'edit' ),
601
+					'context'     => array('view', 'edit'),
602 602
 					'readonly'    => true,
603 603
 				),
604 604
 				'desc'        => array(
605
-					'description' => __( 'A human readable description for the setting used in interfaces.', 'invoicing' ),
605
+					'description' => __('A human readable description for the setting used in interfaces.', 'invoicing'),
606 606
 					'type'        => 'string',
607
-					'context'     => array( 'view', 'edit' ),
607
+					'context'     => array('view', 'edit'),
608 608
 					'readonly'    => true,
609 609
 				),
610 610
 				'value'       => array(
611
-					'description' => __( 'The current value of this setting.', 'invoicing' ),
611
+					'description' => __('The current value of this setting.', 'invoicing'),
612 612
 					'type'        => 'mixed',
613
-					'context'     => array( 'view', 'edit' ),
613
+					'context'     => array('view', 'edit'),
614 614
 				),
615 615
 				'default'     => array(
616
-					'description' => __( 'Default value for the setting.', 'invoicing' ),
616
+					'description' => __('Default value for the setting.', 'invoicing'),
617 617
 					'type'        => 'mixed',
618
-					'context'     => array( 'view', 'edit' ),
618
+					'context'     => array('view', 'edit'),
619 619
 					'readonly'    => true,
620 620
 				),
621 621
 				'placeholder' => array(
622
-					'description' => __( 'Placeholder text to be displayed in text inputs.', 'invoicing' ),
622
+					'description' => __('Placeholder text to be displayed in text inputs.', 'invoicing'),
623 623
 					'type'        => 'string',
624 624
 					'arg_options' => array(
625 625
 						'sanitize_callback' => 'sanitize_text_field',
626 626
 					),
627
-					'context'     => array( 'view', 'edit' ),
627
+					'context'     => array('view', 'edit'),
628 628
 					'readonly'    => true,
629 629
 				),
630 630
 				'type'        => array(
631
-					'description' => __( 'Type of setting.', 'invoicing' ),
631
+					'description' => __('Type of setting.', 'invoicing'),
632 632
 					'type'        => 'string',
633 633
 					'arg_options' => array(
634 634
 						'sanitize_callback' => 'sanitize_text_field',
635 635
 					),
636
-					'context'     => array( 'view', 'edit' ),
637
-					'enum'        => array( 'text', 'email', 'number', 'color', 'password', 'textarea', 'select', 'multiselect', 'radio', 'image_width', 'checkbox', 'raw_html' ),
636
+					'context'     => array('view', 'edit'),
637
+					'enum'        => array('text', 'email', 'number', 'color', 'password', 'textarea', 'select', 'multiselect', 'radio', 'image_width', 'checkbox', 'raw_html'),
638 638
 					'readonly'    => true,
639 639
 				),
640 640
 				'options'     => array(
641
-					'description' => __( 'Array of options (key value pairs) for inputs such as select, multiselect, and radio buttons.', 'invoicing' ),
641
+					'description' => __('Array of options (key value pairs) for inputs such as select, multiselect, and radio buttons.', 'invoicing'),
642 642
 					'type'        => 'object',
643
-					'context'     => array( 'view', 'edit' ),
643
+					'context'     => array('view', 'edit'),
644 644
 					'readonly'    => true,
645 645
 				),
646 646
 				'readonly'        => array(
647
-					'description' => __( 'Whether or not this setting is readonly', 'invoicing' ),
647
+					'description' => __('Whether or not this setting is readonly', 'invoicing'),
648 648
 					'type'        => 'string',
649
-					'context'     => array( 'view' ),
649
+					'context'     => array('view'),
650 650
 					'readonly'    => true,
651 651
 				),
652 652
 				'faux'            => array(
653
-					'description' => __( 'Whether or not this setting is readonly/faux', 'invoicing' ),
653
+					'description' => __('Whether or not this setting is readonly/faux', 'invoicing'),
654 654
 					'type'        => 'string',
655
-					'context'     => array( 'view' ),
655
+					'context'     => array('view'),
656 656
 					'readonly'    => true,
657 657
 				),
658 658
 			),
659 659
 		);
660 660
 
661 661
 		// Filters the settings schema for the REST API.
662
-        $schema = apply_filters( 'getpaid_rest_settings_schema', $schema );
662
+        $schema = apply_filters('getpaid_rest_settings_schema', $schema);
663 663
 
664 664
 		// Cache the settings schema.
665 665
 		$this->schema = $schema;
666 666
 
667
-		return $this->add_additional_fields_schema( $this->schema );
667
+		return $this->add_additional_fields_schema($this->schema);
668 668
 
669 669
 	}
670 670
 
@@ -676,9 +676,9 @@  discard block
 block discarded – undo
676 676
 	 * @param array  $setting Setting.
677 677
 	 * @return string
678 678
 	 */
679
-	public function validate_setting_text_field( $value ) {
680
-		$value = is_null( $value ) ? '' : $value;
681
-		return wp_kses_post( trim( stripslashes( $value ) ) );
679
+	public function validate_setting_text_field($value) {
680
+		$value = is_null($value) ? '' : $value;
681
+		return wp_kses_post(trim(stripslashes($value)));
682 682
 	}
683 683
 
684 684
 	/**
@@ -689,11 +689,11 @@  discard block
 block discarded – undo
689 689
 	 * @param array  $setting Setting.
690 690
 	 * @return string|WP_Error
691 691
 	 */
692
-	public function validate_setting_select_field( $value, $setting ) {
693
-		if ( array_key_exists( $value, $setting['options'] ) ) {
692
+	public function validate_setting_select_field($value, $setting) {
693
+		if (array_key_exists($value, $setting['options'])) {
694 694
 			return $value;
695 695
 		} else {
696
-			return new WP_Error( 'rest_setting_value_invalid', __( 'An invalid setting value was passed.', 'invoicing' ), array( 'status' => 400 ) );
696
+			return new WP_Error('rest_setting_value_invalid', __('An invalid setting value was passed.', 'invoicing'), array('status' => 400));
697 697
 		}
698 698
 	}
699 699
 
@@ -705,18 +705,18 @@  discard block
 block discarded – undo
705 705
 	 * @param array $setting Setting.
706 706
 	 * @return array|WP_Error
707 707
 	 */
708
-	public function validate_setting_multiselect_field( $values, $setting ) {
709
-		if ( empty( $values ) ) {
708
+	public function validate_setting_multiselect_field($values, $setting) {
709
+		if (empty($values)) {
710 710
 			return array();
711 711
 		}
712 712
 
713
-		if ( ! is_array( $values ) ) {
714
-			return new WP_Error( 'rest_setting_value_invalid', __( 'An invalid setting value was passed.', 'invoicing' ), array( 'status' => 400 ) );
713
+		if (!is_array($values)) {
714
+			return new WP_Error('rest_setting_value_invalid', __('An invalid setting value was passed.', 'invoicing'), array('status' => 400));
715 715
 		}
716 716
 
717 717
 		$final_values = array();
718
-		foreach ( $values as $value ) {
719
-			if ( array_key_exists( $value, $setting['options'] ) ) {
718
+		foreach ($values as $value) {
719
+			if (array_key_exists($value, $setting['options'])) {
720 720
 				$final_values[] = $value;
721 721
 			}
722 722
 		}
@@ -732,8 +732,8 @@  discard block
 block discarded – undo
732 732
 	 * @param array  $setting Setting.
733 733
 	 * @return string|WP_Error
734 734
 	 */
735
-	public function validate_setting_radio_field( $value, $setting ) {
736
-		return $this->validate_setting_select_field( $value, $setting );
735
+	public function validate_setting_radio_field($value, $setting) {
736
+		return $this->validate_setting_select_field($value, $setting);
737 737
 	}
738 738
 
739 739
 	/**
@@ -743,8 +743,8 @@  discard block
 block discarded – undo
743 743
 	 * @param string $value Value.
744 744
 	 * @return int
745 745
 	 */
746
-	public function validate_setting_checkbox_field( $value ) {
747
-		return (int) ! empty( $value );
746
+	public function validate_setting_checkbox_field($value) {
747
+		return (int) !empty($value);
748 748
 	}
749 749
 
750 750
 	/**
@@ -754,10 +754,10 @@  discard block
 block discarded – undo
754 754
 	 * @param string $value Value.
755 755
 	 * @return string
756 756
 	 */
757
-	public function validate_setting_textarea_field( $value ) {
758
-		$value = is_null( $value ) ? '' : $value;
757
+	public function validate_setting_textarea_field($value) {
758
+		$value = is_null($value) ? '' : $value;
759 759
 		return wp_kses(
760
-			trim( stripslashes( $value ) ),
760
+			trim(stripslashes($value)),
761 761
 			array_merge(
762 762
 				array(
763 763
 					'iframe' => array(
@@ -767,7 +767,7 @@  discard block
 block discarded – undo
767 767
 						'class' => true,
768 768
 					),
769 769
 				),
770
-				wp_kses_allowed_html( 'post' )
770
+				wp_kses_allowed_html('post')
771 771
 			)
772 772
 		);
773 773
 	}
Please login to merge, or discard this patch.
includes/reports/class-getpaid-reports-helper.php 2 patches
Spacing   +64 added lines, -64 removed lines patch added patch discarded remove patch
@@ -5,7 +5,7 @@  discard block
 block discarded – undo
5 5
  *
6 6
  */
7 7
 
8
-defined( 'ABSPATH' ) || exit;
8
+defined('ABSPATH') || exit;
9 9
 
10 10
 /**
11 11
  * GetPaid_Reports_Helper Class.
@@ -26,7 +26,7 @@  discard block
 block discarded – undo
26 26
 	 * @param  array $args
27 27
 	 * @return mixed depending on query_type
28 28
 	 */
29
-	public static function get_invoice_report_data( $args = array() ) {
29
+	public static function get_invoice_report_data($args = array()) {
30 30
 		global $wpdb;
31 31
 
32 32
 		$default_args = array(
@@ -37,94 +37,94 @@  discard block
 block discarded – undo
37 37
 			'order_by'              => '', // What to order by.
38 38
 			'limit'                 => '', // Results limit.
39 39
 			'filter_range'          => array(), // An array of before and after dates to limit results by.
40
-			'invoice_types'         => array( 'wpi_invoice' ), // An array of post types to retrieve.
41
-			'invoice_status'        => array( 'publish', 'wpi-processing', 'wpi-onhold' ),
40
+			'invoice_types'         => array('wpi_invoice'), // An array of post types to retrieve.
41
+			'invoice_status'        => array('publish', 'wpi-processing', 'wpi-onhold'),
42 42
 			'parent_invoice_status' => false, // Optionally filter by parent invoice status.
43 43
 		);
44 44
 
45
-		$args         = apply_filters( 'getpaid_reports_get_invoice_report_data_args', $args );
46
-		$args         = wp_parse_args( $args, $default_args );
45
+		$args         = apply_filters('getpaid_reports_get_invoice_report_data_args', $args);
46
+		$args         = wp_parse_args($args, $default_args);
47 47
 
48
-		extract( $args );
48
+		extract($args);
49 49
 
50
-		if ( empty( $data ) ) {
50
+		if (empty($data)) {
51 51
 			return '';
52 52
 		}
53 53
 
54 54
 		$query           = array();
55
-		$query['select'] = 'SELECT ' . implode( ',', self::prepare_invoice_data( $data ) );
55
+		$query['select'] = 'SELECT ' . implode(',', self::prepare_invoice_data($data));
56 56
 		$query['from']   = "FROM {$wpdb->posts} AS posts";
57
-		$query['join']   = implode( ' ', self::prepare_invoice_joins( $data + $where, ! empty( $parent_invoice_status ) ) );
57
+		$query['join']   = implode(' ', self::prepare_invoice_joins($data + $where, !empty($parent_invoice_status)));
58 58
 
59 59
 		$query['where']  = "
60
-			WHERE 	posts.post_type 	IN ( '" . implode( "','", $invoice_types ) . "' )
60
+			WHERE 	posts.post_type 	IN ( '" . implode("','", $invoice_types) . "' )
61 61
 			";
62 62
 
63
-		if ( ! empty( $invoice_status ) ) {
63
+		if (!empty($invoice_status)) {
64 64
 			$query['where'] .= "
65
-				AND 	posts.post_status 	IN ( '" . implode( "','", $invoice_status ) . "' )
65
+				AND 	posts.post_status 	IN ( '" . implode("','", $invoice_status) . "' )
66 66
 			";
67 67
 		}
68 68
 
69
-		if ( ! empty( $parent_invoice_status ) ) {
70
-			if ( ! empty( $invoice_status ) ) {
71
-				$query['where'] .= " AND ( parent.post_status IN ( '" . implode( "','", $parent_invoice_status ) . "' ) OR parent.ID IS NULL ) ";
69
+		if (!empty($parent_invoice_status)) {
70
+			if (!empty($invoice_status)) {
71
+				$query['where'] .= " AND ( parent.post_status IN ( '" . implode("','", $parent_invoice_status) . "' ) OR parent.ID IS NULL ) ";
72 72
 			} else {
73
-				$query['where'] .= " AND parent.post_status IN ( '" . implode( "','", $parent_invoice_status ) . "' ) ";
73
+				$query['where'] .= " AND parent.post_status IN ( '" . implode("','", $parent_invoice_status) . "' ) ";
74 74
 			}
75 75
 		}
76 76
 
77
-		if ( ! empty( $filter_range['before'] ) ) {
77
+		if (!empty($filter_range['before'])) {
78 78
 			$query['where'] .= "
79
-				AND 	posts.post_date < '" . date( 'Y-m-d H:i:s', strtotime( $filter_range['before'] ) ) . "'
79
+				AND 	posts.post_date < '" . date('Y-m-d H:i:s', strtotime($filter_range['before'])) . "'
80 80
 			";
81 81
 		}
82 82
 
83
-		if ( ! empty( $filter_range['after'] ) ) {
83
+		if (!empty($filter_range['after'])) {
84 84
 			$query['where'] .= "
85
-				AND 	posts.post_date > '" . date( 'Y-m-d H:i:s', strtotime( $filter_range['after'] ) ) . "'
85
+				AND 	posts.post_date > '" . date('Y-m-d H:i:s', strtotime($filter_range['after'])) . "'
86 86
 			";
87 87
 		}
88 88
 
89
-		if ( ! empty( $where ) ) {
89
+		if (!empty($where)) {
90 90
 
91
-			foreach ( $where as $value ) {
91
+			foreach ($where as $value) {
92 92
 
93
-				if ( strtolower( $value['operator'] ) == 'in' || strtolower( $value['operator'] ) == 'not in' ) {
93
+				if (strtolower($value['operator']) == 'in' || strtolower($value['operator']) == 'not in') {
94 94
 
95
-					if ( is_array( $value['value'] ) ) {
96
-						$value['value'] = implode( "','", $value['value'] );
95
+					if (is_array($value['value'])) {
96
+						$value['value'] = implode("','", $value['value']);
97 97
 					}
98 98
 
99
-					if ( ! empty( $value['value'] ) ) {
99
+					if (!empty($value['value'])) {
100 100
 						$where_value = "{$value['operator']} ('{$value['value']}')";
101 101
 					}
102 102
 				} else {
103 103
 					$where_value = "{$value['operator']} '{$value['value']}'";
104 104
 				}
105 105
 
106
-				if ( ! empty( $where_value ) ) {
106
+				if (!empty($where_value)) {
107 107
 					$query['where'] .= " AND {$value['key']} {$where_value}";
108 108
 				}
109 109
 			}
110 110
 		}
111 111
 
112
-		if ( $group_by ) {
112
+		if ($group_by) {
113 113
 			$query['group_by'] = "GROUP BY {$group_by}";
114 114
 		}
115 115
 
116
-		if ( $order_by ) {
116
+		if ($order_by) {
117 117
 			$query['order_by'] = "ORDER BY {$order_by}";
118 118
 		}
119 119
 
120
-		if ( $limit ) {
120
+		if ($limit) {
121 121
 			$query['limit'] = "LIMIT {$limit}";
122 122
 		}
123 123
 
124
-		$query = apply_filters( 'getpaid_reports_get_invoice_report_query', $query, $data );
125
-		$query = implode( ' ', $query );
124
+		$query = apply_filters('getpaid_reports_get_invoice_report_query', $query, $data);
125
+		$query = implode(' ', $query);
126 126
 
127
-		return self::execute( $query_type, $query );
127
+		return self::execute($query_type, $query);
128 128
 
129 129
 	}
130 130
 
@@ -135,26 +135,26 @@  discard block
 block discarded – undo
135 135
 	 * @param  array $data
136 136
 	 * @return array
137 137
 	 */
138
-	public static function prepare_invoice_data( $data ) {
138
+	public static function prepare_invoice_data($data) {
139 139
 
140 140
 		$prepared = array();
141 141
 
142
-		foreach ( $data as $raw_key => $value ) {
143
-			$key      = sanitize_key( $raw_key );
142
+		foreach ($data as $raw_key => $value) {
143
+			$key      = sanitize_key($raw_key);
144 144
 			$distinct = '';
145 145
 
146
-			if ( isset( $value['distinct'] ) ) {
146
+			if (isset($value['distinct'])) {
147 147
 				$distinct = 'DISTINCT';
148 148
 			}
149 149
 
150
-			$get_key = self::get_invoice_table_key( $key, $value['type'] );
150
+			$get_key = self::get_invoice_table_key($key, $value['type']);
151 151
 
152
-			if ( false === $get_key ) {
152
+			if (false === $get_key) {
153 153
 				// Skip to the next foreach iteration else the query will be invalid.
154 154
 				continue;
155 155
 			}
156 156
 
157
-			if ( ! empty( $value['function'] ) ) {
157
+			if (!empty($value['function'])) {
158 158
 				$get = "{$value['function']}({$distinct} {$get_key})";
159 159
 			} else {
160 160
 				$get = "{$distinct} {$get_key}";
@@ -175,22 +175,22 @@  discard block
 block discarded – undo
175 175
 	 * @param  bool $with_parent
176 176
 	 * @return array
177 177
 	 */
178
-	public static function prepare_invoice_joins( $data, $with_parent ) {
178
+	public static function prepare_invoice_joins($data, $with_parent) {
179 179
 		global $wpdb;
180 180
 
181 181
 		$prepared = array();
182 182
 
183
-		foreach ( $data as $raw_key => $value ) {
184
-			$join_type = isset( $value['join_type'] ) ? $value['join_type'] : 'INNER';
185
-			$type      = isset( $value['type'] ) ? $value['type'] : false;
186
-			$key       = sanitize_key( $raw_key );
183
+		foreach ($data as $raw_key => $value) {
184
+			$join_type = isset($value['join_type']) ? $value['join_type'] : 'INNER';
185
+			$type      = isset($value['type']) ? $value['type'] : false;
186
+			$key       = sanitize_key($raw_key);
187 187
 
188
-			switch ( $type ) {
188
+			switch ($type) {
189 189
 				case 'meta':
190
-					$prepared[ "meta_{$key}" ] = "{$join_type} JOIN {$wpdb->postmeta} AS meta_{$key} ON ( posts.ID = meta_{$key}.post_id AND meta_{$key}.meta_key = '{$raw_key}' )";
190
+					$prepared["meta_{$key}"] = "{$join_type} JOIN {$wpdb->postmeta} AS meta_{$key} ON ( posts.ID = meta_{$key}.post_id AND meta_{$key}.meta_key = '{$raw_key}' )";
191 191
 					break;
192 192
 				case 'parent_meta':
193
-					$prepared[ "parent_meta_{$key}" ] = "{$join_type} JOIN {$wpdb->postmeta} AS parent_meta_{$key} ON (posts.post_parent = parent_meta_{$key}.post_id) AND (parent_meta_{$key}.meta_key = '{$raw_key}')";
193
+					$prepared["parent_meta_{$key}"] = "{$join_type} JOIN {$wpdb->postmeta} AS parent_meta_{$key} ON (posts.post_parent = parent_meta_{$key}.post_id) AND (parent_meta_{$key}.meta_key = '{$raw_key}')";
194 194
 					break;
195 195
 				case 'invoice_data':
196 196
 					$prepared['invoices'] = "{$join_type} JOIN {$wpdb->prefix}getpaid_invoices AS invoices ON posts.ID = invoices.post_id";
@@ -201,7 +201,7 @@  discard block
 block discarded – undo
201 201
 			}
202 202
 		}
203 203
 
204
-		if ( $with_parent ) {
204
+		if ($with_parent) {
205 205
 			$prepared['parent'] = "LEFT JOIN {$wpdb->posts} AS parent ON posts.post_parent = parent.ID";
206 206
 		}
207 207
 
@@ -217,7 +217,7 @@  discard block
 block discarded – undo
217 217
 	 * @param  string $table
218 218
 	 * @return string|false
219 219
 	 */
220
-	public static function get_invoice_table_key( $key, $table ) {
220
+	public static function get_invoice_table_key($key, $table) {
221 221
 
222 222
 		$keys = array(
223 223
 			'meta'         => "meta_{$key}.meta_value",
@@ -227,7 +227,7 @@  discard block
 block discarded – undo
227 227
 			'invoice_item' => "invoice_items.{$key}",
228 228
 		);
229 229
 
230
-		return isset( $keys[ $table ] ) ? $keys[ $table ] : false;
230
+		return isset($keys[$table]) ? $keys[$table] : false;
231 231
 
232 232
 	}
233 233
 
@@ -239,16 +239,16 @@  discard block
 block discarded – undo
239 239
 	 * @param  string $query
240 240
 	 * @return mixed depending on query_type
241 241
 	 */
242
-	public static function execute( $query_type, $query ) {
242
+	public static function execute($query_type, $query) {
243 243
 		global $wpdb;
244 244
 
245
-		$query_hash = md5( $query_type . $query );
246
-		$result     = self::get_cached_query( $query_hash );
247
-		if ( $result === false ) {
245
+		$query_hash = md5($query_type . $query);
246
+		$result     = self::get_cached_query($query_hash);
247
+		if ($result === false) {
248 248
 			self::enable_big_selects();
249 249
 
250
-			$result = $wpdb->$query_type( $query );
251
-			self::set_cached_query( $query_hash, $result );
250
+			$result = $wpdb->$query_type($query);
251
+			self::set_cached_query($query_hash, $result);
252 252
 		}
253 253
 
254 254
 		return $result;
@@ -263,8 +263,8 @@  discard block
 block discarded – undo
263 263
 
264 264
 		global $wpdb;
265 265
 
266
-		if ( ! $big_selects ) {
267
-			$wpdb->query( 'SET SESSION SQL_BIG_SELECTS=1' );
266
+		if (!$big_selects) {
267
+			$wpdb->query('SET SESSION SQL_BIG_SELECTS=1');
268 268
 			$big_selects = true;
269 269
 		}
270 270
 	}
@@ -276,11 +276,11 @@  discard block
 block discarded – undo
276 276
 	 *
277 277
 	 * @return mixed|false The cache contents on success, false on failure to retrieve contents.
278 278
 	 */
279
-	protected static function get_cached_query( $query_hash ) {
279
+	protected static function get_cached_query($query_hash) {
280 280
 
281 281
 		return wp_cache_get(
282 282
 			$query_hash,
283
-			strtolower( __CLASS__ )
283
+			strtolower(__CLASS__)
284 284
 		);
285 285
 
286 286
 	}
@@ -291,12 +291,12 @@  discard block
 block discarded – undo
291 291
 	 * @param string $query_hash The query hash.
292 292
 	 * @param mixed  $data The data to cache.
293 293
 	 */
294
-	protected static function set_cached_query( $query_hash, $data ) {
294
+	protected static function set_cached_query($query_hash, $data) {
295 295
 
296 296
 		wp_cache_set(
297 297
 			$query_hash,
298 298
 			$data,
299
-			strtolower( __CLASS__ ),
299
+			strtolower(__CLASS__),
300 300
 			5 * MINUTE_IN_SECONDS
301 301
 		);
302 302
 
Please login to merge, or discard this patch.
Indentation   +276 added lines, -276 removed lines patch added patch discarded remove patch
@@ -12,294 +12,294 @@
 block discarded – undo
12 12
  */
13 13
 class GetPaid_Reports_Helper {
14 14
 
15
-	/**
16
-	 * Get report totals such as invoice totals and discount amounts.
17
-	 *
18
-	 * Data example:
19
-	 *
20
-	 * 'subtotal' => array(
21
-	 *     'type'     => 'invoice_data',
22
-	 *     'function' => 'SUM',
23
-	 *     'name'     => 'subtotal'
24
-	 * )
25
-	 *
26
-	 * @param  array $args
27
-	 * @return mixed depending on query_type
28
-	 */
29
-	public static function get_invoice_report_data( $args = array() ) {
30
-		global $wpdb;
31
-
32
-		$default_args = array(
33
-			'data'                  => array(), // The data to retrieve.
34
-			'where'                 => array(), // An array of where queries.
35
-			'query_type'            => 'get_row', // wpdb query to run.
36
-			'group_by'              => '', // What to group results by.
37
-			'order_by'              => '', // What to order by.
38
-			'limit'                 => '', // Results limit.
39
-			'filter_range'          => array(), // An array of before and after dates to limit results by.
40
-			'invoice_types'         => array( 'wpi_invoice' ), // An array of post types to retrieve.
41
-			'invoice_status'        => array( 'publish', 'wpi-processing', 'wpi-onhold' ),
42
-			'parent_invoice_status' => false, // Optionally filter by parent invoice status.
43
-		);
44
-
45
-		$args         = apply_filters( 'getpaid_reports_get_invoice_report_data_args', $args );
46
-		$args         = wp_parse_args( $args, $default_args );
47
-
48
-		extract( $args );
49
-
50
-		if ( empty( $data ) ) {
51
-			return '';
52
-		}
53
-
54
-		$query           = array();
55
-		$query['select'] = 'SELECT ' . implode( ',', self::prepare_invoice_data( $data ) );
56
-		$query['from']   = "FROM {$wpdb->posts} AS posts";
57
-		$query['join']   = implode( ' ', self::prepare_invoice_joins( $data + $where, ! empty( $parent_invoice_status ) ) );
58
-
59
-		$query['where']  = "
15
+    /**
16
+     * Get report totals such as invoice totals and discount amounts.
17
+     *
18
+     * Data example:
19
+     *
20
+     * 'subtotal' => array(
21
+     *     'type'     => 'invoice_data',
22
+     *     'function' => 'SUM',
23
+     *     'name'     => 'subtotal'
24
+     * )
25
+     *
26
+     * @param  array $args
27
+     * @return mixed depending on query_type
28
+     */
29
+    public static function get_invoice_report_data( $args = array() ) {
30
+        global $wpdb;
31
+
32
+        $default_args = array(
33
+            'data'                  => array(), // The data to retrieve.
34
+            'where'                 => array(), // An array of where queries.
35
+            'query_type'            => 'get_row', // wpdb query to run.
36
+            'group_by'              => '', // What to group results by.
37
+            'order_by'              => '', // What to order by.
38
+            'limit'                 => '', // Results limit.
39
+            'filter_range'          => array(), // An array of before and after dates to limit results by.
40
+            'invoice_types'         => array( 'wpi_invoice' ), // An array of post types to retrieve.
41
+            'invoice_status'        => array( 'publish', 'wpi-processing', 'wpi-onhold' ),
42
+            'parent_invoice_status' => false, // Optionally filter by parent invoice status.
43
+        );
44
+
45
+        $args         = apply_filters( 'getpaid_reports_get_invoice_report_data_args', $args );
46
+        $args         = wp_parse_args( $args, $default_args );
47
+
48
+        extract( $args );
49
+
50
+        if ( empty( $data ) ) {
51
+            return '';
52
+        }
53
+
54
+        $query           = array();
55
+        $query['select'] = 'SELECT ' . implode( ',', self::prepare_invoice_data( $data ) );
56
+        $query['from']   = "FROM {$wpdb->posts} AS posts";
57
+        $query['join']   = implode( ' ', self::prepare_invoice_joins( $data + $where, ! empty( $parent_invoice_status ) ) );
58
+
59
+        $query['where']  = "
60 60
 			WHERE 	posts.post_type 	IN ( '" . implode( "','", $invoice_types ) . "' )
61 61
 			";
62 62
 
63
-		if ( ! empty( $invoice_status ) ) {
64
-			$query['where'] .= "
63
+        if ( ! empty( $invoice_status ) ) {
64
+            $query['where'] .= "
65 65
 				AND 	posts.post_status 	IN ( '" . implode( "','", $invoice_status ) . "' )
66 66
 			";
67
-		}
68
-
69
-		if ( ! empty( $parent_invoice_status ) ) {
70
-			if ( ! empty( $invoice_status ) ) {
71
-				$query['where'] .= " AND ( parent.post_status IN ( '" . implode( "','", $parent_invoice_status ) . "' ) OR parent.ID IS NULL ) ";
72
-			} else {
73
-				$query['where'] .= " AND parent.post_status IN ( '" . implode( "','", $parent_invoice_status ) . "' ) ";
74
-			}
75
-		}
76
-
77
-		if ( ! empty( $filter_range['before'] ) ) {
78
-			$query['where'] .= "
67
+        }
68
+
69
+        if ( ! empty( $parent_invoice_status ) ) {
70
+            if ( ! empty( $invoice_status ) ) {
71
+                $query['where'] .= " AND ( parent.post_status IN ( '" . implode( "','", $parent_invoice_status ) . "' ) OR parent.ID IS NULL ) ";
72
+            } else {
73
+                $query['where'] .= " AND parent.post_status IN ( '" . implode( "','", $parent_invoice_status ) . "' ) ";
74
+            }
75
+        }
76
+
77
+        if ( ! empty( $filter_range['before'] ) ) {
78
+            $query['where'] .= "
79 79
 				AND 	posts.post_date < '" . date( 'Y-m-d H:i:s', strtotime( $filter_range['before'] ) ) . "'
80 80
 			";
81
-		}
81
+        }
82 82
 
83
-		if ( ! empty( $filter_range['after'] ) ) {
84
-			$query['where'] .= "
83
+        if ( ! empty( $filter_range['after'] ) ) {
84
+            $query['where'] .= "
85 85
 				AND 	posts.post_date > '" . date( 'Y-m-d H:i:s', strtotime( $filter_range['after'] ) ) . "'
86 86
 			";
87
-		}
87
+        }
88 88
 
89
-		if ( ! empty( $where ) ) {
89
+        if ( ! empty( $where ) ) {
90 90
 
91
-			foreach ( $where as $value ) {
91
+            foreach ( $where as $value ) {
92 92
 
93
-				if ( strtolower( $value['operator'] ) == 'in' || strtolower( $value['operator'] ) == 'not in' ) {
94
-
95
-					if ( is_array( $value['value'] ) ) {
96
-						$value['value'] = implode( "','", $value['value'] );
97
-					}
98
-
99
-					if ( ! empty( $value['value'] ) ) {
100
-						$where_value = "{$value['operator']} ('{$value['value']}')";
101
-					}
102
-				} else {
103
-					$where_value = "{$value['operator']} '{$value['value']}'";
104
-				}
105
-
106
-				if ( ! empty( $where_value ) ) {
107
-					$query['where'] .= " AND {$value['key']} {$where_value}";
108
-				}
109
-			}
110
-		}
111
-
112
-		if ( $group_by ) {
113
-			$query['group_by'] = "GROUP BY {$group_by}";
114
-		}
115
-
116
-		if ( $order_by ) {
117
-			$query['order_by'] = "ORDER BY {$order_by}";
118
-		}
119
-
120
-		if ( $limit ) {
121
-			$query['limit'] = "LIMIT {$limit}";
122
-		}
123
-
124
-		$query = apply_filters( 'getpaid_reports_get_invoice_report_query', $query, $data );
125
-		$query = implode( ' ', $query );
126
-
127
-		return self::execute( $query_type, $query );
128
-
129
-	}
130
-
131
-	/**
132
-	 * Prepares the data to select.
133
-	 *
134
-	 *
135
-	 * @param  array $data
136
-	 * @return array
137
-	 */
138
-	public static function prepare_invoice_data( $data ) {
139
-
140
-		$prepared = array();
141
-
142
-		foreach ( $data as $raw_key => $value ) {
143
-			$key      = sanitize_key( $raw_key );
144
-			$distinct = '';
145
-
146
-			if ( isset( $value['distinct'] ) ) {
147
-				$distinct = 'DISTINCT';
148
-			}
149
-
150
-			$get_key = self::get_invoice_table_key( $key, $value['type'] );
151
-
152
-			if ( false === $get_key ) {
153
-				// Skip to the next foreach iteration else the query will be invalid.
154
-				continue;
155
-			}
156
-
157
-			if ( ! empty( $value['function'] ) ) {
158
-				$get = "{$value['function']}({$distinct} {$get_key})";
159
-			} else {
160
-				$get = "{$distinct} {$get_key}";
161
-			}
162
-
163
-			$prepared[] = "{$get} as {$value['name']}";
164
-		}
165
-
166
-		return $prepared;
167
-
168
-	}
169
-
170
-	/**
171
-	 * Prepares the joins to use.
172
-	 *
173
-	 *
174
-	 * @param  array $data
175
-	 * @param  bool $with_parent
176
-	 * @return array
177
-	 */
178
-	public static function prepare_invoice_joins( $data, $with_parent ) {
179
-		global $wpdb;
180
-
181
-		$prepared = array();
182
-
183
-		foreach ( $data as $raw_key => $value ) {
184
-			$join_type = isset( $value['join_type'] ) ? $value['join_type'] : 'INNER';
185
-			$type      = isset( $value['type'] ) ? $value['type'] : false;
186
-			$key       = sanitize_key( $raw_key );
187
-
188
-			switch ( $type ) {
189
-				case 'meta':
190
-					$prepared[ "meta_{$key}" ] = "{$join_type} JOIN {$wpdb->postmeta} AS meta_{$key} ON ( posts.ID = meta_{$key}.post_id AND meta_{$key}.meta_key = '{$raw_key}' )";
191
-					break;
192
-				case 'parent_meta':
193
-					$prepared[ "parent_meta_{$key}" ] = "{$join_type} JOIN {$wpdb->postmeta} AS parent_meta_{$key} ON (posts.post_parent = parent_meta_{$key}.post_id) AND (parent_meta_{$key}.meta_key = '{$raw_key}')";
194
-					break;
195
-				case 'invoice_data':
196
-					$prepared['invoices'] = "{$join_type} JOIN {$wpdb->prefix}getpaid_invoices AS invoices ON posts.ID = invoices.post_id";
197
-					break;
198
-				case 'invoice_item':
199
-					$prepared['invoice_items'] = "{$join_type} JOIN {$wpdb->prefix}getpaid_invoice_items AS invoice_items ON posts.ID = invoice_items.post_id";
200
-					break;
201
-			}
202
-		}
203
-
204
-		if ( $with_parent ) {
205
-			$prepared['parent'] = "LEFT JOIN {$wpdb->posts} AS parent ON posts.post_parent = parent.ID";
206
-		}
207
-
208
-		return $prepared;
209
-
210
-	}
211
-
212
-	/**
213
-	 * Retrieves the appropriate table key to use.
214
-	 *
215
-	 *
216
-	 * @param  string $key
217
-	 * @param  string $table
218
-	 * @return string|false
219
-	 */
220
-	public static function get_invoice_table_key( $key, $table ) {
221
-
222
-		$keys = array(
223
-			'meta'         => "meta_{$key}.meta_value",
224
-			'parent_meta'  => "parent_meta_{$key}.meta_value",
225
-			'post_data'    => "posts.{$key}",
226
-			'invoice_data' => "invoices.{$key}",
227
-			'invoice_item' => "invoice_items.{$key}",
228
-		);
229
-
230
-		return isset( $keys[ $table ] ) ? $keys[ $table ] : false;
231
-
232
-	}
233
-
234
-	/**
235
-	 * Executes a query and caches the result for a minute.
236
-	 *
237
-	 *
238
-	 * @param  string $query_type
239
-	 * @param  string $query
240
-	 * @return mixed depending on query_type
241
-	 */
242
-	public static function execute( $query_type, $query ) {
243
-		global $wpdb;
244
-
245
-		$query_hash = md5( $query_type . $query );
246
-		$result     = self::get_cached_query( $query_hash );
247
-		if ( $result === false ) {
248
-			self::enable_big_selects();
249
-
250
-			$result = $wpdb->$query_type( $query );
251
-			self::set_cached_query( $query_hash, $result );
252
-		}
253
-
254
-		return $result;
255
-
256
-	}
257
-
258
-	/**
259
-	 * Enables big mysql selects for reports, just once for this session.
260
-	 */
261
-	protected static function enable_big_selects() {
262
-		static $big_selects = false;
263
-
264
-		global $wpdb;
265
-
266
-		if ( ! $big_selects ) {
267
-			$wpdb->query( 'SET SESSION SQL_BIG_SELECTS=1' );
268
-			$big_selects = true;
269
-		}
270
-	}
271
-
272
-	/**
273
-	 * Get the cached query result or null if it's not in the cache.
274
-	 *
275
-	 * @param string $query_hash The query hash.
276
-	 *
277
-	 * @return mixed|false The cache contents on success, false on failure to retrieve contents.
278
-	 */
279
-	protected static function get_cached_query( $query_hash ) {
280
-
281
-		return wp_cache_get(
282
-			$query_hash,
283
-			strtolower( __CLASS__ )
284
-		);
285
-
286
-	}
287
-
288
-	/**
289
-	 * Set the cached query result.
290
-	 *
291
-	 * @param string $query_hash The query hash.
292
-	 * @param mixed  $data The data to cache.
293
-	 */
294
-	protected static function set_cached_query( $query_hash, $data ) {
295
-
296
-		wp_cache_set(
297
-			$query_hash,
298
-			$data,
299
-			strtolower( __CLASS__ ),
300
-			5 * MINUTE_IN_SECONDS
301
-		);
302
-
303
-	}
93
+                if ( strtolower( $value['operator'] ) == 'in' || strtolower( $value['operator'] ) == 'not in' ) {
94
+
95
+                    if ( is_array( $value['value'] ) ) {
96
+                        $value['value'] = implode( "','", $value['value'] );
97
+                    }
98
+
99
+                    if ( ! empty( $value['value'] ) ) {
100
+                        $where_value = "{$value['operator']} ('{$value['value']}')";
101
+                    }
102
+                } else {
103
+                    $where_value = "{$value['operator']} '{$value['value']}'";
104
+                }
105
+
106
+                if ( ! empty( $where_value ) ) {
107
+                    $query['where'] .= " AND {$value['key']} {$where_value}";
108
+                }
109
+            }
110
+        }
111
+
112
+        if ( $group_by ) {
113
+            $query['group_by'] = "GROUP BY {$group_by}";
114
+        }
115
+
116
+        if ( $order_by ) {
117
+            $query['order_by'] = "ORDER BY {$order_by}";
118
+        }
119
+
120
+        if ( $limit ) {
121
+            $query['limit'] = "LIMIT {$limit}";
122
+        }
123
+
124
+        $query = apply_filters( 'getpaid_reports_get_invoice_report_query', $query, $data );
125
+        $query = implode( ' ', $query );
126
+
127
+        return self::execute( $query_type, $query );
128
+
129
+    }
130
+
131
+    /**
132
+     * Prepares the data to select.
133
+     *
134
+     *
135
+     * @param  array $data
136
+     * @return array
137
+     */
138
+    public static function prepare_invoice_data( $data ) {
139
+
140
+        $prepared = array();
141
+
142
+        foreach ( $data as $raw_key => $value ) {
143
+            $key      = sanitize_key( $raw_key );
144
+            $distinct = '';
145
+
146
+            if ( isset( $value['distinct'] ) ) {
147
+                $distinct = 'DISTINCT';
148
+            }
149
+
150
+            $get_key = self::get_invoice_table_key( $key, $value['type'] );
151
+
152
+            if ( false === $get_key ) {
153
+                // Skip to the next foreach iteration else the query will be invalid.
154
+                continue;
155
+            }
156
+
157
+            if ( ! empty( $value['function'] ) ) {
158
+                $get = "{$value['function']}({$distinct} {$get_key})";
159
+            } else {
160
+                $get = "{$distinct} {$get_key}";
161
+            }
162
+
163
+            $prepared[] = "{$get} as {$value['name']}";
164
+        }
165
+
166
+        return $prepared;
167
+
168
+    }
169
+
170
+    /**
171
+     * Prepares the joins to use.
172
+     *
173
+     *
174
+     * @param  array $data
175
+     * @param  bool $with_parent
176
+     * @return array
177
+     */
178
+    public static function prepare_invoice_joins( $data, $with_parent ) {
179
+        global $wpdb;
180
+
181
+        $prepared = array();
182
+
183
+        foreach ( $data as $raw_key => $value ) {
184
+            $join_type = isset( $value['join_type'] ) ? $value['join_type'] : 'INNER';
185
+            $type      = isset( $value['type'] ) ? $value['type'] : false;
186
+            $key       = sanitize_key( $raw_key );
187
+
188
+            switch ( $type ) {
189
+                case 'meta':
190
+                    $prepared[ "meta_{$key}" ] = "{$join_type} JOIN {$wpdb->postmeta} AS meta_{$key} ON ( posts.ID = meta_{$key}.post_id AND meta_{$key}.meta_key = '{$raw_key}' )";
191
+                    break;
192
+                case 'parent_meta':
193
+                    $prepared[ "parent_meta_{$key}" ] = "{$join_type} JOIN {$wpdb->postmeta} AS parent_meta_{$key} ON (posts.post_parent = parent_meta_{$key}.post_id) AND (parent_meta_{$key}.meta_key = '{$raw_key}')";
194
+                    break;
195
+                case 'invoice_data':
196
+                    $prepared['invoices'] = "{$join_type} JOIN {$wpdb->prefix}getpaid_invoices AS invoices ON posts.ID = invoices.post_id";
197
+                    break;
198
+                case 'invoice_item':
199
+                    $prepared['invoice_items'] = "{$join_type} JOIN {$wpdb->prefix}getpaid_invoice_items AS invoice_items ON posts.ID = invoice_items.post_id";
200
+                    break;
201
+            }
202
+        }
203
+
204
+        if ( $with_parent ) {
205
+            $prepared['parent'] = "LEFT JOIN {$wpdb->posts} AS parent ON posts.post_parent = parent.ID";
206
+        }
207
+
208
+        return $prepared;
209
+
210
+    }
211
+
212
+    /**
213
+     * Retrieves the appropriate table key to use.
214
+     *
215
+     *
216
+     * @param  string $key
217
+     * @param  string $table
218
+     * @return string|false
219
+     */
220
+    public static function get_invoice_table_key( $key, $table ) {
221
+
222
+        $keys = array(
223
+            'meta'         => "meta_{$key}.meta_value",
224
+            'parent_meta'  => "parent_meta_{$key}.meta_value",
225
+            'post_data'    => "posts.{$key}",
226
+            'invoice_data' => "invoices.{$key}",
227
+            'invoice_item' => "invoice_items.{$key}",
228
+        );
229
+
230
+        return isset( $keys[ $table ] ) ? $keys[ $table ] : false;
231
+
232
+    }
233
+
234
+    /**
235
+     * Executes a query and caches the result for a minute.
236
+     *
237
+     *
238
+     * @param  string $query_type
239
+     * @param  string $query
240
+     * @return mixed depending on query_type
241
+     */
242
+    public static function execute( $query_type, $query ) {
243
+        global $wpdb;
244
+
245
+        $query_hash = md5( $query_type . $query );
246
+        $result     = self::get_cached_query( $query_hash );
247
+        if ( $result === false ) {
248
+            self::enable_big_selects();
249
+
250
+            $result = $wpdb->$query_type( $query );
251
+            self::set_cached_query( $query_hash, $result );
252
+        }
253
+
254
+        return $result;
255
+
256
+    }
257
+
258
+    /**
259
+     * Enables big mysql selects for reports, just once for this session.
260
+     */
261
+    protected static function enable_big_selects() {
262
+        static $big_selects = false;
263
+
264
+        global $wpdb;
265
+
266
+        if ( ! $big_selects ) {
267
+            $wpdb->query( 'SET SESSION SQL_BIG_SELECTS=1' );
268
+            $big_selects = true;
269
+        }
270
+    }
271
+
272
+    /**
273
+     * Get the cached query result or null if it's not in the cache.
274
+     *
275
+     * @param string $query_hash The query hash.
276
+     *
277
+     * @return mixed|false The cache contents on success, false on failure to retrieve contents.
278
+     */
279
+    protected static function get_cached_query( $query_hash ) {
280
+
281
+        return wp_cache_get(
282
+            $query_hash,
283
+            strtolower( __CLASS__ )
284
+        );
285
+
286
+    }
287
+
288
+    /**
289
+     * Set the cached query result.
290
+     *
291
+     * @param string $query_hash The query hash.
292
+     * @param mixed  $data The data to cache.
293
+     */
294
+    protected static function set_cached_query( $query_hash, $data ) {
295
+
296
+        wp_cache_set(
297
+            $query_hash,
298
+            $data,
299
+            strtolower( __CLASS__ ),
300
+            5 * MINUTE_IN_SECONDS
301
+        );
302
+
303
+    }
304 304
 
305 305
 }
Please login to merge, or discard this patch.
includes/api/class-getpaid-rest-report-top-earners-controller.php 2 patches
Indentation   +42 added lines, -42 removed lines patch added patch discarded remove patch
@@ -18,50 +18,50 @@
 block discarded – undo
18 18
  */
19 19
 class GetPaid_REST_Report_Top_Earners_Controller extends GetPaid_REST_Report_Top_Sellers_Controller {
20 20
 
21
-	/**
22
-	 * Route base.
23
-	 *
24
-	 * @var string
25
-	 */
26
-	protected $rest_base = 'reports/top_earners';
21
+    /**
22
+     * Route base.
23
+     *
24
+     * @var string
25
+     */
26
+    protected $rest_base = 'reports/top_earners';
27 27
 
28
-	/**
29
-	 * Get all data needed for this report and store in the class.
30
-	 */
31
-	protected function query_report_data() {
28
+    /**
29
+     * Get all data needed for this report and store in the class.
30
+     */
31
+    protected function query_report_data() {
32 32
 
33
-		$this->report_data = GetPaid_Reports_Helper::get_invoice_report_data(
34
-			array(
35
-				'data'              => array(
36
-					'quantity'      => array(
37
-						'type'            => 'invoice_item',
38
-						'function'        => 'SUM',
39
-						'name'            => 'invoice_item_qty',
40
-					),
41
-					'item_id'             => array(
42
-						'type'            => 'invoice_item',
43
-						'function'        => '',
44
-						'name'            => 'invoice_item_id',
45
-					),
46
-					'item_name'           => array(
47
-						'type'            => 'invoice_item',
48
-						'function'        => '',
49
-						'name'            => 'invoice_item_name',
50
-					),
51
-					'price'               => array(
52
-						'type'            => 'invoice_item',
53
-						'function'        => 'SUM',
54
-						'name'            => 'invoice_item_price',
55
-					),
56
-				),
57
-				'group_by'       => 'invoice_item_id',
58
-				'order_by'       => 'invoice_item_price DESC',
59
-				'query_type'     => 'get_results',
60
-				'limit'          => 10,
61
-				'filter_range'   => $this->report_range,
62
-			)
63
-		);
33
+        $this->report_data = GetPaid_Reports_Helper::get_invoice_report_data(
34
+            array(
35
+                'data'              => array(
36
+                    'quantity'      => array(
37
+                        'type'            => 'invoice_item',
38
+                        'function'        => 'SUM',
39
+                        'name'            => 'invoice_item_qty',
40
+                    ),
41
+                    'item_id'             => array(
42
+                        'type'            => 'invoice_item',
43
+                        'function'        => '',
44
+                        'name'            => 'invoice_item_id',
45
+                    ),
46
+                    'item_name'           => array(
47
+                        'type'            => 'invoice_item',
48
+                        'function'        => '',
49
+                        'name'            => 'invoice_item_name',
50
+                    ),
51
+                    'price'               => array(
52
+                        'type'            => 'invoice_item',
53
+                        'function'        => 'SUM',
54
+                        'name'            => 'invoice_item_price',
55
+                    ),
56
+                ),
57
+                'group_by'       => 'invoice_item_id',
58
+                'order_by'       => 'invoice_item_price DESC',
59
+                'query_type'     => 'get_results',
60
+                'limit'          => 10,
61
+                'filter_range'   => $this->report_range,
62
+            )
63
+        );
64 64
 
65
-	}
65
+    }
66 66
 
67 67
 }
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -9,7 +9,7 @@
 block discarded – undo
9 9
  * @since   2.0.0
10 10
  */
11 11
 
12
-defined( 'ABSPATH' ) || exit;
12
+defined('ABSPATH') || exit;
13 13
 
14 14
 /**
15 15
  * GetPaid REST top earners controller class.
Please login to merge, or discard this patch.