Passed
Push — master ( 00e057...ec92a8 )
by Kiran
11:22 queued 05:04
created
includes/reports/class-getpaid-graph-downloader.php 1 patch
Indentation   +202 added lines, -202 removed lines patch added patch discarded remove patch
@@ -12,218 +12,218 @@
 block discarded – undo
12 12
  */
13 13
 class GetPaid_Graph_Downloader {
14 14
 
15
-	/**
16
-	 * @var GetPaid_Reports_Report
17
-	 */
18
-	public $handler;
19
-
20
-	/**
21
-	 * Class constructor.
22
-	 *
23
-	 */
24
-	public function __construct() {
25
-		$this->handler = new GetPaid_Reports_Report();
26
-	}
27
-
28
-	/**
29
-	 * Prepares the datastore handler.
30
-	 *
31
-	 * @return GetPaid_Reports_Report_Items|GetPaid_Reports_Report_Gateways|GetPaid_Reports_Report_Discounts
32
-	 */
33
-	public function prepare_handler( $graph ) {
34
-
35
-		if ( empty( $this->handler->views[ $graph ] ) ) {
36
-			wp_die( esc_html__( 'Invalid Graph', 'invoicing' ), 400 );
37
-		}
38
-
39
-		return new $this->handler->views[ $graph ]['class']();
40
-
41
-	}
42
-
43
-	/**
44
-	 * Prepares the output stream.
45
-	 *
46
-	 * @return resource
47
-	 */
48
-	public function prepare_output() {
49
-
50
-		$output  = fopen( 'php://output', 'w' );
51
-
52
-		if ( false === $output ) {
53
-			wp_die( esc_html__( 'Unsupported server', 'invoicing' ), 500 );
54
-		}
55
-
56
-		return $output;
57
-	}
58
-
59
-	/**
60
-	 * Prepares the file type.
61
-	 *
62
-	 * @return string
63
-	 */
64
-	public function prepare_file_type( $graph ) {
65
-
66
-		$file_type = empty( $_REQUEST['file_type'] ) ? 'csv' : sanitize_text_field( $_REQUEST['file_type'] );
67
-		$file_name = wpinv_sanitize_key( "getpaid-$graph-" . current_time( 'Y-m-d' ) );
68
-
69
-		header( "Content-Type:application/$file_type" );
70
-		header( "Content-Disposition:attachment;filename=$file_name.$file_type" );
71
-
72
-		return $file_type;
73
-	}
74
-
75
-	/**
76
-	 * Handles the actual download.
77
-	 *
78
-	 */
79
-	public function download( $graph ) {
80
-		global $wpdb;
81
-
82
-		$handler   = $this->prepare_handler( $graph );
83
-		$stream    = $this->prepare_output();
84
-		$stats     = $wpdb->get_results( $handler->get_sql( $handler->get_range() ) );
85
-		$headers   = array( $handler->field, 'total', 'total_raw' );
86
-		$file_type = $this->prepare_file_type( $graph );
87
-
88
-		if ( 'csv' == $file_type ) {
89
-			$this->download_csv( $stats, $stream, $headers );
90
-		} elseif ( 'xml' == $file_type ) {
91
-			$this->download_xml( $stats, $stream, $headers );
92
-		} else {
93
-			$this->download_json( $stats, $stream, $headers );
94
-		}
95
-
96
-		fclose( $stream );
97
-		exit;
98
-	}
99
-
100
-	/**
101
-	 * Downloads graph as csv
102
-	 *
103
-	 * @param array $stats The stats being downloaded.
104
-	 * @param resource $stream The stream to output to.
105
-	 * @param array $headers The fields to stream.
106
-	 * @since       1.0.19
107
-	 */
108
-	public function download_csv( $stats, $stream, $headers ) {
109
-
110
-		// Output the csv column headers.
111
-		fputcsv( $stream, $headers );
112
-
113
-		// Loop through
114
-		foreach ( $stats as $stat ) {
115
-			$row  = array_values( $this->prepare_row( $stat, $headers ) );
116
-			$row  = array_map( 'maybe_serialize', $row );
117
-			fputcsv( $stream, $row );
118
-		}
119
-
120
-	}
121
-
122
-	/**
123
-	 * Downloads graph as json
124
-	 *
125
-	 * @param array $stats The stats being downloaded.
126
-	 * @param resource $stream The stream to output to.
127
-	 * @param array $headers The fields to stream.
128
-	 * @since       1.0.19
129
-	 */
130
-	public function download_json( $stats, $stream, $headers ) {
131
-
132
-		$prepared = array();
133
-
134
-		// Loop through
135
-		foreach ( $stats as $stat ) {
136
-			$prepared[] = $this->prepare_row( $stat, $headers );
137
-		}
138
-
139
-		fwrite( $stream, wp_json_encode( $prepared ) );
140
-
141
-	}
142
-
143
-	/**
144
-	 * Downloads graph as xml
145
-	 *
146
-	 * @param array $stats The stats being downloaded.
147
-	 * @param resource $stream The stream to output to.
148
-	 * @param array $headers The fields to stream.
149
-	 * @since       1.0.19
150
-	 */
151
-	public function download_xml( $stats, $stream, $headers ) {
152
-
153
-		$prepared = array();
154
-
155
-		// Loop through
156
-		foreach ( $stats as $stat ) {
157
-			$prepared[] = $this->prepare_row( $stat, $headers );
158
-		}
159
-
160
-		$xml = new SimpleXMLElement( '<?xml version="1.0"?><data></data>' );
161
-		$this->convert_array_xml( $prepared, $xml );
162
-
163
-		fwrite( $stream, $xml->asXML() );
164
-
165
-	}
166
-
167
-	/**
168
-	 * Converts stats array to xml
169
-	 *
170
-	 * @access      public
171
-	 * @since      1.0.19
172
-	 */
173
-	public function convert_array_xml( $data, $xml ) {
174
-
175
-		// Loop through
176
-		foreach ( $data as $key => $value ) {
177
-
178
-			$key = preg_replace( '/[^A-Za-z0-9_\-]/', '', $key );
179
-
180
-			if ( is_array( $value ) ) {
181
-
182
-				if ( is_numeric( $key ) ) {
183
-					$key = 'item' . $key; //dealing with <0/>..<n/> issues
184
-				}
185
-
186
-				$subnode = $xml->addChild( $key );
187
-				$this->convert_array_xml( $value, $subnode );
188
-
189
-			} else {
190
-				$xml->addChild( $key, $value ?  htmlspecialchars( $value ) : $value );
191
-			}
15
+    /**
16
+     * @var GetPaid_Reports_Report
17
+     */
18
+    public $handler;
19
+
20
+    /**
21
+     * Class constructor.
22
+     *
23
+     */
24
+    public function __construct() {
25
+        $this->handler = new GetPaid_Reports_Report();
26
+    }
27
+
28
+    /**
29
+     * Prepares the datastore handler.
30
+     *
31
+     * @return GetPaid_Reports_Report_Items|GetPaid_Reports_Report_Gateways|GetPaid_Reports_Report_Discounts
32
+     */
33
+    public function prepare_handler( $graph ) {
34
+
35
+        if ( empty( $this->handler->views[ $graph ] ) ) {
36
+            wp_die( esc_html__( 'Invalid Graph', 'invoicing' ), 400 );
37
+        }
38
+
39
+        return new $this->handler->views[ $graph ]['class']();
40
+
41
+    }
42
+
43
+    /**
44
+     * Prepares the output stream.
45
+     *
46
+     * @return resource
47
+     */
48
+    public function prepare_output() {
49
+
50
+        $output  = fopen( 'php://output', 'w' );
51
+
52
+        if ( false === $output ) {
53
+            wp_die( esc_html__( 'Unsupported server', 'invoicing' ), 500 );
54
+        }
55
+
56
+        return $output;
57
+    }
58
+
59
+    /**
60
+     * Prepares the file type.
61
+     *
62
+     * @return string
63
+     */
64
+    public function prepare_file_type( $graph ) {
65
+
66
+        $file_type = empty( $_REQUEST['file_type'] ) ? 'csv' : sanitize_text_field( $_REQUEST['file_type'] );
67
+        $file_name = wpinv_sanitize_key( "getpaid-$graph-" . current_time( 'Y-m-d' ) );
68
+
69
+        header( "Content-Type:application/$file_type" );
70
+        header( "Content-Disposition:attachment;filename=$file_name.$file_type" );
71
+
72
+        return $file_type;
73
+    }
74
+
75
+    /**
76
+     * Handles the actual download.
77
+     *
78
+     */
79
+    public function download( $graph ) {
80
+        global $wpdb;
81
+
82
+        $handler   = $this->prepare_handler( $graph );
83
+        $stream    = $this->prepare_output();
84
+        $stats     = $wpdb->get_results( $handler->get_sql( $handler->get_range() ) );
85
+        $headers   = array( $handler->field, 'total', 'total_raw' );
86
+        $file_type = $this->prepare_file_type( $graph );
87
+
88
+        if ( 'csv' == $file_type ) {
89
+            $this->download_csv( $stats, $stream, $headers );
90
+        } elseif ( 'xml' == $file_type ) {
91
+            $this->download_xml( $stats, $stream, $headers );
92
+        } else {
93
+            $this->download_json( $stats, $stream, $headers );
94
+        }
95
+
96
+        fclose( $stream );
97
+        exit;
98
+    }
99
+
100
+    /**
101
+     * Downloads graph as csv
102
+     *
103
+     * @param array $stats The stats being downloaded.
104
+     * @param resource $stream The stream to output to.
105
+     * @param array $headers The fields to stream.
106
+     * @since       1.0.19
107
+     */
108
+    public function download_csv( $stats, $stream, $headers ) {
109
+
110
+        // Output the csv column headers.
111
+        fputcsv( $stream, $headers );
112
+
113
+        // Loop through
114
+        foreach ( $stats as $stat ) {
115
+            $row  = array_values( $this->prepare_row( $stat, $headers ) );
116
+            $row  = array_map( 'maybe_serialize', $row );
117
+            fputcsv( $stream, $row );
118
+        }
119
+
120
+    }
121
+
122
+    /**
123
+     * Downloads graph as json
124
+     *
125
+     * @param array $stats The stats being downloaded.
126
+     * @param resource $stream The stream to output to.
127
+     * @param array $headers The fields to stream.
128
+     * @since       1.0.19
129
+     */
130
+    public function download_json( $stats, $stream, $headers ) {
131
+
132
+        $prepared = array();
133
+
134
+        // Loop through
135
+        foreach ( $stats as $stat ) {
136
+            $prepared[] = $this->prepare_row( $stat, $headers );
137
+        }
138
+
139
+        fwrite( $stream, wp_json_encode( $prepared ) );
140
+
141
+    }
142
+
143
+    /**
144
+     * Downloads graph as xml
145
+     *
146
+     * @param array $stats The stats being downloaded.
147
+     * @param resource $stream The stream to output to.
148
+     * @param array $headers The fields to stream.
149
+     * @since       1.0.19
150
+     */
151
+    public function download_xml( $stats, $stream, $headers ) {
152
+
153
+        $prepared = array();
154
+
155
+        // Loop through
156
+        foreach ( $stats as $stat ) {
157
+            $prepared[] = $this->prepare_row( $stat, $headers );
158
+        }
159
+
160
+        $xml = new SimpleXMLElement( '<?xml version="1.0"?><data></data>' );
161
+        $this->convert_array_xml( $prepared, $xml );
162
+
163
+        fwrite( $stream, $xml->asXML() );
164
+
165
+    }
166
+
167
+    /**
168
+     * Converts stats array to xml
169
+     *
170
+     * @access      public
171
+     * @since      1.0.19
172
+     */
173
+    public function convert_array_xml( $data, $xml ) {
174
+
175
+        // Loop through
176
+        foreach ( $data as $key => $value ) {
177
+
178
+            $key = preg_replace( '/[^A-Za-z0-9_\-]/', '', $key );
179
+
180
+            if ( is_array( $value ) ) {
181
+
182
+                if ( is_numeric( $key ) ) {
183
+                    $key = 'item' . $key; //dealing with <0/>..<n/> issues
184
+                }
185
+
186
+                $subnode = $xml->addChild( $key );
187
+                $this->convert_array_xml( $value, $subnode );
188
+
189
+            } else {
190
+                $xml->addChild( $key, $value ?  htmlspecialchars( $value ) : $value );
191
+            }
192 192
 }
193 193
 
194
-	}
194
+    }
195 195
 
196
-	/**
197
-	 * Prepares a single row for download.
198
-	 *
199
-	 * @param stdClass|array $row The row to prepare..
200
-	 * @param array $fields The fields to stream.
201
-	 * @since       1.0.19
202
-	 * @return array
203
-	 */
204
-	public function prepare_row( $row, $fields ) {
196
+    /**
197
+     * Prepares a single row for download.
198
+     *
199
+     * @param stdClass|array $row The row to prepare..
200
+     * @param array $fields The fields to stream.
201
+     * @since       1.0.19
202
+     * @return array
203
+     */
204
+    public function prepare_row( $row, $fields ) {
205 205
 
206
-		$prepared = array();
207
-		$row      = (array) $row;
206
+        $prepared = array();
207
+        $row      = (array) $row;
208 208
 
209
-		foreach ( $fields as $field ) {
209
+        foreach ( $fields as $field ) {
210 210
 
211
-			if ( $field === 'total' ) {
212
-				$prepared[ $field ] = html_entity_decode( strip_tags( wpinv_price( $row['total'] ) ), ENT_QUOTES );
213
-				continue;
214
-			}
211
+            if ( $field === 'total' ) {
212
+                $prepared[ $field ] = html_entity_decode( strip_tags( wpinv_price( $row['total'] ) ), ENT_QUOTES );
213
+                continue;
214
+            }
215 215
 
216
-			if ( $field === 'total_raw' ) {
217
-				$prepared[ $field ] = wpinv_round_amount( wpinv_sanitize_amount( $row['total'] ) );
218
-				continue;
219
-			}
216
+            if ( $field === 'total_raw' ) {
217
+                $prepared[ $field ] = wpinv_round_amount( wpinv_sanitize_amount( $row['total'] ) );
218
+                continue;
219
+            }
220 220
 
221
-			$prepared[ $field ] = strip_tags( $row[ $field ] );
221
+            $prepared[ $field ] = strip_tags( $row[ $field ] );
222 222
 
223
-		}
223
+        }
224 224
 
225
-		return $prepared;
226
-	}
225
+        return $prepared;
226
+    }
227 227
 
228 228
 
229 229
 }
Please login to merge, or discard this patch.
includes/reports/class-getpaid-invoice-exporter.php 1 patch
Indentation   +232 added lines, -232 removed lines patch added patch discarded remove patch
@@ -12,236 +12,236 @@
 block discarded – undo
12 12
  */
13 13
 class GetPaid_Invoice_Exporter extends GetPaid_Graph_Downloader {
14 14
 
15
-	/**
16
-	 * Retrieves invoices query args.
17
-	 *
18
-	 * @param string $post_type post type to retrieve.
19
-	 * @param array $args Args to search for.
20
-	 * @return array
21
-	 */
22
-	public function get_invoice_query_args( $post_type, $args ) {
23
-
24
-		$query_args = array(
25
-			'post_type'              => $post_type,
26
-			'post_status'            => array_keys( wpinv_get_invoice_statuses( true, false, $post_type ) ),
27
-			'posts_per_page'         => -1,
28
-			'no_found_rows'          => true,
29
-			'update_post_term_cache' => false,
30
-			'fields'                 => 'ids',
31
-		);
32
-
33
-		if ( ! empty( $args['status'] ) && in_array( $args['status'], $query_args['post_status'], true ) ) {
34
-			$query_args['post_status'] = wpinv_clean( wpinv_parse_list( $args['status'] ) );
35
-		}
36
-
37
-		$date_query = array();
38
-		if ( ! empty( $args['to_date'] ) ) {
39
-			$date_query['before'] = wpinv_clean( $args['to_date'] );
40
-		}
41
-
42
-		if ( ! empty( $args['from_date'] ) ) {
43
-			$date_query['after'] = wpinv_clean( $args['from_date'] );
44
-		}
45
-
46
-		if ( ! empty( $date_query ) ) {
47
-			$date_query['inclusive']  = true;
48
-			$query_args['date_query'] = array( $date_query );
49
-		}
50
-
51
-		return $query_args;
52
-	}
53
-
54
-	/**
55
-	 * Retrieves invoices.
56
-	 *
57
-	 * @param array $query_args WP_Query args.
58
-	 * @return WPInv_Invoice[]
59
-	 */
60
-	public function get_invoices( $query_args ) {
61
-
62
-		// Get invoices.
63
-		$invoices = new WP_Query( $query_args );
64
-
65
-		// Prepare the results.
66
-		return array_map( 'wpinv_get_invoice', $invoices->posts );
67
-
68
-	}
69
-
70
-	/**
71
-	 * Handles the actual download.
72
-	 *
73
-	 */
74
-	public function export( $post_type, $args ) {
75
-
76
-		$invoices  = $this->get_invoices( $this->get_invoice_query_args( $post_type, $args ) );
77
-		$stream    = $this->prepare_output();
78
-		$headers   = $this->get_export_fields( $post_type );
79
-		$file_type = $this->prepare_file_type( strtolower( getpaid_get_post_type_label( $post_type ) ) );
80
-
81
-		if ( 'csv' == $file_type ) {
82
-			$this->download_csv( $invoices, $stream, $headers );
83
-		} elseif ( 'xml' == $file_type ) {
84
-			$this->download_xml( $invoices, $stream, $headers );
85
-		} else {
86
-			$this->download_json( $invoices, $stream, $headers );
87
-		}
88
-
89
-		fclose( $stream );
90
-		exit;
91
-	}
92
-
93
-	/**
94
-	 * Prepares a single invoice for download.
95
-	 *
96
-	 * @param WPInv_Invoice $invoice The invoice to prepare..
97
-	 * @param array $fields The fields to stream.
98
-	 * @since       1.0.19
99
-	 * @return array
100
-	 */
101
-	public function prepare_row( $invoice, $fields ) {
102
-
103
-		$prepared      = array();
104
-		$amount_fields = $this->get_amount_fields( $invoice->get_post_type() );
105
-		$meta_fields = $this->get_payment_form_meta( $invoice );
106
-
107
-		foreach ( $fields as $field ) {
108
-			$value  = '';
109
-			$method = "get_$field";
110
-
111
-			if ( method_exists( $invoice, $method ) ) {
112
-				$value  = $invoice->$method();
113
-			} else if( strpos( $field, '_' ) === 0 && isset( $meta_fields[ $field ] ) ) {
114
-				$value = $meta_fields[ $field ];
115
-			}
116
-
117
-			if ( in_array( $field, $amount_fields ) ) {
118
-				$value  = wpinv_round_amount( wpinv_sanitize_amount( $value ) );
119
-			}
120
-
121
-			$prepared[ $field ] = wpinv_clean( $value );
122
-
123
-		}
124
-
125
-		return $prepared;
126
-	}
127
-
128
-	/**
129
-	 * Retrieves export fields.
130
-	 *
131
-	 * @param string $post_type
132
-	 * @since       1.0.19
133
-	 * @return array
134
-	 */
135
-	public function get_export_fields( $post_type ) {
136
-
137
-		$fields = array(
138
-			'id',
139
-			'parent_id',
140
-			'status',
141
-			'date_created',
142
-			'date_modified',
143
-			'date_due',
144
-			'date_completed',
145
-			'number',
146
-			'key',
147
-			'description',
148
-			'post_type',
149
-			'mode',
150
-			'customer_id',
151
-			'customer_first_name',
152
-			'customer_last_name',
153
-			'customer_phone',
154
-			'customer_email',
155
-			'customer_country',
156
-			'customer_city',
157
-			'customer_state',
158
-			'customer_zip',
159
-			'customer_company',
160
-			'customer_vat_number',
161
-			'customer_address',
162
-			'subtotal',
163
-			'total_discount',
164
-			'total_tax',
165
-			'total_fees',
166
-			'fees',
167
-			'discounts',
168
-			'taxes',
169
-			'cart_details',
170
-			'item_ids',
171
-			'payment_form',
172
-			'discount_code',
173
-			'gateway',
174
-			'transaction_id',
175
-			'currency',
176
-			'disable_taxes',
177
-			'subscription_id',
178
-			'remote_subscription_id',
179
-			'is_viewed',
180
-			'email_cc',
181
-			'template',
182
-			'created_via',
183
-    	);
184
-
185
-		// Payment form meta fields.
186
-		$meta_fields = getpaid_get_payment_form_custom_fields();
187
-
188
-		if ( ! empty( $meta_fields ) ) {
189
-			foreach ( $meta_fields as $field_key => $field_label ) {
190
-				$fields[] = $field_key;
191
-			}
192
-		}
193
-
194
-		return apply_filters( 'getpaid_invoice_exporter_get_fields', $fields, $post_type );
195
-	}
196
-
197
-	/**
198
-	 * Retrieves amount fields.
199
-	 *
200
-	 * @param string $post_type
201
-	 * @since       1.0.19
202
-	 * @return array
203
-	 */
204
-	public function get_amount_fields( $post_type ) {
205
-
206
-		$fields = array(
207
-			'subtotal',
208
-			'total_discount',
209
-			'total_tax',
210
-			'total_fees',
211
-    	);
212
-
213
-		return apply_filters( 'getpaid_invoice_exporter_get_amount_fields', $fields, $post_type );
214
-	}
215
-
216
-	/**
217
-	 * Retrieves payment form meta fields.
218
-	 *
219
-	 * @since 2.8.23
220
-	 *
221
-	 * @return array
222
-	 */
223
-	public function get_payment_form_meta( $invoice ) {
224
-		// Payment form meta fields.
225
-		$field_keys = getpaid_get_payment_form_custom_fields();
226
-		$meta = get_post_meta( $invoice->get_id(), 'additional_meta_data', true );
227
-
228
-		$field_values = array();
229
-		if ( ! empty( $field_keys ) ) {
230
-			foreach ( $field_keys as $field_key => $field_label ) {
231
-				$value = '';
232
-
233
-				if ( ! empty( $meta ) ) {
234
-					foreach ( $meta as $meta_label => $meta_value ) {
235
-						if ( getpaid_strtolower( wpinv_clean( wp_unslash( $meta_label ) ) ) == getpaid_strtolower( $field_label ) ) {
236
-							$value = $meta_value;
237
-						}
238
-					}
239
-				}
240
-
241
-				$field_values[ $field_key ] = $value;
242
-			}
243
-		}
244
-
245
-		return $field_values;
246
-	}
15
+    /**
16
+     * Retrieves invoices query args.
17
+     *
18
+     * @param string $post_type post type to retrieve.
19
+     * @param array $args Args to search for.
20
+     * @return array
21
+     */
22
+    public function get_invoice_query_args( $post_type, $args ) {
23
+
24
+        $query_args = array(
25
+            'post_type'              => $post_type,
26
+            'post_status'            => array_keys( wpinv_get_invoice_statuses( true, false, $post_type ) ),
27
+            'posts_per_page'         => -1,
28
+            'no_found_rows'          => true,
29
+            'update_post_term_cache' => false,
30
+            'fields'                 => 'ids',
31
+        );
32
+
33
+        if ( ! empty( $args['status'] ) && in_array( $args['status'], $query_args['post_status'], true ) ) {
34
+            $query_args['post_status'] = wpinv_clean( wpinv_parse_list( $args['status'] ) );
35
+        }
36
+
37
+        $date_query = array();
38
+        if ( ! empty( $args['to_date'] ) ) {
39
+            $date_query['before'] = wpinv_clean( $args['to_date'] );
40
+        }
41
+
42
+        if ( ! empty( $args['from_date'] ) ) {
43
+            $date_query['after'] = wpinv_clean( $args['from_date'] );
44
+        }
45
+
46
+        if ( ! empty( $date_query ) ) {
47
+            $date_query['inclusive']  = true;
48
+            $query_args['date_query'] = array( $date_query );
49
+        }
50
+
51
+        return $query_args;
52
+    }
53
+
54
+    /**
55
+     * Retrieves invoices.
56
+     *
57
+     * @param array $query_args WP_Query args.
58
+     * @return WPInv_Invoice[]
59
+     */
60
+    public function get_invoices( $query_args ) {
61
+
62
+        // Get invoices.
63
+        $invoices = new WP_Query( $query_args );
64
+
65
+        // Prepare the results.
66
+        return array_map( 'wpinv_get_invoice', $invoices->posts );
67
+
68
+    }
69
+
70
+    /**
71
+     * Handles the actual download.
72
+     *
73
+     */
74
+    public function export( $post_type, $args ) {
75
+
76
+        $invoices  = $this->get_invoices( $this->get_invoice_query_args( $post_type, $args ) );
77
+        $stream    = $this->prepare_output();
78
+        $headers   = $this->get_export_fields( $post_type );
79
+        $file_type = $this->prepare_file_type( strtolower( getpaid_get_post_type_label( $post_type ) ) );
80
+
81
+        if ( 'csv' == $file_type ) {
82
+            $this->download_csv( $invoices, $stream, $headers );
83
+        } elseif ( 'xml' == $file_type ) {
84
+            $this->download_xml( $invoices, $stream, $headers );
85
+        } else {
86
+            $this->download_json( $invoices, $stream, $headers );
87
+        }
88
+
89
+        fclose( $stream );
90
+        exit;
91
+    }
92
+
93
+    /**
94
+     * Prepares a single invoice for download.
95
+     *
96
+     * @param WPInv_Invoice $invoice The invoice to prepare..
97
+     * @param array $fields The fields to stream.
98
+     * @since       1.0.19
99
+     * @return array
100
+     */
101
+    public function prepare_row( $invoice, $fields ) {
102
+
103
+        $prepared      = array();
104
+        $amount_fields = $this->get_amount_fields( $invoice->get_post_type() );
105
+        $meta_fields = $this->get_payment_form_meta( $invoice );
106
+
107
+        foreach ( $fields as $field ) {
108
+            $value  = '';
109
+            $method = "get_$field";
110
+
111
+            if ( method_exists( $invoice, $method ) ) {
112
+                $value  = $invoice->$method();
113
+            } else if( strpos( $field, '_' ) === 0 && isset( $meta_fields[ $field ] ) ) {
114
+                $value = $meta_fields[ $field ];
115
+            }
116
+
117
+            if ( in_array( $field, $amount_fields ) ) {
118
+                $value  = wpinv_round_amount( wpinv_sanitize_amount( $value ) );
119
+            }
120
+
121
+            $prepared[ $field ] = wpinv_clean( $value );
122
+
123
+        }
124
+
125
+        return $prepared;
126
+    }
127
+
128
+    /**
129
+     * Retrieves export fields.
130
+     *
131
+     * @param string $post_type
132
+     * @since       1.0.19
133
+     * @return array
134
+     */
135
+    public function get_export_fields( $post_type ) {
136
+
137
+        $fields = array(
138
+            'id',
139
+            'parent_id',
140
+            'status',
141
+            'date_created',
142
+            'date_modified',
143
+            'date_due',
144
+            'date_completed',
145
+            'number',
146
+            'key',
147
+            'description',
148
+            'post_type',
149
+            'mode',
150
+            'customer_id',
151
+            'customer_first_name',
152
+            'customer_last_name',
153
+            'customer_phone',
154
+            'customer_email',
155
+            'customer_country',
156
+            'customer_city',
157
+            'customer_state',
158
+            'customer_zip',
159
+            'customer_company',
160
+            'customer_vat_number',
161
+            'customer_address',
162
+            'subtotal',
163
+            'total_discount',
164
+            'total_tax',
165
+            'total_fees',
166
+            'fees',
167
+            'discounts',
168
+            'taxes',
169
+            'cart_details',
170
+            'item_ids',
171
+            'payment_form',
172
+            'discount_code',
173
+            'gateway',
174
+            'transaction_id',
175
+            'currency',
176
+            'disable_taxes',
177
+            'subscription_id',
178
+            'remote_subscription_id',
179
+            'is_viewed',
180
+            'email_cc',
181
+            'template',
182
+            'created_via',
183
+        );
184
+
185
+        // Payment form meta fields.
186
+        $meta_fields = getpaid_get_payment_form_custom_fields();
187
+
188
+        if ( ! empty( $meta_fields ) ) {
189
+            foreach ( $meta_fields as $field_key => $field_label ) {
190
+                $fields[] = $field_key;
191
+            }
192
+        }
193
+
194
+        return apply_filters( 'getpaid_invoice_exporter_get_fields', $fields, $post_type );
195
+    }
196
+
197
+    /**
198
+     * Retrieves amount fields.
199
+     *
200
+     * @param string $post_type
201
+     * @since       1.0.19
202
+     * @return array
203
+     */
204
+    public function get_amount_fields( $post_type ) {
205
+
206
+        $fields = array(
207
+            'subtotal',
208
+            'total_discount',
209
+            'total_tax',
210
+            'total_fees',
211
+        );
212
+
213
+        return apply_filters( 'getpaid_invoice_exporter_get_amount_fields', $fields, $post_type );
214
+    }
215
+
216
+    /**
217
+     * Retrieves payment form meta fields.
218
+     *
219
+     * @since 2.8.23
220
+     *
221
+     * @return array
222
+     */
223
+    public function get_payment_form_meta( $invoice ) {
224
+        // Payment form meta fields.
225
+        $field_keys = getpaid_get_payment_form_custom_fields();
226
+        $meta = get_post_meta( $invoice->get_id(), 'additional_meta_data', true );
227
+
228
+        $field_values = array();
229
+        if ( ! empty( $field_keys ) ) {
230
+            foreach ( $field_keys as $field_key => $field_label ) {
231
+                $value = '';
232
+
233
+                if ( ! empty( $meta ) ) {
234
+                    foreach ( $meta as $meta_label => $meta_value ) {
235
+                        if ( getpaid_strtolower( wpinv_clean( wp_unslash( $meta_label ) ) ) == getpaid_strtolower( $field_label ) ) {
236
+                            $value = $meta_value;
237
+                        }
238
+                    }
239
+                }
240
+
241
+                $field_values[ $field_key ] = $value;
242
+            }
243
+        }
244
+
245
+        return $field_values;
246
+    }
247 247
 }
Please login to merge, or discard this patch.
includes/gateways/class-getpaid-paypal-api.php 1 patch
Indentation   +214 added lines, -214 removed lines patch added patch discarded remove patch
@@ -10,227 +10,227 @@
 block discarded – undo
10 10
  */
11 11
 class GetPaid_PayPal_API {
12 12
 
13
-	/**
14
-	 * Retrieves the bearer token.
15
-	 *
13
+    /**
14
+     * Retrieves the bearer token.
15
+     *
16 16
      * @return string|\WP_Error
17
-	 */
18
-	public static function get_token( $mode = 'live' ) {
17
+     */
18
+    public static function get_token( $mode = 'live' ) {
19 19
 
20
-		$token = get_transient( 'getpaid_paypal_' . $mode . '_token' );
20
+        $token = get_transient( 'getpaid_paypal_' . $mode . '_token' );
21 21
 
22
-		if ( $token ) {
23
-			return $token;
24
-		}
22
+        if ( $token ) {
23
+            return $token;
24
+        }
25 25
 
26
-		$client_id  = 'live' === $mode ? wpinv_get_option( 'paypal_client_id' ) : wpinv_get_option( 'paypal_sandbox_client_id' );
27
-		$secret_key = 'live' === $mode ? wpinv_get_option( 'paypal_secret' ) : wpinv_get_option( 'paypal_sandbox_secret' );
28
-		$url        = self::get_api_url( 'v1/oauth2/token?grant_type=client_credentials', $mode );
26
+        $client_id  = 'live' === $mode ? wpinv_get_option( 'paypal_client_id' ) : wpinv_get_option( 'paypal_sandbox_client_id' );
27
+        $secret_key = 'live' === $mode ? wpinv_get_option( 'paypal_secret' ) : wpinv_get_option( 'paypal_sandbox_secret' );
28
+        $url        = self::get_api_url( 'v1/oauth2/token?grant_type=client_credentials', $mode );
29 29
 
30 30
         if ( empty( $client_id ) || empty( $secret_key ) ) {
31 31
             return new \WP_Error( 'invalid_request', 'Missing client id or secret key.', array( 'status' => 400 ) );
32 32
         }
33 33
 
34
-		$args   = array(
35
-			'method'  => 'POST',
36
-			'timeout' => 30,
37
-			'headers' => array(
38
-				'Authorization' => 'Basic ' . base64_encode( $client_id . ':' . $secret_key ), // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_encode
39
-				'Accept'        => 'application/json',
40
-				'Content-Type'  => 'application/x-www-form-urlencoded',
41
-			),
42
-		);
43
-
44
-		$response = self::response_or_error( wp_remote_post( $url, $args ) );
45
-
46
-		if ( is_wp_error( $response ) ) {
47
-			return $response;
48
-		}
49
-
50
-		if ( ! isset( $response->access_token ) ) {
51
-			return new \WP_Error( 'invalid_request', 'Could not create token.', array( 'status' => 400 ) );
52
-		}
53
-
54
-		set_transient( 'getpaid_paypal_' . $mode . '_token', $response->access_token, $response->expires_in - 600 );
55
-		return $response->access_token;
56
-	}
57
-
58
-	/**
59
-	 * Retrieves the PayPal API URL.
60
-	 *
61
-	 * @param string $endpoint
62
-	 * @return string
63
-	 */
64
-	public static function get_api_url( $endpoint = '', $mode = 'live'  ) {
65
-		$endpoint = ltrim( $endpoint, '/' );
66
-		return 'live' === $mode ? 'https://api-m.paypal.com/' . $endpoint : 'https://api-m.sandbox.paypal.com/' . $endpoint;
67
-	}
68
-
69
-	/**
70
-	 * Handles a post request.
71
-	 *
72
-	 * @param string $path The path to the endpoint.
73
-	 * @param mixed $data The data to send.
74
-	 * @param string $method The method to use.
75
-	 *
76
-	 * @return true|\WP_Error
77
-	 */
78
-	public static function post( $path, $data, $mode = 'live', $method = 'POST' ) {
79
-
80
-		$access_token = self::get_token( $mode );
81
-
82
-		if ( is_wp_error( $access_token ) ) {
83
-			return $access_token;
84
-		}
85
-
86
-		$url  = self::get_api_url( $path, $mode );
87
-		$args = array(
88
-			'method'  => $method,
89
-			'headers' => array(
90
-				'Authorization' => 'Bearer ' . $access_token,
91
-				'Content-Type'  => 'application/json',
92
-			),
93
-		);
94
-
95
-		if( ! empty( $data )) {
96
-			$args['body'] = wp_json_encode( $data );
97
-		}
98
-
99
-		return self::response_or_error( wp_remote_post( $url, $args ) );
100
-	}
101
-
102
-	/**
103
-	 * Handles a get request.
104
-	 *
105
-	 * @param string $path The path to the endpoint.
106
-	 * @param string $method
107
-	 * @return object|\WP_Error
108
-	 */
109
-	public static function get( $path, $mode = 'live', $method = 'GET' ) {
110
-
111
-		$access_token = self::get_token( $mode );
112
-
113
-		if ( is_wp_error( $access_token ) ) {
114
-			return $access_token;
115
-		}
116
-
117
-		$url  = self::get_api_url( $path, $mode );
118
-		$args = array(
119
-			'method'  => $method,
120
-			'headers' => array(
121
-				'Authorization' => 'Bearer ' . $access_token,
122
-			),
123
-		);
124
-
125
-		return self::response_or_error( wp_remote_get( $url, $args ) );
126
-	}
127
-
128
-	/**
129
-	 * Returns the response body
130
-	 *
131
-	 * @since 1.0.0
132
-	 * @version 1.0.0
133
-	 * @param \WP_Error|array $response
134
-	 * @return \WP_Error|object
135
-	 */
136
-	public static function response_or_error( $response ) {
137
-
138
-		if ( is_wp_error( $response ) ) {
139
-			return new \WP_Error( 'paypal_error', __( 'There was a problem connecting to the PayPal API endpoint.', 'invoicing' ) );
140
-		}
141
-
142
-		if ( empty( $response['body'] ) ) {
143
-			return true;
144
-		}
145
-
146
-		$response_body = json_decode( wp_remote_retrieve_body( $response ) );
147
-
148
-		if ( wp_remote_retrieve_response_code( $response ) > 299 ) {
149
-
150
-			// Normal errors.
151
-			if ( $response_body && isset( $response_body->message ) ) {
152
-				$error_message = $response_body->message;
153
-
154
-			// Identity errors.
155
-			} elseif ( $response_body && isset( $response_body->error_description ) ) {
156
-				$error_message = $response_body->error_description;
157
-				return new \WP_Error( 'paypal_error', wp_kses_post( $response_body->error_description ) );
158
-			} else {
159
-				$error_message = __( 'There was an error connecting to the PayPal API endpoint.', 'invoicing' );
160
-			}
161
-
162
-			return new \WP_Error( 'paypal_error', $error_message );
163
-		}
164
-
165
-		return $response_body;
166
-	}
167
-
168
-	/**
169
-	 * Fetches an order.
170
-	 *
171
-	 * @since 1.0.0
172
-	 * @version 1.0.0
173
-	 * @param string $order_id
174
-	 * @link https://developer.paypal.com/docs/api/orders/v2/#orders_get
175
-	 * @return \WP_Error|object
176
-	 */
177
-	public static function get_order( $order_id, $mode = 'live' ) {
178
-		return self::get( '/v2/checkout/orders/' . $order_id, $mode );
179
-	}
180
-
181
-	/**
182
-	 * Fetches a subscription.
183
-	 *
184
-	 * @since 1.0.0
185
-	 * @version 1.0.0
186
-	 * @param string $subscription_id
187
-	 * @link https://developer.paypal.com/docs/api/subscriptions/v1/#subscriptions_get
188
-	 * @return \WP_Error|object
189
-	 */
190
-	public static function get_subscription( $subscription_id, $mode = 'live' ) {
191
-		return self::get( '/v1/billing/subscriptions/' . $subscription_id, $mode );
192
-	}
193
-
194
-	/**
195
-	 * Fetches a subscription's latest transactions (limits search to last one day).
196
-	 *
197
-	 * @since 1.0.0
198
-	 * @version 1.0.0
199
-	 * @param string $subscription_id
200
-	 * @link https://developer.paypal.com/docs/api/subscriptions/v1/#subscriptions_transactions
201
-	 * @return \WP_Error|object
202
-	 */
203
-	public static function get_subscription_transaction( $subscription_id, $mode = 'live' ) {
204
-		$start_time = gmdate( 'Y-m-d\TH:i:s\Z', strtotime( '-1 day' ) );
205
-		$end_time   = gmdate( 'Y-m-d\TH:i:s\Z' );
206
-		return self::get( "/v1/billing/subscriptions/$subscription_id/transactions?start_time=$start_time&end_time=$end_time", $mode );
207
-	}
208
-
209
-	/**
210
-	 * Refunds a capture.
211
-	 *
212
-	 * @since 1.0.0
213
-	 * @version 1.0.0
214
-	 * @param string $capture_id
215
-	 * @param array  $args
216
-	 * @link https://developer.paypal.com/docs/api/payments/v2/#captures_refund
217
-	 * @return \WP_Error|object
218
-	 */
219
-	public static function refund_capture( $capture_id, $args = array(), $mode = 'live' ) {
220
-		return self::post( '/v2/payments/captures/' . $capture_id . '/refund', $args, $mode );
221
-	}
222
-
223
-	/**
224
-	 * Cancels a subscription.
225
-	 *
226
-	 * @since 2.8.24
227
-	 * @version 2.8.24
228
-	 * @param string $subscription_id
229
-	 * @param array  $args
230
-	 * @link https://developer.paypal.com/docs/api/subscriptions/v1/#subscriptions_cancel
231
-	 * @return \WP_Error|object
232
-	 */
233
-	public static function cancel_subscription( $subscription_id, $args = array(), $mode = 'live' ) {
234
-		return self::post( '/v1/billing/subscriptions/' . $subscription_id . '/cancel', $args, $mode );
235
-	}
34
+        $args   = array(
35
+            'method'  => 'POST',
36
+            'timeout' => 30,
37
+            'headers' => array(
38
+                'Authorization' => 'Basic ' . base64_encode( $client_id . ':' . $secret_key ), // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_encode
39
+                'Accept'        => 'application/json',
40
+                'Content-Type'  => 'application/x-www-form-urlencoded',
41
+            ),
42
+        );
43
+
44
+        $response = self::response_or_error( wp_remote_post( $url, $args ) );
45
+
46
+        if ( is_wp_error( $response ) ) {
47
+            return $response;
48
+        }
49
+
50
+        if ( ! isset( $response->access_token ) ) {
51
+            return new \WP_Error( 'invalid_request', 'Could not create token.', array( 'status' => 400 ) );
52
+        }
53
+
54
+        set_transient( 'getpaid_paypal_' . $mode . '_token', $response->access_token, $response->expires_in - 600 );
55
+        return $response->access_token;
56
+    }
57
+
58
+    /**
59
+     * Retrieves the PayPal API URL.
60
+     *
61
+     * @param string $endpoint
62
+     * @return string
63
+     */
64
+    public static function get_api_url( $endpoint = '', $mode = 'live'  ) {
65
+        $endpoint = ltrim( $endpoint, '/' );
66
+        return 'live' === $mode ? 'https://api-m.paypal.com/' . $endpoint : 'https://api-m.sandbox.paypal.com/' . $endpoint;
67
+    }
68
+
69
+    /**
70
+     * Handles a post request.
71
+     *
72
+     * @param string $path The path to the endpoint.
73
+     * @param mixed $data The data to send.
74
+     * @param string $method The method to use.
75
+     *
76
+     * @return true|\WP_Error
77
+     */
78
+    public static function post( $path, $data, $mode = 'live', $method = 'POST' ) {
79
+
80
+        $access_token = self::get_token( $mode );
81
+
82
+        if ( is_wp_error( $access_token ) ) {
83
+            return $access_token;
84
+        }
85
+
86
+        $url  = self::get_api_url( $path, $mode );
87
+        $args = array(
88
+            'method'  => $method,
89
+            'headers' => array(
90
+                'Authorization' => 'Bearer ' . $access_token,
91
+                'Content-Type'  => 'application/json',
92
+            ),
93
+        );
94
+
95
+        if( ! empty( $data )) {
96
+            $args['body'] = wp_json_encode( $data );
97
+        }
98
+
99
+        return self::response_or_error( wp_remote_post( $url, $args ) );
100
+    }
101
+
102
+    /**
103
+     * Handles a get request.
104
+     *
105
+     * @param string $path The path to the endpoint.
106
+     * @param string $method
107
+     * @return object|\WP_Error
108
+     */
109
+    public static function get( $path, $mode = 'live', $method = 'GET' ) {
110
+
111
+        $access_token = self::get_token( $mode );
112
+
113
+        if ( is_wp_error( $access_token ) ) {
114
+            return $access_token;
115
+        }
116
+
117
+        $url  = self::get_api_url( $path, $mode );
118
+        $args = array(
119
+            'method'  => $method,
120
+            'headers' => array(
121
+                'Authorization' => 'Bearer ' . $access_token,
122
+            ),
123
+        );
124
+
125
+        return self::response_or_error( wp_remote_get( $url, $args ) );
126
+    }
127
+
128
+    /**
129
+     * Returns the response body
130
+     *
131
+     * @since 1.0.0
132
+     * @version 1.0.0
133
+     * @param \WP_Error|array $response
134
+     * @return \WP_Error|object
135
+     */
136
+    public static function response_or_error( $response ) {
137
+
138
+        if ( is_wp_error( $response ) ) {
139
+            return new \WP_Error( 'paypal_error', __( 'There was a problem connecting to the PayPal API endpoint.', 'invoicing' ) );
140
+        }
141
+
142
+        if ( empty( $response['body'] ) ) {
143
+            return true;
144
+        }
145
+
146
+        $response_body = json_decode( wp_remote_retrieve_body( $response ) );
147
+
148
+        if ( wp_remote_retrieve_response_code( $response ) > 299 ) {
149
+
150
+            // Normal errors.
151
+            if ( $response_body && isset( $response_body->message ) ) {
152
+                $error_message = $response_body->message;
153
+
154
+            // Identity errors.
155
+            } elseif ( $response_body && isset( $response_body->error_description ) ) {
156
+                $error_message = $response_body->error_description;
157
+                return new \WP_Error( 'paypal_error', wp_kses_post( $response_body->error_description ) );
158
+            } else {
159
+                $error_message = __( 'There was an error connecting to the PayPal API endpoint.', 'invoicing' );
160
+            }
161
+
162
+            return new \WP_Error( 'paypal_error', $error_message );
163
+        }
164
+
165
+        return $response_body;
166
+    }
167
+
168
+    /**
169
+     * Fetches an order.
170
+     *
171
+     * @since 1.0.0
172
+     * @version 1.0.0
173
+     * @param string $order_id
174
+     * @link https://developer.paypal.com/docs/api/orders/v2/#orders_get
175
+     * @return \WP_Error|object
176
+     */
177
+    public static function get_order( $order_id, $mode = 'live' ) {
178
+        return self::get( '/v2/checkout/orders/' . $order_id, $mode );
179
+    }
180
+
181
+    /**
182
+     * Fetches a subscription.
183
+     *
184
+     * @since 1.0.0
185
+     * @version 1.0.0
186
+     * @param string $subscription_id
187
+     * @link https://developer.paypal.com/docs/api/subscriptions/v1/#subscriptions_get
188
+     * @return \WP_Error|object
189
+     */
190
+    public static function get_subscription( $subscription_id, $mode = 'live' ) {
191
+        return self::get( '/v1/billing/subscriptions/' . $subscription_id, $mode );
192
+    }
193
+
194
+    /**
195
+     * Fetches a subscription's latest transactions (limits search to last one day).
196
+     *
197
+     * @since 1.0.0
198
+     * @version 1.0.0
199
+     * @param string $subscription_id
200
+     * @link https://developer.paypal.com/docs/api/subscriptions/v1/#subscriptions_transactions
201
+     * @return \WP_Error|object
202
+     */
203
+    public static function get_subscription_transaction( $subscription_id, $mode = 'live' ) {
204
+        $start_time = gmdate( 'Y-m-d\TH:i:s\Z', strtotime( '-1 day' ) );
205
+        $end_time   = gmdate( 'Y-m-d\TH:i:s\Z' );
206
+        return self::get( "/v1/billing/subscriptions/$subscription_id/transactions?start_time=$start_time&end_time=$end_time", $mode );
207
+    }
208
+
209
+    /**
210
+     * Refunds a capture.
211
+     *
212
+     * @since 1.0.0
213
+     * @version 1.0.0
214
+     * @param string $capture_id
215
+     * @param array  $args
216
+     * @link https://developer.paypal.com/docs/api/payments/v2/#captures_refund
217
+     * @return \WP_Error|object
218
+     */
219
+    public static function refund_capture( $capture_id, $args = array(), $mode = 'live' ) {
220
+        return self::post( '/v2/payments/captures/' . $capture_id . '/refund', $args, $mode );
221
+    }
222
+
223
+    /**
224
+     * Cancels a subscription.
225
+     *
226
+     * @since 2.8.24
227
+     * @version 2.8.24
228
+     * @param string $subscription_id
229
+     * @param array  $args
230
+     * @link https://developer.paypal.com/docs/api/subscriptions/v1/#subscriptions_cancel
231
+     * @return \WP_Error|object
232
+     */
233
+    public static function cancel_subscription( $subscription_id, $args = array(), $mode = 'live' ) {
234
+        return self::post( '/v1/billing/subscriptions/' . $subscription_id . '/cancel', $args, $mode );
235
+    }
236 236
 }
Please login to merge, or discard this patch.
includes/gateways/class-getpaid-paypal-gateway.php 1 patch
Indentation   +508 added lines, -508 removed lines patch added patch discarded remove patch
@@ -13,103 +13,103 @@  discard block
 block discarded – undo
13 13
 class GetPaid_Paypal_Gateway extends GetPaid_Payment_Gateway {
14 14
 
15 15
     /**
16
-	 * Payment method id.
17
-	 *
18
-	 * @var string
19
-	 */
16
+     * Payment method id.
17
+     *
18
+     * @var string
19
+     */
20 20
     public $id = 'paypal';
21 21
 
22 22
     /**
23
-	 * An array of features that this gateway supports.
24
-	 *
25
-	 * @var array
26
-	 */
23
+     * An array of features that this gateway supports.
24
+     *
25
+     * @var array
26
+     */
27 27
     protected $supports = array( 'subscription', 'sandbox', 'single_subscription_group', 'refunds' );
28 28
 
29 29
     /**
30
-	 * Payment method order.
31
-	 *
32
-	 * @var int
33
-	 */
30
+     * Payment method order.
31
+     *
32
+     * @var int
33
+     */
34 34
     public $order = 1;
35 35
 
36 36
     /**
37
-	 * Stores line items to send to PayPal.
38
-	 *
39
-	 * @var array
40
-	 */
37
+     * Stores line items to send to PayPal.
38
+     *
39
+     * @var array
40
+     */
41 41
     protected $line_items = array();
42 42
 
43 43
     /**
44
-	 * Endpoint for requests from PayPal.
45
-	 *
46
-	 * @var string
47
-	 */
48
-	protected $notify_url;
44
+     * Endpoint for requests from PayPal.
45
+     *
46
+     * @var string
47
+     */
48
+    protected $notify_url;
49 49
 
50
-	/**
51
-	 * Endpoint for requests to PayPal.
52
-	 *
53
-	 * @var string
54
-	 */
50
+    /**
51
+     * Endpoint for requests to PayPal.
52
+     *
53
+     * @var string
54
+     */
55 55
     protected $endpoint;
56 56
 
57 57
     /**
58
-	 * Currencies this gateway is allowed for.
59
-	 *
60
-	 * @var array
61
-	 */
62
-	public $currencies = array( 'AUD', 'BRL', 'CAD', 'MXN', 'NZD', 'HKD', 'SGD', 'USD', 'EUR', 'JPY', 'TRY', 'NOK', 'CZK', 'DKK', 'HUF', 'ILS', 'MYR', 'PHP', 'PLN', 'SEK', 'CHF', 'TWD', 'THB', 'GBP', 'RMB', 'RUB', 'INR' );
58
+     * Currencies this gateway is allowed for.
59
+     *
60
+     * @var array
61
+     */
62
+    public $currencies = array( 'AUD', 'BRL', 'CAD', 'MXN', 'NZD', 'HKD', 'SGD', 'USD', 'EUR', 'JPY', 'TRY', 'NOK', 'CZK', 'DKK', 'HUF', 'ILS', 'MYR', 'PHP', 'PLN', 'SEK', 'CHF', 'TWD', 'THB', 'GBP', 'RMB', 'RUB', 'INR' );
63 63
 
64 64
     /**
65
-	 * URL to view a transaction.
66
-	 *
67
-	 * @var string
68
-	 */
65
+     * URL to view a transaction.
66
+     *
67
+     * @var string
68
+     */
69 69
     public $view_transaction_url = 'https://www.{sandbox}paypal.com/activity/payment/%s';
70 70
 
71 71
     /**
72
-	 * URL to view a subscription.
73
-	 *
74
-	 * @var string
75
-	 */
76
-	public $view_subscription_url = 'https://www.{sandbox}paypal.com/cgi-bin/webscr?cmd=_profile-recurring-payments&encrypted_profile_id=%s';
72
+     * URL to view a subscription.
73
+     *
74
+     * @var string
75
+     */
76
+    public $view_subscription_url = 'https://www.{sandbox}paypal.com/cgi-bin/webscr?cmd=_profile-recurring-payments&encrypted_profile_id=%s';
77 77
 
78 78
     /**
79
-	 * Class constructor.
80
-	 */
81
-	public function __construct() {
82
-		parent::__construct();
79
+     * Class constructor.
80
+     */
81
+    public function __construct() {
82
+        parent::__construct();
83 83
 
84 84
         $this->title                = __( 'PayPal Standard', 'invoicing' );
85 85
         $this->method_title         = __( 'PayPal Standard', 'invoicing' );
86 86
         $this->checkout_button_text = __( 'Proceed to PayPal', 'invoicing' );
87 87
         $this->notify_url           = wpinv_get_ipn_url( $this->id );
88 88
 
89
-		add_filter( 'wpinv_subscription_cancel_url', array( $this, 'filter_cancel_subscription_url' ), 10, 2 );
90
-		add_filter( 'getpaid_paypal_args', array( $this, 'process_subscription' ), 10, 2 );
91
-		add_filter( 'getpaid_get_paypal_connect_url', array( $this, 'maybe_get_connect_url' ), 10, 2 );
92
-		add_action( 'getpaid_authenticated_admin_action_connect_paypal', array( $this, 'connect_paypal' ) );
93
-		add_action( 'wpinv_paypal_connect', array( $this, 'display_connect_buttons' ) );
94
-
95
-		if ( $this->enabled ) {
96
-			add_filter( 'getpaid_paypal_sandbox_notice', array( $this, 'sandbox_notice' ) );
97
-			add_action( 'getpaid_paypal_subscription_cancelled', array( $this, 'subscription_cancelled' ) );
98
-			add_action( 'getpaid_delete_subscription', array( $this, 'subscription_cancelled' ) );
99
-			add_action( 'getpaid_refund_invoice_remotely', array( $this, 'refund_invoice' ) );
100
-		}
89
+        add_filter( 'wpinv_subscription_cancel_url', array( $this, 'filter_cancel_subscription_url' ), 10, 2 );
90
+        add_filter( 'getpaid_paypal_args', array( $this, 'process_subscription' ), 10, 2 );
91
+        add_filter( 'getpaid_get_paypal_connect_url', array( $this, 'maybe_get_connect_url' ), 10, 2 );
92
+        add_action( 'getpaid_authenticated_admin_action_connect_paypal', array( $this, 'connect_paypal' ) );
93
+        add_action( 'wpinv_paypal_connect', array( $this, 'display_connect_buttons' ) );
94
+
95
+        if ( $this->enabled ) {
96
+            add_filter( 'getpaid_paypal_sandbox_notice', array( $this, 'sandbox_notice' ) );
97
+            add_action( 'getpaid_paypal_subscription_cancelled', array( $this, 'subscription_cancelled' ) );
98
+            add_action( 'getpaid_delete_subscription', array( $this, 'subscription_cancelled' ) );
99
+            add_action( 'getpaid_refund_invoice_remotely', array( $this, 'refund_invoice' ) );
100
+        }
101 101
     }
102 102
 
103 103
     /**
104
-	 * Process Payment.
105
-	 *
106
-	 *
107
-	 * @param WPInv_Invoice $invoice Invoice.
108
-	 * @param array $submission_data Posted checkout fields.
109
-	 * @param GetPaid_Payment_Form_Submission $submission Checkout submission.
110
-	 * @return array
111
-	 */
112
-	public function process_payment( $invoice, $submission_data, $submission ) {
104
+     * Process Payment.
105
+     *
106
+     *
107
+     * @param WPInv_Invoice $invoice Invoice.
108
+     * @param array $submission_data Posted checkout fields.
109
+     * @param GetPaid_Payment_Form_Submission $submission Checkout submission.
110
+     * @return array
111
+     */
112
+    public function process_payment( $invoice, $submission_data, $submission ) {
113 113
 
114 114
         // Get redirect url.
115 115
         $paypal_redirect = $this->get_request_url( $invoice );
@@ -132,15 +132,15 @@  discard block
 block discarded – undo
132 132
     }
133 133
 
134 134
     /**
135
-	 * Get the PayPal request URL for an invoice.
136
-	 *
137
-	 * @param  WPInv_Invoice $invoice Invoice object.
138
-	 * @return string
139
-	 */
140
-	public function get_request_url( $invoice ) {
135
+     * Get the PayPal request URL for an invoice.
136
+     *
137
+     * @param  WPInv_Invoice $invoice Invoice object.
138
+     * @return string
139
+     */
140
+    public function get_request_url( $invoice ) {
141 141
 
142 142
         // Endpoint for this request
143
-		$this->endpoint    = $this->is_sandbox( $invoice ) ? 'https://www.sandbox.paypal.com/cgi-bin/webscr?test_ipn=1&' : 'https://www.paypal.com/cgi-bin/webscr?';
143
+        $this->endpoint    = $this->is_sandbox( $invoice ) ? 'https://www.sandbox.paypal.com/cgi-bin/webscr?test_ipn=1&' : 'https://www.paypal.com/cgi-bin/webscr?';
144 144
 
145 145
         // Retrieve paypal args.
146 146
         $paypal_args       = map_deep( $this->get_paypal_args( $invoice ), 'urlencode' );
@@ -153,45 +153,45 @@  discard block
 block discarded – undo
153 153
 
154 154
         return add_query_arg( $paypal_args, $this->endpoint );
155 155
 
156
-	}
156
+    }
157 157
 
158 158
     /**
159
-	 * Get PayPal Args for passing to PP.
160
-	 *
161
-	 * @param  WPInv_Invoice $invoice Invoice object.
162
-	 * @return array
163
-	 */
164
-	protected function get_paypal_args( $invoice ) {
159
+     * Get PayPal Args for passing to PP.
160
+     *
161
+     * @param  WPInv_Invoice $invoice Invoice object.
162
+     * @return array
163
+     */
164
+    protected function get_paypal_args( $invoice ) {
165 165
 
166 166
         // Whether or not to send the line items as one item.
167
-		$force_one_line_item = apply_filters( 'getpaid_paypal_force_one_line_item', true, $invoice );
168
-
169
-		if ( $invoice->is_recurring() || ( wpinv_use_taxes() && wpinv_prices_include_tax() ) ) {
170
-			$force_one_line_item = true;
171
-		}
172
-
173
-		$paypal_args = apply_filters(
174
-			'getpaid_paypal_args',
175
-			array_merge(
176
-				$this->get_transaction_args( $invoice ),
177
-				$this->get_line_item_args( $invoice, $force_one_line_item )
178
-			),
179
-			$invoice
180
-		);
181
-
182
-		return $this->fix_request_length( $invoice, $paypal_args );
167
+        $force_one_line_item = apply_filters( 'getpaid_paypal_force_one_line_item', true, $invoice );
168
+
169
+        if ( $invoice->is_recurring() || ( wpinv_use_taxes() && wpinv_prices_include_tax() ) ) {
170
+            $force_one_line_item = true;
171
+        }
172
+
173
+        $paypal_args = apply_filters(
174
+            'getpaid_paypal_args',
175
+            array_merge(
176
+                $this->get_transaction_args( $invoice ),
177
+                $this->get_line_item_args( $invoice, $force_one_line_item )
178
+            ),
179
+            $invoice
180
+        );
181
+
182
+        return $this->fix_request_length( $invoice, $paypal_args );
183 183
     }
184 184
 
185 185
     /**
186
-	 * Get transaction args for paypal request.
187
-	 *
188
-	 * @param WPInv_Invoice $invoice Invoice object.
189
-	 * @return array
190
-	 */
191
-	protected function get_transaction_args( $invoice ) {
186
+     * Get transaction args for paypal request.
187
+     *
188
+     * @param WPInv_Invoice $invoice Invoice object.
189
+     * @return array
190
+     */
191
+    protected function get_transaction_args( $invoice ) {
192 192
 
193
-		$email = $this->is_sandbox( $invoice ) ? wpinv_get_option( 'paypal_sandbox_email', wpinv_get_option( 'paypal_email', '' ) ) : wpinv_get_option( 'paypal_email', '' );
194
-		return array(
193
+        $email = $this->is_sandbox( $invoice ) ? wpinv_get_option( 'paypal_sandbox_email', wpinv_get_option( 'paypal_email', '' ) ) : wpinv_get_option( 'paypal_email', '' );
194
+        return array(
195 195
             'cmd'           => '_cart',
196 196
             'business'      => $email,
197 197
             'no_shipping'   => '1',
@@ -216,16 +216,16 @@  discard block
 block discarded – undo
216 216
     }
217 217
 
218 218
     /**
219
-	 * Get line item args for paypal request.
220
-	 *
221
-	 * @param  WPInv_Invoice $invoice Invoice object.
222
-	 * @param  bool     $force_one_line_item Create only one item for this invoice.
223
-	 * @return array
224
-	 */
225
-	protected function get_line_item_args( $invoice, $force_one_line_item = false ) {
219
+     * Get line item args for paypal request.
220
+     *
221
+     * @param  WPInv_Invoice $invoice Invoice object.
222
+     * @param  bool     $force_one_line_item Create only one item for this invoice.
223
+     * @return array
224
+     */
225
+    protected function get_line_item_args( $invoice, $force_one_line_item = false ) {
226 226
 
227 227
         // Maybe send invoice as a single item.
228
-		if ( $force_one_line_item ) {
228
+        if ( $force_one_line_item ) {
229 229
             return $this->get_line_item_args_single_item( $invoice );
230 230
         }
231 231
 
@@ -245,134 +245,134 @@  discard block
 block discarded – undo
245 245
             $line_item_args['discount_amount_cart'] = wpinv_sanitize_amount( (float) $invoice->get_total_discount(), 2 );
246 246
         }
247 247
 
248
-		return array_merge( $line_item_args, $this->get_line_items() );
248
+        return array_merge( $line_item_args, $this->get_line_items() );
249 249
 
250 250
     }
251 251
 
252 252
     /**
253
-	 * Get line item args for paypal request as a single line item.
254
-	 *
255
-	 * @param  WPInv_Invoice $invoice Invoice object.
256
-	 * @return array
257
-	 */
258
-	protected function get_line_item_args_single_item( $invoice ) {
259
-		$this->delete_line_items();
253
+     * Get line item args for paypal request as a single line item.
254
+     *
255
+     * @param  WPInv_Invoice $invoice Invoice object.
256
+     * @return array
257
+     */
258
+    protected function get_line_item_args_single_item( $invoice ) {
259
+        $this->delete_line_items();
260 260
 
261 261
         $item_name = wp_sprintf( __( 'Invoice %s', 'invoicing' ), $invoice->get_number() );
262
-		$this->add_line_item( $item_name, 1, wpinv_round_amount( (float) $invoice->get_total(), 2, true ), $invoice->get_id() );
262
+        $this->add_line_item( $item_name, 1, wpinv_round_amount( (float) $invoice->get_total(), 2, true ), $invoice->get_id() );
263 263
 
264
-		return $this->get_line_items();
264
+        return $this->get_line_items();
265 265
     }
266 266
 
267 267
     /**
268
-	 * Return all line items.
269
-	 */
270
-	protected function get_line_items() {
271
-		return $this->line_items;
272
-	}
268
+     * Return all line items.
269
+     */
270
+    protected function get_line_items() {
271
+        return $this->line_items;
272
+    }
273 273
 
274 274
     /**
275
-	 * Remove all line items.
276
-	 */
277
-	protected function delete_line_items() {
278
-		$this->line_items = array();
275
+     * Remove all line items.
276
+     */
277
+    protected function delete_line_items() {
278
+        $this->line_items = array();
279 279
     }
280 280
 
281 281
     /**
282
-	 * Prepare line items to send to paypal.
283
-	 *
284
-	 * @param  WPInv_Invoice $invoice Invoice object.
285
-	 */
286
-	protected function prepare_line_items( $invoice ) {
287
-		$this->delete_line_items();
288
-
289
-		// Items.
290
-		foreach ( $invoice->get_items() as $item ) {
291
-			$amount   = $item->get_price();
292
-			$quantity = $invoice->get_template() == 'amount' ? 1 : $item->get_quantity();
293
-			$this->add_line_item( $item->get_raw_name(), $quantity, $amount, $item->get_id() );
282
+     * Prepare line items to send to paypal.
283
+     *
284
+     * @param  WPInv_Invoice $invoice Invoice object.
285
+     */
286
+    protected function prepare_line_items( $invoice ) {
287
+        $this->delete_line_items();
288
+
289
+        // Items.
290
+        foreach ( $invoice->get_items() as $item ) {
291
+            $amount   = $item->get_price();
292
+            $quantity = $invoice->get_template() == 'amount' ? 1 : $item->get_quantity();
293
+            $this->add_line_item( $item->get_raw_name(), $quantity, $amount, $item->get_id() );
294 294
         }
295 295
 
296 296
         // Fees.
297
-		foreach ( $invoice->get_fees() as $fee => $data ) {
297
+        foreach ( $invoice->get_fees() as $fee => $data ) {
298 298
             $this->add_line_item( $fee, 1, wpinv_sanitize_amount( $data['initial_fee'] ) );
299 299
         }
300 300
 
301 301
     }
302 302
 
303 303
     /**
304
-	 * Add PayPal Line Item.
305
-	 *
306
-	 * @param  string $item_name Item name.
307
-	 * @param  float    $quantity Item quantity.
308
-	 * @param  float  $amount Amount.
309
-	 * @param  string $item_number Item number.
310
-	 */
311
-	protected function add_line_item( $item_name, $quantity = 1, $amount = 0.0, $item_number = '' ) {
312
-		$index = ( count( $this->line_items ) / 4 ) + 1;
313
-
314
-		/**
315
-		 * Prevent error "Things don't appear to be working at the moment. (https://www.sandbox.paypal.com/webapps/hermes/error)"
316
-		 */
317
-		$item_name = str_replace( "#", "", $item_name );
318
-
319
-		$item = apply_filters(
320
-			'getpaid_paypal_line_item',
321
-			array(
322
-				'item_name'   => html_entity_decode( getpaid_limit_length( $item_name ? wp_strip_all_tags( $item_name ) : __( 'Item', 'invoicing' ), 127 ), ENT_NOQUOTES, 'UTF-8' ),
323
-				'quantity'    => (float) $quantity,
324
-				'amount'      => wpinv_sanitize_amount( (float) $amount, 2 ),
325
-				'item_number' => $item_number,
326
-			),
327
-			$item_name,
328
-			$quantity,
329
-			$amount,
330
-			$item_number
331
-		);
332
-
333
-		$this->line_items[ 'item_name_' . $index ]   = getpaid_limit_length( $item['item_name'], 127 );
304
+     * Add PayPal Line Item.
305
+     *
306
+     * @param  string $item_name Item name.
307
+     * @param  float    $quantity Item quantity.
308
+     * @param  float  $amount Amount.
309
+     * @param  string $item_number Item number.
310
+     */
311
+    protected function add_line_item( $item_name, $quantity = 1, $amount = 0.0, $item_number = '' ) {
312
+        $index = ( count( $this->line_items ) / 4 ) + 1;
313
+
314
+        /**
315
+         * Prevent error "Things don't appear to be working at the moment. (https://www.sandbox.paypal.com/webapps/hermes/error)"
316
+         */
317
+        $item_name = str_replace( "#", "", $item_name );
318
+
319
+        $item = apply_filters(
320
+            'getpaid_paypal_line_item',
321
+            array(
322
+                'item_name'   => html_entity_decode( getpaid_limit_length( $item_name ? wp_strip_all_tags( $item_name ) : __( 'Item', 'invoicing' ), 127 ), ENT_NOQUOTES, 'UTF-8' ),
323
+                'quantity'    => (float) $quantity,
324
+                'amount'      => wpinv_sanitize_amount( (float) $amount, 2 ),
325
+                'item_number' => $item_number,
326
+            ),
327
+            $item_name,
328
+            $quantity,
329
+            $amount,
330
+            $item_number
331
+        );
332
+
333
+        $this->line_items[ 'item_name_' . $index ]   = getpaid_limit_length( $item['item_name'], 127 );
334 334
         $this->line_items[ 'quantity_' . $index ]    = $item['quantity'];
335 335
 
336 336
         // The price or amount of the product, service, or contribution, not including shipping, handling, or tax.
337
-		$this->line_items[ 'amount_' . $index ]      = $item['amount'] * $item['quantity'];
338
-		$this->line_items[ 'item_number_' . $index ] = getpaid_limit_length( $item['item_number'], 127 );
337
+        $this->line_items[ 'amount_' . $index ]      = $item['amount'] * $item['quantity'];
338
+        $this->line_items[ 'item_number_' . $index ] = getpaid_limit_length( $item['item_number'], 127 );
339 339
     }
340 340
 
341 341
     /**
342
-	 * If the default request with line items is too long, generate a new one with only one line item.
343
-	 *
344
-	 * https://support.microsoft.com/en-us/help/208427/maximum-url-length-is-2-083-characters-in-internet-explorer.
345
-	 *
346
-	 * @param WPInv_Invoice $invoice Invoice to be sent to Paypal.
347
-	 * @param array    $paypal_args Arguments sent to Paypal in the request.
348
-	 * @return array
349
-	 */
350
-	protected function fix_request_length( $invoice, $paypal_args ) {
351
-		$max_paypal_length = 2083;
352
-		$query_candidate   = http_build_query( $paypal_args, '', '&' );
353
-
354
-		if ( strlen( $this->endpoint . $query_candidate ) <= $max_paypal_length ) {
355
-			return $paypal_args;
356
-		}
357
-
358
-		return apply_filters(
359
-			'getpaid_paypal_args',
360
-			array_merge(
361
-				$this->get_transaction_args( $invoice ),
362
-				$this->get_line_item_args( $invoice, true )
363
-			),
364
-			$invoice
365
-		);
342
+     * If the default request with line items is too long, generate a new one with only one line item.
343
+     *
344
+     * https://support.microsoft.com/en-us/help/208427/maximum-url-length-is-2-083-characters-in-internet-explorer.
345
+     *
346
+     * @param WPInv_Invoice $invoice Invoice to be sent to Paypal.
347
+     * @param array    $paypal_args Arguments sent to Paypal in the request.
348
+     * @return array
349
+     */
350
+    protected function fix_request_length( $invoice, $paypal_args ) {
351
+        $max_paypal_length = 2083;
352
+        $query_candidate   = http_build_query( $paypal_args, '', '&' );
353
+
354
+        if ( strlen( $this->endpoint . $query_candidate ) <= $max_paypal_length ) {
355
+            return $paypal_args;
356
+        }
357
+
358
+        return apply_filters(
359
+            'getpaid_paypal_args',
360
+            array_merge(
361
+                $this->get_transaction_args( $invoice ),
362
+                $this->get_line_item_args( $invoice, true )
363
+            ),
364
+            $invoice
365
+        );
366 366
 
367 367
     }
368 368
 
369 369
     /**
370
-	 * Processes recurring invoices.
371
-	 *
372
-	 * @param  array $paypal_args PayPal args.
373
-	 * @param  WPInv_Invoice    $invoice Invoice object.
374
-	 */
375
-	public function process_subscription( $paypal_args, $invoice ) {
370
+     * Processes recurring invoices.
371
+     *
372
+     * @param  array $paypal_args PayPal args.
373
+     * @param  WPInv_Invoice    $invoice Invoice object.
374
+     */
375
+    public function process_subscription( $paypal_args, $invoice ) {
376 376
 
377 377
         // Make sure this is a subscription.
378 378
         if ( ! $invoice->is_recurring() || ! $subscription = getpaid_get_invoice_subscription( $invoice ) ) {
@@ -393,21 +393,21 @@  discard block
 block discarded – undo
393 393
         $recurring_amount       = (float) wpinv_sanitize_amount( $invoice->get_recurring_total(), 2 );
394 394
         $subscription_item      = $invoice->get_recurring( true );
395 395
 
396
-		// Convert 365 days to 1 year.
397
-		if ( 'D' == $period && 365 == $interval ) {
398
-			$period = 'Y';
399
-			$interval = 1;
400
-		}
396
+        // Convert 365 days to 1 year.
397
+        if ( 'D' == $period && 365 == $interval ) {
398
+            $period = 'Y';
399
+            $interval = 1;
400
+        }
401 401
 
402 402
         if ( $subscription_item->has_free_trial() ) {
403 403
 
404 404
             $paypal_args['a1'] = 0 == $initial_amount ? 0 : $initial_amount;
405 405
 
406
-			// Trial period length.
407
-			$paypal_args['p1'] = $subscription_item->get_trial_interval();
406
+            // Trial period length.
407
+            $paypal_args['p1'] = $subscription_item->get_trial_interval();
408 408
 
409
-			// Trial period.
410
-			$paypal_args['t1'] = $subscription_item->get_trial_period();
409
+            // Trial period.
410
+            $paypal_args['t1'] = $subscription_item->get_trial_period();
411 411
 
412 412
         } elseif ( $initial_amount != $recurring_amount ) {
413 413
 
@@ -430,40 +430,40 @@  discard block
 block discarded – undo
430 430
         }
431 431
 
432 432
         // We have a recurring payment
433
-		if ( ! isset( $param_number ) || 1 == $param_number ) {
433
+        if ( ! isset( $param_number ) || 1 == $param_number ) {
434 434
 
435
-			// Subscription price
436
-			$paypal_args['a3'] = $recurring_amount;
435
+            // Subscription price
436
+            $paypal_args['a3'] = $recurring_amount;
437 437
 
438
-			// Subscription duration
439
-			$paypal_args['p3'] = $interval;
438
+            // Subscription duration
439
+            $paypal_args['p3'] = $interval;
440 440
 
441
-			// Subscription period
442
-			$paypal_args['t3'] = $period;
441
+            // Subscription period
442
+            $paypal_args['t3'] = $period;
443 443
 
444 444
         }
445 445
 
446 446
         // Recurring payments
447
-		if ( 1 == $bill_times || ( $initial_amount != $recurring_amount && ! $subscription_item->has_free_trial() && 2 == $bill_times ) ) {
447
+        if ( 1 == $bill_times || ( $initial_amount != $recurring_amount && ! $subscription_item->has_free_trial() && 2 == $bill_times ) ) {
448 448
 
449
-			// Non-recurring payments
450
-			$paypal_args['src'] = 0;
449
+            // Non-recurring payments
450
+            $paypal_args['src'] = 0;
451 451
 
452
-		} else {
452
+        } else {
453 453
 
454
-			$paypal_args['src'] = 1;
454
+            $paypal_args['src'] = 1;
455 455
 
456
-			if ( $bill_times > 0 ) {
456
+            if ( $bill_times > 0 ) {
457 457
 
458
-				// An initial period is being used to charge a sign-up fee
459
-				if ( $initial_amount != $recurring_amount && ! $subscription_item->has_free_trial() ) {
460
-					$bill_times--;
461
-				}
458
+                // An initial period is being used to charge a sign-up fee
459
+                if ( $initial_amount != $recurring_amount && ! $subscription_item->has_free_trial() ) {
460
+                    $bill_times--;
461
+                }
462 462
 
463 463
                 // Make sure it's not over the max of 52
464 464
                 $paypal_args['srt'] = ( $bill_times <= 52 ? absint( $bill_times ) : 52 );
465 465
 
466
-			}
466
+            }
467 467
         }
468 468
 
469 469
         // Force return URL so that order description & instructions display
@@ -475,115 +475,115 @@  discard block
 block discarded – undo
475 475
             if ( isset( $paypal_args[ $arg ] ) ) {
476 476
                 unset( $paypal_args[ $arg ] );
477 477
             }
478
-		}
478
+        }
479 479
 
480 480
         return apply_filters(
481
-			'getpaid_paypal_subscription_args',
482
-			$paypal_args,
483
-			$invoice
481
+            'getpaid_paypal_subscription_args',
482
+            $paypal_args,
483
+            $invoice
484
+        );
485
+
486
+    }
487
+
488
+    /**
489
+     * Refunds an invoice remotely.
490
+     * 
491
+     * @since 2.8.24
492
+     * @param WPInv_Invoice $invoice Invoice object.
493
+     */
494
+    public function refund_invoice( $invoice ) {
495
+
496
+        if ( $invoice->get_gateway() !== $this->id ) {
497
+            return;
498
+        }
499
+
500
+        $mode	= $this->is_sandbox( $invoice ) ? 'sandbox' : 'live';
501
+        $result = GetPaid_PayPal_API::refund_capture( $invoice->get_transaction_id(), array(), $mode );
502
+
503
+        if ( is_wp_error( $result ) ) {
504
+            $invoice->add_system_note(
505
+                sprintf(
506
+                    // translators: %s is the error message.
507
+                    __( 'An error occured while trying to refund invoice #%1$s in PayPal: %2$s', 'invoicing' ),
508
+                    $invoice->get_id(),
509
+                    $result->get_error_message()
510
+                )
511
+            );
512
+        } else {
513
+            $invoice->add_system_note(
514
+                sprintf(
515
+                    // translators: %s is the refund ID.
516
+                    __( 'Successfully refunded invoice #%1$s in PayPal. Refund ID: %2$s', 'invoicing' ),
517
+                    $invoice->get_id(),
518
+                    $result->id
519
+                )
520
+            );
521
+        }
522
+    }
523
+
524
+    /**
525
+     * Cancels a subscription remotely.
526
+     * 
527
+     * @since 2.8.24
528
+     * @param WPInv_Subscription $subscription Subscription object.
529
+     */
530
+    public function subscription_cancelled( $subscription ) {
531
+
532
+        if ( $subscription->get_gateway() != $this->id ) {
533
+            return;
534
+        }
535
+
536
+        $invoice = $subscription->get_parent_invoice();
537
+
538
+        // Abort if the parent invoice does not exist.
539
+        if ( ! $invoice->exists() ) {
540
+            return;
541
+        }
542
+
543
+        $mode	= $this->is_sandbox( $invoice ) ? 'sandbox' : 'live';
544
+        $result = GetPaid_PayPal_API::cancel_subscription( 
545
+            $invoice->get_remote_subscription_id(), 
546
+            array(
547
+                'reason' => __(' Customer requested cancellation', 'invoicing' ),
548
+            ), 
549
+            $mode 
484 550
         );
485 551
 
552
+        if ( is_wp_error( $result ) ) {
553
+
554
+            $error = sprintf(
555
+                // translators: %s is the subscription ID.
556
+                __( 'An error occured while trying to cancel subscription #%s in PayPal.', 'invoicing' ),
557
+                $subscription->get_id()
558
+            );
559
+
560
+            getpaid_admin()->show_error( $error . ' ' . $result->get_error_message() );
561
+
562
+            if ( ! is_admin() ) {
563
+                wpinv_set_error( $result->get_error_code(), $error );
564
+            }
565
+
566
+            return;
567
+        }
568
+
569
+        if ( is_admin() ) {
570
+            getpaid_admin()->show_success(
571
+                sprintf(
572
+                    // translators: %s is the subscription ID.
573
+                    __( 'Successfully cancelled subscription #%s in PayPal.', 'invoicing' ),
574
+                    $subscription->get_id()
575
+                )
576
+            );
577
+        }
578
+
486 579
     }
487 580
 
488
-	/**
489
-	 * Refunds an invoice remotely.
490
-	 * 
491
-	 * @since 2.8.24
492
-	 * @param WPInv_Invoice $invoice Invoice object.
493
-	 */
494
-	public function refund_invoice( $invoice ) {
495
-
496
-		if ( $invoice->get_gateway() !== $this->id ) {
497
-			return;
498
-		}
499
-
500
-		$mode	= $this->is_sandbox( $invoice ) ? 'sandbox' : 'live';
501
-		$result = GetPaid_PayPal_API::refund_capture( $invoice->get_transaction_id(), array(), $mode );
502
-
503
-		if ( is_wp_error( $result ) ) {
504
-			$invoice->add_system_note(
505
-				sprintf(
506
-					// translators: %s is the error message.
507
-					__( 'An error occured while trying to refund invoice #%1$s in PayPal: %2$s', 'invoicing' ),
508
-					$invoice->get_id(),
509
-					$result->get_error_message()
510
-				)
511
-			);
512
-		} else {
513
-			$invoice->add_system_note(
514
-				sprintf(
515
-					// translators: %s is the refund ID.
516
-					__( 'Successfully refunded invoice #%1$s in PayPal. Refund ID: %2$s', 'invoicing' ),
517
-					$invoice->get_id(),
518
-					$result->id
519
-				)
520
-			);
521
-		}
522
-	}
523
-
524
-	/**
525
-	 * Cancels a subscription remotely.
526
-	 * 
527
-	 * @since 2.8.24
528
-	 * @param WPInv_Subscription $subscription Subscription object.
529
-	 */
530
-	public function subscription_cancelled( $subscription ) {
531
-
532
-		if ( $subscription->get_gateway() != $this->id ) {
533
-			return;
534
-		}
535
-
536
-		$invoice = $subscription->get_parent_invoice();
537
-
538
-		// Abort if the parent invoice does not exist.
539
-		if ( ! $invoice->exists() ) {
540
-			return;
541
-		}
542
-
543
-		$mode	= $this->is_sandbox( $invoice ) ? 'sandbox' : 'live';
544
-		$result = GetPaid_PayPal_API::cancel_subscription( 
545
-			$invoice->get_remote_subscription_id(), 
546
-			array(
547
-				'reason' => __(' Customer requested cancellation', 'invoicing' ),
548
-			), 
549
-			$mode 
550
-		);
551
-
552
-		if ( is_wp_error( $result ) ) {
553
-
554
-			$error = sprintf(
555
-				// translators: %s is the subscription ID.
556
-				__( 'An error occured while trying to cancel subscription #%s in PayPal.', 'invoicing' ),
557
-				$subscription->get_id()
558
-			);
559
-
560
-			getpaid_admin()->show_error( $error . ' ' . $result->get_error_message() );
561
-
562
-			if ( ! is_admin() ) {
563
-				wpinv_set_error( $result->get_error_code(), $error );
564
-			}
565
-
566
-			return;
567
-		}
568
-
569
-		if ( is_admin() ) {
570
-			getpaid_admin()->show_success(
571
-				sprintf(
572
-					// translators: %s is the subscription ID.
573
-					__( 'Successfully cancelled subscription #%s in PayPal.', 'invoicing' ),
574
-					$subscription->get_id()
575
-				)
576
-			);
577
-		}
578
-
579
-	}
580
-
581
-    /**
582
-	 * Processes ipns and marks payments as complete.
583
-	 *
584
-	 * @return void
585
-	 */
586
-	public function verify_ipn() {
581
+    /**
582
+     * Processes ipns and marks payments as complete.
583
+     *
584
+     * @return void
585
+     */
586
+    public function verify_ipn() {
587 587
         new GetPaid_Paypal_Gateway_IPN_Handler( $this );
588 588
     }
589 589
 
@@ -593,19 +593,19 @@  discard block
 block discarded – undo
593 593
     public function sandbox_notice() {
594 594
 
595 595
         return sprintf(
596
-			__( 'SANDBOX ENABLED. You can use sandbox testing accounts only. See the %1$sPayPal Sandbox Testing Guide%2$s for more details.', 'invoicing' ),
597
-			'<a href="https://developer.paypal.com/docs/classic/lifecycle/ug_sandbox/">',
598
-			'</a>'
599
-		);
596
+            __( 'SANDBOX ENABLED. You can use sandbox testing accounts only. See the %1$sPayPal Sandbox Testing Guide%2$s for more details.', 'invoicing' ),
597
+            '<a href="https://developer.paypal.com/docs/classic/lifecycle/ug_sandbox/">',
598
+            '</a>'
599
+        );
600 600
 
601 601
     }
602 602
 
603
-	/**
604
-	 * Filters the gateway settings.
605
-	 *
606
-	 * @param array $admin_settings
607
-	 */
608
-	public function admin_settings( $admin_settings ) {
603
+    /**
604
+     * Filters the gateway settings.
605
+     *
606
+     * @param array $admin_settings
607
+     */
608
+    public function admin_settings( $admin_settings ) {
609 609
 
610 610
         $currencies = sprintf(
611 611
             __( 'Supported Currencies: %s', 'invoicing' ),
@@ -615,66 +615,66 @@  discard block
 block discarded – undo
615 615
         $admin_settings['paypal_active']['desc'] .= " ($currencies)";
616 616
         $admin_settings['paypal_desc']['std']     = __( 'Pay via PayPal: you can pay with your credit card if you don\'t have a PayPal account.', 'invoicing' );
617 617
 
618
-		// Access tokens.
619
-		$live_email      = wpinv_get_option( 'paypal_email' );
620
-		$sandbox_email   = wpinv_get_option( 'paypal_sandbox_email' );
618
+        // Access tokens.
619
+        $live_email      = wpinv_get_option( 'paypal_email' );
620
+        $sandbox_email   = wpinv_get_option( 'paypal_sandbox_email' );
621 621
 
622
-		$admin_settings['paypal_connect'] = array(
623
-			'type' => 'hook',
624
-			'id'   => 'paypal_connect',
625
-			'name' => __( 'Connect to PayPal', 'invoicing' ),
626
-		);
622
+        $admin_settings['paypal_connect'] = array(
623
+            'type' => 'hook',
624
+            'id'   => 'paypal_connect',
625
+            'name' => __( 'Connect to PayPal', 'invoicing' ),
626
+        );
627 627
 
628 628
         $admin_settings['paypal_email'] = array(
629 629
             'type'  => 'text',
630
-			'class' => 'live-auth-data',
630
+            'class' => 'live-auth-data',
631 631
             'id'    => 'paypal_email',
632 632
             'name'  => __( 'Live Email Address', 'invoicing' ),
633 633
             'desc'  => __( 'The email address of your PayPal account.', 'invoicing' ),
634 634
         );
635 635
 
636
-		$admin_settings['paypal_sandbox_email'] = array(
636
+        $admin_settings['paypal_sandbox_email'] = array(
637 637
             'type'  => 'text',
638
-			'class' => 'sandbox-auth-data',
638
+            'class' => 'sandbox-auth-data',
639 639
             'id'    => 'paypal_sandbox_email',
640 640
             'name'  => __( 'Sandbox Email Address', 'invoicing' ),
641 641
             'desc'  => __( 'The email address of your sandbox PayPal account.', 'invoicing' ),
642
-			'std'   => wpinv_get_option( 'paypal_email', '' ),
642
+            'std'   => wpinv_get_option( 'paypal_email', '' ),
643
+        );
644
+
645
+        // Client ID and secret.
646
+        $admin_settings['paypal_client_id'] = array(
647
+            'type'  => 'text',
648
+            'class' => 'live-auth-data',
649
+            'id'    => 'paypal_client_id',
650
+            'name'  => __( 'Live Client ID', 'invoicing' ),
651
+            'desc'  => __( 'The client ID of your PayPal account. You can retrieve this from your PayPal developer account.', 'invoicing' ),
652
+        );
653
+
654
+        $admin_settings['paypal_sandbox_client_id'] = array(
655
+            'type'  => 'text',
656
+            'class' => 'sandbox-auth-data',
657
+            'id'    => 'paypal_sandbox_client_id',
658
+            'name'  => __( 'Sandbox Client ID', 'invoicing' ),
659
+            'desc'  => __( 'The client ID of your sandbox PayPal account. You can retrieve this from your PayPal developer account.', 'invoicing' ),
660
+            'std'   => wpinv_get_option( 'paypal_client_id', '' ),
643 661
         );
644 662
 
645
-		// Client ID and secret.
646
-		$admin_settings['paypal_client_id'] = array(
647
-			'type'  => 'text',
648
-			'class' => 'live-auth-data',
649
-			'id'    => 'paypal_client_id',
650
-			'name'  => __( 'Live Client ID', 'invoicing' ),
651
-			'desc'  => __( 'The client ID of your PayPal account. You can retrieve this from your PayPal developer account.', 'invoicing' ),
652
-		);
653
-
654
-		$admin_settings['paypal_sandbox_client_id'] = array(
655
-			'type'  => 'text',
656
-			'class' => 'sandbox-auth-data',
657
-			'id'    => 'paypal_sandbox_client_id',
658
-			'name'  => __( 'Sandbox Client ID', 'invoicing' ),
659
-			'desc'  => __( 'The client ID of your sandbox PayPal account. You can retrieve this from your PayPal developer account.', 'invoicing' ),
660
-			'std'   => wpinv_get_option( 'paypal_client_id', '' ),
661
-		);
662
-
663
-		$admin_settings['paypal_secret'] = array(
664
-			'type'  => 'text',
665
-			'class' => 'live-auth-data',
666
-			'id'    => 'paypal_secret',
667
-			'name'  => __( 'Live Secret', 'invoicing' ),
668
-			'desc'  => __( 'The secret of your PayPal account. You can retrieve this from your PayPal developer account.', 'invoicing' ),
669
-		);
670
-
671
-		$admin_settings['paypal_sandbox_secret'] = array(
672
-			'type'  => 'text',
673
-			'class' => 'sandbox-auth-data',
674
-			'id'    => 'paypal_sandbox_secret',
675
-			'name'  => __( 'Sandbox Secret', 'invoicing' ),
676
-			'desc'  => __( 'The secret of your sandbox PayPal account. You can retrieve this from your PayPal developer account.', 'invoicing' ),
677
-		);
663
+        $admin_settings['paypal_secret'] = array(
664
+            'type'  => 'text',
665
+            'class' => 'live-auth-data',
666
+            'id'    => 'paypal_secret',
667
+            'name'  => __( 'Live Secret', 'invoicing' ),
668
+            'desc'  => __( 'The secret of your PayPal account. You can retrieve this from your PayPal developer account.', 'invoicing' ),
669
+        );
670
+
671
+        $admin_settings['paypal_sandbox_secret'] = array(
672
+            'type'  => 'text',
673
+            'class' => 'sandbox-auth-data',
674
+            'id'    => 'paypal_sandbox_secret',
675
+            'name'  => __( 'Sandbox Secret', 'invoicing' ),
676
+            'desc'  => __( 'The secret of your sandbox PayPal account. You can retrieve this from your PayPal developer account.', 'invoicing' ),
677
+        );
678 678
 
679 679
         $admin_settings['paypal_ipn_url'] = array(
680 680
             'type'     => 'ipn_url',
@@ -685,57 +685,57 @@  discard block
 block discarded – undo
685 685
             'readonly' => true,
686 686
         );
687 687
 
688
-		return $admin_settings;
689
-	}
690
-
691
-	/**
692
-	 * Retrieves the URL to cancel a subscription.
693
-	 *
694
-	 * @param string $url
695
-	 * @param WPInv_Subscription $subscription
696
-	 */
697
-	public function filter_cancel_subscription_url( $url, $subscription ) {
698
-
699
-		if ( $this->id !== $subscription->get_gateway() ) {
700
-			return $url;
701
-		}
702
-
703
-		// Get the PayPal profile ID.
704
-		$profile_id = $subscription->get_profile_id();
705
-
706
-		// Bail if no profile ID.
707
-		if ( empty( $profile_id ) ) {
708
-			return $url;
709
-		}
710
-
711
-		$cancel_url = 'https://www.paypal.com/myaccount/autopay/connect/%s/cancel';
712
-		if ( $this->is_sandbox( $subscription->get_parent_payment() ) ) {
713
-			$cancel_url = 'https://www.sandbox.paypal.com/myaccount/autopay/connect/%s/cancel';
714
-		}
715
-
716
-		return sprintf( $cancel_url, $profile_id );
717
-	}
718
-
719
-	/**
720
-	 * Retrieves the PayPal connect URL when using the setup wizzard.
721
-	 *
722
-	 *
688
+        return $admin_settings;
689
+    }
690
+
691
+    /**
692
+     * Retrieves the URL to cancel a subscription.
693
+     *
694
+     * @param string $url
695
+     * @param WPInv_Subscription $subscription
696
+     */
697
+    public function filter_cancel_subscription_url( $url, $subscription ) {
698
+
699
+        if ( $this->id !== $subscription->get_gateway() ) {
700
+            return $url;
701
+        }
702
+
703
+        // Get the PayPal profile ID.
704
+        $profile_id = $subscription->get_profile_id();
705
+
706
+        // Bail if no profile ID.
707
+        if ( empty( $profile_id ) ) {
708
+            return $url;
709
+        }
710
+
711
+        $cancel_url = 'https://www.paypal.com/myaccount/autopay/connect/%s/cancel';
712
+        if ( $this->is_sandbox( $subscription->get_parent_payment() ) ) {
713
+            $cancel_url = 'https://www.sandbox.paypal.com/myaccount/autopay/connect/%s/cancel';
714
+        }
715
+
716
+        return sprintf( $cancel_url, $profile_id );
717
+    }
718
+
719
+    /**
720
+     * Retrieves the PayPal connect URL when using the setup wizzard.
721
+     *
722
+     *
723 723
      * @param array $data
724 724
      * @return string
725
-	 */
726
-	public static function maybe_get_connect_url( $url = '', $data = array() ) {
727
-		return self::get_connect_url( false, urldecode( $data['redirect'] ) );
728
-	}
729
-
730
-	/**
731
-	 * Retrieves the PayPal connect URL.
732
-	 *
733
-	 *
725
+     */
726
+    public static function maybe_get_connect_url( $url = '', $data = array() ) {
727
+        return self::get_connect_url( false, urldecode( $data['redirect'] ) );
728
+    }
729
+
730
+    /**
731
+     * Retrieves the PayPal connect URL.
732
+     *
733
+     *
734 734
      * @param bool $is_sandbox
735
-	 * @param string $redirect
735
+     * @param string $redirect
736 736
      * @return string
737
-	 */
738
-	public static function get_connect_url( $is_sandbox, $redirect = '' ) {
737
+     */
738
+    public static function get_connect_url( $is_sandbox, $redirect = '' ) {
739 739
 
740 740
         $redirect_url = add_query_arg(
741 741
             array(
@@ -745,7 +745,7 @@  discard block
 block discarded – undo
745 745
                 'tab'                  => 'gateways',
746 746
                 'section'              => 'paypal',
747 747
                 'getpaid-nonce'        => wp_create_nonce( 'getpaid-nonce' ),
748
-				'redirect'             => urlencode( $redirect ),
748
+                'redirect'             => urlencode( $redirect ),
749 749
             ),
750 750
             admin_url( 'admin.php' )
751 751
         );
@@ -760,12 +760,12 @@  discard block
 block discarded – undo
760 760
 
761 761
     }
762 762
 
763
-	/**
764
-	 * Generates settings page js.
765
-	 *
763
+    /**
764
+     * Generates settings page js.
765
+     *
766 766
      * @return void
767
-	 */
768
-	public static function display_connect_buttons() {
767
+     */
768
+    public static function display_connect_buttons() {
769 769
 
770 770
         ?>
771 771
 			<div class="wpinv-paypal-connect-live">
@@ -807,70 +807,70 @@  discard block
 block discarded – undo
807 807
         <?php
808 808
     }
809 809
 
810
-	/**
811
-	 * Connects to PayPal.
812
-	 *
813
-	 * @param array $data Connection data.
814
-	 * @return void
815
-	 */
816
-	public function connect_paypal( $data ) {
817
-
818
-		$sandbox      = $this->is_sandbox();
819
-		$data         = wp_unslash( $data );
820
-		$access_token = empty( $data['access_token'] ) ? '' : sanitize_text_field( $data['access_token'] );
821
-
822
-		if ( isset( $data['live_mode'] ) ) {
823
-			$sandbox = empty( $data['live_mode'] );
824
-		}
825
-
826
-		wpinv_update_option( 'paypal_sandbox', (int) $sandbox );
827
-		wpinv_update_option( 'paypal_active', 1 );
828
-
829
-		if ( ! empty( $data['error_description'] ) ) {
830
-			getpaid_admin()->show_error( wp_kses_post( urldecode( $data['error_description'] ) ) );
831
-		} else {
832
-
833
-			// Retrieve the user info.
834
-			$user_info = wp_remote_get(
835
-				! $sandbox ? 'https://api-m.paypal.com/v1/identity/oauth2/userinfo?schema=paypalv1.1' : 'https://api-m.sandbox.paypal.com/v1/identity/oauth2/userinfo?schema=paypalv1.1',
836
-				array(
837
-
838
-					'headers' => array(
839
-						'Authorization' => 'Bearer ' . $access_token,
840
-						'Content-type'  => 'application/json',
841
-					),
842
-
843
-				)
844
-			);
845
-
846
-			if ( is_wp_error( $user_info ) ) {
847
-				getpaid_admin()->show_error( wp_kses_post( $user_info->get_error_message() ) );
848
-			} else {
849
-
850
-				// Create application.
851
-				$user_info = json_decode( wp_remote_retrieve_body( $user_info ) );
852
-
853
-				if ( $sandbox ) {
854
-					wpinv_update_option( 'paypal_sandbox_email', sanitize_email( $user_info->emails[0]->value ) );
855
-					wpinv_update_option( 'paypal_sandbox_refresh_token', sanitize_text_field( urldecode( $data['refresh_token'] ) ) );
856
-					set_transient( 'getpaid_paypal_sandbox_access_token', sanitize_text_field( urldecode( $data['access_token'] ) ), (int) $data['expires_in'] );
857
-					getpaid_admin()->show_success( __( 'Successfully connected your PayPal sandbox account', 'invoicing' ) );
858
-				} else {
859
-					wpinv_update_option( 'paypal_email', sanitize_email( $user_info->emails[0]->value ) );
860
-					wpinv_update_option( 'paypal_refresh_token', sanitize_text_field( urldecode( $data['refresh_token'] ) ) );
861
-					set_transient( 'getpaid_paypal_access_token', sanitize_text_field( urldecode( $data['access_token'] ) ), (int) $data['expires_in'] );
862
-					getpaid_admin()->show_success( __( 'Successfully connected your PayPal account', 'invoicing' ) );
863
-				}
864
-			}
865
-		}
866
-
867
-		$redirect = empty( $data['redirect'] ) ? admin_url( 'admin.php?page=wpinv-settings&tab=gateways&section=paypal' ) : urldecode( $data['redirect'] );
868
-
869
-		if ( isset( $data['step'] ) ) {
870
-			$redirect = add_query_arg( 'step', $data['step'], $redirect );
871
-		}
872
-		wp_redirect( $redirect );
873
-		exit;
874
-	}
810
+    /**
811
+     * Connects to PayPal.
812
+     *
813
+     * @param array $data Connection data.
814
+     * @return void
815
+     */
816
+    public function connect_paypal( $data ) {
817
+
818
+        $sandbox      = $this->is_sandbox();
819
+        $data         = wp_unslash( $data );
820
+        $access_token = empty( $data['access_token'] ) ? '' : sanitize_text_field( $data['access_token'] );
821
+
822
+        if ( isset( $data['live_mode'] ) ) {
823
+            $sandbox = empty( $data['live_mode'] );
824
+        }
825
+
826
+        wpinv_update_option( 'paypal_sandbox', (int) $sandbox );
827
+        wpinv_update_option( 'paypal_active', 1 );
828
+
829
+        if ( ! empty( $data['error_description'] ) ) {
830
+            getpaid_admin()->show_error( wp_kses_post( urldecode( $data['error_description'] ) ) );
831
+        } else {
832
+
833
+            // Retrieve the user info.
834
+            $user_info = wp_remote_get(
835
+                ! $sandbox ? 'https://api-m.paypal.com/v1/identity/oauth2/userinfo?schema=paypalv1.1' : 'https://api-m.sandbox.paypal.com/v1/identity/oauth2/userinfo?schema=paypalv1.1',
836
+                array(
837
+
838
+                    'headers' => array(
839
+                        'Authorization' => 'Bearer ' . $access_token,
840
+                        'Content-type'  => 'application/json',
841
+                    ),
842
+
843
+                )
844
+            );
845
+
846
+            if ( is_wp_error( $user_info ) ) {
847
+                getpaid_admin()->show_error( wp_kses_post( $user_info->get_error_message() ) );
848
+            } else {
849
+
850
+                // Create application.
851
+                $user_info = json_decode( wp_remote_retrieve_body( $user_info ) );
852
+
853
+                if ( $sandbox ) {
854
+                    wpinv_update_option( 'paypal_sandbox_email', sanitize_email( $user_info->emails[0]->value ) );
855
+                    wpinv_update_option( 'paypal_sandbox_refresh_token', sanitize_text_field( urldecode( $data['refresh_token'] ) ) );
856
+                    set_transient( 'getpaid_paypal_sandbox_access_token', sanitize_text_field( urldecode( $data['access_token'] ) ), (int) $data['expires_in'] );
857
+                    getpaid_admin()->show_success( __( 'Successfully connected your PayPal sandbox account', 'invoicing' ) );
858
+                } else {
859
+                    wpinv_update_option( 'paypal_email', sanitize_email( $user_info->emails[0]->value ) );
860
+                    wpinv_update_option( 'paypal_refresh_token', sanitize_text_field( urldecode( $data['refresh_token'] ) ) );
861
+                    set_transient( 'getpaid_paypal_access_token', sanitize_text_field( urldecode( $data['access_token'] ) ), (int) $data['expires_in'] );
862
+                    getpaid_admin()->show_success( __( 'Successfully connected your PayPal account', 'invoicing' ) );
863
+                }
864
+            }
865
+        }
866
+
867
+        $redirect = empty( $data['redirect'] ) ? admin_url( 'admin.php?page=wpinv-settings&tab=gateways&section=paypal' ) : urldecode( $data['redirect'] );
868
+
869
+        if ( isset( $data['step'] ) ) {
870
+            $redirect = add_query_arg( 'step', $data['step'], $redirect );
871
+        }
872
+        wp_redirect( $redirect );
873
+        exit;
874
+    }
875 875
 
876 876
 }
Please login to merge, or discard this patch.
templates/payment-forms/elements/checkbox.php 1 patch
Indentation   +12 added lines, -12 removed lines patch added patch discarded remove patch
@@ -13,19 +13,19 @@
 block discarded – undo
13 13
 $label_class = sanitize_key( preg_replace( '/[^A-Za-z0-9_-]/', '-', $label ) );
14 14
 
15 15
 if ( ! empty( $required ) ) {
16
-	$label .= "<span class='text-danger'> *</span>";
16
+    $label .= "<span class='text-danger'> *</span>";
17 17
 }
18 18
 
19 19
 aui()->input(
20
-	array(
21
-		'type'      => 'checkbox',
22
-		'name'      => esc_attr( $id ),
23
-		'id'        => esc_attr( $element_id ),
24
-		'required'  => ! empty( $required ),
25
-		'label'     => $label,
26
-		'value'     => esc_attr__( 'Yes', 'invoicing' ),
27
-		'help_text' => empty( $description ) ? '' : wp_kses_post( $description ),
28
-		'class'     => $label_class
29
-	),
30
-	true
20
+    array(
21
+        'type'      => 'checkbox',
22
+        'name'      => esc_attr( $id ),
23
+        'id'        => esc_attr( $element_id ),
24
+        'required'  => ! empty( $required ),
25
+        'label'     => $label,
26
+        'value'     => esc_attr__( 'Yes', 'invoicing' ),
27
+        'help_text' => empty( $description ) ? '' : wp_kses_post( $description ),
28
+        'class'     => $label_class
29
+    ),
30
+    true
31 31
 );
Please login to merge, or discard this patch.
templates/payment-forms/elements/address.php 1 patch
Indentation   +26 added lines, -26 removed lines patch added patch discarded remove patch
@@ -10,7 +10,7 @@  discard block
 block discarded – undo
10 10
 defined( 'ABSPATH' ) || exit;
11 11
 
12 12
 if ( empty( $fields ) ) {
13
-	return;
13
+    return;
14 14
 }
15 15
 
16 16
 // A prefix for all ids (so that a form can be included in the same page multiple times).
@@ -18,12 +18,12 @@  discard block
 block discarded – undo
18 18
 
19 19
 // Prepare the user's country.
20 20
 if ( ! empty( $form->invoice ) ) {
21
-	$country = $form->invoice->get_country();
21
+    $country = $form->invoice->get_country();
22 22
 }
23 23
 
24 24
 if ( empty( $country ) ) {
25
-	$country = empty( $country ) ? getpaid_get_ip_country() : $country;
26
-	$country = empty( $country ) ? wpinv_get_default_country() : $country;
25
+    $country = empty( $country ) ? getpaid_get_ip_country() : $country;
26
+    $country = empty( $country ) ? wpinv_get_default_country() : $country;
27 27
 }
28 28
 
29 29
 // A prefix for all ids (so that a form can be included in the same page multiple times).
@@ -50,32 +50,32 @@  discard block
 block discarded – undo
50 50
 	<!-- Start Billing Address -->
51 51
 	<div class="getpaid-billing-address-wrapper">
52 52
 		<?php
53
-			$field_type = 'billing';
53
+            $field_type = 'billing';
54 54
 
55
-			wpinv_get_template( 'payment-forms/elements/address-fields.php', array( 'form' => $form, 'fields' => $fields, 'address_type' => $address_type, 'field_type' => $field_type, 'uniqid' => $uniqid, 'country' => $country ) );
55
+            wpinv_get_template( 'payment-forms/elements/address-fields.php', array( 'form' => $form, 'fields' => $fields, 'address_type' => $address_type, 'field_type' => $field_type, 'uniqid' => $uniqid, 'country' => $country ) );
56 56
 
57
-			do_action( 'getpaid_after_payment_form_billing_fields', $form );
58
-		?>
57
+            do_action( 'getpaid_after_payment_form_billing_fields', $form );
58
+        ?>
59 59
 	</div>
60 60
 	<!-- End Billing Address -->
61 61
 <?php endif; ?>
62 62
 
63 63
 <?php if ( 'both' === $address_type ) : ?>
64 64
 	<?php
65
-		aui()->input(
66
-			array(
67
-				'type'     => 'checkbox',
68
-				'name'     => 'same-shipping-address',
69
-				'id'       => "shipping-toggle$uniqid",
70
-				'required' => false,
71
-				'label'    => empty( $shipping_address_toggle ) ? esc_html__( 'Same billing & shipping address.', 'invoicing' ) : wp_kses_post( $shipping_address_toggle ),
72
-				'value'    => 1,
73
-				'checked'  => true,
74
-				'class'    => 'chkbox-same-shipping-address'
75
-			),
76
-			true
77
-		);
78
-	?>
65
+        aui()->input(
66
+            array(
67
+                'type'     => 'checkbox',
68
+                'name'     => 'same-shipping-address',
69
+                'id'       => "shipping-toggle$uniqid",
70
+                'required' => false,
71
+                'label'    => empty( $shipping_address_toggle ) ? esc_html__( 'Same billing & shipping address.', 'invoicing' ) : wp_kses_post( $shipping_address_toggle ),
72
+                'value'    => 1,
73
+                'checked'  => true,
74
+                'class'    => 'chkbox-same-shipping-address'
75
+            ),
76
+            true
77
+        );
78
+    ?>
79 79
 	<!-- Start Shipping Address Title -->
80 80
 	<h4 class="mb-3 getpaid-shipping-address-title">
81 81
 		<?php esc_html_e( 'Shipping Address', 'invoicing' ); ?>
@@ -87,12 +87,12 @@  discard block
 block discarded – undo
87 87
 	<!-- Start Shipping Address -->
88 88
 	<div class="getpaid-shipping-address-wrapper">
89 89
 		<?php
90
-			$field_type = 'shipping';
90
+            $field_type = 'shipping';
91 91
 
92
-			wpinv_get_template( 'payment-forms/elements/address-fields.php', array( 'form' => $form, 'fields' => $fields, 'address_type' => $address_type, 'field_type' => $field_type, 'uniqid' => $uniqid, 'country' => $country ) );
92
+            wpinv_get_template( 'payment-forms/elements/address-fields.php', array( 'form' => $form, 'fields' => $fields, 'address_type' => $address_type, 'field_type' => $field_type, 'uniqid' => $uniqid, 'country' => $country ) );
93 93
 
94
-			do_action( 'getpaid_after_payment_form_shipping_fields', $form );
95
-		?>
94
+            do_action( 'getpaid_after_payment_form_shipping_fields', $form );
95
+        ?>
96 96
 	</div>
97 97
 	<!-- End Shipping Address -->
98 98
 <?php endif; ?>
Please login to merge, or discard this patch.
includes/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-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.