Passed
Push — master ( 79129d...8ab249 )
by Kiran
12:29 queued 06:33
created
includes/gateways/class-getpaid-paypal-gateway.php 1 patch
Indentation   +508 added lines, -508 removed lines patch added patch discarded remove patch
@@ -13,103 +13,103 @@  discard block
 block discarded – undo
13 13
 class GetPaid_Paypal_Gateway extends GetPaid_Payment_Gateway {
14 14
 
15 15
     /**
16
-	 * Payment method id.
17
-	 *
18
-	 * @var string
19
-	 */
16
+     * Payment method id.
17
+     *
18
+     * @var string
19
+     */
20 20
     public $id = 'paypal';
21 21
 
22 22
     /**
23
-	 * An array of features that this gateway supports.
24
-	 *
25
-	 * @var array
26
-	 */
23
+     * An array of features that this gateway supports.
24
+     *
25
+     * @var array
26
+     */
27 27
     protected $supports = array( 'subscription', 'sandbox', 'single_subscription_group', 'refunds' );
28 28
 
29 29
     /**
30
-	 * Payment method order.
31
-	 *
32
-	 * @var int
33
-	 */
30
+     * Payment method order.
31
+     *
32
+     * @var int
33
+     */
34 34
     public $order = 1;
35 35
 
36 36
     /**
37
-	 * Stores line items to send to PayPal.
38
-	 *
39
-	 * @var array
40
-	 */
37
+     * Stores line items to send to PayPal.
38
+     *
39
+     * @var array
40
+     */
41 41
     protected $line_items = array();
42 42
 
43 43
     /**
44
-	 * Endpoint for requests from PayPal.
45
-	 *
46
-	 * @var string
47
-	 */
48
-	protected $notify_url;
44
+     * Endpoint for requests from PayPal.
45
+     *
46
+     * @var string
47
+     */
48
+    protected $notify_url;
49 49
 
50
-	/**
51
-	 * Endpoint for requests to PayPal.
52
-	 *
53
-	 * @var string
54
-	 */
50
+    /**
51
+     * Endpoint for requests to PayPal.
52
+     *
53
+     * @var string
54
+     */
55 55
     protected $endpoint;
56 56
 
57 57
     /**
58
-	 * Currencies this gateway is allowed for.
59
-	 *
60
-	 * @var array
61
-	 */
62
-	public $currencies = array( 'AUD', 'BRL', 'CAD', 'MXN', 'NZD', 'HKD', 'SGD', 'USD', 'EUR', 'JPY', 'TRY', 'NOK', 'CZK', 'DKK', 'HUF', 'ILS', 'MYR', 'PHP', 'PLN', 'SEK', 'CHF', 'TWD', 'THB', 'GBP', 'RMB', 'RUB', 'INR' );
58
+     * Currencies this gateway is allowed for.
59
+     *
60
+     * @var array
61
+     */
62
+    public $currencies = array( 'AUD', 'BRL', 'CAD', 'MXN', 'NZD', 'HKD', 'SGD', 'USD', 'EUR', 'JPY', 'TRY', 'NOK', 'CZK', 'DKK', 'HUF', 'ILS', 'MYR', 'PHP', 'PLN', 'SEK', 'CHF', 'TWD', 'THB', 'GBP', 'RMB', 'RUB', 'INR' );
63 63
 
64 64
     /**
65
-	 * URL to view a transaction.
66
-	 *
67
-	 * @var string
68
-	 */
65
+     * URL to view a transaction.
66
+     *
67
+     * @var string
68
+     */
69 69
     public $view_transaction_url = 'https://www.{sandbox}paypal.com/activity/payment/%s';
70 70
 
71 71
     /**
72
-	 * URL to view a subscription.
73
-	 *
74
-	 * @var string
75
-	 */
76
-	public $view_subscription_url = 'https://www.{sandbox}paypal.com/cgi-bin/webscr?cmd=_profile-recurring-payments&encrypted_profile_id=%s';
72
+     * URL to view a subscription.
73
+     *
74
+     * @var string
75
+     */
76
+    public $view_subscription_url = 'https://www.{sandbox}paypal.com/cgi-bin/webscr?cmd=_profile-recurring-payments&encrypted_profile_id=%s';
77 77
 
78 78
     /**
79
-	 * Class constructor.
80
-	 */
81
-	public function __construct() {
82
-		parent::__construct();
79
+     * Class constructor.
80
+     */
81
+    public function __construct() {
82
+        parent::__construct();
83 83
 
84 84
         $this->title                = __( 'PayPal Standard', 'invoicing' );
85 85
         $this->method_title         = __( 'PayPal Standard', 'invoicing' );
86 86
         $this->checkout_button_text = __( 'Proceed to PayPal', 'invoicing' );
87 87
         $this->notify_url           = wpinv_get_ipn_url( $this->id );
88 88
 
89
-		add_filter( 'wpinv_subscription_cancel_url', array( $this, 'filter_cancel_subscription_url' ), 10, 2 );
90
-		add_filter( 'getpaid_paypal_args', array( $this, 'process_subscription' ), 10, 2 );
91
-		add_filter( 'getpaid_get_paypal_connect_url', array( $this, 'maybe_get_connect_url' ), 10, 2 );
92
-		add_action( 'getpaid_authenticated_admin_action_connect_paypal', array( $this, 'connect_paypal' ) );
93
-		add_action( 'wpinv_paypal_connect', array( $this, 'display_connect_buttons' ) );
94
-
95
-		if ( $this->enabled ) {
96
-			add_filter( 'getpaid_paypal_sandbox_notice', array( $this, 'sandbox_notice' ) );
97
-			add_action( 'getpaid_paypal_subscription_cancelled', array( $this, 'subscription_cancelled' ) );
98
-			add_action( 'getpaid_delete_subscription', array( $this, 'subscription_cancelled' ) );
99
-			add_action( 'getpaid_refund_invoice_remotely', array( $this, 'refund_invoice' ) );
100
-		}
89
+        add_filter( 'wpinv_subscription_cancel_url', array( $this, 'filter_cancel_subscription_url' ), 10, 2 );
90
+        add_filter( 'getpaid_paypal_args', array( $this, 'process_subscription' ), 10, 2 );
91
+        add_filter( 'getpaid_get_paypal_connect_url', array( $this, 'maybe_get_connect_url' ), 10, 2 );
92
+        add_action( 'getpaid_authenticated_admin_action_connect_paypal', array( $this, 'connect_paypal' ) );
93
+        add_action( 'wpinv_paypal_connect', array( $this, 'display_connect_buttons' ) );
94
+
95
+        if ( $this->enabled ) {
96
+            add_filter( 'getpaid_paypal_sandbox_notice', array( $this, 'sandbox_notice' ) );
97
+            add_action( 'getpaid_paypal_subscription_cancelled', array( $this, 'subscription_cancelled' ) );
98
+            add_action( 'getpaid_delete_subscription', array( $this, 'subscription_cancelled' ) );
99
+            add_action( 'getpaid_refund_invoice_remotely', array( $this, 'refund_invoice' ) );
100
+        }
101 101
     }
102 102
 
103 103
     /**
104
-	 * Process Payment.
105
-	 *
106
-	 *
107
-	 * @param WPInv_Invoice $invoice Invoice.
108
-	 * @param array $submission_data Posted checkout fields.
109
-	 * @param GetPaid_Payment_Form_Submission $submission Checkout submission.
110
-	 * @return array
111
-	 */
112
-	public function process_payment( $invoice, $submission_data, $submission ) {
104
+     * Process Payment.
105
+     *
106
+     *
107
+     * @param WPInv_Invoice $invoice Invoice.
108
+     * @param array $submission_data Posted checkout fields.
109
+     * @param GetPaid_Payment_Form_Submission $submission Checkout submission.
110
+     * @return array
111
+     */
112
+    public function process_payment( $invoice, $submission_data, $submission ) {
113 113
 
114 114
         // Get redirect url.
115 115
         $paypal_redirect = $this->get_request_url( $invoice );
@@ -132,15 +132,15 @@  discard block
 block discarded – undo
132 132
     }
133 133
 
134 134
     /**
135
-	 * Get the PayPal request URL for an invoice.
136
-	 *
137
-	 * @param  WPInv_Invoice $invoice Invoice object.
138
-	 * @return string
139
-	 */
140
-	public function get_request_url( $invoice ) {
135
+     * Get the PayPal request URL for an invoice.
136
+     *
137
+     * @param  WPInv_Invoice $invoice Invoice object.
138
+     * @return string
139
+     */
140
+    public function get_request_url( $invoice ) {
141 141
 
142 142
         // Endpoint for this request
143
-		$this->endpoint    = $this->is_sandbox( $invoice ) ? 'https://www.sandbox.paypal.com/cgi-bin/webscr?test_ipn=1&' : 'https://www.paypal.com/cgi-bin/webscr?';
143
+        $this->endpoint    = $this->is_sandbox( $invoice ) ? 'https://www.sandbox.paypal.com/cgi-bin/webscr?test_ipn=1&' : 'https://www.paypal.com/cgi-bin/webscr?';
144 144
 
145 145
         // Retrieve paypal args.
146 146
         $paypal_args       = map_deep( $this->get_paypal_args( $invoice ), 'urlencode' );
@@ -153,45 +153,45 @@  discard block
 block discarded – undo
153 153
 
154 154
         return add_query_arg( $paypal_args, $this->endpoint );
155 155
 
156
-	}
156
+    }
157 157
 
158 158
     /**
159
-	 * Get PayPal Args for passing to PP.
160
-	 *
161
-	 * @param  WPInv_Invoice $invoice Invoice object.
162
-	 * @return array
163
-	 */
164
-	protected function get_paypal_args( $invoice ) {
159
+     * Get PayPal Args for passing to PP.
160
+     *
161
+     * @param  WPInv_Invoice $invoice Invoice object.
162
+     * @return array
163
+     */
164
+    protected function get_paypal_args( $invoice ) {
165 165
 
166 166
         // Whether or not to send the line items as one item.
167
-		$force_one_line_item = apply_filters( 'getpaid_paypal_force_one_line_item', true, $invoice );
168
-
169
-		if ( $invoice->is_recurring() || ( wpinv_use_taxes() && wpinv_prices_include_tax() ) ) {
170
-			$force_one_line_item = true;
171
-		}
172
-
173
-		$paypal_args = apply_filters(
174
-			'getpaid_paypal_args',
175
-			array_merge(
176
-				$this->get_transaction_args( $invoice ),
177
-				$this->get_line_item_args( $invoice, $force_one_line_item )
178
-			),
179
-			$invoice
180
-		);
181
-
182
-		return $this->fix_request_length( $invoice, $paypal_args );
167
+        $force_one_line_item = apply_filters( 'getpaid_paypal_force_one_line_item', true, $invoice );
168
+
169
+        if ( $invoice->is_recurring() || ( wpinv_use_taxes() && wpinv_prices_include_tax() ) ) {
170
+            $force_one_line_item = true;
171
+        }
172
+
173
+        $paypal_args = apply_filters(
174
+            'getpaid_paypal_args',
175
+            array_merge(
176
+                $this->get_transaction_args( $invoice ),
177
+                $this->get_line_item_args( $invoice, $force_one_line_item )
178
+            ),
179
+            $invoice
180
+        );
181
+
182
+        return $this->fix_request_length( $invoice, $paypal_args );
183 183
     }
184 184
 
185 185
     /**
186
-	 * Get transaction args for paypal request.
187
-	 *
188
-	 * @param WPInv_Invoice $invoice Invoice object.
189
-	 * @return array
190
-	 */
191
-	protected function get_transaction_args( $invoice ) {
186
+     * Get transaction args for paypal request.
187
+     *
188
+     * @param WPInv_Invoice $invoice Invoice object.
189
+     * @return array
190
+     */
191
+    protected function get_transaction_args( $invoice ) {
192 192
 
193
-		$email = $this->is_sandbox( $invoice ) ? wpinv_get_option( 'paypal_sandbox_email', wpinv_get_option( 'paypal_email', '' ) ) : wpinv_get_option( 'paypal_email', '' );
194
-		return array(
193
+        $email = $this->is_sandbox( $invoice ) ? wpinv_get_option( 'paypal_sandbox_email', wpinv_get_option( 'paypal_email', '' ) ) : wpinv_get_option( 'paypal_email', '' );
194
+        return array(
195 195
             'cmd'           => '_cart',
196 196
             'business'      => $email,
197 197
             'no_shipping'   => '1',
@@ -216,16 +216,16 @@  discard block
 block discarded – undo
216 216
     }
217 217
 
218 218
     /**
219
-	 * Get line item args for paypal request.
220
-	 *
221
-	 * @param  WPInv_Invoice $invoice Invoice object.
222
-	 * @param  bool     $force_one_line_item Create only one item for this invoice.
223
-	 * @return array
224
-	 */
225
-	protected function get_line_item_args( $invoice, $force_one_line_item = false ) {
219
+     * Get line item args for paypal request.
220
+     *
221
+     * @param  WPInv_Invoice $invoice Invoice object.
222
+     * @param  bool     $force_one_line_item Create only one item for this invoice.
223
+     * @return array
224
+     */
225
+    protected function get_line_item_args( $invoice, $force_one_line_item = false ) {
226 226
 
227 227
         // Maybe send invoice as a single item.
228
-		if ( $force_one_line_item ) {
228
+        if ( $force_one_line_item ) {
229 229
             return $this->get_line_item_args_single_item( $invoice );
230 230
         }
231 231
 
@@ -245,134 +245,134 @@  discard block
 block discarded – undo
245 245
             $line_item_args['discount_amount_cart'] = wpinv_sanitize_amount( (float) $invoice->get_total_discount(), 2 );
246 246
         }
247 247
 
248
-		return array_merge( $line_item_args, $this->get_line_items() );
248
+        return array_merge( $line_item_args, $this->get_line_items() );
249 249
 
250 250
     }
251 251
 
252 252
     /**
253
-	 * Get line item args for paypal request as a single line item.
254
-	 *
255
-	 * @param  WPInv_Invoice $invoice Invoice object.
256
-	 * @return array
257
-	 */
258
-	protected function get_line_item_args_single_item( $invoice ) {
259
-		$this->delete_line_items();
253
+     * Get line item args for paypal request as a single line item.
254
+     *
255
+     * @param  WPInv_Invoice $invoice Invoice object.
256
+     * @return array
257
+     */
258
+    protected function get_line_item_args_single_item( $invoice ) {
259
+        $this->delete_line_items();
260 260
 
261 261
         $item_name = wp_sprintf( __( 'Invoice %s', 'invoicing' ), $invoice->get_number() );
262
-		$this->add_line_item( $item_name, 1, wpinv_round_amount( (float) $invoice->get_total(), 2, true ), $invoice->get_id() );
262
+        $this->add_line_item( $item_name, 1, wpinv_round_amount( (float) $invoice->get_total(), 2, true ), $invoice->get_id() );
263 263
 
264
-		return $this->get_line_items();
264
+        return $this->get_line_items();
265 265
     }
266 266
 
267 267
     /**
268
-	 * Return all line items.
269
-	 */
270
-	protected function get_line_items() {
271
-		return $this->line_items;
272
-	}
268
+     * Return all line items.
269
+     */
270
+    protected function get_line_items() {
271
+        return $this->line_items;
272
+    }
273 273
 
274 274
     /**
275
-	 * Remove all line items.
276
-	 */
277
-	protected function delete_line_items() {
278
-		$this->line_items = array();
275
+     * Remove all line items.
276
+     */
277
+    protected function delete_line_items() {
278
+        $this->line_items = array();
279 279
     }
280 280
 
281 281
     /**
282
-	 * Prepare line items to send to paypal.
283
-	 *
284
-	 * @param  WPInv_Invoice $invoice Invoice object.
285
-	 */
286
-	protected function prepare_line_items( $invoice ) {
287
-		$this->delete_line_items();
288
-
289
-		// Items.
290
-		foreach ( $invoice->get_items() as $item ) {
291
-			$amount   = $item->get_price();
292
-			$quantity = $invoice->get_template() == 'amount' ? 1 : $item->get_quantity();
293
-			$this->add_line_item( $item->get_raw_name(), $quantity, $amount, $item->get_id() );
282
+     * Prepare line items to send to paypal.
283
+     *
284
+     * @param  WPInv_Invoice $invoice Invoice object.
285
+     */
286
+    protected function prepare_line_items( $invoice ) {
287
+        $this->delete_line_items();
288
+
289
+        // Items.
290
+        foreach ( $invoice->get_items() as $item ) {
291
+            $amount   = $item->get_price();
292
+            $quantity = $invoice->get_template() == 'amount' ? 1 : $item->get_quantity();
293
+            $this->add_line_item( $item->get_raw_name(), $quantity, $amount, $item->get_id() );
294 294
         }
295 295
 
296 296
         // Fees.
297
-		foreach ( $invoice->get_fees() as $fee => $data ) {
297
+        foreach ( $invoice->get_fees() as $fee => $data ) {
298 298
             $this->add_line_item( $fee, 1, wpinv_sanitize_amount( $data['initial_fee'] ) );
299 299
         }
300 300
 
301 301
     }
302 302
 
303 303
     /**
304
-	 * Add PayPal Line Item.
305
-	 *
306
-	 * @param  string $item_name Item name.
307
-	 * @param  float    $quantity Item quantity.
308
-	 * @param  float  $amount Amount.
309
-	 * @param  string $item_number Item number.
310
-	 */
311
-	protected function add_line_item( $item_name, $quantity = 1, $amount = 0.0, $item_number = '' ) {
312
-		$index = ( count( $this->line_items ) / 4 ) + 1;
313
-
314
-		/**
315
-		 * Prevent error "Things don't appear to be working at the moment. (https://www.sandbox.paypal.com/webapps/hermes/error)"
316
-		 */
317
-		$item_name = str_replace( "#", "", $item_name );
318
-
319
-		$item = apply_filters(
320
-			'getpaid_paypal_line_item',
321
-			array(
322
-				'item_name'   => html_entity_decode( getpaid_limit_length( $item_name ? wp_strip_all_tags( $item_name ) : __( 'Item', 'invoicing' ), 127 ), ENT_NOQUOTES, 'UTF-8' ),
323
-				'quantity'    => (float) $quantity,
324
-				'amount'      => wpinv_sanitize_amount( (float) $amount, 2 ),
325
-				'item_number' => $item_number,
326
-			),
327
-			$item_name,
328
-			$quantity,
329
-			$amount,
330
-			$item_number
331
-		);
332
-
333
-		$this->line_items[ 'item_name_' . $index ]   = getpaid_limit_length( $item['item_name'], 127 );
304
+     * Add PayPal Line Item.
305
+     *
306
+     * @param  string $item_name Item name.
307
+     * @param  float    $quantity Item quantity.
308
+     * @param  float  $amount Amount.
309
+     * @param  string $item_number Item number.
310
+     */
311
+    protected function add_line_item( $item_name, $quantity = 1, $amount = 0.0, $item_number = '' ) {
312
+        $index = ( count( $this->line_items ) / 4 ) + 1;
313
+
314
+        /**
315
+         * Prevent error "Things don't appear to be working at the moment. (https://www.sandbox.paypal.com/webapps/hermes/error)"
316
+         */
317
+        $item_name = str_replace( "#", "", $item_name );
318
+
319
+        $item = apply_filters(
320
+            'getpaid_paypal_line_item',
321
+            array(
322
+                'item_name'   => html_entity_decode( getpaid_limit_length( $item_name ? wp_strip_all_tags( $item_name ) : __( 'Item', 'invoicing' ), 127 ), ENT_NOQUOTES, 'UTF-8' ),
323
+                'quantity'    => (float) $quantity,
324
+                'amount'      => wpinv_sanitize_amount( (float) $amount, 2 ),
325
+                'item_number' => $item_number,
326
+            ),
327
+            $item_name,
328
+            $quantity,
329
+            $amount,
330
+            $item_number
331
+        );
332
+
333
+        $this->line_items[ 'item_name_' . $index ]   = getpaid_limit_length( $item['item_name'], 127 );
334 334
         $this->line_items[ 'quantity_' . $index ]    = $item['quantity'];
335 335
 
336 336
         // The price or amount of the product, service, or contribution, not including shipping, handling, or tax.
337
-		$this->line_items[ 'amount_' . $index ]      = $item['amount'] * $item['quantity'];
338
-		$this->line_items[ 'item_number_' . $index ] = getpaid_limit_length( $item['item_number'], 127 );
337
+        $this->line_items[ 'amount_' . $index ]      = $item['amount'] * $item['quantity'];
338
+        $this->line_items[ 'item_number_' . $index ] = getpaid_limit_length( $item['item_number'], 127 );
339 339
     }
340 340
 
341 341
     /**
342
-	 * If the default request with line items is too long, generate a new one with only one line item.
343
-	 *
344
-	 * https://support.microsoft.com/en-us/help/208427/maximum-url-length-is-2-083-characters-in-internet-explorer.
345
-	 *
346
-	 * @param WPInv_Invoice $invoice Invoice to be sent to Paypal.
347
-	 * @param array    $paypal_args Arguments sent to Paypal in the request.
348
-	 * @return array
349
-	 */
350
-	protected function fix_request_length( $invoice, $paypal_args ) {
351
-		$max_paypal_length = 2083;
352
-		$query_candidate   = http_build_query( $paypal_args, '', '&' );
353
-
354
-		if ( strlen( $this->endpoint . $query_candidate ) <= $max_paypal_length ) {
355
-			return $paypal_args;
356
-		}
357
-
358
-		return apply_filters(
359
-			'getpaid_paypal_args',
360
-			array_merge(
361
-				$this->get_transaction_args( $invoice ),
362
-				$this->get_line_item_args( $invoice, true )
363
-			),
364
-			$invoice
365
-		);
342
+     * If the default request with line items is too long, generate a new one with only one line item.
343
+     *
344
+     * https://support.microsoft.com/en-us/help/208427/maximum-url-length-is-2-083-characters-in-internet-explorer.
345
+     *
346
+     * @param WPInv_Invoice $invoice Invoice to be sent to Paypal.
347
+     * @param array    $paypal_args Arguments sent to Paypal in the request.
348
+     * @return array
349
+     */
350
+    protected function fix_request_length( $invoice, $paypal_args ) {
351
+        $max_paypal_length = 2083;
352
+        $query_candidate   = http_build_query( $paypal_args, '', '&' );
353
+
354
+        if ( strlen( $this->endpoint . $query_candidate ) <= $max_paypal_length ) {
355
+            return $paypal_args;
356
+        }
357
+
358
+        return apply_filters(
359
+            'getpaid_paypal_args',
360
+            array_merge(
361
+                $this->get_transaction_args( $invoice ),
362
+                $this->get_line_item_args( $invoice, true )
363
+            ),
364
+            $invoice
365
+        );
366 366
 
367 367
     }
368 368
 
369 369
     /**
370
-	 * Processes recurring invoices.
371
-	 *
372
-	 * @param  array $paypal_args PayPal args.
373
-	 * @param  WPInv_Invoice    $invoice Invoice object.
374
-	 */
375
-	public function process_subscription( $paypal_args, $invoice ) {
370
+     * Processes recurring invoices.
371
+     *
372
+     * @param  array $paypal_args PayPal args.
373
+     * @param  WPInv_Invoice    $invoice Invoice object.
374
+     */
375
+    public function process_subscription( $paypal_args, $invoice ) {
376 376
 
377 377
         // Make sure this is a subscription.
378 378
         if ( ! $invoice->is_recurring() || ! $subscription = getpaid_get_invoice_subscription( $invoice ) ) {
@@ -393,21 +393,21 @@  discard block
 block discarded – undo
393 393
         $recurring_amount       = (float) wpinv_sanitize_amount( $invoice->get_recurring_total(), 2 );
394 394
         $subscription_item      = $invoice->get_recurring( true );
395 395
 
396
-		// Convert 365 days to 1 year.
397
-		if ( 'D' == $period && 365 == $interval ) {
398
-			$period = 'Y';
399
-			$interval = 1;
400
-		}
396
+        // Convert 365 days to 1 year.
397
+        if ( 'D' == $period && 365 == $interval ) {
398
+            $period = 'Y';
399
+            $interval = 1;
400
+        }
401 401
 
402 402
         if ( $subscription_item->has_free_trial() ) {
403 403
 
404 404
             $paypal_args['a1'] = 0 == $initial_amount ? 0 : $initial_amount;
405 405
 
406
-			// Trial period length.
407
-			$paypal_args['p1'] = $subscription_item->get_trial_interval();
406
+            // Trial period length.
407
+            $paypal_args['p1'] = $subscription_item->get_trial_interval();
408 408
 
409
-			// Trial period.
410
-			$paypal_args['t1'] = $subscription_item->get_trial_period();
409
+            // Trial period.
410
+            $paypal_args['t1'] = $subscription_item->get_trial_period();
411 411
 
412 412
         } elseif ( $initial_amount != $recurring_amount ) {
413 413
 
@@ -430,40 +430,40 @@  discard block
 block discarded – undo
430 430
         }
431 431
 
432 432
         // We have a recurring payment
433
-		if ( ! isset( $param_number ) || 1 == $param_number ) {
433
+        if ( ! isset( $param_number ) || 1 == $param_number ) {
434 434
 
435
-			// Subscription price
436
-			$paypal_args['a3'] = $recurring_amount;
435
+            // Subscription price
436
+            $paypal_args['a3'] = $recurring_amount;
437 437
 
438
-			// Subscription duration
439
-			$paypal_args['p3'] = $interval;
438
+            // Subscription duration
439
+            $paypal_args['p3'] = $interval;
440 440
 
441
-			// Subscription period
442
-			$paypal_args['t3'] = $period;
441
+            // Subscription period
442
+            $paypal_args['t3'] = $period;
443 443
 
444 444
         }
445 445
 
446 446
         // Recurring payments
447
-		if ( 1 == $bill_times || ( $initial_amount != $recurring_amount && ! $subscription_item->has_free_trial() && 2 == $bill_times ) ) {
447
+        if ( 1 == $bill_times || ( $initial_amount != $recurring_amount && ! $subscription_item->has_free_trial() && 2 == $bill_times ) ) {
448 448
 
449
-			// Non-recurring payments
450
-			$paypal_args['src'] = 0;
449
+            // Non-recurring payments
450
+            $paypal_args['src'] = 0;
451 451
 
452
-		} else {
452
+        } else {
453 453
 
454
-			$paypal_args['src'] = 1;
454
+            $paypal_args['src'] = 1;
455 455
 
456
-			if ( $bill_times > 0 ) {
456
+            if ( $bill_times > 0 ) {
457 457
 
458
-				// An initial period is being used to charge a sign-up fee
459
-				if ( $initial_amount != $recurring_amount && ! $subscription_item->has_free_trial() ) {
460
-					$bill_times--;
461
-				}
458
+                // An initial period is being used to charge a sign-up fee
459
+                if ( $initial_amount != $recurring_amount && ! $subscription_item->has_free_trial() ) {
460
+                    $bill_times--;
461
+                }
462 462
 
463 463
                 // Make sure it's not over the max of 52
464 464
                 $paypal_args['srt'] = ( $bill_times <= 52 ? absint( $bill_times ) : 52 );
465 465
 
466
-			}
466
+            }
467 467
         }
468 468
 
469 469
         // Force return URL so that order description & instructions display
@@ -475,115 +475,115 @@  discard block
 block discarded – undo
475 475
             if ( isset( $paypal_args[ $arg ] ) ) {
476 476
                 unset( $paypal_args[ $arg ] );
477 477
             }
478
-		}
478
+        }
479 479
 
480 480
         return apply_filters(
481
-			'getpaid_paypal_subscription_args',
482
-			$paypal_args,
483
-			$invoice
481
+            'getpaid_paypal_subscription_args',
482
+            $paypal_args,
483
+            $invoice
484
+        );
485
+
486
+    }
487
+
488
+    /**
489
+     * Refunds an invoice remotely.
490
+     * 
491
+     * @since 2.8.24
492
+     * @param WPInv_Invoice $invoice Invoice object.
493
+     */
494
+    public function refund_invoice( $invoice ) {
495
+
496
+        if ( $invoice->get_gateway() !== $this->id ) {
497
+            return;
498
+        }
499
+
500
+        $mode	= $this->is_sandbox( $invoice ) ? 'sandbox' : 'live';
501
+        $result = GetPaid_PayPal_API::refund_capture( $invoice->get_transaction_id(), array(), $mode );
502
+
503
+        if ( is_wp_error( $result ) ) {
504
+            $invoice->add_system_note(
505
+                sprintf(
506
+                    // translators: %s is the error message.
507
+                    __( 'An error occured while trying to refund invoice #%1$s in PayPal: %2$s', 'invoicing' ),
508
+                    $invoice->get_id(),
509
+                    $result->get_error_message()
510
+                )
511
+            );
512
+        } else {
513
+            $invoice->add_system_note(
514
+                sprintf(
515
+                    // translators: %s is the refund ID.
516
+                    __( 'Successfully refunded invoice #%1$s in PayPal. Refund ID: %2$s', 'invoicing' ),
517
+                    $invoice->get_id(),
518
+                    $result->id
519
+                )
520
+            );
521
+        }
522
+    }
523
+
524
+    /**
525
+     * Cancels a subscription remotely.
526
+     * 
527
+     * @since 2.8.24
528
+     * @param WPInv_Subscription $subscription Subscription object.
529
+     */
530
+    public function subscription_cancelled( $subscription ) {
531
+
532
+        if ( $subscription->get_gateway() != $this->id ) {
533
+            return;
534
+        }
535
+
536
+        $invoice = $subscription->get_parent_invoice();
537
+
538
+        // Abort if the parent invoice does not exist.
539
+        if ( ! $invoice->exists() ) {
540
+            return;
541
+        }
542
+
543
+        $mode	= $this->is_sandbox( $invoice ) ? 'sandbox' : 'live';
544
+        $result = GetPaid_PayPal_API::cancel_subscription( 
545
+            $invoice->get_remote_subscription_id(), 
546
+            array(
547
+                'reason' => __(' Customer requested cancellation', 'invoicing' ),
548
+            ), 
549
+            $mode 
484 550
         );
485 551
 
552
+        if ( is_wp_error( $result ) ) {
553
+
554
+            $error = sprintf(
555
+                // translators: %s is the subscription ID.
556
+                __( 'An error occured while trying to cancel subscription #%s in PayPal.', 'invoicing' ),
557
+                $subscription->get_id()
558
+            );
559
+
560
+            getpaid_admin()->show_error( $error . ' ' . $result->get_error_message() );
561
+
562
+            if ( ! is_admin() ) {
563
+                wpinv_set_error( $result->get_error_code(), $error );
564
+            }
565
+
566
+            return;
567
+        }
568
+
569
+        if ( is_admin() ) {
570
+            getpaid_admin()->show_success(
571
+                sprintf(
572
+                    // translators: %s is the subscription ID.
573
+                    __( 'Successfully cancelled subscription #%s in PayPal.', 'invoicing' ),
574
+                    $subscription->get_id()
575
+                )
576
+            );
577
+        }
578
+
486 579
     }
487 580
 
488
-	/**
489
-	 * Refunds an invoice remotely.
490
-	 * 
491
-	 * @since 2.8.24
492
-	 * @param WPInv_Invoice $invoice Invoice object.
493
-	 */
494
-	public function refund_invoice( $invoice ) {
495
-
496
-		if ( $invoice->get_gateway() !== $this->id ) {
497
-			return;
498
-		}
499
-
500
-		$mode	= $this->is_sandbox( $invoice ) ? 'sandbox' : 'live';
501
-		$result = GetPaid_PayPal_API::refund_capture( $invoice->get_transaction_id(), array(), $mode );
502
-
503
-		if ( is_wp_error( $result ) ) {
504
-			$invoice->add_system_note(
505
-				sprintf(
506
-					// translators: %s is the error message.
507
-					__( 'An error occured while trying to refund invoice #%1$s in PayPal: %2$s', 'invoicing' ),
508
-					$invoice->get_id(),
509
-					$result->get_error_message()
510
-				)
511
-			);
512
-		} else {
513
-			$invoice->add_system_note(
514
-				sprintf(
515
-					// translators: %s is the refund ID.
516
-					__( 'Successfully refunded invoice #%1$s in PayPal. Refund ID: %2$s', 'invoicing' ),
517
-					$invoice->get_id(),
518
-					$result->id
519
-				)
520
-			);
521
-		}
522
-	}
523
-
524
-	/**
525
-	 * Cancels a subscription remotely.
526
-	 * 
527
-	 * @since 2.8.24
528
-	 * @param WPInv_Subscription $subscription Subscription object.
529
-	 */
530
-	public function subscription_cancelled( $subscription ) {
531
-
532
-		if ( $subscription->get_gateway() != $this->id ) {
533
-			return;
534
-		}
535
-
536
-		$invoice = $subscription->get_parent_invoice();
537
-
538
-		// Abort if the parent invoice does not exist.
539
-		if ( ! $invoice->exists() ) {
540
-			return;
541
-		}
542
-
543
-		$mode	= $this->is_sandbox( $invoice ) ? 'sandbox' : 'live';
544
-		$result = GetPaid_PayPal_API::cancel_subscription( 
545
-			$invoice->get_remote_subscription_id(), 
546
-			array(
547
-				'reason' => __(' Customer requested cancellation', 'invoicing' ),
548
-			), 
549
-			$mode 
550
-		);
551
-
552
-		if ( is_wp_error( $result ) ) {
553
-
554
-			$error = sprintf(
555
-				// translators: %s is the subscription ID.
556
-				__( 'An error occured while trying to cancel subscription #%s in PayPal.', 'invoicing' ),
557
-				$subscription->get_id()
558
-			);
559
-
560
-			getpaid_admin()->show_error( $error . ' ' . $result->get_error_message() );
561
-
562
-			if ( ! is_admin() ) {
563
-				wpinv_set_error( $result->get_error_code(), $error );
564
-			}
565
-
566
-			return;
567
-		}
568
-
569
-		if ( is_admin() ) {
570
-			getpaid_admin()->show_success(
571
-				sprintf(
572
-					// translators: %s is the subscription ID.
573
-					__( 'Successfully cancelled subscription #%s in PayPal.', 'invoicing' ),
574
-					$subscription->get_id()
575
-				)
576
-			);
577
-		}
578
-
579
-	}
580
-
581
-    /**
582
-	 * Processes ipns and marks payments as complete.
583
-	 *
584
-	 * @return void
585
-	 */
586
-	public function verify_ipn() {
581
+    /**
582
+     * Processes ipns and marks payments as complete.
583
+     *
584
+     * @return void
585
+     */
586
+    public function verify_ipn() {
587 587
         new GetPaid_Paypal_Gateway_IPN_Handler( $this );
588 588
     }
589 589
 
@@ -593,19 +593,19 @@  discard block
 block discarded – undo
593 593
     public function sandbox_notice() {
594 594
 
595 595
         return sprintf(
596
-			__( 'SANDBOX ENABLED. You can use sandbox testing accounts only. See the %1$sPayPal Sandbox Testing Guide%2$s for more details.', 'invoicing' ),
597
-			'<a href="https://developer.paypal.com/docs/classic/lifecycle/ug_sandbox/">',
598
-			'</a>'
599
-		);
596
+            __( 'SANDBOX ENABLED. You can use sandbox testing accounts only. See the %1$sPayPal Sandbox Testing Guide%2$s for more details.', 'invoicing' ),
597
+            '<a href="https://developer.paypal.com/docs/classic/lifecycle/ug_sandbox/">',
598
+            '</a>'
599
+        );
600 600
 
601 601
     }
602 602
 
603
-	/**
604
-	 * Filters the gateway settings.
605
-	 *
606
-	 * @param array $admin_settings
607
-	 */
608
-	public function admin_settings( $admin_settings ) {
603
+    /**
604
+     * Filters the gateway settings.
605
+     *
606
+     * @param array $admin_settings
607
+     */
608
+    public function admin_settings( $admin_settings ) {
609 609
 
610 610
         $currencies = sprintf(
611 611
             __( 'Supported Currencies: %s', 'invoicing' ),
@@ -615,66 +615,66 @@  discard block
 block discarded – undo
615 615
         $admin_settings['paypal_active']['desc'] .= " ($currencies)";
616 616
         $admin_settings['paypal_desc']['std']     = __( 'Pay via PayPal: you can pay with your credit card if you don\'t have a PayPal account.', 'invoicing' );
617 617
 
618
-		// Access tokens.
619
-		$live_email      = wpinv_get_option( 'paypal_email' );
620
-		$sandbox_email   = wpinv_get_option( 'paypal_sandbox_email' );
618
+        // Access tokens.
619
+        $live_email      = wpinv_get_option( 'paypal_email' );
620
+        $sandbox_email   = wpinv_get_option( 'paypal_sandbox_email' );
621 621
 
622
-		$admin_settings['paypal_connect'] = array(
623
-			'type' => 'hook',
624
-			'id'   => 'paypal_connect',
625
-			'name' => __( 'Connect to PayPal', 'invoicing' ),
626
-		);
622
+        $admin_settings['paypal_connect'] = array(
623
+            'type' => 'hook',
624
+            'id'   => 'paypal_connect',
625
+            'name' => __( 'Connect to PayPal', 'invoicing' ),
626
+        );
627 627
 
628 628
         $admin_settings['paypal_email'] = array(
629 629
             'type'  => 'text',
630
-			'class' => 'live-auth-data',
630
+            'class' => 'live-auth-data',
631 631
             'id'    => 'paypal_email',
632 632
             'name'  => __( 'Live Email Address', 'invoicing' ),
633 633
             'desc'  => __( 'The email address of your PayPal account.', 'invoicing' ),
634 634
         );
635 635
 
636
-		$admin_settings['paypal_sandbox_email'] = array(
636
+        $admin_settings['paypal_sandbox_email'] = array(
637 637
             'type'  => 'text',
638
-			'class' => 'sandbox-auth-data',
638
+            'class' => 'sandbox-auth-data',
639 639
             'id'    => 'paypal_sandbox_email',
640 640
             'name'  => __( 'Sandbox Email Address', 'invoicing' ),
641 641
             'desc'  => __( 'The email address of your sandbox PayPal account.', 'invoicing' ),
642
-			'std'   => wpinv_get_option( 'paypal_email', '' ),
642
+            'std'   => wpinv_get_option( 'paypal_email', '' ),
643
+        );
644
+
645
+        // Client ID and secret.
646
+        $admin_settings['paypal_client_id'] = array(
647
+            'type'  => 'text',
648
+            'class' => 'live-auth-data',
649
+            'id'    => 'paypal_client_id',
650
+            'name'  => __( 'Live Client ID', 'invoicing' ),
651
+            'desc'  => __( 'The client ID of your PayPal account. You can retrieve this from your PayPal developer account.', 'invoicing' ),
652
+        );
653
+
654
+        $admin_settings['paypal_sandbox_client_id'] = array(
655
+            'type'  => 'text',
656
+            'class' => 'sandbox-auth-data',
657
+            'id'    => 'paypal_sandbox_client_id',
658
+            'name'  => __( 'Sandbox Client ID', 'invoicing' ),
659
+            'desc'  => __( 'The client ID of your sandbox PayPal account. You can retrieve this from your PayPal developer account.', 'invoicing' ),
660
+            'std'   => wpinv_get_option( 'paypal_client_id', '' ),
643 661
         );
644 662
 
645
-		// Client ID and secret.
646
-		$admin_settings['paypal_client_id'] = array(
647
-			'type'  => 'text',
648
-			'class' => 'live-auth-data',
649
-			'id'    => 'paypal_client_id',
650
-			'name'  => __( 'Live Client ID', 'invoicing' ),
651
-			'desc'  => __( 'The client ID of your PayPal account. You can retrieve this from your PayPal developer account.', 'invoicing' ),
652
-		);
653
-
654
-		$admin_settings['paypal_sandbox_client_id'] = array(
655
-			'type'  => 'text',
656
-			'class' => 'sandbox-auth-data',
657
-			'id'    => 'paypal_sandbox_client_id',
658
-			'name'  => __( 'Sandbox Client ID', 'invoicing' ),
659
-			'desc'  => __( 'The client ID of your sandbox PayPal account. You can retrieve this from your PayPal developer account.', 'invoicing' ),
660
-			'std'   => wpinv_get_option( 'paypal_client_id', '' ),
661
-		);
662
-
663
-		$admin_settings['paypal_secret'] = array(
664
-			'type'  => 'text',
665
-			'class' => 'live-auth-data',
666
-			'id'    => 'paypal_secret',
667
-			'name'  => __( 'Live Secret', 'invoicing' ),
668
-			'desc'  => __( 'The secret of your PayPal account. You can retrieve this from your PayPal developer account.', 'invoicing' ),
669
-		);
670
-
671
-		$admin_settings['paypal_sandbox_secret'] = array(
672
-			'type'  => 'text',
673
-			'class' => 'sandbox-auth-data',
674
-			'id'    => 'paypal_sandbox_secret',
675
-			'name'  => __( 'Sandbox Secret', 'invoicing' ),
676
-			'desc'  => __( 'The secret of your sandbox PayPal account. You can retrieve this from your PayPal developer account.', 'invoicing' ),
677
-		);
663
+        $admin_settings['paypal_secret'] = array(
664
+            'type'  => 'text',
665
+            'class' => 'live-auth-data',
666
+            'id'    => 'paypal_secret',
667
+            'name'  => __( 'Live Secret', 'invoicing' ),
668
+            'desc'  => __( 'The secret of your PayPal account. You can retrieve this from your PayPal developer account.', 'invoicing' ),
669
+        );
670
+
671
+        $admin_settings['paypal_sandbox_secret'] = array(
672
+            'type'  => 'text',
673
+            'class' => 'sandbox-auth-data',
674
+            'id'    => 'paypal_sandbox_secret',
675
+            'name'  => __( 'Sandbox Secret', 'invoicing' ),
676
+            'desc'  => __( 'The secret of your sandbox PayPal account. You can retrieve this from your PayPal developer account.', 'invoicing' ),
677
+        );
678 678
 
679 679
         $admin_settings['paypal_ipn_url'] = array(
680 680
             'type'     => 'ipn_url',
@@ -685,57 +685,57 @@  discard block
 block discarded – undo
685 685
             'readonly' => true,
686 686
         );
687 687
 
688
-		return $admin_settings;
689
-	}
690
-
691
-	/**
692
-	 * Retrieves the URL to cancel a subscription.
693
-	 *
694
-	 * @param string $url
695
-	 * @param WPInv_Subscription $subscription
696
-	 */
697
-	public function filter_cancel_subscription_url( $url, $subscription ) {
698
-
699
-		if ( $this->id !== $subscription->get_gateway() ) {
700
-			return $url;
701
-		}
702
-
703
-		// Get the PayPal profile ID.
704
-		$profile_id = $subscription->get_profile_id();
705
-
706
-		// Bail if no profile ID.
707
-		if ( empty( $profile_id ) ) {
708
-			return $url;
709
-		}
710
-
711
-		$cancel_url = 'https://www.paypal.com/myaccount/autopay/connect/%s/cancel';
712
-		if ( $this->is_sandbox( $subscription->get_parent_payment() ) ) {
713
-			$cancel_url = 'https://www.sandbox.paypal.com/myaccount/autopay/connect/%s/cancel';
714
-		}
715
-
716
-		return sprintf( $cancel_url, $profile_id );
717
-	}
718
-
719
-	/**
720
-	 * Retrieves the PayPal connect URL when using the setup wizzard.
721
-	 *
722
-	 *
688
+        return $admin_settings;
689
+    }
690
+
691
+    /**
692
+     * Retrieves the URL to cancel a subscription.
693
+     *
694
+     * @param string $url
695
+     * @param WPInv_Subscription $subscription
696
+     */
697
+    public function filter_cancel_subscription_url( $url, $subscription ) {
698
+
699
+        if ( $this->id !== $subscription->get_gateway() ) {
700
+            return $url;
701
+        }
702
+
703
+        // Get the PayPal profile ID.
704
+        $profile_id = $subscription->get_profile_id();
705
+
706
+        // Bail if no profile ID.
707
+        if ( empty( $profile_id ) ) {
708
+            return $url;
709
+        }
710
+
711
+        $cancel_url = 'https://www.paypal.com/myaccount/autopay/connect/%s/cancel';
712
+        if ( $this->is_sandbox( $subscription->get_parent_payment() ) ) {
713
+            $cancel_url = 'https://www.sandbox.paypal.com/myaccount/autopay/connect/%s/cancel';
714
+        }
715
+
716
+        return sprintf( $cancel_url, $profile_id );
717
+    }
718
+
719
+    /**
720
+     * Retrieves the PayPal connect URL when using the setup wizzard.
721
+     *
722
+     *
723 723
      * @param array $data
724 724
      * @return string
725
-	 */
726
-	public static function maybe_get_connect_url( $url = '', $data = array() ) {
727
-		return self::get_connect_url( false, urldecode( $data['redirect'] ) );
728
-	}
729
-
730
-	/**
731
-	 * Retrieves the PayPal connect URL.
732
-	 *
733
-	 *
725
+     */
726
+    public static function maybe_get_connect_url( $url = '', $data = array() ) {
727
+        return self::get_connect_url( false, urldecode( $data['redirect'] ) );
728
+    }
729
+
730
+    /**
731
+     * Retrieves the PayPal connect URL.
732
+     *
733
+     *
734 734
      * @param bool $is_sandbox
735
-	 * @param string $redirect
735
+     * @param string $redirect
736 736
      * @return string
737
-	 */
738
-	public static function get_connect_url( $is_sandbox, $redirect = '' ) {
737
+     */
738
+    public static function get_connect_url( $is_sandbox, $redirect = '' ) {
739 739
 
740 740
         $redirect_url = add_query_arg(
741 741
             array(
@@ -745,7 +745,7 @@  discard block
 block discarded – undo
745 745
                 'tab'                  => 'gateways',
746 746
                 'section'              => 'paypal',
747 747
                 'getpaid-nonce'        => wp_create_nonce( 'getpaid-nonce' ),
748
-				'redirect'             => urlencode( $redirect ),
748
+                'redirect'             => urlencode( $redirect ),
749 749
             ),
750 750
             admin_url( 'admin.php' )
751 751
         );
@@ -760,12 +760,12 @@  discard block
 block discarded – undo
760 760
 
761 761
     }
762 762
 
763
-	/**
764
-	 * Generates settings page js.
765
-	 *
763
+    /**
764
+     * Generates settings page js.
765
+     *
766 766
      * @return void
767
-	 */
768
-	public static function display_connect_buttons() {
767
+     */
768
+    public static function display_connect_buttons() {
769 769
 
770 770
         ?>
771 771
 			<div class="wpinv-paypal-connect-live">
@@ -807,70 +807,70 @@  discard block
 block discarded – undo
807 807
         <?php
808 808
     }
809 809
 
810
-	/**
811
-	 * Connects to PayPal.
812
-	 *
813
-	 * @param array $data Connection data.
814
-	 * @return void
815
-	 */
816
-	public function connect_paypal( $data ) {
817
-
818
-		$sandbox      = $this->is_sandbox();
819
-		$data         = wp_unslash( $data );
820
-		$access_token = empty( $data['access_token'] ) ? '' : sanitize_text_field( $data['access_token'] );
821
-
822
-		if ( isset( $data['live_mode'] ) ) {
823
-			$sandbox = empty( $data['live_mode'] );
824
-		}
825
-
826
-		wpinv_update_option( 'paypal_sandbox', (int) $sandbox );
827
-		wpinv_update_option( 'paypal_active', 1 );
828
-
829
-		if ( ! empty( $data['error_description'] ) ) {
830
-			getpaid_admin()->show_error( wp_kses_post( urldecode( $data['error_description'] ) ) );
831
-		} else {
832
-
833
-			// Retrieve the user info.
834
-			$user_info = wp_remote_get(
835
-				! $sandbox ? 'https://api-m.paypal.com/v1/identity/oauth2/userinfo?schema=paypalv1.1' : 'https://api-m.sandbox.paypal.com/v1/identity/oauth2/userinfo?schema=paypalv1.1',
836
-				array(
837
-
838
-					'headers' => array(
839
-						'Authorization' => 'Bearer ' . $access_token,
840
-						'Content-type'  => 'application/json',
841
-					),
842
-
843
-				)
844
-			);
845
-
846
-			if ( is_wp_error( $user_info ) ) {
847
-				getpaid_admin()->show_error( wp_kses_post( $user_info->get_error_message() ) );
848
-			} else {
849
-
850
-				// Create application.
851
-				$user_info = json_decode( wp_remote_retrieve_body( $user_info ) );
852
-
853
-				if ( $sandbox ) {
854
-					wpinv_update_option( 'paypal_sandbox_email', sanitize_email( $user_info->emails[0]->value ) );
855
-					wpinv_update_option( 'paypal_sandbox_refresh_token', sanitize_text_field( urldecode( $data['refresh_token'] ) ) );
856
-					set_transient( 'getpaid_paypal_sandbox_access_token', sanitize_text_field( urldecode( $data['access_token'] ) ), (int) $data['expires_in'] );
857
-					getpaid_admin()->show_success( __( 'Successfully connected your PayPal sandbox account', 'invoicing' ) );
858
-				} else {
859
-					wpinv_update_option( 'paypal_email', sanitize_email( $user_info->emails[0]->value ) );
860
-					wpinv_update_option( 'paypal_refresh_token', sanitize_text_field( urldecode( $data['refresh_token'] ) ) );
861
-					set_transient( 'getpaid_paypal_access_token', sanitize_text_field( urldecode( $data['access_token'] ) ), (int) $data['expires_in'] );
862
-					getpaid_admin()->show_success( __( 'Successfully connected your PayPal account', 'invoicing' ) );
863
-				}
864
-			}
865
-		}
866
-
867
-		$redirect = empty( $data['redirect'] ) ? admin_url( 'admin.php?page=wpinv-settings&tab=gateways&section=paypal' ) : urldecode( $data['redirect'] );
868
-
869
-		if ( isset( $data['step'] ) ) {
870
-			$redirect = add_query_arg( 'step', $data['step'], $redirect );
871
-		}
872
-		wp_redirect( $redirect );
873
-		exit;
874
-	}
810
+    /**
811
+     * Connects to PayPal.
812
+     *
813
+     * @param array $data Connection data.
814
+     * @return void
815
+     */
816
+    public function connect_paypal( $data ) {
817
+
818
+        $sandbox      = $this->is_sandbox();
819
+        $data         = wp_unslash( $data );
820
+        $access_token = empty( $data['access_token'] ) ? '' : sanitize_text_field( $data['access_token'] );
821
+
822
+        if ( isset( $data['live_mode'] ) ) {
823
+            $sandbox = empty( $data['live_mode'] );
824
+        }
825
+
826
+        wpinv_update_option( 'paypal_sandbox', (int) $sandbox );
827
+        wpinv_update_option( 'paypal_active', 1 );
828
+
829
+        if ( ! empty( $data['error_description'] ) ) {
830
+            getpaid_admin()->show_error( wp_kses_post( urldecode( $data['error_description'] ) ) );
831
+        } else {
832
+
833
+            // Retrieve the user info.
834
+            $user_info = wp_remote_get(
835
+                ! $sandbox ? 'https://api-m.paypal.com/v1/identity/oauth2/userinfo?schema=paypalv1.1' : 'https://api-m.sandbox.paypal.com/v1/identity/oauth2/userinfo?schema=paypalv1.1',
836
+                array(
837
+
838
+                    'headers' => array(
839
+                        'Authorization' => 'Bearer ' . $access_token,
840
+                        'Content-type'  => 'application/json',
841
+                    ),
842
+
843
+                )
844
+            );
845
+
846
+            if ( is_wp_error( $user_info ) ) {
847
+                getpaid_admin()->show_error( wp_kses_post( $user_info->get_error_message() ) );
848
+            } else {
849
+
850
+                // Create application.
851
+                $user_info = json_decode( wp_remote_retrieve_body( $user_info ) );
852
+
853
+                if ( $sandbox ) {
854
+                    wpinv_update_option( 'paypal_sandbox_email', sanitize_email( $user_info->emails[0]->value ) );
855
+                    wpinv_update_option( 'paypal_sandbox_refresh_token', sanitize_text_field( urldecode( $data['refresh_token'] ) ) );
856
+                    set_transient( 'getpaid_paypal_sandbox_access_token', sanitize_text_field( urldecode( $data['access_token'] ) ), (int) $data['expires_in'] );
857
+                    getpaid_admin()->show_success( __( 'Successfully connected your PayPal sandbox account', 'invoicing' ) );
858
+                } else {
859
+                    wpinv_update_option( 'paypal_email', sanitize_email( $user_info->emails[0]->value ) );
860
+                    wpinv_update_option( 'paypal_refresh_token', sanitize_text_field( urldecode( $data['refresh_token'] ) ) );
861
+                    set_transient( 'getpaid_paypal_access_token', sanitize_text_field( urldecode( $data['access_token'] ) ), (int) $data['expires_in'] );
862
+                    getpaid_admin()->show_success( __( 'Successfully connected your PayPal account', 'invoicing' ) );
863
+                }
864
+            }
865
+        }
866
+
867
+        $redirect = empty( $data['redirect'] ) ? admin_url( 'admin.php?page=wpinv-settings&tab=gateways&section=paypal' ) : urldecode( $data['redirect'] );
868
+
869
+        if ( isset( $data['step'] ) ) {
870
+            $redirect = add_query_arg( 'step', $data['step'], $redirect );
871
+        }
872
+        wp_redirect( $redirect );
873
+        exit;
874
+    }
875 875
 
876 876
 }
Please login to merge, or discard this patch.
templates/payment-forms/elements/checkbox.php 1 patch
Indentation   +12 added lines, -12 removed lines patch added patch discarded remove patch
@@ -13,19 +13,19 @@
 block discarded – undo
13 13
 $label_class = sanitize_key( preg_replace( '/[^A-Za-z0-9_-]/', '-', $label ) );
14 14
 
15 15
 if ( ! empty( $required ) ) {
16
-	$label .= "<span class='text-danger'> *</span>";
16
+    $label .= "<span class='text-danger'> *</span>";
17 17
 }
18 18
 
19 19
 aui()->input(
20
-	array(
21
-		'type'      => 'checkbox',
22
-		'name'      => esc_attr( $id ),
23
-		'id'        => esc_attr( $element_id ),
24
-		'required'  => ! empty( $required ),
25
-		'label'     => $label,
26
-		'value'     => esc_attr__( 'Yes', 'invoicing' ),
27
-		'help_text' => empty( $description ) ? '' : wp_kses_post( $description ),
28
-		'class'     => $label_class
29
-	),
30
-	true
20
+    array(
21
+        'type'      => 'checkbox',
22
+        'name'      => esc_attr( $id ),
23
+        'id'        => esc_attr( $element_id ),
24
+        'required'  => ! empty( $required ),
25
+        'label'     => $label,
26
+        'value'     => esc_attr__( 'Yes', 'invoicing' ),
27
+        'help_text' => empty( $description ) ? '' : wp_kses_post( $description ),
28
+        'class'     => $label_class
29
+    ),
30
+    true
31 31
 );
Please login to merge, or discard this patch.
templates/payment-forms/elements/address.php 1 patch
Indentation   +26 added lines, -26 removed lines patch added patch discarded remove patch
@@ -10,7 +10,7 @@  discard block
 block discarded – undo
10 10
 defined( 'ABSPATH' ) || exit;
11 11
 
12 12
 if ( empty( $fields ) ) {
13
-	return;
13
+    return;
14 14
 }
15 15
 
16 16
 // A prefix for all ids (so that a form can be included in the same page multiple times).
@@ -18,12 +18,12 @@  discard block
 block discarded – undo
18 18
 
19 19
 // Prepare the user's country.
20 20
 if ( ! empty( $form->invoice ) ) {
21
-	$country = $form->invoice->get_country();
21
+    $country = $form->invoice->get_country();
22 22
 }
23 23
 
24 24
 if ( empty( $country ) ) {
25
-	$country = empty( $country ) ? getpaid_get_ip_country() : $country;
26
-	$country = empty( $country ) ? wpinv_get_default_country() : $country;
25
+    $country = empty( $country ) ? getpaid_get_ip_country() : $country;
26
+    $country = empty( $country ) ? wpinv_get_default_country() : $country;
27 27
 }
28 28
 
29 29
 // A prefix for all ids (so that a form can be included in the same page multiple times).
@@ -50,32 +50,32 @@  discard block
 block discarded – undo
50 50
 	<!-- Start Billing Address -->
51 51
 	<div class="getpaid-billing-address-wrapper">
52 52
 		<?php
53
-			$field_type = 'billing';
53
+            $field_type = 'billing';
54 54
 
55
-			wpinv_get_template( 'payment-forms/elements/address-fields.php', array( 'form' => $form, 'fields' => $fields, 'address_type' => $address_type, 'field_type' => $field_type, 'uniqid' => $uniqid, 'country' => $country ) );
55
+            wpinv_get_template( 'payment-forms/elements/address-fields.php', array( 'form' => $form, 'fields' => $fields, 'address_type' => $address_type, 'field_type' => $field_type, 'uniqid' => $uniqid, 'country' => $country ) );
56 56
 
57
-			do_action( 'getpaid_after_payment_form_billing_fields', $form );
58
-		?>
57
+            do_action( 'getpaid_after_payment_form_billing_fields', $form );
58
+        ?>
59 59
 	</div>
60 60
 	<!-- End Billing Address -->
61 61
 <?php endif; ?>
62 62
 
63 63
 <?php if ( 'both' === $address_type ) : ?>
64 64
 	<?php
65
-		aui()->input(
66
-			array(
67
-				'type'     => 'checkbox',
68
-				'name'     => 'same-shipping-address',
69
-				'id'       => "shipping-toggle$uniqid",
70
-				'required' => false,
71
-				'label'    => empty( $shipping_address_toggle ) ? esc_html__( 'Same billing & shipping address.', 'invoicing' ) : wp_kses_post( $shipping_address_toggle ),
72
-				'value'    => 1,
73
-				'checked'  => true,
74
-				'class'    => 'chkbox-same-shipping-address'
75
-			),
76
-			true
77
-		);
78
-	?>
65
+        aui()->input(
66
+            array(
67
+                'type'     => 'checkbox',
68
+                'name'     => 'same-shipping-address',
69
+                'id'       => "shipping-toggle$uniqid",
70
+                'required' => false,
71
+                'label'    => empty( $shipping_address_toggle ) ? esc_html__( 'Same billing & shipping address.', 'invoicing' ) : wp_kses_post( $shipping_address_toggle ),
72
+                'value'    => 1,
73
+                'checked'  => true,
74
+                'class'    => 'chkbox-same-shipping-address'
75
+            ),
76
+            true
77
+        );
78
+    ?>
79 79
 	<!-- Start Shipping Address Title -->
80 80
 	<h4 class="mb-3 getpaid-shipping-address-title">
81 81
 		<?php esc_html_e( 'Shipping Address', 'invoicing' ); ?>
@@ -87,12 +87,12 @@  discard block
 block discarded – undo
87 87
 	<!-- Start Shipping Address -->
88 88
 	<div class="getpaid-shipping-address-wrapper">
89 89
 		<?php
90
-			$field_type = 'shipping';
90
+            $field_type = 'shipping';
91 91
 
92
-			wpinv_get_template( 'payment-forms/elements/address-fields.php', array( 'form' => $form, 'fields' => $fields, 'address_type' => $address_type, 'field_type' => $field_type, 'uniqid' => $uniqid, 'country' => $country ) );
92
+            wpinv_get_template( 'payment-forms/elements/address-fields.php', array( 'form' => $form, 'fields' => $fields, 'address_type' => $address_type, 'field_type' => $field_type, 'uniqid' => $uniqid, 'country' => $country ) );
93 93
 
94
-			do_action( 'getpaid_after_payment_form_shipping_fields', $form );
95
-		?>
94
+            do_action( 'getpaid_after_payment_form_shipping_fields', $form );
95
+        ?>
96 96
 	</div>
97 97
 	<!-- End Shipping Address -->
98 98
 <?php endif; ?>
Please login to merge, or discard this patch.
includes/admin/class-getpaid-post-types-admin.php 1 patch
Indentation   +812 added lines, -812 removed lines patch added patch discarded remove patch
@@ -13,755 +13,755 @@  discard block
 block discarded – undo
13 13
 class GetPaid_Post_Types_Admin {
14 14
 
15 15
     /**
16
-	 * Hook in methods.
17
-	 */
18
-	public static function init() {
19
-
20
-		// Init metaboxes.
21
-		GetPaid_Metaboxes::init();
22
-
23
-		// Filter the post updated messages.
24
-		add_filter( 'post_updated_messages', 'GetPaid_Post_Types_Admin::post_updated_messages' );
25
-
26
-		// Filter post actions.
27
-		add_filter( 'post_row_actions', 'GetPaid_Post_Types_Admin::post_row_actions', 10, 2 );
28
-		add_filter( 'post_row_actions', 'GetPaid_Post_Types_Admin::filter_invoice_row_actions', 90, 2 );
29
-
30
-		// Invoice table columns.
31
-		add_filter( 'manage_wpi_invoice_posts_columns', array( __CLASS__, 'invoice_columns' ), 100 );
32
-		add_action( 'manage_wpi_invoice_posts_custom_column', array( __CLASS__, 'display_invoice_columns' ), 10, 2 );
33
-		add_filter( 'bulk_actions-edit-wpi_invoice', array( __CLASS__, 'invoice_bulk_actions' ) );
34
-		add_filter( 'handle_bulk_actions-edit-wpi_invoice', array( __CLASS__, 'handle_invoice_bulk_actions' ), 10, 3 );
35
-
36
-		// Items table columns.
37
-		add_filter( 'manage_wpi_item_posts_columns', array( __CLASS__, 'item_columns' ), 100 );
38
-		add_filter( 'manage_edit-wpi_item_sortable_columns', array( __CLASS__, 'sortable_item_columns' ), 20 );
39
-		add_action( 'manage_wpi_item_posts_custom_column', array( __CLASS__, 'display_item_columns' ), 10, 2 );
40
-		add_action( 'restrict_manage_posts', array( __CLASS__, 'add_item_filters' ), 100 );
41
-		add_action( 'parse_query', array( __CLASS__, 'filter_item_query' ), 100 );
42
-		add_action( 'request', array( __CLASS__, 'reorder_items' ), 100 );
43
-
44
-		// Payment forms columns.
45
-		add_filter( 'manage_wpi_payment_form_posts_columns', array( __CLASS__, 'payment_form_columns' ), 100 );
46
-		add_action( 'manage_wpi_payment_form_posts_custom_column', array( __CLASS__, 'display_payment_form_columns' ), 10, 2 );
47
-		add_filter( 'display_post_states', array( __CLASS__, 'filter_payment_form_state' ), 10, 2 );
48
-
49
-		// Discount table columns.
50
-		add_filter( 'manage_wpi_discount_posts_columns', array( __CLASS__, 'discount_columns' ), 100 );
51
-		add_filter( 'bulk_actions-edit-wpi_discount', '__return_empty_array', 100 );
52
-
53
-		// Deleting posts.
54
-		add_action( 'delete_post', array( __CLASS__, 'delete_post' ) );
55
-		add_filter( 'display_post_states', array( __CLASS__, 'filter_discount_state' ), 10, 2 );
56
-
57
-		add_filter( 'display_post_states', array( __CLASS__, 'add_display_post_states' ), 10, 2 );
58
-	}
59
-
60
-	/**
61
-	 * Post updated messages.
62
-	 */
63
-	public static function post_updated_messages( $messages ) {
64
-		global $post;
65
-
66
-		$messages['wpi_discount'] = array(
67
-			0  => '',
68
-			1  => __( 'Discount updated.', 'invoicing' ),
69
-			2  => __( 'Custom field updated.', 'invoicing' ),
70
-			3  => __( 'Custom field deleted.', 'invoicing' ),
71
-			4  => __( 'Discount updated.', 'invoicing' ),
72
-			5  => isset( $_GET['revision'] ) ? wp_sprintf( __( 'Discount restored to revision from %s', 'invoicing' ), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
73
-			6  => __( 'Discount updated.', 'invoicing' ),
74
-			7  => __( 'Discount saved.', 'invoicing' ),
75
-			8  => __( 'Discount submitted.', 'invoicing' ),
76
-			9  => wp_sprintf( __( 'Discount scheduled for: <strong>%1$s</strong>.', 'invoicing' ), date_i18n( __( 'M j, Y @ G:i', 'invoicing' ), strtotime( $post->post_date ) ) ),
77
-			10 => __( 'Discount draft updated.', 'invoicing' ),
78
-		);
79
-
80
-		$messages['wpi_payment_form'] = array(
81
-			0  => '',
82
-			1  => __( 'Payment Form updated.', 'invoicing' ),
83
-			2  => __( 'Custom field updated.', 'invoicing' ),
84
-			3  => __( 'Custom field deleted.', 'invoicing' ),
85
-			4  => __( 'Payment Form updated.', 'invoicing' ),
86
-			5  => isset( $_GET['revision'] ) ? wp_sprintf( __( 'Payment Form restored to revision from %s', 'invoicing' ), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
87
-			6  => __( 'Payment Form updated.', 'invoicing' ),
88
-			7  => __( 'Payment Form saved.', 'invoicing' ),
89
-			8  => __( 'Payment Form submitted.', 'invoicing' ),
90
-			9  => wp_sprintf( __( 'Payment Form scheduled for: <strong>%1$s</strong>.', 'invoicing' ), date_i18n( __( 'M j, Y @ G:i', 'invoicing' ), strtotime( $post->post_date ) ) ),
91
-			10 => __( 'Payment Form draft updated.', 'invoicing' ),
92
-		);
93
-
94
-		return $messages;
95
-
96
-	}
97
-
98
-	/**
99
-	 * Post row actions.
100
-	 */
101
-	public static function post_row_actions( $actions, $post ) {
102
-
103
-		$post = get_post( $post );
104
-
105
-		// We do not want to edit the default payment form.
106
-		if ( 'wpi_payment_form' == $post->post_type ) {
107
-
108
-			if ( wpinv_get_default_payment_form() === $post->ID ) {
109
-				unset( $actions['trash'] );
110
-				unset( $actions['inline hide-if-no-js'] );
111
-			}
112
-
113
-			$actions['duplicate'] = sprintf(
114
-				'<a href="%1$s">%2$s</a>',
115
-				esc_url(
116
-					wp_nonce_url(
117
-						add_query_arg(
118
-							array(
119
-								'getpaid-admin-action' => 'duplicate_form',
120
-								'form_id'              => $post->ID,
121
-							)
122
-						),
123
-						'getpaid-nonce',
124
-						'getpaid-nonce'
125
-					)
126
-				),
127
-				esc_html( __( 'Duplicate', 'invoicing' ) )
128
-			);
129
-
130
-			$actions['reset'] = sprintf(
131
-				'<a href="%1$s" style="color: #800">%2$s</a>',
132
-				esc_url(
133
-					wp_nonce_url(
134
-						add_query_arg(
135
-							array(
136
-								'getpaid-admin-action' => 'reset_form_stats',
137
-								'form_id'              => $post->ID,
138
-							)
139
-						),
140
-						'getpaid-nonce',
141
-						'getpaid-nonce'
142
-					)
143
-				),
144
-				esc_html( __( 'Reset Stats', 'invoicing' ) )
145
-			);
146
-		}
147
-
148
-		// Link to item payment form.
149
-		if ( 'wpi_item' == $post->post_type ) {
150
-			if ( getpaid_item_type_supports( get_post_meta( $post->ID, '_wpinv_type', true ), 'buy_now' ) ) {
151
-				$actions['buy'] = sprintf(
152
-					'<a href="%1$s">%2$s</a>',
153
-					esc_url( getpaid_embed_url( false, $post->ID . '|0' ) ),
154
-					esc_html( __( 'Buy', 'invoicing' ) )
155
-				);
156
-			}
157
-		}
158
-
159
-		return $actions;
160
-	}
161
-
162
-	/**
16
+     * Hook in methods.
17
+     */
18
+    public static function init() {
19
+
20
+        // Init metaboxes.
21
+        GetPaid_Metaboxes::init();
22
+
23
+        // Filter the post updated messages.
24
+        add_filter( 'post_updated_messages', 'GetPaid_Post_Types_Admin::post_updated_messages' );
25
+
26
+        // Filter post actions.
27
+        add_filter( 'post_row_actions', 'GetPaid_Post_Types_Admin::post_row_actions', 10, 2 );
28
+        add_filter( 'post_row_actions', 'GetPaid_Post_Types_Admin::filter_invoice_row_actions', 90, 2 );
29
+
30
+        // Invoice table columns.
31
+        add_filter( 'manage_wpi_invoice_posts_columns', array( __CLASS__, 'invoice_columns' ), 100 );
32
+        add_action( 'manage_wpi_invoice_posts_custom_column', array( __CLASS__, 'display_invoice_columns' ), 10, 2 );
33
+        add_filter( 'bulk_actions-edit-wpi_invoice', array( __CLASS__, 'invoice_bulk_actions' ) );
34
+        add_filter( 'handle_bulk_actions-edit-wpi_invoice', array( __CLASS__, 'handle_invoice_bulk_actions' ), 10, 3 );
35
+
36
+        // Items table columns.
37
+        add_filter( 'manage_wpi_item_posts_columns', array( __CLASS__, 'item_columns' ), 100 );
38
+        add_filter( 'manage_edit-wpi_item_sortable_columns', array( __CLASS__, 'sortable_item_columns' ), 20 );
39
+        add_action( 'manage_wpi_item_posts_custom_column', array( __CLASS__, 'display_item_columns' ), 10, 2 );
40
+        add_action( 'restrict_manage_posts', array( __CLASS__, 'add_item_filters' ), 100 );
41
+        add_action( 'parse_query', array( __CLASS__, 'filter_item_query' ), 100 );
42
+        add_action( 'request', array( __CLASS__, 'reorder_items' ), 100 );
43
+
44
+        // Payment forms columns.
45
+        add_filter( 'manage_wpi_payment_form_posts_columns', array( __CLASS__, 'payment_form_columns' ), 100 );
46
+        add_action( 'manage_wpi_payment_form_posts_custom_column', array( __CLASS__, 'display_payment_form_columns' ), 10, 2 );
47
+        add_filter( 'display_post_states', array( __CLASS__, 'filter_payment_form_state' ), 10, 2 );
48
+
49
+        // Discount table columns.
50
+        add_filter( 'manage_wpi_discount_posts_columns', array( __CLASS__, 'discount_columns' ), 100 );
51
+        add_filter( 'bulk_actions-edit-wpi_discount', '__return_empty_array', 100 );
52
+
53
+        // Deleting posts.
54
+        add_action( 'delete_post', array( __CLASS__, 'delete_post' ) );
55
+        add_filter( 'display_post_states', array( __CLASS__, 'filter_discount_state' ), 10, 2 );
56
+
57
+        add_filter( 'display_post_states', array( __CLASS__, 'add_display_post_states' ), 10, 2 );
58
+    }
59
+
60
+    /**
61
+     * Post updated messages.
62
+     */
63
+    public static function post_updated_messages( $messages ) {
64
+        global $post;
65
+
66
+        $messages['wpi_discount'] = array(
67
+            0  => '',
68
+            1  => __( 'Discount updated.', 'invoicing' ),
69
+            2  => __( 'Custom field updated.', 'invoicing' ),
70
+            3  => __( 'Custom field deleted.', 'invoicing' ),
71
+            4  => __( 'Discount updated.', 'invoicing' ),
72
+            5  => isset( $_GET['revision'] ) ? wp_sprintf( __( 'Discount restored to revision from %s', 'invoicing' ), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
73
+            6  => __( 'Discount updated.', 'invoicing' ),
74
+            7  => __( 'Discount saved.', 'invoicing' ),
75
+            8  => __( 'Discount submitted.', 'invoicing' ),
76
+            9  => wp_sprintf( __( 'Discount scheduled for: <strong>%1$s</strong>.', 'invoicing' ), date_i18n( __( 'M j, Y @ G:i', 'invoicing' ), strtotime( $post->post_date ) ) ),
77
+            10 => __( 'Discount draft updated.', 'invoicing' ),
78
+        );
79
+
80
+        $messages['wpi_payment_form'] = array(
81
+            0  => '',
82
+            1  => __( 'Payment Form updated.', 'invoicing' ),
83
+            2  => __( 'Custom field updated.', 'invoicing' ),
84
+            3  => __( 'Custom field deleted.', 'invoicing' ),
85
+            4  => __( 'Payment Form updated.', 'invoicing' ),
86
+            5  => isset( $_GET['revision'] ) ? wp_sprintf( __( 'Payment Form restored to revision from %s', 'invoicing' ), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
87
+            6  => __( 'Payment Form updated.', 'invoicing' ),
88
+            7  => __( 'Payment Form saved.', 'invoicing' ),
89
+            8  => __( 'Payment Form submitted.', 'invoicing' ),
90
+            9  => wp_sprintf( __( 'Payment Form scheduled for: <strong>%1$s</strong>.', 'invoicing' ), date_i18n( __( 'M j, Y @ G:i', 'invoicing' ), strtotime( $post->post_date ) ) ),
91
+            10 => __( 'Payment Form draft updated.', 'invoicing' ),
92
+        );
93
+
94
+        return $messages;
95
+
96
+    }
97
+
98
+    /**
99
+     * Post row actions.
100
+     */
101
+    public static function post_row_actions( $actions, $post ) {
102
+
103
+        $post = get_post( $post );
104
+
105
+        // We do not want to edit the default payment form.
106
+        if ( 'wpi_payment_form' == $post->post_type ) {
107
+
108
+            if ( wpinv_get_default_payment_form() === $post->ID ) {
109
+                unset( $actions['trash'] );
110
+                unset( $actions['inline hide-if-no-js'] );
111
+            }
112
+
113
+            $actions['duplicate'] = sprintf(
114
+                '<a href="%1$s">%2$s</a>',
115
+                esc_url(
116
+                    wp_nonce_url(
117
+                        add_query_arg(
118
+                            array(
119
+                                'getpaid-admin-action' => 'duplicate_form',
120
+                                'form_id'              => $post->ID,
121
+                            )
122
+                        ),
123
+                        'getpaid-nonce',
124
+                        'getpaid-nonce'
125
+                    )
126
+                ),
127
+                esc_html( __( 'Duplicate', 'invoicing' ) )
128
+            );
129
+
130
+            $actions['reset'] = sprintf(
131
+                '<a href="%1$s" style="color: #800">%2$s</a>',
132
+                esc_url(
133
+                    wp_nonce_url(
134
+                        add_query_arg(
135
+                            array(
136
+                                'getpaid-admin-action' => 'reset_form_stats',
137
+                                'form_id'              => $post->ID,
138
+                            )
139
+                        ),
140
+                        'getpaid-nonce',
141
+                        'getpaid-nonce'
142
+                    )
143
+                ),
144
+                esc_html( __( 'Reset Stats', 'invoicing' ) )
145
+            );
146
+        }
147
+
148
+        // Link to item payment form.
149
+        if ( 'wpi_item' == $post->post_type ) {
150
+            if ( getpaid_item_type_supports( get_post_meta( $post->ID, '_wpinv_type', true ), 'buy_now' ) ) {
151
+                $actions['buy'] = sprintf(
152
+                    '<a href="%1$s">%2$s</a>',
153
+                    esc_url( getpaid_embed_url( false, $post->ID . '|0' ) ),
154
+                    esc_html( __( 'Buy', 'invoicing' ) )
155
+                );
156
+            }
157
+        }
158
+
159
+        return $actions;
160
+    }
161
+
162
+    /**
163 163
      * Remove bulk edit option from admin side quote listing
164 164
      *
165 165
      * @since    1.0.0
166 166
      * @param array $actions post actions
167
-	 * @param WP_Post $post
167
+     * @param WP_Post $post
168 168
      * @return array $actions actions without edit option
169 169
      */
170 170
     public static function filter_invoice_row_actions( $actions, $post ) {
171 171
 
172 172
         if ( getpaid_is_invoice_post_type( $post->post_type ) ) {
173 173
 
174
-			$actions = array();
175
-			$invoice = new WPInv_Invoice( $post );
176
-
177
-			$actions['edit'] = sprintf(
178
-				'<a href="%1$s">%2$s</a>',
179
-				esc_url( get_edit_post_link( $invoice->get_id() ) ),
180
-				esc_html( __( 'Edit', 'invoicing' ) )
181
-			);
182
-
183
-			if ( ! $invoice->is_draft() ) {
184
-
185
-				$actions['view'] = sprintf(
186
-					'<a href="%1$s">%2$s</a>',
187
-					esc_url( $invoice->get_view_url() ),
188
-					sprintf(
189
-						// translators: %s is the invoice type
190
-						esc_html__( 'View %s', 'invoicing' ),
191
-						getpaid_get_post_type_label( $invoice->get_post_type(), false )
192
-					)
193
-				);
194
-
195
-				$actions['send'] = sprintf(
196
-					'<a href="%1$s">%2$s</a>',
197
-					esc_url(
198
-						wp_nonce_url(
199
-							add_query_arg(
200
-								array(
201
-									'getpaid-admin-action' => 'send_invoice',
202
-									'invoice_id'           => $invoice->get_id(),
203
-								)
204
-							),
205
-							'getpaid-nonce',
206
-							'getpaid-nonce'
207
-						)
208
-					),
209
-					esc_html( __( 'Send to Customer', 'invoicing' ) )
210
-				);
211
-
212
-			}
213
-
214
-			$actions['duplicate'] = sprintf(
215
-				'<a href="%1$s">%2$s</a>',
216
-				esc_url(
217
-					wp_nonce_url(
218
-						add_query_arg(
219
-							array(
220
-								'getpaid-admin-action' => 'duplicate_invoice',
221
-								'invoice_id'           => $post->ID,
222
-							)
223
-						),
224
-						'getpaid-nonce',
225
-						'getpaid-nonce'
226
-					)
227
-				),
228
-				esc_html( __( 'Duplicate', 'invoicing' ) )
229
-			);
174
+            $actions = array();
175
+            $invoice = new WPInv_Invoice( $post );
176
+
177
+            $actions['edit'] = sprintf(
178
+                '<a href="%1$s">%2$s</a>',
179
+                esc_url( get_edit_post_link( $invoice->get_id() ) ),
180
+                esc_html( __( 'Edit', 'invoicing' ) )
181
+            );
182
+
183
+            if ( ! $invoice->is_draft() ) {
184
+
185
+                $actions['view'] = sprintf(
186
+                    '<a href="%1$s">%2$s</a>',
187
+                    esc_url( $invoice->get_view_url() ),
188
+                    sprintf(
189
+                        // translators: %s is the invoice type
190
+                        esc_html__( 'View %s', 'invoicing' ),
191
+                        getpaid_get_post_type_label( $invoice->get_post_type(), false )
192
+                    )
193
+                );
194
+
195
+                $actions['send'] = sprintf(
196
+                    '<a href="%1$s">%2$s</a>',
197
+                    esc_url(
198
+                        wp_nonce_url(
199
+                            add_query_arg(
200
+                                array(
201
+                                    'getpaid-admin-action' => 'send_invoice',
202
+                                    'invoice_id'           => $invoice->get_id(),
203
+                                )
204
+                            ),
205
+                            'getpaid-nonce',
206
+                            'getpaid-nonce'
207
+                        )
208
+                    ),
209
+                    esc_html( __( 'Send to Customer', 'invoicing' ) )
210
+                );
211
+
212
+            }
213
+
214
+            $actions['duplicate'] = sprintf(
215
+                '<a href="%1$s">%2$s</a>',
216
+                esc_url(
217
+                    wp_nonce_url(
218
+                        add_query_arg(
219
+                            array(
220
+                                'getpaid-admin-action' => 'duplicate_invoice',
221
+                                'invoice_id'           => $post->ID,
222
+                            )
223
+                        ),
224
+                        'getpaid-nonce',
225
+                        'getpaid-nonce'
226
+                    )
227
+                ),
228
+                esc_html( __( 'Duplicate', 'invoicing' ) )
229
+            );
230 230
 
231 231
         }
232 232
 
233 233
         return $actions;
234
-	}
235
-
236
-	/**
237
-	 * Returns an array of invoice table columns.
238
-	 */
239
-	public static function invoice_columns( $columns ) {
240
-
241
-		$columns = array(
242
-			'cb'           => $columns['cb'],
243
-			'number'       => __( 'Invoice', 'invoicing' ),
244
-			'customer'     => __( 'Customer', 'invoicing' ),
245
-			'invoice_date' => __( 'Created', 'invoicing' ),
246
-			'payment_date' => __( 'Completed', 'invoicing' ),
247
-			'amount'       => __( 'Amount', 'invoicing' ),
248
-			'recurring'    => __( 'Recurring', 'invoicing' ),
249
-			'status'       => __( 'Status', 'invoicing' ),
250
-		);
251
-
252
-		return apply_filters( 'wpi_invoice_table_columns', $columns );
253
-	}
254
-
255
-	/**
256
-	 * Displays invoice table columns.
257
-	 */
258
-	public static function display_invoice_columns( $column_name, $post_id ) {
259
-
260
-		$invoice = new WPInv_Invoice( $post_id );
261
-
262
-		switch ( $column_name ) {
263
-
264
-			case 'invoice_date':
265
-				$date_time = esc_attr( $invoice->get_created_date() );
266
-				$date      = esc_html( getpaid_format_date_value( $date_time, '&mdash;', true ) );
267
-				echo wp_kses_post( "<span title='$date_time'>$date</span>" );
268
-				break;
269
-
270
-			case 'payment_date':
271
-				if ( $invoice->is_paid() || $invoice->is_refunded() ) {
272
-					$date_time = esc_attr( $invoice->get_completed_date() );
273
-					$date      = esc_html( getpaid_format_date_value( $date_time, '&mdash;', true ) );
274
-					echo wp_kses_post( "<span title='$date_time'>$date</span>" );
275
-
276
-					if ( $_gateway = $invoice->get_gateway() ) {
277
-						$gateway_label = wpinv_get_gateway_admin_label( $_gateway );
278
-
279
-						if ( $transaction_url = $invoice->get_transaction_url() ) {
280
-							$gateway_label = '<a href="' . esc_url( $transaction_url ) . '" target="_blank" title="' . esc_attr__( 'Open transaction link', 'invoicing' ) . '">' . $gateway_label . '</a>';
281
-						}
282
-
283
-						$gateway = '<small class="meta bsui"><span class="fs-xs text-muted fst-normal">' . wp_sprintf( _x( 'Via %s', 'Paid via gateway', 'invoicing' ), $gateway_label ) . '</span></small>';
284
-					} else {
285
-						$gateway = '';
286
-					}
287
-
288
-					$gateway = apply_filters( 'getpaid_admin_invoices_list_table_gateway', $gateway, $invoice );
289
-
290
-					if ( $gateway ) {
291
-						echo wp_kses_post( $gateway ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
292
-					}
293
-				} else {
294
-					echo '&mdash;';
295
-				}
296
-
297
-				break;
298
-
299
-			case 'amount':
300
-				$amount = $invoice->get_total();
301
-				$formated_amount = wp_kses_post( wpinv_price( $amount, $invoice->get_currency() ) );
302
-
303
-				if ( $invoice->is_refunded() ) {
304
-					$refunded_amount = wpinv_price( 0, $invoice->get_currency() );
305
-					echo wp_kses_post( "<del>$formated_amount</del>&nbsp;<ins>$refunded_amount</ins>" );
306
-				} else {
307
-
308
-					$discount = $invoice->get_total_discount();
309
-
310
-					if ( ! empty( $discount ) ) {
311
-						$new_amount = wpinv_price( $amount + $discount, $invoice->get_currency() );
312
-						echo wp_kses_post( "<del>$new_amount</del>&nbsp;<ins>$formated_amount</ins>" );
313
-					} else {
314
-						echo wp_kses_post( $formated_amount );
315
-					}
316
-				}
317
-
318
-				break;
319
-
320
-			case 'status':
321
-				$status = esc_html( $invoice->get_status() );
322
-
323
-				// If it is paid, show the gateway title.
324
-				if ( $invoice->is_paid() ) {
325
-					$gateway = esc_html( $invoice->get_gateway_title() );
326
-					$gateway = wp_sprintf( esc_attr__( 'Paid via %s', 'invoicing' ), esc_html( $gateway ) );
327
-
328
-					echo wp_kses_post( "<span class='bsui wpi-help-tip getpaid-invoice-statuss $status' title='$gateway'><span class='fs-base'>" . $invoice->get_status_label_html() . "</span></span>" );
329
-				} else {
330
-					echo wp_kses_post( "<span class='bsui getpaid-invoice-statuss $status'><span class='fs-base'>" . $invoice->get_status_label_html() . "</span></span>" );
331
-				}
332
-
333
-				// If it is not paid, display the overdue and view status.
334
-				if ( ! $invoice->is_paid() && ! $invoice->is_refunded() ) {
335
-
336
-					// Invoice view status.
337
-					if ( wpinv_is_invoice_viewed( $invoice->get_id() ) ) {
338
-						echo '&nbsp;&nbsp;<i class="fa fa-eye wpi-help-tip" title="' . esc_attr__( 'Viewed by Customer', 'invoicing' ) . '"></i>';
339
-					} else {
340
-						echo '&nbsp;&nbsp;<i class="fa fa-eye-slash wpi-help-tip" title="' . esc_attr__( 'Not Viewed by Customer', 'invoicing' ) . '"></i>';
341
-					}
342
-
343
-					// Display the overview status.
344
-					if ( wpinv_get_option( 'overdue_active' ) ) {
345
-						$due_date = $invoice->get_due_date();
346
-						$fomatted = getpaid_format_date( $due_date );
347
-
348
-						if ( ! empty( $fomatted ) ) {
349
-							$date = wp_sprintf(
350
-								// translators: %s is the due date.
351
-								__( 'Due %s', 'invoicing' ),
352
-								$fomatted
353
-							);
354
-							echo wp_kses_post( "<p class='description' style='color: #888;' title='$due_date'>$fomatted</p>" );
355
-						}
356
-					}
357
-				}
358
-
359
-				break;
360
-
361
-			case 'recurring':
362
-				if ( $invoice->is_recurring() ) {
363
-					echo '<i class="fa fa-check" style="color:#43850a;"></i>';
364
-				} else {
365
-					echo '<i class="fa fa-times" style="color:#616161;"></i>';
366
-				}
367
-				break;
368
-
369
-			case 'number':
370
-				$edit_link       = esc_url( get_edit_post_link( $invoice->get_id() ) );
371
-				$invoice_number  = esc_html( $invoice->get_number() );
372
-				$invoice_details = esc_attr__( 'View Invoice Details', 'invoicing' );
373
-
374
-				echo wp_kses_post( "<a href='$edit_link' title='$invoice_details'><strong>$invoice_number</strong></a>" );
375
-
376
-				do_action( 'getpaid_admin_table_invoice_number_column', $invoice );
377
-				break;
378
-
379
-			case 'customer':
380
-				$customer_name = $invoice->get_user_full_name();
381
-
382
-				if ( empty( $customer_name ) ) {
383
-					$customer_name = $invoice->get_email();
384
-				}
385
-
386
-				if ( ! empty( $customer_name ) ) {
387
-					$customer_details = esc_attr__( 'View Customer Details', 'invoicing' );
388
-					$view_link        = esc_url( add_query_arg( 'user_id', $invoice->get_user_id(), admin_url( 'user-edit.php' ) ) );
389
-					echo wp_kses_post( "<a href='$view_link' title='$customer_details'><span>$customer_name</span></a>" );
390
-				} else {
391
-					echo '<div>&mdash;</div>';
392
-				}
393
-
394
-				break;
395
-
396
-		}
397
-
398
-	}
399
-
400
-	/**
401
-	 * Displays invoice bulk actions.
402
-	 */
403
-	public static function invoice_bulk_actions( $actions ) {
404
-		$actions['resend-invoice'] = __( 'Send to Customer', 'invoicing' );
405
-		return $actions;
406
-	}
407
-
408
-	/**
409
-	 * Processes invoice bulk actions.
410
-	 */
411
-	public static function handle_invoice_bulk_actions( $redirect_url, $action, $post_ids ) {
412
-
413
-		if ( 'resend-invoice' === $action ) {
414
-			foreach ( $post_ids as $post_id ) {
415
-				getpaid()->get( 'invoice_emails' )->user_invoice( new WPInv_Invoice( $post_id ), true );
416
-			}
417
-		}
418
-
419
-		return $redirect_url;
420
-
421
-	}
422
-
423
-	/**
424
-	 * Returns an array of payment forms table columns.
425
-	 */
426
-	public static function payment_form_columns( $columns ) {
427
-
428
-		$columns = array(
429
-			'cb'        => $columns['cb'],
430
-			'title'     => __( 'Name', 'invoicing' ),
431
-			'shortcode' => __( 'Shortcode', 'invoicing' ),
432
-			'earnings'  => __( 'Revenue', 'invoicing' ),
433
-			'refunds'   => __( 'Refunded', 'invoicing' ),
434
-			'items'     => __( 'Items', 'invoicing' ),
435
-			'date'      => __( 'Date', 'invoicing' ),
436
-		);
437
-
438
-		return apply_filters( 'wpi_payment_form_table_columns', $columns );
439
-
440
-	}
441
-
442
-	/**
443
-	 * Displays payment form table columns.
444
-	 */
445
-	public static function display_payment_form_columns( $column_name, $post_id ) {
446
-
447
-		// Retrieve the payment form.
448
-		$form = new GetPaid_Payment_Form( $post_id );
449
-
450
-		switch ( $column_name ) {
451
-
452
-			case 'earnings':
453
-				echo wp_kses_post( wpinv_price( $form->get_earned() ) );
454
-				break;
455
-
456
-			case 'refunds':
457
-				echo wp_kses_post( wpinv_price( $form->get_refunded() ) );
458
-				break;
459
-
460
-			case 'refunds':
461
-				echo wp_kses_post( wpinv_price( $form->get_refunded() ) );
462
-				break;
463
-
464
-			case 'shortcode':
465
-				if ( $form->is_default() ) {
466
-					echo '&mdash;';
467
-				} else {
468
-					echo '<input onClick="this.select()" type="text" value="[getpaid form=' . esc_attr( $form->get_id() ) . ']" style="width: 100%;" readonly/>';
469
-				}
470
-
471
-				break;
234
+    }
235
+
236
+    /**
237
+     * Returns an array of invoice table columns.
238
+     */
239
+    public static function invoice_columns( $columns ) {
240
+
241
+        $columns = array(
242
+            'cb'           => $columns['cb'],
243
+            'number'       => __( 'Invoice', 'invoicing' ),
244
+            'customer'     => __( 'Customer', 'invoicing' ),
245
+            'invoice_date' => __( 'Created', 'invoicing' ),
246
+            'payment_date' => __( 'Completed', 'invoicing' ),
247
+            'amount'       => __( 'Amount', 'invoicing' ),
248
+            'recurring'    => __( 'Recurring', 'invoicing' ),
249
+            'status'       => __( 'Status', 'invoicing' ),
250
+        );
251
+
252
+        return apply_filters( 'wpi_invoice_table_columns', $columns );
253
+    }
254
+
255
+    /**
256
+     * Displays invoice table columns.
257
+     */
258
+    public static function display_invoice_columns( $column_name, $post_id ) {
259
+
260
+        $invoice = new WPInv_Invoice( $post_id );
261
+
262
+        switch ( $column_name ) {
263
+
264
+            case 'invoice_date':
265
+                $date_time = esc_attr( $invoice->get_created_date() );
266
+                $date      = esc_html( getpaid_format_date_value( $date_time, '&mdash;', true ) );
267
+                echo wp_kses_post( "<span title='$date_time'>$date</span>" );
268
+                break;
269
+
270
+            case 'payment_date':
271
+                if ( $invoice->is_paid() || $invoice->is_refunded() ) {
272
+                    $date_time = esc_attr( $invoice->get_completed_date() );
273
+                    $date      = esc_html( getpaid_format_date_value( $date_time, '&mdash;', true ) );
274
+                    echo wp_kses_post( "<span title='$date_time'>$date</span>" );
275
+
276
+                    if ( $_gateway = $invoice->get_gateway() ) {
277
+                        $gateway_label = wpinv_get_gateway_admin_label( $_gateway );
278
+
279
+                        if ( $transaction_url = $invoice->get_transaction_url() ) {
280
+                            $gateway_label = '<a href="' . esc_url( $transaction_url ) . '" target="_blank" title="' . esc_attr__( 'Open transaction link', 'invoicing' ) . '">' . $gateway_label . '</a>';
281
+                        }
282
+
283
+                        $gateway = '<small class="meta bsui"><span class="fs-xs text-muted fst-normal">' . wp_sprintf( _x( 'Via %s', 'Paid via gateway', 'invoicing' ), $gateway_label ) . '</span></small>';
284
+                    } else {
285
+                        $gateway = '';
286
+                    }
287
+
288
+                    $gateway = apply_filters( 'getpaid_admin_invoices_list_table_gateway', $gateway, $invoice );
289
+
290
+                    if ( $gateway ) {
291
+                        echo wp_kses_post( $gateway ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
292
+                    }
293
+                } else {
294
+                    echo '&mdash;';
295
+                }
296
+
297
+                break;
298
+
299
+            case 'amount':
300
+                $amount = $invoice->get_total();
301
+                $formated_amount = wp_kses_post( wpinv_price( $amount, $invoice->get_currency() ) );
302
+
303
+                if ( $invoice->is_refunded() ) {
304
+                    $refunded_amount = wpinv_price( 0, $invoice->get_currency() );
305
+                    echo wp_kses_post( "<del>$formated_amount</del>&nbsp;<ins>$refunded_amount</ins>" );
306
+                } else {
307
+
308
+                    $discount = $invoice->get_total_discount();
309
+
310
+                    if ( ! empty( $discount ) ) {
311
+                        $new_amount = wpinv_price( $amount + $discount, $invoice->get_currency() );
312
+                        echo wp_kses_post( "<del>$new_amount</del>&nbsp;<ins>$formated_amount</ins>" );
313
+                    } else {
314
+                        echo wp_kses_post( $formated_amount );
315
+                    }
316
+                }
317
+
318
+                break;
319
+
320
+            case 'status':
321
+                $status = esc_html( $invoice->get_status() );
322
+
323
+                // If it is paid, show the gateway title.
324
+                if ( $invoice->is_paid() ) {
325
+                    $gateway = esc_html( $invoice->get_gateway_title() );
326
+                    $gateway = wp_sprintf( esc_attr__( 'Paid via %s', 'invoicing' ), esc_html( $gateway ) );
327
+
328
+                    echo wp_kses_post( "<span class='bsui wpi-help-tip getpaid-invoice-statuss $status' title='$gateway'><span class='fs-base'>" . $invoice->get_status_label_html() . "</span></span>" );
329
+                } else {
330
+                    echo wp_kses_post( "<span class='bsui getpaid-invoice-statuss $status'><span class='fs-base'>" . $invoice->get_status_label_html() . "</span></span>" );
331
+                }
332
+
333
+                // If it is not paid, display the overdue and view status.
334
+                if ( ! $invoice->is_paid() && ! $invoice->is_refunded() ) {
335
+
336
+                    // Invoice view status.
337
+                    if ( wpinv_is_invoice_viewed( $invoice->get_id() ) ) {
338
+                        echo '&nbsp;&nbsp;<i class="fa fa-eye wpi-help-tip" title="' . esc_attr__( 'Viewed by Customer', 'invoicing' ) . '"></i>';
339
+                    } else {
340
+                        echo '&nbsp;&nbsp;<i class="fa fa-eye-slash wpi-help-tip" title="' . esc_attr__( 'Not Viewed by Customer', 'invoicing' ) . '"></i>';
341
+                    }
342
+
343
+                    // Display the overview status.
344
+                    if ( wpinv_get_option( 'overdue_active' ) ) {
345
+                        $due_date = $invoice->get_due_date();
346
+                        $fomatted = getpaid_format_date( $due_date );
347
+
348
+                        if ( ! empty( $fomatted ) ) {
349
+                            $date = wp_sprintf(
350
+                                // translators: %s is the due date.
351
+                                __( 'Due %s', 'invoicing' ),
352
+                                $fomatted
353
+                            );
354
+                            echo wp_kses_post( "<p class='description' style='color: #888;' title='$due_date'>$fomatted</p>" );
355
+                        }
356
+                    }
357
+                }
358
+
359
+                break;
360
+
361
+            case 'recurring':
362
+                if ( $invoice->is_recurring() ) {
363
+                    echo '<i class="fa fa-check" style="color:#43850a;"></i>';
364
+                } else {
365
+                    echo '<i class="fa fa-times" style="color:#616161;"></i>';
366
+                }
367
+                break;
368
+
369
+            case 'number':
370
+                $edit_link       = esc_url( get_edit_post_link( $invoice->get_id() ) );
371
+                $invoice_number  = esc_html( $invoice->get_number() );
372
+                $invoice_details = esc_attr__( 'View Invoice Details', 'invoicing' );
373
+
374
+                echo wp_kses_post( "<a href='$edit_link' title='$invoice_details'><strong>$invoice_number</strong></a>" );
375
+
376
+                do_action( 'getpaid_admin_table_invoice_number_column', $invoice );
377
+                break;
378
+
379
+            case 'customer':
380
+                $customer_name = $invoice->get_user_full_name();
381
+
382
+                if ( empty( $customer_name ) ) {
383
+                    $customer_name = $invoice->get_email();
384
+                }
385
+
386
+                if ( ! empty( $customer_name ) ) {
387
+                    $customer_details = esc_attr__( 'View Customer Details', 'invoicing' );
388
+                    $view_link        = esc_url( add_query_arg( 'user_id', $invoice->get_user_id(), admin_url( 'user-edit.php' ) ) );
389
+                    echo wp_kses_post( "<a href='$view_link' title='$customer_details'><span>$customer_name</span></a>" );
390
+                } else {
391
+                    echo '<div>&mdash;</div>';
392
+                }
393
+
394
+                break;
472 395
 
473
-			case 'items':
474
-				$items = $form->get_items();
475
-
476
-				if ( $form->is_default() || empty( $items ) ) {
477
-					echo '&mdash;';
478
-					return;
479
-				}
480
-
481
-				$_items = array();
482
-
483
-				foreach ( $items as $item ) {
484
-					$url = $item->get_edit_url();
485
-
486
-					if ( empty( $url ) ) {
487
-						$_items[] = esc_html( $item->get_name() );
488
-					} else {
489
-						$_items[] = sprintf(
490
-							'<a href="%s">%s</a>',
491
-							esc_url( $url ),
492
-							esc_html( $item->get_name() )
493
-						);
494
-					}
396
+        }
397
+
398
+    }
399
+
400
+    /**
401
+     * Displays invoice bulk actions.
402
+     */
403
+    public static function invoice_bulk_actions( $actions ) {
404
+        $actions['resend-invoice'] = __( 'Send to Customer', 'invoicing' );
405
+        return $actions;
406
+    }
407
+
408
+    /**
409
+     * Processes invoice bulk actions.
410
+     */
411
+    public static function handle_invoice_bulk_actions( $redirect_url, $action, $post_ids ) {
412
+
413
+        if ( 'resend-invoice' === $action ) {
414
+            foreach ( $post_ids as $post_id ) {
415
+                getpaid()->get( 'invoice_emails' )->user_invoice( new WPInv_Invoice( $post_id ), true );
416
+            }
417
+        }
418
+
419
+        return $redirect_url;
420
+
421
+    }
422
+
423
+    /**
424
+     * Returns an array of payment forms table columns.
425
+     */
426
+    public static function payment_form_columns( $columns ) {
427
+
428
+        $columns = array(
429
+            'cb'        => $columns['cb'],
430
+            'title'     => __( 'Name', 'invoicing' ),
431
+            'shortcode' => __( 'Shortcode', 'invoicing' ),
432
+            'earnings'  => __( 'Revenue', 'invoicing' ),
433
+            'refunds'   => __( 'Refunded', 'invoicing' ),
434
+            'items'     => __( 'Items', 'invoicing' ),
435
+            'date'      => __( 'Date', 'invoicing' ),
436
+        );
437
+
438
+        return apply_filters( 'wpi_payment_form_table_columns', $columns );
439
+
440
+    }
441
+
442
+    /**
443
+     * Displays payment form table columns.
444
+     */
445
+    public static function display_payment_form_columns( $column_name, $post_id ) {
446
+
447
+        // Retrieve the payment form.
448
+        $form = new GetPaid_Payment_Form( $post_id );
449
+
450
+        switch ( $column_name ) {
451
+
452
+            case 'earnings':
453
+                echo wp_kses_post( wpinv_price( $form->get_earned() ) );
454
+                break;
455
+
456
+            case 'refunds':
457
+                echo wp_kses_post( wpinv_price( $form->get_refunded() ) );
458
+                break;
459
+
460
+            case 'refunds':
461
+                echo wp_kses_post( wpinv_price( $form->get_refunded() ) );
462
+                break;
463
+
464
+            case 'shortcode':
465
+                if ( $form->is_default() ) {
466
+                    echo '&mdash;';
467
+                } else {
468
+                    echo '<input onClick="this.select()" type="text" value="[getpaid form=' . esc_attr( $form->get_id() ) . ']" style="width: 100%;" readonly/>';
469
+                }
470
+
471
+                break;
472
+
473
+            case 'items':
474
+                $items = $form->get_items();
475
+
476
+                if ( $form->is_default() || empty( $items ) ) {
477
+                    echo '&mdash;';
478
+                    return;
479
+                }
480
+
481
+                $_items = array();
482
+
483
+                foreach ( $items as $item ) {
484
+                    $url = $item->get_edit_url();
485
+
486
+                    if ( empty( $url ) ) {
487
+                        $_items[] = esc_html( $item->get_name() );
488
+                    } else {
489
+                        $_items[] = sprintf(
490
+                            '<a href="%s">%s</a>',
491
+                            esc_url( $url ),
492
+                            esc_html( $item->get_name() )
493
+                        );
494
+                    }
495 495
 }
496 496
 
497
-				echo wp_kses_post( implode( '<br>', $_items ) );
497
+                echo wp_kses_post( implode( '<br>', $_items ) );
498
+
499
+                break;
500
+
501
+        }
502
+
503
+    }
504
+
505
+    /**
506
+     * Filters post states.
507
+     */
508
+    public static function filter_payment_form_state( $post_states, $post ) {
509
+
510
+        if ( 'wpi_payment_form' === $post->post_type && wpinv_get_default_payment_form() === $post->ID ) {
511
+            $post_states['default_form'] = __( 'Default Payment Form', 'invoicing' );
512
+        }
513
+
514
+        return $post_states;
515
+
516
+    }
517
+
518
+    /**
519
+     * Returns an array of coupon table columns.
520
+     */
521
+    public static function discount_columns( $columns ) {
522
+
523
+        $columns = array(
524
+            'cb'          => $columns['cb'],
525
+            'title'       => __( 'Name', 'invoicing' ),
526
+            'code'        => __( 'Code', 'invoicing' ),
527
+            'amount'      => __( 'Amount', 'invoicing' ),
528
+            'usage'       => __( 'Usage / Limit', 'invoicing' ),
529
+            'start_date'  => __( 'Start Date', 'invoicing' ),
530
+            'expiry_date' => __( 'Expiry Date', 'invoicing' ),
531
+        );
532
+
533
+        return apply_filters( 'wpi_discount_table_columns', $columns );
534
+    }
498 535
 
499
-				break;
536
+    /**
537
+     * Filters post states.
538
+     */
539
+    public static function filter_discount_state( $post_states, $post ) {
500 540
 
501
-		}
541
+        if ( 'wpi_discount' === $post->post_type ) {
502 542
 
503
-	}
543
+            $discount = new WPInv_Discount( $post );
504 544
 
505
-	/**
506
-	 * Filters post states.
507
-	 */
508
-	public static function filter_payment_form_state( $post_states, $post ) {
545
+            $status = $discount->is_expired() ? 'expired' : $discount->get_status();
509 546
 
510
-		if ( 'wpi_payment_form' === $post->post_type && wpinv_get_default_payment_form() === $post->ID ) {
511
-			$post_states['default_form'] = __( 'Default Payment Form', 'invoicing' );
512
-		}
547
+            if ( 'publish' !== $status ) {
548
+                return array(
549
+                    'discount_status' => wpinv_discount_status( $status ),
550
+                );
551
+            }
552
+
553
+            return array();
554
+
555
+        }
556
+
557
+        return $post_states;
513 558
 
514
-		return $post_states;
559
+    }
515 560
 
516
-	}
561
+    /**
562
+     * Returns an array of items table columns.
563
+     */
564
+    public static function item_columns( $columns ) {
565
+
566
+        $columns = array(
567
+            'cb'        => $columns['cb'],
568
+            'title'     => __( 'Name', 'invoicing' ),
569
+            'price'     => __( 'Price', 'invoicing' ),
570
+            'vat_rule'  => __( 'Tax Rule', 'invoicing' ),
571
+            'vat_class' => __( 'Tax Class', 'invoicing' ),
572
+            'type'      => __( 'Type', 'invoicing' ),
573
+            'shortcode' => __( 'Shortcode', 'invoicing' ),
574
+        );
575
+
576
+        if ( ! wpinv_use_taxes() ) {
577
+            unset( $columns['vat_rule'] );
578
+            unset( $columns['vat_class'] );
579
+        }
517 580
 
518
-	/**
519
-	 * Returns an array of coupon table columns.
520
-	 */
521
-	public static function discount_columns( $columns ) {
581
+        return apply_filters( 'wpi_item_table_columns', $columns );
582
+    }
522 583
 
523
-		$columns = array(
524
-			'cb'          => $columns['cb'],
525
-			'title'       => __( 'Name', 'invoicing' ),
526
-			'code'        => __( 'Code', 'invoicing' ),
527
-			'amount'      => __( 'Amount', 'invoicing' ),
528
-			'usage'       => __( 'Usage / Limit', 'invoicing' ),
529
-			'start_date'  => __( 'Start Date', 'invoicing' ),
530
-			'expiry_date' => __( 'Expiry Date', 'invoicing' ),
531
-		);
584
+    /**
585
+     * Returns an array of sortable items table columns.
586
+     */
587
+    public static function sortable_item_columns( $columns ) {
588
+
589
+        return array_merge(
590
+            $columns,
591
+            array(
592
+                'price'     => 'price',
593
+                'vat_rule'  => 'vat_rule',
594
+                'vat_class' => 'vat_class',
595
+                'type'      => 'type',
596
+            )
597
+        );
532 598
 
533
-		return apply_filters( 'wpi_discount_table_columns', $columns );
534
-	}
599
+    }
535 600
 
536
-	/**
537
-	 * Filters post states.
538
-	 */
539
-	public static function filter_discount_state( $post_states, $post ) {
601
+    /**
602
+     * Displays items table columns.
603
+     */
604
+    public static function display_item_columns( $column_name, $post_id ) {
540 605
 
541
-		if ( 'wpi_discount' === $post->post_type ) {
606
+        $item = new WPInv_Item( $post_id );
542 607
 
543
-			$discount = new WPInv_Discount( $post );
608
+        switch ( $column_name ) {
544 609
 
545
-			$status = $discount->is_expired() ? 'expired' : $discount->get_status();
610
+            case 'price':
611
+                if ( ! $item->is_recurring() ) {
612
+                    echo wp_kses_post( $item->get_the_price() );
613
+                    break;
614
+                }
546 615
 
547
-			if ( 'publish' !== $status ) {
548
-				return array(
549
-					'discount_status' => wpinv_discount_status( $status ),
550
-				);
551
-			}
616
+                $price = wp_sprintf(
617
+                    __( '%1$s / %2$s', 'invoicing' ),
618
+                    $item->get_the_price(),
619
+                    getpaid_get_subscription_period_label( $item->get_recurring_period(), $item->get_recurring_interval(), '' )
620
+                );
552 621
 
553
-			return array();
622
+                if ( $item->get_the_price() == $item->get_the_initial_price() ) {
623
+                    echo wp_kses_post( $price );
624
+                    break;
625
+                }
554 626
 
555
-		}
627
+                echo wp_kses_post( $item->get_the_initial_price() );
556 628
 
557
-		return $post_states;
629
+                echo '<span class="meta">' . wp_sprintf( esc_html__( 'then %s', 'invoicing' ), wp_kses_post( $price ) ) . '</span>';
630
+                break;
558 631
 
559
-	}
632
+            case 'vat_rule':
633
+                echo wp_kses_post( getpaid_get_tax_rule_label( $item->get_vat_rule() ) );
634
+                break;
560 635
 
561
-	/**
562
-	 * Returns an array of items table columns.
563
-	 */
564
-	public static function item_columns( $columns ) {
636
+            case 'vat_class':
637
+                echo wp_kses_post( getpaid_get_tax_class_label( $item->get_vat_class() ) );
638
+                break;
565 639
 
566
-		$columns = array(
567
-			'cb'        => $columns['cb'],
568
-			'title'     => __( 'Name', 'invoicing' ),
569
-			'price'     => __( 'Price', 'invoicing' ),
570
-			'vat_rule'  => __( 'Tax Rule', 'invoicing' ),
571
-			'vat_class' => __( 'Tax Class', 'invoicing' ),
572
-			'type'      => __( 'Type', 'invoicing' ),
573
-			'shortcode' => __( 'Shortcode', 'invoicing' ),
574
-		);
640
+            case 'shortcode':
641
+                if ( $item->is_type( array( '', 'fee', 'custom' ) ) ) {
642
+                    echo '<input onClick="this.select()" type="text" value="[getpaid item=' . esc_attr( $item->get_id() ) . ' button=\'Buy Now\']" style="width: 100%;" readonly/>';
643
+                } else {
644
+                    echo '&mdash;';
645
+                }
575 646
 
576
-		if ( ! wpinv_use_taxes() ) {
577
-			unset( $columns['vat_rule'] );
578
-			unset( $columns['vat_class'] );
579
-		}
647
+                break;
580 648
 
581
-		return apply_filters( 'wpi_item_table_columns', $columns );
582
-	}
649
+            case 'type':
650
+                echo wp_kses_post( wpinv_item_type( $item->get_id() ) . '<span class="meta">' . $item->get_custom_singular_name() . '</span>' );
651
+                break;
583 652
 
584
-	/**
585
-	 * Returns an array of sortable items table columns.
586
-	 */
587
-	public static function sortable_item_columns( $columns ) {
588
-
589
-		return array_merge(
590
-			$columns,
591
-			array(
592
-				'price'     => 'price',
593
-				'vat_rule'  => 'vat_rule',
594
-				'vat_class' => 'vat_class',
595
-				'type'      => 'type',
596
-			)
597
-		);
598
-
599
-	}
600
-
601
-	/**
602
-	 * Displays items table columns.
603
-	 */
604
-	public static function display_item_columns( $column_name, $post_id ) {
605
-
606
-		$item = new WPInv_Item( $post_id );
607
-
608
-		switch ( $column_name ) {
609
-
610
-			case 'price':
611
-				if ( ! $item->is_recurring() ) {
612
-					echo wp_kses_post( $item->get_the_price() );
613
-					break;
614
-				}
615
-
616
-				$price = wp_sprintf(
617
-					__( '%1$s / %2$s', 'invoicing' ),
618
-					$item->get_the_price(),
619
-					getpaid_get_subscription_period_label( $item->get_recurring_period(), $item->get_recurring_interval(), '' )
620
-				);
621
-
622
-				if ( $item->get_the_price() == $item->get_the_initial_price() ) {
623
-					echo wp_kses_post( $price );
624
-					break;
625
-				}
626
-
627
-				echo wp_kses_post( $item->get_the_initial_price() );
628
-
629
-				echo '<span class="meta">' . wp_sprintf( esc_html__( 'then %s', 'invoicing' ), wp_kses_post( $price ) ) . '</span>';
630
-				break;
631
-
632
-			case 'vat_rule':
633
-				echo wp_kses_post( getpaid_get_tax_rule_label( $item->get_vat_rule() ) );
634
-				break;
635
-
636
-			case 'vat_class':
637
-				echo wp_kses_post( getpaid_get_tax_class_label( $item->get_vat_class() ) );
638
-				break;
639
-
640
-			case 'shortcode':
641
-				if ( $item->is_type( array( '', 'fee', 'custom' ) ) ) {
642
-					echo '<input onClick="this.select()" type="text" value="[getpaid item=' . esc_attr( $item->get_id() ) . ' button=\'Buy Now\']" style="width: 100%;" readonly/>';
643
-				} else {
644
-					echo '&mdash;';
645
-				}
646
-
647
-				break;
648
-
649
-			case 'type':
650
-				echo wp_kses_post( wpinv_item_type( $item->get_id() ) . '<span class="meta">' . $item->get_custom_singular_name() . '</span>' );
651
-				break;
652
-
653
-		}
654
-
655
-	}
656
-
657
-	/**
658
-	 * Lets users filter items using taxes.
659
-	 */
660
-	public static function add_item_filters( $post_type ) {
661
-
662
-		// Abort if we're not dealing with items.
663
-		if ( 'wpi_item' !== $post_type ) {
664
-			return;
665
-		}
666
-
667
-		// Filter by vat rules.
668
-		if ( wpinv_use_taxes() ) {
669
-
670
-			// Sanitize selected vat rule.
671
-			$vat_rule   = '';
672
-			$vat_rules  = getpaid_get_tax_rules();
673
-			if ( isset( $_GET['vat_rule'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
674
-				$vat_rule   = sanitize_text_field( $_GET['vat_rule'] ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended
675
-			}
676
-
677
-			// Filter by VAT rule.
678
-			wpinv_html_select(
679
-				array(
680
-					'options'          => array_merge(
681
-						array(
682
-							'' => __( 'All Tax Rules', 'invoicing' ),
683
-						),
684
-						$vat_rules
685
-					),
686
-					'name'             => 'vat_rule',
687
-					'id'               => 'vat_rule',
688
-					'selected'         => in_array( $vat_rule, array_keys( $vat_rules ), true ) ? $vat_rule : '',
689
-					'show_option_all'  => false,
690
-					'show_option_none' => false,
691
-				)
692
-			);
693
-
694
-			// Filter by VAT class.
695
-
696
-			// Sanitize selected vat rule.
697
-			$vat_class   = '';
698
-			$vat_classes = getpaid_get_tax_classes();
699
-			if ( isset( $_GET['vat_class'] ) ) {  // phpcs:ignore WordPress.Security.NonceVerification.Recommended
700
-				$vat_class   = sanitize_text_field( $_GET['vat_class'] );  // phpcs:ignore WordPress.Security.NonceVerification.Recommended
701
-			}
702
-
703
-			wpinv_html_select(
704
-				array(
705
-					'options'          => array_merge(
706
-						array(
707
-							'' => __( 'All Tax Classes', 'invoicing' ),
708
-						),
709
-						$vat_classes
710
-					),
711
-					'name'             => 'vat_class',
712
-					'id'               => 'vat_class',
713
-					'selected'         => in_array( $vat_class, array_keys( $vat_classes ), true ) ? $vat_class : '',
714
-					'show_option_all'  => false,
715
-					'show_option_none' => false,
716
-				)
717
-			);
718
-
719
-		}
720
-
721
-		// Filter by item type.
722
-		$type   = '';
723
-		if ( isset( $_GET['type'] ) ) {  // phpcs:ignore WordPress.Security.NonceVerification.Recommended
724
-			$type   = sanitize_text_field( $_GET['type'] );  // phpcs:ignore WordPress.Security.NonceVerification.Recommended
725
-		}
726
-
727
-		wpinv_html_select(
728
-			array(
729
-				'options'          => array_merge(
730
-					array(
731
-						'' => __( 'All item types', 'invoicing' ),
732
-					),
733
-					wpinv_get_item_types()
734
-				),
735
-				'name'             => 'type',
736
-				'id'               => 'type',
737
-				'selected'         => in_array( $type, wpinv_item_types(), true ) ? $type : '',
738
-				'show_option_all'  => false,
739
-				'show_option_none' => false,
740
-			)
741
-		);
742
-
743
-	}
744
-
745
-	/**
746
-	 * Filters the item query.
747
-	 */
748
-	public static function filter_item_query( $query ) {
749
-
750
-		// modify the query only if it admin and main query.
751
-		if ( ! ( is_admin() && $query->is_main_query() ) ) {
752
-			return $query;
753
-		}
754
-
755
-		// we want to modify the query for our items.
756
-		if ( empty( $query->query['post_type'] ) || 'wpi_item' !== $query->query['post_type'] ) {
757
-			return $query;
758
-		}
759
-
760
-		if ( empty( $query->query_vars['meta_query'] ) ) {
761
-			$query->query_vars['meta_query'] = array();
762
-		}
763
-
764
-		// Filter vat rule type
653
+        }
654
+
655
+    }
656
+
657
+    /**
658
+     * Lets users filter items using taxes.
659
+     */
660
+    public static function add_item_filters( $post_type ) {
661
+
662
+        // Abort if we're not dealing with items.
663
+        if ( 'wpi_item' !== $post_type ) {
664
+            return;
665
+        }
666
+
667
+        // Filter by vat rules.
668
+        if ( wpinv_use_taxes() ) {
669
+
670
+            // Sanitize selected vat rule.
671
+            $vat_rule   = '';
672
+            $vat_rules  = getpaid_get_tax_rules();
673
+            if ( isset( $_GET['vat_rule'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
674
+                $vat_rule   = sanitize_text_field( $_GET['vat_rule'] ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended
675
+            }
676
+
677
+            // Filter by VAT rule.
678
+            wpinv_html_select(
679
+                array(
680
+                    'options'          => array_merge(
681
+                        array(
682
+                            '' => __( 'All Tax Rules', 'invoicing' ),
683
+                        ),
684
+                        $vat_rules
685
+                    ),
686
+                    'name'             => 'vat_rule',
687
+                    'id'               => 'vat_rule',
688
+                    'selected'         => in_array( $vat_rule, array_keys( $vat_rules ), true ) ? $vat_rule : '',
689
+                    'show_option_all'  => false,
690
+                    'show_option_none' => false,
691
+                )
692
+            );
693
+
694
+            // Filter by VAT class.
695
+
696
+            // Sanitize selected vat rule.
697
+            $vat_class   = '';
698
+            $vat_classes = getpaid_get_tax_classes();
699
+            if ( isset( $_GET['vat_class'] ) ) {  // phpcs:ignore WordPress.Security.NonceVerification.Recommended
700
+                $vat_class   = sanitize_text_field( $_GET['vat_class'] );  // phpcs:ignore WordPress.Security.NonceVerification.Recommended
701
+            }
702
+
703
+            wpinv_html_select(
704
+                array(
705
+                    'options'          => array_merge(
706
+                        array(
707
+                            '' => __( 'All Tax Classes', 'invoicing' ),
708
+                        ),
709
+                        $vat_classes
710
+                    ),
711
+                    'name'             => 'vat_class',
712
+                    'id'               => 'vat_class',
713
+                    'selected'         => in_array( $vat_class, array_keys( $vat_classes ), true ) ? $vat_class : '',
714
+                    'show_option_all'  => false,
715
+                    'show_option_none' => false,
716
+                )
717
+            );
718
+
719
+        }
720
+
721
+        // Filter by item type.
722
+        $type   = '';
723
+        if ( isset( $_GET['type'] ) ) {  // phpcs:ignore WordPress.Security.NonceVerification.Recommended
724
+            $type   = sanitize_text_field( $_GET['type'] );  // phpcs:ignore WordPress.Security.NonceVerification.Recommended
725
+        }
726
+
727
+        wpinv_html_select(
728
+            array(
729
+                'options'          => array_merge(
730
+                    array(
731
+                        '' => __( 'All item types', 'invoicing' ),
732
+                    ),
733
+                    wpinv_get_item_types()
734
+                ),
735
+                'name'             => 'type',
736
+                'id'               => 'type',
737
+                'selected'         => in_array( $type, wpinv_item_types(), true ) ? $type : '',
738
+                'show_option_all'  => false,
739
+                'show_option_none' => false,
740
+            )
741
+        );
742
+
743
+    }
744
+
745
+    /**
746
+     * Filters the item query.
747
+     */
748
+    public static function filter_item_query( $query ) {
749
+
750
+        // modify the query only if it admin and main query.
751
+        if ( ! ( is_admin() && $query->is_main_query() ) ) {
752
+            return $query;
753
+        }
754
+
755
+        // we want to modify the query for our items.
756
+        if ( empty( $query->query['post_type'] ) || 'wpi_item' !== $query->query['post_type'] ) {
757
+            return $query;
758
+        }
759
+
760
+        if ( empty( $query->query_vars['meta_query'] ) ) {
761
+            $query->query_vars['meta_query'] = array();
762
+        }
763
+
764
+        // Filter vat rule type
765 765
         if ( ! empty( $_GET['vat_rule'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
766 766
             $query->query_vars['meta_query'][] = array(
767 767
                 'key'     => '_wpinv_vat_rule',
@@ -786,101 +786,101 @@  discard block
 block discarded – undo
786 786
                 'value'   => sanitize_text_field( $_GET['type'] ), // phpcs:ignore WordPress.Security.NonceVerification.Recommended
787 787
                 'compare' => '=',
788 788
             );
789
-		}
790
-
791
-		$query->query_vars['meta_query'][] = array(
792
-			'key'     => '_wpinv_one_time',
793
-			'compare' => 'NOT EXISTS',
794
-		);
795
-	}
796
-
797
-	/**
798
-	 * Reorders items.
799
-	 */
800
-	public static function reorder_items( $vars ) {
801
-		global $typenow;
802
-
803
-		if ( 'wpi_item' !== $typenow || empty( $vars['orderby'] ) ) {
804
-			return $vars;
805
-		}
806
-
807
-		// By item type.
808
-		if ( 'type' === $vars['orderby'] ) {
809
-			return array_merge(
810
-				$vars,
811
-				array(
812
-					'meta_key' => '_wpinv_type',
813
-					'orderby'  => 'meta_value',
814
-				)
815
-			);
816
-		}
817
-
818
-		// By vat class.
819
-		if ( 'vat_class' === $vars['orderby'] ) {
820
-			return array_merge(
821
-				$vars,
822
-				array(
823
-					'meta_key' => '_wpinv_vat_class',
824
-					'orderby'  => 'meta_value',
825
-				)
826
-			);
827
-		}
828
-
829
-		// By vat rule.
830
-		if ( 'vat_rule' === $vars['orderby'] ) {
831
-			return array_merge(
832
-				$vars,
833
-				array(
834
-					'meta_key' => '_wpinv_vat_rule',
835
-					'orderby'  => 'meta_value',
836
-				)
837
-			);
838
-		}
839
-
840
-		// By price.
841
-		if ( 'price' === $vars['orderby'] ) {
842
-			return array_merge(
843
-				$vars,
844
-				array(
845
-					'meta_key' => '_wpinv_price',
846
-					'orderby'  => 'meta_value_num',
847
-				)
848
-			);
849
-		}
850
-
851
-		return $vars;
852
-
853
-	}
854
-
855
-	/**
856
-	 * Fired when deleting a post.
857
-	 */
858
-	public static function delete_post( $post_id ) {
859
-
860
-		switch ( get_post_type( $post_id ) ) {
861
-
862
-			case 'wpi_item':
863
-				do_action( 'getpaid_before_delete_item', new WPInv_Item( $post_id ) );
864
-				break;
865
-
866
-			case 'wpi_payment_form':
867
-				do_action( 'getpaid_before_delete_payment_form', new GetPaid_Payment_Form( $post_id ) );
868
-				break;
869
-
870
-			case 'wpi_discount':
871
-				do_action( 'getpaid_before_delete_discount', new WPInv_Discount( $post_id ) );
872
-				break;
873
-
874
-			case 'wpi_invoice':
875
-				$invoice = new WPInv_Invoice( $post_id );
876
-				do_action( 'getpaid_before_delete_invoice', $invoice );
877
-				$invoice->get_data_store()->delete_items( $invoice );
878
-				$invoice->get_data_store()->delete_special_fields( $invoice );
879
-				break;
880
-		}
881
-	}
882
-
883
-	/**
789
+        }
790
+
791
+        $query->query_vars['meta_query'][] = array(
792
+            'key'     => '_wpinv_one_time',
793
+            'compare' => 'NOT EXISTS',
794
+        );
795
+    }
796
+
797
+    /**
798
+     * Reorders items.
799
+     */
800
+    public static function reorder_items( $vars ) {
801
+        global $typenow;
802
+
803
+        if ( 'wpi_item' !== $typenow || empty( $vars['orderby'] ) ) {
804
+            return $vars;
805
+        }
806
+
807
+        // By item type.
808
+        if ( 'type' === $vars['orderby'] ) {
809
+            return array_merge(
810
+                $vars,
811
+                array(
812
+                    'meta_key' => '_wpinv_type',
813
+                    'orderby'  => 'meta_value',
814
+                )
815
+            );
816
+        }
817
+
818
+        // By vat class.
819
+        if ( 'vat_class' === $vars['orderby'] ) {
820
+            return array_merge(
821
+                $vars,
822
+                array(
823
+                    'meta_key' => '_wpinv_vat_class',
824
+                    'orderby'  => 'meta_value',
825
+                )
826
+            );
827
+        }
828
+
829
+        // By vat rule.
830
+        if ( 'vat_rule' === $vars['orderby'] ) {
831
+            return array_merge(
832
+                $vars,
833
+                array(
834
+                    'meta_key' => '_wpinv_vat_rule',
835
+                    'orderby'  => 'meta_value',
836
+                )
837
+            );
838
+        }
839
+
840
+        // By price.
841
+        if ( 'price' === $vars['orderby'] ) {
842
+            return array_merge(
843
+                $vars,
844
+                array(
845
+                    'meta_key' => '_wpinv_price',
846
+                    'orderby'  => 'meta_value_num',
847
+                )
848
+            );
849
+        }
850
+
851
+        return $vars;
852
+
853
+    }
854
+
855
+    /**
856
+     * Fired when deleting a post.
857
+     */
858
+    public static function delete_post( $post_id ) {
859
+
860
+        switch ( get_post_type( $post_id ) ) {
861
+
862
+            case 'wpi_item':
863
+                do_action( 'getpaid_before_delete_item', new WPInv_Item( $post_id ) );
864
+                break;
865
+
866
+            case 'wpi_payment_form':
867
+                do_action( 'getpaid_before_delete_payment_form', new GetPaid_Payment_Form( $post_id ) );
868
+                break;
869
+
870
+            case 'wpi_discount':
871
+                do_action( 'getpaid_before_delete_discount', new WPInv_Discount( $post_id ) );
872
+                break;
873
+
874
+            case 'wpi_invoice':
875
+                $invoice = new WPInv_Invoice( $post_id );
876
+                do_action( 'getpaid_before_delete_invoice', $invoice );
877
+                $invoice->get_data_store()->delete_items( $invoice );
878
+                $invoice->get_data_store()->delete_special_fields( $invoice );
879
+                break;
880
+        }
881
+    }
882
+
883
+    /**
884 884
      * Add a post display state for special GetPaid pages in the page list table.
885 885
      *
886 886
      * @param array   $post_states An array of post display states.
@@ -894,21 +894,21 @@  discard block
 block discarded – undo
894 894
             $post_states['getpaid_success_page'] = __( 'GetPaid Receipt Page', 'invoicing' );
895 895
         }
896 896
 
897
-		foreach ( getpaid_get_invoice_post_types() as $post_type => $label ) {
897
+        foreach ( getpaid_get_invoice_post_types() as $post_type => $label ) {
898 898
 
899
-			if ( wpinv_get_option( "{$post_type}_history_page", 0 ) == $post->ID ) {
900
-				$post_states[ "getpaid_{$post_type}_history_page" ] = sprintf(
901
-					__( 'GetPaid %s History Page', 'invoicing' ),
902
-					$label
903
-				);
904
-			}
899
+            if ( wpinv_get_option( "{$post_type}_history_page", 0 ) == $post->ID ) {
900
+                $post_states[ "getpaid_{$post_type}_history_page" ] = sprintf(
901
+                    __( 'GetPaid %s History Page', 'invoicing' ),
902
+                    $label
903
+                );
904
+            }
905 905
 }
906 906
 
907
-		if ( wpinv_get_option( 'invoice_subscription_page', 0 ) == $post->ID ) {
907
+        if ( wpinv_get_option( 'invoice_subscription_page', 0 ) == $post->ID ) {
908 908
             $post_states['getpaid_invoice_subscription_page'] = __( 'GetPaid Subscription Page', 'invoicing' );
909 909
         }
910 910
 
911
-		if ( wpinv_get_option( 'checkout_page', 0 ) == $post->ID ) {
911
+        if ( wpinv_get_option( 'checkout_page', 0 ) == $post->ID ) {
912 912
             $post_states['getpaid_checkout_page'] = __( 'GetPaid Checkout Page', 'invoicing' );
913 913
         }
914 914
 
Please login to merge, or discard this patch.
includes/class-wpinv.php 1 patch
Indentation   +616 added lines, -616 removed lines patch added patch discarded remove patch
@@ -14,620 +14,620 @@
 block discarded – undo
14 14
  */
15 15
 class WPInv_Plugin {
16 16
 
17
-	/**
18
-	 * GetPaid version.
19
-	 *
20
-	 * @var string
21
-	 */
22
-	public $version;
23
-
24
-	/**
25
-	 * Data container.
26
-	 *
27
-	 * @var array
28
-	 */
29
-	protected $data = array();
30
-
31
-	/**
32
-	 * Form elements instance.
33
-	 *
34
-	 * @var WPInv_Payment_Form_Elements
35
-	 */
36
-	public $form_elements;
37
-
38
-	/**
39
-	 * @var array An array of payment gateways.
40
-	 */
41
-	public $gateways;
42
-
43
-	/**
44
-	 * Class constructor.
45
-	 */
46
-	public function __construct() {
47
-		$this->define_constants();
48
-		$this->includes();
49
-		$this->init_hooks();
50
-		$this->set_properties();
51
-	}
52
-
53
-	/**
54
-	 * Sets a custom data property.
55
-	 *
56
-	 * @param string $prop The prop to set.
57
-	 * @param mixed $value The value to retrieve.
58
-	 */
59
-	public function set( $prop, $value ) {
60
-		$this->data[ $prop ] = $value;
61
-	}
62
-
63
-	/**
64
-	 * Gets a custom data property.
65
-	 *
66
-	 * @param string $prop The prop to set.
67
-	 * @return mixed The value.
68
-	 */
69
-	public function get( $prop ) {
70
-		if ( isset( $this->data[ $prop ] ) ) {
71
-			return $this->data[ $prop ];
72
-		}
73
-
74
-		return null;
75
-	}
76
-
77
-	/**
78
-	 * Define class properties.
79
-	 */
80
-	public function set_properties() {
81
-		// Sessions.
82
-		$this->set( 'session', new WPInv_Session_Handler() );
83
-		$GLOBALS['wpi_session'] = $this->get( 'session' ); // Backwards compatibility.
84
-		$GLOBALS['wpinv_euvat'] = new WPInv_EUVat(); // Backwards compatibility.
85
-
86
-		// Init other objects.
87
-		$this->set( 'notes', new WPInv_Notes() );
88
-		$this->set( 'api', new WPInv_API() );
89
-		$this->set( 'post_types', new GetPaid_Post_Types() );
90
-		$this->set( 'template', new GetPaid_Template() );
91
-		$this->set( 'admin', new GetPaid_Admin() );
92
-		$this->set( 'subscriptions', new WPInv_Subscriptions() );
93
-		$this->set( 'invoice_emails', new GetPaid_Invoice_Notification_Emails() );
94
-		$this->set( 'subscription_emails', new GetPaid_Subscription_Notification_Emails() );
95
-		$this->set( 'daily_maintenace', new GetPaid_Daily_Maintenance() );
96
-		$this->set( 'payment_forms', new GetPaid_Payment_Forms() );
97
-		$this->set( 'maxmind', new GetPaid_MaxMind_Geolocation() );
98
-		$this->set( 'data_retention', new WPInv_Data_Retention() );
99
-	}
100
-
101
-	 /**
102
-	 * Define plugin constants.
103
-	 */
104
-	public function define_constants() {
105
-		define( 'WPINV_PLUGIN_DIR', plugin_dir_path( WPINV_PLUGIN_FILE ) );
106
-		define( 'WPINV_PLUGIN_URL', plugin_dir_url( WPINV_PLUGIN_FILE ) );
107
-		$this->version = WPINV_VERSION;
108
-	}
109
-
110
-	/**
111
-	 * Hook into actions and filters.
112
-	 *
113
-	 * @since 1.0.19
114
-	 */
115
-	protected function init_hooks() {
116
-		/* Internationalize the text strings used. */
117
-		add_action( 'plugins_loaded', array( &$this, 'plugins_loaded' ) );
118
-
119
-		// Init the plugin after WordPress inits.
120
-		add_action( 'init', array( $this, 'init' ), 1 );
121
-		add_action( 'init', array( $this, 'maybe_process_ipn' ), 100 );
122
-		add_action( 'init', array( $this, 'wpinv_actions' ) );
123
-		add_action( 'init', array( $this, 'maybe_do_authenticated_action' ), 100 );
124
-		add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ), 11 );
125
-		add_action( 'wp_footer', array( $this, 'wp_footer' ) );
126
-		add_action( 'wp_head', array( $this, 'wp_head' ) );
127
-		add_action( 'widgets_init', array( $this, 'register_widgets' ) );
128
-		add_filter( 'wpseo_exclude_from_sitemap_by_post_ids', array( $this, 'wpseo_exclude_from_sitemap_by_post_ids' ) );
129
-		add_filter( 'the_seo_framework_sitemap_supported_post_types', array( $this, 'exclude_invoicing_post_types' ) );
130
-		add_filter( 'pre_get_posts', array( &$this, 'pre_get_posts' ) );
131
-
132
-		add_filter( 'query_vars', array( $this, 'custom_query_vars' ) );
133
-		add_action( 'init', array( $this, 'add_rewrite_rule' ), 10, 0 );
134
-		add_action( 'pre_get_posts', array( $this, 'maybe_process_new_ipn' ), 1 );
135
-
136
-		// Fires after registering actions.
137
-		do_action( 'wpinv_actions', $this );
138
-		do_action( 'getpaid_actions', $this );
139
-	}
140
-
141
-	public function plugins_loaded() {
142
-		/* Internationalize the text strings used. */
143
-		$this->load_textdomain();
144
-
145
-		do_action( 'wpinv_loaded' );
146
-
147
-		// Fix oxygen page builder conflict
148
-		if ( function_exists( 'ct_css_output' ) ) {
149
-			wpinv_oxygen_fix_conflict();
150
-		}
151
-	}
152
-
153
-	/**
154
-	 * Load Localisation files.
155
-	 *
156
-	 * Note: the first-loaded translation file overrides any following ones if the same translation is present.
157
-	 *
158
-	 * Locales found in:
159
-	 *      - WP_LANG_DIR/plugins/invoicing-LOCALE.mo
160
-	 *      - WP_PLUGIN_DIR/invoicing/languages/invoicing-LOCALE.mo
161
-	 *
162
-	 * @since 1.0.0
163
-	 */
164
-	public function load_textdomain() {
165
-		// Determines the current locale.
166
-		if ( function_exists( 'determine_locale' ) ) {
167
-			$locale = determine_locale();
168
-		} else if ( function_exists( 'get_user_locale' ) ) {
169
-			$locale = get_user_locale();
170
-		} else {
171
-			$locale = get_locale();
172
-		}
173
-
174
-		/**
175
-		 * Filter the locale to use for translations.
176
-		 */
177
-		$locale = apply_filters( 'plugin_locale', $locale, 'invoicing' );
178
-
179
-		unload_textdomain( 'invoicing', true );
180
-		load_textdomain( 'invoicing', WP_LANG_DIR . '/invoicing/invoicing-' . $locale . '.mo' );
181
-		load_plugin_textdomain( 'invoicing', false, plugin_basename( dirname( WPINV_PLUGIN_FILE ) ) . '/languages/' );
182
-	}
183
-
184
-	/**
185
-	 * Include required core files used in admin and on the frontend.
186
-	 */
187
-	public function includes() {
188
-		// Start with the settings.
189
-		require_once WPINV_PLUGIN_DIR . 'includes/admin/register-settings.php';
190
-
191
-		// Packages/libraries.
192
-		require_once WPINV_PLUGIN_DIR . 'vendor/autoload.php';
193
-		require_once WPINV_PLUGIN_DIR . 'vendor/ayecode/wp-ayecode-ui/ayecode-ui-loader.php';
194
-
195
-		// Load functions.
196
-		require_once WPINV_PLUGIN_DIR . 'includes/deprecated-functions.php';
197
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-email-functions.php';
198
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-general-functions.php';
199
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-helper-functions.php';
200
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-tax-functions.php';
201
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-template-functions.php';
202
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-address-functions.php';
203
-		require_once WPINV_PLUGIN_DIR . 'includes/invoice-functions.php';
204
-		require_once WPINV_PLUGIN_DIR . 'includes/subscription-functions.php';
205
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-item-functions.php';
206
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-discount-functions.php';
207
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-gateway-functions.php';
208
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-payment-functions.php';
209
-		require_once WPINV_PLUGIN_DIR . 'includes/user-functions.php';
210
-		require_once WPINV_PLUGIN_DIR . 'includes/error-functions.php';
211
-
212
-		// Register autoloader.
213
-		try {
214
-			spl_autoload_register( array( $this, 'autoload' ), true );
215
-		} catch ( Exception $e ) {
216
-			wpinv_error_log( $e->getMessage(), '', __FILE__, 149, true );
217
-		}
218
-
219
-		require_once WPINV_PLUGIN_DIR . 'includes/abstracts/abstract-wpinv-session.php';
220
-		require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-session-handler.php';
221
-		require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-ajax.php';
222
-		require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-api.php';
223
-		require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-cache-helper.php';
224
-		require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-db.php';
225
-		require_once WPINV_PLUGIN_DIR . 'includes/admin/subscriptions.php';
226
-		require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-subscriptions-db.php';
227
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-subscription.php';
228
-		require_once WPINV_PLUGIN_DIR . 'includes/abstracts/abstract-wpinv-privacy.php';
229
-		require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-privacy.php';
230
-		require_once WPINV_PLUGIN_DIR . 'includes/libraries/class-ayecode-addons.php';
231
-		require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-addons.php';
232
-		require_once WPINV_PLUGIN_DIR . 'widgets/checkout.php';
233
-		require_once WPINV_PLUGIN_DIR . 'widgets/invoice-history.php';
234
-		require_once WPINV_PLUGIN_DIR . 'widgets/invoice-receipt.php';
235
-		require_once WPINV_PLUGIN_DIR . 'widgets/invoice-messages.php';
236
-		require_once WPINV_PLUGIN_DIR . 'widgets/subscriptions.php';
237
-		require_once WPINV_PLUGIN_DIR . 'widgets/buy-item.php';
238
-		require_once WPINV_PLUGIN_DIR . 'widgets/getpaid.php';
239
-		require_once WPINV_PLUGIN_DIR . 'widgets/invoice.php';
240
-		require_once WPINV_PLUGIN_DIR . 'includes/admin/admin-pages.php';
241
-
242
-		if ( is_admin() || ( defined( 'WP_CLI' ) && WP_CLI ) ) {
243
-			GetPaid_Post_Types_Admin::init();
244
-
245
-			require_once WPINV_PLUGIN_DIR . 'includes/admin/wpinv-admin-functions.php';
246
-			require_once WPINV_PLUGIN_DIR . 'includes/admin/meta-boxes/class-mb-payment-form.php';
247
-			require_once WPINV_PLUGIN_DIR . 'includes/admin/meta-boxes/class-mb-invoice-notes.php';
248
-			require_once WPINV_PLUGIN_DIR . 'includes/admin/class-wpinv-admin-menus.php';
249
-			require_once WPINV_PLUGIN_DIR . 'includes/admin/class-wpinv-users.php';
250
-			require_once WPINV_PLUGIN_DIR . 'includes/admin/class-getpaid-admin-profile.php';
251
-			// load the user class only on the users.php page
252
-			global $pagenow;
253
-			if ( $pagenow == 'users.php' ) {
254
-				new WPInv_Admin_Users();
255
-			}
256
-		}
257
-
258
-		// Register cli commands
259
-		if ( defined( 'WP_CLI' ) && WP_CLI ) {
260
-			require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-cli.php';
261
-			WP_CLI::add_command( 'invoicing', 'WPInv_CLI' );
262
-		}
263
-	}
264
-
265
-	/**
266
-	 * Class autoloader
267
-	 *
268
-	 * @param       string $class_name The name of the class to load.
269
-	 * @access      public
270
-	 * @since       1.0.19
271
-	 * @return      void
272
-	 */
273
-	public function autoload( $class_name ) {
274
-		// Normalize the class name...
275
-		$class_name  = strtolower( $class_name );
276
-
277
-		// ... and make sure it is our class.
278
-		if ( false === strpos( $class_name, 'getpaid_' ) && false === strpos( $class_name, 'wpinv_' ) ) {
279
-			return;
280
-		}
281
-
282
-		// Next, prepare the file name from the class.
283
-		$file_name = 'class-' . str_replace( '_', '-', $class_name ) . '.php';
284
-
285
-		// Base path of the classes.
286
-		$plugin_path = untrailingslashit( WPINV_PLUGIN_DIR );
287
-
288
-		// And an array of possible locations in order of importance.
289
-		$locations = array(
290
-			"$plugin_path/includes",
291
-			"$plugin_path/includes/data-stores",
292
-			"$plugin_path/includes/gateways",
293
-			"$plugin_path/includes/payments",
294
-			"$plugin_path/includes/geolocation",
295
-			"$plugin_path/includes/reports",
296
-			"$plugin_path/includes/api",
297
-			"$plugin_path/includes/admin",
298
-			"$plugin_path/includes/admin/meta-boxes",
299
-		);
300
-
301
-		foreach ( apply_filters( 'getpaid_autoload_locations', $locations ) as $location ) {
302
-			if ( file_exists( trailingslashit( $location ) . $file_name ) ) {
303
-				include trailingslashit( $location ) . $file_name;
304
-				break;
305
-			}
306
-		}
307
-	}
308
-
309
-	/**
310
-	 * Inits hooks etc.
311
-	 */
312
-	public function init() {
313
-		// Fires before getpaid inits.
314
-		do_action( 'before_getpaid_init', $this );
315
-
316
-		// Maybe upgrade.
317
-		$this->maybe_upgrade_database();
318
-
319
-		// Load default gateways.
320
-		$gateways = apply_filters(
321
-			'getpaid_default_gateways',
322
-			array(
323
-				'manual'        => 'GetPaid_Manual_Gateway',
324
-				'paypal'        => 'GetPaid_Paypal_Gateway',
325
-				'worldpay'      => 'GetPaid_Worldpay_Gateway',
326
-				'bank_transfer' => 'GetPaid_Bank_Transfer_Gateway',
327
-				'authorizenet'  => 'GetPaid_Authorize_Net_Gateway',
328
-			)
329
-		);
330
-
331
-		foreach ( $gateways as $id => $class ) {
332
-			$this->gateways[ $id ] = new $class();
333
-		}
334
-
335
-		if ( 'yes' != get_option( 'wpinv_renamed_gateways' ) ) {
336
-			GetPaid_Installer::rename_gateways_label();
337
-			update_option( 'wpinv_renamed_gateways', 'yes' );
338
-		}
339
-
340
-		// Fires after getpaid inits.
341
-		do_action( 'getpaid_init', $this );
342
-	}
343
-
344
-	/**
345
-	 * Checks if this is an IPN request and processes it.
346
-	 */
347
-	public function maybe_process_ipn() {
348
-		// Ensure that this is an IPN request.
349
-		if ( empty( $_GET['wpi-listener'] ) || 'IPN' !== $_GET['wpi-listener'] || empty( $_GET['wpi-gateway'] ) ) {
350
-			return;
351
-		}
352
-
353
-		$gateway = sanitize_text_field( $_GET['wpi-gateway'] );
354
-
355
-		do_action( 'wpinv_verify_payment_ipn', $gateway );
356
-		do_action( "wpinv_verify_{$gateway}_ipn" );
357
-		exit;
358
-	}
359
-
360
-	public function enqueue_scripts() {
361
-		// Fires before adding scripts.
362
-		do_action( 'getpaid_enqueue_scripts' );
363
-
364
-		$localize                         = array();
365
-		$localize['ajax_url']             = admin_url( 'admin-ajax.php' );
366
-		$localize['thousands']            = wpinv_thousands_separator();
367
-		$localize['decimals']             = wpinv_decimal_separator();
368
-		$localize['nonce']                = wp_create_nonce( 'wpinv-nonce' );
369
-		$localize['txtComplete']          = __( 'Continue', 'invoicing' );
370
-		$localize['UseTaxes']             = wpinv_use_taxes();
371
-		$localize['formNonce']            = wp_create_nonce( 'getpaid_form_nonce' );
372
-		$localize['loading']              = __( 'Loading...', 'invoicing' );
373
-		$localize['connectionError']      = __( 'Could not establish a connection to the server.', 'invoicing' );
374
-		$localize['recaptchaSettings']    = getpaid_get_recaptcha_settings();
375
-
376
-		$localize = apply_filters( 'wpinv_front_js_localize', $localize );
377
-
378
-		// reCaptcha.
379
-		if ( getpaid_is_recaptcha_enabled() && ( $recaptcha_js = getpaid_recaptcha_api_url() ) ) {
380
-			wp_enqueue_script( 'recaptcha', $recaptcha_js, array(), null, true ); // phpcs:ignore WordPress.WP.EnqueuedResourceParameters.MissingVersion
381
-		}
382
-
383
-		wp_enqueue_script( 'wpinv-front-script', WPINV_PLUGIN_URL . 'assets/js/payment-forms.min.js', array( 'jquery' ), WPINV_VERSION, true );
384
-		wp_localize_script( 'wpinv-front-script', 'WPInv', $localize );
385
-	}
386
-
387
-	public function wpinv_actions() {
388
-		if ( isset( $_REQUEST['wpi_action'] ) ) {
389
-			do_action( 'wpinv_' . wpinv_sanitize_key( $_REQUEST['wpi_action'] ), $_REQUEST );
390
-		}
391
-
392
-		if ( defined( 'WP_ALL_IMPORT_ROOT_DIR' ) ) {
393
-			include plugin_dir_path( __FILE__ ) . 'libraries/wp-all-import/class-getpaid-wp-all-import.php';
394
-		}
395
-	}
396
-
397
-	/**
398
-	 * Fires an action after verifying that a user can fire them.
399
-	 *
400
-	 * Note: If the action is on an invoice, subscription etc, esure that the
401
-	 * current user owns the invoice/subscription.
402
-	 */
403
-	public function maybe_do_authenticated_action() {
404
-		if ( isset( $_REQUEST['getpaid-action'] ) && isset( $_REQUEST['getpaid-nonce'] ) && wp_verify_nonce( $_REQUEST['getpaid-nonce'], 'getpaid-nonce' ) ) {
405
-			$key  = sanitize_key( $_REQUEST['getpaid-action'] );
406
-			$data = wp_unslash( $_REQUEST );
407
-
408
-			if ( is_user_logged_in() ) {
409
-				do_action( "getpaid_authenticated_action_$key", $data );
410
-			}
411
-
412
-			do_action( "getpaid_unauthenticated_action_$key", $data );
413
-		}
414
-	}
415
-
416
-	public function pre_get_posts( $wp_query ) {
417
-		if ( ! is_admin() && ! empty( $wp_query->query_vars['post_type'] ) && getpaid_is_invoice_post_type( $wp_query->query_vars['post_type'] ) && is_user_logged_in() && is_single() && $wp_query->is_main_query() ) {
418
-			$wp_query->query_vars['post_status'] = array_keys( wpinv_get_invoice_statuses( false, false, $wp_query->query_vars['post_type'] ) );
419
-		}
420
-
421
-		return $wp_query;
422
-	}
423
-
424
-	/**
425
-	 * Register widgets
426
-	 *
427
-	 */
428
-	public function register_widgets() {
429
-		global $pagenow;
430
-
431
-		// Currently, UX Builder does not work particulaly well with SuperDuper.
432
-		// So we disable our widgets when editing a page with UX Builder.
433
-		if ( function_exists( 'ux_builder_is_active' ) && ux_builder_is_active() ) {
434
-			return;
435
-		}
436
-
437
-		$block_widget_init_screens = function_exists( 'sd_pagenow_exclude' ) ? sd_pagenow_exclude() : array();
438
-
439
-		if ( is_admin() && $pagenow && in_array( $pagenow, $block_widget_init_screens ) ) {
440
-			// don't initiate in these conditions.
441
-		} else {
442
-			// Only load allowed widgets.
443
-			$exclude = function_exists( 'sd_widget_exclude' ) ? sd_widget_exclude() : array();
444
-			$widgets = apply_filters(
445
-				'getpaid_widget_classes',
446
-				array(
447
-					'WPInv_Checkout_Widget',
448
-					'WPInv_History_Widget',
449
-					'WPInv_Receipt_Widget',
450
-					'WPInv_Subscriptions_Widget',
451
-					'WPInv_Buy_Item_Widget',
452
-					'WPInv_Messages_Widget',
453
-					'WPInv_GetPaid_Widget',
454
-					'WPInv_Invoice_Widget',
455
-				)
456
-			);
457
-
458
-			// For each widget...
459
-			foreach ( $widgets as $widget ) {
460
-				// Abort early if it is excluded for this page.
461
-				if ( in_array( $widget, $exclude ) ) {
462
-					continue;
463
-				}
464
-
465
-				// SD V1 used to extend the widget class. V2 does not, so we cannot call register widget on it.
466
-				if ( is_subclass_of( $widget, 'WP_Widget' ) ) {
467
-					register_widget( $widget );
468
-				} else {
469
-					new $widget();
470
-				}
471
-			}
472
-		}
473
-	}
474
-
475
-	/**
476
-	 * Upgrades the database.
477
-	 *
478
-	 * @since 2.0.2
479
-	 */
480
-	public function maybe_upgrade_database() {
481
-		// Ensure the database tables are up to date.
482
-		GetPaid_Installer::maybe_create_db_tables();
483
-
484
-		$wpi_version = get_option( 'wpinv_version', 0 );
485
-
486
-		if ( $wpi_version == WPINV_VERSION ) {
487
-			return;
488
-		}
489
-
490
-		$installer = new GetPaid_Installer();
491
-
492
-		if ( empty( $wpi_version ) ) {
493
-			return $installer->upgrade_db( 0 );
494
-		}
495
-
496
-		$upgrades  = array(
497
-			'0.0.5' => '004',
498
-			'1.0.3' => '102',
499
-			'2.0.0' => '118',
500
-			'2.8.0' => '279',
501
-		);
502
-
503
-		foreach ( $upgrades as $key => $method ) {
504
-			if ( version_compare( $wpi_version, $key, '<' ) ) {
505
-				return $installer->upgrade_db( $method );
506
-			}
507
-		}
508
-	}
509
-
510
-	/**
511
-	 * Flushes the permalinks if needed.
512
-	 *
513
-	 * @since 2.0.8
514
-	 */
515
-	public function maybe_flush_permalinks() {
516
-		$flush = get_option( 'wpinv_flush_permalinks', 0 );
517
-
518
-		if ( ! empty( $flush ) ) {
519
-			flush_rewrite_rules();
520
-			delete_option( 'wpinv_flush_permalinks' );
521
-		}
522
-	}
523
-
524
-	/**
525
-	 * Remove our pages from yoast sitemaps.
526
-	 *
527
-	 * @since 1.0.19
528
-	 * @param int[] $excluded_posts_ids
529
-	 */
530
-	public function wpseo_exclude_from_sitemap_by_post_ids( $excluded_posts_ids ) {
531
-		// Ensure that we have an array.
532
-		if ( ! is_array( $excluded_posts_ids ) ) {
533
-			$excluded_posts_ids = array();
534
-		}
535
-
536
-		// Prepare our pages.
537
-		$our_pages = array();
538
-
539
-		// Checkout page.
540
-		$our_pages[] = wpinv_get_option( 'checkout_page', false );
541
-
542
-		// Success page.
543
-		$our_pages[] = wpinv_get_option( 'success_page', false );
544
-
545
-		// Failure page.
546
-		$our_pages[] = wpinv_get_option( 'failure_page', false );
547
-
548
-		// History page.
549
-		$our_pages[] = wpinv_get_option( 'invoice_history_page', false );
550
-
551
-		// Subscriptions page.
552
-		$our_pages[] = wpinv_get_option( 'invoice_subscription_page', false );
553
-
554
-		$our_pages   = array_map( 'intval', array_filter( $our_pages ) );
555
-
556
-		$excluded_posts_ids = $excluded_posts_ids + $our_pages;
557
-
558
-		return array_unique( $excluded_posts_ids );
559
-	}
560
-
561
-	/**
562
-	 * Remove our pages from yoast sitemaps.
563
-	 *
564
-	 * @since 1.0.19
565
-	 * @param string[] $post_types
566
-	 */
567
-	public function exclude_invoicing_post_types( $post_types ) {
568
-		// Ensure that we have an array.
569
-		if ( ! is_array( $post_types ) ) {
570
-			$post_types = array();
571
-		}
572
-
573
-		// Remove our post types.
574
-		return array_diff( $post_types, array_keys( getpaid_get_invoice_post_types() ) );
575
-	}
576
-
577
-	/**
578
-	 * Displays additional footer code.
579
-	 *
580
-	 * @since 2.0.0
581
-	 */
582
-	public function wp_footer() {
583
-		wpinv_get_template( 'frontend-footer.php' );
584
-	}
585
-
586
-	/**
587
-	 * Displays additional header code.
588
-	 *
589
-	 * @since 2.0.0
590
-	 */
591
-	public function wp_head() {
592
-		wpinv_get_template( 'frontend-head.php' );
593
-	}
594
-
595
-	/**
596
-	 * Custom query vars.
597
-	 *
598
-	 */
599
-	public function custom_query_vars( $vars ) {
600
-		$vars[] = 'getpaid-ipn';
601
-		return $vars;
602
-	}
603
-
604
-	/**
605
-	 * Add rewrite tags and rules.
606
-	 *
607
-	 */
608
-	public function add_rewrite_rule() {
609
-		$tag = 'getpaid-ipn';
610
-		add_rewrite_tag( "%$tag%", '([^&]+)' );
611
-		add_rewrite_rule( "^$tag/([^/]*)/?", "index.php?$tag=\$matches[1]", 'top' );
612
-	}
613
-
614
-	/**
615
-	 * Processes non-query string ipns.
616
-	 *
617
-	 */
618
-	public function maybe_process_new_ipn( $query ) {
619
-		if ( is_admin() || ! $query->is_main_query() ) {
620
-			return;
621
-		}
622
-
623
-		$gateway = get_query_var( 'getpaid-ipn' );
624
-
625
-		if ( ! empty( $gateway ) ) {
626
-			$gateway = sanitize_text_field( $gateway );
627
-			nocache_headers();
628
-			do_action( 'wpinv_verify_payment_ipn', $gateway );
629
-			do_action( "wpinv_verify_{$gateway}_ipn" );
630
-			exit;
631
-		}
632
-	}
17
+    /**
18
+     * GetPaid version.
19
+     *
20
+     * @var string
21
+     */
22
+    public $version;
23
+
24
+    /**
25
+     * Data container.
26
+     *
27
+     * @var array
28
+     */
29
+    protected $data = array();
30
+
31
+    /**
32
+     * Form elements instance.
33
+     *
34
+     * @var WPInv_Payment_Form_Elements
35
+     */
36
+    public $form_elements;
37
+
38
+    /**
39
+     * @var array An array of payment gateways.
40
+     */
41
+    public $gateways;
42
+
43
+    /**
44
+     * Class constructor.
45
+     */
46
+    public function __construct() {
47
+        $this->define_constants();
48
+        $this->includes();
49
+        $this->init_hooks();
50
+        $this->set_properties();
51
+    }
52
+
53
+    /**
54
+     * Sets a custom data property.
55
+     *
56
+     * @param string $prop The prop to set.
57
+     * @param mixed $value The value to retrieve.
58
+     */
59
+    public function set( $prop, $value ) {
60
+        $this->data[ $prop ] = $value;
61
+    }
62
+
63
+    /**
64
+     * Gets a custom data property.
65
+     *
66
+     * @param string $prop The prop to set.
67
+     * @return mixed The value.
68
+     */
69
+    public function get( $prop ) {
70
+        if ( isset( $this->data[ $prop ] ) ) {
71
+            return $this->data[ $prop ];
72
+        }
73
+
74
+        return null;
75
+    }
76
+
77
+    /**
78
+     * Define class properties.
79
+     */
80
+    public function set_properties() {
81
+        // Sessions.
82
+        $this->set( 'session', new WPInv_Session_Handler() );
83
+        $GLOBALS['wpi_session'] = $this->get( 'session' ); // Backwards compatibility.
84
+        $GLOBALS['wpinv_euvat'] = new WPInv_EUVat(); // Backwards compatibility.
85
+
86
+        // Init other objects.
87
+        $this->set( 'notes', new WPInv_Notes() );
88
+        $this->set( 'api', new WPInv_API() );
89
+        $this->set( 'post_types', new GetPaid_Post_Types() );
90
+        $this->set( 'template', new GetPaid_Template() );
91
+        $this->set( 'admin', new GetPaid_Admin() );
92
+        $this->set( 'subscriptions', new WPInv_Subscriptions() );
93
+        $this->set( 'invoice_emails', new GetPaid_Invoice_Notification_Emails() );
94
+        $this->set( 'subscription_emails', new GetPaid_Subscription_Notification_Emails() );
95
+        $this->set( 'daily_maintenace', new GetPaid_Daily_Maintenance() );
96
+        $this->set( 'payment_forms', new GetPaid_Payment_Forms() );
97
+        $this->set( 'maxmind', new GetPaid_MaxMind_Geolocation() );
98
+        $this->set( 'data_retention', new WPInv_Data_Retention() );
99
+    }
100
+
101
+        /**
102
+         * Define plugin constants.
103
+         */
104
+    public function define_constants() {
105
+        define( 'WPINV_PLUGIN_DIR', plugin_dir_path( WPINV_PLUGIN_FILE ) );
106
+        define( 'WPINV_PLUGIN_URL', plugin_dir_url( WPINV_PLUGIN_FILE ) );
107
+        $this->version = WPINV_VERSION;
108
+    }
109
+
110
+    /**
111
+     * Hook into actions and filters.
112
+     *
113
+     * @since 1.0.19
114
+     */
115
+    protected function init_hooks() {
116
+        /* Internationalize the text strings used. */
117
+        add_action( 'plugins_loaded', array( &$this, 'plugins_loaded' ) );
118
+
119
+        // Init the plugin after WordPress inits.
120
+        add_action( 'init', array( $this, 'init' ), 1 );
121
+        add_action( 'init', array( $this, 'maybe_process_ipn' ), 100 );
122
+        add_action( 'init', array( $this, 'wpinv_actions' ) );
123
+        add_action( 'init', array( $this, 'maybe_do_authenticated_action' ), 100 );
124
+        add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ), 11 );
125
+        add_action( 'wp_footer', array( $this, 'wp_footer' ) );
126
+        add_action( 'wp_head', array( $this, 'wp_head' ) );
127
+        add_action( 'widgets_init', array( $this, 'register_widgets' ) );
128
+        add_filter( 'wpseo_exclude_from_sitemap_by_post_ids', array( $this, 'wpseo_exclude_from_sitemap_by_post_ids' ) );
129
+        add_filter( 'the_seo_framework_sitemap_supported_post_types', array( $this, 'exclude_invoicing_post_types' ) );
130
+        add_filter( 'pre_get_posts', array( &$this, 'pre_get_posts' ) );
131
+
132
+        add_filter( 'query_vars', array( $this, 'custom_query_vars' ) );
133
+        add_action( 'init', array( $this, 'add_rewrite_rule' ), 10, 0 );
134
+        add_action( 'pre_get_posts', array( $this, 'maybe_process_new_ipn' ), 1 );
135
+
136
+        // Fires after registering actions.
137
+        do_action( 'wpinv_actions', $this );
138
+        do_action( 'getpaid_actions', $this );
139
+    }
140
+
141
+    public function plugins_loaded() {
142
+        /* Internationalize the text strings used. */
143
+        $this->load_textdomain();
144
+
145
+        do_action( 'wpinv_loaded' );
146
+
147
+        // Fix oxygen page builder conflict
148
+        if ( function_exists( 'ct_css_output' ) ) {
149
+            wpinv_oxygen_fix_conflict();
150
+        }
151
+    }
152
+
153
+    /**
154
+     * Load Localisation files.
155
+     *
156
+     * Note: the first-loaded translation file overrides any following ones if the same translation is present.
157
+     *
158
+     * Locales found in:
159
+     *      - WP_LANG_DIR/plugins/invoicing-LOCALE.mo
160
+     *      - WP_PLUGIN_DIR/invoicing/languages/invoicing-LOCALE.mo
161
+     *
162
+     * @since 1.0.0
163
+     */
164
+    public function load_textdomain() {
165
+        // Determines the current locale.
166
+        if ( function_exists( 'determine_locale' ) ) {
167
+            $locale = determine_locale();
168
+        } else if ( function_exists( 'get_user_locale' ) ) {
169
+            $locale = get_user_locale();
170
+        } else {
171
+            $locale = get_locale();
172
+        }
173
+
174
+        /**
175
+         * Filter the locale to use for translations.
176
+         */
177
+        $locale = apply_filters( 'plugin_locale', $locale, 'invoicing' );
178
+
179
+        unload_textdomain( 'invoicing', true );
180
+        load_textdomain( 'invoicing', WP_LANG_DIR . '/invoicing/invoicing-' . $locale . '.mo' );
181
+        load_plugin_textdomain( 'invoicing', false, plugin_basename( dirname( WPINV_PLUGIN_FILE ) ) . '/languages/' );
182
+    }
183
+
184
+    /**
185
+     * Include required core files used in admin and on the frontend.
186
+     */
187
+    public function includes() {
188
+        // Start with the settings.
189
+        require_once WPINV_PLUGIN_DIR . 'includes/admin/register-settings.php';
190
+
191
+        // Packages/libraries.
192
+        require_once WPINV_PLUGIN_DIR . 'vendor/autoload.php';
193
+        require_once WPINV_PLUGIN_DIR . 'vendor/ayecode/wp-ayecode-ui/ayecode-ui-loader.php';
194
+
195
+        // Load functions.
196
+        require_once WPINV_PLUGIN_DIR . 'includes/deprecated-functions.php';
197
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-email-functions.php';
198
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-general-functions.php';
199
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-helper-functions.php';
200
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-tax-functions.php';
201
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-template-functions.php';
202
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-address-functions.php';
203
+        require_once WPINV_PLUGIN_DIR . 'includes/invoice-functions.php';
204
+        require_once WPINV_PLUGIN_DIR . 'includes/subscription-functions.php';
205
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-item-functions.php';
206
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-discount-functions.php';
207
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-gateway-functions.php';
208
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-payment-functions.php';
209
+        require_once WPINV_PLUGIN_DIR . 'includes/user-functions.php';
210
+        require_once WPINV_PLUGIN_DIR . 'includes/error-functions.php';
211
+
212
+        // Register autoloader.
213
+        try {
214
+            spl_autoload_register( array( $this, 'autoload' ), true );
215
+        } catch ( Exception $e ) {
216
+            wpinv_error_log( $e->getMessage(), '', __FILE__, 149, true );
217
+        }
218
+
219
+        require_once WPINV_PLUGIN_DIR . 'includes/abstracts/abstract-wpinv-session.php';
220
+        require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-session-handler.php';
221
+        require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-ajax.php';
222
+        require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-api.php';
223
+        require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-cache-helper.php';
224
+        require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-db.php';
225
+        require_once WPINV_PLUGIN_DIR . 'includes/admin/subscriptions.php';
226
+        require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-subscriptions-db.php';
227
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-subscription.php';
228
+        require_once WPINV_PLUGIN_DIR . 'includes/abstracts/abstract-wpinv-privacy.php';
229
+        require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-privacy.php';
230
+        require_once WPINV_PLUGIN_DIR . 'includes/libraries/class-ayecode-addons.php';
231
+        require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-addons.php';
232
+        require_once WPINV_PLUGIN_DIR . 'widgets/checkout.php';
233
+        require_once WPINV_PLUGIN_DIR . 'widgets/invoice-history.php';
234
+        require_once WPINV_PLUGIN_DIR . 'widgets/invoice-receipt.php';
235
+        require_once WPINV_PLUGIN_DIR . 'widgets/invoice-messages.php';
236
+        require_once WPINV_PLUGIN_DIR . 'widgets/subscriptions.php';
237
+        require_once WPINV_PLUGIN_DIR . 'widgets/buy-item.php';
238
+        require_once WPINV_PLUGIN_DIR . 'widgets/getpaid.php';
239
+        require_once WPINV_PLUGIN_DIR . 'widgets/invoice.php';
240
+        require_once WPINV_PLUGIN_DIR . 'includes/admin/admin-pages.php';
241
+
242
+        if ( is_admin() || ( defined( 'WP_CLI' ) && WP_CLI ) ) {
243
+            GetPaid_Post_Types_Admin::init();
244
+
245
+            require_once WPINV_PLUGIN_DIR . 'includes/admin/wpinv-admin-functions.php';
246
+            require_once WPINV_PLUGIN_DIR . 'includes/admin/meta-boxes/class-mb-payment-form.php';
247
+            require_once WPINV_PLUGIN_DIR . 'includes/admin/meta-boxes/class-mb-invoice-notes.php';
248
+            require_once WPINV_PLUGIN_DIR . 'includes/admin/class-wpinv-admin-menus.php';
249
+            require_once WPINV_PLUGIN_DIR . 'includes/admin/class-wpinv-users.php';
250
+            require_once WPINV_PLUGIN_DIR . 'includes/admin/class-getpaid-admin-profile.php';
251
+            // load the user class only on the users.php page
252
+            global $pagenow;
253
+            if ( $pagenow == 'users.php' ) {
254
+                new WPInv_Admin_Users();
255
+            }
256
+        }
257
+
258
+        // Register cli commands
259
+        if ( defined( 'WP_CLI' ) && WP_CLI ) {
260
+            require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-cli.php';
261
+            WP_CLI::add_command( 'invoicing', 'WPInv_CLI' );
262
+        }
263
+    }
264
+
265
+    /**
266
+     * Class autoloader
267
+     *
268
+     * @param       string $class_name The name of the class to load.
269
+     * @access      public
270
+     * @since       1.0.19
271
+     * @return      void
272
+     */
273
+    public function autoload( $class_name ) {
274
+        // Normalize the class name...
275
+        $class_name  = strtolower( $class_name );
276
+
277
+        // ... and make sure it is our class.
278
+        if ( false === strpos( $class_name, 'getpaid_' ) && false === strpos( $class_name, 'wpinv_' ) ) {
279
+            return;
280
+        }
281
+
282
+        // Next, prepare the file name from the class.
283
+        $file_name = 'class-' . str_replace( '_', '-', $class_name ) . '.php';
284
+
285
+        // Base path of the classes.
286
+        $plugin_path = untrailingslashit( WPINV_PLUGIN_DIR );
287
+
288
+        // And an array of possible locations in order of importance.
289
+        $locations = array(
290
+            "$plugin_path/includes",
291
+            "$plugin_path/includes/data-stores",
292
+            "$plugin_path/includes/gateways",
293
+            "$plugin_path/includes/payments",
294
+            "$plugin_path/includes/geolocation",
295
+            "$plugin_path/includes/reports",
296
+            "$plugin_path/includes/api",
297
+            "$plugin_path/includes/admin",
298
+            "$plugin_path/includes/admin/meta-boxes",
299
+        );
300
+
301
+        foreach ( apply_filters( 'getpaid_autoload_locations', $locations ) as $location ) {
302
+            if ( file_exists( trailingslashit( $location ) . $file_name ) ) {
303
+                include trailingslashit( $location ) . $file_name;
304
+                break;
305
+            }
306
+        }
307
+    }
308
+
309
+    /**
310
+     * Inits hooks etc.
311
+     */
312
+    public function init() {
313
+        // Fires before getpaid inits.
314
+        do_action( 'before_getpaid_init', $this );
315
+
316
+        // Maybe upgrade.
317
+        $this->maybe_upgrade_database();
318
+
319
+        // Load default gateways.
320
+        $gateways = apply_filters(
321
+            'getpaid_default_gateways',
322
+            array(
323
+                'manual'        => 'GetPaid_Manual_Gateway',
324
+                'paypal'        => 'GetPaid_Paypal_Gateway',
325
+                'worldpay'      => 'GetPaid_Worldpay_Gateway',
326
+                'bank_transfer' => 'GetPaid_Bank_Transfer_Gateway',
327
+                'authorizenet'  => 'GetPaid_Authorize_Net_Gateway',
328
+            )
329
+        );
330
+
331
+        foreach ( $gateways as $id => $class ) {
332
+            $this->gateways[ $id ] = new $class();
333
+        }
334
+
335
+        if ( 'yes' != get_option( 'wpinv_renamed_gateways' ) ) {
336
+            GetPaid_Installer::rename_gateways_label();
337
+            update_option( 'wpinv_renamed_gateways', 'yes' );
338
+        }
339
+
340
+        // Fires after getpaid inits.
341
+        do_action( 'getpaid_init', $this );
342
+    }
343
+
344
+    /**
345
+     * Checks if this is an IPN request and processes it.
346
+     */
347
+    public function maybe_process_ipn() {
348
+        // Ensure that this is an IPN request.
349
+        if ( empty( $_GET['wpi-listener'] ) || 'IPN' !== $_GET['wpi-listener'] || empty( $_GET['wpi-gateway'] ) ) {
350
+            return;
351
+        }
352
+
353
+        $gateway = sanitize_text_field( $_GET['wpi-gateway'] );
354
+
355
+        do_action( 'wpinv_verify_payment_ipn', $gateway );
356
+        do_action( "wpinv_verify_{$gateway}_ipn" );
357
+        exit;
358
+    }
359
+
360
+    public function enqueue_scripts() {
361
+        // Fires before adding scripts.
362
+        do_action( 'getpaid_enqueue_scripts' );
363
+
364
+        $localize                         = array();
365
+        $localize['ajax_url']             = admin_url( 'admin-ajax.php' );
366
+        $localize['thousands']            = wpinv_thousands_separator();
367
+        $localize['decimals']             = wpinv_decimal_separator();
368
+        $localize['nonce']                = wp_create_nonce( 'wpinv-nonce' );
369
+        $localize['txtComplete']          = __( 'Continue', 'invoicing' );
370
+        $localize['UseTaxes']             = wpinv_use_taxes();
371
+        $localize['formNonce']            = wp_create_nonce( 'getpaid_form_nonce' );
372
+        $localize['loading']              = __( 'Loading...', 'invoicing' );
373
+        $localize['connectionError']      = __( 'Could not establish a connection to the server.', 'invoicing' );
374
+        $localize['recaptchaSettings']    = getpaid_get_recaptcha_settings();
375
+
376
+        $localize = apply_filters( 'wpinv_front_js_localize', $localize );
377
+
378
+        // reCaptcha.
379
+        if ( getpaid_is_recaptcha_enabled() && ( $recaptcha_js = getpaid_recaptcha_api_url() ) ) {
380
+            wp_enqueue_script( 'recaptcha', $recaptcha_js, array(), null, true ); // phpcs:ignore WordPress.WP.EnqueuedResourceParameters.MissingVersion
381
+        }
382
+
383
+        wp_enqueue_script( 'wpinv-front-script', WPINV_PLUGIN_URL . 'assets/js/payment-forms.min.js', array( 'jquery' ), WPINV_VERSION, true );
384
+        wp_localize_script( 'wpinv-front-script', 'WPInv', $localize );
385
+    }
386
+
387
+    public function wpinv_actions() {
388
+        if ( isset( $_REQUEST['wpi_action'] ) ) {
389
+            do_action( 'wpinv_' . wpinv_sanitize_key( $_REQUEST['wpi_action'] ), $_REQUEST );
390
+        }
391
+
392
+        if ( defined( 'WP_ALL_IMPORT_ROOT_DIR' ) ) {
393
+            include plugin_dir_path( __FILE__ ) . 'libraries/wp-all-import/class-getpaid-wp-all-import.php';
394
+        }
395
+    }
396
+
397
+    /**
398
+     * Fires an action after verifying that a user can fire them.
399
+     *
400
+     * Note: If the action is on an invoice, subscription etc, esure that the
401
+     * current user owns the invoice/subscription.
402
+     */
403
+    public function maybe_do_authenticated_action() {
404
+        if ( isset( $_REQUEST['getpaid-action'] ) && isset( $_REQUEST['getpaid-nonce'] ) && wp_verify_nonce( $_REQUEST['getpaid-nonce'], 'getpaid-nonce' ) ) {
405
+            $key  = sanitize_key( $_REQUEST['getpaid-action'] );
406
+            $data = wp_unslash( $_REQUEST );
407
+
408
+            if ( is_user_logged_in() ) {
409
+                do_action( "getpaid_authenticated_action_$key", $data );
410
+            }
411
+
412
+            do_action( "getpaid_unauthenticated_action_$key", $data );
413
+        }
414
+    }
415
+
416
+    public function pre_get_posts( $wp_query ) {
417
+        if ( ! is_admin() && ! empty( $wp_query->query_vars['post_type'] ) && getpaid_is_invoice_post_type( $wp_query->query_vars['post_type'] ) && is_user_logged_in() && is_single() && $wp_query->is_main_query() ) {
418
+            $wp_query->query_vars['post_status'] = array_keys( wpinv_get_invoice_statuses( false, false, $wp_query->query_vars['post_type'] ) );
419
+        }
420
+
421
+        return $wp_query;
422
+    }
423
+
424
+    /**
425
+     * Register widgets
426
+     *
427
+     */
428
+    public function register_widgets() {
429
+        global $pagenow;
430
+
431
+        // Currently, UX Builder does not work particulaly well with SuperDuper.
432
+        // So we disable our widgets when editing a page with UX Builder.
433
+        if ( function_exists( 'ux_builder_is_active' ) && ux_builder_is_active() ) {
434
+            return;
435
+        }
436
+
437
+        $block_widget_init_screens = function_exists( 'sd_pagenow_exclude' ) ? sd_pagenow_exclude() : array();
438
+
439
+        if ( is_admin() && $pagenow && in_array( $pagenow, $block_widget_init_screens ) ) {
440
+            // don't initiate in these conditions.
441
+        } else {
442
+            // Only load allowed widgets.
443
+            $exclude = function_exists( 'sd_widget_exclude' ) ? sd_widget_exclude() : array();
444
+            $widgets = apply_filters(
445
+                'getpaid_widget_classes',
446
+                array(
447
+                    'WPInv_Checkout_Widget',
448
+                    'WPInv_History_Widget',
449
+                    'WPInv_Receipt_Widget',
450
+                    'WPInv_Subscriptions_Widget',
451
+                    'WPInv_Buy_Item_Widget',
452
+                    'WPInv_Messages_Widget',
453
+                    'WPInv_GetPaid_Widget',
454
+                    'WPInv_Invoice_Widget',
455
+                )
456
+            );
457
+
458
+            // For each widget...
459
+            foreach ( $widgets as $widget ) {
460
+                // Abort early if it is excluded for this page.
461
+                if ( in_array( $widget, $exclude ) ) {
462
+                    continue;
463
+                }
464
+
465
+                // SD V1 used to extend the widget class. V2 does not, so we cannot call register widget on it.
466
+                if ( is_subclass_of( $widget, 'WP_Widget' ) ) {
467
+                    register_widget( $widget );
468
+                } else {
469
+                    new $widget();
470
+                }
471
+            }
472
+        }
473
+    }
474
+
475
+    /**
476
+     * Upgrades the database.
477
+     *
478
+     * @since 2.0.2
479
+     */
480
+    public function maybe_upgrade_database() {
481
+        // Ensure the database tables are up to date.
482
+        GetPaid_Installer::maybe_create_db_tables();
483
+
484
+        $wpi_version = get_option( 'wpinv_version', 0 );
485
+
486
+        if ( $wpi_version == WPINV_VERSION ) {
487
+            return;
488
+        }
489
+
490
+        $installer = new GetPaid_Installer();
491
+
492
+        if ( empty( $wpi_version ) ) {
493
+            return $installer->upgrade_db( 0 );
494
+        }
495
+
496
+        $upgrades  = array(
497
+            '0.0.5' => '004',
498
+            '1.0.3' => '102',
499
+            '2.0.0' => '118',
500
+            '2.8.0' => '279',
501
+        );
502
+
503
+        foreach ( $upgrades as $key => $method ) {
504
+            if ( version_compare( $wpi_version, $key, '<' ) ) {
505
+                return $installer->upgrade_db( $method );
506
+            }
507
+        }
508
+    }
509
+
510
+    /**
511
+     * Flushes the permalinks if needed.
512
+     *
513
+     * @since 2.0.8
514
+     */
515
+    public function maybe_flush_permalinks() {
516
+        $flush = get_option( 'wpinv_flush_permalinks', 0 );
517
+
518
+        if ( ! empty( $flush ) ) {
519
+            flush_rewrite_rules();
520
+            delete_option( 'wpinv_flush_permalinks' );
521
+        }
522
+    }
523
+
524
+    /**
525
+     * Remove our pages from yoast sitemaps.
526
+     *
527
+     * @since 1.0.19
528
+     * @param int[] $excluded_posts_ids
529
+     */
530
+    public function wpseo_exclude_from_sitemap_by_post_ids( $excluded_posts_ids ) {
531
+        // Ensure that we have an array.
532
+        if ( ! is_array( $excluded_posts_ids ) ) {
533
+            $excluded_posts_ids = array();
534
+        }
535
+
536
+        // Prepare our pages.
537
+        $our_pages = array();
538
+
539
+        // Checkout page.
540
+        $our_pages[] = wpinv_get_option( 'checkout_page', false );
541
+
542
+        // Success page.
543
+        $our_pages[] = wpinv_get_option( 'success_page', false );
544
+
545
+        // Failure page.
546
+        $our_pages[] = wpinv_get_option( 'failure_page', false );
547
+
548
+        // History page.
549
+        $our_pages[] = wpinv_get_option( 'invoice_history_page', false );
550
+
551
+        // Subscriptions page.
552
+        $our_pages[] = wpinv_get_option( 'invoice_subscription_page', false );
553
+
554
+        $our_pages   = array_map( 'intval', array_filter( $our_pages ) );
555
+
556
+        $excluded_posts_ids = $excluded_posts_ids + $our_pages;
557
+
558
+        return array_unique( $excluded_posts_ids );
559
+    }
560
+
561
+    /**
562
+     * Remove our pages from yoast sitemaps.
563
+     *
564
+     * @since 1.0.19
565
+     * @param string[] $post_types
566
+     */
567
+    public function exclude_invoicing_post_types( $post_types ) {
568
+        // Ensure that we have an array.
569
+        if ( ! is_array( $post_types ) ) {
570
+            $post_types = array();
571
+        }
572
+
573
+        // Remove our post types.
574
+        return array_diff( $post_types, array_keys( getpaid_get_invoice_post_types() ) );
575
+    }
576
+
577
+    /**
578
+     * Displays additional footer code.
579
+     *
580
+     * @since 2.0.0
581
+     */
582
+    public function wp_footer() {
583
+        wpinv_get_template( 'frontend-footer.php' );
584
+    }
585
+
586
+    /**
587
+     * Displays additional header code.
588
+     *
589
+     * @since 2.0.0
590
+     */
591
+    public function wp_head() {
592
+        wpinv_get_template( 'frontend-head.php' );
593
+    }
594
+
595
+    /**
596
+     * Custom query vars.
597
+     *
598
+     */
599
+    public function custom_query_vars( $vars ) {
600
+        $vars[] = 'getpaid-ipn';
601
+        return $vars;
602
+    }
603
+
604
+    /**
605
+     * Add rewrite tags and rules.
606
+     *
607
+     */
608
+    public function add_rewrite_rule() {
609
+        $tag = 'getpaid-ipn';
610
+        add_rewrite_tag( "%$tag%", '([^&]+)' );
611
+        add_rewrite_rule( "^$tag/([^/]*)/?", "index.php?$tag=\$matches[1]", 'top' );
612
+    }
613
+
614
+    /**
615
+     * Processes non-query string ipns.
616
+     *
617
+     */
618
+    public function maybe_process_new_ipn( $query ) {
619
+        if ( is_admin() || ! $query->is_main_query() ) {
620
+            return;
621
+        }
622
+
623
+        $gateway = get_query_var( 'getpaid-ipn' );
624
+
625
+        if ( ! empty( $gateway ) ) {
626
+            $gateway = sanitize_text_field( $gateway );
627
+            nocache_headers();
628
+            do_action( 'wpinv_verify_payment_ipn', $gateway );
629
+            do_action( "wpinv_verify_{$gateway}_ipn" );
630
+            exit;
631
+        }
632
+    }
633 633
 }
Please login to merge, or discard this patch.
includes/admin/class-getpaid-installer.php 1 patch
Indentation   +496 added lines, -496 removed lines patch added patch discarded remove patch
@@ -20,411 +20,411 @@  discard block
 block discarded – undo
20 20
  */
21 21
 class GetPaid_Installer {
22 22
 
23
-	private static $schema = null;
24
-	private static $schema_version = null;
25
-
26
-	/**
27
-	 * Upgrades the install.
28
-	 *
29
-	 * @param string $upgrade_from The current invoicing version.
30
-	 */
31
-	public function upgrade_db( $upgrade_from ) {
32
-
33
-		// Save the current invoicing version.
34
-		update_option( 'wpinv_version', WPINV_VERSION );
35
-
36
-		// Setup the invoice Custom Post Type.
37
-		GetPaid_Post_Types::register_post_types();
38
-
39
-		// Clear the permalinks
40
-		flush_rewrite_rules();
41
-
42
-		// Maybe create new/missing pages.
43
-		$this->create_pages();
44
-
45
-		// Maybe re(add) admin capabilities.
46
-		$this->add_capabilities();
47
-
48
-		// Maybe create the default payment form.
49
-		wpinv_get_default_payment_form();
50
-
51
-		// Create any missing database tables.
52
-		$method = "upgrade_from_$upgrade_from";
53
-
54
-		$installed = get_option( 'gepaid_installed_on' );
55
-
56
-		if ( empty( $installed ) ) {
57
-			update_option( 'gepaid_installed_on', time() );
58
-		}
59
-
60
-		if ( method_exists( $this, $method ) ) {
61
-			$this->$method();
62
-		}
63
-
64
-	}
65
-
66
-	/**
67
-	 * Do a fresh install.
68
-	 *
69
-	 */
70
-	public function upgrade_from_0() {
71
-
72
-		// Save default tax rates.
73
-		update_option( 'wpinv_tax_rates', wpinv_get_data( 'tax-rates' ) );
74
-	}
75
-
76
-	/**
77
-	 * Upgrade to 0.0.5
78
-	 *
79
-	 */
80
-	public function upgrade_from_004() {
81
-		global $wpdb;
82
-
83
-		// Invoices.
84
-		$results = $wpdb->get_results( "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'wpi_invoice' AND post_status IN( 'pending', 'processing', 'onhold', 'refunded', 'cancelled', 'failed', 'renewal' )" );
85
-		if ( ! empty( $results ) ) {
86
-			$wpdb->query( "UPDATE {$wpdb->posts} SET post_status = CONCAT( 'wpi-', post_status ) WHERE post_type = 'wpi_invoice' AND post_status IN( 'pending', 'processing', 'onhold', 'refunded', 'cancelled', 'failed', 'renewal' )" );
87
-
88
-			// Clean post cache
89
-			foreach ( $results as $row ) {
90
-				clean_post_cache( $row->ID );
91
-			}
92
-		}
93
-
94
-		// Item meta key changes
95
-		$query = 'SELECT DISTINCT post_id FROM ' . $wpdb->postmeta . " WHERE meta_key IN( '_wpinv_item_id', '_wpinv_package_id', '_wpinv_post_id', '_wpinv_cpt_name', '_wpinv_cpt_singular_name' )";
96
-		$results = $wpdb->get_results( $query );
97
-
98
-		if ( ! empty( $results ) ) {
99
-			$wpdb->query( 'UPDATE ' . $wpdb->postmeta . " SET meta_key = '_wpinv_custom_id' WHERE meta_key IN( '_wpinv_item_id', '_wpinv_package_id', '_wpinv_post_id' )" );
100
-			$wpdb->query( 'UPDATE ' . $wpdb->postmeta . " SET meta_key = '_wpinv_custom_name' WHERE meta_key = '_wpinv_cpt_name'" );
101
-			$wpdb->query( 'UPDATE ' . $wpdb->postmeta . " SET meta_key = '_wpinv_custom_singular_name' WHERE meta_key = '_wpinv_cpt_singular_name'" );
102
-
103
-			foreach ( $results as $row ) {
104
-				clean_post_cache( $row->post_id );
105
-			}
106
-		}
107
-
108
-		$this->upgrade_from_118();
109
-	}
110
-
111
-	/**
112
-	 * Upgrade to version 2.0.0.
113
-	 *
114
-	 */
115
-	public function upgrade_from_118() {
116
-		$this->migrate_old_invoices();
117
-		$this->upgrade_from_279();
118
-	}
119
-
120
-	/**
121
-	 * Upgrade to version 2.0.0.
122
-	 *
123
-	 */
124
-	public function upgrade_from_279() {
125
-		self::migrate_old_customers();
126
-	}
127
-
128
-	/**
129
-	 * Give administrators the capability to manage GetPaid.
130
-	 *
131
-	 */
132
-	public function add_capabilities() {
133
-		$GLOBALS['wp_roles']->add_cap( 'administrator', 'manage_invoicing' );
134
-	}
135
-
136
-	/**
137
-	 * Retreives GetPaid pages.
138
-	 *
139
-	 */
140
-	public static function get_pages() {
141
-
142
-		return apply_filters(
143
-			'wpinv_create_pages',
144
-			array(
145
-
146
-				// Checkout page.
147
-				'checkout_page'             => array(
148
-					'name'    => _x( 'gp-checkout', 'Page slug', 'invoicing' ),
149
-					'title'   => _x( 'Checkout', 'Page title', 'invoicing' ),
150
-					'content' => '
23
+    private static $schema = null;
24
+    private static $schema_version = null;
25
+
26
+    /**
27
+     * Upgrades the install.
28
+     *
29
+     * @param string $upgrade_from The current invoicing version.
30
+     */
31
+    public function upgrade_db( $upgrade_from ) {
32
+
33
+        // Save the current invoicing version.
34
+        update_option( 'wpinv_version', WPINV_VERSION );
35
+
36
+        // Setup the invoice Custom Post Type.
37
+        GetPaid_Post_Types::register_post_types();
38
+
39
+        // Clear the permalinks
40
+        flush_rewrite_rules();
41
+
42
+        // Maybe create new/missing pages.
43
+        $this->create_pages();
44
+
45
+        // Maybe re(add) admin capabilities.
46
+        $this->add_capabilities();
47
+
48
+        // Maybe create the default payment form.
49
+        wpinv_get_default_payment_form();
50
+
51
+        // Create any missing database tables.
52
+        $method = "upgrade_from_$upgrade_from";
53
+
54
+        $installed = get_option( 'gepaid_installed_on' );
55
+
56
+        if ( empty( $installed ) ) {
57
+            update_option( 'gepaid_installed_on', time() );
58
+        }
59
+
60
+        if ( method_exists( $this, $method ) ) {
61
+            $this->$method();
62
+        }
63
+
64
+    }
65
+
66
+    /**
67
+     * Do a fresh install.
68
+     *
69
+     */
70
+    public function upgrade_from_0() {
71
+
72
+        // Save default tax rates.
73
+        update_option( 'wpinv_tax_rates', wpinv_get_data( 'tax-rates' ) );
74
+    }
75
+
76
+    /**
77
+     * Upgrade to 0.0.5
78
+     *
79
+     */
80
+    public function upgrade_from_004() {
81
+        global $wpdb;
82
+
83
+        // Invoices.
84
+        $results = $wpdb->get_results( "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'wpi_invoice' AND post_status IN( 'pending', 'processing', 'onhold', 'refunded', 'cancelled', 'failed', 'renewal' )" );
85
+        if ( ! empty( $results ) ) {
86
+            $wpdb->query( "UPDATE {$wpdb->posts} SET post_status = CONCAT( 'wpi-', post_status ) WHERE post_type = 'wpi_invoice' AND post_status IN( 'pending', 'processing', 'onhold', 'refunded', 'cancelled', 'failed', 'renewal' )" );
87
+
88
+            // Clean post cache
89
+            foreach ( $results as $row ) {
90
+                clean_post_cache( $row->ID );
91
+            }
92
+        }
93
+
94
+        // Item meta key changes
95
+        $query = 'SELECT DISTINCT post_id FROM ' . $wpdb->postmeta . " WHERE meta_key IN( '_wpinv_item_id', '_wpinv_package_id', '_wpinv_post_id', '_wpinv_cpt_name', '_wpinv_cpt_singular_name' )";
96
+        $results = $wpdb->get_results( $query );
97
+
98
+        if ( ! empty( $results ) ) {
99
+            $wpdb->query( 'UPDATE ' . $wpdb->postmeta . " SET meta_key = '_wpinv_custom_id' WHERE meta_key IN( '_wpinv_item_id', '_wpinv_package_id', '_wpinv_post_id' )" );
100
+            $wpdb->query( 'UPDATE ' . $wpdb->postmeta . " SET meta_key = '_wpinv_custom_name' WHERE meta_key = '_wpinv_cpt_name'" );
101
+            $wpdb->query( 'UPDATE ' . $wpdb->postmeta . " SET meta_key = '_wpinv_custom_singular_name' WHERE meta_key = '_wpinv_cpt_singular_name'" );
102
+
103
+            foreach ( $results as $row ) {
104
+                clean_post_cache( $row->post_id );
105
+            }
106
+        }
107
+
108
+        $this->upgrade_from_118();
109
+    }
110
+
111
+    /**
112
+     * Upgrade to version 2.0.0.
113
+     *
114
+     */
115
+    public function upgrade_from_118() {
116
+        $this->migrate_old_invoices();
117
+        $this->upgrade_from_279();
118
+    }
119
+
120
+    /**
121
+     * Upgrade to version 2.0.0.
122
+     *
123
+     */
124
+    public function upgrade_from_279() {
125
+        self::migrate_old_customers();
126
+    }
127
+
128
+    /**
129
+     * Give administrators the capability to manage GetPaid.
130
+     *
131
+     */
132
+    public function add_capabilities() {
133
+        $GLOBALS['wp_roles']->add_cap( 'administrator', 'manage_invoicing' );
134
+    }
135
+
136
+    /**
137
+     * Retreives GetPaid pages.
138
+     *
139
+     */
140
+    public static function get_pages() {
141
+
142
+        return apply_filters(
143
+            'wpinv_create_pages',
144
+            array(
145
+
146
+                // Checkout page.
147
+                'checkout_page'             => array(
148
+                    'name'    => _x( 'gp-checkout', 'Page slug', 'invoicing' ),
149
+                    'title'   => _x( 'Checkout', 'Page title', 'invoicing' ),
150
+                    'content' => '
151 151
 						<!-- wp:shortcode -->
152 152
 						[wpinv_checkout]
153 153
 						<!-- /wp:shortcode -->
154 154
 					',
155
-					'parent'  => '',
156
-				),
157
-
158
-				// Invoice history page.
159
-				'invoice_history_page'      => array(
160
-					'name'    => _x( 'gp-invoices', 'Page slug', 'invoicing' ),
161
-					'title'   => _x( 'My Invoices', 'Page title', 'invoicing' ),
162
-					'content' => '
155
+                    'parent'  => '',
156
+                ),
157
+
158
+                // Invoice history page.
159
+                'invoice_history_page'      => array(
160
+                    'name'    => _x( 'gp-invoices', 'Page slug', 'invoicing' ),
161
+                    'title'   => _x( 'My Invoices', 'Page title', 'invoicing' ),
162
+                    'content' => '
163 163
 					<!-- wp:shortcode -->
164 164
 					[wpinv_history]
165 165
 					<!-- /wp:shortcode -->
166 166
 				',
167
-					'parent'  => '',
168
-				),
169
-
170
-				// Success page content.
171
-				'success_page'              => array(
172
-					'name'    => _x( 'gp-receipt', 'Page slug', 'invoicing' ),
173
-					'title'   => _x( 'Payment Confirmation', 'Page title', 'invoicing' ),
174
-					'content' => '
167
+                    'parent'  => '',
168
+                ),
169
+
170
+                // Success page content.
171
+                'success_page'              => array(
172
+                    'name'    => _x( 'gp-receipt', 'Page slug', 'invoicing' ),
173
+                    'title'   => _x( 'Payment Confirmation', 'Page title', 'invoicing' ),
174
+                    'content' => '
175 175
 					<!-- wp:shortcode -->
176 176
 					[wpinv_receipt]
177 177
 					<!-- /wp:shortcode -->
178 178
 				',
179
-					'parent'  => 'gp-checkout',
180
-				),
181
-
182
-				// Failure page content.
183
-				'failure_page'              => array(
184
-					'name'    => _x( 'gp-transaction-failed', 'Page slug', 'invoicing' ),
185
-					'title'   => _x( 'Transaction Failed', 'Page title', 'invoicing' ),
186
-					'content' => __( 'Your transaction failed, please try again or contact site support.', 'invoicing' ),
187
-					'parent'  => 'gp-checkout',
188
-				),
189
-
190
-				// Subscriptions history page.
191
-				'invoice_subscription_page' => array(
192
-					'name'    => _x( 'gp-subscriptions', 'Page slug', 'invoicing' ),
193
-					'title'   => _x( 'My Subscriptions', 'Page title', 'invoicing' ),
194
-					'content' => '
179
+                    'parent'  => 'gp-checkout',
180
+                ),
181
+
182
+                // Failure page content.
183
+                'failure_page'              => array(
184
+                    'name'    => _x( 'gp-transaction-failed', 'Page slug', 'invoicing' ),
185
+                    'title'   => _x( 'Transaction Failed', 'Page title', 'invoicing' ),
186
+                    'content' => __( 'Your transaction failed, please try again or contact site support.', 'invoicing' ),
187
+                    'parent'  => 'gp-checkout',
188
+                ),
189
+
190
+                // Subscriptions history page.
191
+                'invoice_subscription_page' => array(
192
+                    'name'    => _x( 'gp-subscriptions', 'Page slug', 'invoicing' ),
193
+                    'title'   => _x( 'My Subscriptions', 'Page title', 'invoicing' ),
194
+                    'content' => '
195 195
 					<!-- wp:shortcode -->
196 196
 					[wpinv_subscriptions]
197 197
 					<!-- /wp:shortcode -->
198 198
 				',
199
-					'parent'  => '',
200
-				),
201
-
202
-			)
203
-		);
204
-
205
-	}
206
-
207
-	/**
208
-	 * Re-create GetPaid pages.
209
-	 *
210
-	 */
211
-	public function create_pages() {
212
-
213
-		foreach ( self::get_pages() as $key => $page ) {
214
-			wpinv_create_page( esc_sql( $page['name'] ), $key, $page['title'], $page['content'], $page['parent'] );
215
-		}
216
-
217
-	}
218
-
219
-	/**
220
-	 * Migrates old invoices to new invoices.
221
-	 *
222
-	 */
223
-	public function migrate_old_invoices() {
224
-		global $wpdb;
225
-
226
-		$invoices_table      = $wpdb->prefix . 'getpaid_invoices';
227
-		$invoice_items_table = $wpdb->prefix . 'getpaid_invoice_items';
228
-		$migrated            = $wpdb->get_col( "SELECT post_id FROM $invoices_table" );
229
-		$invoices            = array_unique(
230
-			get_posts(
231
-				array(
232
-					'post_type'      => array( 'wpi_invoice', 'wpi_quote' ),
233
-					'posts_per_page' => -1,
234
-					'fields'         => 'ids',
235
-					'post_status'    => array_keys( get_post_stati() ),
236
-					'exclude'        => (array) $migrated,
237
-				)
238
-			)
239
-		);
240
-
241
-		// Abort if we do not have any invoices.
242
-		if ( empty( $invoices ) ) {
243
-			return;
244
-		}
245
-
246
-		require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-legacy-invoice.php';
247
-
248
-		$invoice_rows = array();
249
-		foreach ( $invoices as $invoice ) {
250
-
251
-			$invoice = new WPInv_Legacy_Invoice( $invoice );
252
-
253
-			if ( empty( $invoice->ID ) ) {
254
-				return;
255
-			}
256
-
257
-			$fields = array(
258
-				'post_id'            => $invoice->ID,
259
-				'number'             => $invoice->get_number(),
260
-				'key'                => $invoice->get_key(),
261
-				'type'               => str_replace( 'wpi_', '', $invoice->post_type ),
262
-				'mode'               => $invoice->mode,
263
-				'user_ip'            => $invoice->get_ip(),
264
-				'first_name'         => $invoice->get_first_name(),
265
-				'last_name'          => $invoice->get_last_name(),
266
-				'address'            => $invoice->get_address(),
267
-				'city'               => $invoice->city,
268
-				'state'              => $invoice->state,
269
-				'country'            => $invoice->country,
270
-				'zip'                => $invoice->zip,
271
-				'adddress_confirmed' => (int) $invoice->adddress_confirmed,
272
-				'gateway'            => $invoice->get_gateway(),
273
-				'transaction_id'     => $invoice->get_transaction_id(),
274
-				'currency'           => $invoice->get_currency(),
275
-				'subtotal'           => $invoice->get_subtotal(),
276
-				'tax'                => $invoice->get_tax(),
277
-				'fees_total'         => $invoice->get_fees_total(),
278
-				'total'              => $invoice->get_total(),
279
-				'discount'           => $invoice->get_discount(),
280
-				'discount_code'      => $invoice->get_discount_code(),
281
-				'disable_taxes'      => $invoice->disable_taxes,
282
-				'due_date'           => $invoice->get_due_date(),
283
-				'completed_date'     => $invoice->get_completed_date(),
284
-				'company'            => $invoice->company,
285
-				'vat_number'         => $invoice->vat_number,
286
-				'vat_rate'           => $invoice->vat_rate,
287
-				'custom_meta'        => $invoice->payment_meta,
288
-			);
289
-
290
-			foreach ( $fields as $key => $val ) {
291
-				if ( is_null( $val ) ) {
292
-					$val = '';
293
-				}
294
-				$val = maybe_serialize( $val );
295
-				$fields[ $key ] = $wpdb->prepare( '%s', $val );
296
-			}
297
-
298
-			$fields = implode( ', ', $fields );
299
-			$invoice_rows[] = "($fields)";
300
-
301
-			$item_rows    = array();
302
-			$item_columns = array();
303
-			foreach ( $invoice->get_cart_details() as $details ) {
304
-				$fields = array(
305
-					'post_id'          => $invoice->ID,
306
-					'item_id'          => $details['id'],
307
-					'item_name'        => $details['name'],
308
-					'item_description' => empty( $details['meta']['description'] ) ? '' : $details['meta']['description'],
309
-					'vat_rate'         => $details['vat_rate'],
310
-					'vat_class'        => empty( $details['vat_class'] ) ? '_standard' : $details['vat_class'],
311
-					'tax'              => $details['tax'],
312
-					'item_price'       => $details['item_price'],
313
-					'custom_price'     => $details['custom_price'],
314
-					'quantity'         => $details['quantity'],
315
-					'discount'         => $details['discount'],
316
-					'subtotal'         => $details['subtotal'],
317
-					'price'            => $details['price'],
318
-					'meta'             => $details['meta'],
319
-					'fees'             => $details['fees'],
320
-				);
321
-
322
-				$item_columns = array_keys( $fields );
323
-
324
-				foreach ( $fields as $key => $val ) {
325
-					if ( is_null( $val ) ) {
326
-						$val = '';
327
-					}
328
-					$val = maybe_serialize( $val );
329
-					$fields[ $key ] = $wpdb->prepare( '%s', $val );
330
-				}
331
-
332
-				$fields = implode( ', ', $fields );
333
-				$item_rows[] = "($fields)";
334
-			}
335
-
336
-			$item_rows    = implode( ', ', $item_rows );
337
-			$item_columns = implode( ', ', $item_columns );
338
-			$wpdb->query( "INSERT INTO $invoice_items_table ($item_columns) VALUES $item_rows" );
339
-		}
340
-
341
-		if ( empty( $invoice_rows ) ) {
342
-			return;
343
-		}
344
-
345
-		$invoice_rows = implode( ', ', $invoice_rows );
346
-		$wpdb->query( "INSERT INTO $invoices_table VALUES $invoice_rows" );
347
-
348
-	}
349
-
350
-	/**
351
-	 * Migrates old customers to new table.
352
-	 *
353
-	 */
354
-	public static function migrate_old_customers() {
355
-		global $wpdb;
356
-
357
-		// Fetch post_id from $wpdb->prefix . 'getpaid_invoices' where customer_id = 0 or null.
358
-		$invoice_ids = $wpdb->get_col( "SELECT post_id FROM {$wpdb->prefix}getpaid_invoices WHERE customer_id = 0 OR customer_id IS NULL" );
359
-
360
-		foreach ( $invoice_ids as $invoice_id ) {
361
-			$invoice = wpinv_get_invoice( $invoice_id );
362
-
363
-			if ( empty( $invoice ) ) {
364
-				continue;
365
-			}
366
-
367
-			// Fetch customer from the user ID.
368
-			$user_id = $invoice->get_user_id();
369
-
370
-			if ( empty( $user_id ) ) {
371
-				continue;
372
-			}
373
-
374
-			$customer = getpaid_get_customer_by_user_id( $user_id );
375
-
376
-			// Create if not exists.
377
-			if ( empty( $customer ) ) {
378
-				$customer = new GetPaid_Customer( 0 );
379
-				$customer->clone_user( $user_id );
380
-				$customer->save();
381
-			}
382
-
383
-			$invoice->set_customer_id( $customer->get_id() );
384
-			$invoice->save();
385
-		}
386
-
387
-	}
388
-
389
-	/**
390
-	 * Migrates old invoices to new invoices.
391
-	 *
392
-	 */
393
-	public static function rename_gateways_label() {
394
-		global $wpdb;
395
-
396
-		foreach ( array_keys( wpinv_get_payment_gateways() ) as $gateway ) {
397
-
398
-			$wpdb->update(
399
-				$wpdb->prefix . 'getpaid_invoices',
400
-				array( 'gateway' => $gateway ),
401
-				array( 'gateway' => wpinv_get_gateway_admin_label( $gateway ) ),
402
-				'%s',
403
-				'%s'
404
-			);
405
-
406
-		}
407
-	}
408
-
409
-	/**
410
-	 * Returns the DB schema.
411
-	 *
412
-	 */
413
-	public static function get_db_schema() {
414
-		global $wpdb;
415
-
416
-		if ( ! empty( self::$schema ) ) {
417
-			return self::$schema;
418
-		}
199
+                    'parent'  => '',
200
+                ),
201
+
202
+            )
203
+        );
204
+
205
+    }
206
+
207
+    /**
208
+     * Re-create GetPaid pages.
209
+     *
210
+     */
211
+    public function create_pages() {
212
+
213
+        foreach ( self::get_pages() as $key => $page ) {
214
+            wpinv_create_page( esc_sql( $page['name'] ), $key, $page['title'], $page['content'], $page['parent'] );
215
+        }
216
+
217
+    }
218
+
219
+    /**
220
+     * Migrates old invoices to new invoices.
221
+     *
222
+     */
223
+    public function migrate_old_invoices() {
224
+        global $wpdb;
225
+
226
+        $invoices_table      = $wpdb->prefix . 'getpaid_invoices';
227
+        $invoice_items_table = $wpdb->prefix . 'getpaid_invoice_items';
228
+        $migrated            = $wpdb->get_col( "SELECT post_id FROM $invoices_table" );
229
+        $invoices            = array_unique(
230
+            get_posts(
231
+                array(
232
+                    'post_type'      => array( 'wpi_invoice', 'wpi_quote' ),
233
+                    'posts_per_page' => -1,
234
+                    'fields'         => 'ids',
235
+                    'post_status'    => array_keys( get_post_stati() ),
236
+                    'exclude'        => (array) $migrated,
237
+                )
238
+            )
239
+        );
240
+
241
+        // Abort if we do not have any invoices.
242
+        if ( empty( $invoices ) ) {
243
+            return;
244
+        }
245
+
246
+        require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-legacy-invoice.php';
247
+
248
+        $invoice_rows = array();
249
+        foreach ( $invoices as $invoice ) {
250
+
251
+            $invoice = new WPInv_Legacy_Invoice( $invoice );
252
+
253
+            if ( empty( $invoice->ID ) ) {
254
+                return;
255
+            }
256
+
257
+            $fields = array(
258
+                'post_id'            => $invoice->ID,
259
+                'number'             => $invoice->get_number(),
260
+                'key'                => $invoice->get_key(),
261
+                'type'               => str_replace( 'wpi_', '', $invoice->post_type ),
262
+                'mode'               => $invoice->mode,
263
+                'user_ip'            => $invoice->get_ip(),
264
+                'first_name'         => $invoice->get_first_name(),
265
+                'last_name'          => $invoice->get_last_name(),
266
+                'address'            => $invoice->get_address(),
267
+                'city'               => $invoice->city,
268
+                'state'              => $invoice->state,
269
+                'country'            => $invoice->country,
270
+                'zip'                => $invoice->zip,
271
+                'adddress_confirmed' => (int) $invoice->adddress_confirmed,
272
+                'gateway'            => $invoice->get_gateway(),
273
+                'transaction_id'     => $invoice->get_transaction_id(),
274
+                'currency'           => $invoice->get_currency(),
275
+                'subtotal'           => $invoice->get_subtotal(),
276
+                'tax'                => $invoice->get_tax(),
277
+                'fees_total'         => $invoice->get_fees_total(),
278
+                'total'              => $invoice->get_total(),
279
+                'discount'           => $invoice->get_discount(),
280
+                'discount_code'      => $invoice->get_discount_code(),
281
+                'disable_taxes'      => $invoice->disable_taxes,
282
+                'due_date'           => $invoice->get_due_date(),
283
+                'completed_date'     => $invoice->get_completed_date(),
284
+                'company'            => $invoice->company,
285
+                'vat_number'         => $invoice->vat_number,
286
+                'vat_rate'           => $invoice->vat_rate,
287
+                'custom_meta'        => $invoice->payment_meta,
288
+            );
289
+
290
+            foreach ( $fields as $key => $val ) {
291
+                if ( is_null( $val ) ) {
292
+                    $val = '';
293
+                }
294
+                $val = maybe_serialize( $val );
295
+                $fields[ $key ] = $wpdb->prepare( '%s', $val );
296
+            }
297
+
298
+            $fields = implode( ', ', $fields );
299
+            $invoice_rows[] = "($fields)";
300
+
301
+            $item_rows    = array();
302
+            $item_columns = array();
303
+            foreach ( $invoice->get_cart_details() as $details ) {
304
+                $fields = array(
305
+                    'post_id'          => $invoice->ID,
306
+                    'item_id'          => $details['id'],
307
+                    'item_name'        => $details['name'],
308
+                    'item_description' => empty( $details['meta']['description'] ) ? '' : $details['meta']['description'],
309
+                    'vat_rate'         => $details['vat_rate'],
310
+                    'vat_class'        => empty( $details['vat_class'] ) ? '_standard' : $details['vat_class'],
311
+                    'tax'              => $details['tax'],
312
+                    'item_price'       => $details['item_price'],
313
+                    'custom_price'     => $details['custom_price'],
314
+                    'quantity'         => $details['quantity'],
315
+                    'discount'         => $details['discount'],
316
+                    'subtotal'         => $details['subtotal'],
317
+                    'price'            => $details['price'],
318
+                    'meta'             => $details['meta'],
319
+                    'fees'             => $details['fees'],
320
+                );
321
+
322
+                $item_columns = array_keys( $fields );
323
+
324
+                foreach ( $fields as $key => $val ) {
325
+                    if ( is_null( $val ) ) {
326
+                        $val = '';
327
+                    }
328
+                    $val = maybe_serialize( $val );
329
+                    $fields[ $key ] = $wpdb->prepare( '%s', $val );
330
+                }
331
+
332
+                $fields = implode( ', ', $fields );
333
+                $item_rows[] = "($fields)";
334
+            }
335
+
336
+            $item_rows    = implode( ', ', $item_rows );
337
+            $item_columns = implode( ', ', $item_columns );
338
+            $wpdb->query( "INSERT INTO $invoice_items_table ($item_columns) VALUES $item_rows" );
339
+        }
340
+
341
+        if ( empty( $invoice_rows ) ) {
342
+            return;
343
+        }
344
+
345
+        $invoice_rows = implode( ', ', $invoice_rows );
346
+        $wpdb->query( "INSERT INTO $invoices_table VALUES $invoice_rows" );
347
+
348
+    }
349
+
350
+    /**
351
+     * Migrates old customers to new table.
352
+     *
353
+     */
354
+    public static function migrate_old_customers() {
355
+        global $wpdb;
356
+
357
+        // Fetch post_id from $wpdb->prefix . 'getpaid_invoices' where customer_id = 0 or null.
358
+        $invoice_ids = $wpdb->get_col( "SELECT post_id FROM {$wpdb->prefix}getpaid_invoices WHERE customer_id = 0 OR customer_id IS NULL" );
359
+
360
+        foreach ( $invoice_ids as $invoice_id ) {
361
+            $invoice = wpinv_get_invoice( $invoice_id );
362
+
363
+            if ( empty( $invoice ) ) {
364
+                continue;
365
+            }
366
+
367
+            // Fetch customer from the user ID.
368
+            $user_id = $invoice->get_user_id();
369
+
370
+            if ( empty( $user_id ) ) {
371
+                continue;
372
+            }
373
+
374
+            $customer = getpaid_get_customer_by_user_id( $user_id );
375
+
376
+            // Create if not exists.
377
+            if ( empty( $customer ) ) {
378
+                $customer = new GetPaid_Customer( 0 );
379
+                $customer->clone_user( $user_id );
380
+                $customer->save();
381
+            }
382
+
383
+            $invoice->set_customer_id( $customer->get_id() );
384
+            $invoice->save();
385
+        }
386
+
387
+    }
388
+
389
+    /**
390
+     * Migrates old invoices to new invoices.
391
+     *
392
+     */
393
+    public static function rename_gateways_label() {
394
+        global $wpdb;
395
+
396
+        foreach ( array_keys( wpinv_get_payment_gateways() ) as $gateway ) {
397
+
398
+            $wpdb->update(
399
+                $wpdb->prefix . 'getpaid_invoices',
400
+                array( 'gateway' => $gateway ),
401
+                array( 'gateway' => wpinv_get_gateway_admin_label( $gateway ) ),
402
+                '%s',
403
+                '%s'
404
+            );
405
+
406
+        }
407
+    }
408
+
409
+    /**
410
+     * Returns the DB schema.
411
+     *
412
+     */
413
+    public static function get_db_schema() {
414
+        global $wpdb;
415
+
416
+        if ( ! empty( self::$schema ) ) {
417
+            return self::$schema;
418
+        }
419 419
 
420
-		require_once ABSPATH . 'wp-admin/includes/upgrade.php';
420
+        require_once ABSPATH . 'wp-admin/includes/upgrade.php';
421 421
 
422
-		$charset_collate = $wpdb->get_charset_collate();
422
+        $charset_collate = $wpdb->get_charset_collate();
423 423
 
424
-		$schema = array();
424
+        $schema = array();
425 425
 
426
-		// Subscriptions.
427
-		$schema['subscriptions'] = "CREATE TABLE {$wpdb->prefix}wpinv_subscriptions (
426
+        // Subscriptions.
427
+        $schema['subscriptions'] = "CREATE TABLE {$wpdb->prefix}wpinv_subscriptions (
428 428
 			id bigint(20) unsigned NOT NULL auto_increment,
429 429
 			customer_id bigint(20) NOT NULL,
430 430
 			frequency int(11) NOT NULL DEFAULT '1',
@@ -447,8 +447,8 @@  discard block
 block discarded – undo
447 447
 			KEY customer_and_status (customer_id, status)
448 448
 		  ) $charset_collate;";
449 449
 
450
-		// Invoices.
451
-		$schema['invoices'] = "CREATE TABLE {$wpdb->prefix}getpaid_invoices (
450
+        // Invoices.
451
+        $schema['invoices'] = "CREATE TABLE {$wpdb->prefix}getpaid_invoices (
452 452
 			post_id BIGINT(20) NOT NULL,
453 453
 			customer_id BIGINT(20) NOT NULL DEFAULT 0,
454 454
             `number` VARCHAR(100),
@@ -486,8 +486,8 @@  discard block
 block discarded – undo
486 486
 			KEY invoice_key (invoice_key)
487 487
 		  ) $charset_collate;";
488 488
 
489
-		// Invoice items.
490
-		$schema['items'] = "CREATE TABLE {$wpdb->prefix}getpaid_invoice_items (
489
+        // Invoice items.
490
+        $schema['items'] = "CREATE TABLE {$wpdb->prefix}getpaid_invoice_items (
491 491
 			ID BIGINT(20) NOT NULL AUTO_INCREMENT,
492 492
             post_id BIGINT(20) NOT NULL,
493 493
             item_id BIGINT(20) NOT NULL,
@@ -509,8 +509,8 @@  discard block
 block discarded – undo
509 509
 			KEY post_id (post_id)
510 510
 		  ) $charset_collate;";
511 511
 
512
-		// Customers.
513
-		$schema['customers'] = "CREATE TABLE {$wpdb->prefix}getpaid_customers (
512
+        // Customers.
513
+        $schema['customers'] = "CREATE TABLE {$wpdb->prefix}getpaid_customers (
514 514
 			id BIGINT(20) NOT NULL AUTO_INCREMENT,
515 515
 			user_id BIGINT(20) NOT NULL,
516 516
 			email VARCHAR(100) NOT NULL,
@@ -520,38 +520,38 @@  discard block
 block discarded – undo
520 520
 			purchase_count BIGINT(20) NOT NULL DEFAULT 0,
521 521
 			";
522 522
 
523
-		// Add address fields.
524
-		foreach ( array_keys( getpaid_user_address_fields( true ) ) as $field ) {
525
-			// Skip id, user_id and email.
526
-			if ( in_array( $field, array( 'id', 'user_id', 'email', 'purchase_value', 'purchase_count', 'date_created', 'date_modified', 'uuid' ), true ) ) {
527
-				continue;
528
-			}
529
-
530
-			$field   = sanitize_key( $field );
531
-			$length  = 100;
532
-			$default = '';
533
-
534
-			// Country.
535
-			if ( 'country' === $field ) {
536
-				$length  = 2;
537
-				$default = wpinv_get_default_country();
538
-			}
539
-
540
-			// State.
541
-			if ( 'state' === $field ) {
542
-				$default = wpinv_get_default_state();
543
-			}
544
-
545
-			// Phone, zip.
546
-			if ( in_array( $field, array( 'phone', 'zip' ), true ) ) {
547
-				$length = 20;
548
-			}
549
-
550
-			$schema['customers'] .= "`$field` VARCHAR($length) NOT NULL DEFAULT '$default',
523
+        // Add address fields.
524
+        foreach ( array_keys( getpaid_user_address_fields( true ) ) as $field ) {
525
+            // Skip id, user_id and email.
526
+            if ( in_array( $field, array( 'id', 'user_id', 'email', 'purchase_value', 'purchase_count', 'date_created', 'date_modified', 'uuid' ), true ) ) {
527
+                continue;
528
+            }
529
+
530
+            $field   = sanitize_key( $field );
531
+            $length  = 100;
532
+            $default = '';
533
+
534
+            // Country.
535
+            if ( 'country' === $field ) {
536
+                $length  = 2;
537
+                $default = wpinv_get_default_country();
538
+            }
539
+
540
+            // State.
541
+            if ( 'state' === $field ) {
542
+                $default = wpinv_get_default_state();
543
+            }
544
+
545
+            // Phone, zip.
546
+            if ( in_array( $field, array( 'phone', 'zip' ), true ) ) {
547
+                $length = 20;
548
+            }
549
+
550
+            $schema['customers'] .= "`$field` VARCHAR($length) NOT NULL DEFAULT '$default',
551 551
 			";
552
-		}
552
+        }
553 553
 
554
-		$schema['customers'] .= "date_created DATETIME NOT NULL,
554
+        $schema['customers'] .= "date_created DATETIME NOT NULL,
555 555
 			date_modified DATETIME NOT NULL,
556 556
 			uuid VARCHAR(100) NOT NULL,
557 557
 			is_anonymized INT(2) NOT NULL DEFAULT 0,
@@ -561,8 +561,8 @@  discard block
 block discarded – undo
561 561
 			KEY email (email)
562 562
 		  ) $charset_collate;";
563 563
 
564
-		// Customer meta.
565
-		$schema['customer_meta'] = "CREATE TABLE {$wpdb->prefix}getpaid_customer_meta (
564
+        // Customer meta.
565
+        $schema['customer_meta'] = "CREATE TABLE {$wpdb->prefix}getpaid_customer_meta (
566 566
 			meta_id BIGINT(20) NOT NULL AUTO_INCREMENT,
567 567
 			customer_id BIGINT(20) NOT NULL,
568 568
 			meta_key VARCHAR(255) NOT NULL,
@@ -572,8 +572,8 @@  discard block
 block discarded – undo
572 572
 			KEY meta_key (meta_key(191))
573 573
 		  ) $charset_collate;";
574 574
 
575
-		// Anonymization Logs.
576
-		$schema['anonymization_logs'] = "CREATE TABLE {$wpdb->prefix}getpaid_anonymization_logs (
575
+        // Anonymization Logs.
576
+        $schema['anonymization_logs'] = "CREATE TABLE {$wpdb->prefix}getpaid_anonymization_logs (
577 577
 			log_id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
578 578
 			user_id BIGINT(20) UNSIGNED NOT NULL,
579 579
 			action VARCHAR(50) NOT NULL,
@@ -587,75 +587,75 @@  discard block
 block discarded – undo
587 587
 			KEY timestamp (timestamp)
588 588
 		) $charset_collate;";
589 589
 
590
-		// Filter.
591
-		$schema = apply_filters( 'getpaid_db_schema', $schema );
592
-
593
-		self::$schema         = implode( "\n", array_values( $schema ) );
594
-		self::$schema_version = md5( sanitize_key( self::$schema ) );
595
-
596
-		return self::$schema;
597
-	}
598
-
599
-	/**
600
-	 * Returns the DB schema version.
601
-	 *
602
-	 */
603
-	public static function get_db_schema_version() {
604
-		if ( ! empty( self::$schema_version ) ) {
605
-			return self::$schema_version;
606
-		}
607
-
608
-		self::get_db_schema();
609
-
610
-		return self::$schema_version;
611
-	}
612
-
613
-	/**
614
-	 * Checks if the db schema is up to date.
615
-	 *
616
-	 * @return bool
617
-	 */
618
-	public static function is_db_schema_up_to_date() {
619
-		return self::get_db_schema_version() === get_option( 'getpaid_db_schema' );
620
-	}
621
-
622
-	/**
623
-	 * Set up the database tables which the plugin needs to function.
624
-	 */
625
-	public static function create_db_tables() {
626
-		global $wpdb;
627
-
628
-		$wpdb->hide_errors();
629
-
630
-		require_once ABSPATH . 'wp-admin/includes/upgrade.php';
631
-
632
-		$schema = self::get_db_schema();
633
-
634
-		// If invoices table exists, rename key to invoice_key.
635
-		$invoices_table = "{$wpdb->prefix}getpaid_invoices";
636
-
637
-		if ( $wpdb->get_var( "SHOW TABLES LIKE '{$wpdb->prefix}getpaid_invoices'" ) === $invoices_table ) {
638
-			$fields = $wpdb->get_results( "SHOW COLUMNS FROM {$wpdb->prefix}getpaid_invoices" );
639
-
640
-			foreach ( $fields as $field ) {
641
-				if ( 'key' === $field->Field ) {
642
-					$wpdb->query( "ALTER TABLE {$wpdb->prefix}getpaid_invoices CHANGE `key` `invoice_key` VARCHAR(100)" );
643
-					break;
644
-				}
645
-			}
646
-		}
647
-
648
-		dbDelta( $schema );
649
-		wp_cache_flush();
650
-		update_option( 'getpaid_db_schema', self::get_db_schema_version() );
651
-	}
652
-
653
-	/**
654
-	 * Creates tables if schema is not up to date.
655
-	 */
656
-	public static function maybe_create_db_tables() {
657
-		if ( ! self::is_db_schema_up_to_date() ) {
658
-			self::create_db_tables();
659
-		}
660
-	}
590
+        // Filter.
591
+        $schema = apply_filters( 'getpaid_db_schema', $schema );
592
+
593
+        self::$schema         = implode( "\n", array_values( $schema ) );
594
+        self::$schema_version = md5( sanitize_key( self::$schema ) );
595
+
596
+        return self::$schema;
597
+    }
598
+
599
+    /**
600
+     * Returns the DB schema version.
601
+     *
602
+     */
603
+    public static function get_db_schema_version() {
604
+        if ( ! empty( self::$schema_version ) ) {
605
+            return self::$schema_version;
606
+        }
607
+
608
+        self::get_db_schema();
609
+
610
+        return self::$schema_version;
611
+    }
612
+
613
+    /**
614
+     * Checks if the db schema is up to date.
615
+     *
616
+     * @return bool
617
+     */
618
+    public static function is_db_schema_up_to_date() {
619
+        return self::get_db_schema_version() === get_option( 'getpaid_db_schema' );
620
+    }
621
+
622
+    /**
623
+     * Set up the database tables which the plugin needs to function.
624
+     */
625
+    public static function create_db_tables() {
626
+        global $wpdb;
627
+
628
+        $wpdb->hide_errors();
629
+
630
+        require_once ABSPATH . 'wp-admin/includes/upgrade.php';
631
+
632
+        $schema = self::get_db_schema();
633
+
634
+        // If invoices table exists, rename key to invoice_key.
635
+        $invoices_table = "{$wpdb->prefix}getpaid_invoices";
636
+
637
+        if ( $wpdb->get_var( "SHOW TABLES LIKE '{$wpdb->prefix}getpaid_invoices'" ) === $invoices_table ) {
638
+            $fields = $wpdb->get_results( "SHOW COLUMNS FROM {$wpdb->prefix}getpaid_invoices" );
639
+
640
+            foreach ( $fields as $field ) {
641
+                if ( 'key' === $field->Field ) {
642
+                    $wpdb->query( "ALTER TABLE {$wpdb->prefix}getpaid_invoices CHANGE `key` `invoice_key` VARCHAR(100)" );
643
+                    break;
644
+                }
645
+            }
646
+        }
647
+
648
+        dbDelta( $schema );
649
+        wp_cache_flush();
650
+        update_option( 'getpaid_db_schema', self::get_db_schema_version() );
651
+    }
652
+
653
+    /**
654
+     * Creates tables if schema is not up to date.
655
+     */
656
+    public static function maybe_create_db_tables() {
657
+        if ( ! self::is_db_schema_up_to_date() ) {
658
+            self::create_db_tables();
659
+        }
660
+    }
661 661
 }
Please login to merge, or discard this patch.
includes/gateways/class-getpaid-bank-transfer-gateway.php 1 patch
Indentation   +363 added lines, -363 removed lines patch added patch discarded remove patch
@@ -13,47 +13,47 @@  discard block
 block discarded – undo
13 13
 class GetPaid_Bank_Transfer_Gateway extends GetPaid_Payment_Gateway {
14 14
 
15 15
     /**
16
-	 * Payment method id.
17
-	 *
18
-	 * @var string
19
-	 */
16
+     * Payment method id.
17
+     *
18
+     * @var string
19
+     */
20 20
     public $id = 'bank_transfer';
21 21
 
22
-	/**
23
-	 * An array of features that this gateway supports.
24
-	 *
25
-	 * @var array
26
-	 */
27
-	protected $supports = array(
28
-		'subscription',
29
-		'addons',
30
-		'single_subscription_group',
31
-		'multiple_subscription_groups',
32
-		'subscription_date_change',
33
-		'subscription_bill_times_change',
34
-	);
22
+    /**
23
+     * An array of features that this gateway supports.
24
+     *
25
+     * @var array
26
+     */
27
+    protected $supports = array(
28
+        'subscription',
29
+        'addons',
30
+        'single_subscription_group',
31
+        'multiple_subscription_groups',
32
+        'subscription_date_change',
33
+        'subscription_bill_times_change',
34
+    );
35
+
36
+    /**
37
+     * Payment method order.
38
+     *
39
+     * @var int
40
+     */
41
+    public $order = 8;
42
+
43
+    /**
44
+     * Bank transfer instructions.
45
+     */
46
+    public $instructions;
35 47
 
36 48
     /**
37
-	 * Payment method order.
38
-	 *
39
-	 * @var int
40
-	 */
41
-	public $order = 8;
42
-
43
-	/**
44
-	 * Bank transfer instructions.
45
-	 */
46
-	public $instructions;
47
-
48
-	/**
49
-	 * Locale array.
50
-	 */
51
-	public $locale;
49
+     * Locale array.
50
+     */
51
+    public $locale;
52 52
 
53 53
     /**
54
-	 * Class constructor.
55
-	 */
56
-	public function __construct() {
54
+     * Class constructor.
55
+     */
56
+    public function __construct() {
57 57
         parent::__construct();
58 58
 
59 59
         $this->title                = __( 'Direct bank transfer', 'invoicing' );
@@ -61,43 +61,43 @@  discard block
 block discarded – undo
61 61
         $this->checkout_button_text = __( 'Proceed', 'invoicing' );
62 62
         $this->instructions         = apply_filters( 'wpinv_bank_instructions', $this->get_option( 'info' ) );
63 63
 
64
-		add_action( 'wpinv_receipt_end', array( $this, 'thankyou_page' ) );
65
-		add_action( 'getpaid_invoice_line_items', array( $this, 'thankyou_page' ), 40 );
66
-		add_action( 'wpinv_pdf_content_billing', array( $this, 'thankyou_page' ), 11 );
67
-		add_action( 'wpinv_email_invoice_details', array( $this, 'email_instructions' ), 10, 3 );
68
-		add_action( 'getpaid_should_renew_subscription', array( $this, 'maybe_renew_subscription' ), 12, 2 );
69
-		add_action( 'getpaid_invoice_status_publish', array( $this, 'invoice_paid' ), 20 );
70
-
71
-		add_filter( 'wpinv_' . $this->id . '_support_subscription', array( $this, 'supports_subscription' ), 20, 1 );
72
-		add_filter( 'getpaid_' . $this->id . '_support_subscription', array( $this, 'supports_subscription' ), 20, 1 );
73
-		add_filter( 'getpaid_' . $this->id . '_supports_subscription', array( $this, 'supports_subscription' ), 20, 1 );
74
-	}
75
-
76
-	/**
77
-	 * Check gateway supports for subscription.
78
-	 *
79
-	 * @since 2.8.24
80
-	 *
81
-	 * @param bool $supports True if supports else False.
82
-	 * @return bool True if supports else False.
83
-	 */
84
-	public function supports_subscription( $supports ) {
85
-		if ( $supports && (int) $this->get_option( 'no_subscription' ) ) {
86
-			$supports = false;
87
-		}
88
-
89
-		return $supports;
90
-	}
91
-
92
-	/**
93
-	 * Process Payment.
94
-	 *
95
-	 * @param WPInv_Invoice $invoice Invoice.
96
-	 * @param array $submission_data Posted checkout fields.
97
-	 * @param GetPaid_Payment_Form_Submission $submission Checkout submission.
98
-	 * @return array
99
-	 */
100
-	public function process_payment( $invoice, $submission_data, $submission ) {
64
+        add_action( 'wpinv_receipt_end', array( $this, 'thankyou_page' ) );
65
+        add_action( 'getpaid_invoice_line_items', array( $this, 'thankyou_page' ), 40 );
66
+        add_action( 'wpinv_pdf_content_billing', array( $this, 'thankyou_page' ), 11 );
67
+        add_action( 'wpinv_email_invoice_details', array( $this, 'email_instructions' ), 10, 3 );
68
+        add_action( 'getpaid_should_renew_subscription', array( $this, 'maybe_renew_subscription' ), 12, 2 );
69
+        add_action( 'getpaid_invoice_status_publish', array( $this, 'invoice_paid' ), 20 );
70
+
71
+        add_filter( 'wpinv_' . $this->id . '_support_subscription', array( $this, 'supports_subscription' ), 20, 1 );
72
+        add_filter( 'getpaid_' . $this->id . '_support_subscription', array( $this, 'supports_subscription' ), 20, 1 );
73
+        add_filter( 'getpaid_' . $this->id . '_supports_subscription', array( $this, 'supports_subscription' ), 20, 1 );
74
+    }
75
+
76
+    /**
77
+     * Check gateway supports for subscription.
78
+     *
79
+     * @since 2.8.24
80
+     *
81
+     * @param bool $supports True if supports else False.
82
+     * @return bool True if supports else False.
83
+     */
84
+    public function supports_subscription( $supports ) {
85
+        if ( $supports && (int) $this->get_option( 'no_subscription' ) ) {
86
+            $supports = false;
87
+        }
88
+
89
+        return $supports;
90
+    }
91
+
92
+    /**
93
+     * Process Payment.
94
+     *
95
+     * @param WPInv_Invoice $invoice Invoice.
96
+     * @param array $submission_data Posted checkout fields.
97
+     * @param GetPaid_Payment_Form_Submission $submission Checkout submission.
98
+     * @return array
99
+     */
100
+    public function process_payment( $invoice, $submission_data, $submission ) {
101 101
 
102 102
         // Add a transaction id.
103 103
         $invoice->set_transaction_id( $invoice->generate_key( 'bt_' ) );
@@ -118,66 +118,66 @@  discard block
 block discarded – undo
118 118
     }
119 119
 
120 120
     /**
121
-	 * Output for the order received page.
122
-	 *
123
-	 * @param WPInv_Invoice $invoice Invoice.
124
-	 */
125
-	public function thankyou_page( $invoice ) {
121
+     * Output for the order received page.
122
+     *
123
+     * @param WPInv_Invoice $invoice Invoice.
124
+     */
125
+    public function thankyou_page( $invoice ) {
126 126
 
127 127
         if ( 'bank_transfer' === $invoice->get_gateway() && $invoice->needs_payment() ) {
128 128
 
129
-			echo '<div class="mt-4 mb-2 getpaid-bank-transfer-details">' . PHP_EOL;
129
+            echo '<div class="mt-4 mb-2 getpaid-bank-transfer-details">' . PHP_EOL;
130 130
 
131 131
             if ( ! empty( $this->instructions ) ) {
132 132
                 echo wp_kses_post( wpautop( wptexturize( $this->instructions ) ) );
133
-			}
133
+            }
134 134
 
135
-			$this->bank_details( $invoice );
135
+            $this->bank_details( $invoice );
136 136
 
137
-			echo '</div>';
137
+            echo '</div>';
138 138
 
139 139
         }
140 140
 
141
-	}
141
+    }
142 142
 
143 143
     /**
144
-	 * Add content to the WPI emails.
145
-	 *
146
-	 * @param WPInv_Invoice $invoice Invoice.
147
-	 * @param string     $email_type Email format: plain text or HTML.
148
-	 * @param bool     $sent_to_admin Sent to admin.
149
-	 */
150
-	public function email_instructions( $invoice, $email_type, $sent_to_admin ) {
144
+     * Add content to the WPI emails.
145
+     *
146
+     * @param WPInv_Invoice $invoice Invoice.
147
+     * @param string     $email_type Email format: plain text or HTML.
148
+     * @param bool     $sent_to_admin Sent to admin.
149
+     */
150
+    public function email_instructions( $invoice, $email_type, $sent_to_admin ) {
151 151
 
152
-		if ( ! $sent_to_admin && 'bank_transfer' === $invoice->get_gateway() && $invoice->needs_payment() ) {
152
+        if ( ! $sent_to_admin && 'bank_transfer' === $invoice->get_gateway() && $invoice->needs_payment() ) {
153 153
 
154
-			echo '<div class="wpi-email-row getpaid-bank-transfer-details">';
154
+            echo '<div class="wpi-email-row getpaid-bank-transfer-details">';
155 155
 
156
-			if ( $this->instructions ) {
157
-				echo wp_kses_post( wpautop( wptexturize( $this->instructions ) ) . PHP_EOL );
156
+            if ( $this->instructions ) {
157
+                echo wp_kses_post( wpautop( wptexturize( $this->instructions ) ) . PHP_EOL );
158 158
             }
159 159
 
160
-			$this->bank_details( $invoice );
160
+            $this->bank_details( $invoice );
161 161
 
162
-			echo '</div>';
162
+            echo '</div>';
163 163
 
164
-		}
164
+        }
165 165
 
166 166
     }
167 167
 
168 168
     /**
169
-	 * Get bank details and place into a list format.
170
-	 *
171
-	 * @param WPInv_Invoice $invoice Invoice.
172
-	 */
173
-	protected function bank_details( $invoice ) {
169
+     * Get bank details and place into a list format.
170
+     *
171
+     * @param WPInv_Invoice $invoice Invoice.
172
+     */
173
+    protected function bank_details( $invoice ) {
174 174
 
175
-		// Get the invoice country and country $locale.
176
-		$country = $invoice->get_country();
177
-		$locale  = $this->get_country_locale();
175
+        // Get the invoice country and country $locale.
176
+        $country = $invoice->get_country();
177
+        $locale  = $this->get_country_locale();
178 178
 
179
-		// Get shortcode label in the $locale array and use appropriate one.
180
-		$sortcode = isset( $locale[ $country ]['sortcode']['label'] ) ? $locale[ $country ]['sortcode']['label'] : __( 'Sort code', 'invoicing' );
179
+        // Get shortcode label in the $locale array and use appropriate one.
180
+        $sortcode = isset( $locale[ $country ]['sortcode']['label'] ) ? $locale[ $country ]['sortcode']['label'] : __( 'Sort code', 'invoicing' );
181 181
 
182 182
         $bank_fields = array(
183 183
             'ac_name'   => __( 'Account Name', 'invoicing' ),
@@ -196,11 +196,11 @@  discard block
 block discarded – undo
196 196
 
197 197
             if ( ! empty( $value ) ) {
198 198
                 $bank_info[ $field ] = array(
199
-					'label' => $label,
200
-					'value' => $value,
201
-				);
199
+                    'label' => $label,
200
+                    'value' => $value,
201
+                );
202 202
             }
203
-		}
203
+        }
204 204
 
205 205
         $bank_info = apply_filters( 'wpinv_bank_info', $bank_info, $invoice );
206 206
 
@@ -208,177 +208,177 @@  discard block
 block discarded – undo
208 208
             return;
209 209
         }
210 210
 
211
-		echo '<h3 class="getpaid-bank-transfer-title"> ' . esc_html( apply_filters( 'wpinv_receipt_bank_details_title', __( 'Bank Details', 'invoicing' ), $invoice ) ) . '</h3>' . PHP_EOL;
211
+        echo '<h3 class="getpaid-bank-transfer-title"> ' . esc_html( apply_filters( 'wpinv_receipt_bank_details_title', __( 'Bank Details', 'invoicing' ), $invoice ) ) . '</h3>' . PHP_EOL;
212
+
213
+        echo '<table class="table table-bordered getpaid-bank-transfer-details">' . PHP_EOL;
214
+
215
+        foreach ( $bank_info as $key => $data ) {
216
+            echo "<tr class='getpaid-bank-transfer-" . esc_attr( $key ) . "'><th class='font-weight-bold'>" . wp_kses_post( $data['label'] ) . "</th><td class='w-75'>" . wp_kses_post( wptexturize( $data['value'] ) ) . '</td></tr>' . PHP_EOL;
217
+        }
218
+
219
+        echo '</table>';
220
+
221
+    }
222
+
223
+    /**
224
+     * Get country locale if localized.
225
+     *
226
+     * @return array
227
+     */
228
+    public function get_country_locale() {
229
+
230
+        if ( empty( $this->locale ) ) {
231
+
232
+            // Locale information to be used - only those that are not 'Sort Code'.
233
+            $this->locale = apply_filters(
234
+                'getpaid_get_bank_transfer_locale',
235
+                array(
236
+                    'AU' => array(
237
+                        'sortcode' => array(
238
+                            'label' => __( 'BSB', 'invoicing' ),
239
+                        ),
240
+                    ),
241
+                    'CA' => array(
242
+                        'sortcode' => array(
243
+                            'label' => __( 'Bank transit number', 'invoicing' ),
244
+                        ),
245
+                    ),
246
+                    'IN' => array(
247
+                        'sortcode' => array(
248
+                            'label' => __( 'IFSC', 'invoicing' ),
249
+                        ),
250
+                    ),
251
+                    'IT' => array(
252
+                        'sortcode' => array(
253
+                            'label' => __( 'Branch sort', 'invoicing' ),
254
+                        ),
255
+                    ),
256
+                    'NZ' => array(
257
+                        'sortcode' => array(
258
+                            'label' => __( 'Bank code', 'invoicing' ),
259
+                        ),
260
+                    ),
261
+                    'SE' => array(
262
+                        'sortcode' => array(
263
+                            'label' => __( 'Bank code', 'invoicing' ),
264
+                        ),
265
+                    ),
266
+                    'US' => array(
267
+                        'sortcode' => array(
268
+                            'label' => __( 'Routing number', 'invoicing' ),
269
+                        ),
270
+                    ),
271
+                    'ZA' => array(
272
+                        'sortcode' => array(
273
+                            'label' => __( 'Branch code', 'invoicing' ),
274
+                        ),
275
+                    ),
276
+                )
277
+            );
278
+
279
+        }
280
+
281
+        return $this->locale;
282
+
283
+    }
284
+
285
+    /**
286
+     * Filters the gateway settings.
287
+     *
288
+     * @param array $admin_settings
289
+     */
290
+    public function admin_settings( $admin_settings ) {
291
+        $admin_settings['bank_transfer_desc']['std']    = __( "Make your payment directly into our bank account. Please use your Invoice Number as the payment reference. Your invoice won't be processed until the funds have cleared in our account.", 'invoicing' );
292
+        $admin_settings['bank_transfer_active']['desc'] = __( 'Enable bank transfer', 'invoicing' );
293
+
294
+        $_settings = array();
295
+
296
+        foreach ( $admin_settings as $key => $setting ) {
297
+            $_settings[ $key ] = $setting;
298
+
299
+            if ( $key == 'bank_transfer_active' ) {
300
+                // Enable/disable subscriptions setting.
301
+                $_settings['bank_transfer_no_subscription'] = array(
302
+                    'id' => 'bank_transfer_no_subscription',
303
+                    'type' => 'checkbox',
304
+                    'name' => __( 'Disable Subscriptions', 'invoicing' ),
305
+                    'desc' => __( 'Tick to disable support for recurring items.', 'invoicing' ),
306
+                    'std' => 0
307
+                );
308
+            }
309
+        }
310
+
311
+        $admin_settings = $_settings;
312
+
313
+        $locale  = $this->get_country_locale();
314
+
315
+        // Get sortcode label in the $locale array and use appropriate one.
316
+        $country  = wpinv_default_billing_country();
317
+        $sortcode = isset( $locale[ $country ]['sortcode']['label'] ) ? $locale[ $country ]['sortcode']['label'] : __( 'Sort code', 'invoicing' );
318
+
319
+        $admin_settings['bank_transfer_ac_name'] = array(
320
+            'type' => 'text',
321
+            'id'   => 'bank_transfer_ac_name',
322
+            'name' => __( 'Account Name', 'invoicing' ),
323
+        );
324
+
325
+        $admin_settings['bank_transfer_ac_no'] = array(
326
+            'type' => 'text',
327
+            'id'   => 'bank_transfer_ac_no',
328
+            'name' => __( 'Account Number', 'invoicing' ),
329
+        );
330
+
331
+        $admin_settings['bank_transfer_bank_name'] = array(
332
+            'type' => 'text',
333
+            'id'   => 'bank_transfer_bank_name',
334
+            'name' => __( 'Bank Name', 'invoicing' ),
335
+        );
212 336
 
213
-		echo '<table class="table table-bordered getpaid-bank-transfer-details">' . PHP_EOL;
337
+        $admin_settings['bank_transfer_ifsc'] = array(
338
+            'type' => 'text',
339
+            'id'   => 'bank_transfer_ifsc',
340
+            'name' => __( 'IFSC Code', 'invoicing' ),
341
+        );
342
+
343
+        $admin_settings['bank_transfer_iban'] = array(
344
+            'type' => 'text',
345
+            'id'   => 'bank_transfer_iban',
346
+            'name' => __( 'IBAN', 'invoicing' ),
347
+        );
348
+
349
+        $admin_settings['bank_transfer_bic'] = array(
350
+            'type' => 'text',
351
+            'id'   => 'bank_transfer_bic',
352
+            'name' => __( 'BIC/Swift Code', 'invoicing' ),
353
+        );
214 354
 
215
-		foreach ( $bank_info as $key => $data ) {
216
-			echo "<tr class='getpaid-bank-transfer-" . esc_attr( $key ) . "'><th class='font-weight-bold'>" . wp_kses_post( $data['label'] ) . "</th><td class='w-75'>" . wp_kses_post( wptexturize( $data['value'] ) ) . '</td></tr>' . PHP_EOL;
217
-		}
355
+        $admin_settings['bank_transfer_sort_code'] = array(
356
+            'type' => 'text',
357
+            'id'   => 'bank_transfer_sort_code',
358
+            'name' => $sortcode,
359
+        );
218 360
 
219
-		echo '</table>';
361
+        $admin_settings['bank_transfer_info'] = array(
362
+            'id'   => 'bank_transfer_info',
363
+            'name' => __( 'Instructions', 'invoicing' ),
364
+            'desc' => __( 'Instructions that will be added to the thank you page and emails.', 'invoicing' ),
365
+            'type' => 'textarea',
366
+            'std'  => __( "Make your payment directly into our bank account. Please use your Invoice Number as the payment reference. Your invoice won't be processed until the funds have cleared in our account.", 'invoicing' ),
367
+            'cols' => 50,
368
+            'rows' => 5,
369
+        );
220 370
 
371
+        return $admin_settings;
221 372
     }
222 373
 
223 374
     /**
224
-	 * Get country locale if localized.
225
-	 *
226
-	 * @return array
227
-	 */
228
-	public function get_country_locale() {
229
-
230
-		if ( empty( $this->locale ) ) {
231
-
232
-			// Locale information to be used - only those that are not 'Sort Code'.
233
-			$this->locale = apply_filters(
234
-				'getpaid_get_bank_transfer_locale',
235
-				array(
236
-					'AU' => array(
237
-						'sortcode' => array(
238
-							'label' => __( 'BSB', 'invoicing' ),
239
-						),
240
-					),
241
-					'CA' => array(
242
-						'sortcode' => array(
243
-							'label' => __( 'Bank transit number', 'invoicing' ),
244
-						),
245
-					),
246
-					'IN' => array(
247
-						'sortcode' => array(
248
-							'label' => __( 'IFSC', 'invoicing' ),
249
-						),
250
-					),
251
-					'IT' => array(
252
-						'sortcode' => array(
253
-							'label' => __( 'Branch sort', 'invoicing' ),
254
-						),
255
-					),
256
-					'NZ' => array(
257
-						'sortcode' => array(
258
-							'label' => __( 'Bank code', 'invoicing' ),
259
-						),
260
-					),
261
-					'SE' => array(
262
-						'sortcode' => array(
263
-							'label' => __( 'Bank code', 'invoicing' ),
264
-						),
265
-					),
266
-					'US' => array(
267
-						'sortcode' => array(
268
-							'label' => __( 'Routing number', 'invoicing' ),
269
-						),
270
-					),
271
-					'ZA' => array(
272
-						'sortcode' => array(
273
-							'label' => __( 'Branch code', 'invoicing' ),
274
-						),
275
-					),
276
-				)
277
-			);
278
-
279
-		}
280
-
281
-		return $this->locale;
282
-
283
-	}
284
-
285
-	/**
286
-	 * Filters the gateway settings.
287
-	 *
288
-	 * @param array $admin_settings
289
-	 */
290
-	public function admin_settings( $admin_settings ) {
291
-		$admin_settings['bank_transfer_desc']['std']    = __( "Make your payment directly into our bank account. Please use your Invoice Number as the payment reference. Your invoice won't be processed until the funds have cleared in our account.", 'invoicing' );
292
-		$admin_settings['bank_transfer_active']['desc'] = __( 'Enable bank transfer', 'invoicing' );
293
-
294
-		$_settings = array();
295
-
296
-		foreach ( $admin_settings as $key => $setting ) {
297
-			$_settings[ $key ] = $setting;
298
-
299
-			if ( $key == 'bank_transfer_active' ) {
300
-				// Enable/disable subscriptions setting.
301
-				$_settings['bank_transfer_no_subscription'] = array(
302
-					'id' => 'bank_transfer_no_subscription',
303
-					'type' => 'checkbox',
304
-					'name' => __( 'Disable Subscriptions', 'invoicing' ),
305
-					'desc' => __( 'Tick to disable support for recurring items.', 'invoicing' ),
306
-					'std' => 0
307
-				);
308
-			}
309
-		}
310
-
311
-		$admin_settings = $_settings;
312
-
313
-		$locale  = $this->get_country_locale();
314
-
315
-		// Get sortcode label in the $locale array and use appropriate one.
316
-		$country  = wpinv_default_billing_country();
317
-		$sortcode = isset( $locale[ $country ]['sortcode']['label'] ) ? $locale[ $country ]['sortcode']['label'] : __( 'Sort code', 'invoicing' );
318
-
319
-		$admin_settings['bank_transfer_ac_name'] = array(
320
-			'type' => 'text',
321
-			'id'   => 'bank_transfer_ac_name',
322
-			'name' => __( 'Account Name', 'invoicing' ),
323
-		);
324
-
325
-		$admin_settings['bank_transfer_ac_no'] = array(
326
-			'type' => 'text',
327
-			'id'   => 'bank_transfer_ac_no',
328
-			'name' => __( 'Account Number', 'invoicing' ),
329
-		);
330
-
331
-		$admin_settings['bank_transfer_bank_name'] = array(
332
-			'type' => 'text',
333
-			'id'   => 'bank_transfer_bank_name',
334
-			'name' => __( 'Bank Name', 'invoicing' ),
335
-		);
336
-
337
-		$admin_settings['bank_transfer_ifsc'] = array(
338
-			'type' => 'text',
339
-			'id'   => 'bank_transfer_ifsc',
340
-			'name' => __( 'IFSC Code', 'invoicing' ),
341
-		);
342
-
343
-		$admin_settings['bank_transfer_iban'] = array(
344
-			'type' => 'text',
345
-			'id'   => 'bank_transfer_iban',
346
-			'name' => __( 'IBAN', 'invoicing' ),
347
-		);
348
-
349
-		$admin_settings['bank_transfer_bic'] = array(
350
-			'type' => 'text',
351
-			'id'   => 'bank_transfer_bic',
352
-			'name' => __( 'BIC/Swift Code', 'invoicing' ),
353
-		);
354
-
355
-		$admin_settings['bank_transfer_sort_code'] = array(
356
-			'type' => 'text',
357
-			'id'   => 'bank_transfer_sort_code',
358
-			'name' => $sortcode,
359
-		);
360
-
361
-		$admin_settings['bank_transfer_info'] = array(
362
-			'id'   => 'bank_transfer_info',
363
-			'name' => __( 'Instructions', 'invoicing' ),
364
-			'desc' => __( 'Instructions that will be added to the thank you page and emails.', 'invoicing' ),
365
-			'type' => 'textarea',
366
-			'std'  => __( "Make your payment directly into our bank account. Please use your Invoice Number as the payment reference. Your invoice won't be processed until the funds have cleared in our account.", 'invoicing' ),
367
-			'cols' => 50,
368
-			'rows' => 5,
369
-		);
370
-
371
-		return $admin_settings;
372
-	}
373
-
374
-	/**
375
-	 * Processes invoice addons.
376
-	 *
377
-	 * @param WPInv_Invoice $invoice
378
-	 * @param GetPaid_Form_Item[] $items
379
-	 * @return WPInv_Invoice
380
-	 */
381
-	public function process_addons( $invoice, $items ) {
375
+     * Processes invoice addons.
376
+     *
377
+     * @param WPInv_Invoice $invoice
378
+     * @param GetPaid_Form_Item[] $items
379
+     * @return WPInv_Invoice
380
+     */
381
+    public function process_addons( $invoice, $items ) {
382 382
 
383 383
         foreach ( $items as $item ) {
384 384
             $invoice->add_item( $item );
@@ -386,98 +386,98 @@  discard block
 block discarded – undo
386 386
 
387 387
         $invoice->recalculate_total();
388 388
         $invoice->save();
389
-	}
390
-
391
-	/**
392
-	 * (Maybe) renews a bank transfer subscription profile.
393
-	 *
394
-	 *
395
-	 * @param WPInv_Subscription $subscription
396
-	 */
397
-	public function maybe_renew_subscription( $subscription, $parent_invoice ) {
398
-		// Ensure its our subscription && it's active.
399
-		if ( ! empty( $parent_invoice ) && $this->id === $parent_invoice->get_gateway() && $subscription->has_status( 'active trialling' ) ) {
400
-			add_filter( 'getpaid_invoice_notifications_is_payment_form_invoice', array( $this, 'force_is_payment_form_invoice' ), 10, 2 );
401
-
402
-			$invoice = $subscription->create_payment();
403
-
404
-			if ( ! empty( $invoice ) ) {
405
-				$is_logged_in = is_user_logged_in();
406
-
407
-				// Cron run.
408
-				if ( ! $is_logged_in ) {
409
-					$note = wp_sprintf( __( 'Renewal %1$s created with the status "%2$s".', 'invoicing' ), $invoice->get_invoice_quote_type(), wpinv_status_nicename( $invoice->get_status(), $invoice ) );
410
-
411
-					$invoice->add_note( $note, false, $is_logged_in, ! $is_logged_in );
412
-				}
413
-			}
414
-
415
-			remove_filter( 'getpaid_invoice_notifications_is_payment_form_invoice', array( $this, 'force_is_payment_form_invoice' ), 10, 2 );
416
-		}
417
-	}
418
-
419
-	/**
420
-	 * Process a bank transfer payment.
421
-	 *
422
-	 *
389
+    }
390
+
391
+    /**
392
+     * (Maybe) renews a bank transfer subscription profile.
393
+     *
394
+     *
395
+     * @param WPInv_Subscription $subscription
396
+     */
397
+    public function maybe_renew_subscription( $subscription, $parent_invoice ) {
398
+        // Ensure its our subscription && it's active.
399
+        if ( ! empty( $parent_invoice ) && $this->id === $parent_invoice->get_gateway() && $subscription->has_status( 'active trialling' ) ) {
400
+            add_filter( 'getpaid_invoice_notifications_is_payment_form_invoice', array( $this, 'force_is_payment_form_invoice' ), 10, 2 );
401
+
402
+            $invoice = $subscription->create_payment();
403
+
404
+            if ( ! empty( $invoice ) ) {
405
+                $is_logged_in = is_user_logged_in();
406
+
407
+                // Cron run.
408
+                if ( ! $is_logged_in ) {
409
+                    $note = wp_sprintf( __( 'Renewal %1$s created with the status "%2$s".', 'invoicing' ), $invoice->get_invoice_quote_type(), wpinv_status_nicename( $invoice->get_status(), $invoice ) );
410
+
411
+                    $invoice->add_note( $note, false, $is_logged_in, ! $is_logged_in );
412
+                }
413
+            }
414
+
415
+            remove_filter( 'getpaid_invoice_notifications_is_payment_form_invoice', array( $this, 'force_is_payment_form_invoice' ), 10, 2 );
416
+        }
417
+    }
418
+
419
+    /**
420
+     * Process a bank transfer payment.
421
+     *
422
+     *
423 423
      * @param WPInv_Invoice $invoice
424
-	 */
425
-	public function invoice_paid( $invoice ) {
426
-
427
-		// Abort if not paid by bank transfer.
428
-		if ( $this->id !== $invoice->get_gateway() || ! $invoice->is_recurring() ) {
429
-			return;
430
-		}
431
-
432
-		// Is it a parent payment?
433
-		if ( 0 == $invoice->get_parent_id() ) {
434
-
435
-			// (Maybe) activate subscriptions.
436
-			$subscriptions = getpaid_get_invoice_subscriptions( $invoice );
437
-
438
-			if ( ! empty( $subscriptions ) ) {
439
-				$subscriptions = is_array( $subscriptions ) ? $subscriptions : array( $subscriptions );
440
-
441
-				foreach ( $subscriptions as $subscription ) {
442
-					if ( $subscription->exists() ) {
443
-						$duration = strtotime( $subscription->get_expiration() ) - strtotime( $subscription->get_date_created() );
444
-						$expiry   = gmdate( 'Y-m-d H:i:s', ( current_time( 'timestamp' ) + $duration ) );
445
-
446
-						$subscription->set_next_renewal_date( $expiry );
447
-						$subscription->set_date_created( current_time( 'mysql' ) );
448
-						$subscription->set_profile_id( 'bt_sub_' . $invoice->get_id() . '_' . $subscription->get_id() );
449
-						$subscription->activate();
450
-					}
451
-				}
452
-			}
453
-		} else {
454
-
455
-			$subscription = getpaid_get_subscription( $invoice->get_subscription_id() );
456
-
457
-			// Renew the subscription.
458
-			if ( $subscription && $subscription->exists() ) {
459
-				$subscription->add_payment( array(), $invoice );
460
-				$subscription->renew( strtotime( $invoice->get_date_created() ) );
461
-			}
462
-		}
424
+     */
425
+    public function invoice_paid( $invoice ) {
426
+
427
+        // Abort if not paid by bank transfer.
428
+        if ( $this->id !== $invoice->get_gateway() || ! $invoice->is_recurring() ) {
429
+            return;
430
+        }
431
+
432
+        // Is it a parent payment?
433
+        if ( 0 == $invoice->get_parent_id() ) {
434
+
435
+            // (Maybe) activate subscriptions.
436
+            $subscriptions = getpaid_get_invoice_subscriptions( $invoice );
437
+
438
+            if ( ! empty( $subscriptions ) ) {
439
+                $subscriptions = is_array( $subscriptions ) ? $subscriptions : array( $subscriptions );
440
+
441
+                foreach ( $subscriptions as $subscription ) {
442
+                    if ( $subscription->exists() ) {
443
+                        $duration = strtotime( $subscription->get_expiration() ) - strtotime( $subscription->get_date_created() );
444
+                        $expiry   = gmdate( 'Y-m-d H:i:s', ( current_time( 'timestamp' ) + $duration ) );
445
+
446
+                        $subscription->set_next_renewal_date( $expiry );
447
+                        $subscription->set_date_created( current_time( 'mysql' ) );
448
+                        $subscription->set_profile_id( 'bt_sub_' . $invoice->get_id() . '_' . $subscription->get_id() );
449
+                        $subscription->activate();
450
+                    }
451
+                }
452
+            }
453
+        } else {
454
+
455
+            $subscription = getpaid_get_subscription( $invoice->get_subscription_id() );
456
+
457
+            // Renew the subscription.
458
+            if ( $subscription && $subscription->exists() ) {
459
+                $subscription->add_payment( array(), $invoice );
460
+                $subscription->renew( strtotime( $invoice->get_date_created() ) );
461
+            }
462
+        }
463 463
 
464 464
     }
465 465
 
466
-	/**
467
-	 * Force created from payment false to allow email for auto renewal generation invoice.
468
-	 *
469
-	 * @since 2.8.11
470
-	 *
471
-	 * @param bool $is_payment_form_invoice True when invoice created via payment form else false.
472
-	 * @param int  $invoice Invoice ID.
473
-	 * @return bool True when invoice created via payment form else false.
474
-	 */
475
-	public function force_is_payment_form_invoice( $is_payment_form_invoice, $invoice ) {
476
-		if ( $is_payment_form_invoice ) {
477
-			$is_payment_form_invoice = false;
478
-		}
479
-
480
-		return $is_payment_form_invoice;
481
-	}
466
+    /**
467
+     * Force created from payment false to allow email for auto renewal generation invoice.
468
+     *
469
+     * @since 2.8.11
470
+     *
471
+     * @param bool $is_payment_form_invoice True when invoice created via payment form else false.
472
+     * @param int  $invoice Invoice ID.
473
+     * @return bool True when invoice created via payment form else false.
474
+     */
475
+    public function force_is_payment_form_invoice( $is_payment_form_invoice, $invoice ) {
476
+        if ( $is_payment_form_invoice ) {
477
+            $is_payment_form_invoice = false;
478
+        }
479
+
480
+        return $is_payment_form_invoice;
481
+    }
482 482
 
483 483
 }
Please login to merge, or discard this patch.
includes/admin/class-getpaid-admin-setup-wizard.php 1 patch
Indentation   +388 added lines, -388 removed lines patch added patch discarded remove patch
@@ -17,402 +17,402 @@
 block discarded – undo
17 17
  */
18 18
 class GetPaid_Admin_Setup_Wizard {
19 19
 
20
-	/**
21
-	 * @var string Current Step
22
-	 */
23
-	protected $step = '';
24
-
25
-	/**
26
-	 * @var string|false Previous Step
27
-	 */
28
-	protected $previous_step = '';
29
-
30
-	/**
31
-	 * @var string|false Next Step
32
-	 */
33
-	protected $next_step = '';
34
-
35
-	/**
36
-	 * @var array All available steps for the setup wizard
37
-	 */
38
-	protected $steps = array();
39
-
40
-	/**
41
-	 * Class constructor.
42
-	 *
43
-	 * @since 2.4.0
44
-	 */
45
-	public function __construct() {
46
-
47
-		if ( apply_filters( 'getpaid_enable_setup_wizard', true ) && wpinv_current_user_can_manage_invoicing() ) {
48
-			add_action( 'admin_menu', array( $this, 'add_menu' ) );
49
-			add_action( 'current_screen', array( $this, 'setup_wizard' ) );
50
-			add_action( 'admin_init', array( $this, 'remove_deprecated_functions' ) );
51
-		}
52
-
53
-	}
54
-
55
-	/**
56
-	 * Add admin menus/screens.
57
-	 *
58
-	 * @since 2.4.0
59
-	 */
60
-	public function add_menu() {
61
-		add_dashboard_page( '', '', wpinv_get_capability(), 'gp-setup', '' );
62
-	}
63
-
64
-	/**
65
-	 * Sets up the setup wizard.
66
-	 *
67
-	 * @since 2.4.0
68
-	 */
69
-	public function setup_wizard() {
70
-
71
-		if ( isset( $_GET['page'] ) && 'gp-setup' === $_GET['page'] ) {
72
-			$this->setup_globals();
73
-			$this->maybe_save_current_step();
74
-			$this->display_wizard();
75
-			exit;
76
-		}
77
-
78
-	}
79
-
80
-	public function remove_deprecated_functions() {
81
-		// removes deprecated warnings from page
82
-		remove_action('admin_print_styles', 'print_emoji_styles');
83
-		remove_action( 'admin_head', 'wp_admin_bar_header' );
84
-	}
85
-
86
-	/**
87
-	 * Sets up class variables.
88
-	 *
89
-	 * @since 2.4.0
90
-	 */
91
-	protected function setup_globals() {
92
-		$this->steps         = $this->get_setup_steps();
93
-		$this->step          = $this->get_current_step();
94
-		$this->previous_step = $this->get_previous_step();
95
-		$this->next_step     = $this->get_next_step();
96
-	}
97
-
98
-	/**
99
-	 * Saves the current step.
100
-	 *
101
-	 * @since 2.4.0
102
-	 */
103
-	protected function maybe_save_current_step() {
104
-		if ( ! empty( $_POST['save_step'] ) && is_callable( $this->steps[ $this->step ]['handler'] ) ) {
105
-			call_user_func( $this->steps[ $this->step ]['handler'], $this );
106
-		}
107
-	}
108
-
109
-	/**
110
-	 * Returns the setup steps.
111
-	 *
112
-	 * @since 2.4.0
113
-	 * @return array
114
-	 */
115
-	protected function get_setup_steps() {
116
-
117
-		$steps = array(
118
-
119
-			'introduction'     => array(
120
-				'name'    => __( 'Introduction', 'invoicing' ),
121
-				'view'    => array( $this, 'setup_introduction' ),
122
-				'handler' => '',
123
-			),
124
-
125
-			'business_details' => array(
126
-				'name'    => __( 'Business Details', 'invoicing' ),
127
-				'view'    => array( $this, 'setup_business' ),
128
-				'handler' => '',
129
-			),
130
-
131
-			'currency'         => array(
132
-				'name'    => __( 'Currency', 'invoicing' ),
133
-				'view'    => array( $this, 'setup_currency' ),
134
-				'handler' => '',
135
-			),
136
-
137
-			'payments'         => array(
138
-				'name'    => __( 'Payment Gateways', 'invoicing' ),
139
-				'view'    => array( $this, 'setup_payments' ),
140
-				'handler' => array( $this, 'setup_payments_save' ),
141
-			),
142
-
143
-			'recommend'        => array(
144
-				'name'    => __( 'Recommend', 'invoicing' ),
145
-				'view'    => array( $this, 'setup_recommend' ),
146
-				'handler' => '',
147
-			),
148
-
149
-			'next_steps'       => array(
150
-				'name'    => __( 'Get Paid', 'invoicing' ),
151
-				'view'    => array( $this, 'setup_ready' ),
152
-				'handler' => '',
153
-			),
154
-
155
-		);
156
-
157
-		return apply_filters( 'getpaid_setup_wizard_steps', $steps );
158
-
159
-	}
160
-
161
-	/**
162
-	 * Returns the current step.
163
-	 *
164
-	 * @since 2.4.0
165
-	 * @return string
166
-	 */
167
-	protected function get_current_step() {
168
-		$step = isset( $_GET['step'] ) ? sanitize_key( $_GET['step'] ) : '';
169
-		return ! empty( $step ) && in_array( $step, array_keys( $this->steps ) ) ? $step : current( array_keys( $this->steps ) );
170
-	}
171
-
172
-	/**
173
-	 * Returns the previous step.
174
-	 *
175
-	 * @since 2.4.0
176
-	 * @return string|false
177
-	 */
178
-	protected function get_previous_step() {
179
-
180
-		$previous = false;
181
-		$current  = $this->step;
182
-		foreach ( array_keys( $this->steps ) as $step ) {
183
-			if ( $current === $step ) {
184
-				return $previous;
185
-			}
186
-
187
-			$previous = $step;
188
-		}
189
-
190
-		return false;
191
-	}
192
-
193
-	/**
194
-	 * Returns the next step.
195
-	 *
196
-	 * @since 2.4.0
197
-	 * @return string|false
198
-	 */
199
-	protected function get_next_step() {
200
-
201
-		$on_current = false;
202
-		$current    = $this->step;
203
-		foreach ( array_keys( $this->steps ) as $step ) {
204
-
205
-			if ( $on_current ) {
206
-				return $step;
207
-			}
208
-
209
-			if ( $current === $step ) {
210
-				return $on_current = true;
211
-			}
20
+    /**
21
+     * @var string Current Step
22
+     */
23
+    protected $step = '';
24
+
25
+    /**
26
+     * @var string|false Previous Step
27
+     */
28
+    protected $previous_step = '';
29
+
30
+    /**
31
+     * @var string|false Next Step
32
+     */
33
+    protected $next_step = '';
34
+
35
+    /**
36
+     * @var array All available steps for the setup wizard
37
+     */
38
+    protected $steps = array();
39
+
40
+    /**
41
+     * Class constructor.
42
+     *
43
+     * @since 2.4.0
44
+     */
45
+    public function __construct() {
46
+
47
+        if ( apply_filters( 'getpaid_enable_setup_wizard', true ) && wpinv_current_user_can_manage_invoicing() ) {
48
+            add_action( 'admin_menu', array( $this, 'add_menu' ) );
49
+            add_action( 'current_screen', array( $this, 'setup_wizard' ) );
50
+            add_action( 'admin_init', array( $this, 'remove_deprecated_functions' ) );
51
+        }
52
+
53
+    }
54
+
55
+    /**
56
+     * Add admin menus/screens.
57
+     *
58
+     * @since 2.4.0
59
+     */
60
+    public function add_menu() {
61
+        add_dashboard_page( '', '', wpinv_get_capability(), 'gp-setup', '' );
62
+    }
63
+
64
+    /**
65
+     * Sets up the setup wizard.
66
+     *
67
+     * @since 2.4.0
68
+     */
69
+    public function setup_wizard() {
70
+
71
+        if ( isset( $_GET['page'] ) && 'gp-setup' === $_GET['page'] ) {
72
+            $this->setup_globals();
73
+            $this->maybe_save_current_step();
74
+            $this->display_wizard();
75
+            exit;
76
+        }
77
+
78
+    }
79
+
80
+    public function remove_deprecated_functions() {
81
+        // removes deprecated warnings from page
82
+        remove_action('admin_print_styles', 'print_emoji_styles');
83
+        remove_action( 'admin_head', 'wp_admin_bar_header' );
84
+    }
85
+
86
+    /**
87
+     * Sets up class variables.
88
+     *
89
+     * @since 2.4.0
90
+     */
91
+    protected function setup_globals() {
92
+        $this->steps         = $this->get_setup_steps();
93
+        $this->step          = $this->get_current_step();
94
+        $this->previous_step = $this->get_previous_step();
95
+        $this->next_step     = $this->get_next_step();
96
+    }
97
+
98
+    /**
99
+     * Saves the current step.
100
+     *
101
+     * @since 2.4.0
102
+     */
103
+    protected function maybe_save_current_step() {
104
+        if ( ! empty( $_POST['save_step'] ) && is_callable( $this->steps[ $this->step ]['handler'] ) ) {
105
+            call_user_func( $this->steps[ $this->step ]['handler'], $this );
106
+        }
107
+    }
108
+
109
+    /**
110
+     * Returns the setup steps.
111
+     *
112
+     * @since 2.4.0
113
+     * @return array
114
+     */
115
+    protected function get_setup_steps() {
116
+
117
+        $steps = array(
118
+
119
+            'introduction'     => array(
120
+                'name'    => __( 'Introduction', 'invoicing' ),
121
+                'view'    => array( $this, 'setup_introduction' ),
122
+                'handler' => '',
123
+            ),
124
+
125
+            'business_details' => array(
126
+                'name'    => __( 'Business Details', 'invoicing' ),
127
+                'view'    => array( $this, 'setup_business' ),
128
+                'handler' => '',
129
+            ),
130
+
131
+            'currency'         => array(
132
+                'name'    => __( 'Currency', 'invoicing' ),
133
+                'view'    => array( $this, 'setup_currency' ),
134
+                'handler' => '',
135
+            ),
136
+
137
+            'payments'         => array(
138
+                'name'    => __( 'Payment Gateways', 'invoicing' ),
139
+                'view'    => array( $this, 'setup_payments' ),
140
+                'handler' => array( $this, 'setup_payments_save' ),
141
+            ),
142
+
143
+            'recommend'        => array(
144
+                'name'    => __( 'Recommend', 'invoicing' ),
145
+                'view'    => array( $this, 'setup_recommend' ),
146
+                'handler' => '',
147
+            ),
148
+
149
+            'next_steps'       => array(
150
+                'name'    => __( 'Get Paid', 'invoicing' ),
151
+                'view'    => array( $this, 'setup_ready' ),
152
+                'handler' => '',
153
+            ),
154
+
155
+        );
156
+
157
+        return apply_filters( 'getpaid_setup_wizard_steps', $steps );
158
+
159
+    }
160
+
161
+    /**
162
+     * Returns the current step.
163
+     *
164
+     * @since 2.4.0
165
+     * @return string
166
+     */
167
+    protected function get_current_step() {
168
+        $step = isset( $_GET['step'] ) ? sanitize_key( $_GET['step'] ) : '';
169
+        return ! empty( $step ) && in_array( $step, array_keys( $this->steps ) ) ? $step : current( array_keys( $this->steps ) );
170
+    }
171
+
172
+    /**
173
+     * Returns the previous step.
174
+     *
175
+     * @since 2.4.0
176
+     * @return string|false
177
+     */
178
+    protected function get_previous_step() {
179
+
180
+        $previous = false;
181
+        $current  = $this->step;
182
+        foreach ( array_keys( $this->steps ) as $step ) {
183
+            if ( $current === $step ) {
184
+                return $previous;
185
+            }
186
+
187
+            $previous = $step;
188
+        }
189
+
190
+        return false;
191
+    }
192
+
193
+    /**
194
+     * Returns the next step.
195
+     *
196
+     * @since 2.4.0
197
+     * @return string|false
198
+     */
199
+    protected function get_next_step() {
200
+
201
+        $on_current = false;
202
+        $current    = $this->step;
203
+        foreach ( array_keys( $this->steps ) as $step ) {
204
+
205
+            if ( $on_current ) {
206
+                return $step;
207
+            }
208
+
209
+            if ( $current === $step ) {
210
+                return $on_current = true;
211
+            }
212 212
 }
213 213
 
214
-		return false;
215
-	}
216
-
217
-	/**
218
-	 * Displays the setup wizard.
219
-	 *
220
-	 * @since 2.4.0
221
-	 */
222
-	public function display_wizard() {
223
-		$this->display_header();
224
-		$this->display_current_step();
225
-		$this->display_footer();
226
-	}
227
-
228
-	/**
229
-	 * Displays the Wizard Header.
230
-	 *
231
-	 * @since 2.0.0
232
-	 */
233
-	public function display_header() {
234
-		$steps     = $this->steps;
235
-		$current   = $this->step;
236
-		$next_step = $this->next_step;
237
-		array_shift( $steps );
238
-		include plugin_dir_path( __FILE__ ) . 'views/wizard-header.php';
239
-	}
240
-
241
-	/**
242
-	 * Displays the content for the current step.
243
-	 *
244
-	 * @since 2.4.0
245
-	 */
246
-	public function display_current_step() {
247
-		?>
214
+        return false;
215
+    }
216
+
217
+    /**
218
+     * Displays the setup wizard.
219
+     *
220
+     * @since 2.4.0
221
+     */
222
+    public function display_wizard() {
223
+        $this->display_header();
224
+        $this->display_current_step();
225
+        $this->display_footer();
226
+    }
227
+
228
+    /**
229
+     * Displays the Wizard Header.
230
+     *
231
+     * @since 2.0.0
232
+     */
233
+    public function display_header() {
234
+        $steps     = $this->steps;
235
+        $current   = $this->step;
236
+        $next_step = $this->next_step;
237
+        array_shift( $steps );
238
+        include plugin_dir_path( __FILE__ ) . 'views/wizard-header.php';
239
+    }
240
+
241
+    /**
242
+     * Displays the content for the current step.
243
+     *
244
+     * @since 2.4.0
245
+     */
246
+    public function display_current_step() {
247
+        ?>
248 248
 			<div class="gp-setup-content rowx mw-100 text-center mb-3">
249 249
 				<div class="col-12 col-md-5 m-auto">
250 250
 					<?php call_user_func( $this->steps[ $this->step ]['view'], $this ); ?>
251 251
 				</div>
252 252
 			</div>
253 253
 		<?php
254
-	}
255
-
256
-	/**
257
-	 * Setup Wizard Footer.
258
-	 *
259
-	 * @since 2.4.0
260
-	 */
261
-	public function display_footer() {
262
-
263
-		if ( isset( $_GET['step'] ) ) {
264
-			$label    = $this->step == 'next_steps' ? __( 'Return to the WordPress Dashboard', 'invoicing' ) : __( 'Skip this step', 'invoicing' );
265
-
266
-			echo '<p class="gd-return-to-dashboard-wrap"> <a href="' . esc_url( $this->get_next_step_link() ) . '" class="gd-return-to-dashboard btn btn-link d-block text-muted">' . esc_html( $label ) . '</a></p>';
267
-		}
268
-
269
-		echo '</body></html>';
270
-	}
271
-
272
-	/**
273
-	 * Introduction step.
274
-	 *
275
-	 * @since 2.0.0
276
-	 */
277
-	public function setup_introduction() {
278
-		$next_url = $this->get_next_step_link();
279
-		include plugin_dir_path( __FILE__ ) . 'views/wizard-introduction.php';
280
-	}
281
-
282
-	/**
283
-	 * Get the URL for the next step's screen.
284
-	 *
285
-	 * @param string step   slug (default: current step)
286
-	 *
287
-	 * @return string       URL for next step if a next step exists.
288
-	 *                      Admin URL if it's the last step.
289
-	 *                      Empty string on failure.
290
-	 * @since 3.0.0
291
-	 */
292
-	public function get_next_step_link( $step = '' ) {
293
-		if ( ! $step ) {
294
-			$step = $this->step;
295
-		}
296
-
297
-		$keys = array_keys( $this->steps );
298
-		if ( end( $keys ) === $step ) {
299
-			return admin_url();
300
-		}
301
-
302
-		$step_index = array_search( $step, $keys );
303
-		if ( false === $step_index ) {
304
-			return '';
305
-		}
306
-
307
-		return remove_query_arg( 'settings-updated', add_query_arg( 'step', $keys[ $step_index + 1 ] ) );
308
-	}
309
-
310
-	/**
311
-	 * Setup maps api.
312
-	 *
313
-	 * @since 2.0.0
314
-	 */
315
-	public function setup_business() {
316
-		$next_url = $this->get_next_step_link();
317
-		$wizard   = $this;
318
-		$page     = 'wpinv_settings_general_main';
319
-		$section  = 'wpinv_settings_general_main';
320
-		include plugin_dir_path( __FILE__ ) . 'views/wizard-settings.php';
321
-	}
322
-
323
-	/**
324
-	 * Default Location settings.
325
-	 *
326
-	 * @since 2.0.0
327
-	 */
328
-	public function setup_currency() {
329
-		$next_url = $this->get_next_step_link();
330
-		$wizard   = $this;
331
-		$page     = 'wpinv_settings_general_currency_section';
332
-		$section  = 'wpinv_settings_general_currency_section';
333
-		include plugin_dir_path( __FILE__ ) . 'views/wizard-settings.php';
334
-	}
335
-
336
-	/**
337
-	 * Installation of recommended plugins.
338
-	 *
339
-	 * @since 1.0.0
340
-	 */
341
-	public function setup_recommend() {
342
-		$next_url            = $this->get_next_step_link();
343
-		$recommended_plugins = self::get_recommend_wp_plugins();
344
-		include plugin_dir_path( __FILE__ ) . 'views/wizard-plugins.php';
345
-	}
346
-
347
-	/**
348
-	 * A list of recommended wp.org plugins.
349
-	 * @return array
350
-	 */
351
-	public static function get_recommend_wp_plugins() {
352
-		return array(
353
-			'ayecode-connect'  => array(
354
-				'file' => 'ayecode-connect/ayecode-connect.php',
355
-				'url'  => 'https://wordpress.org/plugins/ayecode-connect/',
356
-				'slug' => 'ayecode-connect',
357
-				'name' => 'AyeCode Connect',
358
-				'desc' => __( 'Documentation and Support from within your WordPress admin.', 'invoicing' ),
359
-			),
360
-			'invoicing-quotes' => array(
361
-				'file' => 'invoicing-quotes/wpinv-quote.php',
362
-				'url'  => 'https://wordpress.org/plugins/invoicing-quotes/',
363
-				'slug' => 'invoicing-quotes',
364
-				'name' => 'Customer Quotes',
365
-				'desc' => __( 'Create & Send Quotes to Customers and have them accept and pay.', 'invoicing' ),
366
-			),
367
-			'userswp'          => array(
368
-				'file' => 'userswp/userswp.php',
369
-				'url'  => 'https://wordpress.org/plugins/userswp/',
370
-				'slug' => 'userswp',
371
-				'name' => 'UsersWP',
372
-				'desc' => __( 'Frontend user login and registration as well as slick profile pages.', 'invoicing' ),
373
-			),
374
-		);
375
-	}
376
-
377
-	/**
378
-	 * Dummy Data setup.
379
-	 *
380
-	 * @since 2.4.0
381
-	 */
382
-	public function setup_payments() {
383
-		$next_url = $this->get_next_step_link();
384
-		include plugin_dir_path( __FILE__ ) . 'views/wizard-gateways.php';
385
-	}
386
-
387
-	/**
388
-	 * Dummy data save.
389
-	 *
390
-	 * This is done via ajax so we just pass onto the next step.
391
-	 *
392
-	 * @since 2.0.0
393
-	 */
394
-	public function setup_payments_save() {
395
-		check_admin_referer( 'getpaid-setup-wizard', 'getpaid-setup-wizard' );
396
-		wpinv_update_option( 'manual_active', ! empty( $_POST['enable-manual-gateway'] ) );
397
-
398
-		if ( ! empty( $_POST['paypal-email'] ) ) {
399
-			wpinv_update_option( 'paypal_email', sanitize_email( $_POST['paypal-email'] ) );
400
-			wpinv_update_option( 'paypal_active', 1 );
401
-			wpinv_update_option( 'paypal_sandbox', 0 );
402
-		}
403
-
404
-		wp_redirect( esc_url_raw( $this->get_next_step_link() ) );
405
-		exit;
406
-	}
407
-
408
-	/**
409
-	 * Final step.
410
-	 *
411
-	 * @since 2.0.0
412
-	 */
413
-	public function setup_ready() {
414
-		include plugin_dir_path( __FILE__ ) . 'views/wizard-thank-you.php';
415
-	}
254
+    }
255
+
256
+    /**
257
+     * Setup Wizard Footer.
258
+     *
259
+     * @since 2.4.0
260
+     */
261
+    public function display_footer() {
262
+
263
+        if ( isset( $_GET['step'] ) ) {
264
+            $label    = $this->step == 'next_steps' ? __( 'Return to the WordPress Dashboard', 'invoicing' ) : __( 'Skip this step', 'invoicing' );
265
+
266
+            echo '<p class="gd-return-to-dashboard-wrap"> <a href="' . esc_url( $this->get_next_step_link() ) . '" class="gd-return-to-dashboard btn btn-link d-block text-muted">' . esc_html( $label ) . '</a></p>';
267
+        }
268
+
269
+        echo '</body></html>';
270
+    }
271
+
272
+    /**
273
+     * Introduction step.
274
+     *
275
+     * @since 2.0.0
276
+     */
277
+    public function setup_introduction() {
278
+        $next_url = $this->get_next_step_link();
279
+        include plugin_dir_path( __FILE__ ) . 'views/wizard-introduction.php';
280
+    }
281
+
282
+    /**
283
+     * Get the URL for the next step's screen.
284
+     *
285
+     * @param string step   slug (default: current step)
286
+     *
287
+     * @return string       URL for next step if a next step exists.
288
+     *                      Admin URL if it's the last step.
289
+     *                      Empty string on failure.
290
+     * @since 3.0.0
291
+     */
292
+    public function get_next_step_link( $step = '' ) {
293
+        if ( ! $step ) {
294
+            $step = $this->step;
295
+        }
296
+
297
+        $keys = array_keys( $this->steps );
298
+        if ( end( $keys ) === $step ) {
299
+            return admin_url();
300
+        }
301
+
302
+        $step_index = array_search( $step, $keys );
303
+        if ( false === $step_index ) {
304
+            return '';
305
+        }
306
+
307
+        return remove_query_arg( 'settings-updated', add_query_arg( 'step', $keys[ $step_index + 1 ] ) );
308
+    }
309
+
310
+    /**
311
+     * Setup maps api.
312
+     *
313
+     * @since 2.0.0
314
+     */
315
+    public function setup_business() {
316
+        $next_url = $this->get_next_step_link();
317
+        $wizard   = $this;
318
+        $page     = 'wpinv_settings_general_main';
319
+        $section  = 'wpinv_settings_general_main';
320
+        include plugin_dir_path( __FILE__ ) . 'views/wizard-settings.php';
321
+    }
322
+
323
+    /**
324
+     * Default Location settings.
325
+     *
326
+     * @since 2.0.0
327
+     */
328
+    public function setup_currency() {
329
+        $next_url = $this->get_next_step_link();
330
+        $wizard   = $this;
331
+        $page     = 'wpinv_settings_general_currency_section';
332
+        $section  = 'wpinv_settings_general_currency_section';
333
+        include plugin_dir_path( __FILE__ ) . 'views/wizard-settings.php';
334
+    }
335
+
336
+    /**
337
+     * Installation of recommended plugins.
338
+     *
339
+     * @since 1.0.0
340
+     */
341
+    public function setup_recommend() {
342
+        $next_url            = $this->get_next_step_link();
343
+        $recommended_plugins = self::get_recommend_wp_plugins();
344
+        include plugin_dir_path( __FILE__ ) . 'views/wizard-plugins.php';
345
+    }
346
+
347
+    /**
348
+     * A list of recommended wp.org plugins.
349
+     * @return array
350
+     */
351
+    public static function get_recommend_wp_plugins() {
352
+        return array(
353
+            'ayecode-connect'  => array(
354
+                'file' => 'ayecode-connect/ayecode-connect.php',
355
+                'url'  => 'https://wordpress.org/plugins/ayecode-connect/',
356
+                'slug' => 'ayecode-connect',
357
+                'name' => 'AyeCode Connect',
358
+                'desc' => __( 'Documentation and Support from within your WordPress admin.', 'invoicing' ),
359
+            ),
360
+            'invoicing-quotes' => array(
361
+                'file' => 'invoicing-quotes/wpinv-quote.php',
362
+                'url'  => 'https://wordpress.org/plugins/invoicing-quotes/',
363
+                'slug' => 'invoicing-quotes',
364
+                'name' => 'Customer Quotes',
365
+                'desc' => __( 'Create & Send Quotes to Customers and have them accept and pay.', 'invoicing' ),
366
+            ),
367
+            'userswp'          => array(
368
+                'file' => 'userswp/userswp.php',
369
+                'url'  => 'https://wordpress.org/plugins/userswp/',
370
+                'slug' => 'userswp',
371
+                'name' => 'UsersWP',
372
+                'desc' => __( 'Frontend user login and registration as well as slick profile pages.', 'invoicing' ),
373
+            ),
374
+        );
375
+    }
376
+
377
+    /**
378
+     * Dummy Data setup.
379
+     *
380
+     * @since 2.4.0
381
+     */
382
+    public function setup_payments() {
383
+        $next_url = $this->get_next_step_link();
384
+        include plugin_dir_path( __FILE__ ) . 'views/wizard-gateways.php';
385
+    }
386
+
387
+    /**
388
+     * Dummy data save.
389
+     *
390
+     * This is done via ajax so we just pass onto the next step.
391
+     *
392
+     * @since 2.0.0
393
+     */
394
+    public function setup_payments_save() {
395
+        check_admin_referer( 'getpaid-setup-wizard', 'getpaid-setup-wizard' );
396
+        wpinv_update_option( 'manual_active', ! empty( $_POST['enable-manual-gateway'] ) );
397
+
398
+        if ( ! empty( $_POST['paypal-email'] ) ) {
399
+            wpinv_update_option( 'paypal_email', sanitize_email( $_POST['paypal-email'] ) );
400
+            wpinv_update_option( 'paypal_active', 1 );
401
+            wpinv_update_option( 'paypal_sandbox', 0 );
402
+        }
403
+
404
+        wp_redirect( esc_url_raw( $this->get_next_step_link() ) );
405
+        exit;
406
+    }
407
+
408
+    /**
409
+     * Final step.
410
+     *
411
+     * @since 2.0.0
412
+     */
413
+    public function setup_ready() {
414
+        include plugin_dir_path( __FILE__ ) . 'views/wizard-thank-you.php';
415
+    }
416 416
 
417 417
 }
418 418
 
Please login to merge, or discard this patch.
vendor/ayecode/wp-super-duper/sd-functions.php 1 patch
Indentation   +2869 added lines, -2869 removed lines patch added patch discarded remove patch
@@ -11,21 +11,21 @@  discard block
 block discarded – undo
11 11
  * @return mixed|void
12 12
  */
13 13
 function sd_pagenow_exclude() {
14
-	return apply_filters(
15
-		'sd_pagenow_exclude',
16
-		array(
17
-			'upload.php',
18
-			'edit-comments.php',
19
-			'edit-tags.php',
20
-			'index.php',
21
-			'media-new.php',
22
-			'options-discussion.php',
23
-			'options-writing.php',
24
-			'edit.php',
25
-			'themes.php',
26
-			'users.php',
27
-		)
28
-	);
14
+    return apply_filters(
15
+        'sd_pagenow_exclude',
16
+        array(
17
+            'upload.php',
18
+            'edit-comments.php',
19
+            'edit-tags.php',
20
+            'index.php',
21
+            'media-new.php',
22
+            'options-discussion.php',
23
+            'options-writing.php',
24
+            'edit.php',
25
+            'themes.php',
26
+            'users.php',
27
+        )
28
+    );
29 29
 }
30 30
 
31 31
 
@@ -37,7 +37,7 @@  discard block
 block discarded – undo
37 37
  * @return mixed|void
38 38
  */
39 39
 function sd_widget_exclude() {
40
-	return apply_filters( 'sd_widget_exclude', array() );
40
+    return apply_filters( 'sd_widget_exclude', array() );
41 41
 }
42 42
 
43 43
 
@@ -50,83 +50,83 @@  discard block
 block discarded – undo
50 50
  * @return array
51 51
  */
52 52
 function sd_get_margin_input( $type = 'mt', $overwrite = array(), $include_negatives = true ) {
53
-	global $aui_bs5;
54
-	$options = array(
55
-		''     => __( 'None', 'ayecode-connect' ),
56
-		'auto' => __( 'auto', 'ayecode-connect' ),
57
-		'0'    => '0',
58
-		'1'    => '1',
59
-		'2'    => '2',
60
-		'3'    => '3',
61
-		'4'    => '4',
62
-		'5'    => '5',
63
-		'6'    => '6',
64
-		'7'    => '7',
65
-		'8'    => '8',
66
-		'9'    => '9',
67
-		'10'   => '10',
68
-		'11'   => '11',
69
-		'12'   => '12',
70
-	);
71
-
72
-	if ( $include_negatives ) {
73
-		$options['n1']  = '-1';
74
-		$options['n2']  = '-2';
75
-		$options['n3']  = '-3';
76
-		$options['n4']  = '-4';
77
-		$options['n5']  = '-5';
78
-		$options['n6']  = '-6';
79
-		$options['n7']  = '-7';
80
-		$options['n8']  = '-8';
81
-		$options['n9']  = '-9';
82
-		$options['n10'] = '-10';
83
-		$options['n11'] = '-11';
84
-		$options['n12'] = '-12';
85
-	}
86
-
87
-	$defaults = array(
88
-		'type'     => 'select',
89
-		'title'    => __( 'Margin top', 'ayecode-connect' ),
90
-		'options'  => $options,
91
-		'default'  => '',
92
-		'desc_tip' => true,
93
-		'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
94
-	);
95
-
96
-	// title
97
-	if ( $type == 'mt' ) {
98
-		$defaults['title'] = __( 'Margin top', 'ayecode-connect' );
99
-		$defaults['icon']  = 'box-top';
100
-		$defaults['row']   = array(
101
-			'title' => __( 'Margins', 'ayecode-connect' ),
102
-			'key'   => 'wrapper-margins',
103
-			'open'  => true,
104
-			'class' => 'text-center',
105
-		);
106
-	} elseif ( $type == 'mr' ) {
107
-		$defaults['title'] = __( 'Margin right', 'ayecode-connect' );
108
-		$defaults['icon']  = 'box-right';
109
-		$defaults['row']   = array(
110
-			'key' => 'wrapper-margins',
111
-		);
112
-	} elseif ( $type == 'mb' ) {
113
-		$defaults['title'] = __( 'Margin bottom', 'ayecode-connect' );
114
-		$defaults['icon']  = 'box-bottom';
115
-		$defaults['row']   = array(
116
-			'key' => 'wrapper-margins',
117
-		);
118
-	} elseif ( $type == 'ml' ) {
119
-		$defaults['title'] = __( 'Margin left', 'ayecode-connect' );
120
-		$defaults['icon']  = 'box-left';
121
-		$defaults['row']   = array(
122
-			'key'   => 'wrapper-margins',
123
-			'close' => true,
124
-		);
125
-	}
126
-
127
-	$input = wp_parse_args( $overwrite, $defaults );
128
-
129
-	return $input;
53
+    global $aui_bs5;
54
+    $options = array(
55
+        ''     => __( 'None', 'ayecode-connect' ),
56
+        'auto' => __( 'auto', 'ayecode-connect' ),
57
+        '0'    => '0',
58
+        '1'    => '1',
59
+        '2'    => '2',
60
+        '3'    => '3',
61
+        '4'    => '4',
62
+        '5'    => '5',
63
+        '6'    => '6',
64
+        '7'    => '7',
65
+        '8'    => '8',
66
+        '9'    => '9',
67
+        '10'   => '10',
68
+        '11'   => '11',
69
+        '12'   => '12',
70
+    );
71
+
72
+    if ( $include_negatives ) {
73
+        $options['n1']  = '-1';
74
+        $options['n2']  = '-2';
75
+        $options['n3']  = '-3';
76
+        $options['n4']  = '-4';
77
+        $options['n5']  = '-5';
78
+        $options['n6']  = '-6';
79
+        $options['n7']  = '-7';
80
+        $options['n8']  = '-8';
81
+        $options['n9']  = '-9';
82
+        $options['n10'] = '-10';
83
+        $options['n11'] = '-11';
84
+        $options['n12'] = '-12';
85
+    }
86
+
87
+    $defaults = array(
88
+        'type'     => 'select',
89
+        'title'    => __( 'Margin top', 'ayecode-connect' ),
90
+        'options'  => $options,
91
+        'default'  => '',
92
+        'desc_tip' => true,
93
+        'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
94
+    );
95
+
96
+    // title
97
+    if ( $type == 'mt' ) {
98
+        $defaults['title'] = __( 'Margin top', 'ayecode-connect' );
99
+        $defaults['icon']  = 'box-top';
100
+        $defaults['row']   = array(
101
+            'title' => __( 'Margins', 'ayecode-connect' ),
102
+            'key'   => 'wrapper-margins',
103
+            'open'  => true,
104
+            'class' => 'text-center',
105
+        );
106
+    } elseif ( $type == 'mr' ) {
107
+        $defaults['title'] = __( 'Margin right', 'ayecode-connect' );
108
+        $defaults['icon']  = 'box-right';
109
+        $defaults['row']   = array(
110
+            'key' => 'wrapper-margins',
111
+        );
112
+    } elseif ( $type == 'mb' ) {
113
+        $defaults['title'] = __( 'Margin bottom', 'ayecode-connect' );
114
+        $defaults['icon']  = 'box-bottom';
115
+        $defaults['row']   = array(
116
+            'key' => 'wrapper-margins',
117
+        );
118
+    } elseif ( $type == 'ml' ) {
119
+        $defaults['title'] = __( 'Margin left', 'ayecode-connect' );
120
+        $defaults['icon']  = 'box-left';
121
+        $defaults['row']   = array(
122
+            'key'   => 'wrapper-margins',
123
+            'close' => true,
124
+        );
125
+    }
126
+
127
+    $input = wp_parse_args( $overwrite, $defaults );
128
+
129
+    return $input;
130 130
 }
131 131
 
132 132
 /**
@@ -138,67 +138,67 @@  discard block
 block discarded – undo
138 138
  * @return array
139 139
  */
140 140
 function sd_get_padding_input( $type = 'pt', $overwrite = array() ) {
141
-	$options = array(
142
-		''   => __( 'None', 'ayecode-connect' ),
143
-		'0'  => '0',
144
-		'1'  => '1',
145
-		'2'  => '2',
146
-		'3'  => '3',
147
-		'4'  => '4',
148
-		'5'  => '5',
149
-		'6'  => '6',
150
-		'7'  => '7',
151
-		'8'  => '8',
152
-		'9'  => '9',
153
-		'10' => '10',
154
-		'11' => '11',
155
-		'12' => '12',
156
-	);
157
-
158
-	$defaults = array(
159
-		'type'     => 'select',
160
-		'title'    => __( 'Padding top', 'ayecode-connect' ),
161
-		'options'  => $options,
162
-		'default'  => '',
163
-		'desc_tip' => true,
164
-		'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
165
-	);
166
-
167
-	// title
168
-	if ( $type == 'pt' ) {
169
-		$defaults['title'] = __( 'Padding top', 'ayecode-connect' );
170
-		$defaults['icon']  = 'box-top';
171
-		$defaults['row']   = array(
172
-			'title' => __( 'Padding', 'ayecode-connect' ),
173
-			'key'   => 'wrapper-padding',
174
-			'open'  => true,
175
-			'class' => 'text-center',
176
-		);
177
-	} elseif ( $type == 'pr' ) {
178
-		$defaults['title'] = __( 'Padding right', 'ayecode-connect' );
179
-		$defaults['icon']  = 'box-right';
180
-		$defaults['row']   = array(
181
-			'key' => 'wrapper-padding',
182
-		);
183
-	} elseif ( $type == 'pb' ) {
184
-		$defaults['title'] = __( 'Padding bottom', 'ayecode-connect' );
185
-		$defaults['icon']  = 'box-bottom';
186
-		$defaults['row']   = array(
187
-			'key' => 'wrapper-padding',
188
-		);
189
-	} elseif ( $type == 'pl' ) {
190
-		$defaults['title'] = __( 'Padding left', 'ayecode-connect' );
191
-		$defaults['icon']  = 'box-left';
192
-		$defaults['row']   = array(
193
-			'key'   => 'wrapper-padding',
194
-			'close' => true,
195
-
196
-		);
197
-	}
198
-
199
-	$input = wp_parse_args( $overwrite, $defaults );
200
-
201
-	return $input;
141
+    $options = array(
142
+        ''   => __( 'None', 'ayecode-connect' ),
143
+        '0'  => '0',
144
+        '1'  => '1',
145
+        '2'  => '2',
146
+        '3'  => '3',
147
+        '4'  => '4',
148
+        '5'  => '5',
149
+        '6'  => '6',
150
+        '7'  => '7',
151
+        '8'  => '8',
152
+        '9'  => '9',
153
+        '10' => '10',
154
+        '11' => '11',
155
+        '12' => '12',
156
+    );
157
+
158
+    $defaults = array(
159
+        'type'     => 'select',
160
+        'title'    => __( 'Padding top', 'ayecode-connect' ),
161
+        'options'  => $options,
162
+        'default'  => '',
163
+        'desc_tip' => true,
164
+        'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
165
+    );
166
+
167
+    // title
168
+    if ( $type == 'pt' ) {
169
+        $defaults['title'] = __( 'Padding top', 'ayecode-connect' );
170
+        $defaults['icon']  = 'box-top';
171
+        $defaults['row']   = array(
172
+            'title' => __( 'Padding', 'ayecode-connect' ),
173
+            'key'   => 'wrapper-padding',
174
+            'open'  => true,
175
+            'class' => 'text-center',
176
+        );
177
+    } elseif ( $type == 'pr' ) {
178
+        $defaults['title'] = __( 'Padding right', 'ayecode-connect' );
179
+        $defaults['icon']  = 'box-right';
180
+        $defaults['row']   = array(
181
+            'key' => 'wrapper-padding',
182
+        );
183
+    } elseif ( $type == 'pb' ) {
184
+        $defaults['title'] = __( 'Padding bottom', 'ayecode-connect' );
185
+        $defaults['icon']  = 'box-bottom';
186
+        $defaults['row']   = array(
187
+            'key' => 'wrapper-padding',
188
+        );
189
+    } elseif ( $type == 'pl' ) {
190
+        $defaults['title'] = __( 'Padding left', 'ayecode-connect' );
191
+        $defaults['icon']  = 'box-left';
192
+        $defaults['row']   = array(
193
+            'key'   => 'wrapper-padding',
194
+            'close' => true,
195
+
196
+        );
197
+    }
198
+
199
+    $input = wp_parse_args( $overwrite, $defaults );
200
+
201
+    return $input;
202 202
 }
203 203
 
204 204
 /**
@@ -210,96 +210,96 @@  discard block
 block discarded – undo
210 210
  * @return array
211 211
  */
212 212
 function sd_get_border_input( $type = 'border', $overwrite = array() ) {
213
-	global $aui_bs5;
214
-
215
-	$defaults = array(
216
-		'type'     => 'select',
217
-		'title'    => __( 'Border', 'ayecode-connect' ),
218
-		'options'  => array(),
219
-		'default'  => '',
220
-		'desc_tip' => true,
221
-		'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
222
-	);
223
-
224
-	// title
225
-	if ( 'rounded' === $type ) {
226
-		$defaults['title']           = __( 'Border radius type', 'ayecode-connect' );
227
-		$defaults['options']         = array(
228
-			''               => __( 'Default', 'ayecode-connect' ),
229
-			'rounded'        => 'rounded',
230
-			'rounded-top'    => 'rounded-top',
231
-			'rounded-right'  => 'rounded-right',
232
-			'rounded-bottom' => 'rounded-bottom',
233
-			'rounded-left'   => 'rounded-left',
234
-		);
235
-		$defaults['element_require'] = '([%border%]&&[%border%]!="0")';
236
-	} elseif ( 'rounded_size' === $type ) {
237
-		$defaults['title'] = __( 'Border radius size', 'ayecode-connect' );
238
-
239
-		if ( $aui_bs5 ) {
240
-			$defaults['options'] = array(
241
-				''       => __( 'Default', 'ayecode-connect' ),
242
-				'0'      => '0',
243
-				'1'      => '1',
244
-				'2'      => '2',
245
-				'3'      => '3',
246
-				'4'      => '4',
247
-				'circle' => 'circle',
248
-				'pill'   => 'pill',
249
-			);
250
-		} else {
251
-			$defaults['options'] = array(
252
-				''   => __( 'Default', 'ayecode-connect' ),
253
-				'sm' => __( 'Small', 'ayecode-connect' ),
254
-				'lg' => __( 'Large', 'ayecode-connect' ),
255
-			);
256
-		}
257
-		$defaults['element_require'] = '([%border%]&&[%border%]!="0")';
258
-	} elseif ( 'width' === $type ) { // BS%
259
-		$defaults['title']           = __( 'Border width', 'ayecode-connect' );
260
-		$defaults['options']         = array(
261
-			''         => __( 'Default', 'ayecode-connect' ),
262
-			'border-2' => '2',
263
-			'border-3' => '3',
264
-			'border-4' => '4',
265
-			'border-5' => '5',
266
-		);
267
-		$defaults['element_require'] = $aui_bs5 ? '([%border%]&&[%border%]!="0")' : '1==2';
268
-	} elseif ( 'opacity' === $type ) { // BS%
269
-		$defaults['title']           = __( 'Border opacity', 'ayecode-connect' );
270
-		$defaults['options']         = array(
271
-			''                  => __( 'Default', 'ayecode-connect' ),
272
-			'border-opacity-75' => '75%',
273
-			'border-opacity-50' => '50%',
274
-			'border-opacity-25' => '25%',
275
-			'border-opacity-10' => '10%',
276
-		);
277
-		$defaults['element_require'] = $aui_bs5 ? '([%border%]&&[%border%]!="0")' : '1==2';
278
-	} elseif ( 'type' === $type ) {
279
-		$defaults['title']           = __( 'Border show', 'ayecode-connect' );
280
-		$defaults['options']         = array(
281
-			'border'          => __( 'Full (set color to show)', 'ayecode-connect' ),
282
-			'border-top'      => __( 'Top', 'ayecode-connect' ),
283
-			'border-bottom'   => __( 'Bottom', 'ayecode-connect' ),
284
-			'border-left'     => __( 'Left', 'ayecode-connect' ),
285
-			'border-right'    => __( 'Right', 'ayecode-connect' ),
286
-			'border-top-0'    => __( '-Top', 'ayecode-connect' ),
287
-			'border-bottom-0' => __( '-Bottom', 'ayecode-connect' ),
288
-			'border-left-0'   => __( '-Left', 'ayecode-connect' ),
289
-			'border-right-0'  => __( '-Right', 'ayecode-connect' ),
290
-		);
291
-		$defaults['element_require'] = '([%border%]&&[%border%]!="0")';
292
-	} else {
293
-		$defaults['title']   = __( 'Border color', 'ayecode-connect' );
294
-		$defaults['options'] = array(
295
-			''  => __( 'Default', 'ayecode-connect' ),
296
-			'0' => __( 'None', 'ayecode-connect' )
297
-		) + sd_aui_colors( false, false, false, false, true );
298
-	}
299
-
300
-	$input = wp_parse_args( $overwrite, $defaults );
301
-
302
-	return $input;
213
+    global $aui_bs5;
214
+
215
+    $defaults = array(
216
+        'type'     => 'select',
217
+        'title'    => __( 'Border', 'ayecode-connect' ),
218
+        'options'  => array(),
219
+        'default'  => '',
220
+        'desc_tip' => true,
221
+        'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
222
+    );
223
+
224
+    // title
225
+    if ( 'rounded' === $type ) {
226
+        $defaults['title']           = __( 'Border radius type', 'ayecode-connect' );
227
+        $defaults['options']         = array(
228
+            ''               => __( 'Default', 'ayecode-connect' ),
229
+            'rounded'        => 'rounded',
230
+            'rounded-top'    => 'rounded-top',
231
+            'rounded-right'  => 'rounded-right',
232
+            'rounded-bottom' => 'rounded-bottom',
233
+            'rounded-left'   => 'rounded-left',
234
+        );
235
+        $defaults['element_require'] = '([%border%]&&[%border%]!="0")';
236
+    } elseif ( 'rounded_size' === $type ) {
237
+        $defaults['title'] = __( 'Border radius size', 'ayecode-connect' );
238
+
239
+        if ( $aui_bs5 ) {
240
+            $defaults['options'] = array(
241
+                ''       => __( 'Default', 'ayecode-connect' ),
242
+                '0'      => '0',
243
+                '1'      => '1',
244
+                '2'      => '2',
245
+                '3'      => '3',
246
+                '4'      => '4',
247
+                'circle' => 'circle',
248
+                'pill'   => 'pill',
249
+            );
250
+        } else {
251
+            $defaults['options'] = array(
252
+                ''   => __( 'Default', 'ayecode-connect' ),
253
+                'sm' => __( 'Small', 'ayecode-connect' ),
254
+                'lg' => __( 'Large', 'ayecode-connect' ),
255
+            );
256
+        }
257
+        $defaults['element_require'] = '([%border%]&&[%border%]!="0")';
258
+    } elseif ( 'width' === $type ) { // BS%
259
+        $defaults['title']           = __( 'Border width', 'ayecode-connect' );
260
+        $defaults['options']         = array(
261
+            ''         => __( 'Default', 'ayecode-connect' ),
262
+            'border-2' => '2',
263
+            'border-3' => '3',
264
+            'border-4' => '4',
265
+            'border-5' => '5',
266
+        );
267
+        $defaults['element_require'] = $aui_bs5 ? '([%border%]&&[%border%]!="0")' : '1==2';
268
+    } elseif ( 'opacity' === $type ) { // BS%
269
+        $defaults['title']           = __( 'Border opacity', 'ayecode-connect' );
270
+        $defaults['options']         = array(
271
+            ''                  => __( 'Default', 'ayecode-connect' ),
272
+            'border-opacity-75' => '75%',
273
+            'border-opacity-50' => '50%',
274
+            'border-opacity-25' => '25%',
275
+            'border-opacity-10' => '10%',
276
+        );
277
+        $defaults['element_require'] = $aui_bs5 ? '([%border%]&&[%border%]!="0")' : '1==2';
278
+    } elseif ( 'type' === $type ) {
279
+        $defaults['title']           = __( 'Border show', 'ayecode-connect' );
280
+        $defaults['options']         = array(
281
+            'border'          => __( 'Full (set color to show)', 'ayecode-connect' ),
282
+            'border-top'      => __( 'Top', 'ayecode-connect' ),
283
+            'border-bottom'   => __( 'Bottom', 'ayecode-connect' ),
284
+            'border-left'     => __( 'Left', 'ayecode-connect' ),
285
+            'border-right'    => __( 'Right', 'ayecode-connect' ),
286
+            'border-top-0'    => __( '-Top', 'ayecode-connect' ),
287
+            'border-bottom-0' => __( '-Bottom', 'ayecode-connect' ),
288
+            'border-left-0'   => __( '-Left', 'ayecode-connect' ),
289
+            'border-right-0'  => __( '-Right', 'ayecode-connect' ),
290
+        );
291
+        $defaults['element_require'] = '([%border%]&&[%border%]!="0")';
292
+    } else {
293
+        $defaults['title']   = __( 'Border color', 'ayecode-connect' );
294
+        $defaults['options'] = array(
295
+            ''  => __( 'Default', 'ayecode-connect' ),
296
+            '0' => __( 'None', 'ayecode-connect' )
297
+        ) + sd_aui_colors( false, false, false, false, true );
298
+    }
299
+
300
+    $input = wp_parse_args( $overwrite, $defaults );
301
+
302
+    return $input;
303 303
 }
304 304
 
305 305
 /**
@@ -311,25 +311,25 @@  discard block
 block discarded – undo
311 311
  * @return array
312 312
  */
313 313
 function sd_get_shadow_input( $type = 'shadow', $overwrite = array() ) {
314
-	$options = array(
315
-		''          => __( 'None', 'ayecode-connect' ),
316
-		'shadow-sm' => __( 'Small', 'ayecode-connect' ),
317
-		'shadow'    => __( 'Regular', 'ayecode-connect' ),
318
-		'shadow-lg' => __( 'Large', 'ayecode-connect' ),
319
-	);
314
+    $options = array(
315
+        ''          => __( 'None', 'ayecode-connect' ),
316
+        'shadow-sm' => __( 'Small', 'ayecode-connect' ),
317
+        'shadow'    => __( 'Regular', 'ayecode-connect' ),
318
+        'shadow-lg' => __( 'Large', 'ayecode-connect' ),
319
+    );
320 320
 
321
-	$defaults = array(
322
-		'type'     => 'select',
323
-		'title'    => __( 'Shadow', 'ayecode-connect' ),
324
-		'options'  => $options,
325
-		'default'  => '',
326
-		'desc_tip' => true,
327
-		'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
328
-	);
321
+    $defaults = array(
322
+        'type'     => 'select',
323
+        'title'    => __( 'Shadow', 'ayecode-connect' ),
324
+        'options'  => $options,
325
+        'default'  => '',
326
+        'desc_tip' => true,
327
+        'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
328
+    );
329 329
 
330
-	$input = wp_parse_args( $overwrite, $defaults );
330
+    $input = wp_parse_args( $overwrite, $defaults );
331 331
 
332
-	return $input;
332
+    return $input;
333 333
 }
334 334
 
335 335
 /**
@@ -341,23 +341,23 @@  discard block
 block discarded – undo
341 341
  * @return array
342 342
  */
343 343
 function sd_get_background_input( $type = 'bg', $overwrite = array() ) {
344
-	$options = array(
345
-		           ''            => __( 'None', 'ayecode-connect' ),
346
-		           'transparent' => __( 'Transparent', 'ayecode-connect' ),
347
-	           ) + sd_aui_colors(false,false,false,false,true);
344
+    $options = array(
345
+                    ''            => __( 'None', 'ayecode-connect' ),
346
+                    'transparent' => __( 'Transparent', 'ayecode-connect' ),
347
+                ) + sd_aui_colors(false,false,false,false,true);
348 348
 
349
-	$defaults = array(
350
-		'type'     => 'select',
351
-		'title'    => __( 'Background color', 'ayecode-connect' ),
352
-		'options'  => $options,
353
-		'default'  => '',
354
-		'desc_tip' => true,
355
-		'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
356
-	);
349
+    $defaults = array(
350
+        'type'     => 'select',
351
+        'title'    => __( 'Background color', 'ayecode-connect' ),
352
+        'options'  => $options,
353
+        'default'  => '',
354
+        'desc_tip' => true,
355
+        'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
356
+    );
357 357
 
358
-	$input = wp_parse_args( $overwrite, $defaults );
358
+    $input = wp_parse_args( $overwrite, $defaults );
359 359
 
360
-	return $input;
360
+    return $input;
361 361
 }
362 362
 
363 363
 /**
@@ -369,35 +369,35 @@  discard block
 block discarded – undo
369 369
  * @return array
370 370
  */
371 371
 function sd_get_opacity_input( $type = 'opacity', $overwrite = array() ) {
372
-	$options = array(
373
-		''            => __( 'Default', 'ayecode-connect' ),
374
-		'opacity-10'  => '10%',
375
-		'opacity-15'  => '15%',
376
-		'opacity-25'  => '25%',
377
-		'opacity-35'  => '35%',
378
-		'opacity-40'  => '40%',
379
-		'opacity-50'  => '50%',
380
-		'opacity-60'  => '60%',
381
-		'opacity-65'  => '65%',
382
-		'opacity-70'  => '70%',
383
-		'opacity-75'  => '75%',
384
-		'opacity-80'  => '80%',
385
-		'opacity-90'  => '90%',
386
-		'opacity-100' => '100%',
387
-	);
388
-
389
-	$defaults = array(
390
-		'type'     => 'select',
391
-		'title'    => __( 'Opacity', 'ayecode-connect' ),
392
-		'options'  => $options,
393
-		'default'  => '',
394
-		'desc_tip' => true,
395
-		'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
396
-	);
397
-
398
-	$input = wp_parse_args( $overwrite, $defaults );
399
-
400
-	return $input;
372
+    $options = array(
373
+        ''            => __( 'Default', 'ayecode-connect' ),
374
+        'opacity-10'  => '10%',
375
+        'opacity-15'  => '15%',
376
+        'opacity-25'  => '25%',
377
+        'opacity-35'  => '35%',
378
+        'opacity-40'  => '40%',
379
+        'opacity-50'  => '50%',
380
+        'opacity-60'  => '60%',
381
+        'opacity-65'  => '65%',
382
+        'opacity-70'  => '70%',
383
+        'opacity-75'  => '75%',
384
+        'opacity-80'  => '80%',
385
+        'opacity-90'  => '90%',
386
+        'opacity-100' => '100%',
387
+    );
388
+
389
+    $defaults = array(
390
+        'type'     => 'select',
391
+        'title'    => __( 'Opacity', 'ayecode-connect' ),
392
+        'options'  => $options,
393
+        'default'  => '',
394
+        'desc_tip' => true,
395
+        'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
396
+    );
397
+
398
+    $input = wp_parse_args( $overwrite, $defaults );
399
+
400
+    return $input;
401 401
 }
402 402
 
403 403
 /**
@@ -410,124 +410,124 @@  discard block
 block discarded – undo
410 410
  */
411 411
 function sd_get_background_inputs( $type = 'bg', $overwrite = array(), $overwrite_color = array(), $overwrite_gradient = array(), $overwrite_image = array(), $include_button_colors = false ) {
412 412
 
413
-	$color_options = $include_button_colors ? sd_aui_colors( false, true, true, true, true ) : sd_aui_colors(false, false, false, false, true );
414
-
415
-	$options = array(
416
-		           ''            => __( 'None', 'ayecode-connect' ),
417
-		           'transparent' => __( 'Transparent', 'ayecode-connect' ),
418
-	           ) + $color_options;
419
-
420
-	if ( false !== $overwrite_color ) {
421
-		$options['custom-color'] = __( 'Custom Color', 'ayecode-connect' );
422
-	}
423
-
424
-	if ( false !== $overwrite_gradient ) {
425
-		$options['custom-gradient'] = __( 'Custom Gradient', 'ayecode-connect' );
426
-	}
427
-
428
-	$defaults = array(
429
-		'type'     => 'select',
430
-		'title'    => __( 'Background Color', 'ayecode-connect' ),
431
-		'options'  => $options,
432
-		'default'  => '',
433
-		'desc_tip' => true,
434
-		'group'    => __( 'Background', 'ayecode-connect' ),
435
-	);
436
-
437
-	if ( $overwrite !== false ) {
438
-		$input[ $type ] = wp_parse_args( $overwrite, $defaults );
439
-	}
440
-
441
-	if ( $overwrite_color !== false ) {
442
-		$input[ $type . '_color' ] = wp_parse_args(
443
-			$overwrite_color,
444
-			array(
445
-				'type'            => 'color',
446
-				'title'           => __( 'Custom color', 'ayecode-connect' ),
447
-				'placeholder'     => '',
448
-				'default'         => '#0073aa',
449
-				'desc_tip'        => true,
450
-				'group'           => __( 'Background', 'ayecode-connect' ),
451
-				'element_require' => '[%' . $type . '%]=="custom-color"',
452
-			)
453
-		);
454
-	}
455
-
456
-	if ( $overwrite_gradient !== false ) {
457
-		$input[ $type . '_gradient' ] = wp_parse_args(
458
-			$overwrite_gradient,
459
-			array(
460
-				'type'            => 'gradient',
461
-				'title'           => __( 'Custom gradient', 'ayecode-connect' ),
462
-				'placeholder'     => '',
463
-				'default'         => 'linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%)',
464
-				'desc_tip'        => true,
465
-				'group'           => __( 'Background', 'ayecode-connect' ),
466
-				'element_require' => '[%' . $type . '%]=="custom-gradient"',
467
-			)
468
-		);
469
-	}
470
-
471
-	if ( $overwrite_image !== false ) {
472
-
473
-		$input[ $type . '_image_fixed' ] = array(
474
-			'type'            => 'checkbox',
475
-			'title'           => __( 'Fixed background', 'ayecode-connect' ),
476
-			'default'         => '',
477
-			'desc_tip'        => true,
478
-			'group'           => ! empty( $overwrite_image['group'] ) ? $overwrite_image['group'] : __( 'Background', 'ayecode-connect' ),
479
-			'element_require' => '( [%' . $type . '%]=="" || [%' . $type . '%]=="custom-color" || [%' . $type . '%]=="custom-gradient" || [%' . $type . '%]=="transparent" )',
480
-
481
-		);
482
-
483
-		$input[ $type . '_image_use_featured' ] = array(
484
-			'type'            => 'checkbox',
485
-			'title'           => __( 'Use featured image', 'ayecode-connect' ),
486
-			'default'         => '',
487
-			'desc_tip'        => true,
488
-			'group'           => ! empty( $overwrite_image['group'] ) ? $overwrite_image['group'] : __( 'Background', 'ayecode-connect' ),
489
-			'element_require' => '( [%' . $type . '%]=="" || [%' . $type . '%]=="custom-color" || [%' . $type . '%]=="custom-gradient" || [%' . $type . '%]=="transparent" )',
490
-
491
-		);
492
-
493
-		$input[ $type . '_image' ] = wp_parse_args(
494
-			$overwrite_image,
495
-			array(
496
-				'type'        => 'image',
497
-				'title'       => __( 'Custom image', 'ayecode-connect' ),
498
-				'placeholder' => '',
499
-				'default'     => '',
500
-				'desc_tip'    => true,
501
-				'group'       => __( 'Background', 'ayecode-connect' ),
502
-				//          'element_require' => ' ![%' . $type . '_image_use_featured%] '
503
-			)
504
-		);
505
-
506
-		$input[ $type . '_image_id' ] = wp_parse_args(
507
-			$overwrite_image,
508
-			array(
509
-				'type'        => 'hidden',
510
-				'hidden_type' => 'number',
511
-				'title'       => '',
512
-				'placeholder' => '',
513
-				'default'     => '',
514
-				'group'       => __( 'Background', 'ayecode-connect' ),
515
-			)
516
-		);
517
-
518
-		$input[ $type . '_image_xy' ] = wp_parse_args(
519
-			$overwrite_image,
520
-			array(
521
-				'type'        => 'image_xy',
522
-				'title'       => '',
523
-				'placeholder' => '',
524
-				'default'     => '',
525
-				'group'       => __( 'Background', 'ayecode-connect' ),
526
-			)
527
-		);
528
-	}
529
-
530
-	return $input;
413
+    $color_options = $include_button_colors ? sd_aui_colors( false, true, true, true, true ) : sd_aui_colors(false, false, false, false, true );
414
+
415
+    $options = array(
416
+                    ''            => __( 'None', 'ayecode-connect' ),
417
+                    'transparent' => __( 'Transparent', 'ayecode-connect' ),
418
+                ) + $color_options;
419
+
420
+    if ( false !== $overwrite_color ) {
421
+        $options['custom-color'] = __( 'Custom Color', 'ayecode-connect' );
422
+    }
423
+
424
+    if ( false !== $overwrite_gradient ) {
425
+        $options['custom-gradient'] = __( 'Custom Gradient', 'ayecode-connect' );
426
+    }
427
+
428
+    $defaults = array(
429
+        'type'     => 'select',
430
+        'title'    => __( 'Background Color', 'ayecode-connect' ),
431
+        'options'  => $options,
432
+        'default'  => '',
433
+        'desc_tip' => true,
434
+        'group'    => __( 'Background', 'ayecode-connect' ),
435
+    );
436
+
437
+    if ( $overwrite !== false ) {
438
+        $input[ $type ] = wp_parse_args( $overwrite, $defaults );
439
+    }
440
+
441
+    if ( $overwrite_color !== false ) {
442
+        $input[ $type . '_color' ] = wp_parse_args(
443
+            $overwrite_color,
444
+            array(
445
+                'type'            => 'color',
446
+                'title'           => __( 'Custom color', 'ayecode-connect' ),
447
+                'placeholder'     => '',
448
+                'default'         => '#0073aa',
449
+                'desc_tip'        => true,
450
+                'group'           => __( 'Background', 'ayecode-connect' ),
451
+                'element_require' => '[%' . $type . '%]=="custom-color"',
452
+            )
453
+        );
454
+    }
455
+
456
+    if ( $overwrite_gradient !== false ) {
457
+        $input[ $type . '_gradient' ] = wp_parse_args(
458
+            $overwrite_gradient,
459
+            array(
460
+                'type'            => 'gradient',
461
+                'title'           => __( 'Custom gradient', 'ayecode-connect' ),
462
+                'placeholder'     => '',
463
+                'default'         => 'linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%)',
464
+                'desc_tip'        => true,
465
+                'group'           => __( 'Background', 'ayecode-connect' ),
466
+                'element_require' => '[%' . $type . '%]=="custom-gradient"',
467
+            )
468
+        );
469
+    }
470
+
471
+    if ( $overwrite_image !== false ) {
472
+
473
+        $input[ $type . '_image_fixed' ] = array(
474
+            'type'            => 'checkbox',
475
+            'title'           => __( 'Fixed background', 'ayecode-connect' ),
476
+            'default'         => '',
477
+            'desc_tip'        => true,
478
+            'group'           => ! empty( $overwrite_image['group'] ) ? $overwrite_image['group'] : __( 'Background', 'ayecode-connect' ),
479
+            'element_require' => '( [%' . $type . '%]=="" || [%' . $type . '%]=="custom-color" || [%' . $type . '%]=="custom-gradient" || [%' . $type . '%]=="transparent" )',
480
+
481
+        );
482
+
483
+        $input[ $type . '_image_use_featured' ] = array(
484
+            'type'            => 'checkbox',
485
+            'title'           => __( 'Use featured image', 'ayecode-connect' ),
486
+            'default'         => '',
487
+            'desc_tip'        => true,
488
+            'group'           => ! empty( $overwrite_image['group'] ) ? $overwrite_image['group'] : __( 'Background', 'ayecode-connect' ),
489
+            'element_require' => '( [%' . $type . '%]=="" || [%' . $type . '%]=="custom-color" || [%' . $type . '%]=="custom-gradient" || [%' . $type . '%]=="transparent" )',
490
+
491
+        );
492
+
493
+        $input[ $type . '_image' ] = wp_parse_args(
494
+            $overwrite_image,
495
+            array(
496
+                'type'        => 'image',
497
+                'title'       => __( 'Custom image', 'ayecode-connect' ),
498
+                'placeholder' => '',
499
+                'default'     => '',
500
+                'desc_tip'    => true,
501
+                'group'       => __( 'Background', 'ayecode-connect' ),
502
+                //          'element_require' => ' ![%' . $type . '_image_use_featured%] '
503
+            )
504
+        );
505
+
506
+        $input[ $type . '_image_id' ] = wp_parse_args(
507
+            $overwrite_image,
508
+            array(
509
+                'type'        => 'hidden',
510
+                'hidden_type' => 'number',
511
+                'title'       => '',
512
+                'placeholder' => '',
513
+                'default'     => '',
514
+                'group'       => __( 'Background', 'ayecode-connect' ),
515
+            )
516
+        );
517
+
518
+        $input[ $type . '_image_xy' ] = wp_parse_args(
519
+            $overwrite_image,
520
+            array(
521
+                'type'        => 'image_xy',
522
+                'title'       => '',
523
+                'placeholder' => '',
524
+                'default'     => '',
525
+                'group'       => __( 'Background', 'ayecode-connect' ),
526
+            )
527
+        );
528
+    }
529
+
530
+    return $input;
531 531
 }
532 532
 
533 533
 /**
@@ -540,175 +540,175 @@  discard block
 block discarded – undo
540 540
  */
541 541
 function sd_get_shape_divider_inputs( $type = 'sd', $overwrite = array(), $overwrite_color = array(), $overwrite_gradient = array(), $overwrite_image = array() ) {
542 542
 
543
-	$options = array(
544
-		''                      => __( 'None', 'ayecode-connect' ),
545
-		'mountains'             => __( 'Mountains', 'ayecode-connect' ),
546
-		'drops'                 => __( 'Drops', 'ayecode-connect' ),
547
-		'clouds'                => __( 'Clouds', 'ayecode-connect' ),
548
-		'zigzag'                => __( 'Zigzag', 'ayecode-connect' ),
549
-		'pyramids'              => __( 'Pyramids', 'ayecode-connect' ),
550
-		'triangle'              => __( 'Triangle', 'ayecode-connect' ),
551
-		'triangle-asymmetrical' => __( 'Triangle Asymmetrical', 'ayecode-connect' ),
552
-		'tilt'                  => __( 'Tilt', 'ayecode-connect' ),
553
-		'opacity-tilt'          => __( 'Opacity Tilt', 'ayecode-connect' ),
554
-		'opacity-fan'           => __( 'Opacity Fan', 'ayecode-connect' ),
555
-		'curve'                 => __( 'Curve', 'ayecode-connect' ),
556
-		'curve-asymmetrical'    => __( 'Curve Asymmetrical', 'ayecode-connect' ),
557
-		'waves'                 => __( 'Waves', 'ayecode-connect' ),
558
-		'wave-brush'            => __( 'Wave Brush', 'ayecode-connect' ),
559
-		'waves-pattern'         => __( 'Waves Pattern', 'ayecode-connect' ),
560
-		'arrow'                 => __( 'Arrow', 'ayecode-connect' ),
561
-		'split'                 => __( 'Split', 'ayecode-connect' ),
562
-		'book'                  => __( 'Book', 'ayecode-connect' ),
563
-	);
564
-
565
-	$defaults = array(
566
-		'type'     => 'select',
567
-		'title'    => __( 'Type', 'ayecode-connect' ),
568
-		'options'  => $options,
569
-		'default'  => '',
570
-		'desc_tip' => true,
571
-		'group'    => __( 'Shape Divider', 'ayecode-connect' ),
572
-	);
573
-
574
-	$input[ $type ] = wp_parse_args( $overwrite, $defaults );
575
-
576
-	$input[ $type . '_notice' ] = array(
577
-		'type'            => 'notice',
578
-		'desc'            => __( 'Parent element must be position `relative`', 'ayecode-connect' ),
579
-		'status'          => 'warning',
580
-		'group'           => __( 'Shape Divider', 'ayecode-connect' ),
581
-		'element_require' => '[%' . $type . '%]!=""',
582
-	);
583
-
584
-	$input[ $type . '_position' ] = wp_parse_args(
585
-		$overwrite_color,
586
-		array(
587
-			'type'            => 'select',
588
-			'title'           => __( 'Position', 'ayecode-connect' ),
589
-			'options'         => array(
590
-				'top'    => __( 'Top', 'ayecode-connect' ),
591
-				'bottom' => __( 'Bottom', 'ayecode-connect' ),
592
-			),
593
-			'desc_tip'        => true,
594
-			'group'           => __( 'Shape Divider', 'ayecode-connect' ),
595
-			'element_require' => '[%' . $type . '%]!=""',
596
-		)
597
-	);
598
-
599
-	$options = array(
600
-		           ''            => __( 'None', 'ayecode-connect' ),
601
-		           'transparent' => __( 'Transparent', 'ayecode-connect' ),
602
-	           ) + sd_aui_colors(false,false,false,false,true )
603
-	           + array(
604
-		           'custom-color' => __( 'Custom Color', 'ayecode-connect' ),
605
-	           );
606
-
607
-	$input[ $type . '_color' ] = wp_parse_args(
608
-		$overwrite_color,
609
-		array(
610
-			'type'            => 'select',
611
-			'title'           => __( 'Color', 'ayecode-connect' ),
612
-			'options'         => $options,
613
-			'desc_tip'        => true,
614
-			'group'           => __( 'Shape Divider', 'ayecode-connect' ),
615
-			'element_require' => '[%' . $type . '%]!=""',
616
-		)
617
-	);
618
-
619
-	$input[ $type . '_custom_color' ] = wp_parse_args(
620
-		$overwrite_color,
621
-		array(
622
-			'type'            => 'color',
623
-			'title'           => __( 'Custom color', 'ayecode-connect' ),
624
-			'placeholder'     => '',
625
-			'default'         => '#0073aa',
626
-			'desc_tip'        => true,
627
-			'group'           => __( 'Shape Divider', 'ayecode-connect' ),
628
-			'element_require' => '[%' . $type . '_color%]=="custom-color" && [%' . $type . '%]!=""',
629
-		)
630
-	);
631
-
632
-	$input[ $type . '_width' ] = wp_parse_args(
633
-		$overwrite_gradient,
634
-		array(
635
-			'type'              => 'range',
636
-			'title'             => __( 'Width', 'ayecode-connect' ),
637
-			'placeholder'       => '',
638
-			'default'           => '200',
639
-			'desc_tip'          => true,
640
-			'custom_attributes' => array(
641
-				'min' => 100,
642
-				'max' => 300,
643
-			),
644
-			'group'             => __( 'Shape Divider', 'ayecode-connect' ),
645
-			'element_require'   => '[%' . $type . '%]!=""',
646
-		)
647
-	);
648
-
649
-	$input[ $type . '_height' ] = array(
650
-		'type'              => 'range',
651
-		'title'             => __( 'Height', 'ayecode-connect' ),
652
-		'default'           => '100',
653
-		'desc_tip'          => true,
654
-		'custom_attributes' => array(
655
-			'min' => 0,
656
-			'max' => 500,
657
-		),
658
-		'group'             => __( 'Shape Divider', 'ayecode-connect' ),
659
-		'element_require'   => '[%' . $type . '%]!=""',
660
-	);
661
-
662
-	$requires = array(
663
-		'mountains'             => array( 'flip' ),
664
-		'drops'                 => array( 'flip', 'invert' ),
665
-		'clouds'                => array( 'flip', 'invert' ),
666
-		'zigzag'                => array(),
667
-		'pyramids'              => array( 'flip', 'invert' ),
668
-		'triangle'              => array( 'invert' ),
669
-		'triangle-asymmetrical' => array( 'flip', 'invert' ),
670
-		'tilt'                  => array( 'flip' ),
671
-		'opacity-tilt'          => array( 'flip' ),
672
-		'opacity-fan'           => array(),
673
-		'curve'                 => array( 'invert' ),
674
-		'curve-asymmetrical'    => array( 'flip', 'invert' ),
675
-		'waves'                 => array( 'flip', 'invert' ),
676
-		'wave-brush'            => array( 'flip' ),
677
-		'waves-pattern'         => array( 'flip' ),
678
-		'arrow'                 => array( 'invert' ),
679
-		'split'                 => array( 'invert' ),
680
-		'book'                  => array( 'invert' ),
681
-	);
682
-
683
-	$input[ $type . '_flip' ] = array(
684
-		'type'            => 'checkbox',
685
-		'title'           => __( 'Flip', 'ayecode-connect' ),
686
-		'default'         => '',
687
-		'desc_tip'        => true,
688
-		'group'           => __( 'Shape Divider', 'ayecode-connect' ),
689
-		'element_require' => sd_get_element_require_string( $requires, 'flip', 'sd' ),
690
-	);
691
-
692
-	$input[ $type . '_invert' ] = array(
693
-		'type'            => 'checkbox',
694
-		'title'           => __( 'Invert', 'ayecode-connect' ),
695
-		'default'         => '',
696
-		'desc_tip'        => true,
697
-		'group'           => __( 'Shape Divider', 'ayecode-connect' ),
698
-		'element_require' => sd_get_element_require_string( $requires, 'invert', 'sd' ),
699
-	);
700
-
701
-	$input[ $type . '_btf' ] = array(
702
-		'type'            => 'checkbox',
703
-		'title'           => __( 'Bring to front', 'ayecode-connect' ),
704
-		'default'         => '',
705
-		'desc_tip'        => true,
706
-		'group'           => __( 'Shape Divider', 'ayecode-connect' ),
707
-		'element_require' => '[%' . $type . '%]!=""',
708
-
709
-	);
710
-
711
-	return $input;
543
+    $options = array(
544
+        ''                      => __( 'None', 'ayecode-connect' ),
545
+        'mountains'             => __( 'Mountains', 'ayecode-connect' ),
546
+        'drops'                 => __( 'Drops', 'ayecode-connect' ),
547
+        'clouds'                => __( 'Clouds', 'ayecode-connect' ),
548
+        'zigzag'                => __( 'Zigzag', 'ayecode-connect' ),
549
+        'pyramids'              => __( 'Pyramids', 'ayecode-connect' ),
550
+        'triangle'              => __( 'Triangle', 'ayecode-connect' ),
551
+        'triangle-asymmetrical' => __( 'Triangle Asymmetrical', 'ayecode-connect' ),
552
+        'tilt'                  => __( 'Tilt', 'ayecode-connect' ),
553
+        'opacity-tilt'          => __( 'Opacity Tilt', 'ayecode-connect' ),
554
+        'opacity-fan'           => __( 'Opacity Fan', 'ayecode-connect' ),
555
+        'curve'                 => __( 'Curve', 'ayecode-connect' ),
556
+        'curve-asymmetrical'    => __( 'Curve Asymmetrical', 'ayecode-connect' ),
557
+        'waves'                 => __( 'Waves', 'ayecode-connect' ),
558
+        'wave-brush'            => __( 'Wave Brush', 'ayecode-connect' ),
559
+        'waves-pattern'         => __( 'Waves Pattern', 'ayecode-connect' ),
560
+        'arrow'                 => __( 'Arrow', 'ayecode-connect' ),
561
+        'split'                 => __( 'Split', 'ayecode-connect' ),
562
+        'book'                  => __( 'Book', 'ayecode-connect' ),
563
+    );
564
+
565
+    $defaults = array(
566
+        'type'     => 'select',
567
+        'title'    => __( 'Type', 'ayecode-connect' ),
568
+        'options'  => $options,
569
+        'default'  => '',
570
+        'desc_tip' => true,
571
+        'group'    => __( 'Shape Divider', 'ayecode-connect' ),
572
+    );
573
+
574
+    $input[ $type ] = wp_parse_args( $overwrite, $defaults );
575
+
576
+    $input[ $type . '_notice' ] = array(
577
+        'type'            => 'notice',
578
+        'desc'            => __( 'Parent element must be position `relative`', 'ayecode-connect' ),
579
+        'status'          => 'warning',
580
+        'group'           => __( 'Shape Divider', 'ayecode-connect' ),
581
+        'element_require' => '[%' . $type . '%]!=""',
582
+    );
583
+
584
+    $input[ $type . '_position' ] = wp_parse_args(
585
+        $overwrite_color,
586
+        array(
587
+            'type'            => 'select',
588
+            'title'           => __( 'Position', 'ayecode-connect' ),
589
+            'options'         => array(
590
+                'top'    => __( 'Top', 'ayecode-connect' ),
591
+                'bottom' => __( 'Bottom', 'ayecode-connect' ),
592
+            ),
593
+            'desc_tip'        => true,
594
+            'group'           => __( 'Shape Divider', 'ayecode-connect' ),
595
+            'element_require' => '[%' . $type . '%]!=""',
596
+        )
597
+    );
598
+
599
+    $options = array(
600
+                    ''            => __( 'None', 'ayecode-connect' ),
601
+                    'transparent' => __( 'Transparent', 'ayecode-connect' ),
602
+                ) + sd_aui_colors(false,false,false,false,true )
603
+               + array(
604
+                    'custom-color' => __( 'Custom Color', 'ayecode-connect' ),
605
+                );
606
+
607
+    $input[ $type . '_color' ] = wp_parse_args(
608
+        $overwrite_color,
609
+        array(
610
+            'type'            => 'select',
611
+            'title'           => __( 'Color', 'ayecode-connect' ),
612
+            'options'         => $options,
613
+            'desc_tip'        => true,
614
+            'group'           => __( 'Shape Divider', 'ayecode-connect' ),
615
+            'element_require' => '[%' . $type . '%]!=""',
616
+        )
617
+    );
618
+
619
+    $input[ $type . '_custom_color' ] = wp_parse_args(
620
+        $overwrite_color,
621
+        array(
622
+            'type'            => 'color',
623
+            'title'           => __( 'Custom color', 'ayecode-connect' ),
624
+            'placeholder'     => '',
625
+            'default'         => '#0073aa',
626
+            'desc_tip'        => true,
627
+            'group'           => __( 'Shape Divider', 'ayecode-connect' ),
628
+            'element_require' => '[%' . $type . '_color%]=="custom-color" && [%' . $type . '%]!=""',
629
+        )
630
+    );
631
+
632
+    $input[ $type . '_width' ] = wp_parse_args(
633
+        $overwrite_gradient,
634
+        array(
635
+            'type'              => 'range',
636
+            'title'             => __( 'Width', 'ayecode-connect' ),
637
+            'placeholder'       => '',
638
+            'default'           => '200',
639
+            'desc_tip'          => true,
640
+            'custom_attributes' => array(
641
+                'min' => 100,
642
+                'max' => 300,
643
+            ),
644
+            'group'             => __( 'Shape Divider', 'ayecode-connect' ),
645
+            'element_require'   => '[%' . $type . '%]!=""',
646
+        )
647
+    );
648
+
649
+    $input[ $type . '_height' ] = array(
650
+        'type'              => 'range',
651
+        'title'             => __( 'Height', 'ayecode-connect' ),
652
+        'default'           => '100',
653
+        'desc_tip'          => true,
654
+        'custom_attributes' => array(
655
+            'min' => 0,
656
+            'max' => 500,
657
+        ),
658
+        'group'             => __( 'Shape Divider', 'ayecode-connect' ),
659
+        'element_require'   => '[%' . $type . '%]!=""',
660
+    );
661
+
662
+    $requires = array(
663
+        'mountains'             => array( 'flip' ),
664
+        'drops'                 => array( 'flip', 'invert' ),
665
+        'clouds'                => array( 'flip', 'invert' ),
666
+        'zigzag'                => array(),
667
+        'pyramids'              => array( 'flip', 'invert' ),
668
+        'triangle'              => array( 'invert' ),
669
+        'triangle-asymmetrical' => array( 'flip', 'invert' ),
670
+        'tilt'                  => array( 'flip' ),
671
+        'opacity-tilt'          => array( 'flip' ),
672
+        'opacity-fan'           => array(),
673
+        'curve'                 => array( 'invert' ),
674
+        'curve-asymmetrical'    => array( 'flip', 'invert' ),
675
+        'waves'                 => array( 'flip', 'invert' ),
676
+        'wave-brush'            => array( 'flip' ),
677
+        'waves-pattern'         => array( 'flip' ),
678
+        'arrow'                 => array( 'invert' ),
679
+        'split'                 => array( 'invert' ),
680
+        'book'                  => array( 'invert' ),
681
+    );
682
+
683
+    $input[ $type . '_flip' ] = array(
684
+        'type'            => 'checkbox',
685
+        'title'           => __( 'Flip', 'ayecode-connect' ),
686
+        'default'         => '',
687
+        'desc_tip'        => true,
688
+        'group'           => __( 'Shape Divider', 'ayecode-connect' ),
689
+        'element_require' => sd_get_element_require_string( $requires, 'flip', 'sd' ),
690
+    );
691
+
692
+    $input[ $type . '_invert' ] = array(
693
+        'type'            => 'checkbox',
694
+        'title'           => __( 'Invert', 'ayecode-connect' ),
695
+        'default'         => '',
696
+        'desc_tip'        => true,
697
+        'group'           => __( 'Shape Divider', 'ayecode-connect' ),
698
+        'element_require' => sd_get_element_require_string( $requires, 'invert', 'sd' ),
699
+    );
700
+
701
+    $input[ $type . '_btf' ] = array(
702
+        'type'            => 'checkbox',
703
+        'title'           => __( 'Bring to front', 'ayecode-connect' ),
704
+        'default'         => '',
705
+        'desc_tip'        => true,
706
+        'group'           => __( 'Shape Divider', 'ayecode-connect' ),
707
+        'element_require' => '[%' . $type . '%]!=""',
708
+
709
+    );
710
+
711
+    return $input;
712 712
 }
713 713
 
714 714
 /**
@@ -721,22 +721,22 @@  discard block
 block discarded – undo
721 721
  * @return string
722 722
  */
723 723
 function sd_get_element_require_string( $args, $key, $type ) {
724
-	$output   = '';
725
-	$requires = array();
724
+    $output   = '';
725
+    $requires = array();
726 726
 
727
-	if ( ! empty( $args ) ) {
728
-		foreach ( $args as $t => $k ) {
729
-			if ( in_array( $key, $k ) ) {
730
-				$requires[] = '[%' . $type . '%]=="' . $t . '"';
731
-			}
732
-		}
727
+    if ( ! empty( $args ) ) {
728
+        foreach ( $args as $t => $k ) {
729
+            if ( in_array( $key, $k ) ) {
730
+                $requires[] = '[%' . $type . '%]=="' . $t . '"';
731
+            }
732
+        }
733 733
 
734
-		if ( ! empty( $requires ) ) {
735
-			$output = '(' . implode( ' || ', $requires ) . ')';
736
-		}
737
-	}
734
+        if ( ! empty( $requires ) ) {
735
+            $output = '(' . implode( ' || ', $requires ) . ')';
736
+        }
737
+    }
738 738
 
739
-	return $output;
739
+    return $output;
740 740
 }
741 741
 
742 742
 /**
@@ -748,41 +748,41 @@  discard block
 block discarded – undo
748 748
  * @return array
749 749
  */
750 750
 function sd_get_text_color_input( $type = 'text_color', $overwrite = array(), $has_custom = false, $emphasis = true ) {
751
-	$options = array(
752
-		           '' => __( 'None', 'ayecode-connect' ),
753
-	           ) + sd_aui_colors(false,false,false,false,false, true);
751
+    $options = array(
752
+                    '' => __( 'None', 'ayecode-connect' ),
753
+                ) + sd_aui_colors(false,false,false,false,false, true);
754 754
 
755
-	if ( $has_custom ) {
756
-		$options['custom'] = __( 'Custom color', 'ayecode-connect' );
757
-	}
755
+    if ( $has_custom ) {
756
+        $options['custom'] = __( 'Custom color', 'ayecode-connect' );
757
+    }
758 758
 
759
-	$defaults = array(
760
-		'type'     => 'select',
761
-		'title'    => __( 'Text color', 'ayecode-connect' ),
762
-		'options'  => $options,
763
-		'default'  => '',
764
-		'desc_tip' => true,
765
-		'group'    => __( 'Typography', 'ayecode-connect' ),
766
-	);
759
+    $defaults = array(
760
+        'type'     => 'select',
761
+        'title'    => __( 'Text color', 'ayecode-connect' ),
762
+        'options'  => $options,
763
+        'default'  => '',
764
+        'desc_tip' => true,
765
+        'group'    => __( 'Typography', 'ayecode-connect' ),
766
+    );
767 767
 
768
-	$input = wp_parse_args( $overwrite, $defaults );
768
+    $input = wp_parse_args( $overwrite, $defaults );
769 769
 
770
-	return $input;
770
+    return $input;
771 771
 }
772 772
 
773 773
 function sd_get_text_color_input_group( $type = 'text_color', $overwrite = array(), $overwrite_custom = array() ) {
774
-	$inputs = array();
774
+    $inputs = array();
775 775
 
776
-	if ( $overwrite !== false ) {
777
-		$inputs[ $type ] = sd_get_text_color_input( $type, $overwrite, true );
778
-	}
776
+    if ( $overwrite !== false ) {
777
+        $inputs[ $type ] = sd_get_text_color_input( $type, $overwrite, true );
778
+    }
779 779
 
780
-	if ( $overwrite_custom !== false ) {
781
-		$custom            = $type . '_custom';
782
-		$inputs[ $custom ] = sd_get_custom_color_input( $custom, $overwrite_custom, $type );
783
-	}
780
+    if ( $overwrite_custom !== false ) {
781
+        $custom            = $type . '_custom';
782
+        $inputs[ $custom ] = sd_get_custom_color_input( $custom, $overwrite_custom, $type );
783
+    }
784 784
 
785
-	return $inputs;
785
+    return $inputs;
786 786
 }
787 787
 
788 788
 /**
@@ -795,22 +795,22 @@  discard block
 block discarded – undo
795 795
  */
796 796
 function sd_get_custom_color_input( $type = 'color_custom', $overwrite = array(), $parent_type = '' ) {
797 797
 
798
-	$defaults = array(
799
-		'type'        => 'color',
800
-		'title'       => __( 'Custom color', 'ayecode-connect' ),
801
-		'default'     => '',
802
-		'placeholder' => '',
803
-		'desc_tip'    => true,
804
-		'group'       => __( 'Typography', 'ayecode-connect' ),
805
-	);
798
+    $defaults = array(
799
+        'type'        => 'color',
800
+        'title'       => __( 'Custom color', 'ayecode-connect' ),
801
+        'default'     => '',
802
+        'placeholder' => '',
803
+        'desc_tip'    => true,
804
+        'group'       => __( 'Typography', 'ayecode-connect' ),
805
+    );
806 806
 
807
-	if ( $parent_type ) {
808
-		$defaults['element_require'] = '[%' . $parent_type . '%]=="custom"';
809
-	}
807
+    if ( $parent_type ) {
808
+        $defaults['element_require'] = '[%' . $parent_type . '%]=="custom"';
809
+    }
810 810
 
811
-	$input = wp_parse_args( $overwrite, $defaults );
811
+    $input = wp_parse_args( $overwrite, $defaults );
812 812
 
813
-	return $input;
813
+    return $input;
814 814
 }
815 815
 
816 816
 /**
@@ -823,44 +823,44 @@  discard block
 block discarded – undo
823 823
  */
824 824
 function sd_get_col_input( $type = 'col', $overwrite = array() ) {
825 825
 
826
-	$device_size = '';
827
-	if ( ! empty( $overwrite['device_type'] ) ) {
828
-		if ( $overwrite['device_type'] == 'Tablet' ) {
829
-			$device_size = '-md';
830
-		} elseif ( $overwrite['device_type'] == 'Desktop' ) {
831
-			$device_size = '-lg';
832
-		}
833
-	}
834
-	$options = array(
835
-		''     => __( 'Default', 'ayecode-connect' ),
836
-		'auto' => __( 'auto', 'ayecode-connect' ),
837
-		'1'    => '1/12',
838
-		'2'    => '2/12',
839
-		'3'    => '3/12',
840
-		'4'    => '4/12',
841
-		'5'    => '5/12',
842
-		'6'    => '6/12',
843
-		'7'    => '7/12',
844
-		'8'    => '8/12',
845
-		'9'    => '9/12',
846
-		'10'   => '10/12',
847
-		'11'   => '11/12',
848
-		'12'   => '12/12',
849
-	);
850
-
851
-	$defaults = array(
852
-		'type'            => 'select',
853
-		'title'           => __( 'Column width', 'ayecode-connect' ),
854
-		'options'         => $options,
855
-		'default'         => '',
856
-		'desc_tip'        => true,
857
-		'group'           => __( 'Container', 'ayecode-connect' ),
858
-		'element_require' => '[%container%]=="col"',
859
-	);
860
-
861
-	$input = wp_parse_args( $overwrite, $defaults );
862
-
863
-	return $input;
826
+    $device_size = '';
827
+    if ( ! empty( $overwrite['device_type'] ) ) {
828
+        if ( $overwrite['device_type'] == 'Tablet' ) {
829
+            $device_size = '-md';
830
+        } elseif ( $overwrite['device_type'] == 'Desktop' ) {
831
+            $device_size = '-lg';
832
+        }
833
+    }
834
+    $options = array(
835
+        ''     => __( 'Default', 'ayecode-connect' ),
836
+        'auto' => __( 'auto', 'ayecode-connect' ),
837
+        '1'    => '1/12',
838
+        '2'    => '2/12',
839
+        '3'    => '3/12',
840
+        '4'    => '4/12',
841
+        '5'    => '5/12',
842
+        '6'    => '6/12',
843
+        '7'    => '7/12',
844
+        '8'    => '8/12',
845
+        '9'    => '9/12',
846
+        '10'   => '10/12',
847
+        '11'   => '11/12',
848
+        '12'   => '12/12',
849
+    );
850
+
851
+    $defaults = array(
852
+        'type'            => 'select',
853
+        'title'           => __( 'Column width', 'ayecode-connect' ),
854
+        'options'         => $options,
855
+        'default'         => '',
856
+        'desc_tip'        => true,
857
+        'group'           => __( 'Container', 'ayecode-connect' ),
858
+        'element_require' => '[%container%]=="col"',
859
+    );
860
+
861
+    $input = wp_parse_args( $overwrite, $defaults );
862
+
863
+    return $input;
864 864
 }
865 865
 
866 866
 /**
@@ -873,37 +873,37 @@  discard block
 block discarded – undo
873 873
  */
874 874
 function sd_get_row_cols_input( $type = 'row_cols', $overwrite = array() ) {
875 875
 
876
-	$device_size = '';
877
-	if ( ! empty( $overwrite['device_type'] ) ) {
878
-		if ( $overwrite['device_type'] == 'Tablet' ) {
879
-			$device_size = '-md';
880
-		} elseif ( $overwrite['device_type'] == 'Desktop' ) {
881
-			$device_size = '-lg';
882
-		}
883
-	}
884
-	$options = array(
885
-		''  => __( 'auto', 'ayecode-connect' ),
886
-		'1' => '1',
887
-		'2' => '2',
888
-		'3' => '3',
889
-		'4' => '4',
890
-		'5' => '5',
891
-		'6' => '6',
892
-	);
893
-
894
-	$defaults = array(
895
-		'type'            => 'select',
896
-		'title'           => __( 'Row columns', 'ayecode-connect' ),
897
-		'options'         => $options,
898
-		'default'         => '',
899
-		'desc_tip'        => true,
900
-		'group'           => __( 'Container', 'ayecode-connect' ),
901
-		'element_require' => '[%container%]=="row"',
902
-	);
903
-
904
-	$input = wp_parse_args( $overwrite, $defaults );
905
-
906
-	return $input;
876
+    $device_size = '';
877
+    if ( ! empty( $overwrite['device_type'] ) ) {
878
+        if ( $overwrite['device_type'] == 'Tablet' ) {
879
+            $device_size = '-md';
880
+        } elseif ( $overwrite['device_type'] == 'Desktop' ) {
881
+            $device_size = '-lg';
882
+        }
883
+    }
884
+    $options = array(
885
+        ''  => __( 'auto', 'ayecode-connect' ),
886
+        '1' => '1',
887
+        '2' => '2',
888
+        '3' => '3',
889
+        '4' => '4',
890
+        '5' => '5',
891
+        '6' => '6',
892
+    );
893
+
894
+    $defaults = array(
895
+        'type'            => 'select',
896
+        'title'           => __( 'Row columns', 'ayecode-connect' ),
897
+        'options'         => $options,
898
+        'default'         => '',
899
+        'desc_tip'        => true,
900
+        'group'           => __( 'Container', 'ayecode-connect' ),
901
+        'element_require' => '[%container%]=="row"',
902
+    );
903
+
904
+    $input = wp_parse_args( $overwrite, $defaults );
905
+
906
+    return $input;
907 907
 }
908 908
 
909 909
 /**
@@ -916,33 +916,33 @@  discard block
 block discarded – undo
916 916
  */
917 917
 function sd_get_text_align_input( $type = 'text_align', $overwrite = array() ) {
918 918
 
919
-	$device_size = '';
920
-	if ( ! empty( $overwrite['device_type'] ) ) {
921
-		if ( $overwrite['device_type'] == 'Tablet' ) {
922
-			$device_size = '-md';
923
-		} elseif ( $overwrite['device_type'] == 'Desktop' ) {
924
-			$device_size = '-lg';
925
-		}
926
-	}
927
-	$options = array(
928
-		''                                => __( 'Default', 'ayecode-connect' ),
929
-		'text' . $device_size . '-left'   => __( 'Left', 'ayecode-connect' ),
930
-		'text' . $device_size . '-right'  => __( 'Right', 'ayecode-connect' ),
931
-		'text' . $device_size . '-center' => __( 'Center', 'ayecode-connect' ),
932
-	);
919
+    $device_size = '';
920
+    if ( ! empty( $overwrite['device_type'] ) ) {
921
+        if ( $overwrite['device_type'] == 'Tablet' ) {
922
+            $device_size = '-md';
923
+        } elseif ( $overwrite['device_type'] == 'Desktop' ) {
924
+            $device_size = '-lg';
925
+        }
926
+    }
927
+    $options = array(
928
+        ''                                => __( 'Default', 'ayecode-connect' ),
929
+        'text' . $device_size . '-left'   => __( 'Left', 'ayecode-connect' ),
930
+        'text' . $device_size . '-right'  => __( 'Right', 'ayecode-connect' ),
931
+        'text' . $device_size . '-center' => __( 'Center', 'ayecode-connect' ),
932
+    );
933 933
 
934
-	$defaults = array(
935
-		'type'     => 'select',
936
-		'title'    => __( 'Text align', 'ayecode-connect' ),
937
-		'options'  => $options,
938
-		'default'  => '',
939
-		'desc_tip' => true,
940
-		'group'    => __( 'Typography', 'ayecode-connect' ),
941
-	);
934
+    $defaults = array(
935
+        'type'     => 'select',
936
+        'title'    => __( 'Text align', 'ayecode-connect' ),
937
+        'options'  => $options,
938
+        'default'  => '',
939
+        'desc_tip' => true,
940
+        'group'    => __( 'Typography', 'ayecode-connect' ),
941
+    );
942 942
 
943
-	$input = wp_parse_args( $overwrite, $defaults );
943
+    $input = wp_parse_args( $overwrite, $defaults );
944 944
 
945
-	return $input;
945
+    return $input;
946 946
 }
947 947
 
948 948
 /**
@@ -955,39 +955,39 @@  discard block
 block discarded – undo
955 955
  */
956 956
 function sd_get_display_input( $type = 'display', $overwrite = array() ) {
957 957
 
958
-	$device_size = '';
959
-	if ( ! empty( $overwrite['device_type'] ) ) {
960
-		if ( $overwrite['device_type'] == 'Tablet' ) {
961
-			$device_size = '-md';
962
-		} elseif ( $overwrite['device_type'] == 'Desktop' ) {
963
-			$device_size = '-lg';
964
-		}
965
-	}
966
-	$options = array(
967
-		''                                   => __( 'Default', 'ayecode-connect' ),
968
-		'd' . $device_size . '-none'         => 'none',
969
-		'd' . $device_size . '-inline'       => 'inline',
970
-		'd' . $device_size . '-inline-block' => 'inline-block',
971
-		'd' . $device_size . '-block'        => 'block',
972
-		'd' . $device_size . '-table'        => 'table',
973
-		'd' . $device_size . '-table-cell'   => 'table-cell',
974
-		'd' . $device_size . '-table-row'    => 'table-row',
975
-		'd' . $device_size . '-flex'         => 'flex',
976
-		'd' . $device_size . '-inline-flex'  => 'inline-flex',
977
-	);
978
-
979
-	$defaults = array(
980
-		'type'     => 'select',
981
-		'title'    => __( 'Display', 'ayecode-connect' ),
982
-		'options'  => $options,
983
-		'default'  => '',
984
-		'desc_tip' => true,
985
-		'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
986
-	);
987
-
988
-	$input = wp_parse_args( $overwrite, $defaults );
989
-
990
-	return $input;
958
+    $device_size = '';
959
+    if ( ! empty( $overwrite['device_type'] ) ) {
960
+        if ( $overwrite['device_type'] == 'Tablet' ) {
961
+            $device_size = '-md';
962
+        } elseif ( $overwrite['device_type'] == 'Desktop' ) {
963
+            $device_size = '-lg';
964
+        }
965
+    }
966
+    $options = array(
967
+        ''                                   => __( 'Default', 'ayecode-connect' ),
968
+        'd' . $device_size . '-none'         => 'none',
969
+        'd' . $device_size . '-inline'       => 'inline',
970
+        'd' . $device_size . '-inline-block' => 'inline-block',
971
+        'd' . $device_size . '-block'        => 'block',
972
+        'd' . $device_size . '-table'        => 'table',
973
+        'd' . $device_size . '-table-cell'   => 'table-cell',
974
+        'd' . $device_size . '-table-row'    => 'table-row',
975
+        'd' . $device_size . '-flex'         => 'flex',
976
+        'd' . $device_size . '-inline-flex'  => 'inline-flex',
977
+    );
978
+
979
+    $defaults = array(
980
+        'type'     => 'select',
981
+        'title'    => __( 'Display', 'ayecode-connect' ),
982
+        'options'  => $options,
983
+        'default'  => '',
984
+        'desc_tip' => true,
985
+        'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
986
+    );
987
+
988
+    $input = wp_parse_args( $overwrite, $defaults );
989
+
990
+    return $input;
991 991
 }
992 992
 
993 993
 /**
@@ -1000,17 +1000,17 @@  discard block
 block discarded – undo
1000 1000
  */
1001 1001
 function sd_get_text_justify_input( $type = 'text_justify', $overwrite = array() ) {
1002 1002
 
1003
-	$defaults = array(
1004
-		'type'     => 'checkbox',
1005
-		'title'    => __( 'Text justify', 'ayecode-connect' ),
1006
-		'default'  => '',
1007
-		'desc_tip' => true,
1008
-		'group'    => __( 'Typography', 'ayecode-connect' ),
1009
-	);
1003
+    $defaults = array(
1004
+        'type'     => 'checkbox',
1005
+        'title'    => __( 'Text justify', 'ayecode-connect' ),
1006
+        'default'  => '',
1007
+        'desc_tip' => true,
1008
+        'group'    => __( 'Typography', 'ayecode-connect' ),
1009
+    );
1010 1010
 
1011
-	$input = wp_parse_args( $overwrite, $defaults );
1011
+    $input = wp_parse_args( $overwrite, $defaults );
1012 1012
 
1013
-	return $input;
1013
+    return $input;
1014 1014
 }
1015 1015
 
1016 1016
 /**
@@ -1023,114 +1023,114 @@  discard block
 block discarded – undo
1023 1023
  * @return array
1024 1024
  */
1025 1025
 function sd_aui_colors( $include_branding = false, $include_outlines = false, $outline_button_only_text = false, $include_translucent = false, $include_subtle = false, $include_emphasis = false ) {
1026
-	$theme_colors = array();
1027
-
1028
-	$theme_colors['primary']   = __( 'Primary', 'ayecode-connect' );
1029
-	$theme_colors['secondary'] = __( 'Secondary', 'ayecode-connect' );
1030
-	$theme_colors['success']   = __( 'Success', 'ayecode-connect' );
1031
-	$theme_colors['danger']    = __( 'Danger', 'ayecode-connect' );
1032
-	$theme_colors['warning']   = __( 'Warning', 'ayecode-connect' );
1033
-	$theme_colors['info']      = __( 'Info', 'ayecode-connect' );
1034
-	$theme_colors['light']     = __( 'Light', 'ayecode-connect' );
1035
-	$theme_colors['dark']      = __( 'Dark', 'ayecode-connect' );
1036
-	$theme_colors['black']     = __( 'Black', 'ayecode-connect' );
1037
-	$theme_colors['white']     = __( 'White', 'ayecode-connect' );
1038
-	$theme_colors['purple']    = __( 'Purple', 'ayecode-connect' );
1039
-	$theme_colors['salmon']    = __( 'Salmon', 'ayecode-connect' );
1040
-	$theme_colors['cyan']      = __( 'Cyan', 'ayecode-connect' );
1041
-	$theme_colors['gray']      = __( 'Gray', 'ayecode-connect' );
1042
-	$theme_colors['muted']     = __( 'Muted', 'ayecode-connect' );
1043
-	$theme_colors['gray-dark'] = __( 'Gray dark', 'ayecode-connect' );
1044
-	$theme_colors['indigo']    = __( 'Indigo', 'ayecode-connect' );
1045
-	$theme_colors['orange']    = __( 'Orange', 'ayecode-connect' );
1046
-	$theme_colors['body']      = __( 'Body', 'ayecode-connect' );
1047
-
1048
-
1049
-	// for bg and borders
1050
-	if ( $include_subtle ) {
1051
-		$theme_colors['primary-subtle']   = __( 'Primary Subtle', 'ayecode-connect' );
1052
-		$theme_colors['primary-subtle']   = __( 'Primary Subtle', 'ayecode-connect' );
1053
-		$theme_colors['secondary-subtle'] = __( 'Secondary Subtle', 'ayecode-connect' );
1054
-		$theme_colors['success-subtle']   = __( 'Success Subtle', 'ayecode-connect' );
1055
-		$theme_colors['danger-subtle']    = __( 'Danger Subtle', 'ayecode-connect' );
1056
-		$theme_colors['warning-subtle']   = __( 'Warning Subtle', 'ayecode-connect' );
1057
-		$theme_colors['info-subtle']      = __( 'Info Subtle', 'ayecode-connect' );
1058
-		$theme_colors['light-subtle']     = __( 'Light Subtle', 'ayecode-connect' );
1059
-		$theme_colors['dark-subtle']      = __( 'Dark Subtle', 'ayecode-connect' );
1060
-		$theme_colors['purple-subtle']    = __( 'Purple Subtle', 'ayecode-connect' );
1061
-		$theme_colors['salmon-subtle']    = __( 'Salmon Subtle', 'ayecode-connect' );
1062
-		$theme_colors['cyan-subtle']      = __( 'Cyan Subtle', 'ayecode-connect' );
1063
-		$theme_colors['gray-subtle']      = __( 'Gray Subtle', 'ayecode-connect' );
1064
-		$theme_colors['gray-dark-subtle'] = __( 'Gray dark Subtle', 'ayecode-connect' );
1065
-		$theme_colors['indigo-subtle']    = __( 'Indigo Subtle', 'ayecode-connect' );
1066
-		$theme_colors['orange-subtle']    = __( 'Orange Subtle', 'ayecode-connect' );
1067
-	}
1068
-
1069
-	// for texts
1070
-	if ($include_emphasis) {
1071
-		$theme_colors['primary-emphasis']   = __( 'Primary Emphasis', 'ayecode-connect' );
1072
-		$theme_colors['secondary-emphasis'] = __( 'Secondary Emphasis', 'ayecode-connect' );
1073
-		$theme_colors['success-emphasis']   = __( 'Success Emphasis', 'ayecode-connect' );
1074
-		$theme_colors['danger-emphasis']    = __( 'Danger Emphasis', 'ayecode-connect' );
1075
-		$theme_colors['warning-emphasis']   = __( 'Warning Emphasis', 'ayecode-connect' );
1076
-		$theme_colors['info-emphasis']      = __( 'Info Emphasis', 'ayecode-connect' );
1077
-		$theme_colors['light-emphasis']     = __( 'Light Emphasis', 'ayecode-connect' );
1078
-		$theme_colors['dark-emphasis']      = __( 'Dark Emphasis', 'ayecode-connect' );
1079
-		$theme_colors['purple-emphasis']    = __( 'Purple Emphasis', 'ayecode-connect' );
1080
-		$theme_colors['salmon-emphasis']    = __( 'Salmon Emphasis', 'ayecode-connect' );
1081
-		$theme_colors['cyan-emphasis']      = __( 'Cyan Emphasis', 'ayecode-connect' );
1082
-		$theme_colors['gray-emphasis']      = __( 'Gray Emphasis', 'ayecode-connect' );
1083
-		$theme_colors['muted-emphasis']     = __( 'Muted Emphasis', 'ayecode-connect' );
1084
-		$theme_colors['gray-dark-emphasis'] = __( 'Gray dark Emphasis', 'ayecode-connect' );
1085
-		$theme_colors['indigo-emphasis']    = __( 'Indigo Emphasis', 'ayecode-connect' );
1086
-		$theme_colors['orange-emphasis']    = __( 'Orange Emphasis', 'ayecode-connect' );
1087
-	}
1088
-
1089
-	if ( $include_outlines ) {
1090
-		$button_only                       = $outline_button_only_text ? ' ' . __( '(button only)', 'ayecode-connect' ) : '';
1091
-		$theme_colors['outline-primary']   = __( 'Primary outline', 'ayecode-connect' ) . $button_only;
1092
-		$theme_colors['outline-secondary'] = __( 'Secondary outline', 'ayecode-connect' ) . $button_only;
1093
-		$theme_colors['outline-success']   = __( 'Success outline', 'ayecode-connect' ) . $button_only;
1094
-		$theme_colors['outline-danger']    = __( 'Danger outline', 'ayecode-connect' ) . $button_only;
1095
-		$theme_colors['outline-warning']   = __( 'Warning outline', 'ayecode-connect' ) . $button_only;
1096
-		$theme_colors['outline-info']      = __( 'Info outline', 'ayecode-connect' ) . $button_only;
1097
-		$theme_colors['outline-light']     = __( 'Light outline', 'ayecode-connect' ) . $button_only;
1098
-		$theme_colors['outline-dark']      = __( 'Dark outline', 'ayecode-connect' ) . $button_only;
1099
-		$theme_colors['outline-white']     = __( 'White outline', 'ayecode-connect' ) . $button_only;
1100
-		$theme_colors['outline-purple']    = __( 'Purple outline', 'ayecode-connect' ) . $button_only;
1101
-		$theme_colors['outline-salmon']    = __( 'Salmon outline', 'ayecode-connect' ) . $button_only;
1102
-		$theme_colors['outline-cyan']      = __( 'Cyan outline', 'ayecode-connect' ) . $button_only;
1103
-		$theme_colors['outline-gray']      = __( 'Gray outline', 'ayecode-connect' ) . $button_only;
1104
-		$theme_colors['outline-gray-dark'] = __( 'Gray dark outline', 'ayecode-connect' ) . $button_only;
1105
-		$theme_colors['outline-indigo']    = __( 'Indigo outline', 'ayecode-connect' ) . $button_only;
1106
-		$theme_colors['outline-orange']    = __( 'Orange outline', 'ayecode-connect' ) . $button_only;
1107
-	}
1108
-
1109
-	if ( $include_branding ) {
1110
-		$theme_colors = $theme_colors + sd_aui_branding_colors();
1111
-	}
1112
-
1113
-	if ( $include_translucent ) {
1114
-		$button_only                           = $outline_button_only_text ? ' ' . __( '(button only)', 'ayecode-connect' ) : '';
1115
-		$theme_colors['translucent-primary']   = __( 'Primary translucent', 'ayecode-connect' ) . $button_only;
1116
-		$theme_colors['translucent-secondary'] = __( 'Secondary translucent', 'ayecode-connect' ) . $button_only;
1117
-		$theme_colors['translucent-success']   = __( 'Success translucent', 'ayecode-connect' ) . $button_only;
1118
-		$theme_colors['translucent-danger']    = __( 'Danger translucent', 'ayecode-connect' ) . $button_only;
1119
-		$theme_colors['translucent-warning']   = __( 'Warning translucent', 'ayecode-connect' ) . $button_only;
1120
-		$theme_colors['translucent-info']      = __( 'Info translucent', 'ayecode-connect' ) . $button_only;
1121
-		$theme_colors['translucent-light']     = __( 'Light translucent', 'ayecode-connect' ) . $button_only;
1122
-		$theme_colors['translucent-dark']      = __( 'Dark translucent', 'ayecode-connect' ) . $button_only;
1123
-		$theme_colors['translucent-white']     = __( 'White translucent', 'ayecode-connect' ) . $button_only;
1124
-		$theme_colors['translucent-purple']    = __( 'Purple translucent', 'ayecode-connect' ) . $button_only;
1125
-		$theme_colors['translucent-salmon']    = __( 'Salmon translucent', 'ayecode-connect' ) . $button_only;
1126
-		$theme_colors['translucent-cyan']      = __( 'Cyan translucent', 'ayecode-connect' ) . $button_only;
1127
-		$theme_colors['translucent-gray']      = __( 'Gray translucent', 'ayecode-connect' ) . $button_only;
1128
-		$theme_colors['translucent-gray-dark'] = __( 'Gray dark translucent', 'ayecode-connect' ) . $button_only;
1129
-		$theme_colors['translucent-indigo']    = __( 'Indigo translucent', 'ayecode-connect' ) . $button_only;
1130
-		$theme_colors['translucent-orange']    = __( 'Orange translucent', 'ayecode-connect' ) . $button_only;
1131
-	}
1132
-
1133
-	return apply_filters( 'sd_aui_colors', $theme_colors, $include_outlines, $include_branding );
1026
+    $theme_colors = array();
1027
+
1028
+    $theme_colors['primary']   = __( 'Primary', 'ayecode-connect' );
1029
+    $theme_colors['secondary'] = __( 'Secondary', 'ayecode-connect' );
1030
+    $theme_colors['success']   = __( 'Success', 'ayecode-connect' );
1031
+    $theme_colors['danger']    = __( 'Danger', 'ayecode-connect' );
1032
+    $theme_colors['warning']   = __( 'Warning', 'ayecode-connect' );
1033
+    $theme_colors['info']      = __( 'Info', 'ayecode-connect' );
1034
+    $theme_colors['light']     = __( 'Light', 'ayecode-connect' );
1035
+    $theme_colors['dark']      = __( 'Dark', 'ayecode-connect' );
1036
+    $theme_colors['black']     = __( 'Black', 'ayecode-connect' );
1037
+    $theme_colors['white']     = __( 'White', 'ayecode-connect' );
1038
+    $theme_colors['purple']    = __( 'Purple', 'ayecode-connect' );
1039
+    $theme_colors['salmon']    = __( 'Salmon', 'ayecode-connect' );
1040
+    $theme_colors['cyan']      = __( 'Cyan', 'ayecode-connect' );
1041
+    $theme_colors['gray']      = __( 'Gray', 'ayecode-connect' );
1042
+    $theme_colors['muted']     = __( 'Muted', 'ayecode-connect' );
1043
+    $theme_colors['gray-dark'] = __( 'Gray dark', 'ayecode-connect' );
1044
+    $theme_colors['indigo']    = __( 'Indigo', 'ayecode-connect' );
1045
+    $theme_colors['orange']    = __( 'Orange', 'ayecode-connect' );
1046
+    $theme_colors['body']      = __( 'Body', 'ayecode-connect' );
1047
+
1048
+
1049
+    // for bg and borders
1050
+    if ( $include_subtle ) {
1051
+        $theme_colors['primary-subtle']   = __( 'Primary Subtle', 'ayecode-connect' );
1052
+        $theme_colors['primary-subtle']   = __( 'Primary Subtle', 'ayecode-connect' );
1053
+        $theme_colors['secondary-subtle'] = __( 'Secondary Subtle', 'ayecode-connect' );
1054
+        $theme_colors['success-subtle']   = __( 'Success Subtle', 'ayecode-connect' );
1055
+        $theme_colors['danger-subtle']    = __( 'Danger Subtle', 'ayecode-connect' );
1056
+        $theme_colors['warning-subtle']   = __( 'Warning Subtle', 'ayecode-connect' );
1057
+        $theme_colors['info-subtle']      = __( 'Info Subtle', 'ayecode-connect' );
1058
+        $theme_colors['light-subtle']     = __( 'Light Subtle', 'ayecode-connect' );
1059
+        $theme_colors['dark-subtle']      = __( 'Dark Subtle', 'ayecode-connect' );
1060
+        $theme_colors['purple-subtle']    = __( 'Purple Subtle', 'ayecode-connect' );
1061
+        $theme_colors['salmon-subtle']    = __( 'Salmon Subtle', 'ayecode-connect' );
1062
+        $theme_colors['cyan-subtle']      = __( 'Cyan Subtle', 'ayecode-connect' );
1063
+        $theme_colors['gray-subtle']      = __( 'Gray Subtle', 'ayecode-connect' );
1064
+        $theme_colors['gray-dark-subtle'] = __( 'Gray dark Subtle', 'ayecode-connect' );
1065
+        $theme_colors['indigo-subtle']    = __( 'Indigo Subtle', 'ayecode-connect' );
1066
+        $theme_colors['orange-subtle']    = __( 'Orange Subtle', 'ayecode-connect' );
1067
+    }
1068
+
1069
+    // for texts
1070
+    if ($include_emphasis) {
1071
+        $theme_colors['primary-emphasis']   = __( 'Primary Emphasis', 'ayecode-connect' );
1072
+        $theme_colors['secondary-emphasis'] = __( 'Secondary Emphasis', 'ayecode-connect' );
1073
+        $theme_colors['success-emphasis']   = __( 'Success Emphasis', 'ayecode-connect' );
1074
+        $theme_colors['danger-emphasis']    = __( 'Danger Emphasis', 'ayecode-connect' );
1075
+        $theme_colors['warning-emphasis']   = __( 'Warning Emphasis', 'ayecode-connect' );
1076
+        $theme_colors['info-emphasis']      = __( 'Info Emphasis', 'ayecode-connect' );
1077
+        $theme_colors['light-emphasis']     = __( 'Light Emphasis', 'ayecode-connect' );
1078
+        $theme_colors['dark-emphasis']      = __( 'Dark Emphasis', 'ayecode-connect' );
1079
+        $theme_colors['purple-emphasis']    = __( 'Purple Emphasis', 'ayecode-connect' );
1080
+        $theme_colors['salmon-emphasis']    = __( 'Salmon Emphasis', 'ayecode-connect' );
1081
+        $theme_colors['cyan-emphasis']      = __( 'Cyan Emphasis', 'ayecode-connect' );
1082
+        $theme_colors['gray-emphasis']      = __( 'Gray Emphasis', 'ayecode-connect' );
1083
+        $theme_colors['muted-emphasis']     = __( 'Muted Emphasis', 'ayecode-connect' );
1084
+        $theme_colors['gray-dark-emphasis'] = __( 'Gray dark Emphasis', 'ayecode-connect' );
1085
+        $theme_colors['indigo-emphasis']    = __( 'Indigo Emphasis', 'ayecode-connect' );
1086
+        $theme_colors['orange-emphasis']    = __( 'Orange Emphasis', 'ayecode-connect' );
1087
+    }
1088
+
1089
+    if ( $include_outlines ) {
1090
+        $button_only                       = $outline_button_only_text ? ' ' . __( '(button only)', 'ayecode-connect' ) : '';
1091
+        $theme_colors['outline-primary']   = __( 'Primary outline', 'ayecode-connect' ) . $button_only;
1092
+        $theme_colors['outline-secondary'] = __( 'Secondary outline', 'ayecode-connect' ) . $button_only;
1093
+        $theme_colors['outline-success']   = __( 'Success outline', 'ayecode-connect' ) . $button_only;
1094
+        $theme_colors['outline-danger']    = __( 'Danger outline', 'ayecode-connect' ) . $button_only;
1095
+        $theme_colors['outline-warning']   = __( 'Warning outline', 'ayecode-connect' ) . $button_only;
1096
+        $theme_colors['outline-info']      = __( 'Info outline', 'ayecode-connect' ) . $button_only;
1097
+        $theme_colors['outline-light']     = __( 'Light outline', 'ayecode-connect' ) . $button_only;
1098
+        $theme_colors['outline-dark']      = __( 'Dark outline', 'ayecode-connect' ) . $button_only;
1099
+        $theme_colors['outline-white']     = __( 'White outline', 'ayecode-connect' ) . $button_only;
1100
+        $theme_colors['outline-purple']    = __( 'Purple outline', 'ayecode-connect' ) . $button_only;
1101
+        $theme_colors['outline-salmon']    = __( 'Salmon outline', 'ayecode-connect' ) . $button_only;
1102
+        $theme_colors['outline-cyan']      = __( 'Cyan outline', 'ayecode-connect' ) . $button_only;
1103
+        $theme_colors['outline-gray']      = __( 'Gray outline', 'ayecode-connect' ) . $button_only;
1104
+        $theme_colors['outline-gray-dark'] = __( 'Gray dark outline', 'ayecode-connect' ) . $button_only;
1105
+        $theme_colors['outline-indigo']    = __( 'Indigo outline', 'ayecode-connect' ) . $button_only;
1106
+        $theme_colors['outline-orange']    = __( 'Orange outline', 'ayecode-connect' ) . $button_only;
1107
+    }
1108
+
1109
+    if ( $include_branding ) {
1110
+        $theme_colors = $theme_colors + sd_aui_branding_colors();
1111
+    }
1112
+
1113
+    if ( $include_translucent ) {
1114
+        $button_only                           = $outline_button_only_text ? ' ' . __( '(button only)', 'ayecode-connect' ) : '';
1115
+        $theme_colors['translucent-primary']   = __( 'Primary translucent', 'ayecode-connect' ) . $button_only;
1116
+        $theme_colors['translucent-secondary'] = __( 'Secondary translucent', 'ayecode-connect' ) . $button_only;
1117
+        $theme_colors['translucent-success']   = __( 'Success translucent', 'ayecode-connect' ) . $button_only;
1118
+        $theme_colors['translucent-danger']    = __( 'Danger translucent', 'ayecode-connect' ) . $button_only;
1119
+        $theme_colors['translucent-warning']   = __( 'Warning translucent', 'ayecode-connect' ) . $button_only;
1120
+        $theme_colors['translucent-info']      = __( 'Info translucent', 'ayecode-connect' ) . $button_only;
1121
+        $theme_colors['translucent-light']     = __( 'Light translucent', 'ayecode-connect' ) . $button_only;
1122
+        $theme_colors['translucent-dark']      = __( 'Dark translucent', 'ayecode-connect' ) . $button_only;
1123
+        $theme_colors['translucent-white']     = __( 'White translucent', 'ayecode-connect' ) . $button_only;
1124
+        $theme_colors['translucent-purple']    = __( 'Purple translucent', 'ayecode-connect' ) . $button_only;
1125
+        $theme_colors['translucent-salmon']    = __( 'Salmon translucent', 'ayecode-connect' ) . $button_only;
1126
+        $theme_colors['translucent-cyan']      = __( 'Cyan translucent', 'ayecode-connect' ) . $button_only;
1127
+        $theme_colors['translucent-gray']      = __( 'Gray translucent', 'ayecode-connect' ) . $button_only;
1128
+        $theme_colors['translucent-gray-dark'] = __( 'Gray dark translucent', 'ayecode-connect' ) . $button_only;
1129
+        $theme_colors['translucent-indigo']    = __( 'Indigo translucent', 'ayecode-connect' ) . $button_only;
1130
+        $theme_colors['translucent-orange']    = __( 'Orange translucent', 'ayecode-connect' ) . $button_only;
1131
+    }
1132
+
1133
+    return apply_filters( 'sd_aui_colors', $theme_colors, $include_outlines, $include_branding );
1134 1134
 }
1135 1135
 
1136 1136
 /**
@@ -1139,19 +1139,19 @@  discard block
 block discarded – undo
1139 1139
  * @return array
1140 1140
  */
1141 1141
 function sd_aui_branding_colors() {
1142
-	return array(
1143
-		'facebook'  => __( 'Facebook', 'ayecode-connect' ),
1144
-		'twitter'   => __( 'Twitter', 'ayecode-connect' ),
1145
-		'instagram' => __( 'Instagram', 'ayecode-connect' ),
1146
-		'linkedin'  => __( 'Linkedin', 'ayecode-connect' ),
1147
-		'flickr'    => __( 'Flickr', 'ayecode-connect' ),
1148
-		'github'    => __( 'GitHub', 'ayecode-connect' ),
1149
-		'youtube'   => __( 'YouTube', 'ayecode-connect' ),
1150
-		'wordpress' => __( 'WordPress', 'ayecode-connect' ),
1151
-		'google'    => __( 'Google', 'ayecode-connect' ),
1152
-		'yahoo'     => __( 'Yahoo', 'ayecode-connect' ),
1153
-		'vkontakte' => __( 'Vkontakte', 'ayecode-connect' ),
1154
-	);
1142
+    return array(
1143
+        'facebook'  => __( 'Facebook', 'ayecode-connect' ),
1144
+        'twitter'   => __( 'Twitter', 'ayecode-connect' ),
1145
+        'instagram' => __( 'Instagram', 'ayecode-connect' ),
1146
+        'linkedin'  => __( 'Linkedin', 'ayecode-connect' ),
1147
+        'flickr'    => __( 'Flickr', 'ayecode-connect' ),
1148
+        'github'    => __( 'GitHub', 'ayecode-connect' ),
1149
+        'youtube'   => __( 'YouTube', 'ayecode-connect' ),
1150
+        'wordpress' => __( 'WordPress', 'ayecode-connect' ),
1151
+        'google'    => __( 'Google', 'ayecode-connect' ),
1152
+        'yahoo'     => __( 'Yahoo', 'ayecode-connect' ),
1153
+        'vkontakte' => __( 'Vkontakte', 'ayecode-connect' ),
1154
+    );
1155 1155
 }
1156 1156
 
1157 1157
 
@@ -1165,43 +1165,43 @@  discard block
 block discarded – undo
1165 1165
  */
1166 1166
 function sd_get_container_class_input( $type = 'container', $overwrite = array() ) {
1167 1167
 
1168
-	$options = array(
1169
-		'container'                                                             => __( 'container (default)', 'ayecode-connect' ),
1170
-		'container-sm'                                                          => 'container-sm',
1171
-		'container-md'                                                          => 'container-md',
1172
-		'container-lg'                                                          => 'container-lg',
1173
-		'container-xl'                                                          => 'container-xl',
1174
-		'container-xxl'                                                         => 'container-xxl',
1175
-		'container-fluid'                                                       => 'container-fluid',
1176
-		'row'                                                                   => 'row',
1177
-		'col'                                                                   => 'col',
1178
-		'card'                                                                  => 'card',
1179
-		'card-header'                                                           => 'card-header',
1180
-		'card-img-top'                                                          => 'card-img-top',
1181
-		'card-body'                                                             => 'card-body',
1182
-		'card-footer'                                                           => 'card-footer',
1183
-		'list-group'                                                            => 'list-group',
1184
-		'list-group list-group-flush'                                           => 'list-group list-group-flush',
1185
-		'list-group list-group-numbered'                                        => 'list-group list-group-numbered',
1186
-		'list-group list-group-flush list-group-numbered'                       => 'list-group list-group-flush list-group-numbered',
1187
-		'list-group list-group-horizontal'                                      => 'list-group list-group-horizontal',
1188
-		'list-group list-group-horizontal list-group-numbered'                  => 'list-group list-group-horizontal list-group-numbered',
1189
-		'list-group-item'                                                       => 'list-group-item',
1190
-		''                                                                      => __( 'no container class', 'ayecode-connect' ),
1191
-	);
1192
-
1193
-	$defaults = array(
1194
-		'type'     => 'select',
1195
-		'title'    => __( 'Type', 'ayecode-connect' ),
1196
-		'options'  => $options,
1197
-		'default'  => '',
1198
-		'desc_tip' => true,
1199
-		'group'    => __( 'Container', 'ayecode-connect' ),
1200
-	);
1201
-
1202
-	$input = wp_parse_args( $overwrite, $defaults );
1203
-
1204
-	return $input;
1168
+    $options = array(
1169
+        'container'                                                             => __( 'container (default)', 'ayecode-connect' ),
1170
+        'container-sm'                                                          => 'container-sm',
1171
+        'container-md'                                                          => 'container-md',
1172
+        'container-lg'                                                          => 'container-lg',
1173
+        'container-xl'                                                          => 'container-xl',
1174
+        'container-xxl'                                                         => 'container-xxl',
1175
+        'container-fluid'                                                       => 'container-fluid',
1176
+        'row'                                                                   => 'row',
1177
+        'col'                                                                   => 'col',
1178
+        'card'                                                                  => 'card',
1179
+        'card-header'                                                           => 'card-header',
1180
+        'card-img-top'                                                          => 'card-img-top',
1181
+        'card-body'                                                             => 'card-body',
1182
+        'card-footer'                                                           => 'card-footer',
1183
+        'list-group'                                                            => 'list-group',
1184
+        'list-group list-group-flush'                                           => 'list-group list-group-flush',
1185
+        'list-group list-group-numbered'                                        => 'list-group list-group-numbered',
1186
+        'list-group list-group-flush list-group-numbered'                       => 'list-group list-group-flush list-group-numbered',
1187
+        'list-group list-group-horizontal'                                      => 'list-group list-group-horizontal',
1188
+        'list-group list-group-horizontal list-group-numbered'                  => 'list-group list-group-horizontal list-group-numbered',
1189
+        'list-group-item'                                                       => 'list-group-item',
1190
+        ''                                                                      => __( 'no container class', 'ayecode-connect' ),
1191
+    );
1192
+
1193
+    $defaults = array(
1194
+        'type'     => 'select',
1195
+        'title'    => __( 'Type', 'ayecode-connect' ),
1196
+        'options'  => $options,
1197
+        'default'  => '',
1198
+        'desc_tip' => true,
1199
+        'group'    => __( 'Container', 'ayecode-connect' ),
1200
+    );
1201
+
1202
+    $input = wp_parse_args( $overwrite, $defaults );
1203
+
1204
+    return $input;
1205 1205
 }
1206 1206
 
1207 1207
 /**
@@ -1214,30 +1214,30 @@  discard block
 block discarded – undo
1214 1214
  */
1215 1215
 function sd_get_position_class_input( $type = 'position', $overwrite = array() ) {
1216 1216
 
1217
-	$options = array(
1218
-		''                  => __( 'Default', 'ayecode-connect' ),
1219
-		'position-static'   => 'static',
1220
-		'position-relative' => 'relative',
1221
-		'position-absolute' => 'absolute',
1222
-		'position-fixed'    => 'fixed',
1223
-		'position-sticky'   => 'sticky',
1224
-		'fixed-top'         => 'fixed-top',
1225
-		'fixed-bottom'      => 'fixed-bottom',
1226
-		'sticky-top'        => 'sticky-top',
1227
-	);
1217
+    $options = array(
1218
+        ''                  => __( 'Default', 'ayecode-connect' ),
1219
+        'position-static'   => 'static',
1220
+        'position-relative' => 'relative',
1221
+        'position-absolute' => 'absolute',
1222
+        'position-fixed'    => 'fixed',
1223
+        'position-sticky'   => 'sticky',
1224
+        'fixed-top'         => 'fixed-top',
1225
+        'fixed-bottom'      => 'fixed-bottom',
1226
+        'sticky-top'        => 'sticky-top',
1227
+    );
1228 1228
 
1229
-	$defaults = array(
1230
-		'type'     => 'select',
1231
-		'title'    => __( 'Position', 'ayecode-connect' ),
1232
-		'options'  => $options,
1233
-		'default'  => '',
1234
-		'desc_tip' => true,
1235
-		'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
1236
-	);
1229
+    $defaults = array(
1230
+        'type'     => 'select',
1231
+        'title'    => __( 'Position', 'ayecode-connect' ),
1232
+        'options'  => $options,
1233
+        'default'  => '',
1234
+        'desc_tip' => true,
1235
+        'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
1236
+    );
1237 1237
 
1238
-	$input = wp_parse_args( $overwrite, $defaults );
1238
+    $input = wp_parse_args( $overwrite, $defaults );
1239 1239
 
1240
-	return $input;
1240
+    return $input;
1241 1241
 }
1242 1242
 
1243 1243
 /**
@@ -1248,32 +1248,32 @@  discard block
 block discarded – undo
1248 1248
  */
1249 1249
 function sd_get_absolute_position_input( $type = 'absolute_position', $overwrite = array() ) {
1250 1250
 
1251
-	$options = array(
1252
-		''              => __( 'Default', 'ayecode-connect' ),
1253
-		'top-left'      => 'top-left',
1254
-		'top-center'    => 'top-center',
1255
-		'top-right'     => 'top-right',
1256
-		'center-left'   => 'middle-left',
1257
-		'center'        => 'center',
1258
-		'center-right'  => 'middle-right',
1259
-		'bottom-left'   => 'bottom-left',
1260
-		'bottom-center' => 'bottom-center',
1261
-		'bottom-right'  => 'bottom-right',
1262
-	);
1251
+    $options = array(
1252
+        ''              => __( 'Default', 'ayecode-connect' ),
1253
+        'top-left'      => 'top-left',
1254
+        'top-center'    => 'top-center',
1255
+        'top-right'     => 'top-right',
1256
+        'center-left'   => 'middle-left',
1257
+        'center'        => 'center',
1258
+        'center-right'  => 'middle-right',
1259
+        'bottom-left'   => 'bottom-left',
1260
+        'bottom-center' => 'bottom-center',
1261
+        'bottom-right'  => 'bottom-right',
1262
+    );
1263 1263
 
1264
-	$defaults = array(
1265
-		'type'            => 'select',
1266
-		'title'           => __( 'Absolute Position', 'ayecode-connect' ),
1267
-		'options'         => $options,
1268
-		'default'         => '',
1269
-		'desc_tip'        => true,
1270
-		'group'           => __( 'Wrapper Styles', 'ayecode-connect' ),
1271
-		'element_require' => '[%position%]=="position-absolute"',
1272
-	);
1264
+    $defaults = array(
1265
+        'type'            => 'select',
1266
+        'title'           => __( 'Absolute Position', 'ayecode-connect' ),
1267
+        'options'         => $options,
1268
+        'default'         => '',
1269
+        'desc_tip'        => true,
1270
+        'group'           => __( 'Wrapper Styles', 'ayecode-connect' ),
1271
+        'element_require' => '[%position%]=="position-absolute"',
1272
+    );
1273 1273
 
1274
-	$input = wp_parse_args( $overwrite, $defaults );
1274
+    $input = wp_parse_args( $overwrite, $defaults );
1275 1275
 
1276
-	return $input;
1276
+    return $input;
1277 1277
 }
1278 1278
 
1279 1279
 /**
@@ -1286,38 +1286,38 @@  discard block
 block discarded – undo
1286 1286
  */
1287 1287
 function sd_get_sticky_offset_input( $type = 'top', $overwrite = array() ) {
1288 1288
 
1289
-	$defaults = array(
1290
-		'type'            => 'number',
1291
-		'title'           => __( 'Sticky offset', 'ayecode-connect' ),
1292
-		//'desc' =>  __( 'Sticky offset', 'ayecode-connect' ),
1293
-		'default'         => '',
1294
-		'desc_tip'        => true,
1295
-		'group'           => __( 'Wrapper Styles', 'ayecode-connect' ),
1296
-		'element_require' => '[%position%]=="sticky" || [%position%]=="sticky-top"',
1297
-	);
1298
-
1299
-	// title
1300
-	if ( $type == 'top' ) {
1301
-		$defaults['title'] = __( 'Top offset', 'ayecode-connect' );
1302
-		$defaults['icon']  = 'box-top';
1303
-		$defaults['row']   = array(
1304
-			'title' => __( 'Sticky offset', 'ayecode-connect' ),
1305
-			'key'   => 'sticky-offset',
1306
-			'open'  => true,
1307
-			'class' => 'text-center',
1308
-		);
1309
-	} elseif ( $type == 'bottom' ) {
1310
-		$defaults['title'] = __( 'Bottom offset', 'ayecode-connect' );
1311
-		$defaults['icon']  = 'box-bottom';
1312
-		$defaults['row']   = array(
1313
-			'key'   => 'sticky-offset',
1314
-			'close' => true,
1315
-		);
1316
-	}
1317
-
1318
-	$input = wp_parse_args( $overwrite, $defaults );
1319
-
1320
-	return $input;
1289
+    $defaults = array(
1290
+        'type'            => 'number',
1291
+        'title'           => __( 'Sticky offset', 'ayecode-connect' ),
1292
+        //'desc' =>  __( 'Sticky offset', 'ayecode-connect' ),
1293
+        'default'         => '',
1294
+        'desc_tip'        => true,
1295
+        'group'           => __( 'Wrapper Styles', 'ayecode-connect' ),
1296
+        'element_require' => '[%position%]=="sticky" || [%position%]=="sticky-top"',
1297
+    );
1298
+
1299
+    // title
1300
+    if ( $type == 'top' ) {
1301
+        $defaults['title'] = __( 'Top offset', 'ayecode-connect' );
1302
+        $defaults['icon']  = 'box-top';
1303
+        $defaults['row']   = array(
1304
+            'title' => __( 'Sticky offset', 'ayecode-connect' ),
1305
+            'key'   => 'sticky-offset',
1306
+            'open'  => true,
1307
+            'class' => 'text-center',
1308
+        );
1309
+    } elseif ( $type == 'bottom' ) {
1310
+        $defaults['title'] = __( 'Bottom offset', 'ayecode-connect' );
1311
+        $defaults['icon']  = 'box-bottom';
1312
+        $defaults['row']   = array(
1313
+            'key'   => 'sticky-offset',
1314
+            'close' => true,
1315
+        );
1316
+    }
1317
+
1318
+    $input = wp_parse_args( $overwrite, $defaults );
1319
+
1320
+    return $input;
1321 1321
 }
1322 1322
 
1323 1323
 /**
@@ -1329,61 +1329,61 @@  discard block
 block discarded – undo
1329 1329
  * @return array
1330 1330
  */
1331 1331
 function sd_get_font_size_input( $type = 'font_size', $overwrite = array(), $has_custom = false ) {
1332
-	global $aui_bs5;
1333
-
1334
-	$options[] = __( 'Inherit from parent', 'ayecode-connect' );
1335
-	if ( $aui_bs5 ) {
1336
-		// responsive font sizes
1337
-		$options['fs-base'] = 'fs-base (body default)';
1338
-		$options['fs-6']    = 'fs-6';
1339
-		$options['fs-5']    = 'fs-5';
1340
-		$options['fs-4']    = 'fs-4';
1341
-		$options['fs-3']    = 'fs-3';
1342
-		$options['fs-2']    = 'fs-2';
1343
-		$options['fs-1']    = 'fs-1';
1344
-
1345
-		// custom
1346
-		$options['fs-lg']  = 'fs-lg';
1347
-		$options['fs-sm']  = 'fs-sm';
1348
-		$options['fs-xs']  = 'fs-xs';
1349
-		$options['fs-xxs'] = 'fs-xxs';
1350
-
1351
-	}
1352
-
1353
-	$options = $options + array(
1354
-			'h6'        => 'h6',
1355
-			'h5'        => 'h5',
1356
-			'h4'        => 'h4',
1357
-			'h3'        => 'h3',
1358
-			'h2'        => 'h2',
1359
-			'h1'        => 'h1',
1360
-			'display-1' => 'display-1',
1361
-			'display-2' => 'display-2',
1362
-			'display-3' => 'display-3',
1363
-			'display-4' => 'display-4',
1364
-		);
1365
-
1366
-	if ( $aui_bs5 ) {
1367
-		$options['display-5'] = 'display-5';
1368
-		$options['display-6'] = 'display-6';
1369
-	}
1370
-
1371
-	if ( $has_custom ) {
1372
-		$options['custom'] = __( 'Custom size', 'ayecode-connect' );
1373
-	}
1374
-
1375
-	$defaults = array(
1376
-		'type'     => 'select',
1377
-		'title'    => __( 'Font size', 'ayecode-connect' ),
1378
-		'options'  => $options,
1379
-		'default'  => '',
1380
-		'desc_tip' => true,
1381
-		'group'    => __( 'Typography', 'ayecode-connect' ),
1382
-	);
1383
-
1384
-	$input = wp_parse_args( $overwrite, $defaults );
1385
-
1386
-	return $input;
1332
+    global $aui_bs5;
1333
+
1334
+    $options[] = __( 'Inherit from parent', 'ayecode-connect' );
1335
+    if ( $aui_bs5 ) {
1336
+        // responsive font sizes
1337
+        $options['fs-base'] = 'fs-base (body default)';
1338
+        $options['fs-6']    = 'fs-6';
1339
+        $options['fs-5']    = 'fs-5';
1340
+        $options['fs-4']    = 'fs-4';
1341
+        $options['fs-3']    = 'fs-3';
1342
+        $options['fs-2']    = 'fs-2';
1343
+        $options['fs-1']    = 'fs-1';
1344
+
1345
+        // custom
1346
+        $options['fs-lg']  = 'fs-lg';
1347
+        $options['fs-sm']  = 'fs-sm';
1348
+        $options['fs-xs']  = 'fs-xs';
1349
+        $options['fs-xxs'] = 'fs-xxs';
1350
+
1351
+    }
1352
+
1353
+    $options = $options + array(
1354
+            'h6'        => 'h6',
1355
+            'h5'        => 'h5',
1356
+            'h4'        => 'h4',
1357
+            'h3'        => 'h3',
1358
+            'h2'        => 'h2',
1359
+            'h1'        => 'h1',
1360
+            'display-1' => 'display-1',
1361
+            'display-2' => 'display-2',
1362
+            'display-3' => 'display-3',
1363
+            'display-4' => 'display-4',
1364
+        );
1365
+
1366
+    if ( $aui_bs5 ) {
1367
+        $options['display-5'] = 'display-5';
1368
+        $options['display-6'] = 'display-6';
1369
+    }
1370
+
1371
+    if ( $has_custom ) {
1372
+        $options['custom'] = __( 'Custom size', 'ayecode-connect' );
1373
+    }
1374
+
1375
+    $defaults = array(
1376
+        'type'     => 'select',
1377
+        'title'    => __( 'Font size', 'ayecode-connect' ),
1378
+        'options'  => $options,
1379
+        'default'  => '',
1380
+        'desc_tip' => true,
1381
+        'group'    => __( 'Typography', 'ayecode-connect' ),
1382
+    );
1383
+
1384
+    $input = wp_parse_args( $overwrite, $defaults );
1385
+
1386
+    return $input;
1387 1387
 }
1388 1388
 
1389 1389
 /**
@@ -1396,27 +1396,27 @@  discard block
 block discarded – undo
1396 1396
  */
1397 1397
 function sd_get_font_custom_size_input( $type = 'font_size_custom', $overwrite = array(), $parent_type = '' ) {
1398 1398
 
1399
-	$defaults = array(
1400
-		'type'              => 'number',
1401
-		'title'             => __( 'Font size (rem)', 'ayecode-connect' ),
1402
-		'default'           => '',
1403
-		'placeholder'       => '1.25',
1404
-		'custom_attributes' => array(
1405
-			'step' => '0.1',
1406
-			'min'  => '0',
1407
-			'max'  => '100',
1408
-		),
1409
-		'desc_tip'          => true,
1410
-		'group'             => __( 'Typography', 'ayecode-connect' ),
1411
-	);
1399
+    $defaults = array(
1400
+        'type'              => 'number',
1401
+        'title'             => __( 'Font size (rem)', 'ayecode-connect' ),
1402
+        'default'           => '',
1403
+        'placeholder'       => '1.25',
1404
+        'custom_attributes' => array(
1405
+            'step' => '0.1',
1406
+            'min'  => '0',
1407
+            'max'  => '100',
1408
+        ),
1409
+        'desc_tip'          => true,
1410
+        'group'             => __( 'Typography', 'ayecode-connect' ),
1411
+    );
1412 1412
 
1413
-	if ( $parent_type ) {
1414
-		$defaults['element_require'] = '[%' . $parent_type . '%]=="custom"';
1415
-	}
1413
+    if ( $parent_type ) {
1414
+        $defaults['element_require'] = '[%' . $parent_type . '%]=="custom"';
1415
+    }
1416 1416
 
1417
-	$input = wp_parse_args( $overwrite, $defaults );
1417
+    $input = wp_parse_args( $overwrite, $defaults );
1418 1418
 
1419
-	return $input;
1419
+    return $input;
1420 1420
 }
1421 1421
 
1422 1422
 /**
@@ -1429,23 +1429,23 @@  discard block
 block discarded – undo
1429 1429
  */
1430 1430
 function sd_get_font_line_height_input( $type = 'font_line_height', $overwrite = array() ) {
1431 1431
 
1432
-	$defaults = array(
1433
-		'type'              => 'number',
1434
-		'title'             => __( 'Font Line Height', 'ayecode-connect' ),
1435
-		'default'           => '',
1436
-		'placeholder'       => '1.75',
1437
-		'custom_attributes' => array(
1438
-			'step' => '0.1',
1439
-			'min'  => '0',
1440
-			'max'  => '100',
1441
-		),
1442
-		'desc_tip'          => true,
1443
-		'group'             => __( 'Typography', 'ayecode-connect' ),
1444
-	);
1432
+    $defaults = array(
1433
+        'type'              => 'number',
1434
+        'title'             => __( 'Font Line Height', 'ayecode-connect' ),
1435
+        'default'           => '',
1436
+        'placeholder'       => '1.75',
1437
+        'custom_attributes' => array(
1438
+            'step' => '0.1',
1439
+            'min'  => '0',
1440
+            'max'  => '100',
1441
+        ),
1442
+        'desc_tip'          => true,
1443
+        'group'             => __( 'Typography', 'ayecode-connect' ),
1444
+    );
1445 1445
 
1446
-	$input = wp_parse_args( $overwrite, $defaults );
1446
+    $input = wp_parse_args( $overwrite, $defaults );
1447 1447
 
1448
-	return $input;
1448
+    return $input;
1449 1449
 }
1450 1450
 
1451 1451
 /**
@@ -1458,18 +1458,18 @@  discard block
 block discarded – undo
1458 1458
  */
1459 1459
 function sd_get_font_size_input_group( $type = 'font_size', $overwrite = array(), $overwrite_custom = array() ) {
1460 1460
 
1461
-	$inputs = array();
1461
+    $inputs = array();
1462 1462
 
1463
-	if ( $overwrite !== false ) {
1464
-		$inputs[ $type ] = sd_get_font_size_input( $type, $overwrite, true );
1465
-	}
1463
+    if ( $overwrite !== false ) {
1464
+        $inputs[ $type ] = sd_get_font_size_input( $type, $overwrite, true );
1465
+    }
1466 1466
 
1467
-	if ( $overwrite_custom !== false ) {
1468
-		$custom            = $type . '_custom';
1469
-		$inputs[ $custom ] = sd_get_font_custom_size_input( $custom, $overwrite_custom, $type );
1470
-	}
1467
+    if ( $overwrite_custom !== false ) {
1468
+        $custom            = $type . '_custom';
1469
+        $inputs[ $custom ] = sd_get_font_custom_size_input( $custom, $overwrite_custom, $type );
1470
+    }
1471 1471
 
1472
-	return $inputs;
1472
+    return $inputs;
1473 1473
 }
1474 1474
 
1475 1475
 /**
@@ -1482,33 +1482,33 @@  discard block
 block discarded – undo
1482 1482
  */
1483 1483
 function sd_get_font_weight_input( $type = 'font_weight', $overwrite = array() ) {
1484 1484
 
1485
-	$options = array(
1486
-		''                                => __( 'Inherit', 'ayecode-connect' ),
1487
-		'font-weight-bold'                => 'bold',
1488
-		'font-weight-bolder'              => 'bolder',
1489
-		'font-weight-normal'              => 'normal',
1490
-		'font-weight-light'               => 'light',
1491
-		'font-weight-lighter'             => 'lighter',
1492
-		'font-italic'                     => 'italic',
1493
-		'font-weight-bold font-italic'    => 'bold italic',
1494
-		'font-weight-bolder font-italic'  => 'bolder italic',
1495
-		'font-weight-normal font-italic'  => 'normal italic',
1496
-		'font-weight-light font-italic'   => 'light italic',
1497
-		'font-weight-lighter font-italic' => 'lighter italic',
1498
-	);
1485
+    $options = array(
1486
+        ''                                => __( 'Inherit', 'ayecode-connect' ),
1487
+        'font-weight-bold'                => 'bold',
1488
+        'font-weight-bolder'              => 'bolder',
1489
+        'font-weight-normal'              => 'normal',
1490
+        'font-weight-light'               => 'light',
1491
+        'font-weight-lighter'             => 'lighter',
1492
+        'font-italic'                     => 'italic',
1493
+        'font-weight-bold font-italic'    => 'bold italic',
1494
+        'font-weight-bolder font-italic'  => 'bolder italic',
1495
+        'font-weight-normal font-italic'  => 'normal italic',
1496
+        'font-weight-light font-italic'   => 'light italic',
1497
+        'font-weight-lighter font-italic' => 'lighter italic',
1498
+    );
1499 1499
 
1500
-	$defaults = array(
1501
-		'type'     => 'select',
1502
-		'title'    => __( 'Appearance', 'ayecode-connect' ),
1503
-		'options'  => $options,
1504
-		'default'  => '',
1505
-		'desc_tip' => true,
1506
-		'group'    => __( 'Typography', 'ayecode-connect' ),
1507
-	);
1500
+    $defaults = array(
1501
+        'type'     => 'select',
1502
+        'title'    => __( 'Appearance', 'ayecode-connect' ),
1503
+        'options'  => $options,
1504
+        'default'  => '',
1505
+        'desc_tip' => true,
1506
+        'group'    => __( 'Typography', 'ayecode-connect' ),
1507
+    );
1508 1508
 
1509
-	$input = wp_parse_args( $overwrite, $defaults );
1509
+    $input = wp_parse_args( $overwrite, $defaults );
1510 1510
 
1511
-	return $input;
1511
+    return $input;
1512 1512
 }
1513 1513
 
1514 1514
 /**
@@ -1521,25 +1521,25 @@  discard block
 block discarded – undo
1521 1521
  */
1522 1522
 function sd_get_font_case_input( $type = 'font_weight', $overwrite = array() ) {
1523 1523
 
1524
-	$options = array(
1525
-		''                => __( 'Default', 'ayecode-connect' ),
1526
-		'text-lowercase'  => __( 'lowercase', 'ayecode-connect' ),
1527
-		'text-uppercase'  => __( 'UPPERCASE', 'ayecode-connect' ),
1528
-		'text-capitalize' => __( 'Capitalize', 'ayecode-connect' ),
1529
-	);
1524
+    $options = array(
1525
+        ''                => __( 'Default', 'ayecode-connect' ),
1526
+        'text-lowercase'  => __( 'lowercase', 'ayecode-connect' ),
1527
+        'text-uppercase'  => __( 'UPPERCASE', 'ayecode-connect' ),
1528
+        'text-capitalize' => __( 'Capitalize', 'ayecode-connect' ),
1529
+    );
1530 1530
 
1531
-	$defaults = array(
1532
-		'type'     => 'select',
1533
-		'title'    => __( 'Letter case', 'ayecode-connect' ),
1534
-		'options'  => $options,
1535
-		'default'  => '',
1536
-		'desc_tip' => true,
1537
-		'group'    => __( 'Typography', 'ayecode-connect' ),
1538
-	);
1531
+    $defaults = array(
1532
+        'type'     => 'select',
1533
+        'title'    => __( 'Letter case', 'ayecode-connect' ),
1534
+        'options'  => $options,
1535
+        'default'  => '',
1536
+        'desc_tip' => true,
1537
+        'group'    => __( 'Typography', 'ayecode-connect' ),
1538
+    );
1539 1539
 
1540
-	$input = wp_parse_args( $overwrite, $defaults );
1540
+    $input = wp_parse_args( $overwrite, $defaults );
1541 1541
 
1542
-	return $input;
1542
+    return $input;
1543 1543
 }
1544 1544
 
1545 1545
 /**
@@ -1553,23 +1553,23 @@  discard block
 block discarded – undo
1553 1553
  */
1554 1554
 function sd_get_font_italic_input( $type = 'font_italic', $overwrite = array() ) {
1555 1555
 
1556
-	$options = array(
1557
-		''            => __( 'No', 'ayecode-connect' ),
1558
-		'font-italic' => __( 'Yes', 'ayecode-connect' ),
1559
-	);
1556
+    $options = array(
1557
+        ''            => __( 'No', 'ayecode-connect' ),
1558
+        'font-italic' => __( 'Yes', 'ayecode-connect' ),
1559
+    );
1560 1560
 
1561
-	$defaults = array(
1562
-		'type'     => 'select',
1563
-		'title'    => __( 'Font italic', 'ayecode-connect' ),
1564
-		'options'  => $options,
1565
-		'default'  => '',
1566
-		'desc_tip' => true,
1567
-		'group'    => __( 'Typography', 'ayecode-connect' ),
1568
-	);
1561
+    $defaults = array(
1562
+        'type'     => 'select',
1563
+        'title'    => __( 'Font italic', 'ayecode-connect' ),
1564
+        'options'  => $options,
1565
+        'default'  => '',
1566
+        'desc_tip' => true,
1567
+        'group'    => __( 'Typography', 'ayecode-connect' ),
1568
+    );
1569 1569
 
1570
-	$input = wp_parse_args( $overwrite, $defaults );
1570
+    $input = wp_parse_args( $overwrite, $defaults );
1571 1571
 
1572
-	return $input;
1572
+    return $input;
1573 1573
 }
1574 1574
 
1575 1575
 /**
@@ -1582,18 +1582,18 @@  discard block
 block discarded – undo
1582 1582
  */
1583 1583
 function sd_get_anchor_input( $type = 'anchor', $overwrite = array() ) {
1584 1584
 
1585
-	$defaults = array(
1586
-		'type'     => 'text',
1587
-		'title'    => __( 'HTML anchor', 'ayecode-connect' ),
1588
-		'desc'     => __( 'Enter a word or two — without spaces — to make a unique web address just for this block, called an “anchor.” Then, you’ll be able to link directly to this section of your page.', 'ayecode-connect' ),
1589
-		'default'  => '',
1590
-		'desc_tip' => true,
1591
-		'group'    => __( 'Advanced', 'ayecode-connect' ),
1592
-	);
1585
+    $defaults = array(
1586
+        'type'     => 'text',
1587
+        'title'    => __( 'HTML anchor', 'ayecode-connect' ),
1588
+        'desc'     => __( 'Enter a word or two — without spaces — to make a unique web address just for this block, called an “anchor.” Then, you’ll be able to link directly to this section of your page.', 'ayecode-connect' ),
1589
+        'default'  => '',
1590
+        'desc_tip' => true,
1591
+        'group'    => __( 'Advanced', 'ayecode-connect' ),
1592
+    );
1593 1593
 
1594
-	$input = wp_parse_args( $overwrite, $defaults );
1594
+    $input = wp_parse_args( $overwrite, $defaults );
1595 1595
 
1596
-	return $input;
1596
+    return $input;
1597 1597
 }
1598 1598
 
1599 1599
 /**
@@ -1606,18 +1606,18 @@  discard block
 block discarded – undo
1606 1606
  */
1607 1607
 function sd_get_class_input( $type = 'css_class', $overwrite = array() ) {
1608 1608
 
1609
-	$defaults = array(
1610
-		'type'     => 'text',
1611
-		'title'    => __( 'Additional CSS class(es)', 'ayecode-connect' ),
1612
-		'desc'     => __( 'Separate multiple classes with spaces.', 'ayecode-connect' ),
1613
-		'default'  => '',
1614
-		'desc_tip' => true,
1615
-		'group'    => __( 'Advanced', 'ayecode-connect' ),
1616
-	);
1609
+    $defaults = array(
1610
+        'type'     => 'text',
1611
+        'title'    => __( 'Additional CSS class(es)', 'ayecode-connect' ),
1612
+        'desc'     => __( 'Separate multiple classes with spaces.', 'ayecode-connect' ),
1613
+        'default'  => '',
1614
+        'desc_tip' => true,
1615
+        'group'    => __( 'Advanced', 'ayecode-connect' ),
1616
+    );
1617 1617
 
1618
-	$input = wp_parse_args( $overwrite, $defaults );
1618
+    $input = wp_parse_args( $overwrite, $defaults );
1619 1619
 
1620
-	return $input;
1620
+    return $input;
1621 1621
 }
1622 1622
 
1623 1623
 /**
@@ -1630,18 +1630,18 @@  discard block
 block discarded – undo
1630 1630
  */
1631 1631
 function sd_get_custom_name_input( $type = 'metadata_name', $overwrite = array() ) {
1632 1632
 
1633
-	$defaults = array(
1634
-		'type'     => 'text',
1635
-		'title'    => __( 'Block Name', 'ayecode-connect' ),
1636
-		'desc'     => __( 'Set a custom name for this block', 'ayecode-connect' ),
1637
-		'default'  => '',
1638
-		'desc_tip' => true,
1639
-		'group'    => __( 'Advanced', 'ayecode-connect' ),
1640
-	);
1633
+    $defaults = array(
1634
+        'type'     => 'text',
1635
+        'title'    => __( 'Block Name', 'ayecode-connect' ),
1636
+        'desc'     => __( 'Set a custom name for this block', 'ayecode-connect' ),
1637
+        'default'  => '',
1638
+        'desc_tip' => true,
1639
+        'group'    => __( 'Advanced', 'ayecode-connect' ),
1640
+    );
1641 1641
 
1642
-	$input = wp_parse_args( $overwrite, $defaults );
1642
+    $input = wp_parse_args( $overwrite, $defaults );
1643 1643
 
1644
-	return $input;
1644
+    return $input;
1645 1645
 }
1646 1646
 
1647 1647
 /**
@@ -1654,341 +1654,341 @@  discard block
 block discarded – undo
1654 1654
  */
1655 1655
 function sd_get_hover_animations_input( $type = 'hover_animations', $overwrite = array() ) {
1656 1656
 
1657
-	$options = array(
1658
-		''                 => __( 'none', 'ayecode-connect' ),
1659
-		'hover-zoom'       => __( 'Zoom', 'ayecode-connect' ),
1660
-		'hover-shadow'     => __( 'Shadow', 'ayecode-connect' ),
1661
-		'hover-move-up'    => __( 'Move up', 'ayecode-connect' ),
1662
-		'hover-move-down'  => __( 'Move down', 'ayecode-connect' ),
1663
-		'hover-move-left'  => __( 'Move left', 'ayecode-connect' ),
1664
-		'hover-move-right' => __( 'Move right', 'ayecode-connect' ),
1665
-	);
1657
+    $options = array(
1658
+        ''                 => __( 'none', 'ayecode-connect' ),
1659
+        'hover-zoom'       => __( 'Zoom', 'ayecode-connect' ),
1660
+        'hover-shadow'     => __( 'Shadow', 'ayecode-connect' ),
1661
+        'hover-move-up'    => __( 'Move up', 'ayecode-connect' ),
1662
+        'hover-move-down'  => __( 'Move down', 'ayecode-connect' ),
1663
+        'hover-move-left'  => __( 'Move left', 'ayecode-connect' ),
1664
+        'hover-move-right' => __( 'Move right', 'ayecode-connect' ),
1665
+    );
1666 1666
 
1667
-	$defaults = array(
1668
-		'type'     => 'select',
1669
-		'multiple' => true,
1670
-		'title'    => __( 'Hover Animations', 'ayecode-connect' ),
1671
-		'options'  => $options,
1672
-		'default'  => '',
1673
-		'desc_tip' => true,
1674
-		'group'    => __( 'Hover Animations', 'ayecode-connect' ),
1675
-	);
1667
+    $defaults = array(
1668
+        'type'     => 'select',
1669
+        'multiple' => true,
1670
+        'title'    => __( 'Hover Animations', 'ayecode-connect' ),
1671
+        'options'  => $options,
1672
+        'default'  => '',
1673
+        'desc_tip' => true,
1674
+        'group'    => __( 'Hover Animations', 'ayecode-connect' ),
1675
+    );
1676 1676
 
1677
-	$input = wp_parse_args( $overwrite, $defaults );
1677
+    $input = wp_parse_args( $overwrite, $defaults );
1678 1678
 
1679
-	return $input;
1679
+    return $input;
1680 1680
 }
1681 1681
 
1682 1682
 
1683 1683
 function sd_get_flex_align_items_input( $type = 'align-items', $overwrite = array() ) {
1684
-	$device_size = '';
1685
-	if ( ! empty( $overwrite['device_type'] ) ) {
1686
-		if ( $overwrite['device_type'] == 'Tablet' ) {
1687
-			$device_size = '-md';
1688
-		} elseif ( $overwrite['device_type'] == 'Desktop' ) {
1689
-			$device_size = '-lg';
1690
-		}
1691
-	}
1692
-	$options = array(
1693
-		''                                         => __( 'Default', 'ayecode-connect' ),
1694
-		'align-items' . $device_size . '-start'    => 'align-items-start',
1695
-		'align-items' . $device_size . '-end'      => 'align-items-end',
1696
-		'align-items' . $device_size . '-center'   => 'align-items-center',
1697
-		'align-items' . $device_size . '-baseline' => 'align-items-baseline',
1698
-		'align-items' . $device_size . '-stretch'  => 'align-items-stretch',
1699
-	);
1700
-
1701
-	$defaults = array(
1702
-		'type'            => 'select',
1703
-		'title'           => __( 'Vertical Align Items', 'ayecode-connect' ),
1704
-		'options'         => $options,
1705
-		'default'         => '',
1706
-		'desc_tip'        => true,
1707
-		'group'           => __( 'Wrapper Styles', 'ayecode-connect' ),
1708
-		'element_require' => ' ( ( [%container%]=="row" ) || ( [%display%]=="d-flex" || [%display_md%]=="d-md-flex" || [%display_lg%]=="d-lg-flex" ) ) ',
1709
-
1710
-	);
1711
-
1712
-	$input = wp_parse_args( $overwrite, $defaults );
1713
-
1714
-	return $input;
1684
+    $device_size = '';
1685
+    if ( ! empty( $overwrite['device_type'] ) ) {
1686
+        if ( $overwrite['device_type'] == 'Tablet' ) {
1687
+            $device_size = '-md';
1688
+        } elseif ( $overwrite['device_type'] == 'Desktop' ) {
1689
+            $device_size = '-lg';
1690
+        }
1691
+    }
1692
+    $options = array(
1693
+        ''                                         => __( 'Default', 'ayecode-connect' ),
1694
+        'align-items' . $device_size . '-start'    => 'align-items-start',
1695
+        'align-items' . $device_size . '-end'      => 'align-items-end',
1696
+        'align-items' . $device_size . '-center'   => 'align-items-center',
1697
+        'align-items' . $device_size . '-baseline' => 'align-items-baseline',
1698
+        'align-items' . $device_size . '-stretch'  => 'align-items-stretch',
1699
+    );
1700
+
1701
+    $defaults = array(
1702
+        'type'            => 'select',
1703
+        'title'           => __( 'Vertical Align Items', 'ayecode-connect' ),
1704
+        'options'         => $options,
1705
+        'default'         => '',
1706
+        'desc_tip'        => true,
1707
+        'group'           => __( 'Wrapper Styles', 'ayecode-connect' ),
1708
+        'element_require' => ' ( ( [%container%]=="row" ) || ( [%display%]=="d-flex" || [%display_md%]=="d-md-flex" || [%display_lg%]=="d-lg-flex" ) ) ',
1709
+
1710
+    );
1711
+
1712
+    $input = wp_parse_args( $overwrite, $defaults );
1713
+
1714
+    return $input;
1715 1715
 }
1716 1716
 
1717 1717
 function sd_get_flex_align_items_input_group( $type = 'flex_align_items', $overwrite = array() ) {
1718
-	$inputs = array();
1719
-	$sizes  = array(
1720
-		''    => 'Mobile',
1721
-		'_md' => 'Tablet',
1722
-		'_lg' => 'Desktop',
1723
-	);
1718
+    $inputs = array();
1719
+    $sizes  = array(
1720
+        ''    => 'Mobile',
1721
+        '_md' => 'Tablet',
1722
+        '_lg' => 'Desktop',
1723
+    );
1724 1724
 
1725
-	if ( $overwrite !== false ) {
1725
+    if ( $overwrite !== false ) {
1726 1726
 
1727
-		foreach ( $sizes as $ds => $dt ) {
1728
-			$overwrite['device_type'] = $dt;
1729
-			$inputs[ $type . $ds ]    = sd_get_flex_align_items_input( $type, $overwrite );
1730
-		}
1731
-	}
1727
+        foreach ( $sizes as $ds => $dt ) {
1728
+            $overwrite['device_type'] = $dt;
1729
+            $inputs[ $type . $ds ]    = sd_get_flex_align_items_input( $type, $overwrite );
1730
+        }
1731
+    }
1732 1732
 
1733
-	return $inputs;
1733
+    return $inputs;
1734 1734
 }
1735 1735
 
1736 1736
 function sd_get_flex_justify_content_input( $type = 'flex_justify_content', $overwrite = array() ) {
1737
-	$device_size = '';
1738
-	if ( ! empty( $overwrite['device_type'] ) ) {
1739
-		if ( $overwrite['device_type'] == 'Tablet' ) {
1740
-			$device_size = '-md';
1741
-		} elseif ( $overwrite['device_type'] == 'Desktop' ) {
1742
-			$device_size = '-lg';
1743
-		}
1744
-	}
1745
-	$options = array(
1746
-		''                                            => __( 'Default', 'ayecode-connect' ),
1747
-		'justify-content' . $device_size . '-start'   => 'justify-content-start',
1748
-		'justify-content' . $device_size . '-end'     => 'justify-content-end',
1749
-		'justify-content' . $device_size . '-center'  => 'justify-content-center',
1750
-		'justify-content' . $device_size . '-between' => 'justify-content-between',
1751
-		'justify-content' . $device_size . '-stretch' => 'justify-content-around',
1752
-	);
1753
-
1754
-	$defaults = array(
1755
-		'type'            => 'select',
1756
-		'title'           => __( 'Justify content', 'ayecode-connect' ),
1757
-		'options'         => $options,
1758
-		'default'         => '',
1759
-		'desc_tip'        => true,
1760
-		'group'           => __( 'Wrapper Styles', 'ayecode-connect' ),
1761
-		'element_require' => '( ( [%container%]=="row" ) || ( [%display%]=="d-flex" || [%display_md%]=="d-md-flex" || [%display_lg%]=="d-lg-flex" ) ) ',
1762
-
1763
-	);
1764
-
1765
-	$input = wp_parse_args( $overwrite, $defaults );
1766
-
1767
-	return $input;
1737
+    $device_size = '';
1738
+    if ( ! empty( $overwrite['device_type'] ) ) {
1739
+        if ( $overwrite['device_type'] == 'Tablet' ) {
1740
+            $device_size = '-md';
1741
+        } elseif ( $overwrite['device_type'] == 'Desktop' ) {
1742
+            $device_size = '-lg';
1743
+        }
1744
+    }
1745
+    $options = array(
1746
+        ''                                            => __( 'Default', 'ayecode-connect' ),
1747
+        'justify-content' . $device_size . '-start'   => 'justify-content-start',
1748
+        'justify-content' . $device_size . '-end'     => 'justify-content-end',
1749
+        'justify-content' . $device_size . '-center'  => 'justify-content-center',
1750
+        'justify-content' . $device_size . '-between' => 'justify-content-between',
1751
+        'justify-content' . $device_size . '-stretch' => 'justify-content-around',
1752
+    );
1753
+
1754
+    $defaults = array(
1755
+        'type'            => 'select',
1756
+        'title'           => __( 'Justify content', 'ayecode-connect' ),
1757
+        'options'         => $options,
1758
+        'default'         => '',
1759
+        'desc_tip'        => true,
1760
+        'group'           => __( 'Wrapper Styles', 'ayecode-connect' ),
1761
+        'element_require' => '( ( [%container%]=="row" ) || ( [%display%]=="d-flex" || [%display_md%]=="d-md-flex" || [%display_lg%]=="d-lg-flex" ) ) ',
1762
+
1763
+    );
1764
+
1765
+    $input = wp_parse_args( $overwrite, $defaults );
1766
+
1767
+    return $input;
1768 1768
 }
1769 1769
 
1770 1770
 function sd_get_flex_justify_content_input_group( $type = 'flex_justify_content', $overwrite = array() ) {
1771
-	$inputs = array();
1772
-	$sizes  = array(
1773
-		''    => 'Mobile',
1774
-		'_md' => 'Tablet',
1775
-		'_lg' => 'Desktop',
1776
-	);
1771
+    $inputs = array();
1772
+    $sizes  = array(
1773
+        ''    => 'Mobile',
1774
+        '_md' => 'Tablet',
1775
+        '_lg' => 'Desktop',
1776
+    );
1777 1777
 
1778
-	if ( $overwrite !== false ) {
1778
+    if ( $overwrite !== false ) {
1779 1779
 
1780
-		foreach ( $sizes as $ds => $dt ) {
1781
-			$overwrite['device_type'] = $dt;
1782
-			$inputs[ $type . $ds ]    = sd_get_flex_justify_content_input( $type, $overwrite );
1783
-		}
1784
-	}
1780
+        foreach ( $sizes as $ds => $dt ) {
1781
+            $overwrite['device_type'] = $dt;
1782
+            $inputs[ $type . $ds ]    = sd_get_flex_justify_content_input( $type, $overwrite );
1783
+        }
1784
+    }
1785 1785
 
1786
-	return $inputs;
1786
+    return $inputs;
1787 1787
 }
1788 1788
 
1789 1789
 
1790 1790
 function sd_get_flex_align_self_input( $type = 'flex_align_self', $overwrite = array() ) {
1791
-	$device_size = '';
1792
-	if ( ! empty( $overwrite['device_type'] ) ) {
1793
-		if ( $overwrite['device_type'] == 'Tablet' ) {
1794
-			$device_size = '-md';
1795
-		} elseif ( $overwrite['device_type'] == 'Desktop' ) {
1796
-			$device_size = '-lg';
1797
-		}
1798
-	}
1799
-	$options = array(
1800
-		''                                         => __( 'Default', 'ayecode-connect' ),
1801
-		'align-items' . $device_size . '-start'    => 'align-items-start',
1802
-		'align-items' . $device_size . '-end'      => 'align-items-end',
1803
-		'align-items' . $device_size . '-center'   => 'align-items-center',
1804
-		'align-items' . $device_size . '-baseline' => 'align-items-baseline',
1805
-		'align-items' . $device_size . '-stretch'  => 'align-items-stretch',
1806
-	);
1807
-
1808
-	$defaults = array(
1809
-		'type'            => 'select',
1810
-		'title'           => __( 'Align Self', 'ayecode-connect' ),
1811
-		'options'         => $options,
1812
-		'default'         => '',
1813
-		'desc_tip'        => true,
1814
-		'group'           => __( 'Wrapper Styles', 'ayecode-connect' ),
1815
-		'element_require' => ' [%container%]=="col" ',
1816
-
1817
-	);
1818
-
1819
-	$input = wp_parse_args( $overwrite, $defaults );
1820
-
1821
-	return $input;
1791
+    $device_size = '';
1792
+    if ( ! empty( $overwrite['device_type'] ) ) {
1793
+        if ( $overwrite['device_type'] == 'Tablet' ) {
1794
+            $device_size = '-md';
1795
+        } elseif ( $overwrite['device_type'] == 'Desktop' ) {
1796
+            $device_size = '-lg';
1797
+        }
1798
+    }
1799
+    $options = array(
1800
+        ''                                         => __( 'Default', 'ayecode-connect' ),
1801
+        'align-items' . $device_size . '-start'    => 'align-items-start',
1802
+        'align-items' . $device_size . '-end'      => 'align-items-end',
1803
+        'align-items' . $device_size . '-center'   => 'align-items-center',
1804
+        'align-items' . $device_size . '-baseline' => 'align-items-baseline',
1805
+        'align-items' . $device_size . '-stretch'  => 'align-items-stretch',
1806
+    );
1807
+
1808
+    $defaults = array(
1809
+        'type'            => 'select',
1810
+        'title'           => __( 'Align Self', 'ayecode-connect' ),
1811
+        'options'         => $options,
1812
+        'default'         => '',
1813
+        'desc_tip'        => true,
1814
+        'group'           => __( 'Wrapper Styles', 'ayecode-connect' ),
1815
+        'element_require' => ' [%container%]=="col" ',
1816
+
1817
+    );
1818
+
1819
+    $input = wp_parse_args( $overwrite, $defaults );
1820
+
1821
+    return $input;
1822 1822
 }
1823 1823
 
1824 1824
 function sd_get_flex_align_self_input_group( $type = 'flex_align_self', $overwrite = array() ) {
1825
-	$inputs = array();
1826
-	$sizes  = array(
1827
-		''    => 'Mobile',
1828
-		'_md' => 'Tablet',
1829
-		'_lg' => 'Desktop',
1830
-	);
1825
+    $inputs = array();
1826
+    $sizes  = array(
1827
+        ''    => 'Mobile',
1828
+        '_md' => 'Tablet',
1829
+        '_lg' => 'Desktop',
1830
+    );
1831 1831
 
1832
-	if ( $overwrite !== false ) {
1832
+    if ( $overwrite !== false ) {
1833 1833
 
1834
-		foreach ( $sizes as $ds => $dt ) {
1835
-			$overwrite['device_type'] = $dt;
1836
-			$inputs[ $type . $ds ]    = sd_get_flex_align_self_input( $type, $overwrite );
1837
-		}
1838
-	}
1834
+        foreach ( $sizes as $ds => $dt ) {
1835
+            $overwrite['device_type'] = $dt;
1836
+            $inputs[ $type . $ds ]    = sd_get_flex_align_self_input( $type, $overwrite );
1837
+        }
1838
+    }
1839 1839
 
1840
-	return $inputs;
1840
+    return $inputs;
1841 1841
 }
1842 1842
 
1843 1843
 function sd_get_flex_order_input( $type = 'flex_order', $overwrite = array() ) {
1844
-	$device_size = '';
1845
-	if ( ! empty( $overwrite['device_type'] ) ) {
1846
-		if ( $overwrite['device_type'] == 'Tablet' ) {
1847
-			$device_size = '-md';
1848
-		} elseif ( $overwrite['device_type'] == 'Desktop' ) {
1849
-			$device_size = '-lg';
1850
-		}
1851
-	}
1852
-	$options = array(
1853
-		'' => __( 'Default', 'ayecode-connect' ),
1854
-	);
1855
-
1856
-	$i = 0;
1857
-	while ( $i <= 5 ) {
1858
-		$options[ 'order' . $device_size . '-' . $i ] = $i;
1859
-		$i++;
1860
-	}
1861
-
1862
-	$defaults = array(
1863
-		'type'            => 'select',
1864
-		'title'           => __( 'Flex Order', 'ayecode-connect' ),
1865
-		'options'         => $options,
1866
-		'default'         => '',
1867
-		'desc_tip'        => true,
1868
-		'group'           => __( 'Wrapper Styles', 'ayecode-connect' ),
1869
-		'element_require' => ' [%container%]=="col" ',
1870
-
1871
-	);
1872
-
1873
-	$input = wp_parse_args( $overwrite, $defaults );
1874
-
1875
-	return $input;
1844
+    $device_size = '';
1845
+    if ( ! empty( $overwrite['device_type'] ) ) {
1846
+        if ( $overwrite['device_type'] == 'Tablet' ) {
1847
+            $device_size = '-md';
1848
+        } elseif ( $overwrite['device_type'] == 'Desktop' ) {
1849
+            $device_size = '-lg';
1850
+        }
1851
+    }
1852
+    $options = array(
1853
+        '' => __( 'Default', 'ayecode-connect' ),
1854
+    );
1855
+
1856
+    $i = 0;
1857
+    while ( $i <= 5 ) {
1858
+        $options[ 'order' . $device_size . '-' . $i ] = $i;
1859
+        $i++;
1860
+    }
1861
+
1862
+    $defaults = array(
1863
+        'type'            => 'select',
1864
+        'title'           => __( 'Flex Order', 'ayecode-connect' ),
1865
+        'options'         => $options,
1866
+        'default'         => '',
1867
+        'desc_tip'        => true,
1868
+        'group'           => __( 'Wrapper Styles', 'ayecode-connect' ),
1869
+        'element_require' => ' [%container%]=="col" ',
1870
+
1871
+    );
1872
+
1873
+    $input = wp_parse_args( $overwrite, $defaults );
1874
+
1875
+    return $input;
1876 1876
 }
1877 1877
 
1878 1878
 function sd_get_flex_order_input_group( $type = 'flex_order', $overwrite = array() ) {
1879
-	$inputs = array();
1880
-	$sizes  = array(
1881
-		''    => 'Mobile',
1882
-		'_md' => 'Tablet',
1883
-		'_lg' => 'Desktop',
1884
-	);
1879
+    $inputs = array();
1880
+    $sizes  = array(
1881
+        ''    => 'Mobile',
1882
+        '_md' => 'Tablet',
1883
+        '_lg' => 'Desktop',
1884
+    );
1885 1885
 
1886
-	if ( $overwrite !== false ) {
1886
+    if ( $overwrite !== false ) {
1887 1887
 
1888
-		foreach ( $sizes as $ds => $dt ) {
1889
-			$overwrite['device_type'] = $dt;
1890
-			$inputs[ $type . $ds ]    = sd_get_flex_order_input( $type, $overwrite );
1891
-		}
1892
-	}
1888
+        foreach ( $sizes as $ds => $dt ) {
1889
+            $overwrite['device_type'] = $dt;
1890
+            $inputs[ $type . $ds ]    = sd_get_flex_order_input( $type, $overwrite );
1891
+        }
1892
+    }
1893 1893
 
1894
-	return $inputs;
1894
+    return $inputs;
1895 1895
 }
1896 1896
 
1897 1897
 function sd_get_flex_wrap_group( $type = 'flex_wrap', $overwrite = array() ) {
1898
-	$inputs = array();
1899
-	$sizes  = array(
1900
-		''    => 'Mobile',
1901
-		'_md' => 'Tablet',
1902
-		'_lg' => 'Desktop',
1903
-	);
1898
+    $inputs = array();
1899
+    $sizes  = array(
1900
+        ''    => 'Mobile',
1901
+        '_md' => 'Tablet',
1902
+        '_lg' => 'Desktop',
1903
+    );
1904 1904
 
1905
-	if ( $overwrite !== false ) {
1905
+    if ( $overwrite !== false ) {
1906 1906
 
1907
-		foreach ( $sizes as $ds => $dt ) {
1908
-			$overwrite['device_type'] = $dt;
1909
-			$inputs[ $type . $ds ]    = sd_get_flex_wrap_input( $type, $overwrite );
1910
-		}
1911
-	}
1907
+        foreach ( $sizes as $ds => $dt ) {
1908
+            $overwrite['device_type'] = $dt;
1909
+            $inputs[ $type . $ds ]    = sd_get_flex_wrap_input( $type, $overwrite );
1910
+        }
1911
+    }
1912 1912
 
1913
-	return $inputs;
1913
+    return $inputs;
1914 1914
 }
1915 1915
 
1916 1916
 function sd_get_flex_wrap_input( $type = 'flex_wrap', $overwrite = array() ) {
1917
-	$device_size = '';
1918
-	if ( ! empty( $overwrite['device_type'] ) ) {
1919
-		if ( $overwrite['device_type'] == 'Tablet' ) {
1920
-			$device_size = '-md';
1921
-		} elseif ( $overwrite['device_type'] == 'Desktop' ) {
1922
-			$device_size = '-lg';
1923
-		}
1924
-	}
1925
-	$options = array(
1926
-		''                                      => __( 'Default', 'ayecode-connect' ),
1927
-		'flex' . $device_size . '-nowrap'       => 'nowrap',
1928
-		'flex' . $device_size . '-wrap'         => 'wrap',
1929
-		'flex' . $device_size . '-wrap-reverse' => 'wrap-reverse',
1930
-	);
1931
-
1932
-	$defaults = array(
1933
-		'type'     => 'select',
1934
-		'title'    => __( 'Flex wrap', 'ayecode-connect' ),
1935
-		'options'  => $options,
1936
-		'default'  => '',
1937
-		'desc_tip' => true,
1938
-		'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
1939
-	);
1940
-
1941
-	$input = wp_parse_args( $overwrite, $defaults );
1942
-
1943
-	return $input;
1917
+    $device_size = '';
1918
+    if ( ! empty( $overwrite['device_type'] ) ) {
1919
+        if ( $overwrite['device_type'] == 'Tablet' ) {
1920
+            $device_size = '-md';
1921
+        } elseif ( $overwrite['device_type'] == 'Desktop' ) {
1922
+            $device_size = '-lg';
1923
+        }
1924
+    }
1925
+    $options = array(
1926
+        ''                                      => __( 'Default', 'ayecode-connect' ),
1927
+        'flex' . $device_size . '-nowrap'       => 'nowrap',
1928
+        'flex' . $device_size . '-wrap'         => 'wrap',
1929
+        'flex' . $device_size . '-wrap-reverse' => 'wrap-reverse',
1930
+    );
1931
+
1932
+    $defaults = array(
1933
+        'type'     => 'select',
1934
+        'title'    => __( 'Flex wrap', 'ayecode-connect' ),
1935
+        'options'  => $options,
1936
+        'default'  => '',
1937
+        'desc_tip' => true,
1938
+        'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
1939
+    );
1940
+
1941
+    $input = wp_parse_args( $overwrite, $defaults );
1942
+
1943
+    return $input;
1944 1944
 }
1945 1945
 
1946 1946
 function sd_get_float_group( $type = 'float', $overwrite = array() ) {
1947
-	$inputs = array();
1948
-	$sizes  = array(
1949
-		''    => 'Mobile',
1950
-		'_md' => 'Tablet',
1951
-		'_lg' => 'Desktop',
1952
-	);
1947
+    $inputs = array();
1948
+    $sizes  = array(
1949
+        ''    => 'Mobile',
1950
+        '_md' => 'Tablet',
1951
+        '_lg' => 'Desktop',
1952
+    );
1953 1953
 
1954
-	if ( $overwrite !== false ) {
1954
+    if ( $overwrite !== false ) {
1955 1955
 
1956
-		foreach ( $sizes as $ds => $dt ) {
1957
-			$overwrite['device_type'] = $dt;
1958
-			$inputs[ $type . $ds ]    = sd_get_float_input( $type, $overwrite );
1959
-		}
1960
-	}
1956
+        foreach ( $sizes as $ds => $dt ) {
1957
+            $overwrite['device_type'] = $dt;
1958
+            $inputs[ $type . $ds ]    = sd_get_float_input( $type, $overwrite );
1959
+        }
1960
+    }
1961 1961
 
1962
-	return $inputs;
1962
+    return $inputs;
1963 1963
 }
1964 1964
 function sd_get_float_input( $type = 'float', $overwrite = array() ) {
1965
-	$device_size = '';
1966
-	if ( ! empty( $overwrite['device_type'] ) ) {
1967
-		if ( $overwrite['device_type'] == 'Tablet' ) {
1968
-			$device_size = '-md';
1969
-		} elseif ( $overwrite['device_type'] == 'Desktop' ) {
1970
-			$device_size = '-lg';
1971
-		}
1972
-	}
1973
-	$options = array(
1974
-		''                                      => __( 'Default', 'ayecode-connect' ),
1975
-		'float' . $device_size . '-start'       => 'left',
1976
-		'float' . $device_size . '-end'         => 'right',
1977
-		'float' . $device_size . '-none' => 'none',
1978
-	);
1979
-
1980
-	$defaults = array(
1981
-		'type'     => 'select',
1982
-		'title'    => __( 'Float', 'ayecode-connect' ),
1983
-		'options'  => $options,
1984
-		'default'  => '',
1985
-		'desc_tip' => true,
1986
-		'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
1987
-	);
1988
-
1989
-	$input = wp_parse_args( $overwrite, $defaults );
1990
-
1991
-	return $input;
1965
+    $device_size = '';
1966
+    if ( ! empty( $overwrite['device_type'] ) ) {
1967
+        if ( $overwrite['device_type'] == 'Tablet' ) {
1968
+            $device_size = '-md';
1969
+        } elseif ( $overwrite['device_type'] == 'Desktop' ) {
1970
+            $device_size = '-lg';
1971
+        }
1972
+    }
1973
+    $options = array(
1974
+        ''                                      => __( 'Default', 'ayecode-connect' ),
1975
+        'float' . $device_size . '-start'       => 'left',
1976
+        'float' . $device_size . '-end'         => 'right',
1977
+        'float' . $device_size . '-none' => 'none',
1978
+    );
1979
+
1980
+    $defaults = array(
1981
+        'type'     => 'select',
1982
+        'title'    => __( 'Float', 'ayecode-connect' ),
1983
+        'options'  => $options,
1984
+        'default'  => '',
1985
+        'desc_tip' => true,
1986
+        'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
1987
+    );
1988
+
1989
+    $input = wp_parse_args( $overwrite, $defaults );
1990
+
1991
+    return $input;
1992 1992
 }
1993 1993
 
1994 1994
 /**
@@ -1999,26 +1999,26 @@  discard block
 block discarded – undo
1999 1999
  */
2000 2000
 function sd_get_zindex_input( $type = 'zindex', $overwrite = array() ) {
2001 2001
 
2002
-	$options = array(
2003
-		''          => __( 'Default', 'ayecode-connect' ),
2004
-		'zindex-0'  => '0',
2005
-		'zindex-1'  => '1',
2006
-		'zindex-5'  => '5',
2007
-		'zindex-10' => '10',
2008
-	);
2002
+    $options = array(
2003
+        ''          => __( 'Default', 'ayecode-connect' ),
2004
+        'zindex-0'  => '0',
2005
+        'zindex-1'  => '1',
2006
+        'zindex-5'  => '5',
2007
+        'zindex-10' => '10',
2008
+    );
2009 2009
 
2010
-	$defaults = array(
2011
-		'type'     => 'select',
2012
-		'title'    => __( 'Z-index', 'ayecode-connect' ),
2013
-		'options'  => $options,
2014
-		'default'  => '',
2015
-		'desc_tip' => true,
2016
-		'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
2017
-	);
2010
+    $defaults = array(
2011
+        'type'     => 'select',
2012
+        'title'    => __( 'Z-index', 'ayecode-connect' ),
2013
+        'options'  => $options,
2014
+        'default'  => '',
2015
+        'desc_tip' => true,
2016
+        'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
2017
+    );
2018 2018
 
2019
-	$input = wp_parse_args( $overwrite, $defaults );
2019
+    $input = wp_parse_args( $overwrite, $defaults );
2020 2020
 
2021
-	return $input;
2021
+    return $input;
2022 2022
 }
2023 2023
 
2024 2024
 /**
@@ -2029,26 +2029,26 @@  discard block
 block discarded – undo
2029 2029
  */
2030 2030
 function sd_get_overflow_input( $type = 'overflow', $overwrite = array() ) {
2031 2031
 
2032
-	$options = array(
2033
-		''                 => __( 'Default', 'ayecode-connect' ),
2034
-		'overflow-auto'    => __( 'Auto', 'ayecode-connect' ),
2035
-		'overflow-hidden'  => __( 'Hidden', 'ayecode-connect' ),
2036
-		'overflow-visible' => __( 'Visible', 'ayecode-connect' ),
2037
-		'overflow-scroll'  => __( 'Scroll', 'ayecode-connect' ),
2038
-	);
2032
+    $options = array(
2033
+        ''                 => __( 'Default', 'ayecode-connect' ),
2034
+        'overflow-auto'    => __( 'Auto', 'ayecode-connect' ),
2035
+        'overflow-hidden'  => __( 'Hidden', 'ayecode-connect' ),
2036
+        'overflow-visible' => __( 'Visible', 'ayecode-connect' ),
2037
+        'overflow-scroll'  => __( 'Scroll', 'ayecode-connect' ),
2038
+    );
2039 2039
 
2040
-	$defaults = array(
2041
-		'type'     => 'select',
2042
-		'title'    => __( 'Overflow', 'ayecode-connect' ),
2043
-		'options'  => $options,
2044
-		'default'  => '',
2045
-		'desc_tip' => true,
2046
-		'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
2047
-	);
2040
+    $defaults = array(
2041
+        'type'     => 'select',
2042
+        'title'    => __( 'Overflow', 'ayecode-connect' ),
2043
+        'options'  => $options,
2044
+        'default'  => '',
2045
+        'desc_tip' => true,
2046
+        'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
2047
+    );
2048 2048
 
2049
-	$input = wp_parse_args( $overwrite, $defaults );
2049
+    $input = wp_parse_args( $overwrite, $defaults );
2050 2050
 
2051
-	return $input;
2051
+    return $input;
2052 2052
 }
2053 2053
 
2054 2054
 /**
@@ -2059,19 +2059,19 @@  discard block
 block discarded – undo
2059 2059
  */
2060 2060
 function sd_get_max_height_input( $type = 'max_height', $overwrite = array() ) {
2061 2061
 
2062
-	$defaults = array(
2063
-		'type'        => 'text',
2064
-		'title'       => __( 'Max height', 'ayecode-connect' ),
2065
-		'value'       => '',
2066
-		'default'     => '',
2067
-		'placeholder' => '',
2068
-		'desc_tip'    => true,
2069
-		'group'       => __( 'Wrapper Styles', 'ayecode-connect' ),
2070
-	);
2062
+    $defaults = array(
2063
+        'type'        => 'text',
2064
+        'title'       => __( 'Max height', 'ayecode-connect' ),
2065
+        'value'       => '',
2066
+        'default'     => '',
2067
+        'placeholder' => '',
2068
+        'desc_tip'    => true,
2069
+        'group'       => __( 'Wrapper Styles', 'ayecode-connect' ),
2070
+    );
2071 2071
 
2072
-	$input = wp_parse_args( $overwrite, $defaults );
2072
+    $input = wp_parse_args( $overwrite, $defaults );
2073 2073
 
2074
-	return $input;
2074
+    return $input;
2075 2075
 }
2076 2076
 
2077 2077
 /**
@@ -2082,23 +2082,23 @@  discard block
 block discarded – undo
2082 2082
  */
2083 2083
 function sd_get_scrollbars_input( $type = 'scrollbars', $overwrite = array() ) {
2084 2084
 
2085
-	$options = array(
2086
-		''               => __( 'Default', 'ayecode-connect' ),
2087
-		'scrollbars-ios' => __( 'IOS Style', 'ayecode-connect' ),
2088
-	);
2085
+    $options = array(
2086
+        ''               => __( 'Default', 'ayecode-connect' ),
2087
+        'scrollbars-ios' => __( 'IOS Style', 'ayecode-connect' ),
2088
+    );
2089 2089
 
2090
-	$defaults = array(
2091
-		'type'     => 'select',
2092
-		'title'    => __( 'Scrollbars', 'ayecode-connect' ),
2093
-		'options'  => $options,
2094
-		'default'  => '',
2095
-		'desc_tip' => true,
2096
-		'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
2097
-	);
2090
+    $defaults = array(
2091
+        'type'     => 'select',
2092
+        'title'    => __( 'Scrollbars', 'ayecode-connect' ),
2093
+        'options'  => $options,
2094
+        'default'  => '',
2095
+        'desc_tip' => true,
2096
+        'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
2097
+    );
2098 2098
 
2099
-	$input = wp_parse_args( $overwrite, $defaults );
2099
+    $input = wp_parse_args( $overwrite, $defaults );
2100 2100
 
2101
-	return $input;
2101
+    return $input;
2102 2102
 }
2103 2103
 
2104 2104
 /**
@@ -2109,17 +2109,17 @@  discard block
 block discarded – undo
2109 2109
  */
2110 2110
 function sd_get_new_window_input( $type = 'target', $overwrite = array() ) {
2111 2111
 
2112
-	$defaults = array(
2113
-		'type'     => 'checkbox',
2114
-		'title'    => __( 'Open in new window', 'ayecode-connect' ),
2115
-		'default'  => '',
2116
-		'desc_tip' => true,
2117
-		'group'    => __( 'Link', 'ayecode-connect' ),
2118
-	);
2112
+    $defaults = array(
2113
+        'type'     => 'checkbox',
2114
+        'title'    => __( 'Open in new window', 'ayecode-connect' ),
2115
+        'default'  => '',
2116
+        'desc_tip' => true,
2117
+        'group'    => __( 'Link', 'ayecode-connect' ),
2118
+    );
2119 2119
 
2120
-	$input = wp_parse_args( $overwrite, $defaults );
2120
+    $input = wp_parse_args( $overwrite, $defaults );
2121 2121
 
2122
-	return $input;
2122
+    return $input;
2123 2123
 }
2124 2124
 
2125 2125
 /**
@@ -2130,17 +2130,17 @@  discard block
 block discarded – undo
2130 2130
  */
2131 2131
 function sd_get_nofollow_input( $type = 'nofollow', $overwrite = array() ) {
2132 2132
 
2133
-	$defaults = array(
2134
-		'type'     => 'checkbox',
2135
-		'title'    => __( 'Add nofollow', 'ayecode-connect' ),
2136
-		'default'  => '',
2137
-		'desc_tip' => true,
2138
-		'group'    => __( 'Link', 'ayecode-connect' ),
2139
-	);
2133
+    $defaults = array(
2134
+        'type'     => 'checkbox',
2135
+        'title'    => __( 'Add nofollow', 'ayecode-connect' ),
2136
+        'default'  => '',
2137
+        'desc_tip' => true,
2138
+        'group'    => __( 'Link', 'ayecode-connect' ),
2139
+    );
2140 2140
 
2141
-	$input = wp_parse_args( $overwrite, $defaults );
2141
+    $input = wp_parse_args( $overwrite, $defaults );
2142 2142
 
2143
-	return $input;
2143
+    return $input;
2144 2144
 }
2145 2145
 
2146 2146
 /**
@@ -2153,35 +2153,35 @@  discard block
 block discarded – undo
2153 2153
  */
2154 2154
 function sd_get_width_input( $type = 'width', $overwrite = array() ) {
2155 2155
 
2156
-	$device_size = '';
2157
-	if ( ! empty( $overwrite['device_type'] ) ) {
2158
-		if ( $overwrite['device_type'] == 'Tablet' ) {
2159
-			$device_size = '-md';
2160
-		} elseif ( $overwrite['device_type'] == 'Desktop' ) {
2161
-			$device_size = '-lg';
2162
-		}
2163
-	}
2164
-	$options = array(
2165
-		'' => __('Default', 'ayecode-connect'),
2166
-		'w' . $device_size . '-25' => '25%',
2167
-		'w' . $device_size . '-50' => '50%',
2168
-		'w' . $device_size . '-75' => '75%',
2169
-		'w' . $device_size . '-100' => '100%',
2170
-		'w' . $device_size . '-auto' => 'auto',
2171
-	);
2172
-
2173
-	$defaults = array(
2174
-		'type'     => 'select',
2175
-		'title'    => __( 'Width', 'ayecode-connect' ),
2176
-		'options'  => $options,
2177
-		'default'  => '',
2178
-		'desc_tip' => true,
2179
-		'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
2180
-	);
2181
-
2182
-	$input = wp_parse_args( $overwrite, $defaults );
2183
-
2184
-	return $input;
2156
+    $device_size = '';
2157
+    if ( ! empty( $overwrite['device_type'] ) ) {
2158
+        if ( $overwrite['device_type'] == 'Tablet' ) {
2159
+            $device_size = '-md';
2160
+        } elseif ( $overwrite['device_type'] == 'Desktop' ) {
2161
+            $device_size = '-lg';
2162
+        }
2163
+    }
2164
+    $options = array(
2165
+        '' => __('Default', 'ayecode-connect'),
2166
+        'w' . $device_size . '-25' => '25%',
2167
+        'w' . $device_size . '-50' => '50%',
2168
+        'w' . $device_size . '-75' => '75%',
2169
+        'w' . $device_size . '-100' => '100%',
2170
+        'w' . $device_size . '-auto' => 'auto',
2171
+    );
2172
+
2173
+    $defaults = array(
2174
+        'type'     => 'select',
2175
+        'title'    => __( 'Width', 'ayecode-connect' ),
2176
+        'options'  => $options,
2177
+        'default'  => '',
2178
+        'desc_tip' => true,
2179
+        'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
2180
+    );
2181
+
2182
+    $input = wp_parse_args( $overwrite, $defaults );
2183
+
2184
+    return $input;
2185 2185
 }
2186 2186
 
2187 2187
 /**
@@ -2194,35 +2194,35 @@  discard block
 block discarded – undo
2194 2194
  */
2195 2195
 function sd_get_height_input( $type = 'height', $overwrite = array() ) {
2196 2196
 
2197
-	$device_size = '';
2198
-	if ( ! empty( $overwrite['device_type'] ) ) {
2199
-		if ( $overwrite['device_type'] == 'Tablet' ) {
2200
-			$device_size = '-md';
2201
-		} elseif ( $overwrite['device_type'] == 'Desktop' ) {
2202
-			$device_size = '-lg';
2203
-		}
2204
-	}
2205
-	$options = array(
2206
-		'' => __('Default', 'ayecode-connect'),
2207
-		'h' . $device_size . '-25' => '25%',
2208
-		'h' . $device_size . '-50' => '50%',
2209
-		'h' . $device_size . '-75' => '75%',
2210
-		'h' . $device_size . '-100' => '100%',
2211
-		'h' . $device_size . '-auto' => 'auto',
2212
-	);
2213
-
2214
-	$defaults = array(
2215
-		'type'     => 'select',
2216
-		'title'    => __( 'Height', 'ayecode-connect' ),
2217
-		'options'  => $options,
2218
-		'default'  => '',
2219
-		'desc_tip' => true,
2220
-		'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
2221
-	);
2222
-
2223
-	$input = wp_parse_args( $overwrite, $defaults );
2224
-
2225
-	return $input;
2197
+    $device_size = '';
2198
+    if ( ! empty( $overwrite['device_type'] ) ) {
2199
+        if ( $overwrite['device_type'] == 'Tablet' ) {
2200
+            $device_size = '-md';
2201
+        } elseif ( $overwrite['device_type'] == 'Desktop' ) {
2202
+            $device_size = '-lg';
2203
+        }
2204
+    }
2205
+    $options = array(
2206
+        '' => __('Default', 'ayecode-connect'),
2207
+        'h' . $device_size . '-25' => '25%',
2208
+        'h' . $device_size . '-50' => '50%',
2209
+        'h' . $device_size . '-75' => '75%',
2210
+        'h' . $device_size . '-100' => '100%',
2211
+        'h' . $device_size . '-auto' => 'auto',
2212
+    );
2213
+
2214
+    $defaults = array(
2215
+        'type'     => 'select',
2216
+        'title'    => __( 'Height', 'ayecode-connect' ),
2217
+        'options'  => $options,
2218
+        'default'  => '',
2219
+        'desc_tip' => true,
2220
+        'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
2221
+    );
2222
+
2223
+    $input = wp_parse_args( $overwrite, $defaults );
2224
+
2225
+    return $input;
2226 2226
 }
2227 2227
 
2228 2228
 /**
@@ -2233,19 +2233,19 @@  discard block
 block discarded – undo
2233 2233
  */
2234 2234
 function sd_get_attributes_input( $type = 'attributes', $overwrite = array() ) {
2235 2235
 
2236
-	$defaults = array(
2237
-		'type'        => 'text',
2238
-		'title'       => __( 'Custom Attributes', 'ayecode-connect' ),
2239
-		'value'       => '',
2240
-		'default'     => '',
2241
-		'placeholder' => 'key|value,key2|value2',
2242
-		'desc_tip'    => true,
2243
-		'group'       => __( 'Link', 'ayecode-connect' ),
2244
-	);
2236
+    $defaults = array(
2237
+        'type'        => 'text',
2238
+        'title'       => __( 'Custom Attributes', 'ayecode-connect' ),
2239
+        'value'       => '',
2240
+        'default'     => '',
2241
+        'placeholder' => 'key|value,key2|value2',
2242
+        'desc_tip'    => true,
2243
+        'group'       => __( 'Link', 'ayecode-connect' ),
2244
+    );
2245 2245
 
2246
-	$input = wp_parse_args( $overwrite, $defaults );
2246
+    $input = wp_parse_args( $overwrite, $defaults );
2247 2247
 
2248
-	return $input;
2248
+    return $input;
2249 2249
 }
2250 2250
 
2251 2251
 /**
@@ -2254,32 +2254,32 @@  discard block
 block discarded – undo
2254 2254
  * @return string
2255 2255
  */
2256 2256
 function sd_build_attributes_string_escaped( $args ) {
2257
-	global $aui_bs5;
2257
+    global $aui_bs5;
2258 2258
 
2259
-	$attributes = array();
2260
-	$string_escaped = '';
2259
+    $attributes = array();
2260
+    $string_escaped = '';
2261 2261
 
2262
-	if ( ! empty( $args['custom'] ) ) {
2263
-		$attributes = sd_parse_custom_attributes($args['custom']);
2264
-	}
2262
+    if ( ! empty( $args['custom'] ) ) {
2263
+        $attributes = sd_parse_custom_attributes($args['custom']);
2264
+    }
2265 2265
 
2266
-	// new window
2267
-	if ( ! empty( $args['new_window'] ) ) {
2268
-		$attributes['target'] = '_blank';
2269
-	}
2266
+    // new window
2267
+    if ( ! empty( $args['new_window'] ) ) {
2268
+        $attributes['target'] = '_blank';
2269
+    }
2270 2270
 
2271
-	// nofollow
2272
-	if ( ! empty( $args['nofollow'] ) ) {
2273
-		$attributes['rel'] = isset($attributes['rel']) ? $attributes['rel'] . ' nofollow' : 'nofollow';
2274
-	}
2271
+    // nofollow
2272
+    if ( ! empty( $args['nofollow'] ) ) {
2273
+        $attributes['rel'] = isset($attributes['rel']) ? $attributes['rel'] . ' nofollow' : 'nofollow';
2274
+    }
2275 2275
 
2276
-	if(!empty($attributes )){
2277
-		foreach ( $attributes as $key => $val ) {
2278
-			$string_escaped .= esc_attr($key) . '="' . esc_attr($val) . '" ';
2279
-		}
2280
-	}
2276
+    if(!empty($attributes )){
2277
+        foreach ( $attributes as $key => $val ) {
2278
+            $string_escaped .= esc_attr($key) . '="' . esc_attr($val) . '" ';
2279
+        }
2280
+    }
2281 2281
 
2282
-	return $string_escaped;
2282
+    return $string_escaped;
2283 2283
 }
2284 2284
 
2285 2285
 /**
@@ -2291,38 +2291,38 @@  discard block
 block discarded – undo
2291 2291
  * @return array
2292 2292
  */
2293 2293
 function sd_parse_custom_attributes( $attributes_string, $delimiter = ',' ) {
2294
-	$attributes = explode( $delimiter, $attributes_string );
2295
-	$result = [];
2294
+    $attributes = explode( $delimiter, $attributes_string );
2295
+    $result = [];
2296 2296
 
2297
-	foreach ( $attributes as $attribute ) {
2298
-		$attr_key_value = explode( '|', $attribute );
2297
+    foreach ( $attributes as $attribute ) {
2298
+        $attr_key_value = explode( '|', $attribute );
2299 2299
 
2300
-		$attr_key = mb_strtolower( $attr_key_value[0] );
2300
+        $attr_key = mb_strtolower( $attr_key_value[0] );
2301 2301
 
2302
-		// Remove any not allowed characters.
2303
-		preg_match( '/[-_a-z0-9]+/', $attr_key, $attr_key_matches );
2302
+        // Remove any not allowed characters.
2303
+        preg_match( '/[-_a-z0-9]+/', $attr_key, $attr_key_matches );
2304 2304
 
2305
-		if ( empty( $attr_key_matches[0] ) ) {
2306
-			continue;
2307
-		}
2305
+        if ( empty( $attr_key_matches[0] ) ) {
2306
+            continue;
2307
+        }
2308 2308
 
2309
-		$attr_key = $attr_key_matches[0];
2309
+        $attr_key = $attr_key_matches[0];
2310 2310
 
2311
-		// Avoid Javascript events and unescaped href.
2312
-		if ( 'href' === $attr_key || 'on' === substr( $attr_key, 0, 2 ) ) {
2313
-			continue;
2314
-		}
2311
+        // Avoid Javascript events and unescaped href.
2312
+        if ( 'href' === $attr_key || 'on' === substr( $attr_key, 0, 2 ) ) {
2313
+            continue;
2314
+        }
2315 2315
 
2316
-		if ( isset( $attr_key_value[1] ) ) {
2317
-			$attr_value = trim( $attr_key_value[1] );
2318
-		} else {
2319
-			$attr_value = '';
2320
-		}
2316
+        if ( isset( $attr_key_value[1] ) ) {
2317
+            $attr_value = trim( $attr_key_value[1] );
2318
+        } else {
2319
+            $attr_value = '';
2320
+        }
2321 2321
 
2322
-		$result[ $attr_key ] = $attr_value;
2323
-	}
2322
+        $result[ $attr_key ] = $attr_value;
2323
+    }
2324 2324
 
2325
-	return $result;
2325
+    return $result;
2326 2326
 }
2327 2327
 
2328 2328
 /**
@@ -2334,424 +2334,424 @@  discard block
 block discarded – undo
2334 2334
  * @todo find best way to use px- py- or general p-
2335 2335
  */
2336 2336
 function sd_build_aui_class( $args ) {
2337
-	global $aui_bs5;
2338
-
2339
-	$classes = array();
2340
-
2341
-	if ( $aui_bs5 ) {
2342
-		$p_ml = 'ms-';
2343
-		$p_mr = 'me-';
2344
-
2345
-		$p_pl = 'ps-';
2346
-		$p_pr = 'pe-';
2347
-	} else {
2348
-		$p_ml = 'ml-';
2349
-		$p_mr = 'mr-';
2350
-
2351
-		$p_pl = 'pl-';
2352
-		$p_pr = 'pr-';
2353
-	}
2354
-
2355
-	// margins.
2356
-	if ( isset( $args['mt'] ) && $args['mt'] !== '' ) {
2357
-		$classes[] = 'mt-' . sanitize_html_class( $args['mt'] );
2358
-		$mt        = $args['mt'];
2359
-	} else {
2360
-		$mt = null;
2361
-	}
2362
-	if ( isset( $args['mr'] ) && $args['mr'] !== '' ) {
2363
-		$classes[] = $p_mr . sanitize_html_class( $args['mr'] );
2364
-		$mr        = $args['mr'];
2365
-	} else {
2366
-		$mr = null;
2367
-	}
2368
-	if ( isset( $args['mb'] ) && $args['mb'] !== '' ) {
2369
-		$classes[] = 'mb-' . sanitize_html_class( $args['mb'] );
2370
-		$mb        = $args['mb'];
2371
-	} else {
2372
-		$mb = null;
2373
-	}
2374
-	if ( isset( $args['ml'] ) && $args['ml'] !== '' ) {
2375
-		$classes[] = $p_ml . sanitize_html_class( $args['ml'] );
2376
-		$ml        = $args['ml'];
2377
-	} else {
2378
-		$ml = null;
2379
-	}
2380
-
2381
-	// margins tablet.
2382
-	if ( isset( $args['mt_md'] ) && $args['mt_md'] !== '' ) {
2383
-		$classes[] = 'mt-md-' . sanitize_html_class( $args['mt_md'] );
2384
-		$mt_md     = $args['mt_md'];
2385
-	} else {
2386
-		$mt_md = null;
2387
-	}
2388
-	if ( isset( $args['mr_md'] ) && $args['mr_md'] !== '' ) {
2389
-		$classes[] = $p_mr . 'md-' . sanitize_html_class( $args['mr_md'] );
2390
-		$mt_md     = $args['mr_md'];
2391
-	} else {
2392
-		$mr_md = null;
2393
-	}
2394
-	if ( isset( $args['mb_md'] ) && $args['mb_md'] !== '' ) {
2395
-		$classes[] = 'mb-md-' . sanitize_html_class( $args['mb_md'] );
2396
-		$mt_md     = $args['mb_md'];
2397
-	} else {
2398
-		$mb_md = null;
2399
-	}
2400
-	if ( isset( $args['ml_md'] ) && $args['ml_md'] !== '' ) {
2401
-		$classes[] = $p_ml . 'md-' . sanitize_html_class( $args['ml_md'] );
2402
-		$mt_md     = $args['ml_md'];
2403
-	} else {
2404
-		$ml_md = null;
2405
-	}
2406
-
2407
-	// margins desktop.
2408
-	if ( isset( $args['mt_lg'] ) && $args['mt_lg'] !== '' ) {
2409
-		if ( $mt == null && $mt_md == null ) {
2410
-			$classes[] = 'mt-' . sanitize_html_class( $args['mt_lg'] );
2411
-		} else {
2412
-			$classes[] = 'mt-lg-' . sanitize_html_class( $args['mt_lg'] );
2413
-		}
2414
-	}
2415
-	if ( isset( $args['mr_lg'] ) && $args['mr_lg'] !== '' ) {
2416
-		if ( $mr == null && $mr_md == null ) {
2417
-			$classes[] = $p_mr . sanitize_html_class( $args['mr_lg'] );
2418
-		} else {
2419
-			$classes[] = $p_mr . 'lg-' . sanitize_html_class( $args['mr_lg'] );
2420
-		}
2421
-	}
2422
-	if ( isset( $args['mb_lg'] ) && $args['mb_lg'] !== '' ) {
2423
-		if ( $mb == null && $mb_md == null ) {
2424
-			$classes[] = 'mb-' . sanitize_html_class( $args['mb_lg'] );
2425
-		} else {
2426
-			$classes[] = 'mb-lg-' . sanitize_html_class( $args['mb_lg'] );
2427
-		}
2428
-	}
2429
-	if ( isset( $args['ml_lg'] ) && $args['ml_lg'] !== '' ) {
2430
-		if ( $ml == null && $ml_md == null ) {
2431
-			$classes[] = $p_ml . sanitize_html_class( $args['ml_lg'] );
2432
-		} else {
2433
-			$classes[] = $p_ml . 'lg-' . sanitize_html_class( $args['ml_lg'] );
2434
-		}
2435
-	}
2436
-
2437
-	// padding.
2438
-	if ( isset( $args['pt'] ) && $args['pt'] !== '' ) {
2439
-		$classes[] = 'pt-' . sanitize_html_class( $args['pt'] );
2440
-		$pt        = $args['pt'];
2441
-	} else {
2442
-		$pt = null;
2443
-	}
2444
-	if ( isset( $args['pr'] ) && $args['pr'] !== '' ) {
2445
-		$classes[] = $p_pr . sanitize_html_class( $args['pr'] );
2446
-		$pr        = $args['pr'];
2447
-	} else {
2448
-		$pr = null;
2449
-	}
2450
-	if ( isset( $args['pb'] ) && $args['pb'] !== '' ) {
2451
-		$classes[] = 'pb-' . sanitize_html_class( $args['pb'] );
2452
-		$pb        = $args['pb'];
2453
-	} else {
2454
-		$pb = null;
2455
-	}
2456
-	if ( isset( $args['pl'] ) && $args['pl'] !== '' ) {
2457
-		$classes[] = $p_pl . sanitize_html_class( $args['pl'] );
2458
-		$pl        = $args['pl'];
2459
-	} else {
2460
-		$pl = null;
2461
-	}
2462
-
2463
-	// padding tablet.
2464
-	if ( isset( $args['pt_md'] ) && $args['pt_md'] !== '' ) {
2465
-		$classes[] = 'pt-md-' . sanitize_html_class( $args['pt_md'] );
2466
-		$pt_md     = $args['pt_md'];
2467
-	} else {
2468
-		$pt_md = null;
2469
-	}
2470
-	if ( isset( $args['pr_md'] ) && $args['pr_md'] !== '' ) {
2471
-		$classes[] = $p_pr . 'md-' . sanitize_html_class( $args['pr_md'] );
2472
-		$pr_md     = $args['pr_md'];
2473
-	} else {
2474
-		$pr_md = null;
2475
-	}
2476
-	if ( isset( $args['pb_md'] ) && $args['pb_md'] !== '' ) {
2477
-		$classes[] = 'pb-md-' . sanitize_html_class( $args['pb_md'] );
2478
-		$pb_md     = $args['pb_md'];
2479
-	} else {
2480
-		$pb_md = null;
2481
-	}
2482
-	if ( isset( $args['pl_md'] ) && $args['pl_md'] !== '' ) {
2483
-		$classes[] = $p_pl . 'md-' . sanitize_html_class( $args['pl_md'] );
2484
-		$pl_md     = $args['pl_md'];
2485
-	} else {
2486
-		$pl_md = null;
2487
-	}
2488
-
2489
-	// padding desktop.
2490
-	if ( isset( $args['pt_lg'] ) && $args['pt_lg'] !== '' ) {
2491
-		if ( $pt == null && $pt_md == null ) {
2492
-			$classes[] = 'pt-' . sanitize_html_class( $args['pt_lg'] );
2493
-		} else {
2494
-			$classes[] = 'pt-lg-' . sanitize_html_class( $args['pt_lg'] );
2495
-		}
2496
-	}
2497
-	if ( isset( $args['pr_lg'] ) && $args['pr_lg'] !== '' ) {
2498
-		if ( $pr == null && $pr_md == null ) {
2499
-			$classes[] = $p_pr . sanitize_html_class( $args['pr_lg'] );
2500
-		} else {
2501
-			$classes[] = $p_pr . 'lg-' . sanitize_html_class( $args['pr_lg'] );
2502
-		}
2503
-	}
2504
-	if ( isset( $args['pb_lg'] ) && $args['pb_lg'] !== '' ) {
2505
-		if ( $pb == null && $pb_md == null ) {
2506
-			$classes[] = 'pb-' . sanitize_html_class( $args['pb_lg'] );
2507
-		} else {
2508
-			$classes[] = 'pb-lg-' . sanitize_html_class( $args['pb_lg'] );
2509
-		}
2510
-	}
2511
-	if ( isset( $args['pl_lg'] ) && $args['pl_lg'] !== '' ) {
2512
-		if ( $pl == null && $pl_md == null ) {
2513
-			$classes[] = $p_pl . sanitize_html_class( $args['pl_lg'] );
2514
-		} else {
2515
-			$classes[] = $p_pl . 'lg-' . sanitize_html_class( $args['pl_lg'] );
2516
-		}
2517
-	}
2518
-
2519
-	// row cols, mobile, tablet, desktop
2520
-	if ( ! empty( $args['row_cols'] ) && $args['row_cols'] !== '' ) {
2521
-		$classes[] = sanitize_html_class( 'row-cols-' . $args['row_cols'] );
2522
-		$row_cols  = $args['row_cols'];
2523
-	} else {
2524
-		$row_cols = null;
2525
-	}
2526
-	if ( ! empty( $args['row_cols_md'] ) && $args['row_cols_md'] !== '' ) {
2527
-		$classes[]   = sanitize_html_class( 'row-cols-md-' . $args['row_cols_md'] );
2528
-		$row_cols_md = $args['row_cols_md'];
2529
-	} else {
2530
-		$row_cols_md = null;
2531
-	}
2532
-	if ( ! empty( $args['row_cols_lg'] ) && $args['row_cols_lg'] !== '' ) {
2533
-		if ( $row_cols == null && $row_cols_md == null ) {
2534
-			$classes[] = sanitize_html_class( 'row-cols-' . $args['row_cols_lg'] );
2535
-		} else {
2536
-			$classes[] = sanitize_html_class( 'row-cols-lg-' . $args['row_cols_lg'] );
2537
-		}
2538
-	}
2539
-
2540
-	// columns , mobile, tablet, desktop
2541
-	if ( ! empty( $args['col'] ) && $args['col'] !== '' ) {
2542
-		$classes[] = sanitize_html_class( 'col-' . $args['col'] );
2543
-		$col       = $args['col'];
2544
-	} else {
2545
-		$col = null;
2546
-	}
2547
-	if ( ! empty( $args['col_md'] ) && $args['col_md'] !== '' ) {
2548
-		$classes[] = sanitize_html_class( 'col-md-' . $args['col_md'] );
2549
-		$col_md    = $args['col_md'];
2550
-	} else {
2551
-		$col_md = null;
2552
-	}
2553
-	if ( ! empty( $args['col_lg'] ) && $args['col_lg'] !== '' ) {
2554
-		if ( $col == null && $col_md == null ) {
2555
-			$classes[] = sanitize_html_class( 'col-' . $args['col_lg'] );
2556
-		} else {
2557
-			$classes[] = sanitize_html_class( 'col-lg-' . $args['col_lg'] );
2558
-		}
2559
-	}
2560
-
2561
-	// border
2562
-	if ( isset( $args['border'] ) && ( $args['border'] == 'none' || $args['border'] === '0' || $args['border'] === 0 ) ) {
2563
-		$classes[] = 'border-0';
2564
-	} elseif ( ! empty( $args['border'] ) ) {
2565
-		$border_class = 'border';
2566
-		if ( ! empty( $args['border_type'] ) && strpos( $args['border_type'], '-0' ) === false ) {
2567
-			$border_class = '';
2568
-		}
2569
-		$classes[] = $border_class . ' border-' . sanitize_html_class( $args['border'] );
2570
-	}
2571
-
2572
-	// border radius type
2573
-	if ( ! empty( $args['rounded'] ) ) {
2574
-		$classes[] = sanitize_html_class( $args['rounded'] );
2575
-	}
2576
-
2577
-	// border radius size BS4
2578
-	if ( isset( $args['rounded_size'] ) && in_array( $args['rounded_size'], array( 'sm', 'lg' ) ) ) {
2579
-		$classes[] = 'rounded-' . sanitize_html_class( $args['rounded_size'] );
2580
-		// if we set a size then we need to remove "rounded" if set
2581
-		if ( ( $key = array_search( 'rounded', $classes ) ) !== false ) {
2582
-			unset( $classes[ $key ] );
2583
-		}
2584
-	} else {
2585
-
2586
-		// border radius size , mobile, tablet, desktop
2587
-		if ( isset( $args['rounded_size'] ) && $args['rounded_size'] !== '' ) {
2588
-			$classes[]    = sanitize_html_class( 'rounded-' . $args['rounded_size'] );
2589
-			$rounded_size = $args['rounded_size'];
2590
-		} else {
2591
-			$rounded_size = null;
2592
-		}
2593
-		if ( isset( $args['rounded_size_md'] ) && $args['rounded_size_md'] !== '' ) {
2594
-			$classes[]       = sanitize_html_class( 'rounded-md-' . $args['rounded_size_md'] );
2595
-			$rounded_size_md = $args['rounded_size_md'];
2596
-		} else {
2597
-			$rounded_size_md = null;
2598
-		}
2599
-		if ( isset( $args['rounded_size_lg'] ) && $args['rounded_size_lg'] !== '' ) {
2600
-			if ( $rounded_size == null && $rounded_size_md == null ) {
2601
-				$classes[] = sanitize_html_class( 'rounded-' . $args['rounded_size_lg'] );
2602
-			} else {
2603
-				$classes[] = sanitize_html_class( 'rounded-lg-' . $args['rounded_size_lg'] );
2604
-			}
2605
-		}
2606
-	}
2607
-
2608
-	// shadow
2609
-	//if ( !empty( $args['shadow'] ) ) { $classes[] = sanitize_html_class($args['shadow']); }
2610
-
2611
-	// background
2612
-	if ( ! empty( $args['bg'] ) ) {
2613
-		$classes[] = 'bg-' . sanitize_html_class( $args['bg'] );
2614
-	}
2615
-
2616
-	// background image fixed bg_image_fixed this helps fix a iOS bug
2617
-	if ( ! empty( $args['bg_image_fixed'] ) ) {
2618
-		$classes[] = 'bg-image-fixed';
2619
-	}
2620
-
2621
-	// text_color
2622
-	if ( ! empty( $args['text_color'] ) ) {
2623
-		$classes[] = 'text-' . sanitize_html_class( $args['text_color'] );
2624
-	}
2625
-
2626
-	// text_align
2627
-	if ( ! empty( $args['text_justify'] ) ) {
2628
-		$classes[] = 'text-justify';
2629
-	} else {
2630
-		if ( ! empty( $args['text_align'] ) ) {
2631
-			$classes[]  = sanitize_html_class( $args['text_align'] );
2632
-			$text_align = $args['text_align'];
2633
-		} else {
2634
-			$text_align = null;
2635
-		}
2636
-		if ( ! empty( $args['text_align_md'] ) && $args['text_align_md'] !== '' ) {
2637
-			$classes[]     = sanitize_html_class( $args['text_align_md'] );
2638
-			$text_align_md = $args['text_align_md'];
2639
-		} else {
2640
-			$text_align_md = null;
2641
-		}
2642
-		if ( ! empty( $args['text_align_lg'] ) && $args['text_align_lg'] !== '' ) {
2643
-			if ( $text_align == null && $text_align_md == null ) {
2644
-				$classes[] = sanitize_html_class( str_replace( '-lg', '', $args['text_align_lg'] ) );
2645
-			} else {
2646
-				$classes[] = sanitize_html_class( $args['text_align_lg'] );
2647
-			}
2648
-		}
2649
-	}
2650
-
2651
-	// display
2652
-	if ( ! empty( $args['display'] ) ) {
2653
-		$classes[] = sanitize_html_class( $args['display'] );
2654
-		$display   = $args['display'];
2655
-	} else {
2656
-		$display = null;
2657
-	}
2658
-	if ( ! empty( $args['display_md'] ) && $args['display_md'] !== '' ) {
2659
-		$classes[]  = sanitize_html_class( $args['display_md'] );
2660
-		$display_md = $args['display_md'];
2661
-	} else {
2662
-		$display_md = null;
2663
-	}
2664
-	if ( ! empty( $args['display_lg'] ) && $args['display_lg'] !== '' ) {
2665
-		if ( $display == null && $display_md == null ) {
2666
-			$classes[] = sanitize_html_class( str_replace( '-lg', '', $args['display_lg'] ) );
2667
-		} else {
2668
-			$classes[] = sanitize_html_class( $args['display_lg'] );
2669
-		}
2670
-	}
2671
-
2672
-	// bgtus - background transparent until scroll
2673
-	if ( ! empty( $args['bgtus'] ) ) {
2674
-		$classes[] = sanitize_html_class( 'bg-transparent-until-scroll' );
2675
-	}
2676
-
2677
-	// cscos - change color scheme on scroll
2678
-	if ( ! empty( $args['bgtus'] ) && ! empty( $args['cscos'] ) ) {
2679
-		$classes[] = sanitize_html_class( 'color-scheme-flip-on-scroll' );
2680
-	}
2681
-
2682
-	// hover animations
2683
-	if ( ! empty( $args['hover_animations'] ) ) {
2684
-		$classes[] = sd_sanitize_html_classes( str_replace( ',', ' ', $args['hover_animations'] ) );
2685
-	}
2686
-
2687
-	// absolute_position
2688
-	if ( ! empty( $args['absolute_position'] ) ) {
2689
-		if ( 'top-left' === $args['absolute_position'] ) {
2690
-			$classes[] = 'start-0 top-0';
2691
-		} elseif ( 'top-center' === $args['absolute_position'] ) {
2692
-			$classes[] = 'start-50 top-0 translate-middle';
2693
-		} elseif ( 'top-right' === $args['absolute_position'] ) {
2694
-			$classes[] = 'end-0 top-0';
2695
-		} elseif ( 'center-left' === $args['absolute_position'] ) {
2696
-			$classes[] = 'start-0 top-50';
2697
-		} elseif ( 'center' === $args['absolute_position'] ) {
2698
-			$classes[] = 'start-50 top-50 translate-middle';
2699
-		} elseif ( 'center-right' === $args['absolute_position'] ) {
2700
-			$classes[] = 'end-0 top-50';
2701
-		} elseif ( 'bottom-left' === $args['absolute_position'] ) {
2702
-			$classes[] = 'start-0 bottom-0';
2703
-		} elseif ( 'bottom-center' === $args['absolute_position'] ) {
2704
-			$classes[] = 'start-50 bottom-0 translate-middle';
2705
-		} elseif ( 'bottom-right' === $args['absolute_position'] ) {
2706
-			$classes[] = 'end-0 bottom-0';
2707
-		}
2708
-	}
2709
-
2710
-	// build classes from build keys
2711
-	$build_keys = sd_get_class_build_keys();
2712
-	if ( ! empty( $build_keys ) ) {
2713
-		foreach ( $build_keys as $key ) {
2714
-
2715
-			if ( substr( $key, -4 ) == '-MTD' ) {
2716
-
2717
-				$k = str_replace( '-MTD', '', $key );
2718
-
2719
-				// Mobile, Tablet, Desktop
2720
-				if ( ! empty( $args[ $k ] ) && $args[ $k ] !== '' ) {
2721
-					$classes[] = sanitize_html_class( $args[ $k ] );
2722
-					$v         = $args[ $k ];
2723
-				} else {
2724
-					$v = null;
2725
-				}
2726
-				if ( ! empty( $args[ $k . '_md' ] ) && $args[ $k . '_md' ] !== '' ) {
2727
-					$classes[] = sanitize_html_class( $args[ $k . '_md' ] );
2728
-					$v_md      = $args[ $k . '_md' ];
2729
-				} else {
2730
-					$v_md = null;
2731
-				}
2732
-				if ( ! empty( $args[ $k . '_lg' ] ) && $args[ $k . '_lg' ] !== '' ) {
2733
-					if ( $v == null && $v_md == null ) {
2734
-						$classes[] = sanitize_html_class( str_replace( '-lg', '', $args[ $k . '_lg' ] ) );
2735
-					} else {
2736
-						$classes[] = sanitize_html_class( $args[ $k . '_lg' ] );
2737
-					}
2738
-				}
2739
-			} else {
2740
-				if ( $key == 'font_size' && ! empty( $args[ $key ] ) && $args[ $key ] == 'custom' ) {
2741
-					continue;
2742
-				}
2743
-				if ( ! empty( $args[ $key ] ) ) {
2744
-					$classes[] = sd_sanitize_html_classes( $args[ $key ] );
2745
-				}
2746
-			}
2747
-		}
2748
-	}
2749
-
2750
-	if ( ! empty( $classes ) ) {
2751
-		$classes = array_unique( array_filter( array_map( 'trim', $classes ) ) );
2752
-	}
2753
-
2754
-	return implode( ' ', $classes );
2337
+    global $aui_bs5;
2338
+
2339
+    $classes = array();
2340
+
2341
+    if ( $aui_bs5 ) {
2342
+        $p_ml = 'ms-';
2343
+        $p_mr = 'me-';
2344
+
2345
+        $p_pl = 'ps-';
2346
+        $p_pr = 'pe-';
2347
+    } else {
2348
+        $p_ml = 'ml-';
2349
+        $p_mr = 'mr-';
2350
+
2351
+        $p_pl = 'pl-';
2352
+        $p_pr = 'pr-';
2353
+    }
2354
+
2355
+    // margins.
2356
+    if ( isset( $args['mt'] ) && $args['mt'] !== '' ) {
2357
+        $classes[] = 'mt-' . sanitize_html_class( $args['mt'] );
2358
+        $mt        = $args['mt'];
2359
+    } else {
2360
+        $mt = null;
2361
+    }
2362
+    if ( isset( $args['mr'] ) && $args['mr'] !== '' ) {
2363
+        $classes[] = $p_mr . sanitize_html_class( $args['mr'] );
2364
+        $mr        = $args['mr'];
2365
+    } else {
2366
+        $mr = null;
2367
+    }
2368
+    if ( isset( $args['mb'] ) && $args['mb'] !== '' ) {
2369
+        $classes[] = 'mb-' . sanitize_html_class( $args['mb'] );
2370
+        $mb        = $args['mb'];
2371
+    } else {
2372
+        $mb = null;
2373
+    }
2374
+    if ( isset( $args['ml'] ) && $args['ml'] !== '' ) {
2375
+        $classes[] = $p_ml . sanitize_html_class( $args['ml'] );
2376
+        $ml        = $args['ml'];
2377
+    } else {
2378
+        $ml = null;
2379
+    }
2380
+
2381
+    // margins tablet.
2382
+    if ( isset( $args['mt_md'] ) && $args['mt_md'] !== '' ) {
2383
+        $classes[] = 'mt-md-' . sanitize_html_class( $args['mt_md'] );
2384
+        $mt_md     = $args['mt_md'];
2385
+    } else {
2386
+        $mt_md = null;
2387
+    }
2388
+    if ( isset( $args['mr_md'] ) && $args['mr_md'] !== '' ) {
2389
+        $classes[] = $p_mr . 'md-' . sanitize_html_class( $args['mr_md'] );
2390
+        $mt_md     = $args['mr_md'];
2391
+    } else {
2392
+        $mr_md = null;
2393
+    }
2394
+    if ( isset( $args['mb_md'] ) && $args['mb_md'] !== '' ) {
2395
+        $classes[] = 'mb-md-' . sanitize_html_class( $args['mb_md'] );
2396
+        $mt_md     = $args['mb_md'];
2397
+    } else {
2398
+        $mb_md = null;
2399
+    }
2400
+    if ( isset( $args['ml_md'] ) && $args['ml_md'] !== '' ) {
2401
+        $classes[] = $p_ml . 'md-' . sanitize_html_class( $args['ml_md'] );
2402
+        $mt_md     = $args['ml_md'];
2403
+    } else {
2404
+        $ml_md = null;
2405
+    }
2406
+
2407
+    // margins desktop.
2408
+    if ( isset( $args['mt_lg'] ) && $args['mt_lg'] !== '' ) {
2409
+        if ( $mt == null && $mt_md == null ) {
2410
+            $classes[] = 'mt-' . sanitize_html_class( $args['mt_lg'] );
2411
+        } else {
2412
+            $classes[] = 'mt-lg-' . sanitize_html_class( $args['mt_lg'] );
2413
+        }
2414
+    }
2415
+    if ( isset( $args['mr_lg'] ) && $args['mr_lg'] !== '' ) {
2416
+        if ( $mr == null && $mr_md == null ) {
2417
+            $classes[] = $p_mr . sanitize_html_class( $args['mr_lg'] );
2418
+        } else {
2419
+            $classes[] = $p_mr . 'lg-' . sanitize_html_class( $args['mr_lg'] );
2420
+        }
2421
+    }
2422
+    if ( isset( $args['mb_lg'] ) && $args['mb_lg'] !== '' ) {
2423
+        if ( $mb == null && $mb_md == null ) {
2424
+            $classes[] = 'mb-' . sanitize_html_class( $args['mb_lg'] );
2425
+        } else {
2426
+            $classes[] = 'mb-lg-' . sanitize_html_class( $args['mb_lg'] );
2427
+        }
2428
+    }
2429
+    if ( isset( $args['ml_lg'] ) && $args['ml_lg'] !== '' ) {
2430
+        if ( $ml == null && $ml_md == null ) {
2431
+            $classes[] = $p_ml . sanitize_html_class( $args['ml_lg'] );
2432
+        } else {
2433
+            $classes[] = $p_ml . 'lg-' . sanitize_html_class( $args['ml_lg'] );
2434
+        }
2435
+    }
2436
+
2437
+    // padding.
2438
+    if ( isset( $args['pt'] ) && $args['pt'] !== '' ) {
2439
+        $classes[] = 'pt-' . sanitize_html_class( $args['pt'] );
2440
+        $pt        = $args['pt'];
2441
+    } else {
2442
+        $pt = null;
2443
+    }
2444
+    if ( isset( $args['pr'] ) && $args['pr'] !== '' ) {
2445
+        $classes[] = $p_pr . sanitize_html_class( $args['pr'] );
2446
+        $pr        = $args['pr'];
2447
+    } else {
2448
+        $pr = null;
2449
+    }
2450
+    if ( isset( $args['pb'] ) && $args['pb'] !== '' ) {
2451
+        $classes[] = 'pb-' . sanitize_html_class( $args['pb'] );
2452
+        $pb        = $args['pb'];
2453
+    } else {
2454
+        $pb = null;
2455
+    }
2456
+    if ( isset( $args['pl'] ) && $args['pl'] !== '' ) {
2457
+        $classes[] = $p_pl . sanitize_html_class( $args['pl'] );
2458
+        $pl        = $args['pl'];
2459
+    } else {
2460
+        $pl = null;
2461
+    }
2462
+
2463
+    // padding tablet.
2464
+    if ( isset( $args['pt_md'] ) && $args['pt_md'] !== '' ) {
2465
+        $classes[] = 'pt-md-' . sanitize_html_class( $args['pt_md'] );
2466
+        $pt_md     = $args['pt_md'];
2467
+    } else {
2468
+        $pt_md = null;
2469
+    }
2470
+    if ( isset( $args['pr_md'] ) && $args['pr_md'] !== '' ) {
2471
+        $classes[] = $p_pr . 'md-' . sanitize_html_class( $args['pr_md'] );
2472
+        $pr_md     = $args['pr_md'];
2473
+    } else {
2474
+        $pr_md = null;
2475
+    }
2476
+    if ( isset( $args['pb_md'] ) && $args['pb_md'] !== '' ) {
2477
+        $classes[] = 'pb-md-' . sanitize_html_class( $args['pb_md'] );
2478
+        $pb_md     = $args['pb_md'];
2479
+    } else {
2480
+        $pb_md = null;
2481
+    }
2482
+    if ( isset( $args['pl_md'] ) && $args['pl_md'] !== '' ) {
2483
+        $classes[] = $p_pl . 'md-' . sanitize_html_class( $args['pl_md'] );
2484
+        $pl_md     = $args['pl_md'];
2485
+    } else {
2486
+        $pl_md = null;
2487
+    }
2488
+
2489
+    // padding desktop.
2490
+    if ( isset( $args['pt_lg'] ) && $args['pt_lg'] !== '' ) {
2491
+        if ( $pt == null && $pt_md == null ) {
2492
+            $classes[] = 'pt-' . sanitize_html_class( $args['pt_lg'] );
2493
+        } else {
2494
+            $classes[] = 'pt-lg-' . sanitize_html_class( $args['pt_lg'] );
2495
+        }
2496
+    }
2497
+    if ( isset( $args['pr_lg'] ) && $args['pr_lg'] !== '' ) {
2498
+        if ( $pr == null && $pr_md == null ) {
2499
+            $classes[] = $p_pr . sanitize_html_class( $args['pr_lg'] );
2500
+        } else {
2501
+            $classes[] = $p_pr . 'lg-' . sanitize_html_class( $args['pr_lg'] );
2502
+        }
2503
+    }
2504
+    if ( isset( $args['pb_lg'] ) && $args['pb_lg'] !== '' ) {
2505
+        if ( $pb == null && $pb_md == null ) {
2506
+            $classes[] = 'pb-' . sanitize_html_class( $args['pb_lg'] );
2507
+        } else {
2508
+            $classes[] = 'pb-lg-' . sanitize_html_class( $args['pb_lg'] );
2509
+        }
2510
+    }
2511
+    if ( isset( $args['pl_lg'] ) && $args['pl_lg'] !== '' ) {
2512
+        if ( $pl == null && $pl_md == null ) {
2513
+            $classes[] = $p_pl . sanitize_html_class( $args['pl_lg'] );
2514
+        } else {
2515
+            $classes[] = $p_pl . 'lg-' . sanitize_html_class( $args['pl_lg'] );
2516
+        }
2517
+    }
2518
+
2519
+    // row cols, mobile, tablet, desktop
2520
+    if ( ! empty( $args['row_cols'] ) && $args['row_cols'] !== '' ) {
2521
+        $classes[] = sanitize_html_class( 'row-cols-' . $args['row_cols'] );
2522
+        $row_cols  = $args['row_cols'];
2523
+    } else {
2524
+        $row_cols = null;
2525
+    }
2526
+    if ( ! empty( $args['row_cols_md'] ) && $args['row_cols_md'] !== '' ) {
2527
+        $classes[]   = sanitize_html_class( 'row-cols-md-' . $args['row_cols_md'] );
2528
+        $row_cols_md = $args['row_cols_md'];
2529
+    } else {
2530
+        $row_cols_md = null;
2531
+    }
2532
+    if ( ! empty( $args['row_cols_lg'] ) && $args['row_cols_lg'] !== '' ) {
2533
+        if ( $row_cols == null && $row_cols_md == null ) {
2534
+            $classes[] = sanitize_html_class( 'row-cols-' . $args['row_cols_lg'] );
2535
+        } else {
2536
+            $classes[] = sanitize_html_class( 'row-cols-lg-' . $args['row_cols_lg'] );
2537
+        }
2538
+    }
2539
+
2540
+    // columns , mobile, tablet, desktop
2541
+    if ( ! empty( $args['col'] ) && $args['col'] !== '' ) {
2542
+        $classes[] = sanitize_html_class( 'col-' . $args['col'] );
2543
+        $col       = $args['col'];
2544
+    } else {
2545
+        $col = null;
2546
+    }
2547
+    if ( ! empty( $args['col_md'] ) && $args['col_md'] !== '' ) {
2548
+        $classes[] = sanitize_html_class( 'col-md-' . $args['col_md'] );
2549
+        $col_md    = $args['col_md'];
2550
+    } else {
2551
+        $col_md = null;
2552
+    }
2553
+    if ( ! empty( $args['col_lg'] ) && $args['col_lg'] !== '' ) {
2554
+        if ( $col == null && $col_md == null ) {
2555
+            $classes[] = sanitize_html_class( 'col-' . $args['col_lg'] );
2556
+        } else {
2557
+            $classes[] = sanitize_html_class( 'col-lg-' . $args['col_lg'] );
2558
+        }
2559
+    }
2560
+
2561
+    // border
2562
+    if ( isset( $args['border'] ) && ( $args['border'] == 'none' || $args['border'] === '0' || $args['border'] === 0 ) ) {
2563
+        $classes[] = 'border-0';
2564
+    } elseif ( ! empty( $args['border'] ) ) {
2565
+        $border_class = 'border';
2566
+        if ( ! empty( $args['border_type'] ) && strpos( $args['border_type'], '-0' ) === false ) {
2567
+            $border_class = '';
2568
+        }
2569
+        $classes[] = $border_class . ' border-' . sanitize_html_class( $args['border'] );
2570
+    }
2571
+
2572
+    // border radius type
2573
+    if ( ! empty( $args['rounded'] ) ) {
2574
+        $classes[] = sanitize_html_class( $args['rounded'] );
2575
+    }
2576
+
2577
+    // border radius size BS4
2578
+    if ( isset( $args['rounded_size'] ) && in_array( $args['rounded_size'], array( 'sm', 'lg' ) ) ) {
2579
+        $classes[] = 'rounded-' . sanitize_html_class( $args['rounded_size'] );
2580
+        // if we set a size then we need to remove "rounded" if set
2581
+        if ( ( $key = array_search( 'rounded', $classes ) ) !== false ) {
2582
+            unset( $classes[ $key ] );
2583
+        }
2584
+    } else {
2585
+
2586
+        // border radius size , mobile, tablet, desktop
2587
+        if ( isset( $args['rounded_size'] ) && $args['rounded_size'] !== '' ) {
2588
+            $classes[]    = sanitize_html_class( 'rounded-' . $args['rounded_size'] );
2589
+            $rounded_size = $args['rounded_size'];
2590
+        } else {
2591
+            $rounded_size = null;
2592
+        }
2593
+        if ( isset( $args['rounded_size_md'] ) && $args['rounded_size_md'] !== '' ) {
2594
+            $classes[]       = sanitize_html_class( 'rounded-md-' . $args['rounded_size_md'] );
2595
+            $rounded_size_md = $args['rounded_size_md'];
2596
+        } else {
2597
+            $rounded_size_md = null;
2598
+        }
2599
+        if ( isset( $args['rounded_size_lg'] ) && $args['rounded_size_lg'] !== '' ) {
2600
+            if ( $rounded_size == null && $rounded_size_md == null ) {
2601
+                $classes[] = sanitize_html_class( 'rounded-' . $args['rounded_size_lg'] );
2602
+            } else {
2603
+                $classes[] = sanitize_html_class( 'rounded-lg-' . $args['rounded_size_lg'] );
2604
+            }
2605
+        }
2606
+    }
2607
+
2608
+    // shadow
2609
+    //if ( !empty( $args['shadow'] ) ) { $classes[] = sanitize_html_class($args['shadow']); }
2610
+
2611
+    // background
2612
+    if ( ! empty( $args['bg'] ) ) {
2613
+        $classes[] = 'bg-' . sanitize_html_class( $args['bg'] );
2614
+    }
2615
+
2616
+    // background image fixed bg_image_fixed this helps fix a iOS bug
2617
+    if ( ! empty( $args['bg_image_fixed'] ) ) {
2618
+        $classes[] = 'bg-image-fixed';
2619
+    }
2620
+
2621
+    // text_color
2622
+    if ( ! empty( $args['text_color'] ) ) {
2623
+        $classes[] = 'text-' . sanitize_html_class( $args['text_color'] );
2624
+    }
2625
+
2626
+    // text_align
2627
+    if ( ! empty( $args['text_justify'] ) ) {
2628
+        $classes[] = 'text-justify';
2629
+    } else {
2630
+        if ( ! empty( $args['text_align'] ) ) {
2631
+            $classes[]  = sanitize_html_class( $args['text_align'] );
2632
+            $text_align = $args['text_align'];
2633
+        } else {
2634
+            $text_align = null;
2635
+        }
2636
+        if ( ! empty( $args['text_align_md'] ) && $args['text_align_md'] !== '' ) {
2637
+            $classes[]     = sanitize_html_class( $args['text_align_md'] );
2638
+            $text_align_md = $args['text_align_md'];
2639
+        } else {
2640
+            $text_align_md = null;
2641
+        }
2642
+        if ( ! empty( $args['text_align_lg'] ) && $args['text_align_lg'] !== '' ) {
2643
+            if ( $text_align == null && $text_align_md == null ) {
2644
+                $classes[] = sanitize_html_class( str_replace( '-lg', '', $args['text_align_lg'] ) );
2645
+            } else {
2646
+                $classes[] = sanitize_html_class( $args['text_align_lg'] );
2647
+            }
2648
+        }
2649
+    }
2650
+
2651
+    // display
2652
+    if ( ! empty( $args['display'] ) ) {
2653
+        $classes[] = sanitize_html_class( $args['display'] );
2654
+        $display   = $args['display'];
2655
+    } else {
2656
+        $display = null;
2657
+    }
2658
+    if ( ! empty( $args['display_md'] ) && $args['display_md'] !== '' ) {
2659
+        $classes[]  = sanitize_html_class( $args['display_md'] );
2660
+        $display_md = $args['display_md'];
2661
+    } else {
2662
+        $display_md = null;
2663
+    }
2664
+    if ( ! empty( $args['display_lg'] ) && $args['display_lg'] !== '' ) {
2665
+        if ( $display == null && $display_md == null ) {
2666
+            $classes[] = sanitize_html_class( str_replace( '-lg', '', $args['display_lg'] ) );
2667
+        } else {
2668
+            $classes[] = sanitize_html_class( $args['display_lg'] );
2669
+        }
2670
+    }
2671
+
2672
+    // bgtus - background transparent until scroll
2673
+    if ( ! empty( $args['bgtus'] ) ) {
2674
+        $classes[] = sanitize_html_class( 'bg-transparent-until-scroll' );
2675
+    }
2676
+
2677
+    // cscos - change color scheme on scroll
2678
+    if ( ! empty( $args['bgtus'] ) && ! empty( $args['cscos'] ) ) {
2679
+        $classes[] = sanitize_html_class( 'color-scheme-flip-on-scroll' );
2680
+    }
2681
+
2682
+    // hover animations
2683
+    if ( ! empty( $args['hover_animations'] ) ) {
2684
+        $classes[] = sd_sanitize_html_classes( str_replace( ',', ' ', $args['hover_animations'] ) );
2685
+    }
2686
+
2687
+    // absolute_position
2688
+    if ( ! empty( $args['absolute_position'] ) ) {
2689
+        if ( 'top-left' === $args['absolute_position'] ) {
2690
+            $classes[] = 'start-0 top-0';
2691
+        } elseif ( 'top-center' === $args['absolute_position'] ) {
2692
+            $classes[] = 'start-50 top-0 translate-middle';
2693
+        } elseif ( 'top-right' === $args['absolute_position'] ) {
2694
+            $classes[] = 'end-0 top-0';
2695
+        } elseif ( 'center-left' === $args['absolute_position'] ) {
2696
+            $classes[] = 'start-0 top-50';
2697
+        } elseif ( 'center' === $args['absolute_position'] ) {
2698
+            $classes[] = 'start-50 top-50 translate-middle';
2699
+        } elseif ( 'center-right' === $args['absolute_position'] ) {
2700
+            $classes[] = 'end-0 top-50';
2701
+        } elseif ( 'bottom-left' === $args['absolute_position'] ) {
2702
+            $classes[] = 'start-0 bottom-0';
2703
+        } elseif ( 'bottom-center' === $args['absolute_position'] ) {
2704
+            $classes[] = 'start-50 bottom-0 translate-middle';
2705
+        } elseif ( 'bottom-right' === $args['absolute_position'] ) {
2706
+            $classes[] = 'end-0 bottom-0';
2707
+        }
2708
+    }
2709
+
2710
+    // build classes from build keys
2711
+    $build_keys = sd_get_class_build_keys();
2712
+    if ( ! empty( $build_keys ) ) {
2713
+        foreach ( $build_keys as $key ) {
2714
+
2715
+            if ( substr( $key, -4 ) == '-MTD' ) {
2716
+
2717
+                $k = str_replace( '-MTD', '', $key );
2718
+
2719
+                // Mobile, Tablet, Desktop
2720
+                if ( ! empty( $args[ $k ] ) && $args[ $k ] !== '' ) {
2721
+                    $classes[] = sanitize_html_class( $args[ $k ] );
2722
+                    $v         = $args[ $k ];
2723
+                } else {
2724
+                    $v = null;
2725
+                }
2726
+                if ( ! empty( $args[ $k . '_md' ] ) && $args[ $k . '_md' ] !== '' ) {
2727
+                    $classes[] = sanitize_html_class( $args[ $k . '_md' ] );
2728
+                    $v_md      = $args[ $k . '_md' ];
2729
+                } else {
2730
+                    $v_md = null;
2731
+                }
2732
+                if ( ! empty( $args[ $k . '_lg' ] ) && $args[ $k . '_lg' ] !== '' ) {
2733
+                    if ( $v == null && $v_md == null ) {
2734
+                        $classes[] = sanitize_html_class( str_replace( '-lg', '', $args[ $k . '_lg' ] ) );
2735
+                    } else {
2736
+                        $classes[] = sanitize_html_class( $args[ $k . '_lg' ] );
2737
+                    }
2738
+                }
2739
+            } else {
2740
+                if ( $key == 'font_size' && ! empty( $args[ $key ] ) && $args[ $key ] == 'custom' ) {
2741
+                    continue;
2742
+                }
2743
+                if ( ! empty( $args[ $key ] ) ) {
2744
+                    $classes[] = sd_sanitize_html_classes( $args[ $key ] );
2745
+                }
2746
+            }
2747
+        }
2748
+    }
2749
+
2750
+    if ( ! empty( $classes ) ) {
2751
+        $classes = array_unique( array_filter( array_map( 'trim', $classes ) ) );
2752
+    }
2753
+
2754
+    return implode( ' ', $classes );
2755 2755
 }
2756 2756
 
2757 2757
 /**
@@ -2763,90 +2763,90 @@  discard block
 block discarded – undo
2763 2763
  */
2764 2764
 function sd_build_aui_styles( $args ) {
2765 2765
 
2766
-	$styles = array();
2767
-
2768
-	// background color
2769
-	if ( ! empty( $args['bg'] ) && $args['bg'] !== '' ) {
2770
-		if ( $args['bg'] == 'custom-color' ) {
2771
-			$styles['background-color'] = $args['bg_color'];
2772
-		} elseif ( $args['bg'] == 'custom-gradient' ) {
2773
-			$styles['background-image'] = $args['bg_gradient'];
2774
-
2775
-			// use background on text.
2776
-			if ( ! empty( $args['bg_on_text'] ) && $args['bg_on_text'] ) {
2777
-				$styles['background-clip']         = 'text';
2778
-				$styles['-webkit-background-clip'] = 'text';
2779
-				$styles['text-fill-color']         = 'transparent';
2780
-				$styles['-webkit-text-fill-color'] = 'transparent';
2781
-			}
2782
-		}
2783
-	}
2784
-
2785
-	if ( ! empty( $args['bg_image'] ) && $args['bg_image'] !== '' ) {
2786
-		$hasImage = true;
2787
-		if ( ! empty( $styles['background-color'] ) && $args['bg'] == 'custom-color' ) {
2788
-			$styles['background-image']      = 'url(' . $args['bg_image'] . ')';
2789
-			$styles['background-blend-mode'] = 'overlay';
2790
-		} elseif ( ! empty( $styles['background-image'] ) && $args['bg'] == 'custom-gradient' ) {
2791
-			$styles['background-image'] .= ',url(' . $args['bg_image'] . ')';
2792
-		} elseif ( ! empty( $args['bg'] ) && $args['bg'] != '' && $args['bg'] != 'transparent' ) {
2793
-			// do nothing as we alreay have a preset
2794
-			$hasImage = false;
2795
-		} else {
2796
-			$styles['background-image'] = 'url(' . $args['bg_image'] . ')';
2797
-		}
2798
-
2799
-		if ( $hasImage ) {
2800
-			$styles['background-size'] = 'cover';
2801
-
2802
-			if ( ! empty( $args['bg_image_fixed'] ) && $args['bg_image_fixed'] ) {
2803
-				$styles['background-attachment'] = 'fixed';
2804
-			}
2805
-		}
2806
-
2807
-		if ( $hasImage && ! empty( $args['bg_image_xy'] ) && ! empty( $args['bg_image_xy']['x'] ) ) {
2808
-			$styles['background-position'] = ( $args['bg_image_xy']['x'] * 100 ) . '% ' . ( $args['bg_image_xy']['y'] * 100 ) . '%';
2809
-		}
2810
-	}
2811
-
2812
-	// sticky offset top
2813
-	if ( ! empty( $args['sticky_offset_top'] ) && $args['sticky_offset_top'] !== '' ) {
2814
-		$styles['top'] = absint( $args['sticky_offset_top'] );
2815
-	}
2816
-
2817
-	// sticky offset bottom
2818
-	if ( ! empty( $args['sticky_offset_bottom'] ) && $args['sticky_offset_bottom'] !== '' ) {
2819
-		$styles['bottom'] = absint( $args['sticky_offset_bottom'] );
2820
-	}
2821
-
2822
-	// font size
2823
-	if ( ! empty( $args['font_size_custom'] ) && $args['font_size_custom'] !== '' ) {
2824
-		$styles['font-size'] = (float) $args['font_size_custom'] . 'rem';
2825
-	}
2826
-
2827
-	// font color
2828
-	if ( ! empty( $args['text_color_custom'] ) && $args['text_color_custom'] !== '' ) {
2829
-		$styles['color'] = esc_attr( $args['text_color_custom'] );
2830
-	}
2831
-
2832
-	// font line height
2833
-	if ( ! empty( $args['font_line_height'] ) && $args['font_line_height'] !== '' ) {
2834
-		$styles['line-height'] = esc_attr( $args['font_line_height'] );
2835
-	}
2836
-
2837
-	// max height
2838
-	if ( ! empty( $args['max_height'] ) && $args['max_height'] !== '' ) {
2839
-		$styles['max-height'] = esc_attr( $args['max_height'] );
2840
-	}
2841
-
2842
-	$style_string = '';
2843
-	if ( ! empty( $styles ) ) {
2844
-		foreach ( $styles as $key => $val ) {
2845
-			$style_string .= esc_attr( $key ) . ':' . esc_attr( $val ) . ';';
2846
-		}
2847
-	}
2848
-
2849
-	return $style_string;
2766
+    $styles = array();
2767
+
2768
+    // background color
2769
+    if ( ! empty( $args['bg'] ) && $args['bg'] !== '' ) {
2770
+        if ( $args['bg'] == 'custom-color' ) {
2771
+            $styles['background-color'] = $args['bg_color'];
2772
+        } elseif ( $args['bg'] == 'custom-gradient' ) {
2773
+            $styles['background-image'] = $args['bg_gradient'];
2774
+
2775
+            // use background on text.
2776
+            if ( ! empty( $args['bg_on_text'] ) && $args['bg_on_text'] ) {
2777
+                $styles['background-clip']         = 'text';
2778
+                $styles['-webkit-background-clip'] = 'text';
2779
+                $styles['text-fill-color']         = 'transparent';
2780
+                $styles['-webkit-text-fill-color'] = 'transparent';
2781
+            }
2782
+        }
2783
+    }
2784
+
2785
+    if ( ! empty( $args['bg_image'] ) && $args['bg_image'] !== '' ) {
2786
+        $hasImage = true;
2787
+        if ( ! empty( $styles['background-color'] ) && $args['bg'] == 'custom-color' ) {
2788
+            $styles['background-image']      = 'url(' . $args['bg_image'] . ')';
2789
+            $styles['background-blend-mode'] = 'overlay';
2790
+        } elseif ( ! empty( $styles['background-image'] ) && $args['bg'] == 'custom-gradient' ) {
2791
+            $styles['background-image'] .= ',url(' . $args['bg_image'] . ')';
2792
+        } elseif ( ! empty( $args['bg'] ) && $args['bg'] != '' && $args['bg'] != 'transparent' ) {
2793
+            // do nothing as we alreay have a preset
2794
+            $hasImage = false;
2795
+        } else {
2796
+            $styles['background-image'] = 'url(' . $args['bg_image'] . ')';
2797
+        }
2798
+
2799
+        if ( $hasImage ) {
2800
+            $styles['background-size'] = 'cover';
2801
+
2802
+            if ( ! empty( $args['bg_image_fixed'] ) && $args['bg_image_fixed'] ) {
2803
+                $styles['background-attachment'] = 'fixed';
2804
+            }
2805
+        }
2806
+
2807
+        if ( $hasImage && ! empty( $args['bg_image_xy'] ) && ! empty( $args['bg_image_xy']['x'] ) ) {
2808
+            $styles['background-position'] = ( $args['bg_image_xy']['x'] * 100 ) . '% ' . ( $args['bg_image_xy']['y'] * 100 ) . '%';
2809
+        }
2810
+    }
2811
+
2812
+    // sticky offset top
2813
+    if ( ! empty( $args['sticky_offset_top'] ) && $args['sticky_offset_top'] !== '' ) {
2814
+        $styles['top'] = absint( $args['sticky_offset_top'] );
2815
+    }
2816
+
2817
+    // sticky offset bottom
2818
+    if ( ! empty( $args['sticky_offset_bottom'] ) && $args['sticky_offset_bottom'] !== '' ) {
2819
+        $styles['bottom'] = absint( $args['sticky_offset_bottom'] );
2820
+    }
2821
+
2822
+    // font size
2823
+    if ( ! empty( $args['font_size_custom'] ) && $args['font_size_custom'] !== '' ) {
2824
+        $styles['font-size'] = (float) $args['font_size_custom'] . 'rem';
2825
+    }
2826
+
2827
+    // font color
2828
+    if ( ! empty( $args['text_color_custom'] ) && $args['text_color_custom'] !== '' ) {
2829
+        $styles['color'] = esc_attr( $args['text_color_custom'] );
2830
+    }
2831
+
2832
+    // font line height
2833
+    if ( ! empty( $args['font_line_height'] ) && $args['font_line_height'] !== '' ) {
2834
+        $styles['line-height'] = esc_attr( $args['font_line_height'] );
2835
+    }
2836
+
2837
+    // max height
2838
+    if ( ! empty( $args['max_height'] ) && $args['max_height'] !== '' ) {
2839
+        $styles['max-height'] = esc_attr( $args['max_height'] );
2840
+    }
2841
+
2842
+    $style_string = '';
2843
+    if ( ! empty( $styles ) ) {
2844
+        foreach ( $styles as $key => $val ) {
2845
+            $style_string .= esc_attr( $key ) . ':' . esc_attr( $val ) . ';';
2846
+        }
2847
+    }
2848
+
2849
+    return $style_string;
2850 2850
 
2851 2851
 }
2852 2852
 
@@ -2859,34 +2859,34 @@  discard block
 block discarded – undo
2859 2859
  * @return string
2860 2860
  */
2861 2861
 function sd_build_hover_styles( $args, $is_preview = false ) {
2862
-	$rules = '';
2863
-	// text color
2864
-	if ( ! empty( $args['styleid'] ) ) {
2865
-		$styleid = $is_preview ? 'html .editor-styles-wrapper .' . esc_attr( $args['styleid'] ) : 'html .' . esc_attr( $args['styleid'] );
2866
-
2867
-		// text
2868
-		if ( ! empty( $args['text_color_hover'] ) ) {
2869
-			$key    = 'custom' === $args['text_color_hover'] && ! empty( $args['text_color_hover_custom'] ) ? 'text_color_hover_custom' : 'text_color_hover';
2870
-			$color  = sd_get_color_from_var( $args[ $key ] );
2871
-			$rules .= $styleid . ':hover {color: ' . $color . ' !important;} ';
2872
-		}
2873
-
2874
-		// bg
2875
-		if ( ! empty( $args['bg_hover'] ) ) {
2876
-			if ( 'custom-gradient' === $args['bg_hover'] ) {
2877
-				$color  = $args['bg_hover_gradient'];
2878
-				$rules .= $styleid . ':hover {background-image: ' . $color . ' !important;} ';
2879
-				$rules .= $styleid . '.btn:hover {border-color: transparent !important;} ';
2880
-			} else {
2881
-				$key    = 'custom-color' === $args['bg_hover'] ? 'bg_hover_color' : 'bg_hover';
2882
-				$color  = sd_get_color_from_var( $args[ $key ] );
2883
-				$rules .= $styleid . ':hover {background: ' . $color . ' !important;} ';
2884
-				$rules .= $styleid . '.btn:hover {border-color: ' . $color . ' !important;} ';
2885
-			}
2886
-		}
2887
-	}
2888
-
2889
-	return $rules ? '<style>' . $rules . '</style>' : '';
2862
+    $rules = '';
2863
+    // text color
2864
+    if ( ! empty( $args['styleid'] ) ) {
2865
+        $styleid = $is_preview ? 'html .editor-styles-wrapper .' . esc_attr( $args['styleid'] ) : 'html .' . esc_attr( $args['styleid'] );
2866
+
2867
+        // text
2868
+        if ( ! empty( $args['text_color_hover'] ) ) {
2869
+            $key    = 'custom' === $args['text_color_hover'] && ! empty( $args['text_color_hover_custom'] ) ? 'text_color_hover_custom' : 'text_color_hover';
2870
+            $color  = sd_get_color_from_var( $args[ $key ] );
2871
+            $rules .= $styleid . ':hover {color: ' . $color . ' !important;} ';
2872
+        }
2873
+
2874
+        // bg
2875
+        if ( ! empty( $args['bg_hover'] ) ) {
2876
+            if ( 'custom-gradient' === $args['bg_hover'] ) {
2877
+                $color  = $args['bg_hover_gradient'];
2878
+                $rules .= $styleid . ':hover {background-image: ' . $color . ' !important;} ';
2879
+                $rules .= $styleid . '.btn:hover {border-color: transparent !important;} ';
2880
+            } else {
2881
+                $key    = 'custom-color' === $args['bg_hover'] ? 'bg_hover_color' : 'bg_hover';
2882
+                $color  = sd_get_color_from_var( $args[ $key ] );
2883
+                $rules .= $styleid . ':hover {background: ' . $color . ' !important;} ';
2884
+                $rules .= $styleid . '.btn:hover {border-color: ' . $color . ' !important;} ';
2885
+            }
2886
+        }
2887
+    }
2888
+
2889
+    return $rules ? '<style>' . $rules . '</style>' : '';
2890 2890
 }
2891 2891
 
2892 2892
 /**
@@ -2898,12 +2898,12 @@  discard block
 block discarded – undo
2898 2898
  */
2899 2899
 function sd_get_color_from_var( $var ) {
2900 2900
 
2901
-	//sanitize_hex_color() @todo this does not cover transparency
2902
-	if ( strpos( $var, '#' ) === false ) {
2903
-		$var = defined( 'BLOCKSTRAP_BLOCKS_VERSION' ) ? 'var(--wp--preset--color--' . esc_attr( $var ) . ')' : 'var(--' . esc_attr( $var ) . ')';
2904
-	}
2901
+    //sanitize_hex_color() @todo this does not cover transparency
2902
+    if ( strpos( $var, '#' ) === false ) {
2903
+        $var = defined( 'BLOCKSTRAP_BLOCKS_VERSION' ) ? 'var(--wp--preset--color--' . esc_attr( $var ) . ')' : 'var(--' . esc_attr( $var ) . ')';
2904
+    }
2905 2905
 
2906
-	return $var;
2906
+    return $var;
2907 2907
 }
2908 2908
 
2909 2909
 /**
@@ -2915,19 +2915,19 @@  discard block
 block discarded – undo
2915 2915
  * @return string
2916 2916
  */
2917 2917
 function sd_sanitize_html_classes( $classes, $sep = ' ' ) {
2918
-	$return = '';
2918
+    $return = '';
2919 2919
 
2920
-	if ( ! is_array( $classes ) ) {
2921
-		$classes = explode( $sep, $classes );
2922
-	}
2920
+    if ( ! is_array( $classes ) ) {
2921
+        $classes = explode( $sep, $classes );
2922
+    }
2923 2923
 
2924
-	if ( ! empty( $classes ) ) {
2925
-		foreach ( $classes as $class ) {
2926
-			$return .= sanitize_html_class( $class ) . ' ';
2927
-		}
2928
-	}
2924
+    if ( ! empty( $classes ) ) {
2925
+        foreach ( $classes as $class ) {
2926
+            $return .= sanitize_html_class( $class ) . ' ';
2927
+        }
2928
+    }
2929 2929
 
2930
-	return $return;
2930
+    return $return;
2931 2931
 }
2932 2932
 
2933 2933
 
@@ -2937,40 +2937,40 @@  discard block
 block discarded – undo
2937 2937
  * @return void
2938 2938
  */
2939 2939
 function sd_get_class_build_keys() {
2940
-	$keys = array(
2941
-		'container',
2942
-		'position',
2943
-		'flex_direction',
2944
-		'shadow',
2945
-		'rounded',
2946
-		'nav_style',
2947
-		'horizontal_alignment',
2948
-		'nav_fill',
2949
-		'width',
2950
-		'font_weight',
2951
-		'font_size',
2952
-		'font_case',
2953
-		'css_class',
2954
-		'flex_align_items-MTD',
2955
-		'flex_justify_content-MTD',
2956
-		'flex_align_self-MTD',
2957
-		'flex_order-MTD',
2958
-		'styleid',
2959
-		'border_opacity',
2960
-		'border_width',
2961
-		'border_type',
2962
-		'opacity',
2963
-		'zindex',
2964
-		'flex_wrap-MTD',
2965
-		'h100',
2966
-		'overflow',
2967
-		'scrollbars',
2968
-		'float-MTD',
2969
-		'height-MTD',
2970
-		'width-MTD'
2971
-	);
2972
-
2973
-	return apply_filters( 'sd_class_build_keys', $keys );
2940
+    $keys = array(
2941
+        'container',
2942
+        'position',
2943
+        'flex_direction',
2944
+        'shadow',
2945
+        'rounded',
2946
+        'nav_style',
2947
+        'horizontal_alignment',
2948
+        'nav_fill',
2949
+        'width',
2950
+        'font_weight',
2951
+        'font_size',
2952
+        'font_case',
2953
+        'css_class',
2954
+        'flex_align_items-MTD',
2955
+        'flex_justify_content-MTD',
2956
+        'flex_align_self-MTD',
2957
+        'flex_order-MTD',
2958
+        'styleid',
2959
+        'border_opacity',
2960
+        'border_width',
2961
+        'border_type',
2962
+        'opacity',
2963
+        'zindex',
2964
+        'flex_wrap-MTD',
2965
+        'h100',
2966
+        'overflow',
2967
+        'scrollbars',
2968
+        'float-MTD',
2969
+        'height-MTD',
2970
+        'width-MTD'
2971
+    );
2972
+
2973
+    return apply_filters( 'sd_class_build_keys', $keys );
2974 2974
 }
2975 2975
 
2976 2976
 /**
@@ -2982,18 +2982,18 @@  discard block
 block discarded – undo
2982 2982
  * @return array
2983 2983
  */
2984 2984
 function sd_get_visibility_conditions_input( $type = 'visibility_conditions', $overwrite = array() ) {
2985
-	$defaults = array(
2986
-		'type'         => 'visibility_conditions',
2987
-		'title'        => __( 'Block Visibility', 'ayecode-connect' ),
2988
-		'button_title' => __( 'Set Block Visibility', 'ayecode-connect' ),
2989
-		'default'      => '',
2990
-		'desc_tip'     => true,
2991
-		'group'        => __( 'Visibility Conditions', 'ayecode-connect' ),
2992
-	);
2985
+    $defaults = array(
2986
+        'type'         => 'visibility_conditions',
2987
+        'title'        => __( 'Block Visibility', 'ayecode-connect' ),
2988
+        'button_title' => __( 'Set Block Visibility', 'ayecode-connect' ),
2989
+        'default'      => '',
2990
+        'desc_tip'     => true,
2991
+        'group'        => __( 'Visibility Conditions', 'ayecode-connect' ),
2992
+    );
2993 2993
 
2994
-	$input = wp_parse_args( $overwrite, $defaults );
2994
+    $input = wp_parse_args( $overwrite, $defaults );
2995 2995
 
2996
-	return $input;
2996
+    return $input;
2997 2997
 }
2998 2998
 
2999 2999
 /**
@@ -3005,24 +3005,24 @@  discard block
 block discarded – undo
3005 3005
  * @return array An array of roles.
3006 3006
  */
3007 3007
 function sd_user_roles_options( $exclude = array() ) {
3008
-	$user_roles = array();
3008
+    $user_roles = array();
3009 3009
 
3010
-	if ( !function_exists('get_editable_roles') ) {
3011
-		require_once( ABSPATH . '/wp-admin/includes/user.php' );
3012
-	}
3010
+    if ( !function_exists('get_editable_roles') ) {
3011
+        require_once( ABSPATH . '/wp-admin/includes/user.php' );
3012
+    }
3013 3013
 
3014
-	$roles = get_editable_roles();
3014
+    $roles = get_editable_roles();
3015 3015
 
3016
-	foreach ( $roles as $role => $data ) {
3017
-		if ( ! ( ! empty( $exclude ) && in_array( $role, $exclude ) ) ) {
3018
-			$user_roles[ esc_attr( $role ) ] = translate_user_role( $data['name'] );
3019
-		}
3020
-	}
3016
+    foreach ( $roles as $role => $data ) {
3017
+        if ( ! ( ! empty( $exclude ) && in_array( $role, $exclude ) ) ) {
3018
+            $user_roles[ esc_attr( $role ) ] = translate_user_role( $data['name'] );
3019
+        }
3020
+    }
3021 3021
 
3022
-	// Logged out as a custom role.
3023
-	$user_roles['logged_out'] = __( 'Guest (logged out)', 'ayecode-connect' );
3022
+    // Logged out as a custom role.
3023
+    $user_roles['logged_out'] = __( 'Guest (logged out)', 'ayecode-connect' );
3024 3024
 
3025
-	return apply_filters( 'sd_user_roles_options', $user_roles );
3025
+    return apply_filters( 'sd_user_roles_options', $user_roles );
3026 3026
 }
3027 3027
 
3028 3028
 /**
@@ -3033,18 +3033,18 @@  discard block
 block discarded – undo
3033 3033
  * @return array Rule options.
3034 3034
  */
3035 3035
 function sd_visibility_rules_options() {
3036
-	$options = array(
3037
-		'logged_in'  => __( 'Logged In', 'ayecode-connect' ),
3038
-		'logged_out' => __( 'Logged Out', 'ayecode-connect' ),
3039
-		'post_author'  => __( 'Post Author', 'ayecode-connect' ),
3040
-		'user_roles' => __( 'Specific User Roles', 'ayecode-connect' )
3041
-	);
3036
+    $options = array(
3037
+        'logged_in'  => __( 'Logged In', 'ayecode-connect' ),
3038
+        'logged_out' => __( 'Logged Out', 'ayecode-connect' ),
3039
+        'post_author'  => __( 'Post Author', 'ayecode-connect' ),
3040
+        'user_roles' => __( 'Specific User Roles', 'ayecode-connect' )
3041
+    );
3042 3042
 
3043
-	if ( class_exists( 'GeoDirectory' ) ) {
3044
-		$options['gd_field'] = __( 'GD Field', 'ayecode-connect' );
3045
-	}
3043
+    if ( class_exists( 'GeoDirectory' ) ) {
3044
+        $options['gd_field'] = __( 'GD Field', 'ayecode-connect' );
3045
+    }
3046 3046
 
3047
-	return apply_filters( 'sd_visibility_rules_options', $options );
3047
+    return apply_filters( 'sd_visibility_rules_options', $options );
3048 3048
 }
3049 3049
 
3050 3050
 /**
@@ -3053,39 +3053,39 @@  discard block
 block discarded – undo
3053 3053
  * @return array
3054 3054
  */
3055 3055
 function sd_visibility_gd_field_options() {
3056
-	$fields = geodir_post_custom_fields( '', 'all', 'all', 'none' );
3056
+    $fields = geodir_post_custom_fields( '', 'all', 'all', 'none' );
3057 3057
 
3058
-	$keys = array();
3059
-	if ( ! empty( $fields ) ) {
3060
-		foreach( $fields as $field ) {
3061
-			if ( apply_filters( 'geodir_badge_field_skip_key', false, $field ) ) {
3062
-				continue;
3063
-			}
3058
+    $keys = array();
3059
+    if ( ! empty( $fields ) ) {
3060
+        foreach( $fields as $field ) {
3061
+            if ( apply_filters( 'geodir_badge_field_skip_key', false, $field ) ) {
3062
+                continue;
3063
+            }
3064 3064
 
3065
-			$keys[ $field['htmlvar_name'] ] = $field['htmlvar_name'] . ' ( ' . __( $field['admin_title'], 'geodirectory' ) . ' )';
3065
+            $keys[ $field['htmlvar_name'] ] = $field['htmlvar_name'] . ' ( ' . __( $field['admin_title'], 'geodirectory' ) . ' )';
3066 3066
 
3067
-			// Extra address fields
3068
-			if ( $field['htmlvar_name'] == 'address' && ( $address_fields = geodir_post_meta_address_fields( '' ) ) ) {
3069
-				foreach ( $address_fields as $_field => $args ) {
3070
-					if ( $_field != 'map_directions' && $_field != 'street' ) {
3071
-						$keys[ $_field ] = $_field . ' ( ' . $args['frontend_title'] . ' )';
3072
-					}
3073
-				}
3074
-			}
3075
-		}
3076
-	}
3067
+            // Extra address fields
3068
+            if ( $field['htmlvar_name'] == 'address' && ( $address_fields = geodir_post_meta_address_fields( '' ) ) ) {
3069
+                foreach ( $address_fields as $_field => $args ) {
3070
+                    if ( $_field != 'map_directions' && $_field != 'street' ) {
3071
+                        $keys[ $_field ] = $_field . ' ( ' . $args['frontend_title'] . ' )';
3072
+                    }
3073
+                }
3074
+            }
3075
+        }
3076
+    }
3077 3077
 
3078
-	$standard_fields = sd_visibility_gd_standard_field_options();
3078
+    $standard_fields = sd_visibility_gd_standard_field_options();
3079 3079
 
3080
-	if ( ! empty( $standard_fields ) ) {
3081
-		foreach ( $standard_fields as $key => $option ) {
3082
-			$keys[ $key ] = $option;
3083
-		}
3084
-	}
3080
+    if ( ! empty( $standard_fields ) ) {
3081
+        foreach ( $standard_fields as $key => $option ) {
3082
+            $keys[ $key ] = $option;
3083
+        }
3084
+    }
3085 3085
 
3086
-	$options = apply_filters( 'geodir_badge_field_keys', $keys );
3086
+    $options = apply_filters( 'geodir_badge_field_keys', $keys );
3087 3087
 
3088
-	return apply_filters( 'sd_visibility_gd_field_options', $options );
3088
+    return apply_filters( 'sd_visibility_gd_field_options', $options );
3089 3089
 }
3090 3090
 
3091 3091
 /**
@@ -3094,17 +3094,17 @@  discard block
 block discarded – undo
3094 3094
  * @return array
3095 3095
  */
3096 3096
 function sd_visibility_gd_standard_field_options( $post_type = '' ) {
3097
-	$fields = sd_visibility_gd_standard_fields( $post_type );
3097
+    $fields = sd_visibility_gd_standard_fields( $post_type );
3098 3098
 
3099
-	$options = array();
3099
+    $options = array();
3100 3100
 
3101
-	foreach ( $fields as $key => $field ) {
3102
-		if ( ! empty( $field['frontend_title'] ) ) {
3103
-			$options[ $key ] = $key . ' ( ' . $field['frontend_title'] . ' )';
3104
-		}
3105
-	}
3101
+    foreach ( $fields as $key => $field ) {
3102
+        if ( ! empty( $field['frontend_title'] ) ) {
3103
+            $options[ $key ] = $key . ' ( ' . $field['frontend_title'] . ' )';
3104
+        }
3105
+    }
3106 3106
 
3107
-	return apply_filters( 'sd_visibility_gd_standard_field_options', $options, $fields );
3107
+    return apply_filters( 'sd_visibility_gd_standard_field_options', $options, $fields );
3108 3108
 }
3109 3109
 
3110 3110
 /**
@@ -3113,17 +3113,17 @@  discard block
 block discarded – undo
3113 3113
  * @return array
3114 3114
  */
3115 3115
 function sd_visibility_gd_standard_fields( $post_type = '' ) {
3116
-	$standard_fields = geodir_post_meta_standard_fields( $post_type );
3116
+    $standard_fields = geodir_post_meta_standard_fields( $post_type );
3117 3117
 
3118
-	$fields = array();
3118
+    $fields = array();
3119 3119
 
3120
-	foreach ( $standard_fields as $key => $field ) {
3121
-		if ( $key != 'post_link' && strpos( $key, 'event' ) === false && ! empty( $field['frontend_title'] ) ) {
3122
-			$fields[ $key ] = $field;
3123
-		}
3124
-	}
3120
+    foreach ( $standard_fields as $key => $field ) {
3121
+        if ( $key != 'post_link' && strpos( $key, 'event' ) === false && ! empty( $field['frontend_title'] ) ) {
3122
+            $fields[ $key ] = $field;
3123
+        }
3124
+    }
3125 3125
 
3126
-	return apply_filters( 'sd_visibility_gd_standard_fields', $fields );
3126
+    return apply_filters( 'sd_visibility_gd_standard_fields', $fields );
3127 3127
 }
3128 3128
 
3129 3129
 /**
@@ -3132,18 +3132,18 @@  discard block
 block discarded – undo
3132 3132
  * @return array
3133 3133
  */
3134 3134
 function sd_visibility_field_condition_options(){
3135
-	$options = array(
3136
-		'is_empty' => __( 'is empty', 'ayecode-connect' ),
3137
-		'is_not_empty' => __( 'is not empty', 'ayecode-connect' ),
3138
-		'is_equal' => __( 'is equal', 'ayecode-connect' ),
3139
-		'is_not_equal' => __( 'is not equal', 'ayecode-connect' ),
3140
-		'is_greater_than' => __( 'is greater than', 'ayecode-connect' ),
3141
-		'is_less_than' => __( 'is less than', 'ayecode-connect' ),
3142
-		'is_contains' => __( 'is contains', 'ayecode-connect' ),
3143
-		'is_not_contains' => __( 'is not contains', 'ayecode-connect' ),
3144
-	);
3135
+    $options = array(
3136
+        'is_empty' => __( 'is empty', 'ayecode-connect' ),
3137
+        'is_not_empty' => __( 'is not empty', 'ayecode-connect' ),
3138
+        'is_equal' => __( 'is equal', 'ayecode-connect' ),
3139
+        'is_not_equal' => __( 'is not equal', 'ayecode-connect' ),
3140
+        'is_greater_than' => __( 'is greater than', 'ayecode-connect' ),
3141
+        'is_less_than' => __( 'is less than', 'ayecode-connect' ),
3142
+        'is_contains' => __( 'is contains', 'ayecode-connect' ),
3143
+        'is_not_contains' => __( 'is not contains', 'ayecode-connect' ),
3144
+    );
3145 3145
 
3146
-	return apply_filters( 'sd_visibility_field_condition_options', $options );
3146
+    return apply_filters( 'sd_visibility_field_condition_options', $options );
3147 3147
 }
3148 3148
 
3149 3149
 /**
@@ -3154,15 +3154,15 @@  discard block
 block discarded – undo
3154 3154
  * @return array Template type options.
3155 3155
  */
3156 3156
 function sd_visibility_output_options() {
3157
-	$options = array(
3158
-		''              => __( 'Show Block', 'ayecode-connect' ),
3159
-		'hide'          => __( 'Hide Block', 'ayecode-connect' ),
3160
-		'message'       => __( 'Show Custom Message', 'ayecode-connect' ),
3161
-		'page'          => __( 'Show Page Content', 'ayecode-connect' ),
3162
-		'template_part' => __( 'Show Template Part', 'ayecode-connect' ),
3163
-	);
3157
+    $options = array(
3158
+        ''              => __( 'Show Block', 'ayecode-connect' ),
3159
+        'hide'          => __( 'Hide Block', 'ayecode-connect' ),
3160
+        'message'       => __( 'Show Custom Message', 'ayecode-connect' ),
3161
+        'page'          => __( 'Show Page Content', 'ayecode-connect' ),
3162
+        'template_part' => __( 'Show Template Part', 'ayecode-connect' ),
3163
+    );
3164 3164
 
3165
-	return apply_filters( 'sd_visibility_output_options', $options );
3165
+    return apply_filters( 'sd_visibility_output_options', $options );
3166 3166
 }
3167 3167
 
3168 3168
 /**
@@ -3174,73 +3174,73 @@  discard block
 block discarded – undo
3174 3174
  * @return array Template page options.
3175 3175
  */
3176 3176
 function sd_template_page_options( $args = array() ) {
3177
-	global $wpdb, $sd_tmpl_page_options;
3177
+    global $wpdb, $sd_tmpl_page_options;
3178 3178
 
3179
-	$defaults = array(
3180
-		'nocache' => false,
3181
-		'with_slug' => false,
3182
-		'default_label' => __( 'Select Page...', 'ayecode-connect' )
3183
-	);
3179
+    $defaults = array(
3180
+        'nocache' => false,
3181
+        'with_slug' => false,
3182
+        'default_label' => __( 'Select Page...', 'ayecode-connect' )
3183
+    );
3184 3184
 
3185
-	$args = wp_parse_args( $args, $defaults );
3185
+    $args = wp_parse_args( $args, $defaults );
3186 3186
 
3187
-	if ( ! empty( $sd_tmpl_page_options ) && empty( $args['nocache'] ) ) {
3188
-		return $sd_tmpl_page_options;
3189
-	}
3187
+    if ( ! empty( $sd_tmpl_page_options ) && empty( $args['nocache'] ) ) {
3188
+        return $sd_tmpl_page_options;
3189
+    }
3190 3190
 
3191
-	$exclude_pages = array();
3192
-	if ( $page_on_front = get_option( 'page_on_front' ) ) {
3193
-		$exclude_pages[] = $page_on_front;
3194
-	}
3191
+    $exclude_pages = array();
3192
+    if ( $page_on_front = get_option( 'page_on_front' ) ) {
3193
+        $exclude_pages[] = $page_on_front;
3194
+    }
3195 3195
 
3196
-	if ( $page_for_posts = get_option( 'page_for_posts' ) ) {
3197
-		$exclude_pages[] = $page_for_posts;
3198
-	}
3196
+    if ( $page_for_posts = get_option( 'page_for_posts' ) ) {
3197
+        $exclude_pages[] = $page_for_posts;
3198
+    }
3199 3199
 
3200
-	$exclude_pages_placeholders = '';
3201
-	if ( ! empty( $exclude_pages ) ) {
3202
-		// Sanitize the array of excluded pages and implode it for the SQL query.
3203
-		$exclude_pages_placeholders = implode( ',', array_fill( 0, count( $exclude_pages ), '%d' ) );
3204
-	}
3200
+    $exclude_pages_placeholders = '';
3201
+    if ( ! empty( $exclude_pages ) ) {
3202
+        // Sanitize the array of excluded pages and implode it for the SQL query.
3203
+        $exclude_pages_placeholders = implode( ',', array_fill( 0, count( $exclude_pages ), '%d' ) );
3204
+    }
3205 3205
 
3206
-	// Prepare the base SQL query.
3207
-	$sql = "SELECT ID, post_title, post_name FROM " . $wpdb->posts . " WHERE post_type = 'page' AND post_status = 'publish'";
3206
+    // Prepare the base SQL query.
3207
+    $sql = "SELECT ID, post_title, post_name FROM " . $wpdb->posts . " WHERE post_type = 'page' AND post_status = 'publish'";
3208 3208
 
3209
-	// Add the exclusion if there are pages to exclude
3210
-	if ( ! empty( $exclude_pages ) ) {
3211
-		$sql .= " AND ID NOT IN ($exclude_pages_placeholders)";
3212
-	}
3209
+    // Add the exclusion if there are pages to exclude
3210
+    if ( ! empty( $exclude_pages ) ) {
3211
+        $sql .= " AND ID NOT IN ($exclude_pages_placeholders)";
3212
+    }
3213 3213
 
3214
-	// Add sorting.
3215
-	$sql .= " ORDER BY post_title ASC";
3214
+    // Add sorting.
3215
+    $sql .= " ORDER BY post_title ASC";
3216 3216
 
3217
-	// Add a limit.
3218
-	$limit = (int) apply_filters( 'sd_template_page_options_limit', 500, $args );
3217
+    // Add a limit.
3218
+    $limit = (int) apply_filters( 'sd_template_page_options_limit', 500, $args );
3219 3219
 
3220
-	if ( $limit > 0 ) {
3221
-		$sql .= " LIMIT " . (int) $limit;
3222
-	}
3220
+    if ( $limit > 0 ) {
3221
+        $sql .= " LIMIT " . (int) $limit;
3222
+    }
3223 3223
 
3224
-	// Prepare the SQL query to include the excluded pages only if we have placeholders.
3225
-	$pages = $exclude_pages_placeholders ? $wpdb->get_results( $wpdb->prepare( $sql, ...$exclude_pages ) ) : $wpdb->get_results( $sql );
3224
+    // Prepare the SQL query to include the excluded pages only if we have placeholders.
3225
+    $pages = $exclude_pages_placeholders ? $wpdb->get_results( $wpdb->prepare( $sql, ...$exclude_pages ) ) : $wpdb->get_results( $sql );
3226 3226
 
3227
-	if ( ! empty( $args['default_label'] ) ) {
3228
-		$options = array( '' => $args['default_label'] );
3229
-	} else {
3230
-		$options = array();
3231
-	}
3227
+    if ( ! empty( $args['default_label'] ) ) {
3228
+        $options = array( '' => $args['default_label'] );
3229
+    } else {
3230
+        $options = array();
3231
+    }
3232 3232
 
3233
-	if ( ! empty( $pages ) ) {
3234
-		foreach ( $pages as $page ) {
3235
-			$title = ! empty( $args['with_slug'] ) ? $page->post_title . ' (' . $page->post_name . ')' : ( $page->post_title . ' (#' . $page->ID . ')' );
3233
+    if ( ! empty( $pages ) ) {
3234
+        foreach ( $pages as $page ) {
3235
+            $title = ! empty( $args['with_slug'] ) ? $page->post_title . ' (' . $page->post_name . ')' : ( $page->post_title . ' (#' . $page->ID . ')' );
3236 3236
 
3237
-			$options[ $page->ID ] = $title;
3238
-		}
3239
-	}
3237
+            $options[ $page->ID ] = $title;
3238
+        }
3239
+    }
3240 3240
 
3241
-	$sd_tmpl_page_options = $options;
3241
+    $sd_tmpl_page_options = $options;
3242 3242
 
3243
-	return apply_filters( 'sd_template_page_options', $options, $args );
3243
+    return apply_filters( 'sd_template_page_options', $options, $args );
3244 3244
 }
3245 3245
 
3246 3246
 /**
@@ -3252,25 +3252,25 @@  discard block
 block discarded – undo
3252 3252
  * @return array Template part options.
3253 3253
  */
3254 3254
 function sd_template_part_options( $args = array() ) {
3255
-	global $sd_tmpl_part_options;
3255
+    global $sd_tmpl_part_options;
3256 3256
 
3257
-	if ( ! empty( $sd_tmpl_part_options ) ) {
3258
-		return $sd_tmpl_part_options;
3259
-	}
3257
+    if ( ! empty( $sd_tmpl_part_options ) ) {
3258
+        return $sd_tmpl_part_options;
3259
+    }
3260 3260
 
3261
-	$options = array( '' => __( 'Select Template Part...', 'ayecode-connect' ) );
3261
+    $options = array( '' => __( 'Select Template Part...', 'ayecode-connect' ) );
3262 3262
 
3263
-	$parts = get_block_templates( array(), 'wp_template_part' );
3263
+    $parts = get_block_templates( array(), 'wp_template_part' );
3264 3264
 
3265
-	if ( ! empty( $parts ) ) {
3266
-		foreach ( $parts as $part ) {
3267
-			$options[ $part->slug ] = $part->title . ' (#' . $part->slug . ')';
3268
-		}
3269
-	}
3265
+    if ( ! empty( $parts ) ) {
3266
+        foreach ( $parts as $part ) {
3267
+            $options[ $part->slug ] = $part->title . ' (#' . $part->slug . ')';
3268
+        }
3269
+    }
3270 3270
 
3271
-	$sd_tmpl_part_options = $options;
3271
+    $sd_tmpl_part_options = $options;
3272 3272
 
3273
-	return apply_filters( 'sd_template_part_options', $options, $args );
3273
+    return apply_filters( 'sd_template_part_options', $options, $args );
3274 3274
 }
3275 3275
 
3276 3276
 /**
@@ -3282,25 +3282,25 @@  discard block
 block discarded – undo
3282 3282
  * @return array Template part object.
3283 3283
  */
3284 3284
 function sd_get_template_part_by_slug( $slug ) {
3285
-	global $bs_tmpl_part_by_slug;
3285
+    global $bs_tmpl_part_by_slug;
3286 3286
 
3287
-	if ( empty( $bs_tmpl_part_by_slug ) ) {
3288
-		$bs_tmpl_part_by_slug = array();
3289
-	}
3287
+    if ( empty( $bs_tmpl_part_by_slug ) ) {
3288
+        $bs_tmpl_part_by_slug = array();
3289
+    }
3290 3290
 
3291
-	if ( isset( $bs_tmpl_part_by_slug[ $slug ] ) ) {
3292
-		return $bs_tmpl_part_by_slug[ $slug ];
3293
-	}
3291
+    if ( isset( $bs_tmpl_part_by_slug[ $slug ] ) ) {
3292
+        return $bs_tmpl_part_by_slug[ $slug ];
3293
+    }
3294 3294
 
3295
-	$template_query = get_block_templates( array( 'slug__in' => array( $slug ) ), 'wp_template_part' );
3295
+    $template_query = get_block_templates( array( 'slug__in' => array( $slug ) ), 'wp_template_part' );
3296 3296
 
3297
-	$query_post = ! empty( $template_query ) ? $template_query[0] : array();
3297
+    $query_post = ! empty( $template_query ) ? $template_query[0] : array();
3298 3298
 
3299
-	$template_part = ! empty( $query_post ) && $query_post->status == 'publish' ? $query_post : array();
3299
+    $template_part = ! empty( $query_post ) && $query_post->status == 'publish' ? $query_post : array();
3300 3300
 
3301
-	$bs_tmpl_part_by_slug[ $slug ] = $template_part;
3301
+    $bs_tmpl_part_by_slug[ $slug ] = $template_part;
3302 3302
 
3303
-	return apply_filters( 'sd_get_template_part_by_slug', $template_part, $slug );
3303
+    return apply_filters( 'sd_get_template_part_by_slug', $template_part, $slug );
3304 3304
 }
3305 3305
 
3306 3306
 /**
@@ -3313,511 +3313,511 @@  discard block
 block discarded – undo
3313 3313
  * @param WP_Block $instance      The block instance.
3314 3314
  */
3315 3315
 function sd_render_block( $block_content, $block, $instance = '' ) {
3316
-	// No block visibility conditions set.
3317
-	if ( empty( $block['attrs']['visibility_conditions'] ) ) {
3318
-		return $block_content;
3319
-	}
3320
-
3321
-	$attributes = json_decode( $block['attrs']['visibility_conditions'], true );
3322
-	$rules = ! empty( $attributes ) ? sd_block_parse_rules( $attributes ) : array();
3323
-
3324
-	// remove rules with missing validators.
3325
-	$valid_rules = sd_visibility_rules_options();
3326
-
3327
-	if ( ! empty( $rules ) ) {
3328
-		foreach ( $rules as $key => $rule ) {
3329
-			if ( ! isset( $valid_rules[ $rule['type'] ] ) ) {
3330
-				unset( $rules[ $key ] );
3331
-			}
3332
-		}
3333
-	}
3334
-
3335
-	// No rules set.
3336
-	if ( empty( $rules ) ) {
3337
-		return $block_content;
3338
-	}
3339
-
3340
-	$check_rules = null;
3341
-	$_block_content = $block_content;
3342
-
3343
-	if ( ! empty( $rules ) && ( ! empty( $attributes['output'] ) || ! empty( $attributes['outputN'] ) ) ) {
3344
-		$check_rules = sd_block_check_rules( $rules );
3345
-
3346
-		if ( $check_rules ) {
3347
-			$output_condition = ! empty( $attributes['output'] ) ? $attributes['output'] : array();
3348
-		} else {
3349
-			$output_condition = ! empty( $attributes['outputN'] ) ? $attributes['outputN'] : array();
3350
-		}
3351
-
3352
-		if ( ! empty( $output_condition ) && ! empty( $output_condition['type'] ) ) {
3353
-			switch ( $output_condition['type'] ) {
3354
-				case 'hide':
3355
-					$valid_type = true;
3356
-					$content = '';
3357
-
3358
-					break;
3359
-				case 'message':
3360
-					$valid_type = true;
3361
-
3362
-					if ( isset( $output_condition['message'] ) ) {
3363
-						$content = $output_condition['message'] != '' ? __( stripslashes( $output_condition['message'] ), 'ayecode-connect' ) : $output_condition['message'];
3364
-
3365
-						if ( ! empty( $output_condition['message_type'] ) ) {
3366
-							$content = aui()->alert( array(
3367
-									'type'=> $output_condition['message_type'],
3368
-									'content'=> $content
3369
-								)
3370
-							);
3371
-						}
3372
-					}
3373
-
3374
-					break;
3375
-				case 'page':
3376
-					$valid_type = true;
3377
-
3378
-					$page_id = ! empty( $output_condition['page'] ) ? absint( $output_condition['page'] ) : 0;
3379
-					$content = sd_get_page_content( $page_id );
3380
-
3381
-					break;
3382
-				case 'template_part':
3383
-					$valid_type = true;
3384
-
3385
-					$template_part = ! empty( $output_condition['template_part'] ) ? $output_condition['template_part'] : '';
3386
-					$content = sd_get_template_part_content( $template_part );
3387
-
3388
-					break;
3389
-				default:
3390
-					$valid_type = false;
3391
-					break;
3392
-			}
3393
-
3394
-			if ( $valid_type ) {
3395
-				$block_content = '<div class="' . esc_attr( wp_get_block_default_classname( $instance->name ) ) . ' sd-block-has-rule' . ( $output_condition['type'] == 'hide' ? ' sd-block-hide-rule' : '' ) . '">' . $content . '</div>';
3396
-			}
3397
-		}
3398
-	}
3399
-
3400
-	return apply_filters( 'sd_render_block_visibility_content', $block_content, $_block_content, $attributes, $block, $instance, $check_rules );
3316
+    // No block visibility conditions set.
3317
+    if ( empty( $block['attrs']['visibility_conditions'] ) ) {
3318
+        return $block_content;
3319
+    }
3320
+
3321
+    $attributes = json_decode( $block['attrs']['visibility_conditions'], true );
3322
+    $rules = ! empty( $attributes ) ? sd_block_parse_rules( $attributes ) : array();
3323
+
3324
+    // remove rules with missing validators.
3325
+    $valid_rules = sd_visibility_rules_options();
3326
+
3327
+    if ( ! empty( $rules ) ) {
3328
+        foreach ( $rules as $key => $rule ) {
3329
+            if ( ! isset( $valid_rules[ $rule['type'] ] ) ) {
3330
+                unset( $rules[ $key ] );
3331
+            }
3332
+        }
3333
+    }
3334
+
3335
+    // No rules set.
3336
+    if ( empty( $rules ) ) {
3337
+        return $block_content;
3338
+    }
3339
+
3340
+    $check_rules = null;
3341
+    $_block_content = $block_content;
3342
+
3343
+    if ( ! empty( $rules ) && ( ! empty( $attributes['output'] ) || ! empty( $attributes['outputN'] ) ) ) {
3344
+        $check_rules = sd_block_check_rules( $rules );
3345
+
3346
+        if ( $check_rules ) {
3347
+            $output_condition = ! empty( $attributes['output'] ) ? $attributes['output'] : array();
3348
+        } else {
3349
+            $output_condition = ! empty( $attributes['outputN'] ) ? $attributes['outputN'] : array();
3350
+        }
3351
+
3352
+        if ( ! empty( $output_condition ) && ! empty( $output_condition['type'] ) ) {
3353
+            switch ( $output_condition['type'] ) {
3354
+                case 'hide':
3355
+                    $valid_type = true;
3356
+                    $content = '';
3357
+
3358
+                    break;
3359
+                case 'message':
3360
+                    $valid_type = true;
3361
+
3362
+                    if ( isset( $output_condition['message'] ) ) {
3363
+                        $content = $output_condition['message'] != '' ? __( stripslashes( $output_condition['message'] ), 'ayecode-connect' ) : $output_condition['message'];
3364
+
3365
+                        if ( ! empty( $output_condition['message_type'] ) ) {
3366
+                            $content = aui()->alert( array(
3367
+                                    'type'=> $output_condition['message_type'],
3368
+                                    'content'=> $content
3369
+                                )
3370
+                            );
3371
+                        }
3372
+                    }
3373
+
3374
+                    break;
3375
+                case 'page':
3376
+                    $valid_type = true;
3377
+
3378
+                    $page_id = ! empty( $output_condition['page'] ) ? absint( $output_condition['page'] ) : 0;
3379
+                    $content = sd_get_page_content( $page_id );
3380
+
3381
+                    break;
3382
+                case 'template_part':
3383
+                    $valid_type = true;
3384
+
3385
+                    $template_part = ! empty( $output_condition['template_part'] ) ? $output_condition['template_part'] : '';
3386
+                    $content = sd_get_template_part_content( $template_part );
3387
+
3388
+                    break;
3389
+                default:
3390
+                    $valid_type = false;
3391
+                    break;
3392
+            }
3393
+
3394
+            if ( $valid_type ) {
3395
+                $block_content = '<div class="' . esc_attr( wp_get_block_default_classname( $instance->name ) ) . ' sd-block-has-rule' . ( $output_condition['type'] == 'hide' ? ' sd-block-hide-rule' : '' ) . '">' . $content . '</div>';
3396
+            }
3397
+        }
3398
+    }
3399
+
3400
+    return apply_filters( 'sd_render_block_visibility_content', $block_content, $_block_content, $attributes, $block, $instance, $check_rules );
3401 3401
 }
3402 3402
 add_filter( 'render_block', 'sd_render_block', 9, 3 );
3403 3403
 
3404 3404
 function sd_get_page_content( $page_id ) {
3405
-	$content = $page_id > 0 ? get_post_field( 'post_content', (int) $page_id ) : '';
3405
+    $content = $page_id > 0 ? get_post_field( 'post_content', (int) $page_id ) : '';
3406 3406
 
3407
-	// Maybe bypass content
3408
-	$bypass_content = apply_filters( 'sd_bypass_page_content', '', $content, $page_id );
3409
-	if ( $bypass_content ) {
3410
-		return $bypass_content;
3411
-	}
3407
+    // Maybe bypass content
3408
+    $bypass_content = apply_filters( 'sd_bypass_page_content', '', $content, $page_id );
3409
+    if ( $bypass_content ) {
3410
+        return $bypass_content;
3411
+    }
3412 3412
 
3413
-	// Run the shortcodes on the content.
3414
-	$content = do_shortcode( $content );
3413
+    // Run the shortcodes on the content.
3414
+    $content = do_shortcode( $content );
3415 3415
 
3416
-	// Run block content if its available.
3417
-	if ( function_exists( 'do_blocks' ) ) {
3418
-		$content = do_blocks( $content );
3419
-	}
3416
+    // Run block content if its available.
3417
+    if ( function_exists( 'do_blocks' ) ) {
3418
+        $content = do_blocks( $content );
3419
+    }
3420 3420
 
3421
-	return apply_filters( 'sd_get_page_content', $content, $page_id );
3421
+    return apply_filters( 'sd_get_page_content', $content, $page_id );
3422 3422
 }
3423 3423
 
3424 3424
 function sd_get_template_part_content( $template_part ) {
3425
-	$template_part_post = $template_part ? sd_get_template_part_by_slug( $template_part ) : array();
3426
-	$content = ! empty( $template_part_post ) ? $template_part_post->content : '';
3425
+    $template_part_post = $template_part ? sd_get_template_part_by_slug( $template_part ) : array();
3426
+    $content = ! empty( $template_part_post ) ? $template_part_post->content : '';
3427 3427
 
3428
-	// Maybe bypass content
3429
-	$bypass_content = apply_filters( 'sd_bypass_template_part_content', '', $content, $template_part );
3430
-	if ( $bypass_content ) {
3431
-		return $bypass_content;
3432
-	}
3428
+    // Maybe bypass content
3429
+    $bypass_content = apply_filters( 'sd_bypass_template_part_content', '', $content, $template_part );
3430
+    if ( $bypass_content ) {
3431
+        return $bypass_content;
3432
+    }
3433 3433
 
3434
-	// Run the shortcodes on the content.
3435
-	$content = do_shortcode( $content );
3434
+    // Run the shortcodes on the content.
3435
+    $content = do_shortcode( $content );
3436 3436
 
3437
-	// Run block content if its available.
3438
-	if ( function_exists( 'do_blocks' ) ) {
3439
-		$content = do_blocks( $content );
3440
-	}
3437
+    // Run block content if its available.
3438
+    if ( function_exists( 'do_blocks' ) ) {
3439
+        $content = do_blocks( $content );
3440
+    }
3441 3441
 
3442
-	return apply_filters( 'sd_get_template_part_content', $content, $template_part );
3442
+    return apply_filters( 'sd_get_template_part_content', $content, $template_part );
3443 3443
 }
3444 3444
 
3445 3445
 function sd_block_parse_rules( $attrs ) {
3446
-	$rules = array();
3446
+    $rules = array();
3447 3447
 
3448
-	if ( ! empty( $attrs ) && is_array( $attrs ) ) {
3449
-		$attrs_keys = array_keys( $attrs );
3448
+    if ( ! empty( $attrs ) && is_array( $attrs ) ) {
3449
+        $attrs_keys = array_keys( $attrs );
3450 3450
 
3451
-		for ( $i = 1; $i <= count( $attrs_keys ); $i++ ) {
3452
-			if ( ! empty( $attrs[ 'rule' . $i ] ) && is_array( $attrs[ 'rule' . $i ] ) ) {
3453
-				$rules[] = $attrs[ 'rule' . $i ];
3454
-			}
3455
-		}
3456
-	}
3451
+        for ( $i = 1; $i <= count( $attrs_keys ); $i++ ) {
3452
+            if ( ! empty( $attrs[ 'rule' . $i ] ) && is_array( $attrs[ 'rule' . $i ] ) ) {
3453
+                $rules[] = $attrs[ 'rule' . $i ];
3454
+            }
3455
+        }
3456
+    }
3457 3457
 
3458
-	return apply_filters( 'sd_block_parse_rules', $rules, $attrs );
3458
+    return apply_filters( 'sd_block_parse_rules', $rules, $attrs );
3459 3459
 }
3460 3460
 
3461 3461
 function sd_block_check_rules( $rules ) {
3462
-	if ( ! ( is_array( $rules ) && ! empty( $rules ) ) ) {
3463
-		return true;
3464
-	}
3462
+    if ( ! ( is_array( $rules ) && ! empty( $rules ) ) ) {
3463
+        return true;
3464
+    }
3465 3465
 
3466
-	foreach ( $rules as $key => $rule ) {
3467
-		$match = apply_filters( 'sd_block_check_rule', true, $rule );
3466
+    foreach ( $rules as $key => $rule ) {
3467
+        $match = apply_filters( 'sd_block_check_rule', true, $rule );
3468 3468
 
3469
-		if ( ! $match ) {
3470
-			break;
3471
-		}
3472
-	}
3469
+        if ( ! $match ) {
3470
+            break;
3471
+        }
3472
+    }
3473 3473
 
3474
-	return apply_filters( 'sd_block_check_rules', $match, $rules );
3474
+    return apply_filters( 'sd_block_check_rules', $match, $rules );
3475 3475
 }
3476 3476
 
3477 3477
 function sd_block_check_rule( $match, $rule ) {
3478
-	global $post;
3479
-
3480
-	if ( $match && ! empty( $rule['type'] ) ) {
3481
-		switch ( $rule['type'] ) {
3482
-			case 'logged_in':
3483
-				$match = (bool) is_user_logged_in();
3484
-
3485
-				break;
3486
-			case 'logged_out':
3487
-				$match = ! is_user_logged_in();
3488
-
3489
-				break;
3490
-			case 'post_author':
3491
-				if ( ! empty( $post ) && $post->post_type != 'page' && ! empty( $post->post_author ) && is_user_logged_in() ) {
3492
-					$match = (int) $post->post_author === (int) get_current_user_id() ? true : false;
3493
-				} else {
3494
-					$match = false;
3495
-				}
3496
-
3497
-				break;
3498
-			case 'user_roles':
3499
-				$match = false;
3500
-
3501
-				if ( ! empty( $rule['user_roles'] ) ) {
3502
-					$user_roles = is_scalar( $rule['user_roles'] ) ? explode( ",", $rule['user_roles'] ) : $rule['user_roles'];
3503
-
3504
-					if ( is_array( $user_roles ) ) {
3505
-						$user_roles = array_filter( array_map( 'trim', $user_roles ) );
3506
-					}
3507
-
3508
-					if ( ! empty( $user_roles ) && is_array( $user_roles ) ) {
3509
-						if ( is_user_logged_in() && ( $current_user = wp_get_current_user() ) ) {
3510
-							$current_user_roles = $current_user->roles;
3511
-
3512
-							foreach ( $user_roles as $role ) {
3513
-								if ( in_array( $role, $current_user_roles ) ) {
3514
-									$match = true;
3515
-								}
3516
-							}
3517
-						} else {
3518
-							// Logged out role.
3519
-							if ( in_array( 'logged_out', $user_roles ) ) {
3520
-								$match = true;
3521
-							}
3522
-						}
3523
-					}
3524
-				}
3525
-
3526
-				break;
3527
-			case 'gd_field':
3528
-				$match = sd_block_check_rule_gd_field( $rule );
3529
-
3530
-				break;
3531
-
3532
-			default:
3533
-				$match = apply_filters( 'sd_block_check_custom_rule', $match, $rule );
3534
-				break;
3535
-		}
3536
-	}
3537
-
3538
-	return $match;
3478
+    global $post;
3479
+
3480
+    if ( $match && ! empty( $rule['type'] ) ) {
3481
+        switch ( $rule['type'] ) {
3482
+            case 'logged_in':
3483
+                $match = (bool) is_user_logged_in();
3484
+
3485
+                break;
3486
+            case 'logged_out':
3487
+                $match = ! is_user_logged_in();
3488
+
3489
+                break;
3490
+            case 'post_author':
3491
+                if ( ! empty( $post ) && $post->post_type != 'page' && ! empty( $post->post_author ) && is_user_logged_in() ) {
3492
+                    $match = (int) $post->post_author === (int) get_current_user_id() ? true : false;
3493
+                } else {
3494
+                    $match = false;
3495
+                }
3496
+
3497
+                break;
3498
+            case 'user_roles':
3499
+                $match = false;
3500
+
3501
+                if ( ! empty( $rule['user_roles'] ) ) {
3502
+                    $user_roles = is_scalar( $rule['user_roles'] ) ? explode( ",", $rule['user_roles'] ) : $rule['user_roles'];
3503
+
3504
+                    if ( is_array( $user_roles ) ) {
3505
+                        $user_roles = array_filter( array_map( 'trim', $user_roles ) );
3506
+                    }
3507
+
3508
+                    if ( ! empty( $user_roles ) && is_array( $user_roles ) ) {
3509
+                        if ( is_user_logged_in() && ( $current_user = wp_get_current_user() ) ) {
3510
+                            $current_user_roles = $current_user->roles;
3511
+
3512
+                            foreach ( $user_roles as $role ) {
3513
+                                if ( in_array( $role, $current_user_roles ) ) {
3514
+                                    $match = true;
3515
+                                }
3516
+                            }
3517
+                        } else {
3518
+                            // Logged out role.
3519
+                            if ( in_array( 'logged_out', $user_roles ) ) {
3520
+                                $match = true;
3521
+                            }
3522
+                        }
3523
+                    }
3524
+                }
3525
+
3526
+                break;
3527
+            case 'gd_field':
3528
+                $match = sd_block_check_rule_gd_field( $rule );
3529
+
3530
+                break;
3531
+
3532
+            default:
3533
+                $match = apply_filters( 'sd_block_check_custom_rule', $match, $rule );
3534
+                break;
3535
+        }
3536
+    }
3537
+
3538
+    return $match;
3539 3539
 }
3540 3540
 add_filter( 'sd_block_check_rule', 'sd_block_check_rule', 10, 2 );
3541 3541
 
3542 3542
 function sd_block_check_rule_gd_field( $rule ) {
3543
-	global $gd_post;
3544
-
3545
-	$match_found = false;
3546
-
3547
-	if ( class_exists( 'GeoDirectory' ) && ! empty( $gd_post->ID ) && ! empty( $rule['field'] ) && ! empty( $rule['condition'] ) ) {
3548
-		$args['block_visibility'] = true;
3549
-		$args['key'] = $rule['field'];
3550
-		$args['condition'] = $rule['condition'];
3551
-		$args['search'] = isset( $rule['search'] ) ? $rule['search'] : '';
3552
-
3553
-		if ( $args['key'] == 'street' ) {
3554
-			$args['key'] = 'address';
3555
-		}
3556
-
3557
-		$match_field = $_match_field = $args['key'];
3558
-
3559
-		if ( $match_field == 'address' ) {
3560
-			$match_field = 'street';
3561
-		} elseif ( $match_field == 'post_images' ) {
3562
-			$match_field = 'featured_image';
3563
-		}
3564
-
3565
-		$find_post = $gd_post;
3566
-		$find_post_keys = ! empty( $find_post ) ? array_keys( (array) $find_post ) : array();
3567
-
3568
-		if ( ! empty( $find_post->ID ) && ! in_array( 'post_category', $find_post_keys ) ) {
3569
-			$find_post = geodir_get_post_info( (int) $find_post->ID );
3570
-			$find_post_keys = ! empty( $find_post ) ? array_keys( (array) $find_post ) : array();
3571
-		}
3572
-
3573
-		if ( $match_field === '' || ( ! empty( $find_post_keys ) && ( in_array( $match_field, $find_post_keys ) || in_array( $_match_field, $find_post_keys ) ) ) ) {
3574
-			$address_fields = array( 'street2', 'neighbourhood', 'city', 'region', 'country', 'zip', 'latitude', 'longitude' ); // Address fields
3575
-			$field = array();
3576
-			$empty_field = false;
3577
-
3578
-			$standard_fields = sd_visibility_gd_standard_fields();
3579
-
3580
-			if ( $match_field && ! in_array( $match_field, array_keys( $standard_fields ) ) && ! in_array( $match_field, $address_fields ) ) {
3581
-				$package_id = geodir_get_post_package_id( $find_post->ID, $find_post->post_type );
3582
-				$fields = geodir_post_custom_fields( $package_id, 'all', $find_post->post_type, 'none' );
3583
-
3584
-				foreach ( $fields as $field_info ) {
3585
-					if ( $match_field == $field_info['htmlvar_name'] ) {
3586
-						$field = $field_info;
3587
-						break;
3588
-					} elseif( $_match_field == $field_info['htmlvar_name'] ) {
3589
-						$field = $field_info;
3590
-						break;
3591
-					}
3592
-				}
3593
-
3594
-				if ( empty( $field ) ) {
3595
-					$empty_field = true;
3596
-				}
3597
-			}
3598
-
3599
-			// Address fields.
3600
-			if ( in_array( $match_field, $address_fields ) && ( $address_fields = geodir_post_meta_address_fields( '' ) ) ) {
3601
-				if ( ! empty( $address_fields[ $match_field ] ) ) {
3602
-					$field = $address_fields[ $match_field ];
3603
-				}
3604
-			} else if ( in_array( $match_field, array_keys( $standard_fields ) ) ) {
3605
-				if ( ! empty( $standard_fields[ $match_field ] ) ) {
3606
-					$field = $standard_fields[ $match_field ];
3607
-				}
3608
-			}
3609
-
3610
-			// Parse search.
3611
-			$search = sd_gd_field_rule_search( $args['search'], $find_post->post_type, $rule, $field, $find_post );
3612
-
3613
-			$is_date = ( ! empty( $field['type'] ) && $field['type'] == 'datepicker' ) || in_array( $match_field, array( 'post_date', 'post_modified' ) ) ? true : false;
3614
-			$is_date = apply_filters( 'geodir_post_badge_is_date', $is_date, $match_field, $field, $args, $find_post );
3615
-
3616
-			$match_value = isset( $find_post->{$match_field} ) && empty( $empty_field ) ? esc_attr( trim( $find_post->{$match_field} ) ) : '';
3617
-			$match_found = $match_field === '' ? true : false;
3618
-
3619
-			if ( ! $match_found ) {
3620
-				if ( ( $match_field == 'post_date' || $match_field == 'post_modified' ) && ( empty( $args['condition'] ) || $args['condition'] == 'is_greater_than' || $args['condition'] == 'is_less_than' ) ) {
3621
-					if ( strpos( $search, '+' ) === false && strpos( $search, '-' ) === false ) {
3622
-						$search = '+' . $search;
3623
-					}
3624
-					$the_time = $match_field == 'post_modified' ? get_the_modified_date( 'Y-m-d', $find_post ) : get_the_time( 'Y-m-d', $find_post );
3625
-					$until_time = strtotime( $the_time . ' ' . $search . ' days' );
3626
-					$now_time   = strtotime( date_i18n( 'Y-m-d', current_time( 'timestamp' ) ) );
3627
-					if ( ( empty( $args['condition'] ) || $args['condition'] == 'is_less_than' ) && $until_time > $now_time ) {
3628
-						$match_found = true;
3629
-					} elseif ( $args['condition'] == 'is_greater_than' && $until_time < $now_time ) {
3630
-						$match_found = true;
3631
-					}
3632
-				} else {
3633
-					switch ( $args['condition'] ) {
3634
-						case 'is_equal':
3635
-							$match_found = (bool) ( $search != '' && $match_value == $search );
3636
-							break;
3637
-						case 'is_not_equal':
3638
-							$match_found = (bool) ( $search != '' && $match_value != $search );
3639
-							break;
3640
-						case 'is_greater_than':
3641
-							$match_found = (bool) ( $search != '' && ( is_float( $search ) || is_numeric( $search ) ) && ( is_float( $match_value ) || is_numeric( $match_value ) ) && $match_value > $search );
3642
-							break;
3643
-						case 'is_less_than':
3644
-							$match_found = (bool) ( $search != '' && ( is_float( $search ) || is_numeric( $search ) ) && ( is_float( $match_value ) || is_numeric( $match_value ) ) && $match_value < $search );
3645
-							break;
3646
-						case 'is_empty':
3647
-							$match_found = (bool) ( $match_value === '' || $match_value === false || $match_value === '0' || is_null( $match_value ) );
3648
-							break;
3649
-						case 'is_not_empty':
3650
-							$match_found = (bool) ( $match_value !== '' && $match_value !== false && $match_value !== '0' && ! is_null( $match_value ) );
3651
-							break;
3652
-						case 'is_contains':
3653
-							$match_found = (bool) ( $search != '' && stripos( $match_value, $search ) !== false );
3654
-							break;
3655
-						case 'is_not_contains':
3656
-							$match_found = (bool) ( $search != '' && stripos( $match_value, $search ) === false );
3657
-							break;
3658
-					}
3659
-				}
3660
-			}
3661
-
3662
-			$match_found = apply_filters( 'geodir_post_badge_check_match_found', $match_found, $args, $find_post );
3663
-		} else {
3664
-			$field = array();
3665
-
3666
-			// Parse search.
3667
-			$search = sd_gd_field_rule_search( $args['search'], $find_post->post_type, $rule, $field, $find_post );
3668
-
3669
-			$match_value = '';
3670
-			$match_found = $match_field === '' ? true : false;
3671
-
3672
-			if ( ! $match_found ) {
3673
-				switch ( $args['condition'] ) {
3674
-					case 'is_equal':
3675
-						$match_found = (bool) ( $search != '' && $match_value == $search );
3676
-						break;
3677
-					case 'is_not_equal':
3678
-						$match_found = (bool) ( $search != '' && $match_value != $search );
3679
-						break;
3680
-					case 'is_greater_than':
3681
-						$match_found = false;
3682
-						break;
3683
-					case 'is_less_than':
3684
-						$match_found = false;
3685
-						break;
3686
-					case 'is_empty':
3687
-						$match_found = true;
3688
-						break;
3689
-					case 'is_not_empty':
3690
-						$match_found = false;
3691
-						break;
3692
-					case 'is_contains':
3693
-						$match_found = false;
3694
-						break;
3695
-					case 'is_not_contains':
3696
-						$match_found = false;
3697
-						break;
3698
-				}
3699
-			}
3700
-
3701
-			$match_found = apply_filters( 'geodir_post_badge_check_match_found_empty', $match_found, $args, $find_post );
3702
-		}
3703
-	}
3704
-
3705
-	return $match_found;
3543
+    global $gd_post;
3544
+
3545
+    $match_found = false;
3546
+
3547
+    if ( class_exists( 'GeoDirectory' ) && ! empty( $gd_post->ID ) && ! empty( $rule['field'] ) && ! empty( $rule['condition'] ) ) {
3548
+        $args['block_visibility'] = true;
3549
+        $args['key'] = $rule['field'];
3550
+        $args['condition'] = $rule['condition'];
3551
+        $args['search'] = isset( $rule['search'] ) ? $rule['search'] : '';
3552
+
3553
+        if ( $args['key'] == 'street' ) {
3554
+            $args['key'] = 'address';
3555
+        }
3556
+
3557
+        $match_field = $_match_field = $args['key'];
3558
+
3559
+        if ( $match_field == 'address' ) {
3560
+            $match_field = 'street';
3561
+        } elseif ( $match_field == 'post_images' ) {
3562
+            $match_field = 'featured_image';
3563
+        }
3564
+
3565
+        $find_post = $gd_post;
3566
+        $find_post_keys = ! empty( $find_post ) ? array_keys( (array) $find_post ) : array();
3567
+
3568
+        if ( ! empty( $find_post->ID ) && ! in_array( 'post_category', $find_post_keys ) ) {
3569
+            $find_post = geodir_get_post_info( (int) $find_post->ID );
3570
+            $find_post_keys = ! empty( $find_post ) ? array_keys( (array) $find_post ) : array();
3571
+        }
3572
+
3573
+        if ( $match_field === '' || ( ! empty( $find_post_keys ) && ( in_array( $match_field, $find_post_keys ) || in_array( $_match_field, $find_post_keys ) ) ) ) {
3574
+            $address_fields = array( 'street2', 'neighbourhood', 'city', 'region', 'country', 'zip', 'latitude', 'longitude' ); // Address fields
3575
+            $field = array();
3576
+            $empty_field = false;
3577
+
3578
+            $standard_fields = sd_visibility_gd_standard_fields();
3579
+
3580
+            if ( $match_field && ! in_array( $match_field, array_keys( $standard_fields ) ) && ! in_array( $match_field, $address_fields ) ) {
3581
+                $package_id = geodir_get_post_package_id( $find_post->ID, $find_post->post_type );
3582
+                $fields = geodir_post_custom_fields( $package_id, 'all', $find_post->post_type, 'none' );
3583
+
3584
+                foreach ( $fields as $field_info ) {
3585
+                    if ( $match_field == $field_info['htmlvar_name'] ) {
3586
+                        $field = $field_info;
3587
+                        break;
3588
+                    } elseif( $_match_field == $field_info['htmlvar_name'] ) {
3589
+                        $field = $field_info;
3590
+                        break;
3591
+                    }
3592
+                }
3593
+
3594
+                if ( empty( $field ) ) {
3595
+                    $empty_field = true;
3596
+                }
3597
+            }
3598
+
3599
+            // Address fields.
3600
+            if ( in_array( $match_field, $address_fields ) && ( $address_fields = geodir_post_meta_address_fields( '' ) ) ) {
3601
+                if ( ! empty( $address_fields[ $match_field ] ) ) {
3602
+                    $field = $address_fields[ $match_field ];
3603
+                }
3604
+            } else if ( in_array( $match_field, array_keys( $standard_fields ) ) ) {
3605
+                if ( ! empty( $standard_fields[ $match_field ] ) ) {
3606
+                    $field = $standard_fields[ $match_field ];
3607
+                }
3608
+            }
3609
+
3610
+            // Parse search.
3611
+            $search = sd_gd_field_rule_search( $args['search'], $find_post->post_type, $rule, $field, $find_post );
3612
+
3613
+            $is_date = ( ! empty( $field['type'] ) && $field['type'] == 'datepicker' ) || in_array( $match_field, array( 'post_date', 'post_modified' ) ) ? true : false;
3614
+            $is_date = apply_filters( 'geodir_post_badge_is_date', $is_date, $match_field, $field, $args, $find_post );
3615
+
3616
+            $match_value = isset( $find_post->{$match_field} ) && empty( $empty_field ) ? esc_attr( trim( $find_post->{$match_field} ) ) : '';
3617
+            $match_found = $match_field === '' ? true : false;
3618
+
3619
+            if ( ! $match_found ) {
3620
+                if ( ( $match_field == 'post_date' || $match_field == 'post_modified' ) && ( empty( $args['condition'] ) || $args['condition'] == 'is_greater_than' || $args['condition'] == 'is_less_than' ) ) {
3621
+                    if ( strpos( $search, '+' ) === false && strpos( $search, '-' ) === false ) {
3622
+                        $search = '+' . $search;
3623
+                    }
3624
+                    $the_time = $match_field == 'post_modified' ? get_the_modified_date( 'Y-m-d', $find_post ) : get_the_time( 'Y-m-d', $find_post );
3625
+                    $until_time = strtotime( $the_time . ' ' . $search . ' days' );
3626
+                    $now_time   = strtotime( date_i18n( 'Y-m-d', current_time( 'timestamp' ) ) );
3627
+                    if ( ( empty( $args['condition'] ) || $args['condition'] == 'is_less_than' ) && $until_time > $now_time ) {
3628
+                        $match_found = true;
3629
+                    } elseif ( $args['condition'] == 'is_greater_than' && $until_time < $now_time ) {
3630
+                        $match_found = true;
3631
+                    }
3632
+                } else {
3633
+                    switch ( $args['condition'] ) {
3634
+                        case 'is_equal':
3635
+                            $match_found = (bool) ( $search != '' && $match_value == $search );
3636
+                            break;
3637
+                        case 'is_not_equal':
3638
+                            $match_found = (bool) ( $search != '' && $match_value != $search );
3639
+                            break;
3640
+                        case 'is_greater_than':
3641
+                            $match_found = (bool) ( $search != '' && ( is_float( $search ) || is_numeric( $search ) ) && ( is_float( $match_value ) || is_numeric( $match_value ) ) && $match_value > $search );
3642
+                            break;
3643
+                        case 'is_less_than':
3644
+                            $match_found = (bool) ( $search != '' && ( is_float( $search ) || is_numeric( $search ) ) && ( is_float( $match_value ) || is_numeric( $match_value ) ) && $match_value < $search );
3645
+                            break;
3646
+                        case 'is_empty':
3647
+                            $match_found = (bool) ( $match_value === '' || $match_value === false || $match_value === '0' || is_null( $match_value ) );
3648
+                            break;
3649
+                        case 'is_not_empty':
3650
+                            $match_found = (bool) ( $match_value !== '' && $match_value !== false && $match_value !== '0' && ! is_null( $match_value ) );
3651
+                            break;
3652
+                        case 'is_contains':
3653
+                            $match_found = (bool) ( $search != '' && stripos( $match_value, $search ) !== false );
3654
+                            break;
3655
+                        case 'is_not_contains':
3656
+                            $match_found = (bool) ( $search != '' && stripos( $match_value, $search ) === false );
3657
+                            break;
3658
+                    }
3659
+                }
3660
+            }
3661
+
3662
+            $match_found = apply_filters( 'geodir_post_badge_check_match_found', $match_found, $args, $find_post );
3663
+        } else {
3664
+            $field = array();
3665
+
3666
+            // Parse search.
3667
+            $search = sd_gd_field_rule_search( $args['search'], $find_post->post_type, $rule, $field, $find_post );
3668
+
3669
+            $match_value = '';
3670
+            $match_found = $match_field === '' ? true : false;
3671
+
3672
+            if ( ! $match_found ) {
3673
+                switch ( $args['condition'] ) {
3674
+                    case 'is_equal':
3675
+                        $match_found = (bool) ( $search != '' && $match_value == $search );
3676
+                        break;
3677
+                    case 'is_not_equal':
3678
+                        $match_found = (bool) ( $search != '' && $match_value != $search );
3679
+                        break;
3680
+                    case 'is_greater_than':
3681
+                        $match_found = false;
3682
+                        break;
3683
+                    case 'is_less_than':
3684
+                        $match_found = false;
3685
+                        break;
3686
+                    case 'is_empty':
3687
+                        $match_found = true;
3688
+                        break;
3689
+                    case 'is_not_empty':
3690
+                        $match_found = false;
3691
+                        break;
3692
+                    case 'is_contains':
3693
+                        $match_found = false;
3694
+                        break;
3695
+                    case 'is_not_contains':
3696
+                        $match_found = false;
3697
+                        break;
3698
+                }
3699
+            }
3700
+
3701
+            $match_found = apply_filters( 'geodir_post_badge_check_match_found_empty', $match_found, $args, $find_post );
3702
+        }
3703
+    }
3704
+
3705
+    return $match_found;
3706 3706
 }
3707 3707
 
3708 3708
 function sd_gd_field_rule_search( $search, $post_type, $rule, $field = array(), $gd_post = array() ) {
3709
-	global $post;
3710
-
3711
-	if ( ! $search ) {
3712
-		return $search;
3713
-	}
3714
-
3715
-	$orig_search = $search;
3716
-	$_search = strtolower( $search );
3717
-
3718
-	if ( ! empty( $rule['field'] ) && $rule['field'] == 'post_author' ) {
3719
-		if ( $search == 'current_user' ) {
3720
-			$search = is_user_logged_in() ? (int) get_current_user_id() : - 1;
3721
-		} else if ( $search == 'current_author' ) {
3722
-			$search = ( ! empty( $post ) && $post->post_type != 'page' && isset( $post->post_author ) ) ? absint( $post->post_author ) : - 1;
3723
-		}
3724
-	} else if ( $_search == 'date_today' ) {
3725
-		$search = date( 'Y-m-d' );
3726
-	} else if ( $_search == 'date_tomorrow' ) {
3727
-		$search = date( 'Y-m-d', strtotime( "+1 day" ) );
3728
-	} else if ( $_search == 'date_yesterday' ) {
3729
-		$search = date( 'Y-m-d', strtotime( "-1 day" ) );
3730
-	} else if ( $_search == 'time_his' ) {
3731
-		$search = date( 'H:i:s' );
3732
-	} else if ( $_search == 'time_hi' ) {
3733
-		$search = date( 'H:i' );
3734
-	} else if ( $_search == 'datetime_now' ) {
3735
-		$search = date( 'Y-m-d H:i:s' );
3736
-	} else if ( strpos( $_search, 'datetime_after_' ) === 0 ) {
3737
-		$_searches = explode( 'datetime_after_', $_search, 2 );
3738
-
3739
-		if ( ! empty( $_searches[1] ) ) {
3740
-			$search = date( 'Y-m-d H:i:s', strtotime( "+ " . str_replace( "_", " ", $_searches[1] ) ) );
3741
-		} else {
3742
-			$search = date( 'Y-m-d H:i:s' );
3743
-		}
3744
-	} else if ( strpos( $_search, 'datetime_before_' ) === 0 ) {
3745
-		$_searches = explode( 'datetime_before_', $_search, 2 );
3746
-
3747
-		if ( ! empty( $_searches[1] ) ) {
3748
-			$search = date( 'Y-m-d H:i:s', strtotime( "- " . str_replace( "_", " ", $_searches[1] ) ) );
3749
-		} else {
3750
-			$search = date( 'Y-m-d H:i:s' );
3751
-		}
3752
-	} else if ( strpos( $_search, 'date_after_' ) === 0 ) {
3753
-		$_searches = explode( 'date_after_', $_search, 2 );
3754
-
3755
-		if ( ! empty( $_searches[1] ) ) {
3756
-			$search = date( 'Y-m-d', strtotime( "+ " . str_replace( "_", " ", $_searches[1] ) ) );
3757
-		} else {
3758
-			$search = date( 'Y-m-d' );
3759
-		}
3760
-	} else if ( strpos( $_search, 'date_before_' ) === 0 ) {
3761
-		$_searches = explode( 'date_before_', $_search, 2 );
3762
-
3763
-		if ( ! empty( $_searches[1] ) ) {
3764
-			$search = date( 'Y-m-d', strtotime( "- " . str_replace( "_", " ", $_searches[1] ) ) );
3765
-		} else {
3766
-			$search = date( 'Y-m-d' );
3767
-		}
3768
-	}
3769
-
3770
-	return apply_filters( 'sd_gd_field_rule_search', $search, $post_type, $rule, $orig_search );
3709
+    global $post;
3710
+
3711
+    if ( ! $search ) {
3712
+        return $search;
3713
+    }
3714
+
3715
+    $orig_search = $search;
3716
+    $_search = strtolower( $search );
3717
+
3718
+    if ( ! empty( $rule['field'] ) && $rule['field'] == 'post_author' ) {
3719
+        if ( $search == 'current_user' ) {
3720
+            $search = is_user_logged_in() ? (int) get_current_user_id() : - 1;
3721
+        } else if ( $search == 'current_author' ) {
3722
+            $search = ( ! empty( $post ) && $post->post_type != 'page' && isset( $post->post_author ) ) ? absint( $post->post_author ) : - 1;
3723
+        }
3724
+    } else if ( $_search == 'date_today' ) {
3725
+        $search = date( 'Y-m-d' );
3726
+    } else if ( $_search == 'date_tomorrow' ) {
3727
+        $search = date( 'Y-m-d', strtotime( "+1 day" ) );
3728
+    } else if ( $_search == 'date_yesterday' ) {
3729
+        $search = date( 'Y-m-d', strtotime( "-1 day" ) );
3730
+    } else if ( $_search == 'time_his' ) {
3731
+        $search = date( 'H:i:s' );
3732
+    } else if ( $_search == 'time_hi' ) {
3733
+        $search = date( 'H:i' );
3734
+    } else if ( $_search == 'datetime_now' ) {
3735
+        $search = date( 'Y-m-d H:i:s' );
3736
+    } else if ( strpos( $_search, 'datetime_after_' ) === 0 ) {
3737
+        $_searches = explode( 'datetime_after_', $_search, 2 );
3738
+
3739
+        if ( ! empty( $_searches[1] ) ) {
3740
+            $search = date( 'Y-m-d H:i:s', strtotime( "+ " . str_replace( "_", " ", $_searches[1] ) ) );
3741
+        } else {
3742
+            $search = date( 'Y-m-d H:i:s' );
3743
+        }
3744
+    } else if ( strpos( $_search, 'datetime_before_' ) === 0 ) {
3745
+        $_searches = explode( 'datetime_before_', $_search, 2 );
3746
+
3747
+        if ( ! empty( $_searches[1] ) ) {
3748
+            $search = date( 'Y-m-d H:i:s', strtotime( "- " . str_replace( "_", " ", $_searches[1] ) ) );
3749
+        } else {
3750
+            $search = date( 'Y-m-d H:i:s' );
3751
+        }
3752
+    } else if ( strpos( $_search, 'date_after_' ) === 0 ) {
3753
+        $_searches = explode( 'date_after_', $_search, 2 );
3754
+
3755
+        if ( ! empty( $_searches[1] ) ) {
3756
+            $search = date( 'Y-m-d', strtotime( "+ " . str_replace( "_", " ", $_searches[1] ) ) );
3757
+        } else {
3758
+            $search = date( 'Y-m-d' );
3759
+        }
3760
+    } else if ( strpos( $_search, 'date_before_' ) === 0 ) {
3761
+        $_searches = explode( 'date_before_', $_search, 2 );
3762
+
3763
+        if ( ! empty( $_searches[1] ) ) {
3764
+            $search = date( 'Y-m-d', strtotime( "- " . str_replace( "_", " ", $_searches[1] ) ) );
3765
+        } else {
3766
+            $search = date( 'Y-m-d' );
3767
+        }
3768
+    }
3769
+
3770
+    return apply_filters( 'sd_gd_field_rule_search', $search, $post_type, $rule, $orig_search );
3771 3771
 }
3772 3772
 
3773 3773
 
3774 3774
 if(!function_exists('sd_blocks_render_blocks')){
3775
-	/**
3776
-	 * Add the shortcodes to the block content if set as an attribute.
3777
-	 *
3778
-	 * We have moved the shortcodes from the block content to a block argument to help prevent broken blocks.
3779
-	 *
3780
-	 * @param $block_content
3781
-	 * @param $parsed_block
3782
-	 * @param $thiss
3783
-	 * @return mixed|string
3784
-	 */
3785
-	function sd_blocks_render_blocks($block_content, $parsed_block, $thiss = array() ){
3786
-		// Check hide block visibility conditions.
3787
-		if ( ! empty( $parsed_block ) && ! empty( $parsed_block['attrs']['visibility_conditions'] ) && $block_content && strpos( strrev( $block_content ), strrev( ' sd-block-has-rule sd-block-hide-rule"></div>' ) ) === 0 && ! empty( $thiss ) && $thiss->name ) {
3788
-			$match_content = '<div class="' . esc_attr( wp_get_block_default_classname( $thiss->name ) ) . ' sd-block-has-rule sd-block-hide-rule"></div>';
3789
-
3790
-			// Return empty content to hide block.
3791
-			if ( $block_content == $match_content ) {
3792
-				return '';
3793
-			}
3794
-		}
3795
-
3796
-		// Check if ita a nested block that needs to be wrapped
3797
-		if(! empty($parsed_block['attrs']['sd_shortcode_close'])){
3798
-			$content = isset($parsed_block['attrs']['html']) ? $parsed_block['attrs']['html'] : $block_content;
3799
-			$block_content = $parsed_block['attrs']['sd_shortcode'].$content.$parsed_block['attrs']['sd_shortcode_close'];
3800
-
3801
-			$block_content = do_shortcode($block_content);
3802
-
3803
-		}elseif(! empty($parsed_block['attrs']['sd_shortcode'])){
3804
-			$has_warp = false;
3805
-			if($block_content && strpos(trim($block_content), '<div class="wp-block-') === 0 ){
3806
-				$parts = explode('></', $block_content);
3807
-				if(count($parts) === 2){
3808
-					$block_content = $parts[0].'>'.$parsed_block['attrs']['sd_shortcode'].'</'.$parts[1];
3809
-					$has_warp = true;
3810
-				}
3811
-			}
3812
-			if (!$has_warp) {
3813
-				// Add the shortcode if its not a wrapped block
3814
-				$block_content .= $parsed_block['attrs']['sd_shortcode'];
3815
-			}
3816
-
3817
-			$block_content = do_shortcode($block_content);
3818
-		}
3819
-		return  $block_content;
3820
-	}
3775
+    /**
3776
+     * Add the shortcodes to the block content if set as an attribute.
3777
+     *
3778
+     * We have moved the shortcodes from the block content to a block argument to help prevent broken blocks.
3779
+     *
3780
+     * @param $block_content
3781
+     * @param $parsed_block
3782
+     * @param $thiss
3783
+     * @return mixed|string
3784
+     */
3785
+    function sd_blocks_render_blocks($block_content, $parsed_block, $thiss = array() ){
3786
+        // Check hide block visibility conditions.
3787
+        if ( ! empty( $parsed_block ) && ! empty( $parsed_block['attrs']['visibility_conditions'] ) && $block_content && strpos( strrev( $block_content ), strrev( ' sd-block-has-rule sd-block-hide-rule"></div>' ) ) === 0 && ! empty( $thiss ) && $thiss->name ) {
3788
+            $match_content = '<div class="' . esc_attr( wp_get_block_default_classname( $thiss->name ) ) . ' sd-block-has-rule sd-block-hide-rule"></div>';
3789
+
3790
+            // Return empty content to hide block.
3791
+            if ( $block_content == $match_content ) {
3792
+                return '';
3793
+            }
3794
+        }
3795
+
3796
+        // Check if ita a nested block that needs to be wrapped
3797
+        if(! empty($parsed_block['attrs']['sd_shortcode_close'])){
3798
+            $content = isset($parsed_block['attrs']['html']) ? $parsed_block['attrs']['html'] : $block_content;
3799
+            $block_content = $parsed_block['attrs']['sd_shortcode'].$content.$parsed_block['attrs']['sd_shortcode_close'];
3800
+
3801
+            $block_content = do_shortcode($block_content);
3802
+
3803
+        }elseif(! empty($parsed_block['attrs']['sd_shortcode'])){
3804
+            $has_warp = false;
3805
+            if($block_content && strpos(trim($block_content), '<div class="wp-block-') === 0 ){
3806
+                $parts = explode('></', $block_content);
3807
+                if(count($parts) === 2){
3808
+                    $block_content = $parts[0].'>'.$parsed_block['attrs']['sd_shortcode'].'</'.$parts[1];
3809
+                    $has_warp = true;
3810
+                }
3811
+            }
3812
+            if (!$has_warp) {
3813
+                // Add the shortcode if its not a wrapped block
3814
+                $block_content .= $parsed_block['attrs']['sd_shortcode'];
3815
+            }
3816
+
3817
+            $block_content = do_shortcode($block_content);
3818
+        }
3819
+        return  $block_content;
3820
+    }
3821 3821
 }
3822 3822
 
3823 3823
 add_filter('render_block', 'sd_blocks_render_blocks',10,3);
Please login to merge, or discard this patch.